{"version":3,"sources":["webpack:///./src/internal/views/SearchCloseActiveScreen.tsx","webpack:///./src/internal/utils/KeyPressHandler.ts","webpack:///./src/internal/views/SearchOverlayActiveScreen.tsx","webpack:///./src/exported/search/SearchGnavInputField.tsx"],"names":["CloseSearchIconWrapper","button","space16","space24","searchIconCloseWrapperClassnames","classnames","searchIconCloseClassnames","toggleSearchOverlay","this","props","translations","closeLabel","searchButtonLabel","className","onClick","title","ACCEPTABLE_KEYS_PRESSED","handleKeyPress","event","keys","func","params","preventDefault","includes","key","SearchOverlayWrapper","div","space40","space44","space12","info","acceptedKeys","ENTER","SPACEBAR","isSearchOverlayOpen","searchPlaceholderLabel","searchInputGnavFieldClassnames","svgIconSearchClassnames","circleIconSearchClassnames","magnifierIconSearchClassnames","searchOverlayWrapperClassnames","tabIndex","onKeyPress","keyPressed","role","hideGnavInput","name","inputLabel","inputType","placeholder","customClassName","pathMagnifierClassName","pathCircleClassName","NO_RESULTS","RESULTS_FOUND_OVERLAY","RESULTS_ADJUSTMENT","hideOverlay","inputRef","searchActiveScreenWrapper","searchInputGroupClassnames","searchInputWrapperClassnames","clearButtonClassnames","voiceSearchWrapperClassnames","onKeyUp","searchGnavInputFieldViewController","data","inputValue","searchUrl","config","searchParam","value","currentTarget","redirect","siteUrl","endecaRedirectUrl","enableContentSearch","handleChange","body","document","gnavSearchTagsBlock","classList","remove","add","html","documentElement","getResultType","numRecs","adjustedTerm","totalNumRecs","onOverlayScroll","e","scrollTop","current","blur","diContainer","get","minSearchLength","setMinSearchLength","setSearchDisplayFormat","searchDisplayFormat","setContentSearch","simpleGridConfig","contentSearchConfig","currentTab","resultsLoaded","items","dynamicArticles","articlesRecsNum","productRecsNum","setCurrentTab","productsTitle","storiesTitle","useSquareBrackets","Boolean","length","renderSearchGrid","currentTabId","onSelect","id","PRODUCTS","STORIES","SearchContentGrid","view","OVERLAY_ARTICLES","isLoading","searchTermSelected","limiteTypeaheadResults","typeaheadResults","contentRecs","SearchGrid","resultType","OVERLAY","searchConfig","clearInputValue","limitItems","disableInput","configSearch","searchClearLabel","viewAllResultsLabel","enableVoiceSearch","phrases","silenceTimeout","stopTimeout","enableAutoReplenishment","autoReplenishOptions","autoReplenishToggleType","bestSellerItems","toutItem","terms","favoriteProducts","hideProductPrice","hideProductBadge","showSubDisplayName","hideProductRating","enableNotifyMe","enableQuickView","enableMobileQuickView","ctaType","baseConfig","searchItems","enhancedSearchConfig","content","trendingTerms","articles","slice","searchTerm","voiceSearchConfig","searchInputFieldClassnames","onScroll","disabled","type","onChange","innerRef","autoFocus","href","showSearchResults","renderTabs","showEnhancedSearch","ENHANCED_SEARCH_OVERLAY","voiceSearch","enabled"],"mappings":"8qDASA,IAAMA,EAAyB,IAAOC,OAAV,kGAAG,CAAH,yFACjB,iBAAeC,QACb,iBAAeA,QAKtB,IACA,qBAAW,UAAX,CARsB,IASb,iBAAeC,QACb,iBAAeA,QAGZ,iBAAeD,UAW7BE,EAAmCC,EACrC,gCACA,gCAGEC,EAA4BD,EAAW,wBAAyB,wBAIzD,EAAb,qIACiB,IACDE,EAAwBC,KAAKC,MAA7BF,oBACFG,EAAeF,KAAKC,MAAMC,aACxBC,EAAkCD,EAAlCC,WAAYC,EAAsBF,EAAtBE,kBAEpB,OACI,gBAACZ,EAAsB,CACnBa,UAAWT,EACXU,QAASP,EAAmB,uBACbI,EADa,YACCC,GAAmB,eACnC,YACbG,MAAK,UAAKJ,EAAL,YAAmBC,IAExB,gBAAC,aAAU,CAACC,UAAWP,SAdvC,GAA6C,aAAhC,EAAuB,sBAFnC,oBAAU,CAAC,aAAc,sBACzB,YACY,G,IC5BDU,E,iDAdCC,EAAiB,SAC1BC,EACAC,EAEAC,EAEAC,GAEAH,EAAMI,iBACFH,EAAKI,SAASL,EAAMM,MACpBJ,EAAKC,I,4pBAIb,SAAYL,GACR,gBACA,eAFJ,CAAYA,MAAuB,KCEnC,IAAMS,EAAuB,IAAOC,IAAV,kGAAG,CAAH,uiBASL,iBAAeC,QAClB,iBAAeC,QACvB,IACA,IACA,qBAAW,UAAX,CAbgB,IAiBZ,IAEI,KASF,iBAAeC,QAEV,iBAAeA,QAGb,SAAOC,KAYT,iBAAeD,QAGZ,iBAAeA,SAWjCE,EAAe,CAACf,EAAwBgB,MAAOhB,EAAwBiB,UAWhE,EAAb,gCACI,WAAYxB,GAAwB,+BAC1BA,GAFd,6CAKiB,MAC4CD,KAAKC,MAAlDF,EADC,EACDA,oBAAqB2B,EADpB,EACoBA,oBACvBxB,EAAeF,KAAKC,MAAMC,aACxByB,EAA8CzB,EAA9CyB,uBAAwBvB,EAAsBF,EAAtBE,kBAC1BwB,EAAiC/B,EACnC,8BACA,8BAEEgC,EAA0BhC,EAAW,kBAAmB,kBACxDiC,EAA6BjC,EAC/B,yBACA,yBAEEkC,EAAgClC,EAClC,4BACA,4BAGEmC,EAAiCnC,EACnC,0BACA,0BAGJ,OACI,gBAACoB,EAAoB,CACjBZ,UAAW2B,EACX1B,QAASP,EACTkC,SAAU,EACVC,WAAY,SAAAC,GACR1B,EAAe0B,EAAYZ,EAAcxB,IAE7CqC,KAAK,SAAQ,gBACEV,EAAmB,aACtBtB,EAAiB,eAChB,WACbG,MAAOH,GAENJ,KAAKC,MAAMoC,cAAgB,KACxB,gBAAC,aAAU,CACPC,KAAK,oBACLC,WAAW,oBACXC,UAAU,OACVC,YAAad,EACbe,gBAAiBd,EAA8B,eAClC,kBAGrB,gBAAC,aAAU,CACPvB,UAAWwB,EACXc,uBAAwBZ,EACxBa,oBAAqBd,SAvDzC,GAA+C,aAAlC,EAAyB,sBAFrC,oBAAU,CAAC,yBAA0B,sBACrC,YACY,G,84BCvCLe,GAA0D,IAA1DA,WAAYC,GAA8C,IAA9CA,sBAAuBC,GAAuB,IAAvBA,mBA4F9B,GAAb,gCAYI,WAAY9C,GAA4B,0BACpC,cAAMA,IAVF+C,aAAuB,EACvB,EAAAC,SAA8C,cAC9C,EAAAC,0BAA4B,YAAQ,gCACpC,EAAAC,2BAA6B,YAAQ,sBACrC,EAAAC,6BAA+B,YAAQ,wBACvC,EAAAC,sBAAwB,YAAQ,uBAChC,EAAAC,6BAA+B,YAAQ,wBA0BxC,EAAAC,QAAU,SAAC7C,GACd,GAAkB,UAAdA,EAAMM,KAAmB,EAAKwC,mCAAmCC,KAAKC,WAAY,CAClF,EAAKV,aAAc,EACnB,IAAMW,EAAY,EAAK1D,MAAM2D,OAAOD,UAC9BE,EAAc,IACdC,EAAQpD,EAAMqD,cAAcD,MAC9BE,GAAW,EACXC,EAAU,GAAH,OAAMN,GAAN,OAAkBE,GAAlB,OAAgCC,GAErC,EAAKN,mCAAmCU,oBAC1CD,EAAU,GAAH,OAAM,EAAKT,mCAAmCU,mBAA9C,OAAkEL,GAAlE,OAAgFC,GAAhF,OAAwF,KAAxF,OAA4G,KAA5G,OAAsI,KAC7IE,GAAW,GAGf,EAAKR,mCAAmCD,QACpC,CAAEvC,IAAKN,EAAMM,IAAK8C,SAClBG,EACAD,EACA,EAAK/D,MAAM2D,OAAOO,sBAAuB,KAK9C,EAAAC,aAAe,SAAC1D,GACnB,IAAMoD,EAAQpD,EAAMqD,cAAcD,MAC5BO,EAAOC,SAASD,KACjB,EAAKpE,MAAM2D,OAAOW,qBAAuBT,GAAoB,KAAVA,EACpDO,EAAKG,UAAUC,OAAf,UAAyB,MAClB,EAAKxE,MAAM2D,OAAOW,qBACzBF,EAAKG,UAAUE,IAAf,UAAsB,MAE1B,EAAKlB,mCAAmCY,aAAa,CAAEN,WA0BpD,EAAA/D,oBAAsB,WACzB,EAAKyD,mCAAmCzD,sBACxC,IAAMsE,EAAOC,SAASD,KAChBM,EAAOL,SAASM,gBAClB,EAAKpB,mCAAmC9B,qBACxCiD,EAAKH,UAAUE,IAAI,4BACnBL,EAAKG,UAAUE,IAAI,4BACf,EAAKzE,MAAM2D,OAAOW,qBAClBF,EAAKG,UAAUE,IAAf,UAAsB,QAG1BC,EAAKH,UAAUC,OAAO,4BACtBJ,EAAKG,UAAUC,OAAO,4BAClB,EAAKxE,MAAM2D,OAAOW,qBAClBF,EAAKG,UAAUC,OAAf,UAAyB,QAK7B,EAAAI,cAAgB,WAAK,MACS,EAAKrB,mCAAmCC,KAAlEqB,EADiB,EACjBA,QAASC,EADQ,EACRA,aAEjB,OAA6B,IAAzBD,EAAQE,aACDnC,GAEPkC,EACOhC,GAGJD,IAIJ,EAAAmC,gBAAkB,SAACC,GAClBA,EAAEnB,cAAcoB,UAAY,IAC3B,EAAKlC,SAASmC,QAA6BC,QAjHhD,EAAK7B,mCAAqC8B,EAAA,EAAYC,IAClD,IAAa/B,oCAGbvD,EAAM2D,OAAO4B,iBACb,EAAKhC,mCAAmCiC,mBACpCxF,EAAM2D,OAAO4B,iBAIrB,EAAKhC,mCAAmCkC,uBACpCzF,EAAM2D,OAAO+B,qBAGb1F,EAAM2D,OAAOO,qBACb,EAAKX,mCAAmCoC,iBACpC3F,EAAM2D,OAAOO,qBAlBe,EAZ5C,+CA8IQ0B,EACAC,GAAyC,MAYrC9F,KAAKwD,mCAZgC,IAGrCC,KACIsC,EAJiC,EAIjCA,WACAC,EALiC,EAKjCA,cACAC,EANiC,EAMjCA,MACAC,EAPiC,EAOjCA,gBACAC,EARiC,EAQjCA,gBACAC,EATiC,EASjCA,eAEJC,EAXqC,EAWrCA,cAXqC,EAcDrG,KAAKC,MAAMC,aAA3CoG,EAdiC,EAcjCA,cAAeC,EAdkB,EAclBA,aAIvB,OAFAvG,KAAKwG,kBAAoBC,QAAQzG,KAAKC,MAAM2D,OAAO4C,mBAE3B,IAAjBP,EAAMS,QAA2C,IAA3BR,EAAgBQ,OACzC1G,KAAK2G,iBAAiBd,GAEtB,gCACKG,GAAiBE,EAAgBQ,OAC9B,gBAAC,IAAU,CAACE,aAAcb,EAAYc,SAAUR,GAC3CD,GACG,gBAAC,IAAS,CACNU,GAAI,IAASC,SACbxG,MAAK,UAAK+F,EAAL,YAAsB,YACvBtG,KAAKwG,kBACLJ,KAGHpG,KAAK2G,iBAAiBd,IAG9BM,GACG,gBAAC,IAAS,CACNW,GAAI,IAASE,QACbzG,MAAK,UAAKgG,EAAL,YAAqB,YACtBvG,KAAKwG,kBACLL,KAGJ,gBAACc,EAAA,EAAiB,CACdrD,OAAQkC,EACRoB,KAAM,IAAYC,qBAMlC,gBAAC,UAAO,gBACS,kBACbC,UAAWpH,KAAKwD,mCAAmC4D,eApM3E,uCA2M6BvB,GAAmC,MACnB7F,KAAKwD,mCAAlCC,EADgD,EAChDA,KAAM4D,EAD0C,EAC1CA,mBAGV3D,EAOAD,EAPAC,WACAsC,EAMAvC,EANAuC,cACAsB,EAKA7D,EALA6D,uBACAC,EAIA9D,EAJA8D,iBACAzC,EAGArB,EAHAqB,QACAC,EAEAtB,EAFAsB,aACAyC,EACA/D,EADA+D,YAGJ,OAAOxH,KAAKgD,aAAegD,EACvB,gBAACyB,EAAA,EAAU,CACP7D,OAAQiC,EACRnC,WAAYA,EACZsC,cAAeA,EACfoB,UAAWpH,KAAKwD,mCAAmC4D,UACnDE,uBAAwBA,EACxBC,iBAAkBA,EAClBzC,QAASA,EACTC,aAAcA,EACd2C,WAAY1H,KAAK6E,gBACjBwC,mBAAoBA,EACpBG,YAAaA,EACbN,KAAM,IAAYS,QAClBnB,kBAAmBC,QAAQzG,KAAKC,MAAM2D,OAAO4C,qBAGjD,gBAAC,UAAO,gBACS,kBACbY,UAAWpH,KAAKwD,mCAAmC4D,cA3OnE,+BAgPiB,IA6CLQ,EA7CK,EACyB5H,KAAKwD,mCAA/BC,EADC,EACDA,KAAMoE,EADL,EACKA,gBAGVC,EAOArE,EAPAqE,WACApE,EAMAD,EANAC,WACAhC,EAKA+B,EALA/B,oBACAqG,EAIAtE,EAJAsE,aACAC,EAGAvE,EAHAuE,aACA9B,EAEAzC,EAFAyC,gBACAH,EACAtC,EADAsC,WAVK,EAkBL/F,KAAKC,MAAMC,aAJX+H,EAdK,EAcLA,iBACAtG,EAfK,EAeLA,uBACAvB,EAhBK,EAgBLA,kBACA8H,EAjBK,EAiBLA,oBAjBK,EA2CLlI,KAAKC,MAAM2D,OAvBXD,EApBK,EAoBLA,UACAwE,EArBK,EAqBLA,kBACAC,EAtBK,EAsBLA,QACAC,EAvBK,EAuBLA,eACAC,EAxBK,EAwBLA,YACAC,EAzBK,EAyBLA,wBACAC,EA1BK,EA0BLA,qBACAC,EA3BK,EA2BLA,wBACApG,EA5BK,EA4BLA,cACOqG,EA7BF,EA6BLzC,MACA9B,EA9BK,EA8BLA,oBACAwE,EA/BK,EA+BLA,SACAC,EAhCK,EAgCLA,MACAC,EAjCK,EAiCLA,iBACAC,EAlCK,EAkCLA,iBACAC,EAnCK,EAmCLA,iBACAC,EApCK,EAoCLA,mBACAC,EArCK,EAqCLA,kBACAC,EAtCK,EAsCLA,eACAC,EAvCK,EAuCLA,gBACAC,EAxCK,EAwCLA,sBACAC,EAzCK,EAyCLA,QACA1D,EA1CK,EA0CLA,oBAMAiC,EADA5H,KAAKC,MAAM2D,OAAO0F,WACH,OAAH,wBACLtJ,KAAKC,MAAM2D,OAAO0F,YAAU,CAC/BC,YAAazB,EACbY,gBAAiB1I,KAAKC,MAAM2D,OAAO0F,WAAWrD,MAC9CtC,YACA4E,0BACAC,uBACAC,4BAGW,OAAH,wBACLzI,KAAKC,MAAM2D,QAAM,CACpB2F,YAAazB,EACbY,kBACA/E,cAIR,IAAM2F,EAAa,CACfR,mBACAC,mBACAC,qBACAC,oBACAC,iBACAC,kBACAC,wBACAC,UACA1D,sBACA4C,0BACAC,uBACAC,2BAGEe,EAAuB,OAAH,wBACnBF,GAAU,CACbG,QAASd,EACT1C,MAAO4C,EACPa,cAAed,EACfjF,UAAWA,IAGTmC,EAAsB,OAAH,wBAClBwD,GAAU,CACbK,SAAUzD,EAAgB0D,MAAM,EAAG,KACnCC,WAAYnG,IAGVoG,EAAoB,CACtBnG,YACAyE,UACAC,iBACAC,eAGEyB,EAA6BlK,EAC/B,yBACA,wBACA,CACI,uBAAwBsI,IAIhC,OACI,gCACI,gBAAC,EAAyB,CACtBpI,oBAAqBC,KAAKD,oBAC1B2B,oBAAqBA,EACrBW,cAAeA,IAElBX,GACG,gBAAC,IAAyB,CACtBrB,UAAWL,KAAKkD,0BAChB8G,SAAUhK,KAAKiF,iBAEf,gBAAC,EAAuB,CAAClF,oBAAqBC,KAAKD,sBACnD,gBAAC,IAAU,CAACM,UAAWL,KAAKmD,4BACxB,gBAAC,IAAkB,CAAC9C,UAAWL,KAAKoD,8BAChC,gBAAC,IAAgB,CACb6G,SAAUlC,EACVzF,KAAK,eACL4H,KAAK,OACLzH,YAAad,EACbwI,SAAUnK,KAAKoE,aACfN,MAAOJ,EACPrD,UAAW0J,EACXxG,QAASvD,KAAKuD,QAAO,eACR,mBAAkB,aACnB5B,EACZpB,MAAOH,EACPgK,SAAUpK,KAAKiD,SAEfoH,WAAS,IAGZlG,GAAuB4B,IAAe,IAASiB,SAC5C,gBAAC,IAAoB,CACjBsD,KAAI,UAAK3G,GAAL,OAAiB,KAAjB,OAAgCD,GAAhC,OAA6C,KAA7C,OAAiE,KACrEtB,KAAK,SAAQ,aACD8F,EACZ3H,MAAO2H,GAENA,IAIZxE,GACG,gBAAC,IAAW,gBACK,YACbrD,UAAWL,KAAKqD,sBAChB/C,QAASuH,GAERI,IAIZ9D,GACGnE,KAAKuK,mBACLvK,KAAKwK,WAAW5C,EAAc9B,IAChC3B,GACEnE,KAAKuK,mBACLvK,KAAK2G,iBAAiBiB,GACzB5H,KAAKyK,qBAAuBzK,KAAKuK,mBAC9B,gBAACtD,EAAA,EAAiB,CACdrD,OAAQ4F,EACRtC,KAAM,IAAYwD,6BAGtBvC,IAAqBH,EAAa2C,YAAYC,UAC9C,uBAAKvK,UAAWL,KAAKsD,8BACjB,gBAAC,cAAW,CAAChB,KAAM,eAAcsB,OAAQkG,SAjazE,wCAsEQ,GAAM9J,KAAKwD,mCAAmCU,kBAC1C,OAAO,EAGX,IAAI+B,EAAQ,GAQZ,OALIA,EADAjG,KAAKC,MAAM2D,OAAO0F,WACVtJ,KAAKC,MAAM2D,OAAO0F,WAAWrD,MAE7BjG,KAAKC,MAAM2D,OAAOqC,SAI1BjG,KAAKwD,mCAAmCC,KAAKC,cAC5CuC,GAASjG,KAAKwD,mCAAmCC,KAAKwC,MAAMS,OAAS,MApFlF,yCAmIkC,MACoB1G,KAAKC,MAAM2D,OAAjD+E,EADkB,EAClBA,SAAUE,EADQ,EACRA,iBAAkBD,EADV,EACUA,MAEpC,SACKC,GAAoBA,EAAiBnC,QAAU,KAC/CmC,GAAoBA,EAAiBnC,QAAU,GAAKiC,GAAYA,EAASjC,QACzEkC,GAASA,EAAMlC,YAzI5B,GAA0C,aA6HtC,sBADC,U,uCA5HQ,GAAoB,sBAVhC,iBAAO,CAAC,gBAAiB,KACzB,oBAAU,CACP,mBACA,yBACA,oBACA,sBACA,eACA,kBAEH,YACY,IA2aE","file":"SearchGnavInputField.fbfddebc344bee080bc4.bundle.js","sourcesContent":["import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport * as classnames from 'classnames';\nimport { RemoveIcon } from 'elc-icons';\nimport { ContentSpacing, breakpoint } from 'elc-base-theme';\nimport { translate, ITranslationsCollection } from 'elc-service';\nimport { transparentButton } from '../../theme/default-theme';\n\nconst CloseSearchIconWrapper = styled.button`\n top: ${ContentSpacing.space16};\n right: ${ContentSpacing.space16};\n z-index: 1;\n position: relative;\n float: right;\n text-align: center;\n ${transparentButton}\n ${breakpoint('desktop')`\n top: ${ContentSpacing.space24};\n right: ${ContentSpacing.space24};\n [dir='rtl'] & {\n float: left;\n left: ${ContentSpacing.space16};\n right: auto;\n }\n `};\n`;\n\nexport interface IOverlayIconProps {\n toggleSearchOverlay(): void;\n translations?: ITranslationsCollection;\n}\n\nconst searchIconCloseWrapperClassnames = classnames(\n 'elc-search-close-icon-wrapper',\n 'js-search-close-icon-wrapper'\n);\n\nconst searchIconCloseClassnames = classnames('elc-search-close-icon', 'js-search-close-icon');\n\n@translate(['closeLabel', 'searchButtonLabel'])\n@observer\nexport class SearchCloseActiveScreen extends React.Component {\n public render() {\n const { toggleSearchOverlay } = this.props;\n const translations = this.props.translations as ITranslationsCollection;\n const { closeLabel, searchButtonLabel } = translations;\n\n return (\n \n \n \n );\n }\n}\n","export const handleKeyPress = (\n event: React.KeyboardEvent,\n keys: string[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n func: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params?: any\n) => {\n event.preventDefault();\n if (keys.includes(event.key)) {\n func(params);\n }\n};\n\nexport enum ACCEPTABLE_KEYS_PRESSED {\n ENTER = 'Enter',\n SPACEBAR = ' '\n}\n// TODO this should be in the fe-elc-frontend-components repo\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport * as classnames from 'classnames';\nimport { SearchIcon } from 'elc-icons';\nimport { ContentSpacing, Colors, breakpoint } from 'elc-base-theme';\nimport { InputField } from 'elc-inputs';\nimport { translate, ITranslationsCollection } from 'elc-service';\nimport { handleKeyPress, ACCEPTABLE_KEYS_PRESSED } from '../utils/KeyPressHandler';\n\nimport {\n inputBorderTheme,\n customInputThemeMobile,\n inputBorderMobileTheme\n} from '../../theme/default-theme';\n\nconst SearchOverlayWrapper = styled.div`\n cursor: pointer;\n width: 100%;\n .elc-input-search-gnav-field {\n cursor: pointer;\n pointer-events: none;\n width: 100%;\n left: 0;\n right: 0;\n padding: 0 ${ContentSpacing.space40};\n height: ${ContentSpacing.space44};\n ${customInputThemeMobile};\n ${inputBorderMobileTheme};\n ${breakpoint('desktop')`\n min-width: 292px;\n height: 41px;\n padding: 15px 38px;\n ${inputBorderTheme};\n &:focus {\n ${inputBorderTheme};\n }\n `};\n }\n\n .elc-icon-search {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: ${ContentSpacing.space12};\n [dir='rtl'] & {\n right: ${ContentSpacing.space12};\n }\n :focus {\n outline: ${Colors.info} auto 5px;\n }\n }\n\n &.elc-search-icon-wrapper-input-has-value {\n .elc-input-search-gnav-field {\n padding: 15px 38px 15px 11px;\n [dir='rtl'] & {\n padding: 15px 11px 15px 38px;\n }\n }\n .elc-icon-search {\n right: ${ContentSpacing.space12};\n left: auto;\n [dir='rtl'] & {\n left: ${ContentSpacing.space12};\n right: auto;\n }\n }\n }\n\n .elc-floating-label-string {\n display: none;\n }\n`;\n\nconst acceptedKeys = [ACCEPTABLE_KEYS_PRESSED.ENTER, ACCEPTABLE_KEYS_PRESSED.SPACEBAR];\n\nexport interface IOverlayIconProps {\n toggleSearchOverlay(): void;\n isSearchOverlayOpen: boolean;\n translations?: ITranslationsCollection;\n hideGnavInput?: boolean;\n}\n\n@translate(['searchPlaceholderLabel', 'searchButtonLabel'])\n@observer\nexport class SearchOverlayActiveScreen extends React.Component {\n constructor(props: IOverlayIconProps) {\n super(props);\n }\n\n public render() {\n const { toggleSearchOverlay, isSearchOverlayOpen } = this.props;\n const translations = this.props.translations as ITranslationsCollection;\n const { searchPlaceholderLabel, searchButtonLabel } = translations;\n const searchInputGnavFieldClassnames = classnames(\n 'elc-input-search-gnav-field',\n 'js-input-search-gnav-field'\n );\n const svgIconSearchClassnames = classnames('elc-icon-search', 'js-icon-search');\n const circleIconSearchClassnames = classnames(\n 'elc-icon-search-circle',\n 'js-icon-search-circle'\n );\n const magnifierIconSearchClassnames = classnames(\n 'elc-icon-search-magnifier',\n 'js-icon-search-magnifier'\n );\n\n const searchOverlayWrapperClassnames = classnames(\n 'elc-search-icon-wrapper',\n 'js-search-icon-wrapper'\n );\n\n return (\n {\n handleKeyPress(keyPressed, acceptedKeys, toggleSearchOverlay);\n }}\n role=\"button\"\n aria-expanded={isSearchOverlayOpen}\n aria-label={searchButtonLabel}\n data-test-id=\"SEA-Icon\"\n title={searchButtonLabel}\n >\n {this.props.hideGnavInput ? null : (\n \n )}\n \n \n );\n }\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport * as classnames from 'classnames';\nimport { SearchGnavInputFieldViewController } from '../../internal/controllers/SearchGnavInputFieldViewController';\nimport { SearchCloseActiveScreen } from '../../internal/views/SearchCloseActiveScreen';\nimport { SearchOverlayActiveScreen } from '../../internal/views/SearchOverlayActiveScreen';\nimport { translate, ITranslationsCollection, ServiceView, config } from 'elc-service';\nimport { VOICE_SEARCH } from 'elc-service-view-names';\nimport { action } from 'mobx';\nimport { SearchContentGrid } from '../../internal/views/content-search/SearchContentGrid';\nimport { classes } from '../../internal/utils/Classes';\nimport { SearchGrid } from '../../internal/views/SearchGrid';\nimport { Spinner } from 'elc-spinner';\nimport {\n SEARCH_PARAM,\n RESULTS_MESSAGE,\n GNAV_SEARCH_TAG_BLOCKS,\n SEARCH_VIEW,\n TOGGLE_TYPE,\n PREDICTIVE_SEARCH_PARAM,\n SEARCH_REDIRECT_PARAM,\n TAB_TYPE,\n CONTENT_SEARCH_ITEMS_LIMIT,\n SEARCH_TYPE_PARAM,\n PREDICTIVE_CONTENT_SEARCH_PARAM,\n OVERLAY_RESULTS_LIMIT\n} from '../../internal/constants/Search';\nimport {\n IItem,\n IToutItem,\n IArticleObjItem,\n ITrendingTermItem\n} from '../../internal/interfaces/ISearchInterfaces';\nimport { mergeConfigs } from '../../internal/utils/ConfigUtils';\nimport {\n SearchTabs,\n SearchTab,\n SearchActiveScreenWrapper,\n InputGroup,\n InputSearchWrapper,\n InputFieldSearch,\n ClearButton,\n AuxiliarSearchButton\n} from '../../internal/views/styled-components/SearchGnavStyledComponents';\nimport { formatCount } from '../../internal/utils/FormatCount';\n\nconst { NO_RESULTS, RESULTS_FOUND_OVERLAY, RESULTS_ADJUSTMENT } = RESULTS_MESSAGE;\n\nexport interface ISearchGnavInputField {\n config: {\n baseConfig?: {\n content?: IToutItem[];\n productTags?: string[];\n items: IItem[];\n productGridBreakpoints: object;\n hideProductPrice: boolean;\n hideProductBadge: boolean;\n showSubDisplayName: boolean;\n hideProductRating: boolean;\n enableNotifyMe: boolean;\n enableQuickView: boolean;\n enableMobileQuickView?: boolean;\n ctaType?: string;\n };\n content?: IToutItem[];\n productTags?: string[];\n items: IItem[];\n toutItem?: IToutItem[];\n terms?: ITrendingTermItem[];\n favoriteProducts?: IItem[];\n productGridBreakpoints: object;\n hideProductPrice: boolean;\n hideProductBadge: boolean;\n showSubDisplayName?: boolean;\n hideProductRating: boolean;\n enableNotifyMe?: boolean;\n enableQuickView: boolean;\n enableMobileQuickView?: boolean;\n ctaType?: string;\n searchUrl?: string;\n minSearchLength?: number;\n searchDisplayFormat: string;\n gnavSearchTagsBlock?: boolean;\n hideGnavInput?: boolean;\n enableVoiceSearch?: boolean;\n phrases?: string[];\n silenceTimeout?: number;\n stopTimeout?: number;\n enableAutoReplenishment?: boolean;\n autoReplenishOptions?: number[];\n autoReplenishToggleType?: TOGGLE_TYPE;\n enableContentSearch?: boolean;\n useSquareBrackets?: boolean;\n };\n toggleSearchOverlay?(): void;\n translations?: ITranslationsCollection;\n}\n\ninterface IEnhancedSearchConfig {\n content?: IToutItem[];\n items?: IItem[];\n terms?: ITrendingTermItem[];\n hideProductPrice?: boolean;\n hideProductBadge?: boolean;\n showSubDisplayName?: boolean;\n hideProductRating?: boolean;\n enableNotifyMe?: boolean;\n enableQuickView?: boolean;\n enableMobileQuickView?: boolean;\n ctaType?: string;\n enableAutoReplenishment?: boolean;\n autoReplenishOptions?: number[];\n searchDisplayFormat?: string;\n autoReplenishToggleType?: TOGGLE_TYPE;\n}\n\nexport interface IContentSearchConfig extends Omit {\n articles?: IArticleObjItem[];\n}\n\nexport interface ISimpleGridConfig extends Omit {\n content?: IToutItem[];\n searchItems: IItem[];\n bestSellerItems: IItem[];\n productGridBreakpoints?: object;\n searchUrl?: string;\n}\n\n@config(['searchConfig'], mergeConfigs)\n@translate([\n 'searchClearLabel',\n 'searchPlaceholderLabel',\n 'searchButtonLabel',\n 'viewAllResultsLabel',\n 'storiesTitle',\n 'productsTitle'\n])\n@observer\nexport class SearchGnavInputField extends React.Component {\n private searchGnavInputFieldViewController: SearchGnavInputFieldViewController;\n public static defaultProps: ISearchGnavInputField;\n private hideOverlay: boolean = true;\n private inputRef: React.RefObject = React.createRef();\n private searchActiveScreenWrapper = classes('search-active-screen-wrapper');\n private searchInputGroupClassnames = classes('search-input-group');\n private searchInputWrapperClassnames = classes('input-search-wrapper');\n private clearButtonClassnames = classes('search-clear-button');\n private voiceSearchWrapperClassnames = classes('voice-search-wrapper');\n private useSquareBrackets: boolean;\n\n constructor(props: ISearchGnavInputField) {\n super(props);\n this.searchGnavInputFieldViewController = diContainer.get(\n serviceNames.searchGnavInputFieldViewController\n );\n\n if (props.config.minSearchLength) {\n this.searchGnavInputFieldViewController.setMinSearchLength(\n props.config.minSearchLength\n );\n }\n\n this.searchGnavInputFieldViewController.setSearchDisplayFormat(\n props.config.searchDisplayFormat\n );\n\n if (props.config.enableContentSearch) {\n this.searchGnavInputFieldViewController.setContentSearch(\n props.config.enableContentSearch\n );\n }\n }\n\n public onKeyUp = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' && this.searchGnavInputFieldViewController.data.inputValue) {\n this.hideOverlay = false;\n const searchUrl = this.props.config.searchUrl;\n const searchParam = SEARCH_PARAM;\n const value = event.currentTarget.value;\n let redirect = false;\n let siteUrl = `${searchUrl}${searchParam}${value}`;\n\n if (!!this.searchGnavInputFieldViewController.endecaRedirectUrl) {\n siteUrl = `${this.searchGnavInputFieldViewController.endecaRedirectUrl}${searchParam}${value}${SEARCH_TYPE_PARAM}${PREDICTIVE_SEARCH_PARAM}${SEARCH_REDIRECT_PARAM}`;\n redirect = true;\n }\n\n this.searchGnavInputFieldViewController.onKeyUp(\n { key: event.key, value },\n siteUrl,\n redirect,\n this.props.config.enableContentSearch || false\n );\n }\n };\n\n public handleChange = (event: React.FormEvent) => {\n const value = event.currentTarget.value;\n const body = document.body;\n if ((this.props.config.gnavSearchTagsBlock && value) || value !== '') {\n body.classList.remove(`${GNAV_SEARCH_TAG_BLOCKS}`);\n } else if (this.props.config.gnavSearchTagsBlock) {\n body.classList.add(`${GNAV_SEARCH_TAG_BLOCKS}`);\n }\n this.searchGnavInputFieldViewController.handleChange({ value });\n };\n\n public get showSearchResults() {\n if (!!this.searchGnavInputFieldViewController.endecaRedirectUrl) {\n return false;\n }\n\n let items = [];\n\n if (this.props.config.baseConfig) {\n items = this.props.config.baseConfig.items;\n } else {\n items = this.props.config.items;\n }\n\n if (\n this.searchGnavInputFieldViewController.data.inputValue &&\n (items || this.searchGnavInputFieldViewController.data.items.length > 0)\n ) {\n return true;\n }\n\n return false;\n }\n\n public toggleSearchOverlay = () => {\n this.searchGnavInputFieldViewController.toggleSearchOverlay();\n const body = document.body;\n const html = document.documentElement;\n if (this.searchGnavInputFieldViewController.isSearchOverlayOpen) {\n html.classList.add('search-overlay-displayed');\n body.classList.add('search-overlay-displayed');\n if (this.props.config.gnavSearchTagsBlock) {\n body.classList.add(`${GNAV_SEARCH_TAG_BLOCKS}`);\n }\n } else {\n html.classList.remove('search-overlay-displayed');\n body.classList.remove('search-overlay-displayed');\n if (this.props.config.gnavSearchTagsBlock) {\n body.classList.remove(`${GNAV_SEARCH_TAG_BLOCKS}`);\n }\n }\n };\n\n private getResultType = () => {\n const { numRecs, adjustedTerm } = this.searchGnavInputFieldViewController.data;\n\n if (numRecs.totalNumRecs === 0) {\n return NO_RESULTS;\n }\n if (adjustedTerm) {\n return RESULTS_ADJUSTMENT;\n }\n\n return RESULTS_FOUND_OVERLAY;\n };\n\n @action\n public onOverlayScroll = (e: React.SyntheticEvent) => {\n if (e.currentTarget.scrollTop > 10) {\n (this.inputRef.current as HTMLInputElement).blur();\n }\n };\n\n private get showEnhancedSearch() {\n const { toutItem, favoriteProducts, terms } = this.props.config;\n\n return !!(\n (favoriteProducts && favoriteProducts.length >= CONTENT_SEARCH_ITEMS_LIMIT) ||\n (favoriteProducts && favoriteProducts.length >= 2 && toutItem && toutItem.length) ||\n (terms && terms.length)\n );\n }\n\n private renderTabs(\n simpleGridConfig: ISimpleGridConfig,\n contentSearchConfig: IContentSearchConfig\n ) {\n const {\n data: {\n currentTab,\n resultsLoaded,\n items,\n dynamicArticles,\n articlesRecsNum,\n productRecsNum\n },\n setCurrentTab\n } = this.searchGnavInputFieldViewController;\n\n const { productsTitle, storiesTitle } = this.props.translations as ITranslationsCollection;\n\n this.useSquareBrackets = Boolean(this.props.config.useSquareBrackets);\n\n return items.length === 0 && dynamicArticles.length === 0 ? (\n this.renderSearchGrid(simpleGridConfig)\n ) : (\n <>\n {resultsLoaded || dynamicArticles.length ? (\n \n {productRecsNum && (\n \n {this.renderSearchGrid(simpleGridConfig)}\n \n )}\n {articlesRecsNum && (\n \n \n \n )}\n \n ) : (\n \n )}\n \n );\n }\n\n private renderSearchGrid(simpleGridConfig: ISimpleGridConfig) {\n const { data, searchTermSelected } = this.searchGnavInputFieldViewController;\n\n const {\n inputValue,\n resultsLoaded,\n limiteTypeaheadResults,\n typeaheadResults,\n numRecs,\n adjustedTerm,\n contentRecs\n } = data;\n\n return this.hideOverlay && resultsLoaded ? (\n \n ) : (\n \n );\n }\n\n public render() {\n const { data, clearInputValue } = this.searchGnavInputFieldViewController;\n\n const {\n limitItems,\n inputValue,\n isSearchOverlayOpen,\n disableInput,\n configSearch,\n dynamicArticles,\n currentTab\n } = data;\n\n const {\n searchClearLabel,\n searchPlaceholderLabel,\n searchButtonLabel,\n viewAllResultsLabel\n } = this.props.translations as ITranslationsCollection;\n const {\n searchUrl,\n enableVoiceSearch,\n phrases,\n silenceTimeout,\n stopTimeout,\n enableAutoReplenishment,\n autoReplenishOptions,\n autoReplenishToggleType,\n hideGnavInput,\n items: bestSellerItems,\n enableContentSearch,\n toutItem,\n terms,\n favoriteProducts,\n hideProductPrice,\n hideProductBadge,\n showSubDisplayName,\n hideProductRating,\n enableNotifyMe,\n enableQuickView,\n enableMobileQuickView,\n ctaType,\n searchDisplayFormat\n } = this.props.config;\n\n let searchConfig;\n\n if (this.props.config.baseConfig) {\n searchConfig = {\n ...this.props.config.baseConfig,\n searchItems: limitItems,\n bestSellerItems: this.props.config.baseConfig.items,\n searchUrl,\n enableAutoReplenishment,\n autoReplenishOptions,\n autoReplenishToggleType\n };\n } else {\n searchConfig = {\n ...this.props.config,\n searchItems: limitItems,\n bestSellerItems,\n searchUrl\n };\n }\n\n const baseConfig = {\n hideProductPrice,\n hideProductBadge,\n showSubDisplayName,\n hideProductRating,\n enableNotifyMe,\n enableQuickView,\n enableMobileQuickView,\n ctaType,\n searchDisplayFormat,\n enableAutoReplenishment,\n autoReplenishOptions,\n autoReplenishToggleType\n };\n\n const enhancedSearchConfig = {\n ...baseConfig,\n content: toutItem,\n items: favoriteProducts,\n trendingTerms: terms,\n searchUrl: searchUrl\n };\n\n const contentSearchConfig = {\n ...baseConfig,\n articles: dynamicArticles.slice(0, OVERLAY_RESULTS_LIMIT),\n searchTerm: inputValue\n };\n\n const voiceSearchConfig = {\n searchUrl,\n phrases,\n silenceTimeout,\n stopTimeout\n };\n\n const searchInputFieldClassnames = classnames(\n 'elc-input-search-field',\n 'js-input-search-field',\n {\n 'voice-search-enabled': enableVoiceSearch\n }\n );\n\n return (\n <>\n \n {isSearchOverlayOpen && (\n \n \n \n \n \n {/* @TODO TEMPORARY hack while ADA ticket refactors Suggestion component to decouple search button, affects all brands */}\n {enableContentSearch && currentTab === TAB_TYPE.STORIES && (\n \n {viewAllResultsLabel}\n \n )}\n \n {inputValue && (\n \n {searchClearLabel}\n \n )}\n \n {enableContentSearch &&\n this.showSearchResults &&\n this.renderTabs(searchConfig, contentSearchConfig)}\n {!enableContentSearch &&\n this.showSearchResults &&\n this.renderSearchGrid(searchConfig)}\n {this.showEnhancedSearch && !this.showSearchResults && (\n \n )}\n {!!(enableVoiceSearch && configSearch.voiceSearch.enabled) && (\n
\n \n
\n )}\n \n )}\n \n );\n }\n}\n\nexport default SearchGnavInputField;\n"],"sourceRoot":""}