{"version":3,"sources":["webpack://@verndale/toolkit/./src/js/modules/search/hooks/useParams.ts","webpack://@verndale/toolkit/./src/js/modules/search/hooks/useFetch.ts","webpack://@verndale/toolkit/./src/js/modules/search/state/Context.tsx","webpack://@verndale/toolkit/./src/js/modules/search/hooks/useSearch.tsx","webpack://@verndale/toolkit/./src/js/modules/search/state/SearchProvider.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/SearchInput.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/FacetsApplied.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/FacetsCategory.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/MobileSort.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/Facets.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/Pagination.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/ResultsCard.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/ResourceCard.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/BlogCard.tsx","webpack://@verndale/toolkit/./src/js/modules/search/components/ProductCard.tsx","webpack://@verndale/toolkit/./src/js/modules/search/App.tsx","webpack://@verndale/toolkit/./src/js/modules/search/index.tsx"],"names":["onPopState","updateQs","useRef","query","page","sort","selectedFacets","useMemo","_a","qs","__objRest","key","queryParams","setQueryParams","useState","updateQueryParams","params","useEffect","buildQueryString","p","qsValue","__spreadValues","newUrl","handlePopState","qsParams","updatedQueryParams","endpoint","data","setData","loading","setLoading","error","setError","__async","result","searchReducer","state","action","selectedfacetClone","category","__spreadProps","SearchContext","React","useContext","sortOrder","children","firstLoad","payload","dispatch","useParams","useFetch","updateQuery","updatePage","updateSort","addFacet","facet","removeFacet","clearFacets","placeholder","useSearch","search","setSearch","handleSubmint","e","clearLabel","facets","getFacetName","tag","processedFacets","item","name","label","tags","expanded","isExpanded","setIsExpanded","uuid","uuidv4","panelEl","togglePanel","el","inner","expand","animate","listEl","handleCheckboxChange","id","isSelected","labelSortRelevance","labelSortAlphabetical","labelSortRecent","getLabel","classNames","title","buttonLabel","labelSortBy","isDesktop","isOpen","isLoading","onClose","toggleFacetsPanel","open","panel","timeline","FacetsApplied","index","FacetsCategory","MobileSort","itemsPerPage","onPaginate","html","locale","resultsTotal","totalPages","goToPage","translate","pages","i","offsetLeft","offsetRight","url","heading","image","type","mastheadSubhead","articleDate","articleAuthor","prodName","solutionName","prodUrl","description","cardType","hasQuery","labelHeading","labelHeadingSummary","labelSearchSummary","labelFilter","labelFilterSort","labelFilterButton","labelFilterClear","labelNoResults","results","refEl","refLoading","setIsDesktop","isFasetPanelOpen","setIsFasetPanelOpen","breakpoint","breakpoints","handleResize","paths","sequence","path","handlePageChange","getSortOptions","sortOrderList","a","b","option","SearchInput","Facets","ResourceCard","BlogCard","ProductCard","ResultsCard","Pagination","_b","SearchProvider","SearchApp"],"mappings":"qqBAgGA,SArFmBA,GAA8C,CAC/D,MAAMC,G,EAAWC,UAAO,EAAK,EAGvB,CAAE,MAAAC,EAAO,KAAAC,EAAM,KAAAC,EAAM,eAAAC,CAAe,G,EAAIC,WAAQ,IAAM,CAE1D,MAAiDC,EAAAC,UAAS,SAAS,OAAQ,CACzE,kBAAmB,EACrB,CAAC,EAFO,OAAAN,EAAO,KAAAC,EAAM,KAAAC,CAjBzB,EAiBqDG,EAAnBF,EAAAI,EAAmBF,EAAnB,CAAtB,QAAO,OAAM,SAMrB,cAAO,KAAKF,CAAc,EAAE,QAAQK,GAAO,CACrC,OAAOL,EAAeK,IAAS,WACjCL,EAAeK,GAAO,CAACL,EAAeK,EAAc,EAExD,CAAC,EAEM,CAAE,MAAAR,EAAO,KAAAC,EAAM,KAAAC,EAAM,eAAAC,CAAe,CAC7C,EAAG,CAAC,CAAC,EAEC,CAACM,EAAaC,CAAc,G,EAAIC,YAAsB,CAC1D,MAAOX,EAAQ,GAAGA,IAAU,OAC5B,KAAM,SAAS,GAAGC,GAAM,GAAK,EAC7B,KAAMC,EAAO,GAAGA,IAAS,OACzB,eAAgBC,CAClB,CAAC,EAEKS,EAAqBC,GAAwB,CACjDH,EAAeG,CAAM,CACvB,EAEA,O,EAAAC,aAAU,IAAM,CAEd,MAAMC,EAAmB,IAAM,CAC7B,MAAiCV,EAAAI,EAAzB,gBAAAN,CA9Cd,EA8CuCE,EAANW,EAAAT,EAAMF,EAAN,CAAnB,mBAEFY,EAAUX,cACdY,IAAA,CAAC,EAAIF,GAAMb,GACX,CACE,OAAQ,GACR,iBAAkB,GAClB,YAAa,QACf,CACF,EAEMgB,EAAS,GAAG,SAAS,aAAa,SAAS,OAC/C,SAAS,WACRF,EAAU,IAAIA,IAAY,KAC7B,QAAQ,UAAU,CAAC,EAAG,GAAIE,CAAM,CAClC,EAEIrB,EAAS,QACXiB,EAAiB,EAEjBjB,EAAS,QAAU,EAEvB,EAAG,CAACW,CAAW,CAAC,G,EAEhBK,aAAU,IAAM,CACd,MAAMM,EAAiB,IAAM,CAC3B,MAAMC,EAAWf,UAAS,SAAS,OAAQ,CAAE,kBAAmB,EAAK,CAAC,EACtER,EAAS,QAAU,GAEnB,MAAMwB,EAAqB,CACzB,MAAOD,EAAS,MAAQ,GAAGA,EAAS,QAAU,GAC9C,KAAM,SAAS,GAAGA,EAAS,MAAM,GAAK,EACtC,KAAMA,EAAS,KAAO,GAAGA,EAAS,OAAS,GAC3C,eAAgBA,EAAS,eACpBA,EAAS,eACV,CAAC,CACP,EAEIxB,GACFA,EAAWyB,CAAkB,CAEjC,EAEA,cAAO,iBAAiB,WAAYF,CAAc,EAC3C,IAAM,OAAO,oBAAoB,WAAYA,CAAc,CACpE,EAAG,CAAC,CAAC,EAEE,CAAE,YAAAX,EAAa,kBAAAG,CAAkB,CAC1C,E,8MCrBA,SA3DiB,CACfW,EACA,CAAE,MAAAvB,EAAO,KAAAC,EAAM,KAAAC,EAAM,eAAAC,CAAe,IACjC,CACH,KAAM,CAACqB,EAAMC,CAAO,G,EAAId,YAA2B,CACjD,OAAQ,CAAC,EACT,aAAc,EACd,QAAS,CAAC,CACZ,CAAC,EACK,CAACe,EAASC,CAAU,G,EAAIhB,YAAS,EAAI,EACrC,CAACiB,EAAOC,CAAQ,G,EAAIlB,YAAS,EAAK,EAExC,O,EAAAG,aAAU,IAAM,CACgBgB,GAAA,wBAC5B,MAAMjB,EAAsB,CAAC,EAC7Bc,EAAW,EAAI,EACfE,EAAS,EAAK,EAEV7B,IACFa,EAAO,MAAQb,GAGbC,IACFY,EAAO,KAAOZ,GAGZC,IACFW,EAAO,KAAOX,GAGZC,GACF,OAAO,KAAKA,CAAc,EAAE,QAAQK,GAAO,CACzCK,EAAOL,GAAOL,EAAeK,EAC/B,CAAC,EAGH,GAAI,CACF,MAAMuB,EAAS,MAAM,MAAMR,EAAU,CACnC,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUV,CAAM,CAC7B,CAAC,EAEDY,EAAQ,MAAMM,EAAO,KAAK,CAAC,CAC7B,MAAC,CACCF,EAAS,EAAI,CACf,CAEAF,EAAW,EAAK,CAClB,CAAC,CAGH,EAAG,CAACJ,EAAUvB,EAAOC,EAAMC,EAAMC,CAAc,CAAC,EAEzC,CAAE,KAAAqB,EAAM,QAAAE,EAAS,MAAAE,CAAM,CAChC,E,uaCpBO,MAAMI,GAAgB,CAC3BC,EACAC,IACG,CACH,IAAIC,EACAC,EAEJ,OAAQF,EAAO,KAAM,CACnB,IAAK,gBACH,OAAOhB,IAAA,CAAC,EACHe,GACAC,EAAO,OAAO,EAErB,IAAK,eACH,OAAOG,EAAAnB,EAAA,CAAC,EACHe,GADE,CAEL,MAAOC,EAAO,QACd,KAAM,CACR,CAAC,EACH,IAAK,cACH,OAAOG,EAAAnB,EAAA,CAAC,EACHe,GADE,CAEL,KAAMC,EAAO,OACf,CAAC,EACH,IAAK,cACH,OAAOG,EAAAnB,EAAA,CAAC,EACHe,GADE,CAEL,KAAMC,EAAO,QACb,KAAM,CACR,CAAC,EACH,IAAK,YACH,OAAAC,EAAqB,KAAK,MAAM,KAAK,UAAUF,EAAM,cAAc,CAAC,EACpEG,EAAWD,EAAmBD,EAAO,QAAQ,WAAa,CAAC,EAC3DC,EAAmBD,EAAO,QAAQ,UAAY,CAC5C,GAAGE,EACHF,EAAO,QAAQ,KACjB,EAEOG,EAAAnB,EAAA,CAAC,EACHe,GADE,CAEL,eAAgBE,EAChB,KAAM,CACR,CAAC,EACH,IAAK,eACH,OAAAA,EAAqB,KAAK,MAAM,KAAK,UAAUF,EAAM,cAAc,CAAC,EAEpEE,EAAmBD,EAAO,QAAQ,UAAU,OAC1CC,EAAmBD,EAAO,QAAQ,UAAU,QAC1CA,EAAO,QAAQ,KACjB,EACA,CACF,EAEKC,EAAmBD,EAAO,QAAQ,UAAU,QAC/C,OAAOC,EAAmBD,EAAO,QAAQ,UAGpCG,EAAAnB,EAAA,CAAC,EACHe,GADE,CAEL,eAAgBE,EAChB,KAAM,CACR,CAAC,EACH,IAAK,eACH,OAAOE,EAAAnB,EAAA,CAAC,EACHe,GADE,CAEL,eAAgB,CAAC,EACjB,KAAM,CACR,CAAC,EACH,IAAK,WACH,OAAOI,EAAAnB,EAAA,CAAC,EACHe,GADE,CAEL,QAASC,EAAO,QAAQ,QACxB,aAAcA,EAAO,QAAQ,aAC7B,OAAQA,EAAO,QAAQ,MACzB,CAAC,EACH,QACE,OAAOD,CACX,CACF,EAEaK,EAAgBC,gBAAwC,CACnE,MAAO,CACL,KAAM,EACN,KAAM,YACN,OAAQ,CAAC,EACT,eAAgB,CAAC,EACjB,QAAS,CAAC,EACV,aAAc,EACd,QAAS,EACX,EACA,YAAa,IAAG,GAChB,WAAY,IAAG,GACf,WAAY,IAAG,GACf,SAAU,IAAG,GACb,YAAa,IAAG,GAChB,YAAa,IAAG,EAClB,CAAC,EC9ID,EAFkB,K,EAAMC,cAAWF,CAAa,E,yaC+EhD,SA3EI,CAAC,CAAE,SAAAf,EAAU,UAAAkB,EAAW,SAAAC,CAAS,IAAM,CACzC,MAAMC,EAAYJ,SAAa,EAAI,EAE7B1C,EAAa0C,cAAmBK,GAAyB,CAC7DC,EAAS,CAAE,KAAM,gBAAiB,QAAAD,CAAQ,CAAC,CAC7C,EAAG,CAAC,CAAC,EAEC,CACJ,YAAa,CAAE,MAAA5C,EAAO,KAAAC,EAAM,KAAAC,EAAM,eAAAC,CAAe,EACjD,kBAAAS,CACF,EAAIkC,GAAUjD,CAAU,EAElB,CAACoC,EAAOY,CAAQ,EAAIN,aAAiBP,GAAe,CACxD,MAAAhC,EACA,KAAAC,EACA,KAAMwC,EAAYA,EAAU,MAAM,GAAG,EAAE,GAAKvC,EAC5C,OAAQ,CAAC,EACT,eAAAC,EACA,QAAS,CAAC,EACV,aAAc,EACd,QAAS,EACX,CAAC,EAEK,CAAE,KAAAqB,EAAM,QAAAE,CAAQ,EAAIqB,GAASxB,EAAUU,CAAK,EAE5Ce,EAAeJ,GAAoB,CACvCC,EAAS,CAAE,KAAM,eAAgB,QAAAD,CAAQ,CAAC,CAC5C,EAEMK,EAAcL,GAClBC,EAAS,CAAE,KAAM,cAAe,QAAAD,CAAQ,CAAC,EAErCM,EAAcN,GAClBC,EAAS,CAAE,KAAM,cAAe,QAAAD,CAAQ,CAAC,EAErCO,EAAW,CAACf,EAAkBgB,IAClCP,EAAS,CAAE,KAAM,YAAa,QAAS,CAAE,SAAAT,EAAU,MAAAgB,CAAM,CAAE,CAAC,EAExDC,EAAc,CAACjB,EAAkBgB,IACrCP,EAAS,CAAE,KAAM,eAAgB,QAAS,CAAE,SAAAT,EAAU,MAAAgB,CAAM,CAAE,CAAC,EAE3DE,EAAc,IAAMT,EAAS,CAAE,KAAM,cAAe,CAAC,EAE3D,OAAAN,YAAgB,IAAM,CACfI,EAAU,QAUbA,EAAU,QAAU,IATpB/B,EAAkB,CAChB,MAAOqB,EAAM,MACb,KAAMA,EAAM,KACZ,KAAMA,EAAM,KACZ,eAAgBA,EAAM,cACxB,CAAC,EAEDY,EAAS,CAAE,KAAM,WAAY,QAASrB,CAAK,CAAC,EAIhD,EAAG,CAACA,CAAI,CAAC,EAGPe,gBAACD,EAAc,SAAd,CACC,MAAO,CACL,MAAOD,GAAAnB,GAAA,CAAC,EAAIe,GAAL,CAAY,QAAAP,CAAQ,CAAC,EAC5B,YAAAsB,EACA,WAAAC,EACA,WAAAC,EACA,SAAAC,EACA,YAAAE,EACA,YAAAC,CACF,CAAC,EAEAZ,CACH,CAEJ,E,iDC/BA,SA1C4C,CAAC,CAAE,YAAAa,CAAY,IAAM,CAC/D,KAAM,CACJ,MAAO,CAAE,MAAAvD,CAAM,EACf,YAAAgD,CACF,EAAIQ,EAAU,EACR,CAACC,EAAQC,CAAS,EAAInB,WAAevC,CAAK,EAE1C2D,EAAgBpB,cACnBqB,GAAwC,CACvCA,EAAE,eAAe,EACbH,GACFT,EAAYS,CAAM,CAEtB,EACA,CAACA,CAAM,CACT,EAEA,OACElB,gBAAC,QAAK,UAAU,gBAAgB,SAAUoB,GACxCpB,gBAAC,SACC,KAAK,OACL,YAAagB,EACb,UAAU,sBACV,MAAOE,EACP,SAAUG,GAAKF,EAAUE,EAAE,OAAO,KAAK,CAAC,CAC1C,EACCH,GACClB,gBAAC,UACC,KAAK,SACL,aAAW,QACX,UAAU,sBACV,QAAS,IAAMmB,EAAU,EAAE,CAAC,EAE5BnB,gBAAC,OAAI,KAAK,cAAc,EACtBA,gBAAC,OAAI,UAAU,QAAQ,CAAC,CAC1B,CACF,CAEJ,CAEJ,ECwBA,EA3DwD,CAAC,CAAE,WAAAsB,CAAW,IAAM,CAC1E,KAAM,CACJ,MAAO,CAAE,OAAAC,EAAQ,eAAA3D,CAAe,EAChC,YAAAkD,EACA,YAAAC,CACF,EAAIE,EAAU,EAEd,GAAI,CAAC,OAAO,KAAKrD,CAAc,EAAE,OAAQ,OAAO,KAEhD,MAAM4D,EAAe,CAAC3B,EAAkB5B,IAAgB,CACtD,MAAM4C,EAAQU,EAAO,KAAKV,GAASA,EAAM,OAAShB,CAAQ,EACpD4B,EAAMZ,GAAO,KAAK,KAAKA,GAASA,EAAM,KAAO5C,GAEnD,OAAOwD,GAAK,IACd,EAEMC,EAAkB,OAAO,KAAK9D,CAAc,EAC/C,IAAIK,GACIL,EAAeK,GACnB,IAAI0D,GAAQ,CACX,MAAMC,EAAOJ,EAAavD,EAAK0D,CAAI,EAEnC,OAAKC,EACE,CAAE,IAAA3D,EAAK,KAAA0D,EAAM,KAAAC,CAAK,EADP,IAEpB,CAAC,EACA,OAAOf,GAASA,IAAU,IAAI,CAClC,EACA,KAAK,EAER,OAAKa,EAAgB,OAGnB1B,gBAAC,OAAI,UAAU,wBAAwB,EACrCA,gBAAC,MAAG,UAAU,8BAA8B,EACzC0B,EAAgB,IAAIb,GACnBA,EACEb,gBAAC,MAAG,IAAKa,EAAM,IAAI,EACjBb,gBAAC,UACC,UAAU,mBACV,QAAS,IAAMc,EAAYD,EAAM,IAAKA,EAAM,IAAI,CAAC,EAEjDb,gBAAC,YACEa,EAAM,KACPb,gBAAC,OAAI,KAAK,cAAc,EACtBA,gBAAC,OAAI,UAAU,QAAQ,CAAC,CAC1B,CACF,CACF,CACF,EACE,IACN,CACF,EACAA,gBAAC,UAAO,UAAU,gCAAgC,QAASe,GACxDO,CACH,CACF,EA1BkC,IA4BtC,E,oOCyEA,SAjIkD,CAAC,CACjD,KAAAM,EACA,MAAAC,EACA,KAAAC,EACA,SAAAC,EAAW,EACb,IAAM,CAlBN,IAAAjE,EAmBE,KAAM,CACJ,MAAO,CAAE,eAAAF,CAAe,EACxB,SAAAgD,EACA,YAAAE,CACF,EAAIG,EAAU,EACR,CAACe,EAAYC,CAAa,EAAIjC,WAAe+B,CAAQ,EACrDG,EAAOlC,UAAc,K,EAAMmC,KAAO,EAAG,CAAC,CAAC,EACvCC,EAAUpC,SAA6B,IAAI,EAE3CqC,EAAcrC,cAClB,CAAOsC,EAAoBC,EAAyBC,IAAoBjD,GAAA,wBAClEiD,GACFD,EAAM,MAAM,QAAU,QAEtB,M,EAAME,KACJH,EACA,CACE,OAAQ,GAAGC,EAAM,gBACnB,EACA,CACE,SAAU,EACZ,CACF,EAAE,SAEFD,EAAG,MAAM,OAAS,SAElBA,EAAG,MAAM,OAAS,GAAGC,EAAM,iBAC3B,M,EAAME,KACJH,EACA,CACE,OAAQ,CACV,EACA,CACE,SAAU,EACZ,CACF,EAAE,SACFC,EAAM,MAAM,QAAU,OAE1B,CAAC,EACD,CAAC,CACH,EAEAvC,YAAgB,IAAM,CA7DxB,IAAAlC,EA8DI,MAAM4E,GAAS5E,EAAAsE,EAAQ,UAAR,YAAAtE,EAAiB,cAAc,MAC1CsE,EAAQ,SAAWM,GACrBL,EAAYD,EAAQ,QAASM,EAAQV,CAAU,CAEnD,EAAG,CAACA,CAAU,CAAC,EAEf,MAAMW,EAAuB3C,cAC1B4C,GAAe,CACTC,EAAWD,CAAE,EAGhB9B,EAAYc,EAAMgB,CAAE,EAFpBhC,EAASgB,EAAMgB,CAAE,CAIrB,EACA,CAAChF,CAAc,CACjB,EAEMiF,EAAa7C,cAChB4C,GACQ,CAAC,CAAChF,EAAegE,IAAS,CAAC,CAAChE,EAAegE,GAAM,SAASgB,CAAE,EAErE,CAAChF,CAAc,CACjB,EAEA,OAAKkE,EAAK,OAAOL,GAAO,CAAC,CAACA,EAAI,KAAK,EAAE,OAKnCzB,gBAAC,OAAI,UAAU,yBAAyB,EACtCA,gBAAC,UACC,KAAK,SACL,UAAU,mCACV,GAAI,WAAWkC,IACf,gBAAeF,EACf,QAAS,IAAMC,EAAc,CAACD,CAAU,EACxC,gBAAe,SAASE,KAExBlC,gBAAC,WACE6B,EAAO,IACP,CAAC,GAAC/D,EAAAF,EAAegE,KAAf,MAAA9D,EAAsB,SACvBkC,gBAAC,YAAK,IAAEpC,EAAegE,GAAM,OAAO,GAAC,CAEzC,EACA5B,gBAAC,OAAI,KAAK,cAAc,EACtBA,gBAAC,OAAI,UAAU,eAAe,CAAC,CACjC,CACF,EAEAA,gBAAC,OACC,IAAKoC,EACL,KAAK,SACL,UAAU,iCACV,GAAI,SAASF,IACb,kBAAiB,WAAWA,KAE5BlC,gBAAC,UACE8B,EACE,OAAOL,GAAO,CAAC,CAACA,EAAI,KAAK,EACzB,IAAIA,GACHzB,gBAAC,MAAG,IAAKyB,EAAI,EAAE,EACbzB,gBAAC,SAAM,UAAU,+BAA+B,EAC9CA,gBAAC,WACCA,gBAAC,SACC,KAAK,WACL,QAAS6C,EAAWpB,EAAI,EAAE,EAC1B,SAAU,IAAMkB,EAAqBlB,EAAI,EAAE,CAAC,CAC9C,EACCA,EAAI,IACP,EACAzB,gBAAC,YAAMyB,EAAI,KAAM,CACnB,CACF,CACD,CACL,CACF,CACF,EAnDO,IAqDX,E,8MCWA,SA1I0C,CAAC,CACzC,MAAAI,EACA,mBAAAiB,EACA,sBAAAC,EACA,gBAAAC,CACF,IAAM,CACJ,KAAM,CACJ,MAAO,CAAE,KAAArF,CAAK,EACd,WAAAgD,CACF,EAAIM,EAAU,EACR,CAACe,EAAYC,CAAa,EAAIjC,WAAe,EAAK,EAClDkC,EAAOlC,UAAc,K,EAAMmC,KAAO,EAAG,CAAC,CAAC,EACvCC,EAAUpC,SAA6B,IAAI,EAE3CqC,EAAcrC,cAClB,CAAOsC,EAAoBC,EAAyBC,IAAoBjD,GAAA,wBAClEiD,GACFD,EAAM,MAAM,QAAU,S,EAEtBE,KACEH,EACA,CACE,OAAQ,GAAGC,EAAM,gBACnB,EACA,CACE,SAAU,EACZ,CACF,IAEA,M,EAAME,KACJH,EACA,CACE,OAAQ,CACV,EACA,CACE,SAAU,EACZ,CACF,EAAE,SACFC,EAAM,MAAM,QAAU,OAE1B,CAAC,EACD,CAAC,CACH,EAEAvC,YAAgB,IAAM,CAzDxB,IAAAlC,EA0DI,MAAM4E,GAAS5E,EAAAsE,EAAQ,UAAR,YAAAtE,EAAiB,cAAc,MAC1CsE,EAAQ,SAAWM,GACrBL,EAAYD,EAAQ,QAASM,EAAQV,CAAU,CAEnD,EAAG,CAACA,CAAU,CAAC,EAEf,MAAMiB,EAAW,IAAM,CACrB,OAAQtF,EAAM,CACZ,IAAK,YACH,OAAOmF,EACT,IAAK,eACH,OAAOC,EACT,IAAK,SACH,OAAOC,EACT,QACE,OAAOF,CACX,CACF,EAEA,OACE9C,gBAAC,OAAI,UAAU,uDAAuD,EACpEA,gBAAC,UACC,KAAK,SACL,UAAU,mCACV,GAAI,WAAWkC,IACf,gBAAeF,EACf,QAAS,IAAMC,EAAc,CAACD,CAAU,EACxC,gBAAe,SAASE,KAExBlC,gBAAC,WACE6B,EAAM,IAAEoB,EAAS,CACpB,EACAjD,gBAAC,OAAI,KAAK,cAAc,EACtBA,gBAAC,OAAI,UAAU,eAAe,CAAC,CACjC,CACF,EAEAA,gBAAC,OACC,IAAKoC,EACL,KAAK,SACL,UAAU,iCACV,GAAI,SAASF,IACb,kBAAiB,WAAWA,KAE5BlC,gBAAC,UACCA,gBAAC,UACCA,gBAAC,UACC,UAAWkD,IAAW,CACpB,gCACA,wCACA,CACE,wCACE,CAACvF,GAAQA,IAAS,WACtB,CACF,CAAC,EACD,QAAS,IAAMgD,EAAW,WAAW,CAAC,EAErCmC,CACH,CACF,EACA9C,gBAAC,UACCA,gBAAC,UACC,UAAWkD,IAAW,CACpB,gCACA,wCACA,CACE,wCACEvF,IAAS,cACb,CACF,CAAC,EACD,QAAS,IAAMgD,EAAW,cAAc,CAAC,EAExCoC,CACH,CACF,EACA/C,gBAAC,UACCA,gBAAC,UACC,UAAWkD,IAAW,CACpB,gCACA,wCACA,CAAE,wCAAyCvF,IAAS,QAAS,CAC/D,CAAC,EACD,QAAS,IAAMgD,EAAW,QAAQ,CAAC,EAElCqC,CACH,CACF,CACF,CACF,CACF,CAEJ,E,snBC9BA,SA9FkC,CAAC,CACjC,MAAAG,EACA,WAAA7B,EACA,YAAA8B,EACA,YAAAC,EACA,mBAAAP,EACA,sBAAAC,EACA,gBAAAC,EACA,UAAAM,EACA,OAAAC,EACA,UAAAC,EACA,QAAAC,CACF,IAAM,CACJ,KAAM,CACJ,MAAO,CAAE,OAAAlC,CAAO,CAClB,EAAIN,EAAU,EAERmB,EAAUpC,SAA6B,IAAI,EAE3C0D,EAAoB1D,cAAyB2D,GAAkBpE,GAAA,wBA5CvE,IAAAzB,EA6CI,MAAM8F,EAAQxB,EAAQ,QAChBG,GAAQzE,EAAAsE,EAAQ,UAAR,YAAAtE,EAAiB,cAAc,yBAEzC8F,GAASrB,IACPoB,GACFvB,EAAQ,QAAQ,MAAM,WAAa,UAOnC,M,EAAMyB,KALW,CACf,CAACD,EAAO,CAAE,QAAS,CAAE,EAAG,CAAE,SAAU,EAAI,CAAC,EACzC,CAACrB,EAAO,CAAE,EAAG,CAAE,EAAG,CAAE,SAAU,GAAK,OAAQ,UAAW,CAAC,CACzD,EAEyB,CAAE,SAAU,EAAI,CAAC,IAO1C,M,EAAMsB,KALW,CACf,CAACtB,EAAO,CAAE,EAAG,MAAO,EAAG,CAAE,SAAU,GAAK,OAAQ,SAAU,CAAC,EAC3D,CAACqB,EAAO,CAAE,QAAS,CAAE,EAAG,CAAE,SAAU,EAAI,CAAC,CAC3C,EAEyB,CAAE,SAAU,EAAI,CAAC,EAAE,SAC5CxB,EAAQ,QAAQ,MAAM,WAAa,UAGzC,CAAC,EAAE,CAAC,CAAC,EAEL,OAAApC,YAAgB,IAAM,CACpB0D,EAAkBH,CAAM,CAC1B,EAAG,CAACA,CAAM,CAAC,EAGTvD,gBAAC,OACC,UAAWkD,IAAW,CACpB,iBACA,CAAE,yBAA0BM,CAAU,CACxC,CAAC,EACD,IAAKpB,GAELpC,gBAAC,OAAI,UAAU,sBAAsB,EACnCA,gBAAC,OAAI,UAAU,uBAAuB,EACpCA,gBAAC,KAAE,UAAU,sBAAsB,EAAEmD,CAAM,EAC1C,CAACG,GACAtD,gBAAC,UAAO,QAASyD,EAAS,aAAW,OAAO,EAC1CzD,gBAAC,OAAI,KAAK,cAAc,EACtBA,gBAAC,OAAI,UAAU,QAAQ,CAAC,CAC1B,CACF,CAEJ,EAEC,CAACsD,GAAatD,gBAAC8D,EAAA,CAAc,WAAYxC,EAAY,EAErDC,EAAO,IAAI,CAAC1B,EAAUkE,IACrB/D,gBAACgE,GAAAlE,GAAAnB,GAAA,CACC,IAAKkB,EAAS,KAAK,EACfA,GAFL,CAGC,SAAU,CAACkE,GACb,CACD,EAED/D,gBAACiE,GAAA,CACC,MAAOZ,EACP,mBAAoBP,EACpB,sBAAuBC,EACvB,gBAAiBC,EACnB,EAEAhD,gBAAC,UAAO,KAAK,SAAS,UAAU,mBAAmB,QAASyD,GAC1DzD,gBAAC,YAAMoD,CAAY,CACrB,CACF,CACF,CAEJ,ECrBA,GAxF8C,CAAC,CAC7C,aAAAc,EACA,WAAAC,CACF,IAAM,CAEJ,MAAMC,EAAO,SAAS,cAAc,MAAM,EACpCC,EAASD,GAAM,aAAa,SAAW,KAEvC,CACJ,MAAO,CAAE,KAAA1G,EAAM,aAAA4G,CAAa,EAC5B,WAAA5D,CACF,EAAIO,EAAU,EAERsD,EAAa,KAAK,KAAKD,EAAeJ,CAAY,EAElDM,EAAY9G,GAAiB,CACjCyG,EAAW,EACXzD,EAAWhD,CAAI,CACjB,EAEA,GAAI6G,EAAa,EACf,OAAO,KAGT,MAAME,EAAaxG,GACVA,EAAI,eAAeoG,CAAM,EAwClC,OACErE,gBAAC,OAAI,UAAU,aAAa,aAAW,YAAY,EACjDA,gBAAC,UACC,UAAU,mBACV,aAAW,qBACX,SAAUtC,IAAS,EACnB,QAAS,IAAM8G,EAAS9G,EAAO,CAAC,CAAC,EAEjCsC,gBAAC,WAAK,CACR,GA9CiB,IAAM,CACzB,MAAM0E,EAAQ,CAAC,EAEf,QAASC,EAAI,EAAGA,GAAKJ,EAAYI,IAAK,CACpC,GAAIA,EAAI,GAAKA,EAAIJ,EAAY,CAC3B,MAAMK,EAAalH,IAAS,EAAI,EAAI,EAC9BmH,EAAcnH,IAAS6G,EAAa,EAAI,EAU9C,IARII,IAAMjH,EAAOkH,EAAa,GAAKD,IAAMjH,EAAOmH,EAAc,IAC5DH,EAAM,KACJ1E,gBAAC,QAAK,UAAU,wBAAwB,IAAK,aAAa2E,KAAK,KAE/D,CACF,EAGEA,EAAIjH,EAAOkH,GAAcD,EAAIjH,EAAOmH,EACtC,QAEJ,CAEAH,EAAM,KACJ1E,gBAAC,UACC,IAAK,QAAQ2E,IACb,UAAU,qBACV,aAAY,aAAaA,IACzB,eAAcA,IAAMjH,EAAO,OAAS,OACpC,QAAS,IAAM8G,EAASG,CAAC,CAAC,EAEzBF,EAAUE,CAAC,CACd,CACF,CACF,CAEA,OAAOD,CACT,GAYkB,EACd1E,gBAAC,UACC,UAAU,mBACV,aAAW,iBACX,SAAUtC,IAAS6G,EACnB,QAAS,IAAMC,EAAS9G,EAAO,CAAC,CAAC,EAEjCsC,gBAAC,WAAK,CACR,CACF,CAEJ,EC7EA,GAT4C,CAAC,CAAE,IAAA8E,EAAK,QAAAC,EAAS,KAAAjD,CAAK,IAE9D9B,gBAAC,KAAE,KAAM8E,EAAK,UAAU,cAAc,EACpC9E,gBAAC,MAAG,UAAU,uBAAuB,EAAE+E,CAAQ,EAC/C/E,gBAAC,KAAE,UAAU,2BAA2B,EAAE8B,EAAK,KAAK,IAAI,CAAE,CAC5D,EC2BJ,GA3B8C,CAAC,CAC7C,IAAAgD,EACA,MAAAE,EACA,QAAAD,EACA,KAAAE,CACF,IAEIjF,gBAAC,KAAE,KAAM8E,EAAK,UAAU,YAAY,EAClC9E,gBAAC,OAAI,UAAU,SAAS,EACtBA,gBAAC,eACCA,gBAAC,UAAO,OAAQgF,GAAO,KAAM,KAAK,YAAY,CAAC,EAC/ChF,gBAAC,OACC,IAAKgF,GAAO,IACZ,MAAM,MACN,OAAO,MACP,IAAKA,GAAO,WAAW,CACzB,CACF,CACF,EACAhF,gBAAC,OAAI,UAAU,qBAAqB,EAClCA,gBAAC,MAAG,UAAU,qBAAqB,EAAE+E,CAAQ,EAC7C/E,gBAAC,KAAE,UAAU,yBAAyB,EAAEiF,CAAK,CAC/C,CACF,EC0BJ,GA7CsC,CAAC,CACrC,IAAAH,EACA,MAAAE,EACA,QAAAD,EACA,gBAAAG,EACA,KAAApD,EACA,YAAAqD,EACA,cAAAC,CACF,IAEIpF,gBAAC,KAAE,KAAM8E,EAAK,UAAU,oBAAoB,EAC1C9E,gBAAC,OAAI,UAAU,SAAS,EACtBA,gBAAC,eACCA,gBAAC,UAAO,OAAQgF,GAAO,KAAM,KAAK,YAAY,CAAC,EAC/ChF,gBAAC,OACC,IAAKgF,GAAO,IACZ,MAAM,MACN,OAAO,MACP,IAAKA,GAAO,WAAW,CACzB,CACF,CACF,EACAhF,gBAAC,OAAI,UAAU,oBAAoB,EAClC8B,EAAK,OAAS,GACT9B,gBAAC,MAAG,UAAU,iBAAiB,EAC5B8B,EAAK,IAAIL,GACRzB,gBAAC,MAAG,IAAKyB,EAAK,UAAU,gBAAgB,EACrCA,CACH,CACD,CACH,EAEJzB,gBAAC,MAAG,UAAU,oBAAoB,EAAE+E,CAAQ,EAC5C/E,gBAAC,OAAI,UAAU,oBAAoB,EACjCA,gBAAC,OAAI,UAAU,sBAAsB,EACrCA,gBAAC,KAAE,UAAU,qBAAqB,EAACA,gBAAC,KAAE,KAAM8E,EAAK,UAAU,EAAE,EAAEM,CAAc,CAAI,EACjFpF,gBAAC,KAAE,UAAU,qBAAqB,EAAEmF,CAAY,CAChD,CACF,EACAnF,gBAAC,KAAE,UAAU,wBAAwB,EAAEkF,CAAgB,CACzD,CACF,ECRJ,GAvC4C,CAAC,CAC3C,IAAAJ,EACA,SAAAO,EACA,aAAAC,EACA,QAAAC,EACA,YAAAC,EACA,KAAA1D,CACF,IAEI9B,gBAAC,KAAE,KAAM8E,EAAK,UAAU,cAAc,EACpC9E,gBAAC,OAAI,UAAU,uBAAuB,EACtCA,gBAAC,OAAI,UAAU,uBACbA,gBAAC,MAAG,UAAU,wBAAwB,EAAEsF,CAAa,EACrDtF,gBAAC,MAAG,UAAU,uBAAuB,EAAEqF,CAAS,CAClD,EACErF,gBAAC,OAAI,UAAU,uBAAuB,EACpCA,gBAAC,OAAI,UAAU,yBAAyB,CACxC,CACF,EACAA,gBAAC,KAAE,UAAU,2BAA2B,EAAEwF,CAAY,EAErD1D,EAAK,OAAS,GACf9B,gBAAC,KAAE,UAAU,8BAA6B,UAAQ,EAEjD8B,EAAK,OAAS,GACX9B,gBAAC,MAAG,UAAU,oBAAoB,EAC/B8B,EAAK,IAAIL,GACRzB,gBAAC,MAAG,IAAKyB,EAAK,UAAU,mBAAmB,EACzCzB,gBAAC,KAAE,KAAMuF,GAAU9D,CAAI,CACzB,CACD,CACH,CAGN,CACF,E,yVCgNJ,SA1NsC,CAAC,CACrC,SAAAgE,EACA,UAAAvF,EAAY,gCACZ,SAAAwF,EACA,YAAA1E,EACA,aAAAkD,EACA,aAAAyB,EACA,oBAAAC,EACA,mBAAAC,EACA,YAAAxC,EACA,YAAAyC,EACA,gBAAAC,EACA,kBAAAC,EACA,iBAAAC,EACA,mBAAAnD,EACA,sBAAAC,EACA,gBAAAC,EACA,eAAAkD,CACF,IAAM,CACJ,KAAM,CACJ,MAAO,CAAE,QAAA/G,EAAS,MAAA1B,EAAO,KAAAE,EAAM,aAAA2G,EAAc,QAAA6B,CAAQ,EACrD,WAAAxF,EACF,EAAIM,EAAU,EACRmF,EAAQpG,SAA6B,IAAI,EACzCqG,EAAarG,SAA4B,IAAI,EAC7C,CAACsD,GAAWgD,EAAY,EAAItG,WAAe,EAAK,EAChD,CAACuG,GAAkBC,EAAmB,EAAIxG,WAAe,EAAK,EAC9DyG,EAAa,OAAO,WAAW,eAAeC,iBAAwB,EAE5E1G,YAAgB,IAAM,CACpB,MAAM2G,EAAe,IAAM,CACzBL,GAAaG,EAAW,OAAO,CACjC,EAEA,OAAAE,EAAa,EACbF,EAAW,iBAAiB,SAAUE,CAAY,EAE3C,IAAM,CACXF,EAAW,oBAAoB,SAAUE,CAAY,CACvD,CACF,EAAG,CAAC,CAAC,EAEL3G,YAAgB,IAAM,CA9ExB,IAAAlC,EA+EI,MAAM8I,GAAQ9I,EAAAuI,EAAW,UAAX,YAAAvI,EAAoB,iBAAiB,QAEnD,GAAI8I,EAAO,CACT,MAAMC,EAA+B,CAAC,EAEtCD,EAAM,QAAQE,IAAQ,CACpBD,EAAS,KAAK,CACZC,GACA,CAAE,MAAO,CAAC,EAAG,CAAC,CAAE,EAChB,CAAE,SAAU,EAAG,GAAI,OAAQ,OAAQ,SAAU,CAC/C,CAAC,CACH,CAAC,G,EAEDjD,KAASgD,EAAU,CACjB,SAAU,IACV,SAAU,EACV,UAAW,YACX,OAAQ,GACV,CAAC,CACH,CACF,EAAG,CAACR,EAAW,QAASlH,CAAO,CAAC,EAEhC,MAAM4H,GAAmB,IAAM,CACzBX,EAAM,SACRA,EAAM,QAAQ,eAAe,CAAE,SAAU,QAAS,CAAC,CAEvD,EAEMY,GAAiBhH,cAAkB,IAAM,CAC7C,MAAMiH,EAAgB/G,EAAU,MAAM,GAAG,EAgBzC,MAfgB,CACd,CACE,MAAO,YACP,MAAO,GAAGmD,KAAeP,GAC3B,EACA,CACE,MAAO,eACP,MAAO,GAAGO,KAAeN,GAC3B,EACA,CACE,MAAO,SACP,MAAO,GAAGM,KAAeL,GAC3B,CACF,EAGG,KACC,CAACkE,EAAGC,IACFF,EAAc,QAAQC,EAAE,MAAM,KAAK,CAAC,EACpCD,EAAc,QAAQE,EAAE,MAAM,KAAK,CAAC,CACxC,EACC,IAAIC,GACHpH,gBAAC,UAAO,IAAKoH,EAAO,MAAO,MAAOA,EAAO,KAAK,EAC3CA,EAAO,KACV,CACD,CACL,EAAG,CAAC,CAAC,EAEL,OACEpH,gBAAC,OAAI,IAAKoG,GACPT,GACC3F,gBAAC,OAAI,UAAU,gBAAgB,EAC7BA,gBAAC,MAAG,UAAU,iBAAiB,EAAE2F,CAAa,GAC5ClI,GAAU,CAAC0B,GAAW1B,IACtBuC,gBAAC,KAAE,UAAU,oBAAoB,EAC9B4F,GACG,QAAQ,YAAanI,GACtB,QAAQ,UAAW6G,EAAa,SAAS,CAAC,CAC/C,CAEJ,EAGDoB,IAAa,QAAU1F,gBAACqH,GAAA,CAAY,YAAarG,EAAa,EAE/DhB,gBAAC,OAAI,UAAU,mBAAmB,EAChCA,gBAACsH,GAAA,CACC,MAAOxB,EACP,YAAaE,EACb,WAAYC,EACZ,YAAa5C,EACb,mBAAoBP,EACpB,sBAAuBC,EACvB,gBAAiBC,EACjB,UAAWM,GACX,OAAQiD,GACR,UAAWpH,EACX,QAAS,IAAMqH,GAAoB,EAAK,CAAC,CAC3C,EAEAxG,gBAAC,OAAI,UAAU,iBAAiB,EAC7B,CAACb,GACAa,2BAAA,KACEA,gBAAC,OAAI,UAAU,qBAAqB,EAClCA,gBAAC,KAAE,UAAU,uBAAuB,EACjC6F,EACE,QAAQ,UAAWM,EAAQ,OAAO,SAAS,CAAC,EAC5C,QAAQ,UAAW7B,EAAa,SAAS,CAAC,CAC/C,EACChB,GACCtD,gBAAC,UACC,UAAU,WACV,MAAOrC,EACP,SAAU0D,GAAKV,GAAWU,EAAE,OAAO,KAAK,CAAC,EAExC2F,GAAe,CAClB,EAEAhH,gBAAC,UACC,UAAU,0BACV,QAAS,IAAMwG,GAAoB,EAAI,CAAC,EAEvCT,CACH,CAEJ,EAEA/F,gBAAC8D,EAAA,CAAc,WAAYmC,EAAkB,EAE5C,CAACE,EAAQ,QAAU1I,GAClBuC,gBAAC,OACC,UAAU,qBACV,wBAAyB,CACvB,OAAQkG,EAAe,QAAQ,YAAazI,CAAK,CACnD,CAAC,CACF,EAGF,CAAC,CAAC0I,EAAQ,QACTnG,2BAAA,KACEA,gBAAC,OACC,UAAWkD,IAAW,CACpB,uBACA,CAAE,sBAAuBuC,IAAa,UAAW,EACjD,CAAE,mBAAoBA,IAAa,SAAU,EAC7C,CAAE,GAAIA,IAAa,SAAU,CAC/B,CAAC,CAAC,EAEDU,EAAQ,IAAI3G,GACXiG,IAAa,WAAczF,gBAACuH,GAAA5I,EAAA,CAAa,IAAKa,EAAO,EAAE,EAAMA,CAAC,CAAO,EAAMiG,IAAa,UAAYzF,gBAACwH,GAAA7I,EAAA,CAAS,IAAKa,EAAO,EAAE,EAAMA,CAAC,CAAO,EAAMiG,IAAa,UAAazF,gBAACyH,GAAA9I,EAAA,CAAY,IAAKa,EAAO,EAAE,EAAMA,CAAC,CAAO,EAEjNQ,gBAAC0H,GAAA/I,EAAA,CAAY,IAAKa,EAAO,EAAE,EAAMA,CAAC,CAAO,CAC7C,CAEF,EACAQ,gBAAC2H,GAAA,CACC,aAAc,SAASzD,CAAY,EACnC,WAAY6C,GACd,CACF,CAEJ,EAGD5H,GACCa,gBAAC,OAAI,UAAU,iBAAiB,EAC9BA,gBAAC,OACC,QAAQ,YACR,MAAM,6BACN,IAAKqG,GAELrG,gBAAC,QAAK,EAAE,8DAA8D,CAAC,EACvEA,gBAAC,QAAK,EAAE,mEAAmE,CAAC,EAC5EA,gBAAC,QAAK,EAAE,oEAAoE,CAAC,EAC7EA,gBAAC,QAAK,EAAE,mEAAmE,CAAC,EAC5EA,gBAAC,QAAK,EAAE,mDAAmD,CAAC,CAC9D,CACF,CAEJ,CACF,CACF,CAEJ,E,wfC5OA,SARuClC,GAA4B,CAA5B,IAAA8J,EAAA9J,EAAE,UAAAkB,CARzC,EAQuC4I,EAAetJ,EAAAN,GAAf4J,EAAe,CAAb,aACvC,OACE5H,gBAAC6H,GAAA,CAAe,SAAU7I,EAAU,UAAWV,EAAO,SAAS,EAC7D0B,gBAAC8H,GAAAnJ,GAAA,GAAcL,EAAQ,CACzB,CAEJ,C","file":"scripts/6531.d443d5cb88bebed2c74d.js","sourcesContent":["import { useRef, useMemo, useState, useEffect } from 'react';\nimport qs from 'qs';\nimport { SelectedFacetsProps } from '../state/Context';\n\nexport type QueryParams = {\n query?: string;\n page: number;\n sort?: string;\n selectedFacets: SelectedFacetsProps;\n};\n\nconst useParams = (onPopState: (params: QueryParams) => void) => {\n const updateQs = useRef(false);\n\n // Get initial params from query string\n const { query, page, sort, selectedFacets } = useMemo(() => {\n // Parse the query string\n const { query, page, sort, ...selectedFacets } = qs.parse(location.search, {\n ignoreQueryPrefix: true\n });\n\n // If the value of the param is a string,\n // convert it to a single item array\n Object.keys(selectedFacets).forEach(key => {\n if (typeof selectedFacets[key] === 'string') {\n selectedFacets[key] = [selectedFacets[key] as string];\n }\n });\n\n return { query, page, sort, selectedFacets };\n }, []);\n\n const [queryParams, setQueryParams] = useState({\n query: query ? `${query}` : undefined,\n page: parseInt(`${page}`) || 1,\n sort: sort ? `${sort}` : undefined,\n selectedFacets: selectedFacets as SelectedFacetsProps\n });\n\n const updateQueryParams = (params: QueryParams) => {\n setQueryParams(params);\n };\n\n useEffect(() => {\n // Build the query string and update the URL\n const buildQueryString = () => {\n const { selectedFacets, ...p } = queryParams;\n\n const qsValue = qs.stringify(\n { ...p, ...selectedFacets },\n {\n encode: false,\n encodeValuesOnly: true,\n arrayFormat: 'repeat'\n }\n );\n\n const newUrl = `${location.protocol}//${location.host}${\n location.pathname\n }${qsValue ? `?${qsValue}` : ''}`;\n history.pushState({}, '', newUrl);\n };\n\n if (updateQs.current) {\n buildQueryString();\n } else {\n updateQs.current = true;\n }\n }, [queryParams]);\n\n useEffect(() => {\n const handlePopState = () => {\n const qsParams = qs.parse(location.search, { ignoreQueryPrefix: true });\n updateQs.current = false;\n\n const updatedQueryParams = {\n query: qsParams.query ? `${qsParams.query}` : '',\n page: parseInt(`${qsParams.page}`) || 1,\n sort: qsParams.sort ? `${qsParams.sort}` : '',\n selectedFacets: qsParams.selectedFacets\n ? (qsParams.selectedFacets as SelectedFacetsProps)\n : {}\n };\n\n if (onPopState) {\n onPopState(updatedQueryParams);\n }\n };\n\n window.addEventListener('popstate', handlePopState);\n return () => window.removeEventListener('popstate', handlePopState);\n }, []);\n\n return { queryParams, updateQueryParams };\n};\n\nexport default useParams;\n","import { useState, useEffect } from 'react';\nimport { FacetsData } from '../components/Facets';\nimport { SearchStateProps } from '../state/Context';\n\ntype FetchParams = {\n [key: string]: string | number | string[];\n};\n\ntype EndpointResponse = {\n facets: FacetsData;\n resultsTotal: number;\n results: any[];\n};\n\nconst useFetch = (\n endpoint: string,\n { query, page, sort, selectedFacets }: SearchStateProps\n) => {\n const [data, setData] = useState({\n facets: [],\n resultsTotal: 0,\n results: []\n });\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n\n useEffect(() => {\n const fetchData = async () => {\n const params: FetchParams = {};\n setLoading(true);\n setError(false);\n\n if (query) {\n params.query = query;\n }\n\n if (page) {\n params.page = page;\n }\n\n if (sort) {\n params.sort = sort;\n }\n\n if (selectedFacets) {\n Object.keys(selectedFacets).forEach(key => {\n params[key] = selectedFacets[key];\n });\n }\n\n try {\n const result = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(params)\n });\n\n setData(await result.json());\n } catch (error) {\n setError(true);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [endpoint, query, page, sort, selectedFacets]);\n\n return { data, loading, error };\n};\n\nexport default useFetch;\n","import * as React from 'react';\n\nexport type FacetProps = {\n id: string;\n name: string;\n count: number;\n};\n\nexport type FacetCategoryProps = {\n name: string;\n label: string;\n tags: FacetProps[];\n};\n\nexport type SelectedFacetsProps = {\n [category: string]: string[];\n};\n\nexport type SearchStateProps = {\n query?: string;\n page: number;\n sort: string;\n facets: FacetCategoryProps[];\n selectedFacets: SelectedFacetsProps;\n results: any[];\n resultsTotal: number;\n loading: boolean;\n};\n\ntype SearchContextProps = {\n state: SearchStateProps;\n updateQuery: (query: string) => void;\n updatePage: (page: number) => void;\n updateSort: (sort: string) => void;\n addFacet: (category: string, facet: string) => void;\n removeFacet: (category: string, facet: string) => void;\n clearFacets: () => void;\n};\n\ntype SearchActionType =\n | 'UPDATE_PARAMS'\n | 'UPDATE_QUERY'\n | 'UPDATE_PAGE'\n | 'UPDATE_SORT'\n | 'ADD_FACET'\n | 'REMOVE_FACET'\n | 'CLEAR_FACETS'\n | 'SET_DATA';\n\ntype SearchAction = { type: SearchActionType; payload?: any };\n\nexport const searchReducer = (\n state: SearchStateProps,\n action: SearchAction\n) => {\n let selectedfacetClone: SelectedFacetsProps;\n let category: string[];\n\n switch (action.type) {\n case 'UPDATE_PARAMS':\n return {\n ...state,\n ...action.payload\n };\n case 'UPDATE_QUERY':\n return {\n ...state,\n query: action.payload,\n page: 1\n };\n case 'UPDATE_PAGE':\n return {\n ...state,\n page: action.payload\n };\n case 'UPDATE_SORT':\n return {\n ...state,\n sort: action.payload,\n page: 1\n };\n case 'ADD_FACET':\n selectedfacetClone = JSON.parse(JSON.stringify(state.selectedFacets));\n category = selectedfacetClone[action.payload.category] || [];\n selectedfacetClone[action.payload.category] = [\n ...category,\n action.payload.facet\n ];\n\n return {\n ...state,\n selectedFacets: selectedfacetClone,\n page: 1\n };\n case 'REMOVE_FACET':\n selectedfacetClone = JSON.parse(JSON.stringify(state.selectedFacets));\n\n selectedfacetClone[action.payload.category].splice(\n selectedfacetClone[action.payload.category].indexOf(\n action.payload.facet\n ),\n 1\n );\n\n if (!selectedfacetClone[action.payload.category].length) {\n delete selectedfacetClone[action.payload.category];\n }\n\n return {\n ...state,\n selectedFacets: selectedfacetClone,\n page: 1\n };\n case 'CLEAR_FACETS':\n return {\n ...state,\n selectedFacets: {},\n page: 1\n };\n case 'SET_DATA':\n return {\n ...state,\n results: action.payload.results,\n resultsTotal: action.payload.resultsTotal,\n facets: action.payload.facets\n };\n default:\n return state;\n }\n};\n\nexport const SearchContext = React.createContext({\n state: {\n page: 1,\n sort: 'relevance',\n facets: [],\n selectedFacets: {},\n results: [],\n resultsTotal: 0,\n loading: false\n },\n updateQuery: () => undefined,\n updatePage: () => undefined,\n updateSort: () => undefined,\n addFacet: () => undefined,\n removeFacet: () => undefined,\n clearFacets: () => undefined\n});\n","import { useContext } from 'react';\nimport { SearchContext } from '../state/Context';\n\nconst useSearch = () => useContext(SearchContext);\n\nexport default useSearch;\n","import * as React from 'react';\nimport { useFetch, useParams } from '../hooks';\nimport { QueryParams } from '../hooks/useParams';\nimport { SearchContext, searchReducer } from './Context';\n\nconst SearchProvider: React.FC<\n { endpoint: string; sortOrder: string | undefined } & React.PropsWithChildren\n> = ({ endpoint, sortOrder, children }) => {\n const firstLoad = React.useRef(true);\n\n const onPopState = React.useCallback((payload: QueryParams) => {\n dispatch({ type: 'UPDATE_PARAMS', payload });\n }, []);\n\n const {\n queryParams: { query, page, sort, selectedFacets },\n updateQueryParams\n } = useParams(onPopState);\n\n const [state, dispatch] = React.useReducer(searchReducer, {\n query,\n page,\n sort: sortOrder ? sortOrder.split(',')[0] : sort,\n facets: [],\n selectedFacets,\n results: [],\n resultsTotal: 0,\n loading: false\n });\n\n const { data, loading } = useFetch(endpoint, state);\n\n const updateQuery = (payload: string) => {\n dispatch({ type: 'UPDATE_QUERY', payload });\n };\n\n const updatePage = (payload: number) =>\n dispatch({ type: 'UPDATE_PAGE', payload });\n\n const updateSort = (payload: string) =>\n dispatch({ type: 'UPDATE_SORT', payload });\n\n const addFacet = (category: string, facet: string) =>\n dispatch({ type: 'ADD_FACET', payload: { category, facet } });\n\n const removeFacet = (category: string, facet: string) =>\n dispatch({ type: 'REMOVE_FACET', payload: { category, facet } });\n\n const clearFacets = () => dispatch({ type: 'CLEAR_FACETS' });\n\n React.useEffect(() => {\n if (!firstLoad.current) {\n updateQueryParams({\n query: state.query,\n page: state.page,\n sort: state.sort,\n selectedFacets: state.selectedFacets\n });\n\n dispatch({ type: 'SET_DATA', payload: data });\n } else {\n firstLoad.current = false;\n }\n }, [data]);\n\n return (\n \n {children}\n \n );\n};\n\nexport default SearchProvider;\n","import * as React from 'react';\nimport { useSearch } from '../hooks';\n\ninterface ISearchInput {\n placeholder?: string;\n}\n\nconst SearchInput: React.FC = ({ placeholder }) => {\n const {\n state: { query },\n updateQuery\n } = useSearch();\n const [search, setSearch] = React.useState(query);\n\n const handleSubmint = React.useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n if (search) {\n updateQuery(search);\n }\n },\n [search]\n );\n\n return (\n
\n setSearch(e.target.value)}\n />\n {search && (\n setSearch('')}\n >\n \n \n \n \n )}\n \n );\n};\n\nexport default SearchInput;\n","import * as React from 'react';\nimport { useSearch } from '../hooks';\n\nexport type Facet = {\n id: string;\n name: string;\n};\n\nexport type SelectedFacets = {\n [key: string]: Facet[];\n};\n\nconst FacetsApplied: React.FC<{ clearLabel: string }> = ({ clearLabel }) => {\n const {\n state: { facets, selectedFacets },\n removeFacet,\n clearFacets\n } = useSearch();\n\n if (!Object.keys(selectedFacets).length) return null;\n\n const getFacetName = (category: string, key: string) => {\n const facet = facets.find(facet => facet.name === category);\n const tag = facet?.tags.find(facet => facet.id === key);\n\n return tag?.name;\n };\n\n const processedFacets = Object.keys(selectedFacets)\n .map(key => {\n return selectedFacets[key]\n .map(item => {\n const name = getFacetName(key, item);\n\n if (!name) return null;\n return { key, item, name };\n })\n .filter(facet => facet !== null);\n })\n .flat();\n\n if (!processedFacets.length) return null;\n\n return (\n
\n
    \n {processedFacets.map(facet =>\n facet ? (\n
  • \n removeFacet(facet.key, facet.item)}\n >\n \n {facet.name}\n \n \n \n \n \n
  • \n ) : null\n )}\n
\n \n
\n );\n};\n\nexport default FacetsApplied;\n","import * as React from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { animate } from 'motion';\nimport { FacetProps } from '../state/Context';\nimport { useSearch } from '../hooks';\n\nexport interface IFacetsCategory {\n name: string;\n label: string;\n tags: FacetProps[];\n expanded: boolean;\n}\n\nconst FacetsCategory: React.FC = ({\n name,\n label,\n tags,\n expanded = false\n}) => {\n const {\n state: { selectedFacets },\n addFacet,\n removeFacet\n } = useSearch();\n const [isExpanded, setIsExpanded] = React.useState(expanded);\n const uuid = React.useMemo(() => uuidv4(), []);\n const panelEl = React.useRef(null);\n\n const togglePanel = React.useCallback(\n async (el: HTMLDivElement, inner: HTMLUListElement, expand: boolean) => {\n if (expand) {\n inner.style.display = 'block';\n\n await animate(\n el,\n {\n height: `${inner.clientHeight}px`\n },\n {\n duration: 0.3\n }\n ).finished;\n\n el.style.height = 'auto';\n } else {\n el.style.height = `${inner.clientHeight}px`;\n await animate(\n el,\n {\n height: 0\n },\n {\n duration: 0.3\n }\n ).finished;\n inner.style.display = 'none';\n }\n },\n []\n );\n\n React.useEffect(() => {\n const listEl = panelEl.current?.querySelector('ul');\n if (panelEl.current && listEl) {\n togglePanel(panelEl.current, listEl, isExpanded);\n }\n }, [isExpanded]);\n\n const handleCheckboxChange = React.useCallback(\n (id: string) => {\n if (!isSelected(id)) {\n addFacet(name, id);\n } else {\n removeFacet(name, id);\n }\n },\n [selectedFacets]\n );\n\n const isSelected = React.useCallback(\n (id: string) => {\n return !!selectedFacets[name] && !!selectedFacets[name].includes(id);\n },\n [selectedFacets]\n );\n\n if (!tags.filter(tag => !!tag.count).length) {\n return null;\n }\n\n return (\n
\n setIsExpanded(!isExpanded)}\n aria-controls={`panel-${uuid}`}\n >\n
\n {label}{' '}\n {!!selectedFacets[name]?.length && (\n ({selectedFacets[name].length})\n )}\n
\n \n \n \n \n\n \n
    \n {tags\n .filter(tag => !!tag.count)\n .map(tag => (\n
  • \n \n
  • \n ))}\n
\n
\n \n );\n};\n\nexport default FacetsCategory;\n","import * as React from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { animate } from 'motion';\nimport { useSearch } from '../hooks';\nimport classNames from 'classnames';\n\nexport interface IMobileSort {\n label: string;\n labelSortRelevance: string;\n labelSortAlphabetical: string;\n labelSortRecent: string;\n}\n\nconst MobileSort: React.FC = ({\n label,\n labelSortRelevance,\n labelSortAlphabetical,\n labelSortRecent\n}) => {\n const {\n state: { sort },\n updateSort\n } = useSearch();\n const [isExpanded, setIsExpanded] = React.useState(false);\n const uuid = React.useMemo(() => uuidv4(), []);\n const panelEl = React.useRef(null);\n\n const togglePanel = React.useCallback(\n async (el: HTMLDivElement, inner: HTMLUListElement, expand: boolean) => {\n if (expand) {\n inner.style.display = 'block';\n\n animate(\n el,\n {\n height: `${inner.clientHeight}px`\n },\n {\n duration: 0.3\n }\n );\n } else {\n await animate(\n el,\n {\n height: 0\n },\n {\n duration: 0.3\n }\n ).finished;\n inner.style.display = 'none';\n }\n },\n []\n );\n\n React.useEffect(() => {\n const listEl = panelEl.current?.querySelector('ul');\n if (panelEl.current && listEl) {\n togglePanel(panelEl.current, listEl, isExpanded);\n }\n }, [isExpanded]);\n\n const getLabel = () => {\n switch (sort) {\n case 'relevance':\n return labelSortRelevance;\n case 'alphabetical':\n return labelSortAlphabetical;\n case 'recent':\n return labelSortRecent;\n default:\n return labelSortRelevance;\n }\n };\n\n return (\n
\n setIsExpanded(!isExpanded)}\n aria-controls={`panel-${uuid}`}\n >\n
\n {label} {getLabel()}\n
\n \n \n \n \n\n \n
    \n
  • \n updateSort('relevance')}\n >\n {labelSortRelevance}\n \n
  • \n
  • \n updateSort('alphabetical')}\n >\n {labelSortAlphabetical}\n \n
  • \n
  • \n updateSort('recent')}\n >\n {labelSortRecent}\n \n
  • \n
\n
\n \n );\n};\n\nexport default MobileSort;\n","import * as React from 'react';\nimport { timeline } from 'motion';\nimport { TimelineDefinition } from '@motionone/dom/types/timeline/types';\nimport FacetsApplied from '../components/FacetsApplied';\nimport FacetsCategory, { IFacetsCategory } from '../components/FacetsCategory';\nimport { useSearch } from '../hooks';\nimport MobileSort from './MobileSort';\nimport classNames from 'classnames';\n\nexport type FacetsData = Array;\n\ninterface IFacets {\n title: string;\n buttonLabel: string;\n clearLabel: string;\n labelSortBy: string;\n labelSortRelevance: string;\n labelSortAlphabetical: string;\n labelSortRecent: string;\n isDesktop: boolean;\n isOpen: boolean;\n isLoading: boolean;\n onClose: () => void;\n}\n\nconst Facets: React.FC = ({\n title,\n clearLabel,\n buttonLabel,\n labelSortBy,\n labelSortRelevance,\n labelSortAlphabetical,\n labelSortRecent,\n isDesktop,\n isOpen,\n isLoading,\n onClose\n}) => {\n const {\n state: { facets }\n } = useSearch();\n\n const panelEl = React.useRef(null);\n\n const toggleFacetsPanel = React.useCallback(async (open: boolean) => {\n const panel = panelEl.current;\n const inner = panelEl.current?.querySelector('.search__facets-inner');\n\n if (panel && inner) {\n if (open) {\n panelEl.current.style.visibility = 'visible';\n\n const sequence = [\n [panel, { opacity: 1 }, { duration: 0.2 }],\n [inner, { x: 0 }, { duration: 0.8, easing: 'ease-out' }]\n ] as TimelineDefinition;\n\n await timeline(sequence, { duration: 0.6 });\n } else {\n const sequence = [\n [inner, { x: '100%' }, { duration: 0.8, easing: 'ease-in' }],\n [panel, { opacity: 0 }, { duration: 0.2 }]\n ] as TimelineDefinition;\n\n await timeline(sequence, { duration: 0.6 }).finished;\n panelEl.current.style.visibility = 'hidden';\n }\n }\n }, []);\n\n React.useEffect(() => {\n toggleFacetsPanel(isOpen);\n }, [isOpen]);\n\n return (\n \n
\n
\n

{title}

\n {!isDesktop && (\n \n )}\n
\n\n {!isDesktop && }\n\n {facets.map((category, index) => (\n \n ))}\n\n \n\n \n
\n \n );\n};\n\nexport default Facets;\n","import * as React from 'react';\nimport { useSearch } from '../hooks';\n\ninterface PaginationProps {\n itemsPerPage: number;\n onPaginate: () => void;\n}\n\nconst Pagination: React.FC = ({\n itemsPerPage,\n onPaginate\n}) => {\n // Get locale from html element\n const html = document.querySelector('html');\n const locale = html?.getAttribute('lang') || 'en';\n\n const {\n state: { page, resultsTotal },\n updatePage\n } = useSearch();\n\n const totalPages = Math.ceil(resultsTotal / itemsPerPage);\n\n const goToPage = (page: number) => {\n onPaginate();\n updatePage(page);\n };\n\n if (totalPages < 2) {\n return null;\n }\n\n const translate = (key: number) => {\n return key.toLocaleString(locale);\n };\n\n const displayPages = () => {\n const pages = [];\n\n for (let i = 1; i <= totalPages; i++) {\n if (i > 1 && i < totalPages) {\n const offsetLeft = page === 1 ? 2 : 1;\n const offsetRight = page === totalPages ? 2 : 1;\n\n if (i === page + offsetLeft + 1 || i === page - offsetRight - 1) {\n pages.push(\n \n ...\n \n );\n }\n\n if (i > page + offsetLeft || i < page - offsetRight) {\n continue;\n }\n }\n\n pages.push(\n goToPage(i)}\n >\n {translate(i)}\n \n );\n }\n\n return pages;\n };\n\n return (\n \n );\n};\n\nexport default Pagination;\n","import * as React from 'react';\n\ninterface IResultsCard {\n url: string;\n heading: string;\n tags: Array;\n}\n\nconst ResultsCard: React.FC = ({ url, heading, tags }) => {\n return (\n \n

{heading}

\n

{tags.join(', ')}

\n
\n );\n};\n\nexport default ResultsCard;\n","import * as React from 'react';\n\ninterface IResourceCard {\n url: string;\n image: {\n description: string;\n png: string;\n webp: string;\n };\n heading: string;\n type: string;\n}\n\nconst ResourceCard: React.FC = ({\n url,\n image,\n heading,\n type\n}) => {\n return (\n \n
\n \n \n \n \n
\n
\n

{heading}

\n

{type}

\n
\n
\n );\n};\n\nexport default ResourceCard;\n","import * as React from 'react';\n\ninterface IBlogCard {\n url: string;\n image: {\n description: string;\n png: string;\n webp: string;\n };\n heading: string;\n blurb: string;\n tags: string[];\n articleDate: string;\n articleAuthor: string;\n mastheadSubhead: string;\n}\n\nconst BlogCard: React.FC = ({\n url,\n image,\n heading,\n mastheadSubhead,\n tags,\n articleDate,\n articleAuthor,\n}) => {\n return (\n \n
\n \n \n \n \n
\n
\n \n );\n};\n\nexport default BlogCard;\n","import * as React from 'react';\n\ninterface IProductCard {\n url: string;\n prodUrl: string;\n prodName: string;\n solutionName: string;\n description: string;\n tags: string[];\n}\n\nconst ProductCard: React.FC = ({\n url,\n prodName,\n solutionName,\n prodUrl,\n description,\n tags,\n}) => {\n return (\n \n \n \n );\n};\n\nexport default ProductCard;","import * as React from 'react';\nimport classNames from 'classnames';\nimport { timeline } from 'motion';\nimport { TimelineDefinition } from '@motionone/dom/types/timeline/types';\nimport { breakpoints } from '../../helpers/variables';\nimport SearchInput from './components/SearchInput';\nimport Facets from './components/Facets';\nimport FacetsApplied from './components/FacetsApplied';\nimport Pagination from './components/Pagination';\nimport ResultsCard from './components/ResultsCard';\nimport { useSearch } from './hooks';\nimport ResourceCard from './components/ResourceCard';\nimport BlogCard from './components/BlogCard';\nimport ProductCard from './components/ProductCard';\n\n\nexport interface AppProps {\n cardType: string;\n sortOrder: string;\n hasQuery?: string;\n placeholder?: string;\n itemsPerPage: string;\n labelHeading?: string;\n labelHeadingSummary?: string;\n labelSearchSummary: string;\n labelSortBy: string;\n labelFilter: string;\n labelFilterSort: string;\n labelFilterButton: string;\n labelFilterClear: string;\n labelSortRelevance: string;\n labelSortAlphabetical: string;\n labelSortRecent: string;\n labelNoResults: string;\n}\n\nconst SearchApp: React.FC = ({\n cardType,\n sortOrder = 'relevance,recent,alphabetical',\n hasQuery,\n placeholder,\n itemsPerPage,\n labelHeading,\n labelHeadingSummary,\n labelSearchSummary,\n labelSortBy,\n labelFilter,\n labelFilterSort,\n labelFilterButton,\n labelFilterClear,\n labelSortRelevance,\n labelSortAlphabetical,\n labelSortRecent,\n labelNoResults\n}) => {\n const {\n state: { loading, query, sort, resultsTotal, results },\n updateSort\n } = useSearch();\n const refEl = React.useRef(null);\n const refLoading = React.useRef(null);\n const [isDesktop, setIsDesktop] = React.useState(false);\n const [isFasetPanelOpen, setIsFasetPanelOpen] = React.useState(false);\n const breakpoint = window.matchMedia(`(min-width: ${breakpoints.desktop}px)`);\n\n React.useEffect(() => {\n const handleResize = () => {\n setIsDesktop(breakpoint.matches);\n };\n\n handleResize();\n breakpoint.addEventListener('change', handleResize);\n\n return () => {\n breakpoint.removeEventListener('change', handleResize);\n };\n }, []);\n\n React.useEffect(() => {\n const paths = refLoading.current?.querySelectorAll('path');\n\n if (paths) {\n const sequence: TimelineDefinition = [];\n\n paths.forEach(path => {\n sequence.push([\n path,\n { scale: [0, 1] },\n { duration: 1, at: '-0.2', easing: 'ease-in' }\n ]);\n });\n\n timeline(sequence, {\n duration: 1.5,\n endDelay: 2,\n direction: 'alternate',\n repeat: Infinity\n });\n }\n }, [refLoading.current, loading]);\n\n const handlePageChange = () => {\n if (refEl.current) {\n refEl.current.scrollIntoView({ behavior: 'smooth' });\n }\n };\n\n const getSortOptions = React.useCallback(() => {\n const sortOrderList = sortOrder.split(',');\n const options = [\n {\n value: 'relevance',\n label: `${labelSortBy} ${labelSortRelevance}`\n },\n {\n value: 'alphabetical',\n label: `${labelSortBy} ${labelSortAlphabetical}`\n },\n {\n value: 'recent',\n label: `${labelSortBy} ${labelSortRecent}`\n }\n ];\n\n return options\n .sort(\n (a, b) =>\n sortOrderList.indexOf(a.value.trim()) -\n sortOrderList.indexOf(b.value.trim())\n )\n .map(option => (\n \n ));\n }, []);\n\n return (\n
\n {labelHeading && (\n
\n

{labelHeading}

\n {(query || (!loading && query)) && (\n

\n {labelHeadingSummary\n ?.replace('[keyword]', query)\n .replace('[total]', resultsTotal.toString())}\n

\n )}\n
\n )}\n\n {hasQuery === 'true' && }\n\n
\n setIsFasetPanelOpen(false)}\n />\n\n
\n {!loading && (\n <>\n
\n

\n {labelSearchSummary\n .replace('[count]', results.length.toString())\n .replace('[total]', resultsTotal.toString())}\n

\n {isDesktop ? (\n updateSort(e.target.value)}\n >\n {getSortOptions()}\n \n ) : (\n setIsFasetPanelOpen(true)}\n >\n {labelFilterSort}\n \n )}\n
\n\n \n\n {!results.length && query && (\n
\n )}\n\n {!!results.length && (\n <>\n \n {results.map(result =>\n cardType === 'resource' ? () : cardType === 'landing' ?() : cardType === 'product' ? ()\n : \n (())\n )}\n \n
\n \n \n )}\n \n )}\n\n {loading && (\n
\n \n \n \n \n \n \n \n
\n )}\n
\n \n \n );\n};\n\nexport default SearchApp;","import * as React from 'react';\nimport SearchProvider from './state/SearchProvider';\nimport SearchApp, { AppProps } from './App';\n\ninterface SearchProps extends AppProps {\n endpoint: string;\n}\n\nconst Search: React.FC = ({ endpoint, ...params }) => {\n return (\n \n \n \n );\n};\n\nexport default Search;\n"],"sourceRoot":""}