{"version":3,"sources":["DynamicFacet.min__87a2f876e355bf8ecbd9.js","./src/utils/ResultListUtils.ts","./src/ui/ResponsiveComponents/ResponsiveComponentsUtils.ts","./src/ui/DynamicFacet/DynamicFacet.ts","./src/utils/DependsOnManager.ts","./src/ui/FacetsMobileMode/FacetsMobileMode.ts","./src/rest/Facet/FacetRequest.ts","./src/ui/ResultList/ResultListRenderer.ts","./src/ui/ResponsiveComponents/ResponsiveFacetColumn.ts","./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValueMoreLessButton.ts","./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValue.ts","./src/ui/DynamicFacetManager/DynamicFacetManager.ts","./src/ui/Facet/FacetUtils.ts","./src/ui/Templates/TableTemplate.ts","./src/ui/Templates/DefaultRecommendationTemplate.ts","./src/ui/Templates/TemplateToHtml.ts","./src/ui/FocusTrap/FocusTrap.ts","./src/ui/Templates/CoreHelpers.ts","./src/ui/DynamicFacet/DynamicFacetHeader/DynamicFacetHeaderButton.ts","./src/controllers/DynamicFacetRequestBuilder.ts","./src/ui/DynamicFacet/DynamicFacetHeader/DynamicFacetHeader.ts","./src/rest/Facet/FacetSortCriteria.ts","./src/ui/Combobox/Combobox.ts","./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValueCheckbox.ts","./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValues.ts","./src/controllers/DynamicFacetQueryController.ts","./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValueRenderer.ts","./src/ui/ResponsiveComponents/ResponsiveDefaultResultTemplate.ts","./src/ui/ResultList/ResultContainer.ts","./src/ui/ResultList/ResultListCardRenderer.ts","./src/ui/ResultList/ResultListTableRenderer.ts","./src/ui/ResponsiveComponents/ResponsiveDropdown/ResponsiveDropdownModalContent.ts","./src/events/FacetsMobileModeEvents.ts","./src/ui/DynamicFacet/DynamicFacetHeader/DynamicFacetHeaderCollapseToggle.ts","./src/ui/Combobox/ComboboxInput.ts","./src/ui/Combobox/ComboboxValues.ts","./src/ui/ResponsiveComponents/ResponsiveDynamicFacets.ts","./src/ui/DynamicFacet/DynamicFacetBreadcrumbs.ts","./src/ui/DynamicFacetSearch/DynamicFacetSearch.ts","./src/controllers/FacetSearchController.ts","./src/ui/DynamicFacetSearch/DynamicFacetSearchValueRenderer.ts","./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValueCreator.ts","./src/rest/Facet/FacetValueState.ts","./src/ui/ResponsiveComponents/ResponsiveFacetOptions.ts","./src/ui/ResultList/ResultList.ts"],"names":["webpackJsonpCoveo__temporary","112","module","exports","__webpack_require__","Object","defineProperty","value","hideIfInfiniteScrollEnabled","cmp","ResultListUtils","isInfiniteScrollEnabled","searchInterface","element","disable","$$","hide","warnIfComponentNotNeeded","enable","unhide","root","resultList","getActiveResultList","options","enableInfiniteScroll","scrollToTop","Logger","this","warn","window","scrollTo","searchInterfacePosition","getBoundingClientRect","top","pageYOffset","resultLists","getResultLists","find","disabled","findAll","cssClass","map","el","Component","get","ResultList","computeCssClassName","allResultListsUseInfiniteScroll","notNeededComponentWarning","filter","length","cmpCssClass","computeCssClassNameForType","type","message","126","shouldDrawFacetSlider","facetSliderElement","ResponsiveDropdownContent","isTargetInsideOpenedDropdown","isSmallFacetActivated","isSmallTabsActivated","hasClass","smallTabsClassName","smallFacetClassName","isSmallRecommendationActivated","smallRecommendationClassName","activateSmallTabs","addClass","deactivateSmallTabs","removeClass","activateSmallFacet","deactivateSmallFacet","activateSmallRecommendation","deactivateSmallRecommendation","ResponsiveComponentsUtils","137","__extends","extendStatics","setPrototypeOf","__proto__","Array","d","b","p","hasOwnProperty","__","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","call","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__generator","body","verb","v","op","f","TypeError","_","y","label","ops","pop","trys","push","g","sent","throw","return","Symbol","iterator","bindings","classId","DynamicFacet","ID","listenToQueryStateChange","moreValuesAvailable","isDynamicFacet","isFieldValueCompatible","handleQueryStateChangedIncluded","querySelectedValues","currentSelectedValues","values","selectedValues","validQuerySelectedValues","valuesToSelect","difference","valuesToDeselect","Utils","isNonEmptyArray","selectMultipleValues","deselectMultipleValues","ComponentOptions","initComponentOptions","initDynamicFacetQueryController","initDependsOnManager","initQueryEvents","initQueryStateEvents","initBreadCrumbEvents","initComponentStateEvents","initValues","verifyCollapsingConfiguration","isCollapsed","enableCollapse","collapsedByDefault","ResponsiveDynamicFacets","init","_this","field","slice","enumerable","configurable","FacetType","specific","selectValue","Assert","exists","ensureDom","logger","info","forEach","select","updateQueryStateModel","deselectValue","hasSelectedValue","deselect","toggleSelectValue","facetValue","toggleSelect","getCaptionForStringValue","FacetUtils","getDisplayValueFromValueCaption","valueCaption","showMoreValues","additionalNumberOfValues","numberOfValues","dynamicFacetQueryController","increaseNumberOfValuesToRequest","triggerNewIsolatedQuery","logAnalyticsFacetShowMoreLess","analyticsActionCauseList","dynamicFacetShowMore","showLessValues","resetNumberOfValuesToRequest","dynamicFacetShowLess","reset","hasActiveValues","clearAll","render","enablePreventAutoSelectionFlag","updateAppearance","toggleCollapse","expand","collapse","enableFreezeCurrentValuesFlag","enableFreezeFacetOrderFlag","enableScrollToTop","activeValues","analyticsFacetState","toString","id","title","facetType","facetPosition","position","facetField","facetId","facetTitle","logAnalyticsEvent","actionCause","facetMeta","usageAnalytics","logSearchEvent","putStateIntoQueryBuilder","queryBuilder","putFacetIntoQueryBuilder","putStateIntoAnalytics","pendingEvent","getPendingSearchEvent","addFacetState","isCurrentlyDisplayed","isVisible","bind","onRootElement","QueryEvents","duringQuery","doneBuildingQuery","data","handleDoneBuildingQuery","deferredQuerySuccess","handleQuerySuccess","results","queryError","onNoValues","includedAttributeId","QueryStateModel","getFacetId","queryStateModel","registerNewAttribute","onQueryState","MODEL_EVENTS","CHANGE","undefined","handleQueryStateChanged","includeInBreadcrumb","BreadcrumbEvents","populateBreadcrumb","args","handlePopulateBreadcrumb","clearBreadcrumb","DynamicFacetValues","DynamicFacetValueCreator","componentStateId","componentStateModel","registerComponent","DynamicFacetQueryController","dynamicFacetManager","isNullOrUndefined","facets","notImplementedError","handleQueryResults","index","findIndex","facetResponse","onNewValues","header","hideLoading","createFromResponse","customSort","reorderValues","resetValues","attributes","breadcrumbs","DynamicFacetBreadcrumbs","facetInfo","ref","dependsOnManager","DependsOnManager","createDom","createAndAppendContent","createAndAppendHeader","createAndAppendSearch","createAndAppendValues","DynamicFacetHeader","clear","appendChild","enableFacetSearch","search","DynamicFacetSearch","set","toggleClear","hasSelectedValues","toggleSearchDisplay","toggleClass","hasDisplayedValues","triggerNewQuery","beforeExecuteQuery","beforeSendingQuery","ignoreWarningSearchEvent","queryController","executeQuery","e_1","_a","getQueryResults","showLoading","error","cause","logCustomEvent","basicAnalyticsFacetMeta","logClearAllToAnalytics","dynamicFacetClearAll","doExport","exportGlobally","ResponsiveFacetOptions","buildStringOption","postProcessing","sanitizedValue","replace","isNonEmptyString","maxCharLength","section","buildLocalizedStringOption","localizedString","l","priority","buildFieldOption","required","sortCriteria","isFacetSortCriteria","buildListOption","buildNumberOption","min","defaultValue","buildBooleanOption","enableMoreLess","useLeadingWildcardInFacetSearch","depend","numberOfValuesInBreadcrumb","defaultFunction","DeviceUtils","isMobileDevice","buildJsonOption","dependsOn","dependsOnCondition","buildCustomOption","injectionDepth","filterFacetCount","Initialization","registerAutoCreateComponent","172","facet","on","buildingQuery","handleBuildingQuery","getDependsOn","InitializationEvents","afterComponentsInitialization","setupDependentFacet","parentFacetRef","getParentFacet","resetIfConditionUnfullfiled","getDependsOnCondition","getId","component","conditionOption","isFunction","parentHasSelectedValues","parent","valuesExistForFacetWithId","ComponentsTypes","getAllFacetsFromSearchInterface","allFacetsInInterface","potentialParentFacet","potentialDependentFacet","dependentFacets","dependentFacet","some","174","FacetsMobileMode","preventScrolling","scrollContainer","findParentScrollLockable","breakpoint","isModal","displayOverlayWhileOpen","buildChildHtmlElementOption","180","210","resultListOptions","autoCreateComponentsFn","renderResults","resultElements","append","resultDisplayedCallback","all","getStartFragment","getEndFragment","startFrag","endFrag","resultsFragment","document","createDocumentFragment","each","resultElement","getResult","resultsContainer","ResultListRenderer","211","coveoRoot","responsiveDropdown","componentsInFacetColumn","preservePositionOriginalValues","SearchInterface","dropdownHeaderLabel","getDropdownHeaderLabel","dropdown","buildDropdown","bindDropdownContentEvents","bindFacetsMobileModeEvents","registerOnCloseHandler","registerQueryEvents","initializeBreakpoint","responsiveBreakpoint","responsiveComponentConstructor","findColumn","ResponsiveComponentsManager","register","ResponsiveFacetColumn","column","getComponents","facetsMobileModeComponent","accept","preservePosition","needDropdownWrapper","needSmallMode","handleResizeEvent","changeToSmallMode","changeToLargeMode","isOpened","dropdownContent","positionDropdown","dismissFacetSearches","facetSearch","currentlyDisplayedResults","dismissSearchResults","width","ResponsiveComponents","getMediumScreenWidth","responsiveComponents","getResponsiveMode","close","disableFacetPreservePosition","DROPDOWN_HEADER_WRAPPER_CSS_CLASS","dropdownHeader","restoreFacetPreservePositionValue","cleanUp","buildDropdownContent","buildDropdownHeader","ResponsiveDropdown","facetsMobileModeOptions","disablePopupBackground","enableScrollLocking","dropdownContentElement","filterByContainer","className","style","filterBy","text","prepend","ResponsiveDropdownModalContent","DROPDOWN_MIN_WIDTH","DROPDOWN_WIDTH_RATIO","dropdownHeaderElement","content","ResponsiveDropdownHeader","defaultBreakpoint","facetsMobileModeBreakpoint","noResults","handleNoResults","querySuccess","handleQueryError","debounce","isFacetSearchScrolledIntoView","positionSearchResults","DEBOUNCE_SCROLL_WAIT","registerOnOpenHandler","trigger","FacetsMobileModeEvents","popupOpened","popupClosed","facetSearchElement","facetTop","facetBottom","bottom","dropdownTop","dropdownBottom","getAllFacetInstancesFromElement","DROPDOWN_HEADER_LABEL_DEFAULT_VALUE","totalCount","show","220","221","btn","ariaLabel","action","DynamicFacetValueShowMoreLessButton","222","rendererKlass","start","end","endInclusive","state","numberOfResults","displayValue","renderer","FacetValueState","selected","idle","equals","arg","toLowerCase","Globalize","format","resultCount","formattedCount","isRange","basicAnalyticsFacetState","rangeFacetState","analyticsValue","valuePosition","facetRangeStart","facetRangeEnd","facetRangeEndInclusive","rangeFacetMeta","logSelectActionToAnalytics","dynamicFacetSelect","dynamicFacetDeselect","analyticsFacetMeta","DynamicFacetValue","289","childrenFacets","DynamicFacetManager","resetContainer","prependContainer","initEvents","containerElement","remove","handleAfterComponentsInitialization","allDynamicFacets","dynamicFacet","children","enabledFacets","query","facetOptions","freezeFacetOrder","callOnUpdateOnChildrenFacets","enableReorder","compareFacets","sortFacetsWithCompareOption","sortFacetsWithResponseOrder","reorderFacetsInDom","respectMaximumExpandedFacetsThreshold","onUpdate","facetsResponse","facetsInResponse","getChildFacetWithId","facetsNotInResponse","without","sort","fragment","maximumNumberOfExpandedFacets","collapsableFacets","uncollapsableFacets","facetsLeftToExpandCounter","39","getRegexToUseForFacetSearch","ignoreAccent","RegExp","StringUtils","stringToRegex","returnValue","tryToGetTranslatedCaption","getValuesToUseForSearchInFacet","original","ret","regex","facetSearchIgnoreAccents","chain","pairs","pair","test","match","QueryUtils","isStratusAgnosticField","FileTypes","getFileTypeCaptions","key","range","month","DateUtils","monthToString","substr","buildFacetSearchPattern","escapeRegexCharacter","join","needAnotherFacetSearch","currentSearchLength","newSearchLength","oldSearchLength","desiredSearchLength","addNoStateCssClassToFacetValues","container","getSelected","noStates","noState","found","getFileType","caption","getObjectType","isMonthFieldValue","parseInt","asInt","isNaN","462","defaultTemplate","defaultRoledTemplates","instantiateRoleToString","role","roledTemplate","templates","instantiateToString","instantiateRoleToElement","instantiateToElement","tmpl","Template","layout","getFallbackTemplate","hasTemplateWithRole","TemplateList","TableTemplate","463","_super","object","div","createElement","innerHTML","DefaultRecommendationTemplate","464","buildResults","res","resultsPromises","buildResult","elem","idx","resultCurrentlyBeingRendered","pluck","sortBy","setStateObjectOnQueryResult","setSearchInterfaceObjectOnQueryResult","createHtmlElement","bindResultToElement","autoCreateComponentsInsideResult","initResult","verifyChildren","automaticallyCreateComponentsInsideResult","resultTemplate","wrapInDiv","checkCondition","currentLayout","TemplateToHtml","465","hiddenElements","querySelectorAll","tabIndex","removeEventListener","focusInEvent","focusOutEvent","showHiddenElements","enabled","addEventListener","onFocusIn","onFocusOut","hideAllExcept","removeAttribute","hideElement","getAttribute","setAttribute","hideSiblings","allowedElement","parentElement","elementToHide","getFocusableSibling","previous","elements","focusableElements","currentIndex","indexOf","focusSibling","sibling","focus","focusFirstElement","elementIsBefore","oldElement","newElement","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","onLosingFocus","Defer","defer","focusIsAllowed","contains","elementIsInPage","relatedTarget","target","FocusTrap","466","resolveQueryResult","getComponentRef","quickview","resolveTermsToHighlight","currentQueryResult","termsToHighlight","resolvePhrasesToHighlight","phrasesToHighlight","termsToHighlightAreDefined","keys","exportAllHelpersGlobally","scope","TemplateHelpers","getHelpers","helper","name","CoreHelpers","registerFieldHelper","javascriptEncode","executeShorten","strAndHoles","StringAndHoles","shortenString","highlights","HighlightUtils","highlightString","holes","registerTemplateHelper","executeShortenPath","shortenPath","executeShortenUri","shortenUri","executeHighlight","executeHighlightStreamText","StreamHighlightUtils","highlightStreamText","opts","mergedOptions","executeHighlightStreamHTML","highlightStreamHTML","numberValue","Number","isString","htmlEncode","dateToString","convertFromJsonDateIfNeeded","timeToString","dateTimeToString","defaultOptions","includeTimeIfThisWeek","optionsToUse","extend","CurrencyUtils","currencyToString","isMilliseconds","TimeSpan","getHHMMSS","companyDomain","me","lengthLimit","truncateName","isObject","listOfAddresses","EmailUtils","splitSemicolonSeparatedListOfEmailAddresses","emailAddressesToHyperlinks","isArray","siblings","href","AnchorUtils","buildAnchor","src","srcTemplate","ImageUtils","buildImage","buildStringTemplateFromResult","alt","height","endpoint","hasThumbnail","buildImageFromResult","SearchEndpoint","endpoints","icon","createIcon","outerHTML","templatesToLoad","once","defaultTmpl","atLeastOneWasLoaded","toLoad","obj","omit","condition","getHelper","byteMeasure","size","precision","base","Math","floor","pow","TemplateCache","getTemplate","encodeCarriageReturn","getDeviceName","497","rootOptions","hasIcon","iconSVG","iconClassName","button","trim","SVGDom","addClassToSVGInContainer","shouldDisplay","toggle","DynamicFacetHeaderButton","504","request","buildBaseRequestForQuery","getFilterFacetCount","filterField","isFoldingEnabled","isUndefined","DynamicFacetRequestBuilder","505","506","createTitle","createWaitAnimation","createClearButton","clearButton","createCollapseToggle","collapseToggle","DynamicFacetHeaderCollapseToggle","toggleButton","ariaHidden","waitAnimation","SVGIcons","icons","loading","visible","clearTimeout","showLoadingTimeout","setTimeout","showLoadingDelay","507","FacetSortCriteria","508","wrapperClassName","clearOnBlur","throttlingDelay","isRequestCancelled","throttledRequest","throttle","triggerRequest","leading","trailing","uniqueId","createAndAppendInput","createAndAppendWaitAnimation","input","ComboboxInput","waitAnimationElement","toggleWaitAnimation","ComboboxValues","clearValues","clearInput","cancelRequest","cancel","onInputChange","isEmptyString","requestValues","resetScroll","onInputBlur","mouseIsOverValue","isRenderingNewValues","updateAccessibilityAttributes","updateAriaLive","hasValues","ariaLive","updateText","scrollable","areMoreValuesAvailable","onScrollEndReached","saveFocusedValue","requestMoreValues","restoreFocusedValue","callback","response","renderFromResponse","Combobox","509","510","selectAction","checkbox","Checkbox","selectAriaLabel","getElement","labelSuffix","isSelected","DynamicFacetValueCheckbox","511","creatorKlass","list","valueCreator","facetValues","order","reorderValuesByKeys","getDefaultValues","isIdle","findWhere","allFacetValues","displayedValues","foundValue","newFacetValue","createFromValue","buildShowLess","buildShowMore","hasIdleValues","appendShowMoreLess","shouldEnableShowLess","appendSelectedCollapsedValues","selectedDisplayValues","escape","empty","renderedElement","512","freezeCurrentValues","preventAutoSelection","requestBuilder","fieldName","resetFlagsDuringQuery","numberOfValuesToRequest","areValuesIncorrectlyAffectedByDependsOn","hasDependentFacets","dependentFacetsHaveSelectedValues","currentValues","facetRequests","buildFacetRequest","build","preventAutoSelect","isFieldExpanded","getLastQuery","previousFacetRequestIndex","getEndpoint","max","513","dom","dataValue","toggleSelectedClass","renderCheckbox","addFocusAndBlurEventListeners","valueCheckbox","checkboxButton","DynamicFacetValueRenderer","523","524","525","526","currentMode","trace","ResponsiveDefaultResultTemplate","lastResults","getLastResults","getSmallScreenWidth","527","resultContainer","resultContainerElement","detachComponentsInside","classToAdd","isEmpty","hideChildren","child","getResultElements","ResultContainer","528","needToBeRemoved","toRemove","times","ResultListCardRenderer","529","shouldDisplayHeader","shouldDisplayFooter","renderRoledTemplate","frag","ResultListTableRenderer","531","532","componentName","closeButtonLabel","shouldHide","classList","add","DEFAULT_CSS_CLASS_NAME","hidden","ensureCloseButton","ensureFocusTrap","hideDropdown","removeCloseButton","removeFocusTrap","closeButton","mainClear","focusTrap","533","563","564","arrowUp","node","arrowDown","setHtml","565","combobox","inputOptions","usePlaceholder","triggerOnChangeAsYouType","isRequired","textInput","inputElement","addEventListeners","addAccessibilityAttributes","TextInput","inputInstance","getValue","placeholderText","handleFocusOut","handleKeyboardDirection","handleKeyboardEnterEscape","listboxId","activeDescendant","expanded","event","newTarget","which","KEYBOARD","DOWN_ARROW","preventDefault","focusNextValue","UP_ARROW","focusPreviousValue","HOME","focusFirstValue","END","focusLastValue","ENTER","selectActiveValue","ESCAPE","stopPropagation","566","ariaLabelledby","isScrollable","onScroll","createValuesFromResponse","renderNoValuesFound","renderValues","elementWrapper","tabindex","highlightCurrentQueryInSearchResults","searchResult","highlightValueClassName","querySelector","noValuesFoundElement","onValueClick","setKeyboardActiveValue","targetElement","targetId","onSelectValue","keyboardActiveValue","resetKeyboardActiveValue","activateFocusOnValue","deactivateFocusOnValue","scrollTop","clientHeight","scrollHeight","maxHeight","maxDropdownHeight","firstValue","lastValue","nextOrFirstValue","previousOrLastValue","nextValueIndex","previousValueIndex","lastValueIndex","focusedValueId","567","576","577","createAndAppendTitle","activeFacetValues","breadcrumbFacetValues","collapsedFacetValues","createAndAppendBreadcrumbValues","createAndAppendCollapsedBreadcrumbs","titleElement","createAndAppendBreadcrumbValue","listContainer","valueElement","clearElement","valueSelectAction","logActionToAnalytics","breadcrumbFacet","collapsedElement","578","579","facetSearchController","FacetSearchController","terms","fetchMoreResults","getDisplayValue","rawValue","count","DynamicFacetSearchValueRenderer","580","pageCount","numberOfValuesMultiplier","getMonthsValueCaptions","monthsValueCaptions","addTypesCaptionsIfNecessary","isFileType","isObjectType","isMonth","optionalLeadingWildcard","ignoreValues","captions","searchContext","581","582","70","83","enableResponsiveMode","deprecated","89","elementClassId","reachedTheEndOfResults","disableLayoutChange","successiveScrollCount","infiniteScrollContainer","showOrHideElementsDependingOnState","addListeners","initResultContainer","initWaitAnimationContainer","waitAnimationContainer","setupTemplatesVersusLayouts","ResultLayoutEvents","populateResultLayout","layouts","setupRenderer","makeElementFocusable","ensureHasId","getDefaultTemplate","template","loadTemplatesFromCache","Coveo","DefaultResultTemplate","pageTemplateNames","getResultListTemplateNames","compact","templateName","newQuery","handleNewQuery","handleDuringQuery","ResultListEvents","changeLayout","handleChangeLayout","addInfiniteScrollListeners","addPagerListeners","handleScrollOfResultList","scrollToTopIfEnabled","CHANGE_ONE","QUERY_STATE_ATTRIBUTES","FIRST","oneRootElement","getAutoSelectedFieldsToInclude","getFields","concat","getMinimalFieldsToInclude","unique","layoutClassToAdd","triggerNewResultDisplayed","triggerNewResultsDisplayed","templateToHtml","displayMoreResults","isLargerOrEqualsThan","isCurrentlyFetchingMoreResults","hasPotentiallyMoreResultsToDisplay","enableInfiniteScrollWaitingAnimation","showWaitingAnimationForInfiniteScrolling","fetchAndRenderMoreResults","templateToHtmlArgs","getDisplayedResults","getDisplayedResultsElements","resultLayoutSelectors","enableBasedOnActiveLayouts","otherLayoutsStillActive","otherResultLists","otherResultList","resultLayoutSelector","disableLayouts","item","newResultDisplayed","newResultsDisplayed","fetchingMoreResults","fetchMore","pagerScrolling","renderNewResults","resetStateAfterFetchingMoreResults","_b","hideWaitingAnimationForInfiniteScrolling","MAX_AMOUNT_OF_SUCESSIVE_REQUESTS","cancelFetchingMoreResultsIfNeeded","showWaitingAnimation","hideWaitingAnimation","mobileScrollContainer","isScrollingOfResultListAlmostAtTheBottom","infiniteScrollPageSize","allResultLists","fieldsToInclude","addFieldsToInclude","autoSelectFieldsToInclude","otherFields","flatten","addRequiredFields","includeRequiredFields","InitializationPlaceholder","withVisibleRootElement","withPlaceholderForResultList","isWindow","Window","isScrollAtBottomForWindowElement","isScrollAtBottomForHtmlElement","win","Win","windowHeight","scrollY","Doc","elementHeight","hasQuery","hasResults","showIfQuery","showIfNoQuery","showIfResults","showIfNoResults","DomUtils","getBasicLoadingAnimation","spinner","detach","getLoadingSpinner","previousSpinnerContainer","previousSpinner","spinnerContainer","spinners","containers","elemType","initResultContainerAddToDom","initParameters","originalOptionsObject","automaticallyCreateComponentsInside","activeLayouts","activeLayout","activeLayoutKey","enableLayouts","alias","TemplateComponentOptions","buildTemplateOption","findParentScrolling","buildSelectorOption","buildFieldsOption","includeInResults"],"mappings":"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","file":"DynamicFacet.min__87a2f876e355bf8ecbd9.js","sourcesContent":["webpackJsonpCoveo__temporary([2,17,84],{\n\n/***/ 112:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Component_1 = __webpack_require__(7);\nvar ResultList_1 = __webpack_require__(89);\nvar Dom_1 = __webpack_require__(1);\nvar underscore_1 = __webpack_require__(0);\nvar Logger_1 = __webpack_require__(9);\nvar ResultListUtils = /** @class */ (function () {\n function ResultListUtils() {\n }\n ResultListUtils.hideIfInfiniteScrollEnabled = function (cmp) {\n var infiniteScrollEnabled = ResultListUtils.isInfiniteScrollEnabled(cmp.searchInterface.element);\n if (infiniteScrollEnabled) {\n cmp.disable();\n Dom_1.$$(cmp.element).hide();\n ResultListUtils.warnIfComponentNotNeeded(cmp);\n }\n else {\n cmp.enable();\n Dom_1.$$(cmp.element).unhide();\n }\n };\n ResultListUtils.isInfiniteScrollEnabled = function (root) {\n var resultList = ResultListUtils.getActiveResultList(root);\n return resultList ? !!resultList.options.enableInfiniteScroll : false;\n };\n ResultListUtils.scrollToTop = function (root) {\n var resultList = ResultListUtils.getActiveResultList(root);\n if (!resultList) {\n new Logger_1.Logger(this).warn('No active ResultList, scrolling to the top of the Window');\n return window.scrollTo(0, 0);\n }\n var searchInterfacePosition = resultList.searchInterface.element.getBoundingClientRect().top;\n if (searchInterfacePosition > 0) {\n return;\n }\n window.scrollTo(0, window.pageYOffset + searchInterfacePosition);\n };\n ResultListUtils.getActiveResultList = function (root) {\n var resultLists = ResultListUtils.getResultLists(root);\n return underscore_1.find(resultLists, function (resultList) { return !resultList.disabled; });\n };\n ResultListUtils.getResultLists = function (root) {\n return Dom_1.$$(root)\n .findAll(\".\" + ResultListUtils.cssClass())\n .map(function (el) { return Component_1.Component.get(el, ResultList_1.ResultList); });\n };\n ResultListUtils.cssClass = function () {\n return Component_1.Component.computeCssClassName(ResultList_1.ResultList);\n };\n ResultListUtils.warnIfComponentNotNeeded = function (cmp) {\n var root = cmp.searchInterface.root;\n var allListsUseInfiniteScroll = ResultListUtils.allResultListsUseInfiniteScroll(root);\n allListsUseInfiniteScroll && ResultListUtils.notNeededComponentWarning(cmp);\n };\n ResultListUtils.allResultListsUseInfiniteScroll = function (root) {\n var listsWithInfiniteScrollDisabled = ResultListUtils.getResultLists(root).filter(function (resultList) { return !resultList.options.enableInfiniteScroll; });\n return listsWithInfiniteScrollDisabled.length === 0;\n };\n ResultListUtils.notNeededComponentWarning = function (cmp) {\n var cmpCssClass = Component_1.Component.computeCssClassNameForType(cmp.type);\n var message = \"The \" + cmpCssClass + \" component is not needed because all \" + ResultListUtils.cssClass() + \" components have enableInfiniteScroll set to 'true'.\\n For the best performance, remove the \" + cmpCssClass + \" component from your search page.\";\n new Logger_1.Logger(cmp).warn(message);\n };\n return ResultListUtils;\n}());\nexports.ResultListUtils = ResultListUtils;\n\n\n/***/ }),\n\n/***/ 126:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ResponsiveDropdownContent_1 = __webpack_require__(90);\nvar ResponsiveComponentsUtils = /** @class */ (function () {\n function ResponsiveComponentsUtils() {\n }\n ResponsiveComponentsUtils.shouldDrawFacetSlider = function (root, facetSliderElement) {\n return ResponsiveDropdownContent_1.ResponsiveDropdownContent.isTargetInsideOpenedDropdown(facetSliderElement) || !this.isSmallFacetActivated(root);\n };\n ResponsiveComponentsUtils.isSmallTabsActivated = function (root) {\n return root.hasClass(this.smallTabsClassName);\n };\n ResponsiveComponentsUtils.isSmallFacetActivated = function (root) {\n return root.hasClass(this.smallFacetClassName);\n };\n ResponsiveComponentsUtils.isSmallRecommendationActivated = function (root) {\n return root.hasClass(this.smallRecommendationClassName);\n };\n ResponsiveComponentsUtils.activateSmallTabs = function (root) {\n root.addClass(this.smallTabsClassName);\n };\n ResponsiveComponentsUtils.deactivateSmallTabs = function (root) {\n root.removeClass(this.smallTabsClassName);\n };\n ResponsiveComponentsUtils.activateSmallFacet = function (root) {\n root.addClass(this.smallFacetClassName);\n };\n ResponsiveComponentsUtils.deactivateSmallFacet = function (root) {\n root.removeClass(this.smallFacetClassName);\n };\n ResponsiveComponentsUtils.activateSmallRecommendation = function (root) {\n root.addClass(this.smallRecommendationClassName);\n };\n ResponsiveComponentsUtils.deactivateSmallRecommendation = function (root) {\n root.removeClass(this.smallRecommendationClassName);\n };\n ResponsiveComponentsUtils.smallTabsClassName = 'coveo-small-tabs';\n ResponsiveComponentsUtils.smallFacetClassName = 'coveo-small-facets';\n ResponsiveComponentsUtils.smallRecommendationClassName = 'coveo-small-recommendation';\n return ResponsiveComponentsUtils;\n}());\nexports.ResponsiveComponentsUtils = ResponsiveComponentsUtils;\n\n\n/***/ }),\n\n/***/ 137:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(220);\nvar underscore_1 = __webpack_require__(0);\nvar Dom_1 = __webpack_require__(1);\nvar GlobalExports_1 = __webpack_require__(3);\nvar Component_1 = __webpack_require__(7);\nvar ComponentOptions_1 = __webpack_require__(8);\nvar Initialization_1 = __webpack_require__(2);\nvar ResponsiveFacetOptions_1 = __webpack_require__(83);\nvar ResponsiveDynamicFacets_1 = __webpack_require__(576);\nvar DynamicFacetBreadcrumbs_1 = __webpack_require__(577);\nvar DynamicFacetHeader_1 = __webpack_require__(506);\nvar DynamicFacetValues_1 = __webpack_require__(511);\nvar QueryEvents_1 = __webpack_require__(11);\nvar QueryStateModel_1 = __webpack_require__(13);\nvar DynamicFacetQueryController_1 = __webpack_require__(512);\nvar Utils_1 = __webpack_require__(4);\nvar Model_1 = __webpack_require__(18);\nvar Assert_1 = __webpack_require__(5);\nvar FacetSortCriteria_1 = __webpack_require__(507);\nvar Strings_1 = __webpack_require__(6);\nvar DeviceUtils_1 = __webpack_require__(24);\nvar BreadcrumbEvents_1 = __webpack_require__(34);\nvar AnalyticsActionListMeta_1 = __webpack_require__(10);\nvar DynamicFacetSearch_1 = __webpack_require__(579);\nvar ResultListUtils_1 = __webpack_require__(112);\nvar FacetRequest_1 = __webpack_require__(180);\nvar DependsOnManager_1 = __webpack_require__(172);\nvar DynamicFacetValueCreator_1 = __webpack_require__(582);\nvar Logger_1 = __webpack_require__(9);\nvar FacetUtils_1 = __webpack_require__(39);\n/**\n * The `DynamicFacet` component displays a *facet* of the results for the current query. A facet is a list of values for a\n * certain field occurring in the results, ordered using a configurable criteria (e.g., number of occurrences).\n *\n * The list of values is obtained using an array of [`FacetRequest`]{@link IFacetRequest} operations performed at the same time\n * as the main query.\n *\n * The `DynamicFacet` component allows the end-user to drill down inside a result set by restricting the result to certain\n * field values.\n *\n * This facet is more easy to use than the original [`Facet`]{@link Facet} component. It implements additional Coveo Machine Learning (Coveo ML) features\n * such as dynamic navigation experience (DNE).\n *\n * @notSupportedIn salesforcefree\n * @availablesince [May 2019 Release (v2.6063)](https://docs.coveo.com/en/2909/)\n */\nvar DynamicFacet = /** @class */ (function (_super) {\n __extends(DynamicFacet, _super);\n /**\n * Creates a new `DynamicFacet` instance.\n *\n * @param element The element from which to instantiate the component.\n * @param options The component options.\n * @param bindings The component bindings. Automatically resolved by default.\n */\n function DynamicFacet(element, options, bindings, classId) {\n if (classId === void 0) { classId = DynamicFacet.ID; }\n var _this = _super.call(this, element, classId, bindings) || this;\n _this.element = element;\n _this.listenToQueryStateChange = true;\n _this.moreValuesAvailable = false;\n _this.isDynamicFacet = true;\n _this.isFieldValueCompatible = true;\n _this.handleQueryStateChangedIncluded = function (querySelectedValues) {\n var currentSelectedValues = _this.values.selectedValues;\n var validQuerySelectedValues = querySelectedValues.filter(function (value) { return _this.values.get(value); });\n var valuesToSelect = underscore_1.difference(validQuerySelectedValues, currentSelectedValues);\n var valuesToDeselect = underscore_1.difference(currentSelectedValues, validQuerySelectedValues);\n if (Utils_1.Utils.isNonEmptyArray(valuesToSelect)) {\n _this.selectMultipleValues(valuesToSelect);\n }\n if (Utils_1.Utils.isNonEmptyArray(valuesToDeselect)) {\n _this.deselectMultipleValues(valuesToDeselect);\n }\n };\n _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, DynamicFacet, options);\n _this.initDynamicFacetQueryController();\n _this.initDependsOnManager();\n _this.initQueryEvents();\n _this.initQueryStateEvents();\n _this.initBreadCrumbEvents();\n _this.initComponentStateEvents();\n _this.initValues();\n _this.verifyCollapsingConfiguration();\n _this.isCollapsed = _this.options.enableCollapse && _this.options.collapsedByDefault;\n ResponsiveDynamicFacets_1.ResponsiveDynamicFacets.init(_this.root, _this, _this.options);\n return _this;\n }\n Object.defineProperty(DynamicFacet.prototype, \"fieldName\", {\n get: function () {\n return this.options.field.slice(1);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacet.prototype, \"facetType\", {\n get: function () {\n return FacetRequest_1.FacetType.specific;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Selects a single value in this facet.\n *\n * Does **not** trigger a query automatically.\n * Does **not** update the visual of the facet until a query is performed.\n *\n * @param value The name of the facet value to select.\n */\n DynamicFacet.prototype.selectValue = function (value) {\n Assert_1.Assert.exists(value);\n this.selectMultipleValues([value]);\n };\n /**\n * Selects multiple values in this facet.\n *\n * Does **not** trigger a query automatically.\n * Does **not** update the visual of the facet until a query is performed.\n *\n * @param values The names of the facet values to select.\n */\n DynamicFacet.prototype.selectMultipleValues = function (values) {\n var _this = this;\n Assert_1.Assert.exists(values);\n this.ensureDom();\n this.logger.info('Selecting facet value(s)', values);\n values.forEach(function (value) {\n _this.values.get(value).select();\n });\n this.updateQueryStateModel();\n };\n /**\n * Deselects a single value in this facet.\n *\n * Does **not** trigger a query automatically.\n * Does **not** update the visual of the facet until a query is performed.\n *\n * @param values The name of the facet value to deselect.\n */\n DynamicFacet.prototype.deselectValue = function (value) {\n Assert_1.Assert.exists(value);\n this.deselectMultipleValues([value]);\n };\n /**\n * Determines whether the specified value is selected in the facet.\n * @param value The name of the facet value to verify.\n */\n DynamicFacet.prototype.hasSelectedValue = function (value) {\n return this.values.hasSelectedValue(value);\n };\n /**\n * Deselects multiple values in this facet.\n *\n * Does **not** trigger a query automatically.\n * Does **not** update the visual of the facet until a query is performed.\n *\n * @param values The names of the facet values to deselect.\n */\n DynamicFacet.prototype.deselectMultipleValues = function (values) {\n var _this = this;\n Assert_1.Assert.exists(values);\n this.ensureDom();\n this.logger.info('Deselecting facet value(s)', values);\n values.forEach(function (value) {\n _this.values.get(value).deselect();\n });\n this.updateQueryStateModel();\n };\n /**\n * Toggles the selection state of a single value in this facet.\n *\n * Does **not** trigger a query automatically.\n *\n * @param values The name of the facet value to toggle.\n */\n DynamicFacet.prototype.toggleSelectValue = function (value) {\n Assert_1.Assert.exists(value);\n this.ensureDom();\n var facetValue = this.values.get(value);\n facetValue.toggleSelect();\n this.logger.info('Toggle select facet value', facetValue);\n this.updateQueryStateModel();\n };\n /**\n * Returns the configured caption for a desired facet value.\n *\n * @param value The string facet value whose caption the method should return.\n */\n DynamicFacet.prototype.getCaptionForStringValue = function (value) {\n return FacetUtils_1.FacetUtils.getDisplayValueFromValueCaption(value, this.options.field, this.options.valueCaption);\n };\n /**\n * Requests additional values.\n *\n * Automatically triggers an isolated query.\n * @param additionalNumberOfValues The number of additional values to request. Minimum value is 1. Defaults to the [numberOfValues]{@link DynamicFacet.options.numberOfValues} option value.\n */\n DynamicFacet.prototype.showMoreValues = function (additionalNumberOfValues) {\n var _this = this;\n if (additionalNumberOfValues === void 0) { additionalNumberOfValues = this.options.numberOfValues; }\n this.ensureDom();\n this.logger.info('Show more values');\n this.dynamicFacetQueryController.increaseNumberOfValuesToRequest(additionalNumberOfValues);\n this.triggerNewIsolatedQuery(function () { return _this.logAnalyticsFacetShowMoreLess(AnalyticsActionListMeta_1.analyticsActionCauseList.dynamicFacetShowMore); });\n };\n /**\n * Reduces the number of displayed facet values down to [numberOfValues]{@link DynamicFacet.options.numberOfValues}.\n *\n * Automatically triggers an isolated query.\n */\n DynamicFacet.prototype.showLessValues = function () {\n var _this = this;\n this.ensureDom();\n this.logger.info('Show less values');\n this.dynamicFacetQueryController.resetNumberOfValuesToRequest();\n this.triggerNewIsolatedQuery(function () { return _this.logAnalyticsFacetShowMoreLess(AnalyticsActionListMeta_1.analyticsActionCauseList.dynamicFacetShowLess); });\n };\n /**\n * Deselects all values in this facet.\n *\n * Does **not** trigger a query automatically.\n * Updates the visual of the facet.\n *\n */\n DynamicFacet.prototype.reset = function () {\n this.ensureDom();\n if (this.values.hasActiveValues) {\n this.logger.info('Deselect all values');\n this.values.clearAll();\n this.values.render();\n }\n this.enablePreventAutoSelectionFlag();\n this.updateAppearance();\n this.updateQueryStateModel();\n };\n /**\n * Collapses or expands the facet depending on it's current state.\n */\n DynamicFacet.prototype.toggleCollapse = function () {\n this.isCollapsed ? this.expand() : this.collapse();\n };\n /**\n * Expands the facet, displaying all of its currently fetched values.\n */\n DynamicFacet.prototype.expand = function () {\n if (!this.options.enableCollapse) {\n return this.logger.warn(\"Calling expand() won't do anything on a facet that has the option \\\"enableCollapse\\\" set to \\\"false\\\"\");\n }\n if (!this.isCollapsed) {\n return;\n }\n this.ensureDom();\n this.logger.info('Expand facet values');\n this.isCollapsed = false;\n this.updateAppearance();\n };\n /**\n * Collapses the facet, displaying only its currently selected values.\n */\n DynamicFacet.prototype.collapse = function () {\n if (!this.options.enableCollapse) {\n return this.logger.warn(\"Calling collapse() won't do anything on a facet that has the option \\\"enableCollapse\\\" set to \\\"false\\\"\");\n }\n if (this.isCollapsed) {\n return;\n }\n this.ensureDom();\n this.logger.info('Collapse facet values');\n this.isCollapsed = true;\n this.updateAppearance();\n };\n /**\n * Sets a flag indicating whether the facet values should be returned in their current order.\n *\n * Setting the flag to `true` helps ensuring that the values do not move around while the end-user is interacting with them.\n *\n * The flag is automatically set back to `false` after a query is built.\n */\n DynamicFacet.prototype.enableFreezeCurrentValuesFlag = function () {\n this.dynamicFacetQueryController.enableFreezeCurrentValuesFlag();\n };\n /**\n * For this method to work, the component has to be the child of a [DynamicFacetManager]{@link DynamicFacetManager} component.\n *\n * Sets a flag indicating whether the facets should be returned in their current order.\n *\n * Setting the flag to `true` helps ensuring that the facets do not move around while the end-user is interacting with them.\n *\n * The flag is automatically set back to `false` after a query is built.\n */\n DynamicFacet.prototype.enableFreezeFacetOrderFlag = function () {\n this.dynamicFacetQueryController.enableFreezeFacetOrderFlag();\n };\n DynamicFacet.prototype.enablePreventAutoSelectionFlag = function () {\n this.dynamicFacetQueryController.enablePreventAutoSelectionFlag();\n };\n DynamicFacet.prototype.scrollToTop = function () {\n if (this.options.enableScrollToTop) {\n ResultListUtils_1.ResultListUtils.scrollToTop(this.root);\n }\n };\n Object.defineProperty(DynamicFacet.prototype, \"analyticsFacetState\", {\n get: function () {\n return this.values.activeValues.map(function (facetValue) { return facetValue.analyticsFacetState; });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacet.prototype, \"basicAnalyticsFacetState\", {\n get: function () {\n return {\n field: this.options.field.toString(),\n id: this.options.id,\n title: this.options.title,\n facetType: this.facetType,\n facetPosition: this.position\n };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacet.prototype, \"basicAnalyticsFacetMeta\", {\n get: function () {\n return {\n facetField: this.options.field.toString(),\n facetId: this.options.id,\n facetTitle: this.options.title\n };\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacet.prototype.logAnalyticsEvent = function (actionCause, facetMeta) {\n this.usageAnalytics.logSearchEvent(actionCause, facetMeta);\n };\n DynamicFacet.prototype.putStateIntoQueryBuilder = function (queryBuilder) {\n Assert_1.Assert.exists(queryBuilder);\n this.dynamicFacetQueryController.putFacetIntoQueryBuilder(queryBuilder);\n };\n DynamicFacet.prototype.putStateIntoAnalytics = function () {\n var pendingEvent = this.usageAnalytics.getPendingSearchEvent();\n pendingEvent && pendingEvent.addFacetState(this.analyticsFacetState);\n };\n DynamicFacet.prototype.isCurrentlyDisplayed = function () {\n return Dom_1.$$(this.element).isVisible();\n };\n Object.defineProperty(DynamicFacet.prototype, \"hasActiveValues\", {\n get: function () {\n return this.values.hasActiveValues;\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacet.prototype.initQueryEvents = function () {\n var _this = this;\n this.bind.onRootElement(QueryEvents_1.QueryEvents.duringQuery, function () { return _this.ensureDom(); });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.doneBuildingQuery, function (data) { return _this.handleDoneBuildingQuery(data); });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function (data) { return _this.handleQuerySuccess(data.results); });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function () { return _this.onNoValues(); });\n };\n DynamicFacet.prototype.initQueryStateEvents = function () {\n this.includedAttributeId = QueryStateModel_1.QueryStateModel.getFacetId(this.options.id);\n this.queryStateModel.registerNewAttribute(this.includedAttributeId, []);\n this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE, undefined, this.handleQueryStateChanged);\n };\n DynamicFacet.prototype.initBreadCrumbEvents = function () {\n var _this = this;\n if (this.options.includeInBreadcrumb) {\n this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.populateBreadcrumb, function (args) {\n return _this.handlePopulateBreadcrumb(args);\n });\n this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.clearBreadcrumb, function () { return _this.reset(); });\n }\n };\n DynamicFacet.prototype.initValues = function () {\n this.values = new DynamicFacetValues_1.DynamicFacetValues(this, DynamicFacetValueCreator_1.DynamicFacetValueCreator);\n };\n DynamicFacet.prototype.initComponentStateEvents = function () {\n var componentStateId = QueryStateModel_1.QueryStateModel.getFacetId(this.options.id);\n this.componentStateModel.registerComponent(componentStateId, this);\n };\n DynamicFacet.prototype.initDynamicFacetQueryController = function () {\n this.dynamicFacetQueryController = new DynamicFacetQueryController_1.DynamicFacetQueryController(this);\n };\n DynamicFacet.prototype.handleDoneBuildingQuery = function (data) {\n // If there is a DynamicFacetManager, it will take care of adding the facet's state\n if (this.dynamicFacetManager) {\n return;\n }\n Assert_1.Assert.exists(data);\n Assert_1.Assert.exists(data.queryBuilder);\n this.putStateIntoQueryBuilder(data.queryBuilder);\n this.putStateIntoAnalytics();\n };\n DynamicFacet.prototype.handleQuerySuccess = function (results) {\n // If there is a DynamicFacetManager, it will take care of handling the results\n if (this.dynamicFacetManager) {\n return;\n }\n if (Utils_1.Utils.isNullOrUndefined(results.facets)) {\n return this.notImplementedError();\n }\n this.handleQueryResults(results);\n };\n DynamicFacet.prototype.handleQueryResults = function (results) {\n var index = underscore_1.findIndex(results.facets, { facetId: this.options.id });\n var facetResponse = index !== -1 ? results.facets[index] : null;\n this.position = facetResponse ? index + 1 : undefined;\n facetResponse ? this.onNewValues(facetResponse) : this.onNoValues();\n this.header.hideLoading();\n this.updateQueryStateModel();\n this.values.render();\n this.updateAppearance();\n };\n DynamicFacet.prototype.onNewValues = function (facetResponse) {\n this.moreValuesAvailable = facetResponse.moreValuesAvailable;\n this.values.createFromResponse(facetResponse);\n if (this.options.customSort) {\n this.values.reorderValues(this.options.customSort);\n }\n };\n DynamicFacet.prototype.onNoValues = function () {\n this.moreValuesAvailable = false;\n this.values.resetValues();\n };\n DynamicFacet.prototype.handleQueryStateChanged = function (data) {\n if (!this.listenToQueryStateChange) {\n return;\n }\n var querySelectedValues = data.attributes[this.includedAttributeId];\n if (!querySelectedValues) {\n return;\n }\n this.handleQueryStateChangedIncluded(querySelectedValues);\n };\n DynamicFacet.prototype.handlePopulateBreadcrumb = function (args) {\n Assert_1.Assert.exists(args);\n if (!this.values.hasActiveValues) {\n return;\n }\n var breadcrumbs = new DynamicFacetBreadcrumbs_1.DynamicFacetBreadcrumbs(this);\n args.breadcrumbs.push({ element: breadcrumbs.element });\n };\n DynamicFacet.prototype.initDependsOnManager = function () {\n var _this = this;\n var facetInfo = {\n reset: function () { return _this.reset(); },\n ref: this\n };\n this.dependsOnManager = new DependsOnManager_1.DependsOnManager(facetInfo);\n };\n DynamicFacet.prototype.createDom = function () {\n this.createAndAppendContent();\n this.updateAppearance();\n };\n DynamicFacet.prototype.createAndAppendContent = function () {\n this.createAndAppendHeader();\n this.createAndAppendSearch();\n this.createAndAppendValues();\n };\n DynamicFacet.prototype.createAndAppendHeader = function () {\n var _this = this;\n this.header = new DynamicFacetHeader_1.DynamicFacetHeader({\n title: this.options.title,\n enableCollapse: this.options.enableCollapse,\n clear: function () { return _this.clear(); },\n toggleCollapse: function () { return _this.toggleCollapse(); },\n collapse: function () { return _this.collapse(); },\n expand: function () { return _this.expand(); }\n });\n this.element.appendChild(this.header.element);\n };\n DynamicFacet.prototype.createAndAppendSearch = function () {\n if (this.options.enableFacetSearch === false) {\n return;\n }\n this.search = new DynamicFacetSearch_1.DynamicFacetSearch(this);\n this.element.appendChild(this.search.element);\n };\n DynamicFacet.prototype.createAndAppendValues = function () {\n this.element.appendChild(this.values.render());\n };\n DynamicFacet.prototype.updateQueryStateModel = function () {\n this.listenToQueryStateChange = false;\n this.queryStateModel.set(this.includedAttributeId, this.values.selectedValues);\n this.listenToQueryStateChange = true;\n };\n DynamicFacet.prototype.updateAppearance = function () {\n this.header.toggleClear(this.values.hasSelectedValues);\n this.header.toggleCollapse(this.isCollapsed);\n this.toggleSearchDisplay();\n Dom_1.$$(this.element).toggleClass('coveo-dynamic-facet-collapsed', this.isCollapsed);\n Dom_1.$$(this.element).toggleClass('coveo-active', this.values.hasSelectedValues);\n Dom_1.$$(this.element).toggleClass('coveo-hidden', !this.values.hasDisplayedValues);\n };\n DynamicFacet.prototype.toggleSearchDisplay = function () {\n if (this.options.enableFacetSearch === false) {\n return;\n }\n if (this.isCollapsed) {\n return Dom_1.$$(this.search.element).toggleClass('coveo-hidden', true);\n }\n Dom_1.$$(this.search.element).toggleClass('coveo-hidden', !this.options.enableFacetSearch && !this.moreValuesAvailable);\n };\n DynamicFacet.prototype.triggerNewQuery = function (beforeExecuteQuery) {\n this.beforeSendingQuery();\n var options = beforeExecuteQuery ? { beforeExecuteQuery: beforeExecuteQuery } : { ignoreWarningSearchEvent: true };\n this.queryController.executeQuery(options);\n };\n DynamicFacet.prototype.triggerNewIsolatedQuery = function (beforeExecuteQuery) {\n return __awaiter(this, void 0, void 0, function () {\n var results, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.beforeSendingQuery();\n beforeExecuteQuery && beforeExecuteQuery();\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this.dynamicFacetQueryController.getQueryResults()];\n case 2:\n results = _a.sent();\n this.handleQueryResults(results);\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n this.header.hideLoading();\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n DynamicFacet.prototype.beforeSendingQuery = function () {\n this.header.showLoading();\n };\n DynamicFacet.prototype.notImplementedError = function () {\n this.logger.error('DynamicFacets are not supported by your current search endpoint. Disabling this component.');\n this.disable();\n this.updateAppearance();\n };\n DynamicFacet.prototype.verifyCollapsingConfiguration = function () {\n if (this.options.collapsedByDefault && !this.options.enableCollapse) {\n this.logger.warn('The \"collapsedByDefault\" option is \"true\" while the \"enableCollapse\" is \"false\"');\n }\n };\n DynamicFacet.prototype.logAnalyticsFacetShowMoreLess = function (cause) {\n this.usageAnalytics.logCustomEvent(cause, this.basicAnalyticsFacetMeta, this.element);\n };\n DynamicFacet.prototype.clear = function () {\n var _this = this;\n this.reset();\n this.enableFreezeFacetOrderFlag();\n this.scrollToTop();\n this.triggerNewQuery(function () { return _this.logClearAllToAnalytics(); });\n };\n DynamicFacet.prototype.logClearAllToAnalytics = function () {\n this.logAnalyticsEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.dynamicFacetClearAll, this.basicAnalyticsFacetMeta);\n };\n DynamicFacet.ID = 'DynamicFacet';\n DynamicFacet.doExport = function () { return GlobalExports_1.exportGlobally({ DynamicFacet: DynamicFacet }); };\n /**\n * The options for the DynamicFacet\n * @componentOptions\n */\n DynamicFacet.options = __assign({}, ResponsiveFacetOptions_1.ResponsiveFacetOptions, { \n /**\n * The unique identifier for this facet.\n *\n * Among other things, this is used to record and read the facet\n * state in the URL fragment identifier (see the\n * [`enableHistory`]{@link SearchInterface.options.enableHistory} `SearchInterface`\n * option).\n *\n * **Tip:** When several facets in a given search interface are based on\n * the same field, ensure that each of those facets has a distinct `id`.\n *\n * If specified, must contain between 1 and 60 characters.\n * Only alphanumeric (A-Za-z0-9), underscore (_), and hyphen (-) characters are kept; other characters are automatically removed.\n *\n * Defaults to the [`field`]{@link DynamicFacet.options.field} option value.\n *\n * @examples author-facet\n */\n id: ComponentOptions_1.ComponentOptions.buildStringOption({\n postProcessing: function (value, options) {\n if (value === void 0) { value = ''; }\n var maxCharLength = 60;\n var sanitizedValue = value.replace(/[^A-Za-z0-9-_@]+/g, '');\n if (Utils_1.Utils.isNonEmptyString(sanitizedValue)) {\n return sanitizedValue.slice(0, maxCharLength - 1);\n }\n return options.field.slice(0, maxCharLength - 1);\n },\n section: 'CommonOptions'\n }), \n /**\n * The title to display for this facet.\n *\n * Defaults to the localized string for `NoTitle`.\n *\n * @examples Author\n */\n title: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({\n localizedString: function () { return Strings_1.l('NoTitle'); },\n section: 'CommonOptions',\n priority: 10\n }), \n /**\n * The name of the field on which to base this facet.\n *\n * Must be prefixed by `@`, and must reference an existing field whose\n * **Facet** option is enabled.\n *\n * @externaldocs [Add or Edit Fields](https://docs.coveo.com/en/1982/)\n * @examples @author\n */\n field: ComponentOptions_1.ComponentOptions.buildFieldOption({ required: true, section: 'CommonOptions' }), \n /**\n * The sort criterion to use for this facet.\n *\n * See [`FacetSortCriteria`]{@link FacetSortCriteria} for the list and\n * description of allowed values.\n *\n * By default, the following behavior applies:\n *\n * - If the requested [`numberOfValues`]{@link DynamicFacet.options.numberOfValues}\n * is greater than or equal to the currently displayed number of values,\n * the [`alphanumeric`]{@link FacetSortCriteria.alphanumeric} criterion is\n * used.\n * - If the requested `numberOfValues` is less than the currently displayed\n * number of values and the facet is not currently expanded, the [`score`]{@link FacetSortCriteria.score}\n * criterion is used.\n * - Otherwise, the `alphanumeric` criterion is used.\n *\n * @examples score\n */\n sortCriteria: ComponentOptions_1.ComponentOptions.buildStringOption({\n postProcessing: function (value) {\n if (!value) {\n return undefined;\n }\n if (FacetSortCriteria_1.isFacetSortCriteria(value)) {\n return value;\n }\n new Logger_1.Logger(value).warn('sortCriteria is not of the the allowed values: \"score\", \"alphanumeric\", \"occurrences\"');\n return undefined;\n },\n section: 'Sorting'\n }), \n /**\n * Specifies a custom order by which to sort the dynamic facet values.\n *\n * Custom-ordered values won't necessarily retrieve values from the index.\n *\n * **Example:**\n *\n * You could use this option to specify a logical order for support tickets, such as:\n * ```html\n *
\n * ```\n *\n * **Note:**\n * > The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n */\n customSort: ComponentOptions_1.ComponentOptions.buildListOption({ section: 'Sorting' }), \n /**\n * The number of values to request for this facet.\n *\n * Also determines the default maximum number of additional values to request each time this facet is expanded,\n * and the maximum number of values to display when this facet is collapsed (see the [`enableCollapse`]{@link DynamicFacet.options.enableCollapse} option).\n */\n numberOfValues: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0, defaultValue: 8, section: 'CommonOptions' }), \n /**\n * Whether to allow the end-user to expand and collapse this facet.\n */\n enableCollapse: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'CommonOptions' }), \n /**\n * Whether to scroll back to the top of the page whenever the end-user interacts with the facet.\n */\n enableScrollToTop: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'CommonOptions' }), \n /**\n * Whether to enable the **Show more** and **Show less** buttons in the facet.\n *\n * **Note:** The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n */\n enableMoreLess: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'CommonOptions' }), \n /**\n * Whether to allow the end-user to search the facet values.\n *\n * **Note:** The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n *\n * By default, the following behavior applies:\n *\n * - Enabled when more facet values are available.\n * - Disabled when all available facet values are already displayed.\n */\n enableFacetSearch: ComponentOptions_1.ComponentOptions.buildBooleanOption({ section: 'Filtering' }), \n /**\n * Whether to prepend facet search queries with a wildcard.\n *\n * **Note:** The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n */\n useLeadingWildcardInFacetSearch: ComponentOptions_1.ComponentOptions.buildBooleanOption({\n defaultValue: true,\n section: 'Filtering',\n depend: 'enableFacetSearch'\n }), \n /**\n * Whether this facet should be collapsed by default.\n */\n collapsedByDefault: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, section: 'CommonOptions', depend: 'enableCollapse' }), \n /**\n * Whether to notify the [`Breadcrumb`]{@link Breadcrumb} component when toggling values in the facet.\n *\n * See also the [`numberOfValuesInBreadcrumb`]{@link DynamicFacet.options.numberOfValuesInBreadcrumb} option.\n */\n includeInBreadcrumb: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'CommonOptions' }), \n /**\n * The maximum number of selected values the [`Breadcrumb`]{@link Breadcrumb} component can display before outputting a **N more...** link for the facet.\n */\n numberOfValuesInBreadcrumb: ComponentOptions_1.ComponentOptions.buildNumberOption({\n defaultFunction: function () { return (DeviceUtils_1.DeviceUtils.isMobileDevice() ? 3 : 5); },\n min: 0,\n depend: 'includeInBreadcrumb',\n section: 'CommonOptions'\n }), \n /**\n * A mapping of facet values to their desired captions.\n *\n * **Note:** The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n *\n * @externaldocs [Normalizing Facet Value Captions](https://docs.coveo.com/368/).\n * @examples { \"smith_alice\": \"Alice Smith\"\\, \"jones_bob_r\": \"Bob R. Jones\" }\n */\n valueCaption: ComponentOptions_1.ComponentOptions.buildJsonOption({ defaultValue: {} }), \n /**\n * The [`id`]{@link DynamicFacet.options.id} of another facet in which at least one value must be selected in order for the dependent facet to be visible.\n *\n * By default, the facet does not depend on any other facet to be displayed.\n *\n * @examples document-type-facet\n *\n * @availablesince [December 2019 Release (v2.7610)](https://docs.coveo.com/en/3142/)\n */\n dependsOn: ComponentOptions_1.ComponentOptions.buildStringOption({ section: 'CommonOptions' }), \n /**\n * A function that verifies whether the current state of the `dependsOn` facet allows the dependent facet to be displayed.\n *\n * If specified, the function receives a reference to the resolved `dependsOn` facet component instance as an argument, and must return a boolean.\n * The function's argument should typically be treated as read-only.\n *\n * By default, the dependent facet is displayed whenever one or more values are selected in its `dependsOn` facet.\n *\n * @externaldocs [Defining Dependent Facets](https://docs.coveo.com/3210/)\n *\n * @availablesince [April 2020 Release (v2.8864)](https://docs.coveo.com/en/3231/)\n */\n dependsOnCondition: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n return null;\n }, { depend: 'dependsOn', section: 'CommonOptions' }), \n /**\n * The number of items to scan for facet values.\n *\n * Setting this option to a higher value may enhance the accuracy of facet value counts at the cost of slower query performance.\n *\n * @availablesince [January 2020 Release (v2.7968)](https://docs.coveo.com/en/3163/)\n */\n injectionDepth: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 1000, min: 0 }), \n /**\n * Whether to exclude folded result parents when estimating result counts for facet values.\n *\n * **Note:** The target folding field must be a facet field with the **Use cache for nested queries** options enabled (see [Add or Edit a Field](https://docs.coveo.com/en/1982)).\n *\n * See also the [`Folding`]{@link Folding} and [`FoldingForThread`]{@link FoldingForThread} components.\n *\n * **Default:** `false` if folded results are requested; `true` otherwise.\n *\n * @availablesince [March 2020 Release (v2.8521)](https://docs.coveo.com/en/3203/)\n */\n filterFacetCount: ComponentOptions_1.ComponentOptions.buildBooleanOption({ section: 'Filtering' }) });\n return DynamicFacet;\n}(Component_1.Component));\nexports.DynamicFacet = DynamicFacet;\nInitialization_1.Initialization.registerAutoCreateComponent(DynamicFacet);\nDynamicFacet.doExport();\n\n\n/***/ }),\n\n/***/ 172:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar underscore_1 = __webpack_require__(0);\nvar Core_1 = __webpack_require__(20);\nvar Model_1 = __webpack_require__(18);\nvar ComponentsTypes_1 = __webpack_require__(47);\nvar Dom_1 = __webpack_require__(1);\nvar InitializationEvents_1 = __webpack_require__(17);\nvar DependsOnManager = /** @class */ (function () {\n function DependsOnManager(facet) {\n var _this = this;\n this.facet = facet;\n Dom_1.$$(this.facet.ref.searchInterface.element).on(Core_1.QueryEvents.buildingQuery, function () { return _this.handleBuildingQuery(); });\n if (this.getDependsOn(this.facet.ref)) {\n this.facet.ref.bind.onRootElement(InitializationEvents_1.InitializationEvents.afterComponentsInitialization, function () { return _this.setupDependentFacet(); });\n }\n }\n DependsOnManager.prototype.setupDependentFacet = function () {\n var _this = this;\n Dom_1.$$(this.facet.ref.element).addClass('coveo-hidden-dependant-facet');\n this.parentFacetRef = this.getParentFacet(this.facet.ref);\n if (this.parentFacetRef) {\n this.facet.ref.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE, undefined, function () { return _this.resetIfConditionUnfullfiled(); });\n }\n };\n DependsOnManager.prototype.resetIfConditionUnfullfiled = function () {\n var condition = this.getDependsOnCondition(this.facet.ref);\n if (!condition(this.parentFacetRef)) {\n this.facet.reset();\n }\n };\n DependsOnManager.prototype.getId = function (component) {\n var id = component.options.id;\n return id ? \"\" + id : null;\n };\n DependsOnManager.prototype.getDependsOn = function (component) {\n var dependsOn = component.options.dependsOn;\n return dependsOn ? \"\" + dependsOn : null;\n };\n DependsOnManager.prototype.getDependsOnCondition = function (component) {\n var _this = this;\n var conditionOption = component.options.dependsOnCondition;\n return conditionOption && underscore_1.isFunction(conditionOption) ? conditionOption : function () { return _this.parentHasSelectedValues(component); };\n };\n DependsOnManager.prototype.parentHasSelectedValues = function (component) {\n var parent = this.getParentFacet(component);\n return parent && this.valuesExistForFacetWithId(this.getId(parent));\n };\n DependsOnManager.prototype.valuesExistForFacetWithId = function (facetId) {\n var values = this.facet.ref.queryStateModel.get(Core_1.QueryStateModel.getFacetId(facetId));\n return !!values && !!values.length;\n };\n Object.defineProperty(DependsOnManager.prototype, \"allFacetsInInterface\", {\n get: function () {\n return ComponentsTypes_1.ComponentsTypes.getAllFacetsFromSearchInterface(this.facet.ref.searchInterface);\n },\n enumerable: true,\n configurable: true\n });\n DependsOnManager.prototype.getParentFacet = function (component) {\n var _this = this;\n var parent = this.allFacetsInInterface.filter(function (potentialParentFacet) { return _this.getId(potentialParentFacet) === _this.getDependsOn(component); });\n if (!parent.length) {\n component.logger.warn('DependsOn reference does not exist', this.getDependsOn(this.facet.ref));\n return null;\n }\n return parent[0];\n };\n Object.defineProperty(DependsOnManager.prototype, \"dependentFacets\", {\n get: function () {\n var _this = this;\n return this.allFacetsInInterface.filter(function (potentialDependentFacet) { return _this.getId(_this.facet.ref) === _this.getDependsOn(potentialDependentFacet); });\n },\n enumerable: true,\n configurable: true\n });\n DependsOnManager.prototype.handleBuildingQuery = function () {\n var _this = this;\n this.dependentFacets.forEach(function (dependentFacet) {\n var condition = _this.getDependsOnCondition(dependentFacet);\n if (condition(_this.facet.ref)) {\n Dom_1.$$(dependentFacet.element).removeClass('coveo-hidden-dependant-facet');\n return dependentFacet.enable();\n }\n dependentFacet.disable();\n Dom_1.$$(dependentFacet.element).addClass('coveo-hidden-dependant-facet');\n });\n };\n Object.defineProperty(DependsOnManager.prototype, \"hasDependentFacets\", {\n get: function () {\n return !!this.dependentFacets.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DependsOnManager.prototype, \"dependentFacetsHaveSelectedValues\", {\n get: function () {\n var _this = this;\n return this.dependentFacets.some(function (dependentFacet) { return _this.valuesExistForFacetWithId(_this.getId(dependentFacet)); });\n },\n enumerable: true,\n configurable: true\n });\n return DependsOnManager;\n}());\nexports.DependsOnManager = DependsOnManager;\n\n\n/***/ }),\n\n/***/ 174:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Component_1 = __webpack_require__(7);\nvar ComponentOptions_1 = __webpack_require__(8);\nvar GlobalExports_1 = __webpack_require__(3);\nvar Core_1 = __webpack_require__(20);\nvar Initialization_1 = __webpack_require__(2);\n/**\n * This component lets you customize the mobile responsive behavior of facets in your search interface.\n *\n * **Notes:**\n * - You can include this component anywhere under the root element of your search interface.\n * - You should only include this component once in your search interface.\n * - If you do not include this component in your search interface, facets will still have a default mobile responsive behavior.\n */\nvar FacetsMobileMode = /** @class */ (function (_super) {\n __extends(FacetsMobileMode, _super);\n function FacetsMobileMode(element, options, bindings) {\n var _this = _super.call(this, element, FacetsMobileMode.ID, bindings) || this;\n _this.element = element;\n _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, FacetsMobileMode, options);\n if (_this.options.preventScrolling) {\n var scrollContainer = _this.options.scrollContainer || _this.searchInterface.element;\n _this.options.scrollContainer = ComponentOptions_1.ComponentOptions.findParentScrollLockable(scrollContainer);\n }\n return _this;\n }\n FacetsMobileMode.ID = 'FacetsMobileMode';\n /**\n * @componentOptions\n */\n FacetsMobileMode.options = {\n /**\n * The screen width (in number of pixels) at which facets should enter mobile responsive mode and be collapsed under a single button.\n *\n * **Default:** `800`\n */\n breakpoint: ComponentOptions_1.ComponentOptions.buildNumberOption(),\n /**\n * Whether to display the facets in a modal instead of a pop-up when the end user expands them in mobile responsive mode.\n */\n isModal: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n /**\n * Whether to display an overlay behind the facets when the end user expands them in mobile responsive mode.\n *\n * By default, the following behavior applies:\n * - `true` when [isModal]{@link FacetsMobileMode.options.isModal} is `false`\n * - `false` when [isModal]{@link FacetsMobileMode.options.isModal} is `true`\n */\n displayOverlayWhileOpen: ComponentOptions_1.ComponentOptions.buildBooleanOption({\n postProcessing: function (value, options) { return (Core_1.Utils.isNullOrUndefined(value) ? !options.isModal : value); }\n }),\n /**\n * Whether to disable vertical scrolling on the specified or resolved [`scrollContainer`]{@link FacetsMobileMode.options.scrollContainer} while facets are expanded in mobile responsive mode.\n *\n * By default, the following behavior applies:\n * - `true` when [isModal]{@link FacetsMobileMode.options.isModal} is `true`\n * - `false` when [isModal]{@link FacetsMobileMode.options.isModal} is `false`\n */\n preventScrolling: ComponentOptions_1.ComponentOptions.buildBooleanOption({\n postProcessing: function (value, options) { return (Core_1.Utils.isNullOrUndefined(value) ? options.isModal : value); }\n }),\n /**\n * The HTML element whose vertical scrolling should be locked while facets are expanded in mobile responsive mode.\n *\n * By default, the component tries to detect and use the first ancestor element whose CSS `overflow-y` attribute is set to `scroll`, starting from the `FacetsMobileMode`'s element itself. If no such element is found, the `document.body` element is used.\n *\n * Since this heuristic is not perfect, we strongly recommend that you manually set this option by explicitly specifying the desired CSS selector.\n *\n * **Example:** `data-scroll-container-selector='#someCssSelector'`\n */\n scrollContainer: ComponentOptions_1.ComponentOptions.buildChildHtmlElementOption({ depend: 'preventScrolling' })\n };\n FacetsMobileMode.doExport = function () {\n GlobalExports_1.exportGlobally({\n FacetsMobileMode: FacetsMobileMode\n });\n };\n return FacetsMobileMode;\n}(Component_1.Component));\nexports.FacetsMobileMode = FacetsMobileMode;\nInitialization_1.Initialization.registerAutoCreateComponent(FacetsMobileMode);\n\n\n/***/ }),\n\n/***/ 180:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The allowed values for the [`facetType`]{@link IFacetRequest.facetType} property of a [facet request]{@link IFacetRequest}.\n */\nvar FacetType;\n(function (FacetType) {\n /**\n * Request facet values representing specific values.\n */\n FacetType[\"specific\"] = \"specific\";\n /**\n * Request facet values representing ranges of numbers.\n */\n FacetType[\"numericalRange\"] = \"numericalRange\";\n /**\n * Request facet values representing ranges of dates.\n */\n FacetType[\"dateRange\"] = \"dateRange\";\n /**\n * Request facet values representing a hierarchy.\n */\n FacetType[\"hierarchical\"] = \"hierarchical\";\n})(FacetType = exports.FacetType || (exports.FacetType = {}));\n\n\n/***/ }),\n\n/***/ 210:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Component_1 = __webpack_require__(7);\nvar _ = __webpack_require__(0);\nvar ResultListRenderer = /** @class */ (function () {\n function ResultListRenderer(resultListOptions, autoCreateComponentsFn) {\n this.resultListOptions = resultListOptions;\n this.autoCreateComponentsFn = autoCreateComponentsFn;\n }\n ResultListRenderer.prototype.renderResults = function (resultElements, append, resultDisplayedCallback) {\n var _this = this;\n if (append === void 0) { append = false; }\n return Promise.all([this.getStartFragment(resultElements, append), this.getEndFragment(resultElements, append)]).then(function (_a) {\n var startFrag = _a[0], endFrag = _a[1];\n var resultsFragment = document.createDocumentFragment();\n if (startFrag) {\n resultsFragment.appendChild(startFrag);\n }\n _.each(resultElements, function (resultElement) {\n resultsFragment.appendChild(resultElement);\n resultDisplayedCallback(Component_1.Component.getResult(resultElement), resultElement);\n });\n if (endFrag) {\n resultsFragment.appendChild(endFrag);\n }\n _this.resultListOptions.resultsContainer.appendChild(resultsFragment);\n });\n };\n ResultListRenderer.prototype.getStartFragment = function (resultElements, append) {\n return Promise.resolve(document.createDocumentFragment());\n };\n ResultListRenderer.prototype.getEndFragment = function (resultElements, append) {\n return Promise.resolve(document.createDocumentFragment());\n };\n return ResultListRenderer;\n}());\nexports.ResultListRenderer = ResultListRenderer;\n\n\n/***/ }),\n\n/***/ 211:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(531);\nvar QueryEvents_1 = __webpack_require__(11);\nvar Logger_1 = __webpack_require__(9);\nvar Strings_1 = __webpack_require__(6);\nvar Dom_1 = __webpack_require__(1);\nvar Utils_1 = __webpack_require__(4);\nvar Component_1 = __webpack_require__(7);\nvar SearchInterface_1 = __webpack_require__(19);\nvar ResponsiveComponents_1 = __webpack_require__(53);\nvar ResponsiveComponentsManager_1 = __webpack_require__(60);\nvar ResponsiveComponentsUtils_1 = __webpack_require__(126);\nvar ResponsiveDropdown_1 = __webpack_require__(118);\nvar ResponsiveDropdownContent_1 = __webpack_require__(90);\nvar ResponsiveDropdownHeader_1 = __webpack_require__(131);\nvar underscore_1 = __webpack_require__(0);\nvar ComponentsTypes_1 = __webpack_require__(47);\nvar ResponsiveDropdownModalContent_1 = __webpack_require__(532);\nvar FacetsMobileMode_1 = __webpack_require__(174);\nvar FacetsMobileModeEvents_1 = __webpack_require__(533);\nvar ResponsiveFacetColumn = /** @class */ (function () {\n function ResponsiveFacetColumn(coveoRoot, ID, options, responsiveDropdown) {\n this.coveoRoot = coveoRoot;\n this.ID = ID;\n this.componentsInFacetColumn = [];\n this.preservePositionOriginalValues = [];\n this.searchInterface = Component_1.Component.get(this.coveoRoot.el, SearchInterface_1.SearchInterface, false);\n this.dropdownHeaderLabel = this.getDropdownHeaderLabel();\n this.dropdown = this.buildDropdown(responsiveDropdown);\n this.bindDropdownContentEvents();\n this.bindFacetsMobileModeEvents();\n this.registerOnCloseHandler();\n this.registerQueryEvents();\n this.initializeBreakpoint(options.responsiveBreakpoint);\n }\n ResponsiveFacetColumn.init = function (responsiveComponentConstructor, root, component, options, ID) {\n var column = this.findColumn(root);\n if (!column) {\n return;\n }\n ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(ResponsiveFacetColumn, Dom_1.$$(root), 'ResponsiveFacetColumn', component, options);\n ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(responsiveComponentConstructor, Dom_1.$$(root), ID, component, options);\n };\n ResponsiveFacetColumn.findColumn = function (root) {\n var column = Dom_1.$$(root).find('.coveo-facet-column');\n if (!column) {\n var logger = new Logger_1.Logger('ResponsiveFacets');\n logger.info('No element with class coveo-facet-column. Responsive facets cannot be enabled');\n }\n return column;\n };\n Object.defineProperty(ResponsiveFacetColumn.prototype, \"facetsMobileModeComponent\", {\n get: function () {\n return this.searchInterface ? this.searchInterface.getComponents(FacetsMobileMode_1.FacetsMobileMode.ID)[0] : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ResponsiveFacetColumn.prototype, \"facetsMobileModeOptions\", {\n get: function () {\n var facetsMobileModeComponent = this.facetsMobileModeComponent;\n if (!facetsMobileModeComponent) {\n return {\n isModal: false,\n preventScrolling: false,\n displayOverlayWhileOpen: true\n };\n }\n return facetsMobileModeComponent.options;\n },\n enumerable: true,\n configurable: true\n });\n ResponsiveFacetColumn.prototype.registerComponent = function (accept) {\n this.componentsInFacetColumn.push(accept);\n this.preservePositionOriginalValues.push(accept.options.preservePosition);\n return true;\n };\n ResponsiveFacetColumn.prototype.needDropdownWrapper = function () {\n return this.needSmallMode();\n };\n ResponsiveFacetColumn.prototype.handleResizeEvent = function () {\n if (this.needSmallMode() && !ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {\n this.changeToSmallMode();\n }\n else if (!this.needSmallMode() && ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {\n this.changeToLargeMode();\n }\n if (this.dropdown.isOpened) {\n this.dropdown.dropdownContent.positionDropdown();\n }\n };\n ResponsiveFacetColumn.prototype.dismissFacetSearches = function () {\n underscore_1.each(this.componentsInFacetColumn, function (component) {\n if (component.facetSearch && component.facetSearch.currentlyDisplayedResults) {\n component.facetSearch.dismissSearchResults();\n }\n });\n };\n ResponsiveFacetColumn.prototype.needSmallMode = function () {\n if (!this.searchInterface) {\n return (this.coveoRoot.width() <=\n (Utils_1.Utils.isNullOrUndefined(this.breakpoint) ? new ResponsiveComponents_1.ResponsiveComponents().getMediumScreenWidth() : this.breakpoint));\n }\n switch (this.searchInterface.responsiveComponents.getResponsiveMode()) {\n case 'small':\n case 'medium':\n return true;\n case 'auto':\n return (this.coveoRoot.width() <=\n (Utils_1.Utils.isNullOrUndefined(this.breakpoint) ? this.searchInterface.responsiveComponents.getMediumScreenWidth() : this.breakpoint));\n default:\n return false;\n }\n };\n ResponsiveFacetColumn.prototype.changeToSmallMode = function () {\n this.dropdown.close();\n this.disableFacetPreservePosition();\n Dom_1.$$(this.coveoRoot.find(\".\" + ResponsiveComponentsManager_1.ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS)).append(this.dropdown.dropdownHeader.element.el);\n ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.activateSmallFacet(this.coveoRoot);\n };\n ResponsiveFacetColumn.prototype.changeToLargeMode = function () {\n this.restoreFacetPreservePositionValue();\n this.dropdown.cleanUp();\n ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.deactivateSmallFacet(this.coveoRoot);\n };\n ResponsiveFacetColumn.prototype.buildDropdown = function (responsiveDropdown) {\n var dropdownContent = this.buildDropdownContent();\n var dropdownHeader = this.buildDropdownHeader();\n var dropdown = responsiveDropdown ? responsiveDropdown : new ResponsiveDropdown_1.ResponsiveDropdown(dropdownContent, dropdownHeader, this.coveoRoot);\n if (!this.facetsMobileModeOptions.displayOverlayWhileOpen) {\n dropdown.disablePopupBackground();\n }\n if (this.facetsMobileModeOptions.preventScrolling) {\n dropdown.enableScrollLocking(this.facetsMobileModeOptions.scrollContainer);\n }\n return dropdown;\n };\n ResponsiveFacetColumn.prototype.buildDropdownContent = function () {\n var _this = this;\n var dropdownContentElement = Dom_1.$$(this.coveoRoot.find('.coveo-facet-column'));\n var filterByContainer = Dom_1.$$('div', { className: 'coveo-facet-header-filter-by-container', style: 'display: none' });\n var filterBy = Dom_1.$$('div', { className: 'coveo-facet-header-filter-by' });\n filterBy.text(Strings_1.l('Filter by:'));\n filterByContainer.append(filterBy.el);\n dropdownContentElement.prepend(filterByContainer.el);\n if (this.facetsMobileModeOptions.isModal) {\n return new ResponsiveDropdownModalContent_1.ResponsiveDropdownModalContent('facet', dropdownContentElement, Strings_1.l('CloseFiltersDropdown'), function () { return _this.dropdown.close(); });\n }\n return new ResponsiveDropdownContent_1.ResponsiveDropdownContent('facet', dropdownContentElement, this.coveoRoot, ResponsiveFacetColumn.DROPDOWN_MIN_WIDTH, ResponsiveFacetColumn.DROPDOWN_WIDTH_RATIO);\n };\n ResponsiveFacetColumn.prototype.buildDropdownHeader = function () {\n var dropdownHeaderElement = Dom_1.$$('a');\n var content = Dom_1.$$('p');\n content.text(this.dropdownHeaderLabel);\n dropdownHeaderElement.el.appendChild(content.el);\n var dropdownHeader = new ResponsiveDropdownHeader_1.ResponsiveDropdownHeader('facet', dropdownHeaderElement);\n return dropdownHeader;\n };\n ResponsiveFacetColumn.prototype.initializeBreakpoint = function (defaultBreakpoint) {\n var facetsMobileModeBreakpoint = this.facetsMobileModeOptions.breakpoint;\n this.breakpoint = Utils_1.Utils.isNullOrUndefined(facetsMobileModeBreakpoint) ? defaultBreakpoint : facetsMobileModeBreakpoint;\n };\n ResponsiveFacetColumn.prototype.registerOnCloseHandler = function () {\n this.dropdown.registerOnCloseHandler(this.dismissFacetSearches, this);\n };\n ResponsiveFacetColumn.prototype.registerQueryEvents = function () {\n var _this = this;\n this.coveoRoot.on(QueryEvents_1.QueryEvents.noResults, function () { return _this.handleNoResults(); });\n this.coveoRoot.on(QueryEvents_1.QueryEvents.querySuccess, function (e, data) { return _this.handleQuerySuccess(data); });\n this.coveoRoot.on(QueryEvents_1.QueryEvents.queryError, function () { return _this.handleQueryError(); });\n };\n ResponsiveFacetColumn.prototype.bindDropdownContentEvents = function () {\n var _this = this;\n this.dropdown.dropdownContent.element.on('scroll', underscore_1.debounce(function () {\n underscore_1.each(_this.componentsInFacetColumn, function (component) {\n var facetSearch = component.facetSearch;\n if (facetSearch && facetSearch.currentlyDisplayedResults && !_this.isFacetSearchScrolledIntoView(facetSearch.search)) {\n component.facetSearch.positionSearchResults(_this.dropdown.dropdownContent.element.el);\n }\n else if (facetSearch && component.facetSearch.currentlyDisplayedResults) {\n component.facetSearch.positionSearchResults();\n }\n });\n }, ResponsiveFacetColumn.DEBOUNCE_SCROLL_WAIT));\n };\n ResponsiveFacetColumn.prototype.bindFacetsMobileModeEvents = function () {\n var facetsMobileModeComponent = this.facetsMobileModeComponent;\n if (facetsMobileModeComponent) {\n this.dropdown.registerOnOpenHandler(function () { return Dom_1.$$(facetsMobileModeComponent.element).trigger(FacetsMobileModeEvents_1.FacetsMobileModeEvents.popupOpened); }, facetsMobileModeComponent);\n this.dropdown.registerOnCloseHandler(function () { return Dom_1.$$(facetsMobileModeComponent.element).trigger(FacetsMobileModeEvents_1.FacetsMobileModeEvents.popupClosed); }, facetsMobileModeComponent);\n }\n };\n ResponsiveFacetColumn.prototype.restoreFacetPreservePositionValue = function () {\n var _this = this;\n underscore_1.each(this.componentsInFacetColumn, function (component, index) {\n if (component.options) {\n component.options.preservePosition = _this.preservePositionOriginalValues[index];\n }\n });\n };\n ResponsiveFacetColumn.prototype.disableFacetPreservePosition = function () {\n underscore_1.each(this.componentsInFacetColumn, function (component) {\n if (component.options) {\n component.options.preservePosition = false;\n }\n });\n };\n ResponsiveFacetColumn.prototype.isFacetSearchScrolledIntoView = function (facetSearchElement) {\n var facetTop = facetSearchElement.getBoundingClientRect().top;\n var facetBottom = facetSearchElement.getBoundingClientRect().bottom;\n var dropdownTop = this.dropdown.dropdownContent.element.el.getBoundingClientRect().top;\n var dropdownBottom = this.dropdown.dropdownContent.element.el.getBoundingClientRect().bottom;\n dropdownTop = dropdownTop >= 0 ? dropdownTop : 0;\n return facetTop >= dropdownTop && facetBottom <= dropdownBottom;\n };\n ResponsiveFacetColumn.prototype.getDropdownHeaderLabel = function () {\n var dropdownHeaderLabel;\n ComponentsTypes_1.ComponentsTypes.getAllFacetInstancesFromElement(this.coveoRoot.find('.coveo-facet-column')).forEach(function (facet) {\n var options = facet.options;\n if (!dropdownHeaderLabel && options.dropdownHeaderLabel) {\n dropdownHeaderLabel = options.dropdownHeaderLabel;\n }\n });\n if (!dropdownHeaderLabel) {\n dropdownHeaderLabel = Strings_1.l(ResponsiveFacetColumn.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE);\n }\n return dropdownHeaderLabel;\n };\n ResponsiveFacetColumn.prototype.handleNoResults = function () {\n this.dropdown.dropdownHeader.hide();\n };\n ResponsiveFacetColumn.prototype.handleQueryError = function () {\n this.dropdown.dropdownHeader.hide();\n };\n ResponsiveFacetColumn.prototype.handleQuerySuccess = function (data) {\n if (data.results.totalCount === 0) {\n this.dropdown.dropdownHeader.hide();\n }\n else {\n this.dropdown.dropdownHeader.show();\n }\n };\n ResponsiveFacetColumn.DEBOUNCE_SCROLL_WAIT = 250;\n ResponsiveFacetColumn.DROPDOWN_MIN_WIDTH = 280;\n ResponsiveFacetColumn.DROPDOWN_WIDTH_RATIO = 0.35; // Used to set the width relative to the coveo root.\n ResponsiveFacetColumn.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE = 'Filters';\n return ResponsiveFacetColumn;\n}());\nexports.ResponsiveFacetColumn = ResponsiveFacetColumn;\n\n\n/***/ }),\n\n/***/ 220:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 221:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dom_1 = __webpack_require__(1);\nvar DynamicFacetValueShowMoreLessButton = /** @class */ (function () {\n function DynamicFacetValueShowMoreLessButton(options) {\n var btn = Dom_1.$$('button', {\n className: options.className,\n ariaLabel: options.ariaLabel,\n type: 'button'\n }, options.label);\n this.element = Dom_1.$$('li', null, btn).el;\n btn.on('click', function () { return options.action(); });\n }\n return DynamicFacetValueShowMoreLessButton;\n}());\nexports.DynamicFacetValueShowMoreLessButton = DynamicFacetValueShowMoreLessButton;\n\n\n/***/ }),\n\n/***/ 222:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Globalize = __webpack_require__(23);\nvar FacetValueState_1 = __webpack_require__(70);\nvar AnalyticsActionListMeta_1 = __webpack_require__(10);\nvar Strings_1 = __webpack_require__(6);\nvar FacetRequest_1 = __webpack_require__(180);\nvar DynamicFacetValue = /** @class */ (function () {\n function DynamicFacetValue(facetValue, facet, rendererKlass) {\n this.facet = facet;\n this.element = null;\n this.value = facetValue.value;\n this.start = facetValue.start;\n this.end = facetValue.end;\n this.endInclusive = facetValue.endInclusive;\n this.state = facetValue.state;\n this.numberOfResults = facetValue.numberOfResults;\n this.position = facetValue.position;\n this.displayValue = facetValue.displayValue;\n this.renderer = new rendererKlass(this, facet);\n }\n Object.defineProperty(DynamicFacetValue.prototype, \"isSelected\", {\n get: function () {\n return this.state === FacetValueState_1.FacetValueState.selected;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValue.prototype, \"isIdle\", {\n get: function () {\n return this.state === FacetValueState_1.FacetValueState.idle;\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacetValue.prototype.toggleSelect = function () {\n this.state === FacetValueState_1.FacetValueState.selected ? this.deselect() : this.select();\n };\n DynamicFacetValue.prototype.select = function () {\n this.state = FacetValueState_1.FacetValueState.selected;\n };\n DynamicFacetValue.prototype.deselect = function () {\n this.state = FacetValueState_1.FacetValueState.idle;\n };\n DynamicFacetValue.prototype.equals = function (arg) {\n var value = typeof arg === 'string' ? arg : arg.value;\n return value.toLowerCase() === this.value.toLowerCase();\n };\n Object.defineProperty(DynamicFacetValue.prototype, \"formattedCount\", {\n get: function () {\n return Globalize.format(this.numberOfResults, 'n0');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValue.prototype, \"selectAriaLabel\", {\n get: function () {\n var resultCount = Strings_1.l('ResultCount', this.formattedCount, this.numberOfResults);\n return \"\" + Strings_1.l('IncludeValueWithResultCount', this.displayValue, resultCount);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValue.prototype, \"isRange\", {\n get: function () {\n return this.facet.facetType !== FacetRequest_1.FacetType.specific;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValue.prototype, \"analyticsValue\", {\n get: function () {\n return this.isRange ? this.start + \"..\" + this.end : this.value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValue.prototype, \"rangeFacetState\", {\n get: function () {\n if (!this.isRange) {\n return null;\n }\n return {\n start: \"\" + this.start,\n end: \"\" + this.end,\n endInclusive: this.endInclusive\n };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValue.prototype, \"analyticsFacetState\", {\n get: function () {\n return __assign({}, this.facet.basicAnalyticsFacetState, this.rangeFacetState, { value: this.analyticsValue, valuePosition: this.position, displayValue: this.displayValue, state: this.state });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValue.prototype, \"rangeFacetMeta\", {\n get: function () {\n if (!this.isRange) {\n return null;\n }\n return {\n facetRangeStart: \"\" + this.start,\n facetRangeEnd: \"\" + this.end,\n facetRangeEndInclusive: this.endInclusive\n };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValue.prototype, \"analyticsFacetMeta\", {\n get: function () {\n return __assign({}, this.facet.basicAnalyticsFacetMeta, this.rangeFacetMeta, { facetValue: this.analyticsValue });\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacetValue.prototype.logSelectActionToAnalytics = function () {\n var action = this.state === FacetValueState_1.FacetValueState.selected ? AnalyticsActionListMeta_1.analyticsActionCauseList.dynamicFacetSelect : AnalyticsActionListMeta_1.analyticsActionCauseList.dynamicFacetDeselect;\n this.facet.logAnalyticsEvent(action, this.analyticsFacetMeta);\n };\n DynamicFacetValue.prototype.render = function () {\n this.element = this.renderer.render();\n return this.element;\n };\n Object.defineProperty(DynamicFacetValue.prototype, \"renderedElement\", {\n get: function () {\n if (this.element) {\n return this.element;\n }\n return this.render();\n },\n enumerable: true,\n configurable: true\n });\n return DynamicFacetValue;\n}());\nexports.DynamicFacetValue = DynamicFacetValue;\n\n\n/***/ }),\n\n/***/ 289:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Component_1 = __webpack_require__(7);\nvar InitializationEvents_1 = __webpack_require__(17);\nvar QueryEvents_1 = __webpack_require__(11);\nvar GlobalExports_1 = __webpack_require__(3);\nvar underscore_1 = __webpack_require__(0);\nvar Dom_1 = __webpack_require__(1);\nvar Utils_1 = __webpack_require__(4);\nvar ComponentOptions_1 = __webpack_require__(8);\nvar Assert_1 = __webpack_require__(5);\nvar Initialization_1 = __webpack_require__(2);\nvar ComponentsTypes_1 = __webpack_require__(47);\n/**\n * The `DynamicFacetManager` component is meant to be a parent for multiple [DynamicFacet]{@link DynamicFacet} & [DynamicFacetRange]{@link DynamicFacetRange} components.\n * This component allows controlling a set of [`DynamicFacet`]{@link DynamicFacet} and [`DynamicFacetRange`]{@link DynamicFacetRange} as a group.\n *\n * @externaldocs [Using Dynamic Facets](https://docs.coveo.com/en/2917/).\n * @availablesince [May 2019 Release (v2.6063)](https://docs.coveo.com/en/2909/)\n */\nvar DynamicFacetManager = /** @class */ (function (_super) {\n __extends(DynamicFacetManager, _super);\n /**\n * Creates a new `DynamicFacetManager` instance.\n *\n * @param element The element from which to instantiate the component.\n * @param options The component options.\n * @param bindings The component bindings. Automatically resolved by default.\n */\n function DynamicFacetManager(element, options) {\n var _this = _super.call(this, element, 'DynamicFacetManager') || this;\n _this.options = options;\n _this.childrenFacets = [];\n _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, DynamicFacetManager, options);\n _this.resetContainer();\n _this.prependContainer();\n _this.initEvents();\n return _this;\n }\n Object.defineProperty(DynamicFacetManager.prototype, \"enabledFacets\", {\n get: function () {\n return this.childrenFacets.filter(function (facet) { return !facet.disabled; });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetManager.prototype, \"displayedFacets\", {\n get: function () {\n return this.childrenFacets.filter(function (facet) { return facet.isCurrentlyDisplayed(); });\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacetManager.prototype.resetContainer = function () {\n this.containerElement && Dom_1.$$(this.containerElement).remove();\n this.containerElement = Dom_1.$$('div', { className: 'coveo-dynamic-facet-manager-container' }).el;\n };\n DynamicFacetManager.prototype.prependContainer = function () {\n Dom_1.$$(this.element).prepend(this.containerElement);\n };\n DynamicFacetManager.prototype.initEvents = function () {\n var _this = this;\n this.bind.onRootElement(InitializationEvents_1.InitializationEvents.afterComponentsInitialization, function () { return _this.handleAfterComponentsInitialization(); });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.doneBuildingQuery, function (data) { return _this.handleDoneBuildingQuery(data); });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function (data) { return _this.handleQuerySuccess(data); });\n };\n DynamicFacetManager.prototype.isDynamicFacet = function (component) {\n return !!component.isDynamicFacet;\n };\n Object.defineProperty(DynamicFacetManager.prototype, \"allDynamicFacets\", {\n get: function () {\n var allFacetsInComponent = ComponentsTypes_1.ComponentsTypes.getAllFacetInstancesFromElement(this.element);\n return allFacetsInComponent.filter(this.isDynamicFacet);\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacetManager.prototype.handleAfterComponentsInitialization = function () {\n var _this = this;\n this.childrenFacets = this.allDynamicFacets;\n this.childrenFacets.forEach(function (dynamicFacet) {\n dynamicFacet.dynamicFacetManager = _this;\n _this.containerElement.appendChild(dynamicFacet.element);\n });\n if (this.element.children.length > 1) {\n this.logger.warn(\"DynamicFacetManager contains incompatible elements. Those elements may be moved in the DOM.\\n To prevent this warning, move those elements outside of the DynamicFacetManager.\");\n }\n if (!this.childrenFacets.length) {\n this.disable();\n }\n };\n DynamicFacetManager.prototype.handleDoneBuildingQuery = function (data) {\n Assert_1.Assert.exists(data);\n Assert_1.Assert.exists(data.queryBuilder);\n this.enabledFacets.forEach(function (dynamicFacet) {\n dynamicFacet.putStateIntoQueryBuilder(data.queryBuilder);\n dynamicFacet.putStateIntoAnalytics();\n });\n };\n DynamicFacetManager.prototype.handleQuerySuccess = function (data) {\n if (Utils_1.Utils.isNullOrUndefined(data.results.facets)) {\n return this.notImplementedError();\n }\n this.enabledFacets.forEach(function (dynamicFacet) {\n dynamicFacet.handleQueryResults(data.results);\n });\n var wasFacetOrderFrozen = data.query.facetOptions && data.query.facetOptions.freezeFacetOrder;\n if (wasFacetOrderFrozen) {\n return this.callOnUpdateOnChildrenFacets();\n }\n if (this.options.enableReorder) {\n this.options.compareFacets ? this.sortFacetsWithCompareOption() : this.sortFacetsWithResponseOrder(data.results.facets);\n this.reorderFacetsInDom();\n }\n this.respectMaximumExpandedFacetsThreshold();\n this.callOnUpdateOnChildrenFacets();\n };\n DynamicFacetManager.prototype.callOnUpdateOnChildrenFacets = function () {\n var _this = this;\n if (!this.options.onUpdate) {\n return;\n }\n this.childrenFacets.forEach(function (dynamicFacet, index) { return _this.options.onUpdate(dynamicFacet, index); });\n };\n DynamicFacetManager.prototype.sortFacetsWithResponseOrder = function (facetsResponse) {\n var _this = this;\n var facetsInResponse = facetsResponse.map(function (_a) {\n var facetId = _a.facetId;\n return _this.getChildFacetWithId(facetId);\n }).filter(Utils_1.Utils.exists);\n var facetsNotInResponse = underscore_1.without.apply(void 0, [this.childrenFacets].concat(facetsInResponse));\n this.childrenFacets = facetsInResponse.concat(facetsNotInResponse);\n };\n DynamicFacetManager.prototype.sortFacetsWithCompareOption = function () {\n this.childrenFacets = this.childrenFacets.sort(this.options.compareFacets);\n };\n DynamicFacetManager.prototype.reorderFacetsInDom = function () {\n this.resetContainer();\n var fragment = document.createDocumentFragment();\n this.childrenFacets.forEach(function (dynamicFacet) { return fragment.appendChild(dynamicFacet.element); });\n this.containerElement.appendChild(fragment);\n this.prependContainer();\n };\n DynamicFacetManager.prototype.respectMaximumExpandedFacetsThreshold = function () {\n if (this.options.maximumNumberOfExpandedFacets === -1) {\n return;\n }\n var _a = underscore_1.partition(this.displayedFacets, function (facet) { return facet.options.enableCollapse; }), collapsableFacets = _a[0], uncollapsableFacets = _a[1];\n var facetsLeftToExpandCounter = this.options.maximumNumberOfExpandedFacets - uncollapsableFacets.length;\n collapsableFacets.forEach(function (dynamicFacet) {\n if (facetsLeftToExpandCounter < 1) {\n return dynamicFacet.collapse();\n }\n if (dynamicFacet.options.collapsedByDefault) {\n dynamicFacet.logger.info('The facet has its \"collapsedByDefault\" option set to \"true\", which prevents the DynamicFacetManager from expanding it.', 'While this configuration may be legitimate, it partially defeats the purpose of the dynamic navigation experience feature.', 'For more information, see https://docs.coveo.com/en/2917/.');\n return dynamicFacet.collapse();\n }\n facetsLeftToExpandCounter--;\n dynamicFacet.expand();\n });\n };\n DynamicFacetManager.prototype.getChildFacetWithId = function (id) {\n return underscore_1.find(this.childrenFacets, function (facet) { return facet.options.id === id; });\n };\n DynamicFacetManager.prototype.notImplementedError = function () {\n this.logger.error('DynamicFacetManager is not supported by your current search endpoint. Disabling this component.');\n this.disable();\n };\n DynamicFacetManager.prototype.isCurrentlyDisplayed = function () {\n return !!underscore_1.find(this.childrenFacets, function (facet) { return facet.isCurrentlyDisplayed(); });\n };\n DynamicFacetManager.ID = 'DynamicFacetManager';\n DynamicFacetManager.doExport = function () { return GlobalExports_1.exportGlobally({ DynamicFacetManager: DynamicFacetManager }); };\n /**\n * The options for the DynamicFacetManager\n * @componentOptions\n */\n DynamicFacetManager.options = {\n /**\n * Whether to allow the reordering of facets based on Coveo ML and index ranking scores.\n *\n * **Default:** `true`\n */\n enableReorder: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'Filtering' }),\n /**\n * A function to execute whenever facets are updated in the query response @externaldocs [Defining Custom Dynamic Facet Behaviors](https://docs.coveo.com/en/2917/javascript-search-framework/using-dynamic-facets#defining-custom-dynamic-facet-behaviors).\n *\n * **Note:**\n * > You cannot set this option directly in the component markup as an HTML attribute. You must either set it in the\n * > [`init`]{@link init} call of your search interface (see\n * > [Passing Component Options in the init Call](https://developers.coveo.com/x/PoGfAQ#Components-PassingComponentOptionsintheinitCall)),\n * > or before the `init` call, using the `options` top-level function (see\n * > [Passing Component Options Before the init Call](https://developers.coveo.com/x/PoGfAQ#Components-PassingComponentOptionsBeforetheinitCall)).\n */\n onUpdate: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n return null;\n }),\n /**\n * A custom sort function to execute on facets on every successful query response @externaldocs [Using Custom Dynamic Facet Sort Functions](https://docs.coveo.com/en/2917/javascript-search-framework/using-dynamic-facets#using-custom-dynamic-facet-sort-functions).\n *\n * **Note:**\n * > If specified, the function must implement the JavaScript compareFunction (see [Array.prototype.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort).\n * > You cannot set this option directly in the component markup as an HTML attribute. You must either set it in the\n * > [`init`]{@link init} call of your search interface (see\n * > [Passing Component Options in the init Call](https://developers.coveo.com/x/PoGfAQ#Components-PassingComponentOptionsintheinitCall)),\n * > or before the `init` call, using the `options` top-level function (see\n * > [Passing Component Options Before the init Call](https://developers.coveo.com/x/PoGfAQ#Components-PassingComponentOptionsBeforetheinitCall)).\n */\n compareFacets: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n return null;\n }),\n /**\n * The maximum number of expanded facets inside the manager.\n * Remaining facets are collapsed.\n *\n * **Note:**\n * Prioritizes facets with active values, and then prioritizes first facets.\n * If the number of facets with active values exceeds the value of the `maximumNumberOfExpandedFacets` option, it overrides the option.\n *\n * Using the value `-1` disables the feature and keeps all facets expanded.\n *\n * @availablesince [September 2019 Release (v2.7023)](https://docs.coveo.com/en/2990/)\n */\n maximumNumberOfExpandedFacets: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 4, min: -1 })\n };\n return DynamicFacetManager;\n}(Component_1.Component));\nexports.DynamicFacetManager = DynamicFacetManager;\nInitialization_1.Initialization.registerAutoCreateComponent(DynamicFacetManager);\nDynamicFacetManager.doExport();\n\n\n/***/ }),\n\n/***/ 39:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/// \nvar StringUtils_1 = __webpack_require__(22);\nvar QueryUtils_1 = __webpack_require__(21);\nvar FileTypes_1 = __webpack_require__(115);\nvar DateUtils_1 = __webpack_require__(32);\nvar Utils_1 = __webpack_require__(4);\nvar Dom_1 = __webpack_require__(1);\nvar _ = __webpack_require__(0);\nvar Strings_1 = __webpack_require__(6);\nvar FacetUtils = /** @class */ (function () {\n function FacetUtils() {\n }\n FacetUtils.getRegexToUseForFacetSearch = function (value, ignoreAccent) {\n return new RegExp(StringUtils_1.StringUtils.stringToRegex(value, ignoreAccent), 'i');\n };\n FacetUtils.getDisplayValueFromValueCaption = function (value, field, valueCaption) {\n var returnValue = this.tryToGetTranslatedCaption(field, value);\n return valueCaption[value] || returnValue;\n };\n FacetUtils.getValuesToUseForSearchInFacet = function (original, facet) {\n var ret = [original];\n var regex = this.getRegexToUseForFacetSearch(original, facet.options.facetSearchIgnoreAccents);\n if (facet.options.valueCaption) {\n _.chain(facet.options.valueCaption)\n .pairs()\n .filter(function (pair) {\n return regex.test(pair[1]);\n })\n .each(function (match) {\n ret.push(match[0]);\n });\n if (QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@objecttype') ||\n QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@filetype')) {\n _.each(FileTypes_1.FileTypes.getFileTypeCaptions(), function (value, key) {\n if (!(key in facet.options.valueCaption) && regex.test(value)) {\n ret.push(key);\n }\n });\n }\n }\n else if (QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@objecttype') ||\n QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@filetype')) {\n _.each(_.filter(_.pairs(FileTypes_1.FileTypes.getFileTypeCaptions()), function (pair) {\n return regex.test(pair[1]);\n }), function (match) {\n ret.push(match[0]);\n });\n }\n else if (QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@month')) {\n _.each(_.range(1, 13), function (month) {\n if (regex.test(DateUtils_1.DateUtils.monthToString(month - 1))) {\n ret.push(('0' + month.toString()).substr(-2));\n }\n });\n }\n return ret;\n };\n FacetUtils.buildFacetSearchPattern = function (values) {\n values = _.map(values, function (value) {\n return Utils_1.Utils.escapeRegexCharacter(value);\n });\n values[0] = '.*' + values[0] + '.*';\n return values.join('|');\n };\n FacetUtils.needAnotherFacetSearch = function (currentSearchLength, newSearchLength, oldSearchLength, desiredSearchLength) {\n // Something was removed (currentSearch < newSearch)\n // && we might want to display more facet search result(currentSearch < desiredSearch)\n // && the new query returned more stuff than the old one so there's still more results(currentSearchLength > oldLength)\n return currentSearchLength < newSearchLength && currentSearchLength < desiredSearchLength && currentSearchLength > oldSearchLength;\n };\n FacetUtils.addNoStateCssClassToFacetValues = function (facet, container) {\n // This takes care of adding the correct css class on each facet value checkbox (empty white box) if at least one value is selected in that facet\n if (facet.values.getSelected().length != 0) {\n var noStates = Dom_1.$$(container).findAll('li:not(.coveo-selected)');\n _.each(noStates, function (noState) {\n Dom_1.$$(noState).addClass('coveo-no-state');\n });\n }\n };\n FacetUtils.tryToGetTranslatedCaption = function (field, value) {\n var found;\n if (QueryUtils_1.QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@filetype')) {\n found = FileTypes_1.FileTypes.getFileType(value).caption;\n }\n else if (QueryUtils_1.QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@objecttype')) {\n found = FileTypes_1.FileTypes.getObjectType(value).caption;\n }\n else if (FacetUtils.isMonthFieldValue(field, value)) {\n var month = parseInt(value, 10);\n found = DateUtils_1.DateUtils.monthToString(month - 1);\n }\n else {\n found = Strings_1.l(value);\n }\n return found != undefined && Utils_1.Utils.isNonEmptyString(found) ? found : value;\n };\n FacetUtils.isMonthFieldValue = function (field, value) {\n if (!QueryUtils_1.QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@month')) {\n return false;\n }\n var asInt = parseInt(value, 10);\n if (isNaN(asInt)) {\n return false;\n }\n if (asInt < 1 || asInt > 12) {\n return false;\n }\n return true;\n };\n return FacetUtils;\n}());\nexports.FacetUtils = FacetUtils;\n\n\n/***/ }),\n\n/***/ 462:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Template_1 = __webpack_require__(27);\nvar TemplateList_1 = __webpack_require__(92);\nvar _ = __webpack_require__(0);\nvar TableTemplate = /** @class */ (function (_super) {\n __extends(TableTemplate, _super);\n function TableTemplate() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.defaultTemplate = \"\\n \\n \";\n _this.defaultRoledTemplates = {\n 'table-header': \"Link\\n Excerpt\\n Date\",\n 'table-footer': \"Link\\n Excerpt\\n Date\"\n };\n return _this;\n }\n TableTemplate.prototype.instantiateRoleToString = function (role) {\n var roledTemplate = _.find(this.templates, function (t) { return t.role === role; });\n if (roledTemplate) {\n return roledTemplate.instantiateToString(undefined, {});\n }\n else {\n return this.defaultRoledTemplates[role];\n }\n };\n TableTemplate.prototype.instantiateRoleToElement = function (role) {\n var _this = this;\n var roledTemplate = _.find(this.templates, function (t) { return t.role === role; });\n if (roledTemplate) {\n return roledTemplate.instantiateToElement(undefined, {});\n }\n else {\n var tmpl = new Template_1.Template(function () { return _this.defaultRoledTemplates[role]; });\n tmpl.layout = 'table';\n return tmpl.instantiateToElement(undefined);\n }\n };\n TableTemplate.prototype.getFallbackTemplate = function () {\n var _this = this;\n return new Template_1.Template(function () { return _this.defaultTemplate; });\n };\n TableTemplate.prototype.hasTemplateWithRole = function (role) {\n return _.find(this.templates, function (t) { return t.role === role; });\n };\n return TableTemplate;\n}(TemplateList_1.TemplateList));\nexports.TableTemplate = TableTemplate;\n\n\n/***/ }),\n\n/***/ 463:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Template_1 = __webpack_require__(27);\nvar DefaultRecommendationTemplate = /** @class */ (function (_super) {\n __extends(DefaultRecommendationTemplate, _super);\n function DefaultRecommendationTemplate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultRecommendationTemplate.prototype.instantiateToString = function (object) {\n var template = \"
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\";\n return template;\n };\n DefaultRecommendationTemplate.prototype.instantiateToElement = function (object) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var div = document.createElement('div');\n div.innerHTML = _this.instantiateToString(object);\n resolve(div);\n });\n };\n return DefaultRecommendationTemplate;\n}(Template_1.Template));\nexports.DefaultRecommendationTemplate = DefaultRecommendationTemplate;\n\n\n/***/ }),\n\n/***/ 464:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Core_1 = __webpack_require__(20);\nvar ResultList_1 = __webpack_require__(89);\nvar underscore_1 = __webpack_require__(0);\nvar Dom_1 = __webpack_require__(1);\nvar Logger_1 = __webpack_require__(9);\nvar TemplateToHtml = /** @class */ (function () {\n function TemplateToHtml(args) {\n this.args = args;\n }\n TemplateToHtml.prototype.buildResults = function (results, layout, currentlyDisplayedResults) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n var res, resultsPromises;\n return __generator(this, function (_a) {\n res = [];\n resultsPromises = underscore_1.map(results.results, function (result, index) {\n return _this.buildResult(result, layout, currentlyDisplayedResults).then(function (resultElement) {\n if (resultElement != null) {\n res.push({ elem: resultElement, idx: index });\n }\n ResultList_1.ResultList.resultCurrentlyBeingRendered = null;\n return resultElement;\n });\n });\n // We need to sort by the original index order, because in lazy loading mode, it's possible that results does not gets rendered\n // in the correct order returned by the index, depending on the time it takes to load all the results component for a given result template\n return [2 /*return*/, Promise.all(resultsPromises).then(function () {\n return underscore_1.pluck(underscore_1.sortBy(res, 'idx'), 'elem');\n })];\n });\n });\n };\n TemplateToHtml.prototype.buildResult = function (result, layout, currentlyDisplayedResults) {\n return __awaiter(this, void 0, void 0, function () {\n var resultElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n Core_1.Assert.exists(result);\n Core_1.QueryUtils.setStateObjectOnQueryResult(this.args.queryStateModel.get(), result);\n Core_1.QueryUtils.setSearchInterfaceObjectOnQueryResult(this.args.searchInterface, result);\n ResultList_1.ResultList.resultCurrentlyBeingRendered = result;\n return [4 /*yield*/, this.createHtmlElement(result, layout)];\n case 1:\n resultElement = _a.sent();\n if (resultElement != null) {\n Core_1.Component.bindResultToElement(resultElement, result);\n }\n currentlyDisplayedResults.push(result);\n return [4 /*yield*/, this.autoCreateComponentsInsideResult(resultElement, result).initResult];\n case 2:\n _a.sent();\n this.verifyChildren(resultElement);\n return [2 /*return*/, resultElement];\n }\n });\n });\n };\n TemplateToHtml.prototype.autoCreateComponentsInsideResult = function (element, result) {\n Core_1.Assert.exists(element);\n return Core_1.Initialization.automaticallyCreateComponentsInsideResult(element, result);\n };\n TemplateToHtml.prototype.createHtmlElement = function (result, layout) {\n return this.args.resultTemplate.instantiateToElement(result, {\n wrapInDiv: true,\n checkCondition: true,\n currentLayout: layout,\n responsiveComponents: this.args.searchInterface.responsiveComponents\n });\n };\n TemplateToHtml.prototype.verifyChildren = function (element) {\n var containsResultLink = !!Dom_1.$$(element).find('.CoveoResultLink');\n if (containsResultLink) {\n return;\n }\n var msg = \"Result does not contain a \\\"CoveoResultLink\\\" component, please verify the result template\";\n new Logger_1.Logger(element).warn(msg, this.args.resultTemplate);\n };\n return TemplateToHtml;\n}());\nexports.TemplateToHtml = TemplateToHtml;\n\n\n/***/ }),\n\n/***/ 465:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Defer_1 = __webpack_require__(31);\nvar underscore_1 = __webpack_require__(0);\nvar Dom_1 = __webpack_require__(1);\nvar FocusTrap = /** @class */ (function () {\n function FocusTrap(container) {\n this.container = container;\n this.hiddenElements = [];\n this.enable();\n }\n Object.defineProperty(FocusTrap.prototype, \"focusableElements\", {\n get: function () {\n return underscore_1.sortBy(this.container.querySelectorAll('[tabindex]'), function (element) { return element.tabIndex; });\n },\n enumerable: true,\n configurable: true\n });\n FocusTrap.prototype.disable = function () {\n document.removeEventListener('focusin', this.focusInEvent);\n document.removeEventListener('focusout', this.focusOutEvent);\n this.showHiddenElements();\n this.enabled = false;\n };\n FocusTrap.prototype.enable = function () {\n var _this = this;\n document.addEventListener('focusin', (this.focusInEvent = function (e) { return _this.onFocusIn(e); }));\n document.addEventListener('focusout', (this.focusOutEvent = function (e) { return _this.onFocusOut(e); }));\n this.hideAllExcept(this.container);\n this.enabled = true;\n };\n FocusTrap.prototype.showHiddenElements = function () {\n while (this.hiddenElements.length) {\n this.hiddenElements.pop().removeAttribute('aria-hidden');\n }\n };\n FocusTrap.prototype.hideElement = function (element) {\n if (element.getAttribute('aria-hidden')) {\n return;\n }\n this.hiddenElements.push(element);\n element.setAttribute('aria-hidden', \"\" + true);\n };\n FocusTrap.prototype.hideSiblings = function (allowedElement) {\n var _this = this;\n var parent = allowedElement.parentElement;\n if (parent) {\n underscore_1.without(Dom_1.$$(parent).children(), allowedElement).forEach(function (elementToHide) {\n _this.hideElement(elementToHide);\n });\n }\n };\n FocusTrap.prototype.hideAllExcept = function (allowedElement) {\n this.hideSiblings(allowedElement);\n var parent = allowedElement.parentElement;\n if (parent && parent !== document.body) {\n this.hideAllExcept(parent);\n }\n };\n FocusTrap.prototype.getFocusableSibling = function (element, previous) {\n if (previous === void 0) { previous = false; }\n var elements = this.focusableElements;\n var currentIndex = elements.indexOf(element);\n if (currentIndex === -1) {\n return null;\n }\n return elements[(currentIndex + (previous ? -1 : 1) + elements.length) % elements.length];\n };\n FocusTrap.prototype.focusSibling = function (element, previous) {\n if (previous === void 0) { previous = false; }\n var sibling = this.getFocusableSibling(element, previous);\n if (sibling) {\n sibling.focus();\n }\n };\n FocusTrap.prototype.focusFirstElement = function () {\n var elements = this.focusableElements;\n if (elements.length) {\n elements[0].focus();\n }\n };\n FocusTrap.prototype.elementIsBefore = function (oldElement, newElement) {\n if (!newElement) {\n return false;\n }\n return oldElement.compareDocumentPosition(newElement) === Node.DOCUMENT_POSITION_PRECEDING;\n };\n FocusTrap.prototype.onLosingFocus = function (oldElement, newElement) {\n var _this = this;\n Defer_1.Defer.defer(function () {\n if (!_this.enabled) {\n return;\n }\n _this.enabled = false;\n if (oldElement && _this.focusIsAllowed(oldElement)) {\n _this.focusSibling(oldElement, _this.elementIsBefore(oldElement, newElement));\n }\n else {\n _this.focusFirstElement();\n }\n _this.enabled = true;\n });\n };\n FocusTrap.prototype.focusIsAllowed = function (element) {\n return this.container.contains(element);\n };\n FocusTrap.prototype.elementIsInPage = function (element) {\n return element && element !== document.body.parentElement;\n };\n FocusTrap.prototype.onFocusIn = function (e) {\n if (!this.enabled) {\n return;\n }\n var oldElement = e.relatedTarget;\n var handledByFocusOut = this.elementIsInPage(oldElement);\n if (handledByFocusOut) {\n return;\n }\n var newElement = e.target;\n if (!this.elementIsInPage(newElement)) {\n return;\n }\n if (!this.focusIsAllowed(newElement)) {\n this.onLosingFocus(null, newElement);\n }\n };\n FocusTrap.prototype.onFocusOut = function (e) {\n if (!this.enabled) {\n return;\n }\n var newElement = e.relatedTarget;\n if (!this.elementIsInPage(newElement)) {\n return;\n }\n if (!newElement || !this.focusIsAllowed(newElement)) {\n this.onLosingFocus(e.target, newElement);\n }\n };\n return FocusTrap;\n}());\nexports.FocusTrap = FocusTrap;\n\n\n/***/ }),\n\n/***/ 466:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TemplateHelpers_1 = __webpack_require__(116);\nvar HighlightUtils_1 = __webpack_require__(67);\nvar DateUtils_1 = __webpack_require__(32);\nvar CurrencyUtils_1 = __webpack_require__(130);\nvar HtmlUtils_1 = __webpack_require__(178);\nvar Utils_1 = __webpack_require__(4);\nvar StringUtils_1 = __webpack_require__(22);\nvar TimeSpanUtils_1 = __webpack_require__(71);\nvar EmailUtils_1 = __webpack_require__(177);\nvar QueryUtils_1 = __webpack_require__(21);\nvar DeviceUtils_1 = __webpack_require__(24);\nvar Dom_1 = __webpack_require__(1);\nvar SearchEndpoint_1 = __webpack_require__(51);\nvar StreamHighlightUtils_1 = __webpack_require__(114);\nvar FacetUtils_1 = __webpack_require__(39);\nvar Globalize = __webpack_require__(23);\nvar _ = __webpack_require__(0);\nvar Component_1 = __webpack_require__(7);\nvar TemplateCache_1 = __webpack_require__(66);\nvar CoreHelpers = /** @class */ (function () {\n function CoreHelpers() {\n }\n /**\n * For backward compatibility reason, the \"global\" template helper should be available under the\n * coveo namespace.\n * @param scope\n */\n CoreHelpers.exportAllHelpersGlobally = function (scope) {\n _.each(TemplateHelpers_1.TemplateHelpers.getHelpers(), function (helper, name) {\n if (scope[name] == undefined) {\n scope[name] = helper;\n }\n });\n };\n return CoreHelpers;\n}());\nexports.CoreHelpers = CoreHelpers;\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('javascriptEncode', function (value) {\n return Utils_1.Utils.exists(value) ? StringUtils_1.StringUtils.javascriptEncode(value) : undefined;\n});\nvar executeShorten = function (content, options) {\n var strAndHoles = HighlightUtils_1.StringAndHoles.shortenString(content, options.length, '...');\n if (Utils_1.Utils.exists(options.highlights)) {\n return HighlightUtils_1.HighlightUtils.highlightString(strAndHoles.value, options.highlights, strAndHoles.holes, options.cssClass || 'highlight');\n }\n else {\n return strAndHoles.value;\n }\n};\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('shorten', function (content, length, highlights, cssClass) {\n return executeShorten(content, {\n length: length,\n highlights: highlights,\n cssClass: cssClass\n });\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('shortenv2', function (content, options) {\n return executeShorten(content, options);\n});\nvar executeShortenPath = function (content, options) {\n var strAndHoles = HighlightUtils_1.StringAndHoles.shortenPath(content, options.length);\n if (Utils_1.Utils.exists(options.highlights)) {\n return HighlightUtils_1.HighlightUtils.highlightString(strAndHoles.value, options.highlights, strAndHoles.holes, options.cssClass || 'highlight');\n }\n else {\n return strAndHoles.value;\n }\n};\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('shortenPath', function (content, length, highlights, cssClass) {\n return executeShortenPath(content, {\n length: length,\n highlights: highlights,\n cssClass: cssClass\n });\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('shortenPathv2', function (content, options) {\n return executeShortenPath(content, options);\n});\nvar executeShortenUri = function (content, options) {\n var strAndHoles = HighlightUtils_1.StringAndHoles.shortenUri(content, options.length);\n if (Utils_1.Utils.exists(options.highlights)) {\n return HighlightUtils_1.HighlightUtils.highlightString(strAndHoles.value, options.highlights, strAndHoles.holes, options.cssClass || 'highlight');\n }\n else {\n return strAndHoles.value;\n }\n};\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('shortenUri', function (content, length, highlights, cssClass) {\n return executeShortenUri(content, {\n length: length,\n highlights: highlights,\n cssClass: cssClass\n });\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('shortenUriv2', function (content, options) {\n return executeShortenUri(content, options);\n});\nvar executeHighlight = function (content, options) {\n if (Utils_1.Utils.exists(content)) {\n if (Utils_1.Utils.exists(options.highlights)) {\n return HighlightUtils_1.HighlightUtils.highlightString(content, options.highlights, null, options.cssClass || 'highlight');\n }\n else {\n return content;\n }\n }\n else {\n return undefined;\n }\n};\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlight', function (content, highlights, cssClass) {\n return executeHighlight(content, {\n highlights: highlights,\n cssClass: cssClass\n });\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlightv2', function (content, options) {\n return executeHighlight(content, options);\n});\nvar executeHighlightStreamText = function (content, options) {\n if (Utils_1.Utils.exists(content) && Utils_1.Utils.exists(options.termsToHighlight) && Utils_1.Utils.exists(options.phrasesToHighlight)) {\n if (termsToHighlightAreDefined(options.termsToHighlight, options.phrasesToHighlight)) {\n return StreamHighlightUtils_1.StreamHighlightUtils.highlightStreamText(content, options.termsToHighlight, options.phrasesToHighlight, options.opts);\n }\n else {\n return content;\n }\n }\n else {\n return undefined;\n }\n};\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlightStreamText', function (content, termsToHighlight, phrasesToHighlight, opts) {\n if (termsToHighlight === void 0) { termsToHighlight = resolveTermsToHighlight(); }\n if (phrasesToHighlight === void 0) { phrasesToHighlight = resolvePhrasesToHighlight(); }\n return executeHighlightStreamText(content, {\n termsToHighlight: termsToHighlight,\n phrasesToHighlight: phrasesToHighlight,\n opts: opts\n });\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlightStreamTextv2', function (content, options) {\n var mergedOptions = __assign({ termsToHighlight: resolveTermsToHighlight(), phrasesToHighlight: resolvePhrasesToHighlight() }, options);\n return executeHighlightStreamText(content, mergedOptions);\n});\nvar executeHighlightStreamHTML = function (content, options) {\n if (Utils_1.Utils.exists(content) && Utils_1.Utils.exists(options.termsToHighlight) && Utils_1.Utils.exists(options.phrasesToHighlight)) {\n if (termsToHighlightAreDefined(options.termsToHighlight, options.phrasesToHighlight)) {\n return StreamHighlightUtils_1.StreamHighlightUtils.highlightStreamHTML(content, options.termsToHighlight, options.phrasesToHighlight, options.opts);\n }\n else {\n return content;\n }\n }\n else {\n return undefined;\n }\n};\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlightStreamHTML', function (content, termsToHighlight, phrasesToHighlight, opts) {\n if (termsToHighlight === void 0) { termsToHighlight = resolveTermsToHighlight(); }\n if (phrasesToHighlight === void 0) { phrasesToHighlight = resolvePhrasesToHighlight(); }\n return executeHighlightStreamHTML(content, {\n termsToHighlight: termsToHighlight,\n phrasesToHighlight: phrasesToHighlight,\n opts: opts\n });\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlightStreamHTMLv2', function (content, options) {\n var mergedOptions = __assign({ termsToHighlight: resolveTermsToHighlight(), phrasesToHighlight: resolvePhrasesToHighlight() }, options);\n return executeHighlightStreamHTML(content, mergedOptions);\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('number', function (value, options) {\n if (!Utils_1.Utils.exists(value)) {\n return undefined;\n }\n var numberValue = Number(value);\n var format = _.isString(options) ? options : options && options.format;\n if (!format) {\n return StringUtils_1.StringUtils.htmlEncode(numberValue.toString());\n }\n return StringUtils_1.StringUtils.htmlEncode(Globalize.format(numberValue, format));\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('date', function (value, options) {\n return DateUtils_1.DateUtils.dateToString(DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('time', function (value, options) {\n return DateUtils_1.DateUtils.timeToString(DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('dateTime', function (value, options) {\n return DateUtils_1.DateUtils.dateTimeToString(DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('emailDateTime', function (value, options) {\n var defaultOptions = {};\n defaultOptions.includeTimeIfThisWeek = true;\n var optionsToUse = _.extend(options, defaultOptions);\n return value ? DateUtils_1.DateUtils.dateTimeToString(DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(value), optionsToUse) : undefined;\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('currency', function (value, options) {\n return CurrencyUtils_1.CurrencyUtils.currencyToString(value, options);\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('timeSpan', function (value, options) {\n if (options === void 0) { options = { isMilliseconds: false }; }\n return new TimeSpanUtils_1.TimeSpan(value, options.isMilliseconds).getHHMMSS();\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('email', function (value) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n // support old arguments (value: any, companyDomain: string, me: string, lengthLimit = 2, truncateName = false)\n var companyDomain;\n var me;\n var lengthLimit;\n var truncateName;\n if (_.isObject(args[0])) {\n companyDomain = args[0]['companyDomain'];\n me = args[0]['me'];\n lengthLimit = args[0]['lengthLimit'];\n truncateName = args[0]['truncateName'];\n }\n else {\n companyDomain = args[0];\n me = args[1];\n lengthLimit = args[2];\n truncateName = args[3];\n }\n if (lengthLimit == undefined) {\n lengthLimit = 2;\n }\n if (truncateName == undefined) {\n truncateName = false;\n }\n if (_.isString(value)) {\n var listOfAddresses = EmailUtils_1.EmailUtils.splitSemicolonSeparatedListOfEmailAddresses(value);\n return EmailUtils_1.EmailUtils.emailAddressesToHyperlinks(listOfAddresses, companyDomain, me, lengthLimit, truncateName);\n }\n else if (_.isArray(value)) {\n return EmailUtils_1.EmailUtils.emailAddressesToHyperlinks(value, companyDomain, me, lengthLimit, truncateName);\n }\n else {\n return undefined;\n }\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('excessEmailToggle', function (target) {\n Dom_1.$$(target).removeClass('coveo-active');\n if (Dom_1.$$(target).hasClass('coveo-emails-excess-collapsed')) {\n _.each(Dom_1.$$(target).siblings('.coveo-emails-excess-expanded'), function (sibling) {\n Dom_1.$$(sibling).addClass('coveo-active');\n });\n }\n else if (Dom_1.$$(target).hasClass('coveo-hide-expanded')) {\n Dom_1.$$(target.parentElement).addClass('coveo-inactive');\n _.each(Dom_1.$$(target.parentElement).siblings('.coveo-emails-excess-collapsed'), function (sibling) {\n Dom_1.$$(sibling).addClass('coveo-active');\n });\n }\n return undefined;\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('anchor', function (href, options) {\n return HtmlUtils_1.AnchorUtils.buildAnchor(href, options);\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('image', function (src, options, result) {\n if (result === void 0) { result = resolveQueryResult(); }\n if (options && options.srcTemplate) {\n return HtmlUtils_1.ImageUtils.buildImage(StringUtils_1.StringUtils.buildStringTemplateFromResult(options.srcTemplate, result), {\n alt: options.alt,\n height: options.height,\n width: options.width\n });\n }\n return HtmlUtils_1.ImageUtils.buildImage(src, options);\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('thumbnail', function (result, endpoint, options) {\n if (result === void 0) { result = resolveQueryResult(); }\n if (endpoint === void 0) { endpoint = 'default'; }\n if (QueryUtils_1.QueryUtils.hasThumbnail(result)) {\n return HtmlUtils_1.ImageUtils.buildImageFromResult(result, SearchEndpoint_1.SearchEndpoint.endpoints[endpoint], options);\n }\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('fromFileTypeToIcon', function (result, options) {\n if (result === void 0) { result = resolveQueryResult(); }\n if (options === void 0) { options = {}; }\n var icon = Component_1.Component.getComponentRef('Icon');\n if (icon) {\n return icon.createIcon(result, options).outerHTML;\n }\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('attrEncode', function (value) {\n return ('' + value) /* Forces the conversion to string. */\n .replace(/&/g, '&') /* This MUST be the 1st replacement. */\n .replace(/'/g, ''') /* The 4 other predefined entities, required. */\n .replace(/'/g, '"')\n .replace(//g, '>');\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('loadTemplates', function (templatesToLoad, once) {\n if (once === void 0) { once = true; }\n var ret = '';\n var data = resolveQueryResult();\n var atLeastOneWasLoaded = false;\n var toLoad = templatesToLoad;\n var defaultTmpl;\n _.each(templatesToLoad, function (value, key, obj) {\n if (value == 'default') {\n defaultTmpl = key;\n }\n });\n if (defaultTmpl != undefined) {\n toLoad = _.omit(templatesToLoad, defaultTmpl);\n }\n _.each(toLoad, function (condition, id, obj) {\n if (!atLeastOneWasLoaded || !once) {\n atLeastOneWasLoaded = atLeastOneWasLoaded || condition;\n ret += TemplateHelpers_1.TemplateHelpers.getHelper('loadTemplate')(id, condition, data);\n }\n });\n if (!atLeastOneWasLoaded && defaultTmpl != undefined) {\n ret += TemplateHelpers_1.TemplateHelpers.getHelper('loadTemplate')(defaultTmpl, true, data);\n }\n return ret;\n});\nvar byteMeasure = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB'];\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('size', function (value, options) {\n var size = parseInt(value, 10);\n var precision = options != null && options.precision != null ? options.precision : 2;\n var base = options != null && options.base != null ? options.base : 0;\n while (size > 1024 && base + 1 < byteMeasure.length) {\n size /= 1024;\n base++;\n }\n size = Math.floor(size * Math.pow(10, precision)) / Math.pow(10, precision);\n return size + ' ' + byteMeasure[base];\n});\nTemplateHelpers_1.TemplateHelpers.registerFieldHelper('translatedCaption', function (value) {\n return FacetUtils_1.FacetUtils.tryToGetTranslatedCaption('@filetype', value);\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('loadTemplate', function (id, condition, data) {\n if (condition === void 0) { condition = true; }\n if (Utils_1.Utils.isNullOrUndefined(data)) {\n data = resolveQueryResult();\n }\n if (condition) {\n return TemplateCache_1.TemplateCache.getTemplate(id).instantiateToString(data, {\n checkCondition: false\n });\n }\n return '';\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('encodeCarriageReturn', function (data) {\n if (Utils_1.Utils.isNullOrUndefined(data)) {\n return undefined;\n }\n else {\n return StringUtils_1.StringUtils.encodeCarriageReturn(data);\n }\n});\nTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('isMobileDevice', function () {\n return DeviceUtils_1.DeviceUtils.isMobileDevice() ? DeviceUtils_1.DeviceUtils.getDeviceName() : null;\n});\nfunction resolveQueryResult() {\n var found;\n var resultList = Component_1.Component.getComponentRef('ResultList');\n if (resultList) {\n found = resultList.resultCurrentlyBeingRendered;\n }\n if (!found) {\n var quickview = Component_1.Component.getComponentRef('Quickview');\n if (quickview) {\n found = quickview.resultCurrentlyBeingRendered;\n }\n }\n return found;\n}\nfunction resolveTermsToHighlight() {\n var currentQueryResult = resolveQueryResult();\n if (currentQueryResult) {\n return currentQueryResult.termsToHighlight;\n }\n}\nfunction resolvePhrasesToHighlight() {\n var currentQueryResult = resolveQueryResult();\n if (currentQueryResult) {\n return currentQueryResult.phrasesToHighlight;\n }\n}\nfunction termsToHighlightAreDefined(termsToHighlight, phrasesToHighlight) {\n return Utils_1.Utils.isNonEmptyArray(_.keys(termsToHighlight)) || Utils_1.Utils.isNonEmptyArray(_.keys(phrasesToHighlight));\n}\n\n\n/***/ }),\n\n/***/ 497:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dom_1 = __webpack_require__(1);\nvar SVGDom_1 = __webpack_require__(15);\nvar DynamicFacetHeaderButton = /** @class */ (function () {\n function DynamicFacetHeaderButton(rootOptions) {\n this.rootOptions = rootOptions;\n this.create();\n }\n DynamicFacetHeaderButton.prototype.create = function () {\n var hasIcon = this.rootOptions.iconSVG && this.rootOptions.iconClassName;\n this.button = Dom_1.$$('button', {\n className: (\"coveo-dynamic-facet-header-btn \" + (this.rootOptions.className || '')).trim(),\n type: 'button'\n }, hasIcon ? this.rootOptions.iconSVG : this.rootOptions.label);\n this.rootOptions.action && this.button.on('click', this.rootOptions.action);\n if (hasIcon) {\n this.button.setAttribute('aria-label', this.rootOptions.label);\n this.button.setAttribute('title', this.rootOptions.label);\n SVGDom_1.SVGDom.addClassToSVGInContainer(this.button.el, this.rootOptions.iconClassName);\n }\n if (this.rootOptions.ariaLabel) {\n this.button.setAttribute('aria-label', this.rootOptions.ariaLabel);\n }\n if (this.rootOptions.shouldDisplay !== undefined) {\n this.toggle(this.rootOptions.shouldDisplay);\n }\n this.element = this.button.el;\n };\n DynamicFacetHeaderButton.prototype.toggle = function (shouldDisplay) {\n this.button.toggle(shouldDisplay);\n };\n return DynamicFacetHeaderButton;\n}());\nexports.DynamicFacetHeaderButton = DynamicFacetHeaderButton;\n\n\n/***/ }),\n\n/***/ 504:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Utils_1 = __webpack_require__(4);\nvar DynamicFacetRequestBuilder = /** @class */ (function () {\n function DynamicFacetRequestBuilder(request) {\n this.request = request;\n }\n DynamicFacetRequestBuilder.prototype.buildBaseRequestForQuery = function (query) {\n return __assign({}, this.request, { filterFacetCount: this.getFilterFacetCount(!!query.filterField) });\n };\n DynamicFacetRequestBuilder.prototype.getFilterFacetCount = function (isFoldingEnabled) {\n if (Utils_1.Utils.isUndefined(this.request.filterFacetCount)) {\n return !isFoldingEnabled;\n }\n return this.request.filterFacetCount;\n };\n return DynamicFacetRequestBuilder;\n}());\nexports.DynamicFacetRequestBuilder = DynamicFacetRequestBuilder;\n\n\n/***/ }),\n\n/***/ 505:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 506:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(563);\nvar Dom_1 = __webpack_require__(1);\nvar Strings_1 = __webpack_require__(6);\nvar SVGIcons_1 = __webpack_require__(12);\nvar SVGDom_1 = __webpack_require__(15);\nvar DynamicFacetHeaderButton_1 = __webpack_require__(497);\nvar DynamicFacetHeaderCollapseToggle_1 = __webpack_require__(564);\nvar DynamicFacetHeader = /** @class */ (function () {\n function DynamicFacetHeader(options) {\n this.options = options;\n this.element = Dom_1.$$('div', { className: 'coveo-dynamic-facet-header' }).el;\n this.title = this.createTitle();\n Dom_1.$$(this.element).append(this.title.el);\n Dom_1.$$(this.element).append(this.createWaitAnimation());\n Dom_1.$$(this.element).append(this.createClearButton());\n this.options.enableCollapse && this.enableCollapse();\n }\n DynamicFacetHeader.prototype.createClearButton = function () {\n var _this = this;\n this.clearButton = new DynamicFacetHeaderButton_1.DynamicFacetHeaderButton({\n label: Strings_1.l('Clear'),\n ariaLabel: Strings_1.l('Clear', this.options.title),\n className: 'coveo-dynamic-facet-header-clear',\n shouldDisplay: false,\n action: function () { return _this.options.clear(); }\n });\n return this.clearButton.element;\n };\n DynamicFacetHeader.prototype.createCollapseToggle = function () {\n this.collapseToggle = new DynamicFacetHeaderCollapseToggle_1.DynamicFacetHeaderCollapseToggle(this.options);\n return this.collapseToggle.element;\n };\n DynamicFacetHeader.prototype.enableCollapse = function () {\n var _this = this;\n Dom_1.$$(this.element).append(this.createCollapseToggle());\n Dom_1.$$(this.title).addClass('coveo-clickable');\n Dom_1.$$(this.title).on('click', function () { return _this.options.toggleCollapse(); });\n };\n DynamicFacetHeader.prototype.toggleCollapse = function (isCollapsed) {\n this.options.enableCollapse && this.collapseToggle.toggleButton(isCollapsed);\n };\n DynamicFacetHeader.prototype.createTitle = function () {\n return Dom_1.$$('h2', {\n className: 'coveo-dynamic-facet-header-title',\n ariaLabel: \"\" + Strings_1.l('FacetTitle', this.options.title)\n }, Dom_1.$$('span', { ariaHidden: true, title: this.options.title }, this.options.title));\n };\n DynamicFacetHeader.prototype.createWaitAnimation = function () {\n this.waitAnimation = Dom_1.$$('div', { className: 'coveo-dynamic-facet-header-wait-animation' }, SVGIcons_1.SVGIcons.icons.loading);\n SVGDom_1.SVGDom.addClassToSVGInContainer(this.waitAnimation.el, 'coveo-dynamic-facet-header-wait-animation-svg');\n this.waitAnimation.toggle(false);\n return this.waitAnimation.el;\n };\n DynamicFacetHeader.prototype.toggleClear = function (visible) {\n this.clearButton.toggle(visible);\n };\n DynamicFacetHeader.prototype.showLoading = function () {\n var _this = this;\n clearTimeout(this.showLoadingTimeout);\n this.showLoadingTimeout = window.setTimeout(function () { return _this.waitAnimation.toggle(true); }, DynamicFacetHeader.showLoadingDelay);\n };\n DynamicFacetHeader.prototype.hideLoading = function () {\n clearTimeout(this.showLoadingTimeout);\n this.waitAnimation.toggle(false);\n };\n DynamicFacetHeader.showLoadingDelay = 2000;\n return DynamicFacetHeader;\n}());\nexports.DynamicFacetHeader = DynamicFacetHeader;\n\n\n/***/ }),\n\n/***/ 507:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The allowed sort criteria for a Search API\n * [facet request]{@link IFacetRequest}.\n */\nvar FacetSortCriteria;\n(function (FacetSortCriteria) {\n /**\n * Sort facet values in descending score order.\n *\n * Facet value scores are based on number of occurrences and position in the\n * ranked query result set.\n *\n * The Coveo Machine Learning dynamic navigation experience feature only\n * works with this sort criterion.\n */\n FacetSortCriteria[\"score\"] = \"score\";\n /**\n * Sort facet values in ascending alphanumeric order.\n */\n FacetSortCriteria[\"alphanumeric\"] = \"alphanumeric\";\n /**\n * Sort facet values in descending number of occurrences.\n */\n FacetSortCriteria[\"occurrences\"] = \"occurrences\";\n})(FacetSortCriteria = exports.FacetSortCriteria || (exports.FacetSortCriteria = {}));\nfunction isFacetSortCriteria(sortCriteria) {\n return !!FacetSortCriteria[sortCriteria];\n}\nexports.isFacetSortCriteria = isFacetSortCriteria;\n\n\n/***/ }),\n\n/***/ 508:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dom_1 = __webpack_require__(1);\nvar ComboboxInput_1 = __webpack_require__(565);\nvar underscore_1 = __webpack_require__(0);\nvar SVGIcons_1 = __webpack_require__(12);\nvar SVGDom_1 = __webpack_require__(15);\nvar ComboboxValues_1 = __webpack_require__(566);\n__webpack_require__(567);\nvar Utils_1 = __webpack_require__(4);\nvar Strings_1 = __webpack_require__(6);\nvar Combobox = /** @class */ (function () {\n function Combobox(options) {\n this.options = options;\n this.defaultOptions = {\n wrapperClassName: '',\n clearOnBlur: false\n };\n this.throttlingDelay = 600;\n this.isRequestCancelled = false;\n this.throttledRequest = underscore_1.throttle(this.triggerRequest, this.throttlingDelay, {\n leading: true,\n trailing: true\n });\n this.options = __assign({}, this.defaultOptions, this.options);\n this.id = underscore_1.uniqueId('coveo-combobox-');\n this.create();\n }\n Combobox.prototype.create = function () {\n this.element = Dom_1.$$('div', { className: \"coveo-combobox-wrapper \" + this.options.wrapperClassName }).el;\n this.createAndAppendInput();\n this.createAndAppendWaitAnimation();\n this.createAndAppendValues();\n };\n Combobox.prototype.createAndAppendInput = function () {\n this.input = new ComboboxInput_1.ComboboxInput(this);\n this.element.appendChild(this.input.element);\n };\n Combobox.prototype.createAndAppendWaitAnimation = function () {\n this.waitAnimationElement = Dom_1.$$('div', { className: 'coveo-combobox-wait-animation' }, SVGIcons_1.SVGIcons.icons.loading).el;\n SVGDom_1.SVGDom.addClassToSVGInContainer(this.waitAnimationElement, 'coveo-combobox-wait-animation-svg');\n this.toggleWaitAnimation(false);\n this.input.element.appendChild(this.waitAnimationElement);\n };\n Combobox.prototype.toggleWaitAnimation = function (show) {\n Dom_1.$$(this.waitAnimationElement).toggle(show);\n };\n Combobox.prototype.createAndAppendValues = function () {\n this.values = new ComboboxValues_1.ComboboxValues(this);\n this.element.appendChild(this.values.element);\n };\n Combobox.prototype.clearAll = function () {\n this.clearValues();\n this.input.clearInput();\n };\n Combobox.prototype.clearValues = function () {\n this.values.clearValues();\n this.cancelRequest();\n };\n Combobox.prototype.cancelRequest = function () {\n this.toggleWaitAnimation(false);\n this.throttledRequest.cancel();\n this.isRequestCancelled = true;\n };\n Combobox.prototype.onInputChange = function (value) {\n var _this = this;\n if (Utils_1.Utils.isEmptyString(value)) {\n return this.clearValues();\n }\n this.throttledRequest(function () { return _this.options.requestValues(value); }, function () { return _this.values.resetScroll(); });\n };\n Combobox.prototype.onInputBlur = function () {\n if (this.values.mouseIsOverValue) {\n return;\n }\n if (this.values.isRenderingNewValues) {\n return;\n }\n if (this.options.clearOnBlur) {\n return this.clearAll();\n }\n this.clearValues();\n };\n Combobox.prototype.updateAccessibilityAttributes = function (attributes) {\n this.input.updateAccessibilityAttributes(attributes);\n };\n Combobox.prototype.updateAriaLive = function () {\n if (!this.values.hasValues()) {\n this.options.ariaLive.updateText(Strings_1.l('NoValuesFound'));\n return;\n }\n var text = Strings_1.l('ShowingResultsWithQuery', this.values.numberOfValues, this.input.value, this.values.numberOfValues);\n if (this.options.scrollable && this.options.scrollable.areMoreValuesAvailable()) {\n text = text + \" (\" + Strings_1.l('MoreValuesAvailable') + \")\";\n }\n this.options.ariaLive.updateText(text);\n };\n Combobox.prototype.onScrollEndReached = function () {\n var _this = this;\n this.values.saveFocusedValue();\n this.options.scrollable &&\n this.throttledRequest(function () { return _this.options.scrollable.requestMoreValues(); }, function () { return _this.values.restoreFocusedValue(); });\n };\n Combobox.prototype.triggerRequest = function (request, callback) {\n return __awaiter(this, void 0, void 0, function () {\n var response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.isRequestCancelled = false;\n this.toggleWaitAnimation(true);\n return [4 /*yield*/, request()];\n case 1:\n response = _a.sent();\n this.toggleWaitAnimation(false);\n if (!this.isRequestCancelled) {\n this.values.renderFromResponse(response);\n callback && callback();\n }\n return [2 /*return*/];\n }\n });\n });\n };\n return Combobox;\n}());\nexports.Combobox = Combobox;\n\n\n/***/ }),\n\n/***/ 509:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 510:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Checkbox_1 = __webpack_require__(64);\nvar Dom_1 = __webpack_require__(1);\nvar DynamicFacetValueCheckbox = /** @class */ (function () {\n function DynamicFacetValueCheckbox(facetValue, selectAction) {\n if (selectAction === void 0) { selectAction = function () { }; }\n this.facetValue = facetValue;\n this.checkbox = new Checkbox_1.Checkbox(selectAction.bind(this), this.facetValue.displayValue, this.facetValue.selectAriaLabel, \"(\" + this.facetValue.formattedCount + \")\");\n var label = Dom_1.$$(this.checkbox.getElement()).find('.coveo-checkbox-span-label');\n var labelSuffix = Dom_1.$$(this.checkbox.getElement()).find('.coveo-checkbox-span-label-suffix');\n if (label && labelSuffix) {\n label.setAttribute('title', this.facetValue.displayValue);\n label.setAttribute('aria-hidden', 'true');\n labelSuffix.setAttribute('aria-hidden', 'true');\n }\n this.facetValue.isSelected && this.checkbox.select(false);\n this.element = this.checkbox.getElement();\n }\n return DynamicFacetValueCheckbox;\n}());\nexports.DynamicFacetValueCheckbox = DynamicFacetValueCheckbox;\n\n\n/***/ }),\n\n/***/ 511:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(578);\nvar Dom_1 = __webpack_require__(1);\nvar underscore_1 = __webpack_require__(0);\nvar FacetValueState_1 = __webpack_require__(70);\nvar Strings_1 = __webpack_require__(6);\nvar DynamicFacetValueMoreLessButton_1 = __webpack_require__(221);\nvar Utils_1 = __webpack_require__(4);\nvar DynamicFacetValues = /** @class */ (function () {\n function DynamicFacetValues(facet, creatorKlass) {\n this.facet = facet;\n this.list = Dom_1.$$('ul', { className: 'coveo-dynamic-facet-values' }).el;\n this.valueCreator = new creatorKlass(this.facet);\n this.resetValues();\n }\n DynamicFacetValues.prototype.createFromResponse = function (response) {\n var _this = this;\n this.facetValues = response.values.map(function (facetValue, index) { return _this.valueCreator.createFromResponse(facetValue, index); });\n };\n DynamicFacetValues.prototype.reorderValues = function (order) {\n this.facetValues = Utils_1.Utils.reorderValuesByKeys(this.facetValues, order, function (value) { return value.value; });\n };\n DynamicFacetValues.prototype.resetValues = function () {\n this.facetValues = this.valueCreator.getDefaultValues();\n };\n Object.defineProperty(DynamicFacetValues.prototype, \"allFacetValues\", {\n get: function () {\n return this.facetValues;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"allValues\", {\n get: function () {\n return this.facetValues.map(function (facetValue) { return facetValue.value; });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"selectedValues\", {\n get: function () {\n return this.facetValues.filter(function (value) { return value.isSelected; }).map(function (_a) {\n var value = _a.value;\n return value;\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"selectedDisplayValues\", {\n get: function () {\n return this.facetValues.filter(function (value) { return value.isSelected; }).map(function (_a) {\n var displayValue = _a.displayValue;\n return displayValue;\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"activeValues\", {\n get: function () {\n return this.facetValues.filter(function (value) { return !value.isIdle; });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"displayedValues\", {\n get: function () {\n return this.facetValues.filter(function (value) { return !value.isIdle || value.numberOfResults > 0; });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"hasSelectedValues\", {\n get: function () {\n return !!underscore_1.findWhere(this.facetValues, { state: FacetValueState_1.FacetValueState.selected });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"hasActiveValues\", {\n get: function () {\n return !!this.activeValues.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"hasIdleValues\", {\n get: function () {\n return !!underscore_1.findWhere(this.facetValues, { state: FacetValueState_1.FacetValueState.idle });\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacetValues.prototype.clearAll = function () {\n this.facetValues.forEach(function (value) { return value.deselect(); });\n };\n Object.defineProperty(DynamicFacetValues.prototype, \"hasValues\", {\n get: function () {\n return !!this.allFacetValues.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetValues.prototype, \"hasDisplayedValues\", {\n get: function () {\n return !!this.displayedValues.length;\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacetValues.prototype.hasSelectedValue = function (arg) {\n var value = typeof arg === 'string' ? arg : arg.value;\n var foundValue = underscore_1.find(this.facetValues, function (facetValue) { return facetValue.equals(value); });\n return foundValue && foundValue.isSelected;\n };\n DynamicFacetValues.prototype.get = function (arg) {\n var value = typeof arg === 'string' ? arg : arg.value;\n var facetValue = underscore_1.find(this.facetValues, function (facetValue) { return facetValue.equals(value); });\n if (facetValue) {\n return facetValue;\n }\n var newFacetValue = this.valueCreator.createFromValue(value);\n if (!newFacetValue) {\n return null;\n }\n this.facetValues.push(newFacetValue);\n return newFacetValue;\n };\n DynamicFacetValues.prototype.buildShowLess = function () {\n var _this = this;\n var showLess = new DynamicFacetValueMoreLessButton_1.DynamicFacetValueShowMoreLessButton({\n className: 'coveo-dynamic-facet-show-less',\n ariaLabel: Strings_1.l('ShowLessFacetResults', this.facet.options.title),\n label: Strings_1.l('ShowLess'),\n action: function () {\n _this.facet.enableFreezeFacetOrderFlag();\n _this.facet.showLessValues();\n }\n });\n return showLess.element;\n };\n DynamicFacetValues.prototype.buildShowMore = function () {\n var _this = this;\n var showMore = new DynamicFacetValueMoreLessButton_1.DynamicFacetValueShowMoreLessButton({\n className: 'coveo-dynamic-facet-show-more',\n ariaLabel: Strings_1.l('ShowMoreFacetResults', this.facet.options.title),\n label: Strings_1.l('ShowMore'),\n action: function () {\n _this.facet.enableFreezeFacetOrderFlag();\n _this.facet.showMoreValues();\n }\n });\n return showMore.element;\n };\n Object.defineProperty(DynamicFacetValues.prototype, \"shouldEnableShowLess\", {\n get: function () {\n var hasMoreValuesThenDefault = this.facetValues.length > this.facet.options.numberOfValues;\n return hasMoreValuesThenDefault && this.hasIdleValues;\n },\n enumerable: true,\n configurable: true\n });\n DynamicFacetValues.prototype.appendShowMoreLess = function (fragment) {\n if (!this.facet.options.enableMoreLess) {\n return;\n }\n if (this.shouldEnableShowLess) {\n fragment.appendChild(this.buildShowLess());\n }\n if (this.facet.moreValuesAvailable) {\n fragment.appendChild(this.buildShowMore());\n }\n };\n DynamicFacetValues.prototype.appendSelectedCollapsedValues = function (fragment) {\n if (!this.hasSelectedValues) {\n return;\n }\n var selectedValues = this.selectedDisplayValues.join(', ');\n fragment.appendChild(Dom_1.$$('li', {\n className: 'coveo-dynamic-facet-collapsed-values',\n ariaLabel: Strings_1.l('CurrentSelections') + \": \" + selectedValues\n }, underscore_1.escape(selectedValues)).el);\n };\n DynamicFacetValues.prototype.render = function () {\n var fragment = document.createDocumentFragment();\n Dom_1.$$(this.list).empty();\n this.displayedValues.forEach(function (facetValue) {\n fragment.appendChild(facetValue.renderedElement);\n });\n this.appendShowMoreLess(fragment);\n this.appendSelectedCollapsedValues(fragment);\n this.list.appendChild(fragment);\n return this.list;\n };\n return DynamicFacetValues;\n}());\nexports.DynamicFacetValues = DynamicFacetValues;\n\n\n/***/ }),\n\n/***/ 512:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Assert_1 = __webpack_require__(5);\nvar QueryEvents_1 = __webpack_require__(11);\nvar underscore_1 = __webpack_require__(0);\nvar DynamicFacetRequestBuilder_1 = __webpack_require__(504);\nvar DynamicFacetQueryController = /** @class */ (function () {\n function DynamicFacetQueryController(facet) {\n this.facet = facet;\n this.freezeCurrentValues = false;\n this.freezeFacetOrder = false;\n this.preventAutoSelection = false;\n this.requestBuilder = new DynamicFacetRequestBuilder_1.DynamicFacetRequestBuilder({\n facetId: this.facet.options.id,\n field: this.facet.fieldName,\n type: this.facet.facetType,\n sortCriteria: this.facet.options.sortCriteria,\n injectionDepth: this.facet.options.injectionDepth,\n filterFacetCount: this.facet.options.filterFacetCount\n });\n this.resetNumberOfValuesToRequest();\n this.resetFlagsDuringQuery();\n }\n DynamicFacetQueryController.prototype.resetFlagsDuringQuery = function () {\n var _this = this;\n this.facet.bind.onRootElement(QueryEvents_1.QueryEvents.duringQuery, function () {\n _this.freezeCurrentValues = false;\n _this.freezeFacetOrder = false;\n _this.preventAutoSelection = false;\n });\n };\n DynamicFacetQueryController.prototype.increaseNumberOfValuesToRequest = function (additionalNumberOfValues) {\n this.numberOfValuesToRequest += additionalNumberOfValues;\n };\n DynamicFacetQueryController.prototype.resetNumberOfValuesToRequest = function () {\n this.numberOfValuesToRequest = this.facet.options.numberOfValues;\n };\n DynamicFacetQueryController.prototype.enablePreventAutoSelectionFlag = function () {\n this.preventAutoSelection = true;\n };\n DynamicFacetQueryController.prototype.enableFreezeCurrentValuesFlag = function () {\n if (this.areValuesIncorrectlyAffectedByDependsOn) {\n return;\n }\n this.freezeCurrentValues = true;\n };\n DynamicFacetQueryController.prototype.enableFreezeFacetOrderFlag = function () {\n this.freezeFacetOrder = true;\n };\n Object.defineProperty(DynamicFacetQueryController.prototype, \"areValuesIncorrectlyAffectedByDependsOn\", {\n get: function () {\n if (!this.facet.dependsOnManager.hasDependentFacets) {\n return false;\n }\n if (this.facet.dependsOnManager.dependentFacetsHaveSelectedValues) {\n return false;\n }\n return this.currentValues.length < this.numberOfValuesToRequest;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Build the facets request for the DynamicFacet, and insert it in the query builder\n * @param queryBuilder\n */\n DynamicFacetQueryController.prototype.putFacetIntoQueryBuilder = function (queryBuilder) {\n Assert_1.Assert.exists(queryBuilder);\n queryBuilder.facetRequests.push(this.buildFacetRequest(queryBuilder.build()));\n if (this.freezeFacetOrder) {\n queryBuilder.facetOptions.freezeFacetOrder = true;\n }\n };\n DynamicFacetQueryController.prototype.buildFacetRequest = function (query) {\n return __assign({}, this.requestBuilder.buildBaseRequestForQuery(query), { currentValues: this.currentValues, numberOfValues: this.numberOfValues, freezeCurrentValues: this.freezeCurrentValues, preventAutoSelect: this.preventAutoSelection, isFieldExpanded: this.numberOfValuesToRequest > this.facet.options.numberOfValues });\n };\n DynamicFacetQueryController.prototype.getQueryResults = function () {\n var query = this.facet.queryController.getLastQuery();\n // Specifying a numberOfResults of 0 will not log the query as a full fledged query in the API\n // it will also alleviate the load on the index\n query.numberOfResults = 0;\n var previousFacetRequestIndex = underscore_1.findIndex(query.facets, { facetId: this.facet.options.id });\n if (previousFacetRequestIndex !== -1) {\n query.facets[previousFacetRequestIndex] = this.buildFacetRequest(query);\n }\n else if (query.facets) {\n query.facets.push(this.buildFacetRequest(query));\n }\n else {\n query.facets = [this.buildFacetRequest(query)];\n }\n return this.facet.queryController.getEndpoint().search(query);\n };\n Object.defineProperty(DynamicFacetQueryController.prototype, \"currentValues\", {\n get: function () {\n return this.facet.values.allFacetValues.map(function (_a) {\n var value = _a.value, state = _a.state;\n return ({\n value: value,\n state: state\n });\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DynamicFacetQueryController.prototype, \"numberOfValues\", {\n get: function () {\n if (this.freezeCurrentValues) {\n return this.currentValues.length;\n }\n return Math.max(this.numberOfValuesToRequest, this.facet.values.activeValues.length);\n },\n enumerable: true,\n configurable: true\n });\n return DynamicFacetQueryController;\n}());\nexports.DynamicFacetQueryController = DynamicFacetQueryController;\n\n\n/***/ }),\n\n/***/ 513:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dom_1 = __webpack_require__(1);\nvar DynamicFacetValueCheckbox_1 = __webpack_require__(510);\nvar DynamicFacetValueRenderer = /** @class */ (function () {\n function DynamicFacetValueRenderer(facetValue, facet) {\n this.facetValue = facetValue;\n this.facet = facet;\n }\n DynamicFacetValueRenderer.prototype.render = function () {\n this.dom = Dom_1.$$('li', {\n className: 'coveo-dynamic-facet-value',\n dataValue: this.facetValue.value\n });\n this.toggleSelectedClass();\n this.renderCheckbox();\n this.addFocusAndBlurEventListeners();\n return this.dom.el;\n };\n DynamicFacetValueRenderer.prototype.toggleSelectedClass = function () {\n this.dom.toggleClass('coveo-selected', this.facetValue.isSelected);\n };\n DynamicFacetValueRenderer.prototype.renderCheckbox = function () {\n this.valueCheckbox = new DynamicFacetValueCheckbox_1.DynamicFacetValueCheckbox(this.facetValue, this.selectAction.bind(this));\n this.dom.append(this.valueCheckbox.element);\n };\n DynamicFacetValueRenderer.prototype.addFocusAndBlurEventListeners = function () {\n var _this = this;\n var checkboxButton = Dom_1.$$(this.valueCheckbox.element).find('button');\n Dom_1.$$(checkboxButton).on('focusin', function () { return _this.onFocusIn(); });\n Dom_1.$$(checkboxButton).on('focusout', function () { return _this.onFocusOut(); });\n };\n DynamicFacetValueRenderer.prototype.onFocusIn = function () {\n this.dom.addClass('coveo-focused');\n };\n DynamicFacetValueRenderer.prototype.onFocusOut = function () {\n this.dom.removeClass('coveo-focused');\n };\n DynamicFacetValueRenderer.prototype.selectAction = function () {\n var _this = this;\n this.facet.toggleSelectValue(this.facetValue.value);\n this.toggleSelectedClass();\n this.facet.enableFreezeCurrentValuesFlag();\n this.facet.enableFreezeFacetOrderFlag();\n this.facet.enablePreventAutoSelectionFlag();\n this.facet.scrollToTop();\n this.facet.triggerNewQuery(function () { return _this.facetValue.logSelectActionToAnalytics(); });\n };\n return DynamicFacetValueRenderer;\n}());\nexports.DynamicFacetValueRenderer = DynamicFacetValueRenderer;\n\n\n/***/ }),\n\n/***/ 523:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 524:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 525:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 526:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ResponsiveComponentsManager_1 = __webpack_require__(60);\nvar SearchInterface_1 = __webpack_require__(19);\nvar ResultList_1 = __webpack_require__(89);\nvar Dom_1 = __webpack_require__(1);\nvar Component_1 = __webpack_require__(7);\nvar Logger_1 = __webpack_require__(9);\nvar ResponsiveDefaultResultTemplate = /** @class */ (function () {\n function ResponsiveDefaultResultTemplate(coveoRoot, ID, options, responsiveDropdown) {\n this.coveoRoot = coveoRoot;\n this.ID = ID;\n this.searchInterface = Component_1.Component.get(this.coveoRoot.el, SearchInterface_1.SearchInterface, false);\n this.currentMode = 'large';\n }\n ResponsiveDefaultResultTemplate.init = function (root, component, options) {\n if (!Dom_1.$$(root).find(\".\" + Component_1.Component.computeCssClassName(ResultList_1.ResultList))) {\n var logger = new Logger_1.Logger('ResponsiveDefaultResultTemplate');\n logger.trace('No ResultLayout component found : Cannot instantiate ResponsiveResultLayout');\n return;\n }\n ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(ResponsiveDefaultResultTemplate, Dom_1.$$(root), ResultList_1.ResultList.ID, component, options);\n };\n ResponsiveDefaultResultTemplate.prototype.registerComponent = function (accept) {\n if (accept instanceof ResultList_1.ResultList) {\n this.resultList = accept;\n return true;\n }\n return false;\n };\n ResponsiveDefaultResultTemplate.prototype.handleResizeEvent = function () {\n var _this = this;\n var lastResults = this.resultList.queryController.getLastResults();\n if (this.needSmallMode()) {\n Dom_1.$$(this.resultList.options.resultsContainer).addClass('coveo-card-layout-container');\n Dom_1.$$(this.resultList.options.resultsContainer).removeClass(\"coveo-list-layout-container\");\n if (this.currentMode != 'small') {\n if (lastResults) {\n this.resultList.buildResults(lastResults).then(function (elements) {\n _this.resultList.renderResults(elements);\n });\n }\n this.currentMode = 'small';\n }\n }\n else {\n Dom_1.$$(this.resultList.options.resultsContainer).removeClass('coveo-card-layout-container');\n Dom_1.$$(this.resultList.options.resultsContainer).addClass(\"coveo-list-layout-container\");\n if (this.currentMode != 'large') {\n if (lastResults) {\n this.resultList.buildResults(lastResults).then(function (elements) {\n _this.resultList.renderResults(elements);\n });\n }\n this.currentMode = 'large';\n }\n }\n };\n ResponsiveDefaultResultTemplate.prototype.needSmallMode = function () {\n return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getSmallScreenWidth();\n };\n return ResponsiveDefaultResultTemplate;\n}());\nexports.ResponsiveDefaultResultTemplate = ResponsiveDefaultResultTemplate;\n\n\n/***/ }),\n\n/***/ 527:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dom_1 = __webpack_require__(1);\nvar ResultContainer = /** @class */ (function () {\n function ResultContainer(resultContainer, searchInterface) {\n this.searchInterface = searchInterface;\n this.resultContainerElement = Dom_1.$$(resultContainer);\n }\n ResultContainer.prototype.empty = function () {\n this.searchInterface.detachComponentsInside(this.resultContainerElement.el);\n Dom_1.$$(this.resultContainerElement).empty();\n };\n ResultContainer.prototype.addClass = function (classToAdd) {\n this.resultContainerElement.addClass(classToAdd);\n };\n ResultContainer.prototype.isEmpty = function () {\n return this.resultContainerElement.isEmpty();\n };\n ResultContainer.prototype.hideChildren = function () {\n this.resultContainerElement.children().forEach(function (child) { return Dom_1.$$(child).hide(); });\n };\n ResultContainer.prototype.getResultElements = function () {\n return this.resultContainerElement.findAll('.CoveoResult');\n };\n Object.defineProperty(ResultContainer.prototype, \"el\", {\n get: function () {\n return this.resultContainerElement.el;\n },\n enumerable: true,\n configurable: true\n });\n ResultContainer.resultCurrentlyBeingRendered = null;\n return ResultContainer;\n}());\nexports.ResultContainer = ResultContainer;\n\n\n/***/ }),\n\n/***/ 528:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ResultListRenderer_1 = __webpack_require__(210);\nvar Dom_1 = __webpack_require__(1);\nvar _ = __webpack_require__(0);\nvar ResultListCardRenderer = /** @class */ (function (_super) {\n __extends(ResultListCardRenderer, _super);\n function ResultListCardRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ResultListCardRenderer.prototype.getEndFragment = function (resultElements) {\n var _this = this;\n return new Promise(function (resolve) {\n if (!_.isEmpty(resultElements)) {\n // with infinite scrolling, we want the additional results to append at the end of the previous query.\n // For this, we need to remove the padding.\n if (_this.resultListOptions.enableInfiniteScroll) {\n var needToBeRemoved = Dom_1.$$(_this.resultListOptions.resultsContainer).findAll('.coveo-card-layout-padding');\n _.each(needToBeRemoved, function (toRemove) { return Dom_1.$$(toRemove).remove(); });\n }\n // Used to prevent last card from spanning the grid's whole width\n var emptyCards_1 = document.createDocumentFragment();\n _.times(3, function () { return emptyCards_1.appendChild(Dom_1.$$('div', { className: 'coveo-card-layout coveo-card-layout-padding' }).el); });\n resolve(emptyCards_1);\n }\n resolve(null);\n });\n };\n return ResultListCardRenderer;\n}(ResultListRenderer_1.ResultListRenderer));\nexports.ResultListCardRenderer = ResultListCardRenderer;\n\n\n/***/ }),\n\n/***/ 529:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ResultListRenderer_1 = __webpack_require__(210);\nvar TableTemplate_1 = __webpack_require__(462);\nvar Dom_1 = __webpack_require__(1);\nvar _ = __webpack_require__(0);\nvar ResultListTableRenderer = /** @class */ (function (_super) {\n __extends(ResultListTableRenderer, _super);\n function ResultListTableRenderer(resultListOptions, autoCreateComponentsFn) {\n var _this = _super.call(this, resultListOptions, autoCreateComponentsFn) || this;\n _this.resultListOptions = resultListOptions;\n _this.autoCreateComponentsFn = autoCreateComponentsFn;\n _this.shouldDisplayHeader = true;\n _this.shouldDisplayFooter = false;\n if (_this.resultListOptions.resultTemplate instanceof TableTemplate_1.TableTemplate) {\n if (_this.resultListOptions.resultTemplate.hasTemplateWithRole('table-footer')) {\n _this.shouldDisplayFooter = true;\n }\n // If custom templates are defined but no header template, do not display it.\n if (_this.resultListOptions.resultTemplate.templates.length !== 0 &&\n !_this.resultListOptions.resultTemplate.hasTemplateWithRole('table-header')) {\n _this.shouldDisplayHeader = false;\n }\n }\n return _this;\n }\n ResultListTableRenderer.prototype.getStartFragment = function (resultElements, append) {\n if (!append && !_.isEmpty(resultElements) && this.shouldDisplayHeader) {\n return this.renderRoledTemplate('table-header');\n }\n };\n ResultListTableRenderer.prototype.getEndFragment = function (resultElements, append) {\n if (!append && !_.isEmpty(resultElements) && this.shouldDisplayFooter) {\n return this.renderRoledTemplate('table-footer');\n }\n };\n ResultListTableRenderer.prototype.renderRoledTemplate = function (role) {\n return __awaiter(this, void 0, void 0, function () {\n var elem, frag;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.resultListOptions.resultTemplate.instantiateRoleToElement(role)];\n case 1:\n elem = _a.sent();\n Dom_1.$$(elem).addClass(\"coveo-result-list-\" + role);\n this.autoCreateComponentsFn(elem, undefined);\n frag = document.createDocumentFragment();\n frag.appendChild(elem);\n return [2 /*return*/, frag];\n }\n });\n });\n };\n return ResultListTableRenderer;\n}(ResultListRenderer_1.ResultListRenderer));\nexports.ResultListTableRenderer = ResultListTableRenderer;\n\n\n/***/ }),\n\n/***/ 531:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 532:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ResponsiveDropdownContent_1 = __webpack_require__(90);\nvar Core_1 = __webpack_require__(20);\nvar SVGIcons_1 = __webpack_require__(12);\nvar FocusTrap_1 = __webpack_require__(465);\nvar ResponsiveDropdownModalContent = /** @class */ (function () {\n function ResponsiveDropdownModalContent(componentName, element, closeButtonLabel, close) {\n this.componentName = componentName;\n this.element = element;\n this.closeButtonLabel = closeButtonLabel;\n this.close = close;\n this.className = \"coveo-\" + this.componentName + \"-dropdown-modal-content\";\n }\n Object.defineProperty(ResponsiveDropdownModalContent.prototype, \"hidden\", {\n set: function (shouldHide) {\n this.element.toggleClass('coveo-hidden', shouldHide);\n },\n enumerable: true,\n configurable: true\n });\n ResponsiveDropdownModalContent.prototype.positionDropdown = function () {\n this.element.el.classList.add(this.className, ResponsiveDropdownContent_1.ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n this.element.setAttribute('role', 'group');\n this.element.setAttribute('aria-label', Core_1.l('FiltersDropdown'));\n this.hidden = false;\n this.ensureCloseButton();\n this.ensureFocusTrap();\n };\n ResponsiveDropdownModalContent.prototype.hideDropdown = function () {\n this.element.el.classList.remove(this.className, ResponsiveDropdownContent_1.ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n this.element.setAttribute('role', null);\n this.element.setAttribute('aria-label', null);\n this.hidden = true;\n this.removeCloseButton();\n this.removeFocusTrap();\n };\n ResponsiveDropdownModalContent.prototype.cleanUp = function () {\n this.hidden = false;\n };\n ResponsiveDropdownModalContent.prototype.ensureCloseButton = function () {\n var _this = this;\n if (!this.closeButton) {\n this.closeButton = Core_1.$$('button', {\n className: 'coveo-facet-modal-close-button',\n ariaLabel: this.closeButtonLabel\n }, SVGIcons_1.SVGIcons.icons.mainClear);\n this.closeButton.on('click', function () { return _this.close(); });\n this.element.prepend(this.closeButton.el);\n }\n };\n ResponsiveDropdownModalContent.prototype.ensureFocusTrap = function () {\n if (!this.focusTrap) {\n this.focusTrap = new FocusTrap_1.FocusTrap(this.element.el);\n }\n };\n ResponsiveDropdownModalContent.prototype.removeCloseButton = function () {\n if (this.closeButton) {\n this.closeButton.remove();\n this.closeButton = null;\n }\n };\n ResponsiveDropdownModalContent.prototype.removeFocusTrap = function () {\n if (this.focusTrap) {\n this.focusTrap.disable();\n this.focusTrap = null;\n }\n };\n return ResponsiveDropdownModalContent;\n}());\nexports.ResponsiveDropdownModalContent = ResponsiveDropdownModalContent;\n\n\n/***/ }),\n\n/***/ 533:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The names of the events that can be triggered by the [FacetsMobileMode]{@link FacetsMobileMode} component.\n */\nvar FacetsMobileModeEvents = /** @class */ (function () {\n function FacetsMobileModeEvents() {\n }\n /**\n * The name of the event that gets triggered when the facets pop-up (or modal) is opened in mobile mode.\n */\n FacetsMobileModeEvents.popupOpened = 'popupOpened';\n /**\n * The name of the event that gets triggered when the facets pop-up (or modal) is closed in mobile mode.\n */\n FacetsMobileModeEvents.popupClosed = 'popupClosed';\n return FacetsMobileModeEvents;\n}());\nexports.FacetsMobileModeEvents = FacetsMobileModeEvents;\n\n\n/***/ }),\n\n/***/ 563:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 564:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Strings_1 = __webpack_require__(6);\nvar SVGIcons_1 = __webpack_require__(12);\nvar Dom_1 = __webpack_require__(1);\nvar DynamicFacetHeaderButton_1 = __webpack_require__(497);\nvar SVGDom_1 = __webpack_require__(15);\nvar DynamicFacetHeaderCollapseToggle = /** @class */ (function () {\n function DynamicFacetHeaderCollapseToggle(options) {\n this.options = options;\n this.create();\n }\n DynamicFacetHeaderCollapseToggle.prototype.create = function () {\n var _this = this;\n var parent = Dom_1.$$('div');\n this.button = new DynamicFacetHeaderButton_1.DynamicFacetHeaderButton({\n label: Strings_1.l('CollapseFacet', this.options.title),\n iconSVG: SVGIcons_1.SVGIcons.icons.arrowUp,\n iconClassName: 'coveo-dynamic-facet-collapse-toggle-svg',\n className: 'coveo-dynamic-facet-header-collapse',\n shouldDisplay: true,\n action: function () { return _this.options.toggleCollapse(); }\n });\n parent.append(this.button.element);\n this.element = parent.el;\n };\n DynamicFacetHeaderCollapseToggle.prototype.toggleButton = function (isCollapsed) {\n var node = Dom_1.$$(this.button.element);\n var label = isCollapsed ? Strings_1.l('ExpandFacet', this.options.title) : Strings_1.l('CollapseFacet', this.options.title);\n var icon = isCollapsed ? SVGIcons_1.SVGIcons.icons.arrowDown : SVGIcons_1.SVGIcons.icons.arrowUp;\n node.setAttribute('aria-label', label);\n node.setAttribute('title', label);\n node.toggleClass('coveo-dynamic-facet-header-expand', isCollapsed);\n node.toggleClass('coveo-dynamic-facet-header-collapse', !isCollapsed);\n node.setHtml(icon);\n SVGDom_1.SVGDom.addClassToSVGInContainer(node.el, 'coveo-dynamic-facet-collapse-toggle-svg');\n };\n return DynamicFacetHeaderCollapseToggle;\n}());\nexports.DynamicFacetHeaderCollapseToggle = DynamicFacetHeaderCollapseToggle;\n\n\n/***/ }),\n\n/***/ 565:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TextInput_1 = __webpack_require__(55);\nvar Dom_1 = __webpack_require__(1);\nvar KeyboardUtils_1 = __webpack_require__(25);\nvar Utils_1 = __webpack_require__(4);\nvar ComboboxInput = /** @class */ (function () {\n function ComboboxInput(combobox) {\n this.combobox = combobox;\n this.inputOptions = {\n usePlaceholder: true,\n className: 'coveo-combobox-input',\n triggerOnChangeAsYouType: true,\n isRequired: false,\n icon: 'search'\n };\n this.create();\n this.element = this.textInput.getElement();\n this.inputElement = Dom_1.$$(this.element).find('input');\n this.addEventListeners();\n this.addAccessibilityAttributes();\n }\n Object.defineProperty(ComboboxInput.prototype, \"value\", {\n get: function () {\n return this.inputElement.value;\n },\n enumerable: true,\n configurable: true\n });\n ComboboxInput.prototype.create = function () {\n var _this = this;\n this.textInput = new TextInput_1.TextInput(function (inputInstance) { return _this.combobox.onInputChange(inputInstance.getValue()); }, this.combobox.options.placeholderText, this.inputOptions);\n };\n ComboboxInput.prototype.addEventListeners = function () {\n var _this = this;\n if (!this.combobox.options.clearOnBlur) {\n this.inputElement.addEventListener('focus', function () { return _this.combobox.onInputChange(_this.textInput.getValue()); });\n }\n this.combobox.element.addEventListener('focusout', function (e) { return _this.handleFocusOut(e); });\n this.combobox.element.addEventListener('keydown', function (e) { return _this.handleKeyboardDirection(e); });\n this.combobox.element.addEventListener('keyup', function (e) { return _this.handleKeyboardEnterEscape(e); });\n };\n ComboboxInput.prototype.addAccessibilityAttributes = function () {\n var listboxId = this.combobox.id + \"-listbox\";\n this.inputElement.setAttribute('role', 'combobox');\n this.inputElement.setAttribute('aria-owns', listboxId);\n this.inputElement.setAttribute('aria-haspopup', 'listbox');\n this.inputElement.setAttribute('aria-autocomplete', 'list');\n this.inputElement.setAttribute('id', this.combobox.id + \"-input\");\n this.inputElement.setAttribute('aria-label', this.combobox.options.label);\n this.updateAccessibilityAttributes({\n activeDescendant: '',\n expanded: false\n });\n };\n ComboboxInput.prototype.updateAccessibilityAttributes = function (attributes) {\n this.inputElement.setAttribute('aria-expanded', attributes.expanded ? 'true' : 'false');\n Utils_1.Utils.isEmptyString(attributes.activeDescendant)\n ? this.inputElement.removeAttribute('aria-activedescendant')\n : this.inputElement.setAttribute('aria-activedescendant', attributes.activeDescendant);\n };\n ComboboxInput.prototype.clearInput = function () {\n this.textInput.reset();\n };\n ComboboxInput.prototype.handleFocusOut = function (event) {\n var newTarget = event.relatedTarget;\n var focusInsideCombobox = this.combobox.element.contains(newTarget);\n if (focusInsideCombobox) {\n return;\n }\n var comboboxValuesHovered = Dom_1.$$(this.combobox.element).find('.coveo-combobox-values:hover');\n if (comboboxValuesHovered) {\n this.inputElement.focus();\n return;\n }\n this.combobox.onInputBlur();\n };\n ComboboxInput.prototype.handleKeyboardDirection = function (event) {\n switch (event.which) {\n case KeyboardUtils_1.KEYBOARD.DOWN_ARROW:\n event.preventDefault();\n this.combobox.values.focusNextValue();\n break;\n case KeyboardUtils_1.KEYBOARD.UP_ARROW:\n event.preventDefault();\n this.combobox.values.focusPreviousValue();\n break;\n case KeyboardUtils_1.KEYBOARD.HOME:\n event.preventDefault();\n this.combobox.values.focusFirstValue();\n break;\n case KeyboardUtils_1.KEYBOARD.END:\n event.preventDefault();\n this.combobox.values.focusLastValue();\n break;\n }\n };\n ComboboxInput.prototype.handleKeyboardEnterEscape = function (event) {\n switch (event.which) {\n case KeyboardUtils_1.KEYBOARD.ENTER:\n this.combobox.values.selectActiveValue();\n break;\n case KeyboardUtils_1.KEYBOARD.ESCAPE:\n if (Utils_1.Utils.isNonEmptyString(this.textInput.getValue())) {\n event.stopPropagation();\n }\n this.combobox.clearAll();\n break;\n }\n };\n return ComboboxInput;\n}());\nexports.ComboboxInput = ComboboxInput;\n\n\n/***/ }),\n\n/***/ 566:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dom_1 = __webpack_require__(1);\nvar underscore_1 = __webpack_require__(0);\nvar Strings_1 = __webpack_require__(6);\nvar underscore_2 = __webpack_require__(0);\nvar ComboboxValues = /** @class */ (function () {\n function ComboboxValues(combobox) {\n var _this = this;\n this.combobox = combobox;\n this.mouseIsOverValue = false;\n this.isRenderingNewValues = false;\n this.values = [];\n this.element = Dom_1.$$('ul', {\n id: this.combobox.id + \"-listbox\",\n role: 'listbox',\n className: 'coveo-combobox-values',\n ariaLabelledby: this.combobox.id + \"-input\"\n }).el;\n Dom_1.$$(this.element).hide();\n this.isScrollable = !!this.combobox.options.scrollable;\n this.isScrollable && this.element.addEventListener('scroll', function () { return _this.onScroll(); });\n }\n ComboboxValues.prototype.renderFromResponse = function (response) {\n this.isRenderingNewValues = true;\n this.clearValues();\n this.values = this.combobox.options.createValuesFromResponse(response);\n this.render();\n this.combobox.updateAriaLive();\n this.isRenderingNewValues = false;\n };\n ComboboxValues.prototype.render = function () {\n Dom_1.$$(this.element).show();\n if (!this.hasValues()) {\n return this.renderNoValuesFound();\n }\n this.renderValues();\n this.addEventListeners();\n this.updateAccessibilityAttributes();\n };\n ComboboxValues.prototype.renderValues = function () {\n var _this = this;\n var fragment = document.createDocumentFragment();\n this.values.forEach(function (value, index) {\n var elementWrapper = Dom_1.$$('li', { id: _this.combobox.id + \"-value-\" + index, className: 'coveo-combobox-value', role: 'option', tabindex: 0 }, value.element).el;\n _this.highlightCurrentQueryInSearchResults(value.element);\n value.element = elementWrapper;\n fragment.appendChild(value.element);\n });\n this.element.appendChild(fragment);\n };\n ComboboxValues.prototype.highlightCurrentQueryInSearchResults = function (searchResult) {\n if (this.combobox.options.highlightValueClassName) {\n var regex = new RegExp('(' + this.combobox.element.querySelector('input').value + ')', 'ig');\n var result = Dom_1.$$(searchResult).hasClass(this.combobox.options.highlightValueClassName)\n ? searchResult\n : Dom_1.$$(searchResult).find(\".\" + this.combobox.options.highlightValueClassName);\n if (result) {\n var text = underscore_2.escape(Dom_1.$$(result).text());\n result.innerHTML = text.replace(regex, '$1');\n }\n }\n };\n ComboboxValues.prototype.hasValues = function () {\n return !!this.numberOfValues;\n };\n Object.defineProperty(ComboboxValues.prototype, \"numberOfValues\", {\n get: function () {\n return this.values.length;\n },\n enumerable: true,\n configurable: true\n });\n ComboboxValues.prototype.renderNoValuesFound = function () {\n var noValuesFoundElement = Dom_1.$$('li', {\n role: 'option',\n className: 'coveo-combobox-value-not-found'\n }, Strings_1.l('NoValuesFound')).el;\n this.element.appendChild(noValuesFoundElement);\n };\n ComboboxValues.prototype.addEventListeners = function () {\n var _this = this;\n this.values.forEach(function (value) {\n Dom_1.$$(value.element).on('mouseenter', function () { return (_this.mouseIsOverValue = true); });\n Dom_1.$$(value.element).on('mouseleave', function () { return (_this.mouseIsOverValue = false); });\n Dom_1.$$(value.element).on('click', function (e) { return _this.onValueClick(e); });\n Dom_1.$$(value.element).on('focus', function () { return _this.setKeyboardActiveValue(value); });\n });\n };\n ComboboxValues.prototype.onValueClick = function (e) {\n var target = e.target;\n var targetElement = Dom_1.$$(target).hasClass('coveo-combobox-value') ? target : Dom_1.$$(target).parent('coveo-combobox-value');\n if (!targetElement) {\n return;\n }\n var targetId = targetElement.getAttribute('id');\n var value = underscore_1.find(this.values, function (_a) {\n var element = _a.element;\n return element.getAttribute('id') === targetId;\n });\n value && this.combobox.options.onSelectValue(value);\n this.combobox.clearAll();\n };\n ComboboxValues.prototype.updateAccessibilityAttributes = function () {\n var activeDescendant = this.keyboardActiveValue ? this.keyboardActiveValue.element.getAttribute('id') : '';\n this.combobox.updateAccessibilityAttributes({\n activeDescendant: activeDescendant,\n expanded: this.hasValues()\n });\n };\n ComboboxValues.prototype.clearValues = function () {\n this.mouseIsOverValue = false;\n this.resetKeyboardActiveValue();\n Dom_1.$$(this.element).empty();\n Dom_1.$$(this.element).hide();\n this.values = [];\n this.updateAccessibilityAttributes();\n };\n ComboboxValues.prototype.setKeyboardActiveValue = function (value) {\n this.resetKeyboardActiveValue();\n this.keyboardActiveValue = value;\n this.activateFocusOnValue(this.keyboardActiveValue);\n this.updateAccessibilityAttributes();\n };\n ComboboxValues.prototype.resetKeyboardActiveValue = function () {\n if (!this.keyboardActiveValue) {\n return;\n }\n this.deactivateFocusOnValue(this.keyboardActiveValue);\n this.keyboardActiveValue = null;\n };\n ComboboxValues.prototype.activateFocusOnValue = function (_a) {\n var element = _a.element;\n Dom_1.$$(element).addClass('coveo-focused');\n element.setAttribute('aria-selected', 'true');\n };\n ComboboxValues.prototype.deactivateFocusOnValue = function (_a) {\n var element = _a.element;\n Dom_1.$$(element).removeClass('coveo-focused');\n element.setAttribute('aria-selected', 'false');\n };\n ComboboxValues.prototype.selectActiveValue = function () {\n if (!this.keyboardActiveValue) {\n return;\n }\n this.combobox.options.onSelectValue(this.keyboardActiveValue);\n this.combobox.clearAll();\n };\n ComboboxValues.prototype.onScroll = function () {\n var scrollEndReached = this.element.scrollTop + this.element.clientHeight >= this.element.scrollHeight;\n if (scrollEndReached && this.combobox.options.scrollable.areMoreValuesAvailable()) {\n this.combobox.onScrollEndReached();\n }\n };\n ComboboxValues.prototype.resetScroll = function () {\n if (!this.isScrollable) {\n return;\n }\n this.element.style.maxHeight = this.combobox.options.scrollable.maxDropdownHeight + \"px\";\n this.element.scrollTop = 0;\n };\n ComboboxValues.prototype.focusFirstValue = function () {\n if (!this.hasValues()) {\n return;\n }\n this.firstValue.element.focus();\n };\n ComboboxValues.prototype.focusLastValue = function () {\n if (!this.hasValues()) {\n return;\n }\n this.lastValue.element.focus();\n };\n ComboboxValues.prototype.focusNextValue = function () {\n if (!this.hasValues()) {\n return;\n }\n var nextActiveValue = this.nextOrFirstValue;\n nextActiveValue.element.focus();\n };\n ComboboxValues.prototype.focusPreviousValue = function () {\n if (!this.hasValues()) {\n return;\n }\n var previousActiveValue = this.previousOrLastValue;\n previousActiveValue.element.focus();\n };\n Object.defineProperty(ComboboxValues.prototype, \"nextOrFirstValue\", {\n get: function () {\n if (!this.keyboardActiveValue) {\n return this.firstValue;\n }\n var nextValueIndex = (this.values.indexOf(this.keyboardActiveValue) + 1) % this.numberOfValues;\n return this.values[nextValueIndex];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ComboboxValues.prototype, \"firstValue\", {\n get: function () {\n return this.values[0];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ComboboxValues.prototype, \"previousOrLastValue\", {\n get: function () {\n if (!this.keyboardActiveValue) {\n return this.lastValue;\n }\n var previousValueIndex = this.values.indexOf(this.keyboardActiveValue) - 1;\n return previousValueIndex >= 0 ? this.values[previousValueIndex] : this.values[this.numberOfValues - 1];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ComboboxValues.prototype, \"lastValue\", {\n get: function () {\n var lastValueIndex = this.numberOfValues - 1;\n return this.values[lastValueIndex];\n },\n enumerable: true,\n configurable: true\n });\n ComboboxValues.prototype.saveFocusedValue = function () {\n if (!this.keyboardActiveValue) {\n this.focusedValueId = null;\n return;\n }\n this.focusedValueId = this.keyboardActiveValue.element.id;\n };\n ComboboxValues.prototype.restoreFocusedValue = function () {\n if (!this.focusedValueId) {\n return;\n }\n var element = Dom_1.$$(this.element).find(\"#\" + this.focusedValueId);\n element.focus();\n this.focusedValueId = null;\n };\n return ComboboxValues;\n}());\nexports.ComboboxValues = ComboboxValues;\n\n\n/***/ }),\n\n/***/ 567:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 576:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ResponsiveFacetColumn_1 = __webpack_require__(211);\nvar DynamicFacet_1 = __webpack_require__(137);\nvar ResponsiveDynamicFacets = /** @class */ (function (_super) {\n __extends(ResponsiveDynamicFacets, _super);\n function ResponsiveDynamicFacets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ResponsiveDynamicFacets.init = function (root, component, options) {\n ResponsiveFacetColumn_1.ResponsiveFacetColumn.init(ResponsiveDynamicFacets, root, component, options, DynamicFacet_1.DynamicFacet.ID);\n };\n return ResponsiveDynamicFacets;\n}(ResponsiveFacetColumn_1.ResponsiveFacetColumn));\nexports.ResponsiveDynamicFacets = ResponsiveDynamicFacets;\n\n\n/***/ }),\n\n/***/ 577:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(505);\nvar Dom_1 = __webpack_require__(1);\nvar Strings_1 = __webpack_require__(6);\nvar SVGIcons_1 = __webpack_require__(12);\nvar AnalyticsActionListMeta_1 = __webpack_require__(10);\nvar underscore_1 = __webpack_require__(0);\nvar DynamicFacetBreadcrumbs = /** @class */ (function () {\n function DynamicFacetBreadcrumbs(facet) {\n this.facet = facet;\n this.create();\n }\n DynamicFacetBreadcrumbs.prototype.create = function () {\n this.element = Dom_1.$$('ul', { className: 'coveo-dynamic-facet-breadcrumb coveo-breadcrumb-item' }).el;\n this.createAndAppendTitle();\n var activeFacetValues = this.facet.values.activeValues;\n var breadcrumbFacetValues = activeFacetValues.slice(0, this.facet.options.numberOfValuesInBreadcrumb);\n var collapsedFacetValues = activeFacetValues.slice(this.facet.options.numberOfValuesInBreadcrumb);\n this.createAndAppendBreadcrumbValues(breadcrumbFacetValues);\n if (collapsedFacetValues.length) {\n this.createAndAppendCollapsedBreadcrumbs(collapsedFacetValues);\n }\n };\n DynamicFacetBreadcrumbs.prototype.createAndAppendTitle = function () {\n var titleElement = Dom_1.$$('h3', { className: 'coveo-dynamic-facet-breadcrumb-title' }, this.facet.options.title + \":\").el;\n this.element.appendChild(titleElement);\n };\n DynamicFacetBreadcrumbs.prototype.createAndAppendBreadcrumbValues = function (facetValues) {\n var _this = this;\n facetValues.forEach(function (facetValue) { return _this.createAndAppendBreadcrumbValue(facetValue); });\n };\n DynamicFacetBreadcrumbs.prototype.createAndAppendBreadcrumbValue = function (facetValue) {\n var _this = this;\n var listContainer = Dom_1.$$('li', { className: 'coveo-dynamic-facet-breadcrumb-value-list-item' }).el;\n var valueElement = Dom_1.$$('button', {\n className: 'coveo-dynamic-facet-breadcrumb-value',\n ariaLabel: Strings_1.l('RemoveFilterOn', facetValue.displayValue)\n }, underscore_1.escape(facetValue.displayValue)).el;\n var clearElement = Dom_1.$$('span', { className: 'coveo-dynamic-facet-breadcrumb-value-clear' }, SVGIcons_1.SVGIcons.icons.mainClear).el;\n valueElement.appendChild(clearElement);\n Dom_1.$$(valueElement).on('click', function () { return _this.valueSelectAction(facetValue); });\n listContainer.appendChild(valueElement);\n this.element.appendChild(listContainer);\n };\n DynamicFacetBreadcrumbs.prototype.valueSelectAction = function (facetValue) {\n var _this = this;\n this.facet.deselectValue(facetValue.value);\n this.facet.enablePreventAutoSelectionFlag();\n this.facet.triggerNewQuery(function () { return _this.logActionToAnalytics(); });\n };\n DynamicFacetBreadcrumbs.prototype.logActionToAnalytics = function () {\n this.facet.logAnalyticsEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.breadcrumbFacet, this.facet.basicAnalyticsFacetMeta);\n };\n DynamicFacetBreadcrumbs.prototype.createAndAppendCollapsedBreadcrumbs = function (facetValues) {\n var _this = this;\n var label = Strings_1.l('NMore', \"\" + facetValues.length);\n var title = facetValues.map(function (_a) {\n var value = _a.value;\n return value;\n }).join('\\n');\n var collapsedElement = Dom_1.$$('button', {\n className: 'coveo-dynamic-facet-breadcrumb-collapse',\n title: title\n }, label).el;\n Dom_1.$$(collapsedElement).on('click', function () {\n Dom_1.$$(collapsedElement).remove();\n _this.createAndAppendBreadcrumbValues(facetValues);\n });\n this.element.appendChild(collapsedElement);\n };\n return DynamicFacetBreadcrumbs;\n}());\nexports.DynamicFacetBreadcrumbs = DynamicFacetBreadcrumbs;\n\n\n/***/ }),\n\n/***/ 578:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 579:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Combobox_1 = __webpack_require__(508);\nvar Strings_1 = __webpack_require__(6);\nvar FacetSearchController_1 = __webpack_require__(580);\nvar DynamicFacetValue_1 = __webpack_require__(222);\nvar FacetValueState_1 = __webpack_require__(70);\nvar DynamicFacetSearchValueRenderer_1 = __webpack_require__(581);\n__webpack_require__(509);\nvar FacetUtils_1 = __webpack_require__(39);\nvar DynamicFacetSearch = /** @class */ (function () {\n function DynamicFacetSearch(facet) {\n var _this = this;\n this.facet = facet;\n this.facetSearchController = new FacetSearchController_1.FacetSearchController(this.facet);\n this.combobox = new Combobox_1.Combobox({\n label: Strings_1.l('SearchFacetResults', this.facet.options.title),\n ariaLive: this.facet.searchInterface.ariaLive,\n requestValues: function (terms) { return _this.facetSearchController.search(terms); },\n createValuesFromResponse: function (response) { return _this.createValuesFromResponse(response); },\n onSelectValue: this.onSelectValue,\n placeholderText: Strings_1.l('Search'),\n wrapperClassName: 'coveo-dynamic-facet-search',\n clearOnBlur: true,\n scrollable: {\n requestMoreValues: function () { return _this.facetSearchController.fetchMoreResults(); },\n areMoreValuesAvailable: function () { return _this.facetSearchController.moreValuesAvailable; },\n maxDropdownHeight: 250\n },\n highlightValueClassName: 'coveo-checkbox-span-label'\n });\n this.element = this.combobox.element;\n }\n DynamicFacetSearch.prototype.getDisplayValue = function (value) {\n return FacetUtils_1.FacetUtils.getDisplayValueFromValueCaption(value, this.facet.options.field, this.facet.options.valueCaption);\n };\n DynamicFacetSearch.prototype.createValuesFromResponse = function (response) {\n var _this = this;\n return response.values.map(function (value, index) {\n var facetValue = new DynamicFacetValue_1.DynamicFacetValue({\n value: value.rawValue,\n // TODO: remove when https://coveord.atlassian.net/browse/SEARCHAPI-4958 is fixed\n displayValue: _this.getDisplayValue(value.displayValue),\n numberOfResults: value.count,\n state: FacetValueState_1.FacetValueState.idle,\n position: index + 1\n }, _this.facet, DynamicFacetSearchValueRenderer_1.DynamicFacetSearchValueRenderer);\n return {\n value: facetValue,\n element: facetValue.renderedElement\n };\n });\n };\n DynamicFacetSearch.prototype.onSelectValue = function (_a) {\n var value = _a.value;\n value.renderer.selectAction();\n };\n return DynamicFacetSearch;\n}());\nexports.DynamicFacetSearch = DynamicFacetSearch;\n\n\n/***/ }),\n\n/***/ 580:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar FileTypes_1 = __webpack_require__(115);\nvar QueryUtils_1 = __webpack_require__(21);\nvar DateUtils_1 = __webpack_require__(32);\nvar FacetSearchController = /** @class */ (function () {\n function FacetSearchController(facet) {\n this.facet = facet;\n this.terms = '';\n this.pageCount = 1;\n this.numberOfValuesMultiplier = 3;\n this.moreValuesAvailable = true;\n }\n FacetSearchController.prototype.getMonthsValueCaptions = function () {\n var monthsValueCaptions = {};\n for (var month = 1; month <= 12; month++) {\n var key = (\"0\" + month).substr(-2);\n monthsValueCaptions[key] = DateUtils_1.DateUtils.monthToString(month - 1);\n }\n return monthsValueCaptions;\n };\n FacetSearchController.prototype.addTypesCaptionsIfNecessary = function () {\n var field = this.facet.options.field.toLowerCase();\n var isFileType = QueryUtils_1.QueryUtils.isStratusAgnosticField(field, '@filetype');\n var isObjectType = QueryUtils_1.QueryUtils.isStratusAgnosticField(field, '@objecttype');\n var isMonth = QueryUtils_1.QueryUtils.isStratusAgnosticField(field, '@month');\n if (isFileType || isObjectType) {\n return FileTypes_1.FileTypes.getFileTypeCaptions();\n }\n if (isMonth) {\n return this.getMonthsValueCaptions();\n }\n return {};\n };\n Object.defineProperty(FacetSearchController.prototype, \"captions\", {\n get: function () {\n return __assign({}, this.addTypesCaptionsIfNecessary(), this.facet.options.valueCaption);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FacetSearchController.prototype, \"numberOfValues\", {\n get: function () {\n return this.facet.options.numberOfValues * this.numberOfValuesMultiplier * this.pageCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FacetSearchController.prototype, \"request\", {\n get: function () {\n var optionalLeadingWildcard = this.facet.options.useLeadingWildcardInFacetSearch ? '*' : '';\n return {\n field: this.facet.fieldName,\n numberOfValues: this.numberOfValues,\n ignoreValues: this.facet.values.activeValues.map(function (value) { return value.value; }),\n captions: this.captions,\n searchContext: this.facet.queryController.getLastQuery(),\n query: \"\" + optionalLeadingWildcard + this.terms + \"*\"\n };\n },\n enumerable: true,\n configurable: true\n });\n FacetSearchController.prototype.triggerRequest = function () {\n return __awaiter(this, void 0, void 0, function () {\n var response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.facet.queryController.getEndpoint().facetSearch(this.request)];\n case 1:\n response = _a.sent();\n this.moreValuesAvailable = response.moreValuesAvailable;\n return [2 /*return*/, response];\n }\n });\n });\n };\n FacetSearchController.prototype.search = function (terms) {\n this.terms = terms;\n this.pageCount = 1;\n return this.triggerRequest();\n };\n FacetSearchController.prototype.fetchMoreResults = function () {\n this.pageCount++;\n return this.triggerRequest();\n };\n return FacetSearchController;\n}());\nexports.FacetSearchController = FacetSearchController;\n\n\n/***/ }),\n\n/***/ 581:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dom_1 = __webpack_require__(1);\nvar DynamicFacetValueCheckbox_1 = __webpack_require__(510);\nvar DynamicFacetSearchValueRenderer = /** @class */ (function () {\n function DynamicFacetSearchValueRenderer(facetValue, facet) {\n this.facetValue = facetValue;\n this.facet = facet;\n }\n DynamicFacetSearchValueRenderer.prototype.render = function () {\n this.dom = Dom_1.$$('div', {\n className: 'coveo-dynamic-facet-value',\n dataValue: this.facetValue.value\n });\n this.renderCheckbox();\n return this.dom.el;\n };\n DynamicFacetSearchValueRenderer.prototype.renderCheckbox = function () {\n this.valueCheckbox = new DynamicFacetValueCheckbox_1.DynamicFacetValueCheckbox(this.facetValue);\n Dom_1.$$(this.valueCheckbox.element).find('button').setAttribute('tabindex', '-1');\n this.dom.append(this.valueCheckbox.element);\n };\n DynamicFacetSearchValueRenderer.prototype.selectAction = function () {\n var _this = this;\n this.facet.enableFreezeFacetOrderFlag();\n this.facet.toggleSelectValue(this.facetValue.value);\n this.facetValue.select();\n this.facet.scrollToTop();\n this.facet.triggerNewQuery(function () { return _this.facetValue.logSelectActionToAnalytics(); });\n };\n return DynamicFacetSearchValueRenderer;\n}());\nexports.DynamicFacetSearchValueRenderer = DynamicFacetSearchValueRenderer;\n\n\n/***/ }),\n\n/***/ 582:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar FacetUtils_1 = __webpack_require__(39);\nvar DynamicFacetValue_1 = __webpack_require__(222);\nvar FacetValueState_1 = __webpack_require__(70);\nvar DynamicFacetValueRenderer_1 = __webpack_require__(513);\nvar DynamicFacetValueCreator = /** @class */ (function () {\n function DynamicFacetValueCreator(facet) {\n this.facet = facet;\n }\n DynamicFacetValueCreator.prototype.getDisplayValue = function (value) {\n return FacetUtils_1.FacetUtils.getDisplayValueFromValueCaption(value, this.facet.options.field, this.facet.options.valueCaption);\n };\n DynamicFacetValueCreator.prototype.getDefaultValues = function () {\n return [];\n };\n DynamicFacetValueCreator.prototype.createFromResponse = function (facetValue, index) {\n return new DynamicFacetValue_1.DynamicFacetValue({\n value: facetValue.value,\n displayValue: this.getDisplayValue(facetValue.value),\n numberOfResults: facetValue.numberOfResults,\n state: facetValue.state,\n position: index + 1\n }, this.facet, DynamicFacetValueRenderer_1.DynamicFacetValueRenderer);\n };\n DynamicFacetValueCreator.prototype.createFromValue = function (value) {\n var position = this.facet.values.allFacetValues.length + 1;\n var state = FacetValueState_1.FacetValueState.idle;\n var displayValue = this.getDisplayValue(value);\n return new DynamicFacetValue_1.DynamicFacetValue({ value: value, displayValue: displayValue, state: state, numberOfResults: 0, position: position }, this.facet, DynamicFacetValueRenderer_1.DynamicFacetValueRenderer);\n };\n return DynamicFacetValueCreator;\n}());\nexports.DynamicFacetValueCreator = DynamicFacetValueCreator;\n\n\n/***/ }),\n\n/***/ 70:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The allowed states of a facet value in a Search API facet\n * [request]{@link IFacetRequestValue.state} or\n * [response]{@link IFacetResponseValue.state}.\n */\nvar FacetValueState;\n(function (FacetValueState) {\n /**\n * The facet value is not currently selected or excluded in the search\n * interface.\n */\n FacetValueState[\"idle\"] = \"idle\";\n /**\n * The facet value is currently selected in the search interface.\n */\n FacetValueState[\"selected\"] = \"selected\";\n})(FacetValueState = exports.FacetValueState || (exports.FacetValueState = {}));\n\n\n/***/ }),\n\n/***/ 83:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ComponentOptions_1 = __webpack_require__(8);\n/**\n * ResponsiveFacets options\n */\nexports.ResponsiveFacetOptions = {\n /**\n * Specifies whether to enable *responsive mode* for facets. Setting this options to `false` on any `Facet`, or\n * [`FacetSlider`]{@link FacetSlider} component in a search interface disables responsive mode for all other facets\n * in the search interface.\n *\n * Responsive mode displays all facets under a single dropdown button whenever the width of the HTML element which\n * the search interface is bound to reaches or falls behind a certain threshold (see\n * {@link SearchInterface.responsiveComponents}).\n *\n * See also the [`dropdownHeaderLabel`]{@link Facet.options.dropdownHeaderLabel} option.\n *\n * Default value is `true`.\n */\n enableResponsiveMode: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'ResponsiveOptions' }),\n responsiveBreakpoint: ComponentOptions_1.ComponentOptions.buildNumberOption({\n deprecated: 'This option is exposed for legacy reasons. It is not recommended to use this option. Instead, use `SearchInterface.options.responsiveMediumBreakpoint` options exposed on the `SearchInterface`.'\n }),\n /**\n * If the [`enableResponsiveMode`]{@link Facet.options.enableResponsiveMode} option is `true` for all facets and\n * {@link FacetSlider.options.enableResponsiveMode} is also `true` for all sliders, specifies the label of the\n * dropdown button that allows to display the facets when in responsive mode.\n *\n * If more than one `Facet` or {@link FacetSlider} component in the search interface specifies a value for this\n * option, the framework uses the first occurrence of the option.\n *\n * Default value is `Filters`.\n */\n dropdownHeaderLabel: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ section: 'ResponsiveOptions' })\n};\n\n\n/***/ }),\n\n/***/ 89:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(523);\n__webpack_require__(524);\n__webpack_require__(525);\nvar underscore_1 = __webpack_require__(0);\nvar QueryEvents_1 = __webpack_require__(11);\nvar ResultLayoutEvents_1 = __webpack_require__(129);\nvar ResultListEvents_1 = __webpack_require__(29);\nvar GlobalExports_1 = __webpack_require__(3);\nvar Assert_1 = __webpack_require__(5);\nvar Defer_1 = __webpack_require__(31);\nvar Model_1 = __webpack_require__(18);\nvar QueryStateModel_1 = __webpack_require__(13);\nvar DeviceUtils_1 = __webpack_require__(24);\nvar Dom_1 = __webpack_require__(1);\nvar DomUtils_1 = __webpack_require__(93);\nvar Utils_1 = __webpack_require__(4);\nvar AnalyticsActionListMeta_1 = __webpack_require__(10);\nvar Component_1 = __webpack_require__(7);\nvar ComponentOptions_1 = __webpack_require__(8);\nvar Initialization_1 = __webpack_require__(2);\nvar InitializationPlaceholder_1 = __webpack_require__(176);\nvar TemplateComponentOptions_1 = __webpack_require__(61);\nvar ResponsiveDefaultResultTemplate_1 = __webpack_require__(526);\nvar CoreHelpers_1 = __webpack_require__(466);\nvar DefaultRecommendationTemplate_1 = __webpack_require__(463);\nvar DefaultResultTemplate_1 = __webpack_require__(117);\nvar TableTemplate_1 = __webpack_require__(462);\nvar TemplateCache_1 = __webpack_require__(66);\nvar TemplateList_1 = __webpack_require__(92);\nvar ResultContainer_1 = __webpack_require__(527);\nvar ResultListCardRenderer_1 = __webpack_require__(528);\nvar ResultListRenderer_1 = __webpack_require__(210);\nvar ResultListTableRenderer_1 = __webpack_require__(529);\nvar ResultListUtils_1 = __webpack_require__(112);\nvar TemplateToHtml_1 = __webpack_require__(464);\nCoreHelpers_1.CoreHelpers.exportAllHelpersGlobally(window['Coveo']);\n/**\n * The `ResultList` component is responsible for displaying query results by applying one or several result templates\n * (see [Result Templates](https://docs.coveo.com/en/413/)).\n *\n * It is possible to include multiple `ResultList` components along with a single `ResultLayout`\n * component in a search page to provide different result layouts (see\n * [Result Layouts](https://docs.coveo.com/en/360/)).\n *\n * This component supports infinite scrolling (see the\n * [`enableInfiniteScroll`]{@link ResultList.options.enableInfiniteScroll} option).\n */\nvar ResultList = /** @class */ (function (_super) {\n __extends(ResultList, _super);\n /**\n * Creates a new `ResultList` component. Binds various event related to queries (e.g., on querySuccess ->\n * renderResults). Binds scroll event if the [`enableInfiniteScroll`]{@link ResultList.options.enableInfiniteScroll}\n * option is `true`.\n * @param element The HTMLElement on which to instantiate the component.\n * @param options The options for the `ResultList` component.\n * @param bindings The bindings that the component requires to function normally. If not set, these will be\n * automatically resolved (with a slower execution time).\n * @param elementClassId The class that this component should instantiate. Components that extend the base ResultList\n * use this. Default value is `CoveoResultList`.\n */\n function ResultList(element, options, bindings, elementClassId) {\n if (elementClassId === void 0) { elementClassId = ResultList.ID; }\n var _this = _super.call(this, element, elementClassId, bindings) || this;\n _this.element = element;\n _this.options = options;\n _this.bindings = bindings;\n _this.currentlyDisplayedResults = [];\n _this.reachedTheEndOfResults = false;\n _this.disableLayoutChange = false;\n // This variable serves to block some setup where the framework fails to correctly identify the \"real\" scrolling container.\n // Since it's not technically feasible to correctly identify the scrolling container in every possible scenario without some very complex logic, we instead try to add some kind of mechanism to\n // block runaway requests where UI will keep asking more results in the index, eventually bringing the browser to it's knee.\n // Those successive request are needed in \"displayMoreResults\" to ensure we fill the scrolling container correctly.\n // Since the container is not identified correctly, it is never \"full\", so we keep asking for more.\n // It is reset every time the user actually scroll the container manually.\n _this.successiveScrollCount = 0;\n _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultList, options);\n Assert_1.Assert.exists(element);\n Assert_1.Assert.exists(_this.options);\n Assert_1.Assert.exists(_this.options.resultTemplate);\n Assert_1.Assert.exists(_this.options.infiniteScrollContainer);\n _this.showOrHideElementsDependingOnState(false, false);\n _this.addListeners();\n _this.resultContainer = _this.initResultContainer();\n Assert_1.Assert.exists(_this.options.resultsContainer);\n _this.initWaitAnimationContainer();\n Assert_1.Assert.exists(_this.options.waitAnimationContainer);\n _this.setupTemplatesVersusLayouts();\n Dom_1.$$(_this.root).on(ResultLayoutEvents_1.ResultLayoutEvents.populateResultLayout, function (e, args) {\n return args.layouts.push(_this.options.layout);\n });\n _this.setupRenderer();\n _this.makeElementFocusable();\n _this.ensureHasId();\n return _this;\n }\n ResultList.getDefaultTemplate = function (e) {\n var template = ResultList.loadTemplatesFromCache();\n if (template != null) {\n return template;\n }\n var component = Component_1.Component.get(e);\n if (Coveo['Recommendation'] && component.searchInterface instanceof Coveo['Recommendation']) {\n return new DefaultRecommendationTemplate_1.DefaultRecommendationTemplate();\n }\n return new DefaultResultTemplate_1.DefaultResultTemplate();\n };\n ResultList.loadTemplatesFromCache = function () {\n var pageTemplateNames = TemplateCache_1.TemplateCache.getResultListTemplateNames();\n if (pageTemplateNames.length > 0) {\n return new TemplateList_1.TemplateList(underscore_1.compact(underscore_1.map(pageTemplateNames, function (templateName) { return TemplateCache_1.TemplateCache.getTemplate(templateName); })));\n }\n return null;\n };\n ResultList.prototype.addListeners = function () {\n var _this = this;\n this.bind.onRootElement(QueryEvents_1.QueryEvents.newQuery, function (args) { return _this.handleNewQuery(); });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) {\n return _this.handleBuildingQuery(args);\n });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) {\n return _this.handleQuerySuccess(args);\n });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.duringQuery, function (args) { return _this.handleDuringQuery(); });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function (args) { return _this.handleQueryError(); });\n Dom_1.$$(this.root).on(ResultListEvents_1.ResultListEvents.changeLayout, function (e, args) { return _this.handleChangeLayout(args); });\n if (this.options.enableInfiniteScroll) {\n this.addInfiniteScrollListeners();\n }\n else {\n this.addPagerListeners();\n }\n };\n ResultList.prototype.addInfiniteScrollListeners = function () {\n var _this = this;\n this.bind.on(this.options.infiniteScrollContainer, 'scroll', function () {\n _this.successiveScrollCount = 0;\n _this.handleScrollOfResultList();\n });\n this.bind.onRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function () {\n setTimeout(function () {\n _this.scrollToTopIfEnabled();\n }, 0);\n });\n };\n ResultList.prototype.addPagerListeners = function () {\n var _this = this;\n this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.FIRST, function () {\n _this.bind.oneRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function () {\n setTimeout(function () {\n _this.scrollToTopIfEnabled();\n }, 0);\n });\n });\n };\n /**\n * Get the fields needed to be automatically included in the query for this result list.\n * @returns {string[]}\n */\n ResultList.prototype.getAutoSelectedFieldsToInclude = function () {\n return underscore_1.chain(this.options.resultTemplate.getFields()).concat(this.getMinimalFieldsToInclude()).compact().unique().value();\n };\n ResultList.prototype.setupTemplatesVersusLayouts = function () {\n var _this = this;\n var layoutClassToAdd = \"coveo-\" + this.options.layout + \"-layout-container\";\n this.resultContainer.addClass(layoutClassToAdd);\n if (this.options.layout === 'table') {\n this.options.resultTemplate = new TableTemplate_1.TableTemplate(this.options.resultTemplate.templates || []);\n }\n // A TemplateList is the scenario where the result template are directly embedded inside the ResultList\n // This is the typical scenario when a page gets created by the interface editor, for example.\n // In that case, we try to stick closely that what is actually configured inside the page, and do no \"special magic\".\n // Stick to the \"hardcoded\" configuration present in the page.\n // We only add the correct layout options if it has not been set manually.\n if (this.options.resultTemplate instanceof TemplateList_1.TemplateList) {\n underscore_1.each(this.options.resultTemplate.templates, function (tmpl) {\n if (!tmpl.layout) {\n tmpl.layout = _this.options.layout;\n }\n });\n }\n else if (this.options.resultTemplate instanceof DefaultResultTemplate_1.DefaultResultTemplate && this.options.layout == 'list') {\n ResponsiveDefaultResultTemplate_1.ResponsiveDefaultResultTemplate.init(this.root, this, {});\n }\n };\n /**\n * Empties the current result list content and appends the given array of HTMLElement.\n *\n * Can append to existing elements in the result list, or replace them.\n *\n * Triggers the `newResultsDisplayed` and `newResultDisplayed` events.\n * @param resultsElement\n * @param append\n */\n ResultList.prototype.renderResults = function (resultElements, append) {\n var _this = this;\n if (append === void 0) { append = false; }\n if (!append) {\n this.resultContainer.empty();\n }\n return this.renderer\n .renderResults(resultElements, append, this.triggerNewResultDisplayed.bind(this))\n .then(function () { return _this.triggerNewResultsDisplayed(); });\n };\n /**\n * Builds and returns an array of HTMLElement with the given result set.\n * @param results the result set to build an array of HTMLElement from.\n */\n ResultList.prototype.buildResults = function (results) {\n var layout = this.options.layout;\n return this.templateToHtml.buildResults(results, layout, this.currentlyDisplayedResults);\n };\n /**\n * Builds and returns an HTMLElement for the given result.\n * @param result the result to build an HTMLElement from.\n * @returns {HTMLElement}\n */\n ResultList.prototype.buildResult = function (result) {\n var layout = this.options.layout;\n return this.templateToHtml.buildResult(result, layout, this.currentlyDisplayedResults);\n };\n /**\n * Executes a query to fetch new results. After the query returns, renders the new results.\n *\n * Asserts that there are more results to display by verifying whether the last query has returned as many results as\n * requested.\n *\n * Asserts that the `ResultList` is not currently fetching results.\n * @param count The number of results to fetch and display.\n */\n ResultList.prototype.displayMoreResults = function (count) {\n Assert_1.Assert.isLargerOrEqualsThan(1, count);\n if (this.isCurrentlyFetchingMoreResults()) {\n this.logger.warn(\"Ignoring request to display more results since we're already doing so\");\n return;\n }\n if (!this.hasPotentiallyMoreResultsToDisplay()) {\n this.logger.warn(\"Ignoring request to display more results since we know there aren't more to display\");\n return;\n }\n if (this.options.enableInfiniteScrollWaitingAnimation) {\n this.showWaitingAnimationForInfiniteScrolling();\n }\n return this.fetchAndRenderMoreResults(count);\n };\n Object.defineProperty(ResultList.prototype, \"templateToHtml\", {\n get: function () {\n var templateToHtmlArgs = {\n resultTemplate: this.options.resultTemplate,\n searchInterface: this.searchInterface,\n queryStateModel: this.queryStateModel\n };\n return new TemplateToHtml_1.TemplateToHtml(templateToHtmlArgs);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the list of currently displayed result.\n * @returns {IQueryResult[]}\n */\n ResultList.prototype.getDisplayedResults = function () {\n return this.currentlyDisplayedResults;\n };\n /**\n * Gets the list of currently displayed result HTMLElement.\n * @returns {HTMLElement[]}\n */\n ResultList.prototype.getDisplayedResultsElements = function () {\n return this.resultContainer.getResultElements();\n };\n ResultList.prototype.enable = function () {\n this.disableLayoutChange = false;\n if (this.resultLayoutSelectors.length > 0) {\n this.enableBasedOnActiveLayouts();\n }\n else {\n _super.prototype.enable.call(this);\n Dom_1.$$(this.element).removeClass('coveo-hidden');\n }\n };\n ResultList.prototype.disable = function () {\n var _this = this;\n _super.prototype.disable.call(this);\n var otherLayoutsStillActive = underscore_1.map(this.otherResultLists, function (otherResultList) { return otherResultList.options.layout; });\n if (!underscore_1.contains(otherLayoutsStillActive, this.options.layout) && !this.disableLayoutChange) {\n underscore_1.each(this.resultLayoutSelectors, function (resultLayoutSelector) {\n resultLayoutSelector.disableLayouts([_this.options.layout]);\n });\n }\n this.disableLayoutChange = false;\n Dom_1.$$(this.element).addClass('coveo-hidden');\n };\n ResultList.prototype.autoCreateComponentsInsideResult = function (element, result) {\n return this.templateToHtml.autoCreateComponentsInsideResult(element, result);\n };\n ResultList.prototype.triggerNewResultDisplayed = function (result, resultElement) {\n var args = {\n result: result,\n item: resultElement\n };\n Dom_1.$$(this.element).trigger(ResultListEvents_1.ResultListEvents.newResultDisplayed, args);\n };\n ResultList.prototype.triggerNewResultsDisplayed = function () {\n var args = {\n isInfiniteScrollEnabled: this.options.enableInfiniteScroll\n };\n Dom_1.$$(this.element).trigger(ResultListEvents_1.ResultListEvents.newResultsDisplayed, args);\n };\n ResultList.prototype.fetchAndRenderMoreResults = function (count) {\n return __awaiter(this, void 0, void 0, function () {\n var data, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.fetchingMoreResults = this.queryController.fetchMore(count);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this.fetchingMoreResults];\n case 2:\n data = _a.sent();\n Assert_1.Assert.exists(data);\n this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.pagerScrolling, {}, this.element);\n this.reachedTheEndOfResults = count > data.results.length;\n this.renderNewResults(data);\n this.resetStateAfterFetchingMoreResults();\n return [2 /*return*/, data];\n case 3:\n e_1 = _a.sent();\n this.resetStateAfterFetchingMoreResults();\n return [2 /*return*/, Promise.reject(e_1)];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n ResultList.prototype.renderNewResults = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var elements, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.buildResults(data)];\n case 1:\n elements = _b.sent();\n this.renderResults(elements, true);\n (_a = this.currentlyDisplayedResults).push.apply(_a, data.results);\n this.triggerNewResultsDisplayed();\n return [2 /*return*/];\n }\n });\n });\n };\n ResultList.prototype.resetStateAfterFetchingMoreResults = function () {\n var _this = this;\n this.hideWaitingAnimationForInfiniteScrolling();\n this.fetchingMoreResults = undefined;\n Defer_1.Defer.defer(function () {\n _this.successiveScrollCount++;\n if (_this.successiveScrollCount <= ResultList.MAX_AMOUNT_OF_SUCESSIVE_REQUESTS) {\n _this.handleScrollOfResultList();\n }\n else {\n _this.logger.info(\"Result list has triggered 5 consecutive queries to try and fill up the scrolling container, but it is still unable to do so.\\n Try explicitly setting the 'data-infinite-scroll-container-selector' option on the result list. See: https://coveo.github.io/search-ui/components/resultlist.html#options.infinitescrollcontainer\");\n }\n });\n };\n ResultList.prototype.handleDuringQuery = function () {\n this.logger.trace('Emptying the result container');\n this.cancelFetchingMoreResultsIfNeeded();\n this.showWaitingAnimation();\n this.showOrHideElementsDependingOnState(false, false);\n };\n ResultList.prototype.handleQueryError = function () {\n this.hideWaitingAnimation();\n this.resultContainer.empty();\n this.currentlyDisplayedResults = [];\n this.reachedTheEndOfResults = true;\n };\n ResultList.prototype.handleQuerySuccess = function (data) {\n var _this = this;\n Assert_1.Assert.exists(data);\n Assert_1.Assert.exists(data.results);\n var results = data.results;\n this.logger.trace('Received query results from new query', results);\n this.hideWaitingAnimation();\n ResultList.resultCurrentlyBeingRendered = undefined;\n this.reachedTheEndOfResults = data.query.numberOfResults > data.results.results.length;\n this.currentlyDisplayedResults = [];\n this.buildResults(data.results).then(function (elements) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.renderResults(elements)];\n case 1:\n _a.sent();\n this.showOrHideElementsDependingOnState(true, this.currentlyDisplayedResults.length != 0);\n if (DeviceUtils_1.DeviceUtils.isMobileDevice() && this.options.mobileScrollContainer != undefined) {\n this.options.mobileScrollContainer.scrollTop = 0;\n }\n if (this.options.enableInfiniteScroll && results.results.length == data.queryBuilder.numberOfResults) {\n // This will check right away if we need to add more results to make the scroll container full & scrolling.\n this.scrollToTopIfEnabled();\n this.handleScrollOfResultList();\n }\n return [2 /*return*/];\n }\n });\n }); });\n };\n ResultList.prototype.handleScrollOfResultList = function () {\n if (this.isCurrentlyFetchingMoreResults() || !this.options.enableInfiniteScroll) {\n return;\n }\n if (this.isScrollingOfResultListAlmostAtTheBottom() && this.hasPotentiallyMoreResultsToDisplay()) {\n this.displayMoreResults(this.options.infiniteScrollPageSize);\n }\n };\n ResultList.prototype.scrollToTopIfEnabled = function () {\n if (!this.options.enableScrollToTop) {\n return;\n }\n ResultListUtils_1.ResultListUtils.scrollToTop(this.root);\n };\n ResultList.prototype.handleNewQuery = function () {\n Dom_1.$$(this.element).removeClass('coveo-hidden');\n ResultList.resultCurrentlyBeingRendered = undefined;\n };\n Object.defineProperty(ResultList.prototype, \"otherResultLists\", {\n get: function () {\n var allResultLists = this.searchInterface.getComponents(ResultList.ID);\n return underscore_1.without(allResultLists, this);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ResultList.prototype, \"resultLayoutSelectors\", {\n get: function () {\n return this.searchInterface.getComponents('ResultLayoutSelector');\n },\n enumerable: true,\n configurable: true\n });\n ResultList.prototype.handleBuildingQuery = function (args) {\n if (this.options.fieldsToInclude != null) {\n // remove the @\n args.queryBuilder.addFieldsToInclude(underscore_1.map(this.options.fieldsToInclude, function (field) { return field.substr(1); }));\n }\n if (this.options.autoSelectFieldsToInclude) {\n var otherFields = underscore_1.flatten(underscore_1.map(this.otherResultLists, function (otherResultList) {\n return otherResultList.getAutoSelectedFieldsToInclude();\n }));\n args.queryBuilder.addRequiredFields(underscore_1.unique(otherFields.concat(this.getAutoSelectedFieldsToInclude())));\n args.queryBuilder.includeRequiredFields = true;\n }\n };\n ResultList.prototype.handleChangeLayout = function (args) {\n var _this = this;\n if (args.layout === this.options.layout) {\n this.disableLayoutChange = false;\n this.enable();\n this.options.resultTemplate.layout = this.options.layout;\n if (args.results) {\n // Prevent flickering when switching to a new layout that is empty\n // add a temporary placeholder, the same that is used on initialization\n if (this.resultContainer.isEmpty()) {\n new InitializationPlaceholder_1.InitializationPlaceholder(this.root).withVisibleRootElement().withPlaceholderForResultList();\n }\n Defer_1.Defer.defer(function () { return __awaiter(_this, void 0, void 0, function () {\n var elements;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.buildResults(args.results)];\n case 1:\n elements = _a.sent();\n this.renderResults(elements);\n this.showOrHideElementsDependingOnState(true, this.currentlyDisplayedResults.length !== 0);\n return [2 /*return*/];\n }\n });\n }); });\n }\n }\n else {\n this.disableLayoutChange = true;\n this.disable();\n this.resultContainer.empty();\n }\n };\n ResultList.prototype.isCurrentlyFetchingMoreResults = function () {\n return Utils_1.Utils.exists(this.fetchingMoreResults);\n };\n ResultList.prototype.getMinimalFieldsToInclude = function () {\n // these fields are needed for analytics click event\n return ['author', 'language', 'urihash', 'objecttype', 'collection', 'source', 'language', 'permanentid'];\n };\n ResultList.prototype.isScrollingOfResultListAlmostAtTheBottom = function () {\n // this is in a try catch because the unit test fail otherwise (Window does not exist for phantom js in the console)\n var isWindow;\n try {\n isWindow = this.options.infiniteScrollContainer instanceof Window;\n }\n catch (e) {\n isWindow = false;\n }\n return isWindow ? this.isScrollAtBottomForWindowElement() : this.isScrollAtBottomForHtmlElement();\n };\n ResultList.prototype.isScrollAtBottomForWindowElement = function () {\n var win = new Dom_1.Win(window);\n var windowHeight = win.height();\n var scrollTop = win.scrollY();\n var bodyHeight = new Dom_1.Doc(document).height();\n return bodyHeight - (windowHeight + scrollTop) < windowHeight / 2;\n };\n ResultList.prototype.isScrollAtBottomForHtmlElement = function () {\n var el = this.options.infiniteScrollContainer;\n var elementHeight = el.clientHeight;\n var scrollHeight = el.scrollHeight;\n var bottomPosition = el.scrollTop + elementHeight;\n return scrollHeight - bottomPosition < elementHeight / 2;\n };\n ResultList.prototype.hasPotentiallyMoreResultsToDisplay = function () {\n return this.currentlyDisplayedResults.length > 0 && !this.reachedTheEndOfResults;\n };\n ResultList.prototype.cancelFetchingMoreResultsIfNeeded = function () {\n if (this.isCurrentlyFetchingMoreResults()) {\n this.logger.trace('Cancelling fetching more results');\n Promise.reject(this.fetchingMoreResults);\n this.fetchingMoreResults = undefined;\n }\n };\n ResultList.prototype.showOrHideElementsDependingOnState = function (hasQuery, hasResults) {\n var showIfQuery = Dom_1.$$(this.element).findAll('.coveo-show-if-query');\n var showIfNoQuery = Dom_1.$$(this.element).findAll('.coveo-show-if-no-query');\n var showIfResults = Dom_1.$$(this.element).findAll('.coveo-show-if-results');\n var showIfNoResults = Dom_1.$$(this.element).findAll('.coveo-show-if-no-results');\n underscore_1.each(showIfQuery, function (s) {\n Dom_1.$$(s).toggle(hasQuery);\n });\n underscore_1.each(showIfNoQuery, function (s) {\n Dom_1.$$(s).toggle(!hasQuery);\n });\n underscore_1.each(showIfResults, function (s) {\n Dom_1.$$(s).toggle(hasQuery && hasResults);\n });\n underscore_1.each(showIfNoResults, function (s) {\n Dom_1.$$(s).toggle(hasQuery && !hasResults);\n });\n };\n Object.defineProperty(ResultList.prototype, \"waitAnimation\", {\n get: function () {\n return this.options.waitAnimation.toLowerCase();\n },\n enumerable: true,\n configurable: true\n });\n ResultList.prototype.showWaitingAnimation = function () {\n switch (this.waitAnimation) {\n case 'fade':\n Dom_1.$$(this.options.waitAnimationContainer).addClass('coveo-fade-out');\n break;\n case 'spinner':\n this.resultContainer.hideChildren();\n if (Dom_1.$$(this.options.waitAnimationContainer).find('.coveo-wait-animation') == undefined) {\n this.options.waitAnimationContainer.appendChild(DomUtils_1.DomUtils.getBasicLoadingAnimation());\n }\n break;\n }\n };\n ResultList.prototype.hideWaitingAnimation = function () {\n switch (this.waitAnimation) {\n case 'fade':\n Dom_1.$$(this.options.waitAnimationContainer).removeClass('coveo-fade-out');\n break;\n case 'spinner':\n var spinner = Dom_1.$$(this.options.waitAnimationContainer).find('.coveo-loading-spinner');\n if (spinner) {\n Dom_1.$$(spinner).detach();\n }\n break;\n }\n };\n ResultList.prototype.showWaitingAnimationForInfiniteScrolling = function () {\n var spinner = DomUtils_1.DomUtils.getLoadingSpinner();\n if (this.options.layout == 'card' && this.options.enableInfiniteScroll) {\n var previousSpinnerContainer = Dom_1.$$(this.options.waitAnimationContainer).findAll('.coveo-loading-spinner-container');\n underscore_1.each(previousSpinnerContainer, function (previousSpinner) { return Dom_1.$$(previousSpinner).remove(); });\n var spinnerContainer = Dom_1.$$('div', {\n className: 'coveo-loading-spinner-container'\n });\n spinnerContainer.append(spinner);\n this.options.waitAnimationContainer.appendChild(spinnerContainer.el);\n }\n else {\n this.options.waitAnimationContainer.appendChild(DomUtils_1.DomUtils.getLoadingSpinner());\n }\n };\n ResultList.prototype.hideWaitingAnimationForInfiniteScrolling = function () {\n var spinners = Dom_1.$$(this.options.waitAnimationContainer).findAll('.coveo-loading-spinner');\n var containers = Dom_1.$$(this.options.waitAnimationContainer).findAll('.coveo-loading-spinner-container');\n underscore_1.each(spinners, function (spinner) { return Dom_1.$$(spinner).remove(); });\n underscore_1.each(containers, function (container) { return Dom_1.$$(container).remove(); });\n };\n ResultList.prototype.initResultContainer = function () {\n if (!this.options.resultsContainer) {\n var elemType = this.options.layout === 'table' ? 'table' : 'div';\n this.options.resultsContainer = Dom_1.$$(elemType, { className: 'coveo-result-list-container' }).el;\n this.initResultContainerAddToDom();\n }\n return new ResultContainer_1.ResultContainer(this.options.resultsContainer, this.searchInterface);\n };\n ResultList.prototype.initResultContainerAddToDom = function () {\n this.element.appendChild(this.options.resultsContainer);\n };\n ResultList.prototype.initWaitAnimationContainer = function () {\n if (!this.options.waitAnimationContainer) {\n this.options.waitAnimationContainer = this.resultContainer.el;\n }\n };\n ResultList.prototype.setupRenderer = function () {\n var initParameters = {\n options: this.searchInterface.options.originalOptionsObject,\n bindings: this.bindings\n };\n var autoCreateComponentsFn = function (elem) { return Initialization_1.Initialization.automaticallyCreateComponentsInside(elem, initParameters); };\n switch (this.options.layout) {\n case 'card':\n this.renderer = new ResultListCardRenderer_1.ResultListCardRenderer(this.options, autoCreateComponentsFn);\n break;\n case 'table':\n this.renderer = new ResultListTableRenderer_1.ResultListTableRenderer(this.options, autoCreateComponentsFn);\n break;\n case 'list':\n default:\n this.renderer = new ResultListRenderer_1.ResultListRenderer(this.options, autoCreateComponentsFn);\n break;\n }\n };\n ResultList.prototype.makeElementFocusable = function () {\n Dom_1.$$(this.element).setAttribute('tabindex', '-1');\n };\n ResultList.prototype.ensureHasId = function () {\n var currentId = this.element.id;\n if (currentId === '') {\n this.element.id = underscore_1.uniqueId('coveo-result-list');\n }\n };\n ResultList.prototype.enableBasedOnActiveLayouts = function () {\n var _this = this;\n // We should try to enable a result list only when the result layout selector currently allow that result list layout to be displayed.\n underscore_1.each(this.resultLayoutSelectors, function (resultLayoutSelector) {\n var found = underscore_1.find(resultLayoutSelector.activeLayouts, function (activeLayout, activeLayoutKey) { return activeLayoutKey == _this.options.layout; });\n if (found) {\n _super.prototype.enable.call(_this);\n resultLayoutSelector.enableLayouts([_this.options.layout]);\n Dom_1.$$(_this.element).removeClass('coveo-hidden');\n }\n });\n };\n ResultList.ID = 'ResultList';\n ResultList.doExport = function () {\n GlobalExports_1.exportGlobally({\n ResultList: ResultList\n });\n };\n /**\n * The options for the ResultList\n * @componentOptions\n */\n ResultList.options = {\n /**\n * The element inside which to insert the rendered result templates.\n *\n * Performing a new query clears the content of this element.\n *\n * You can change the container by specifying its selector (e.g.,\n * `data-result-container-selector='#someCssSelector'`).\n *\n * If you specify no value for this option, a `div` element will be dynamically created and appended to the result\n * list. This element will then be used as a result container.\n */\n resultsContainer: ComponentOptions_1.ComponentOptions.buildChildHtmlElementOption({ alias: 'resultContainerSelector' }),\n resultTemplate: TemplateComponentOptions_1.TemplateComponentOptions.buildTemplateOption({ defaultFunction: ResultList.getDefaultTemplate }),\n /**\n * The type of animation to display while waiting for a query to return.\n *\n * The possible values are:\n * - `fade`: Fades out the current list of results while the query is executing.\n * - `spinner`: Shows a spinning animation while the query is executing.\n * - `none`: Use no animation during queries.\n *\n * See also the [`waitAnimationContainer`]{@link ResultList.options.waitAnimationContainer} option.\n *\n * @examples spinner\n */\n waitAnimation: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'none' }),\n /**\n * The element inside which to display the [`waitAnimation`]{@link ResultList.options.waitAnimation}.\n *\n * You can change this by specifying a CSS selector (e.g.,\n * `data-wait-animation-container-selector='#someCssSelector'`).\n *\n * Defaults to the value of the [`resultsContainer`]{@link ResultList.options.resultsContainer} option.\n */\n waitAnimationContainer: ComponentOptions_1.ComponentOptions.buildChildHtmlElementOption({\n postProcessing: function (value, options) { return value || options.resultsContainer; }\n }),\n /**\n * Whether to automatically retrieve an additional page of results and append it to the\n * results that the `ResultList` is currently displaying when the user scrolls down to the bottom of the\n * [`infiniteScrollContainer`]{@link ResultList.options.infiniteScrollContainer}.\n *\n * See also the [`infiniteScrollPageSize`]{@link ResultList.options.infiniteScrollPageSize} and\n * [`enableInfiniteScrollWaitingAnimation`]{@link ResultList.options.enableInfiniteScrollWaitingAnimation} options.\n *\n * It is important to specify the `infiniteScrollContainer` option manually if you want the scrolling element to be\n * something else than the default `window` element. Otherwise, you might find yourself in a strange state where the\n * framework rapidly triggers multiple successive query.\n */\n enableInfiniteScroll: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n /**\n * The number of additional results to fetch when the user scrolls down to the bottom of the\n * [`infiniteScrollContainer`]{@link ResultList.options.infiniteScrollContainer}.\n *\n * @examples 5\n */\n infiniteScrollPageSize: ComponentOptions_1.ComponentOptions.buildNumberOption({\n defaultValue: 10,\n min: 1,\n depend: 'enableInfiniteScroll'\n }),\n /**\n * The element that triggers fetching additional results when the end user scrolls down to its bottom.\n *\n * You can change the container by specifying its selector (e.g.,\n * `data-infinite-scroll-container-selector='#someCssSelector'`).\n *\n * By default, the framework uses the first vertically scrollable parent element it finds, starting from the\n * `ResultList` element itself. A vertically scrollable element is an element whose CSS `overflow-y` attribute is\n * `scroll`.\n *\n * This implies that if the framework can find no scrollable parent, it uses the `window` itself as a scrollable\n * container.\n *\n * This heuristic is not perfect, for technical reasons. There are always some corner case CSS combination which the\n * framework will not be able to correctly detect as 'scrollable'.\n *\n * It is highly recommended that you manually set this option if you wish something else than the `window` to be the\n * scrollable element.\n */\n infiniteScrollContainer: ComponentOptions_1.ComponentOptions.buildChildHtmlElementOption({\n depend: 'enableInfiniteScroll',\n defaultFunction: function (element) { return ComponentOptions_1.ComponentOptions.findParentScrolling(element); }\n }),\n /**\n * Whether to display the [`waitingAnimation`]{@link ResultList.options.waitAnimation} while fetching additional\n * results.\n */\n enableInfiniteScrollWaitingAnimation: ComponentOptions_1.ComponentOptions.buildBooleanOption({\n depend: 'enableInfiniteScroll',\n defaultValue: true\n }),\n mobileScrollContainer: ComponentOptions_1.ComponentOptions.buildSelectorOption({\n defaultFunction: function () { return document.querySelector('.coveo-results-column'); }\n }),\n /**\n * Whether the `ResultList` should scan its result templates to discover which fields it must request to\n * be able to render all results.\n *\n * Setting this option to `true` ensures that the Coveo Search API does not return fields that are unnecessary for\n * the UI to function.\n *\n * **Notes:**\n *\n * - Many interfaces created with the JavaScript Search Interface Editor explicitly set this option to `true`.\n * - You cannot set this option to `true` in the Coveo for Sitecore integration.\n */\n autoSelectFieldsToInclude: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n /**\n * A list of fields to include in the query results.\n *\n * If you set the [`autoSelectFieldsToInclude`]{@link ResultList.options.autoSelectFieldsToInclude} option to\n * `true`, the Coveo Search API returns the fields you specify for this option (if those fields are available) in\n * addition to the fields which the `ResultList` automatically requests.\n *\n * Otherwise, the Coveo Search API only returns the fields you specify for this option (if those fields are\n * available), unless you leave this option undefined, in which case the Coveo Search API returns all available\n * fields.\n */\n fieldsToInclude: ComponentOptions_1.ComponentOptions.buildFieldsOption({ includeInResults: true }),\n /**\n * Specifies the layout to use when displaying results in this `ResultList` (see\n * [Result Layouts](https://docs.coveo.com/en/360/)). Specifying a value for this option automatically\n * populates a [`ResultLayout`]{@link ResultLayout} component with a switcher for the layout.\n *\n * For example, if there are two `ResultList` components in the page, one with its `layout` set to `list` and the\n * other with the same option set to `card`, then the `ResultLayout` component will render two buttons respectively\n * entitled **List** and **Card**.\n *\n * See the [`ValidLayout`]{@link ValidLayout} type for the list of possible values.\n *\n * @examples card\n */\n layout: ComponentOptions_1.ComponentOptions.buildStringOption({\n defaultValue: 'list',\n required: true\n }),\n /**\n * Whether to scroll back to the top of the page when the end-user:\n * - interacts with a facet when [`infiniteScrollContainer`]{@link ResultList.options.infiniteScrollContainer} is set to `true`\n * - interacts with the [`Pager`]{@link Pager} component when [`infiniteScrollContainer`]{@link ResultList.options.infiniteScrollContainer} is set to `false`\n *\n * **Note:** Setting this option to `false` has no effect on dynamic facets. To disable this behavior on a `DynamicFacet` component, you must set its own [`enableScrollToTop`]{@link DynamicFacet.options.enableScrollToTop} option to `false`.\n *\n * @availablesince [July 2019 Release (v2.6459)](https://docs.coveo.com/en/2938/)\n */\n enableScrollToTop: ComponentOptions_1.ComponentOptions.buildBooleanOption({\n defaultValue: true\n })\n };\n ResultList.resultCurrentlyBeingRendered = null;\n ResultList.MAX_AMOUNT_OF_SUCESSIVE_REQUESTS = 5;\n return ResultList;\n}(Component_1.Component));\nexports.ResultList = ResultList;\nInitialization_1.Initialization.registerAutoCreateComponent(ResultList);\n\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// DynamicFacet.min__87a2f876e355bf8ecbd9.js","import { Component } from '../ui/Base/Component';\nimport { ResultList } from '../ui/ResultList/ResultList';\nimport { $$ } from './Dom';\nimport { find } from 'underscore';\nimport { Logger } from '../misc/Logger';\n\nexport class ResultListUtils {\n public static hideIfInfiniteScrollEnabled(cmp: Component) {\n const infiniteScrollEnabled = ResultListUtils.isInfiniteScrollEnabled(cmp.searchInterface.element);\n\n if (infiniteScrollEnabled) {\n cmp.disable();\n $$(cmp.element).hide();\n ResultListUtils.warnIfComponentNotNeeded(cmp);\n } else {\n cmp.enable();\n $$(cmp.element).unhide();\n }\n }\n\n public static isInfiniteScrollEnabled(root: HTMLElement) {\n const resultList = ResultListUtils.getActiveResultList(root);\n return resultList ? !!resultList.options.enableInfiniteScroll : false;\n }\n\n public static scrollToTop(root: HTMLElement) {\n const resultList = ResultListUtils.getActiveResultList(root);\n if (!resultList) {\n new Logger(this).warn('No active ResultList, scrolling to the top of the Window');\n return window.scrollTo(0, 0);\n }\n\n const searchInterfacePosition = resultList.searchInterface.element.getBoundingClientRect().top;\n if (searchInterfacePosition > 0) {\n return;\n }\n\n window.scrollTo(0, window.pageYOffset + searchInterfacePosition);\n }\n\n private static getActiveResultList(root: HTMLElement) {\n const resultLists = ResultListUtils.getResultLists(root);\n return find(resultLists, resultList => !resultList.disabled);\n }\n\n private static getResultLists(root: HTMLElement) {\n return $$(root)\n .findAll(`.${ResultListUtils.cssClass()}`)\n .map(el => Component.get(el, ResultList));\n }\n\n private static cssClass() {\n return Component.computeCssClassName(ResultList);\n }\n\n private static warnIfComponentNotNeeded(cmp: Component) {\n const root = cmp.searchInterface.root;\n const allListsUseInfiniteScroll = ResultListUtils.allResultListsUseInfiniteScroll(root);\n\n allListsUseInfiniteScroll && ResultListUtils.notNeededComponentWarning(cmp);\n }\n\n private static allResultListsUseInfiniteScroll(root: HTMLElement) {\n const listsWithInfiniteScrollDisabled = ResultListUtils.getResultLists(root).filter(\n resultList => !resultList.options.enableInfiniteScroll\n );\n\n return listsWithInfiniteScrollDisabled.length === 0;\n }\n\n private static notNeededComponentWarning(cmp: Component) {\n const cmpCssClass = Component.computeCssClassNameForType(cmp.type);\n const message = `The ${cmpCssClass} component is not needed because all ${ResultListUtils.cssClass()} components have enableInfiniteScroll set to 'true'.\n For the best performance, remove the ${cmpCssClass} component from your search page.`;\n\n new Logger(cmp).warn(message);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/ResultListUtils.ts","import { Dom } from '../../utils/Dom';\nimport { ResponsiveDropdownContent } from './ResponsiveDropdown/ResponsiveDropdownContent';\n\nexport class ResponsiveComponentsUtils {\n private static smallTabsClassName: string = 'coveo-small-tabs';\n private static smallFacetClassName: string = 'coveo-small-facets';\n private static smallRecommendationClassName: string = 'coveo-small-recommendation';\n\n static shouldDrawFacetSlider(root: Dom, facetSliderElement: Dom): boolean {\n return ResponsiveDropdownContent.isTargetInsideOpenedDropdown(facetSliderElement) || !this.isSmallFacetActivated(root);\n }\n\n static isSmallTabsActivated(root: Dom): boolean {\n return root.hasClass(this.smallTabsClassName);\n }\n\n static isSmallFacetActivated(root: Dom): boolean {\n return root.hasClass(this.smallFacetClassName);\n }\n\n static isSmallRecommendationActivated(root: Dom): boolean {\n return root.hasClass(this.smallRecommendationClassName);\n }\n\n static activateSmallTabs(root: Dom): void {\n root.addClass(this.smallTabsClassName);\n }\n\n static deactivateSmallTabs(root: Dom): void {\n root.removeClass(this.smallTabsClassName);\n }\n\n static activateSmallFacet(root: Dom): void {\n root.addClass(this.smallFacetClassName);\n }\n\n static deactivateSmallFacet(root: Dom): void {\n root.removeClass(this.smallFacetClassName);\n }\n\n static activateSmallRecommendation(root: Dom): void {\n root.addClass(this.smallRecommendationClassName);\n }\n\n static deactivateSmallRecommendation(root: Dom): void {\n root.removeClass(this.smallRecommendationClassName);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResponsiveComponents/ResponsiveComponentsUtils.ts","import 'styling/DynamicFacet/_DynamicFacet';\nimport { IDynamicFacet, IDynamicFacetOptions } from './IDynamicFacet';\nimport { difference, findIndex } from 'underscore';\nimport { $$ } from '../../utils/Dom';\nimport { exportGlobally } from '../../GlobalExports';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Initialization } from '../Base/Initialization';\nimport { ResponsiveFacetOptions } from '../ResponsiveComponents/ResponsiveFacetOptions';\nimport { ResponsiveDynamicFacets } from '../ResponsiveComponents/ResponsiveDynamicFacets';\nimport { DynamicFacetBreadcrumbs } from './DynamicFacetBreadcrumbs';\nimport { DynamicFacetHeader } from './DynamicFacetHeader/DynamicFacetHeader';\nimport { DynamicFacetValues } from './DynamicFacetValues/DynamicFacetValues';\nimport { QueryEvents, IQuerySuccessEventArgs, IDoneBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { DynamicFacetQueryController } from '../../controllers/DynamicFacetQueryController';\nimport { Utils } from '../../utils/Utils';\nimport { MODEL_EVENTS, IAttributesChangedEventArg } from '../../models/Model';\nimport { Assert } from '../../misc/Assert';\nimport { IFacetResponse } from '../../rest/Facet/FacetResponse';\nimport { IStringMap } from '../../rest/GenericParam';\nimport { isFacetSortCriteria, FacetSortCriteria } from '../../rest/Facet/FacetSortCriteria';\nimport { l } from '../../strings/Strings';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { BreadcrumbEvents, IPopulateBreadcrumbEventArgs } from '../../events/BreadcrumbEvents';\nimport { IAnalyticsActionCause, analyticsActionCauseList, IAnalyticsFacetMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { IAnalyticsFacetState } from '../Analytics/IAnalyticsFacetState';\nimport { IQueryOptions } from '../../controllers/QueryController';\nimport { DynamicFacetManager } from '../DynamicFacetManager/DynamicFacetManager';\nimport { QueryBuilder } from '../Base/QueryBuilder';\nimport { DynamicFacetSearch } from '../DynamicFacetSearch/DynamicFacetSearch';\nimport { ResultListUtils } from '../../utils/ResultListUtils';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { FacetType } from '../../rest/Facet/FacetRequest';\nimport { DependsOnManager, IDependentFacet, IDependentFacetCondition } from '../../utils/DependsOnManager';\nimport { DynamicFacetValueCreator } from './DynamicFacetValues/DynamicFacetValueCreator';\nimport { Logger } from '../../misc/Logger';\nimport { FacetUtils } from '../Facet/FacetUtils';\n\n/**\n * The `DynamicFacet` component displays a *facet* of the results for the current query. A facet is a list of values for a\n * certain field occurring in the results, ordered using a configurable criteria (e.g., number of occurrences).\n *\n * The list of values is obtained using an array of [`FacetRequest`]{@link IFacetRequest} operations performed at the same time\n * as the main query.\n *\n * The `DynamicFacet` component allows the end-user to drill down inside a result set by restricting the result to certain\n * field values.\n *\n * This facet is more easy to use than the original [`Facet`]{@link Facet} component. It implements additional Coveo Machine Learning (Coveo ML) features\n * such as dynamic navigation experience (DNE).\n *\n * @notSupportedIn salesforcefree\n * @availablesince [May 2019 Release (v2.6063)](https://docs.coveo.com/en/2909/)\n */\nexport class DynamicFacet extends Component implements IDynamicFacet {\n static ID = 'DynamicFacet';\n static doExport = () => exportGlobally({ DynamicFacet });\n\n /**\n * The options for the DynamicFacet\n * @componentOptions\n */\n static options: IDynamicFacetOptions = {\n ...ResponsiveFacetOptions,\n\n /**\n * The unique identifier for this facet.\n *\n * Among other things, this is used to record and read the facet\n * state in the URL fragment identifier (see the\n * [`enableHistory`]{@link SearchInterface.options.enableHistory} `SearchInterface`\n * option).\n *\n * **Tip:** When several facets in a given search interface are based on\n * the same field, ensure that each of those facets has a distinct `id`.\n *\n * If specified, must contain between 1 and 60 characters.\n * Only alphanumeric (A-Za-z0-9), underscore (_), and hyphen (-) characters are kept; other characters are automatically removed.\n *\n * Defaults to the [`field`]{@link DynamicFacet.options.field} option value.\n *\n * @examples author-facet\n */\n id: ComponentOptions.buildStringOption({\n postProcessing: (value = '', options: IDynamicFacetOptions) => {\n const maxCharLength = 60;\n const sanitizedValue = value.replace(/[^A-Za-z0-9-_@]+/g, '');\n if (Utils.isNonEmptyString(sanitizedValue)) {\n return sanitizedValue.slice(0, maxCharLength - 1);\n }\n\n return options.field.slice(0, maxCharLength - 1);\n },\n section: 'CommonOptions'\n }),\n\n /**\n * The title to display for this facet.\n *\n * Defaults to the localized string for `NoTitle`.\n *\n * @examples Author\n */\n title: ComponentOptions.buildLocalizedStringOption({\n localizedString: () => l('NoTitle'),\n section: 'CommonOptions',\n priority: 10\n }),\n\n /**\n * The name of the field on which to base this facet.\n *\n * Must be prefixed by `@`, and must reference an existing field whose\n * **Facet** option is enabled.\n *\n * @externaldocs [Add or Edit Fields](https://docs.coveo.com/en/1982/)\n * @examples @author\n */\n field: ComponentOptions.buildFieldOption({ required: true, section: 'CommonOptions' }),\n\n /**\n * The sort criterion to use for this facet.\n *\n * See [`FacetSortCriteria`]{@link FacetSortCriteria} for the list and\n * description of allowed values.\n *\n * By default, the following behavior applies:\n *\n * - If the requested [`numberOfValues`]{@link DynamicFacet.options.numberOfValues}\n * is greater than or equal to the currently displayed number of values,\n * the [`alphanumeric`]{@link FacetSortCriteria.alphanumeric} criterion is\n * used.\n * - If the requested `numberOfValues` is less than the currently displayed\n * number of values and the facet is not currently expanded, the [`score`]{@link FacetSortCriteria.score}\n * criterion is used.\n * - Otherwise, the `alphanumeric` criterion is used.\n *\n * @examples score\n */\n sortCriteria: ComponentOptions.buildStringOption({\n postProcessing: value => {\n if (!value) {\n return undefined;\n }\n\n if (isFacetSortCriteria(value)) {\n return value;\n }\n\n new Logger(value).warn('sortCriteria is not of the the allowed values: \"score\", \"alphanumeric\", \"occurrences\"');\n return undefined;\n },\n section: 'Sorting'\n }),\n\n /**\n * Specifies a custom order by which to sort the dynamic facet values.\n *\n * Custom-ordered values won't necessarily retrieve values from the index.\n *\n * **Example:**\n *\n * You could use this option to specify a logical order for support tickets, such as:\n * ```html\n *
\n * ```\n *\n * **Note:**\n * > The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n */\n customSort: ComponentOptions.buildListOption({ section: 'Sorting' }),\n\n /**\n * The number of values to request for this facet.\n *\n * Also determines the default maximum number of additional values to request each time this facet is expanded,\n * and the maximum number of values to display when this facet is collapsed (see the [`enableCollapse`]{@link DynamicFacet.options.enableCollapse} option).\n */\n numberOfValues: ComponentOptions.buildNumberOption({ min: 0, defaultValue: 8, section: 'CommonOptions' }),\n\n /**\n * Whether to allow the end-user to expand and collapse this facet.\n */\n enableCollapse: ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'CommonOptions' }),\n\n /**\n * Whether to scroll back to the top of the page whenever the end-user interacts with the facet.\n */\n enableScrollToTop: ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'CommonOptions' }),\n\n /**\n * Whether to enable the **Show more** and **Show less** buttons in the facet.\n *\n * **Note:** The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n */\n enableMoreLess: ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'CommonOptions' }),\n\n /**\n * Whether to allow the end-user to search the facet values.\n *\n * **Note:** The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n *\n * By default, the following behavior applies:\n *\n * - Enabled when more facet values are available.\n * - Disabled when all available facet values are already displayed.\n */\n enableFacetSearch: ComponentOptions.buildBooleanOption({ section: 'Filtering' }),\n\n /**\n * Whether to prepend facet search queries with a wildcard.\n *\n * **Note:** The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n */\n useLeadingWildcardInFacetSearch: ComponentOptions.buildBooleanOption({\n defaultValue: true,\n section: 'Filtering',\n depend: 'enableFacetSearch'\n }),\n\n /**\n * Whether this facet should be collapsed by default.\n */\n collapsedByDefault: ComponentOptions.buildBooleanOption({ defaultValue: false, section: 'CommonOptions', depend: 'enableCollapse' }),\n\n /**\n * Whether to notify the [`Breadcrumb`]{@link Breadcrumb} component when toggling values in the facet.\n *\n * See also the [`numberOfValuesInBreadcrumb`]{@link DynamicFacet.options.numberOfValuesInBreadcrumb} option.\n */\n includeInBreadcrumb: ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'CommonOptions' }),\n\n /**\n * The maximum number of selected values the [`Breadcrumb`]{@link Breadcrumb} component can display before outputting a **N more...** link for the facet.\n */\n numberOfValuesInBreadcrumb: ComponentOptions.buildNumberOption({\n defaultFunction: () => (DeviceUtils.isMobileDevice() ? 3 : 5),\n min: 0,\n depend: 'includeInBreadcrumb',\n section: 'CommonOptions'\n }),\n\n /**\n * A mapping of facet values to their desired captions.\n *\n * **Note:** The [`DynamicFacetRange`]{@link DynamicFacetRange} component does not support this option.\n *\n * @externaldocs [Normalizing Facet Value Captions](https://docs.coveo.com/368/).\n * @examples { \"smith_alice\": \"Alice Smith\"\\, \"jones_bob_r\": \"Bob R. Jones\" }\n */\n valueCaption: ComponentOptions.buildJsonOption>({ defaultValue: {} }),\n\n /**\n * The [`id`]{@link DynamicFacet.options.id} of another facet in which at least one value must be selected in order for the dependent facet to be visible.\n *\n * By default, the facet does not depend on any other facet to be displayed.\n *\n * @examples document-type-facet\n *\n * @availablesince [December 2019 Release (v2.7610)](https://docs.coveo.com/en/3142/)\n */\n dependsOn: ComponentOptions.buildStringOption({ section: 'CommonOptions' }),\n\n /**\n * A function that verifies whether the current state of the `dependsOn` facet allows the dependent facet to be displayed.\n *\n * If specified, the function receives a reference to the resolved `dependsOn` facet component instance as an argument, and must return a boolean.\n * The function's argument should typically be treated as read-only.\n *\n * By default, the dependent facet is displayed whenever one or more values are selected in its `dependsOn` facet.\n *\n * @externaldocs [Defining Dependent Facets](https://docs.coveo.com/3210/)\n *\n * @availablesince [April 2020 Release (v2.8864)](https://docs.coveo.com/en/3231/)\n */\n dependsOnCondition: ComponentOptions.buildCustomOption(\n () => {\n return null;\n },\n { depend: 'dependsOn', section: 'CommonOptions' }\n ),\n\n /**\n * The number of items to scan for facet values.\n *\n * Setting this option to a higher value may enhance the accuracy of facet value counts at the cost of slower query performance.\n *\n * @availablesince [January 2020 Release (v2.7968)](https://docs.coveo.com/en/3163/)\n */\n injectionDepth: ComponentOptions.buildNumberOption({ defaultValue: 1000, min: 0 }),\n\n /**\n * Whether to exclude folded result parents when estimating result counts for facet values.\n *\n * **Note:** The target folding field must be a facet field with the **Use cache for nested queries** options enabled (see [Add or Edit a Field](https://docs.coveo.com/en/1982)).\n *\n * See also the [`Folding`]{@link Folding} and [`FoldingForThread`]{@link FoldingForThread} components.\n *\n * **Default:** `false` if folded results are requested; `true` otherwise.\n *\n * @availablesince [March 2020 Release (v2.8521)](https://docs.coveo.com/en/3203/)\n */\n filterFacetCount: ComponentOptions.buildBooleanOption({ section: 'Filtering' })\n };\n\n private includedAttributeId: string;\n private listenToQueryStateChange = true;\n private search: DynamicFacetSearch;\n public header: DynamicFacetHeader;\n\n public options: IDynamicFacetOptions;\n public dynamicFacetManager: DynamicFacetManager;\n public dependsOnManager: DependsOnManager;\n public dynamicFacetQueryController: DynamicFacetQueryController;\n public values: DynamicFacetValues;\n public position: number;\n public moreValuesAvailable = false;\n public isCollapsed: boolean;\n public isDynamicFacet = true;\n public isFieldValueCompatible = true;\n\n /**\n * Creates a new `DynamicFacet` instance.\n *\n * @param element The element from which to instantiate the component.\n * @param options The component options.\n * @param bindings The component bindings. Automatically resolved by default.\n */\n constructor(\n public element: HTMLElement,\n options?: IDynamicFacetOptions,\n bindings?: IComponentBindings,\n classId: string = DynamicFacet.ID\n ) {\n super(element, classId, bindings);\n this.options = ComponentOptions.initComponentOptions(element, DynamicFacet, options);\n\n this.initDynamicFacetQueryController();\n this.initDependsOnManager();\n this.initQueryEvents();\n this.initQueryStateEvents();\n this.initBreadCrumbEvents();\n this.initComponentStateEvents();\n this.initValues();\n this.verifyCollapsingConfiguration();\n this.isCollapsed = this.options.enableCollapse && this.options.collapsedByDefault;\n\n ResponsiveDynamicFacets.init(this.root, this, this.options);\n }\n\n public get fieldName() {\n return this.options.field.slice(1);\n }\n\n public get facetType() {\n return FacetType.specific;\n }\n\n /**\n * Selects a single value in this facet.\n *\n * Does **not** trigger a query automatically.\n * Does **not** update the visual of the facet until a query is performed.\n *\n * @param value The name of the facet value to select.\n */\n public selectValue(value: string) {\n Assert.exists(value);\n this.selectMultipleValues([value]);\n }\n\n /**\n * Selects multiple values in this facet.\n *\n * Does **not** trigger a query automatically.\n * Does **not** update the visual of the facet until a query is performed.\n *\n * @param values The names of the facet values to select.\n */\n public selectMultipleValues(values: string[]) {\n Assert.exists(values);\n this.ensureDom();\n this.logger.info('Selecting facet value(s)', values);\n values.forEach(value => {\n this.values.get(value).select();\n });\n this.updateQueryStateModel();\n }\n\n /**\n * Deselects a single value in this facet.\n *\n * Does **not** trigger a query automatically.\n * Does **not** update the visual of the facet until a query is performed.\n *\n * @param values The name of the facet value to deselect.\n */\n public deselectValue(value: string) {\n Assert.exists(value);\n this.deselectMultipleValues([value]);\n }\n\n /**\n * Determines whether the specified value is selected in the facet.\n * @param value The name of the facet value to verify.\n */\n public hasSelectedValue(value: string) {\n return this.values.hasSelectedValue(value);\n }\n\n /**\n * Deselects multiple values in this facet.\n *\n * Does **not** trigger a query automatically.\n * Does **not** update the visual of the facet until a query is performed.\n *\n * @param values The names of the facet values to deselect.\n */\n public deselectMultipleValues(values: string[]) {\n Assert.exists(values);\n this.ensureDom();\n this.logger.info('Deselecting facet value(s)', values);\n values.forEach(value => {\n this.values.get(value).deselect();\n });\n this.updateQueryStateModel();\n }\n\n /**\n * Toggles the selection state of a single value in this facet.\n *\n * Does **not** trigger a query automatically.\n *\n * @param values The name of the facet value to toggle.\n */\n public toggleSelectValue(value: string) {\n Assert.exists(value);\n this.ensureDom();\n const facetValue = this.values.get(value);\n facetValue.toggleSelect();\n this.logger.info('Toggle select facet value', facetValue);\n this.updateQueryStateModel();\n }\n\n /**\n * Returns the configured caption for a desired facet value.\n *\n * @param value The string facet value whose caption the method should return.\n */\n public getCaptionForStringValue(value: string) {\n return FacetUtils.getDisplayValueFromValueCaption(value, this.options.field as string, this.options.valueCaption);\n }\n\n /**\n * Requests additional values.\n *\n * Automatically triggers an isolated query.\n * @param additionalNumberOfValues The number of additional values to request. Minimum value is 1. Defaults to the [numberOfValues]{@link DynamicFacet.options.numberOfValues} option value.\n */\n public showMoreValues(additionalNumberOfValues = this.options.numberOfValues) {\n this.ensureDom();\n this.logger.info('Show more values');\n this.dynamicFacetQueryController.increaseNumberOfValuesToRequest(additionalNumberOfValues);\n this.triggerNewIsolatedQuery(() => this.logAnalyticsFacetShowMoreLess(analyticsActionCauseList.dynamicFacetShowMore));\n }\n\n /**\n * Reduces the number of displayed facet values down to [numberOfValues]{@link DynamicFacet.options.numberOfValues}.\n *\n * Automatically triggers an isolated query.\n */\n public showLessValues() {\n this.ensureDom();\n this.logger.info('Show less values');\n this.dynamicFacetQueryController.resetNumberOfValuesToRequest();\n this.triggerNewIsolatedQuery(() => this.logAnalyticsFacetShowMoreLess(analyticsActionCauseList.dynamicFacetShowLess));\n }\n\n /**\n * Deselects all values in this facet.\n *\n * Does **not** trigger a query automatically.\n * Updates the visual of the facet.\n *\n */\n public reset() {\n this.ensureDom();\n if (this.values.hasActiveValues) {\n this.logger.info('Deselect all values');\n this.values.clearAll();\n this.values.render();\n }\n this.enablePreventAutoSelectionFlag();\n this.updateAppearance();\n this.updateQueryStateModel();\n }\n\n /**\n * Collapses or expands the facet depending on it's current state.\n */\n public toggleCollapse() {\n this.isCollapsed ? this.expand() : this.collapse();\n }\n\n /**\n * Expands the facet, displaying all of its currently fetched values.\n */\n public expand() {\n if (!this.options.enableCollapse) {\n return this.logger.warn(`Calling expand() won't do anything on a facet that has the option \"enableCollapse\" set to \"false\"`);\n }\n if (!this.isCollapsed) {\n return;\n }\n this.ensureDom();\n this.logger.info('Expand facet values');\n this.isCollapsed = false;\n this.updateAppearance();\n }\n\n /**\n * Collapses the facet, displaying only its currently selected values.\n */\n public collapse() {\n if (!this.options.enableCollapse) {\n return this.logger.warn(`Calling collapse() won't do anything on a facet that has the option \"enableCollapse\" set to \"false\"`);\n }\n if (this.isCollapsed) {\n return;\n }\n this.ensureDom();\n this.logger.info('Collapse facet values');\n this.isCollapsed = true;\n this.updateAppearance();\n }\n\n /**\n * Sets a flag indicating whether the facet values should be returned in their current order.\n *\n * Setting the flag to `true` helps ensuring that the values do not move around while the end-user is interacting with them.\n *\n * The flag is automatically set back to `false` after a query is built.\n */\n public enableFreezeCurrentValuesFlag() {\n this.dynamicFacetQueryController.enableFreezeCurrentValuesFlag();\n }\n\n /**\n * For this method to work, the component has to be the child of a [DynamicFacetManager]{@link DynamicFacetManager} component.\n *\n * Sets a flag indicating whether the facets should be returned in their current order.\n *\n * Setting the flag to `true` helps ensuring that the facets do not move around while the end-user is interacting with them.\n *\n * The flag is automatically set back to `false` after a query is built.\n */\n public enableFreezeFacetOrderFlag() {\n this.dynamicFacetQueryController.enableFreezeFacetOrderFlag();\n }\n\n public enablePreventAutoSelectionFlag() {\n this.dynamicFacetQueryController.enablePreventAutoSelectionFlag();\n }\n\n public scrollToTop() {\n if (this.options.enableScrollToTop) {\n ResultListUtils.scrollToTop(this.root);\n }\n }\n\n public get analyticsFacetState(): IAnalyticsFacetState[] {\n return this.values.activeValues.map(facetValue => facetValue.analyticsFacetState);\n }\n\n public get basicAnalyticsFacetState(): IAnalyticsFacetState {\n return {\n field: this.options.field.toString(),\n id: this.options.id,\n title: this.options.title,\n facetType: this.facetType,\n facetPosition: this.position\n };\n }\n\n public get basicAnalyticsFacetMeta(): IAnalyticsFacetMeta {\n return {\n facetField: this.options.field.toString(),\n facetId: this.options.id,\n facetTitle: this.options.title\n };\n }\n\n public logAnalyticsEvent(actionCause: IAnalyticsActionCause, facetMeta: IAnalyticsFacetMeta) {\n this.usageAnalytics.logSearchEvent(actionCause, facetMeta);\n }\n\n public putStateIntoQueryBuilder(queryBuilder: QueryBuilder) {\n Assert.exists(queryBuilder);\n this.dynamicFacetQueryController.putFacetIntoQueryBuilder(queryBuilder);\n }\n\n public putStateIntoAnalytics() {\n const pendingEvent = this.usageAnalytics.getPendingSearchEvent();\n pendingEvent && pendingEvent.addFacetState(this.analyticsFacetState);\n }\n\n public isCurrentlyDisplayed() {\n return $$(this.element).isVisible();\n }\n\n public get hasActiveValues() {\n return this.values.hasActiveValues;\n }\n\n private initQueryEvents() {\n this.bind.onRootElement(QueryEvents.duringQuery, () => this.ensureDom());\n this.bind.onRootElement(QueryEvents.doneBuildingQuery, (data: IDoneBuildingQueryEventArgs) => this.handleDoneBuildingQuery(data));\n this.bind.onRootElement(QueryEvents.deferredQuerySuccess, (data: IQuerySuccessEventArgs) => this.handleQuerySuccess(data.results));\n this.bind.onRootElement(QueryEvents.queryError, () => this.onNoValues());\n }\n\n private initQueryStateEvents() {\n this.includedAttributeId = QueryStateModel.getFacetId(this.options.id);\n this.queryStateModel.registerNewAttribute(this.includedAttributeId, []);\n this.bind.onQueryState(MODEL_EVENTS.CHANGE, undefined, this.handleQueryStateChanged);\n }\n\n protected initBreadCrumbEvents() {\n if (this.options.includeInBreadcrumb) {\n this.bind.onRootElement(BreadcrumbEvents.populateBreadcrumb, (args: IPopulateBreadcrumbEventArgs) =>\n this.handlePopulateBreadcrumb(args)\n );\n this.bind.onRootElement(BreadcrumbEvents.clearBreadcrumb, () => this.reset());\n }\n }\n\n protected initValues() {\n this.values = new DynamicFacetValues(this, DynamicFacetValueCreator);\n }\n\n private initComponentStateEvents() {\n const componentStateId = QueryStateModel.getFacetId(this.options.id);\n this.componentStateModel.registerComponent(componentStateId, this);\n }\n\n protected initDynamicFacetQueryController() {\n this.dynamicFacetQueryController = new DynamicFacetQueryController(this);\n }\n\n private handleDoneBuildingQuery(data: IDoneBuildingQueryEventArgs) {\n // If there is a DynamicFacetManager, it will take care of adding the facet's state\n if (this.dynamicFacetManager) {\n return;\n }\n\n Assert.exists(data);\n Assert.exists(data.queryBuilder);\n this.putStateIntoQueryBuilder(data.queryBuilder);\n this.putStateIntoAnalytics();\n }\n\n private handleQuerySuccess(results: IQueryResults) {\n // If there is a DynamicFacetManager, it will take care of handling the results\n if (this.dynamicFacetManager) {\n return;\n }\n\n if (Utils.isNullOrUndefined(results.facets)) {\n return this.notImplementedError();\n }\n\n this.handleQueryResults(results);\n }\n\n public handleQueryResults(results: IQueryResults) {\n const index = findIndex(results.facets, { facetId: this.options.id });\n const facetResponse = index !== -1 ? results.facets[index] : null;\n\n this.position = facetResponse ? index + 1 : undefined;\n facetResponse ? this.onNewValues(facetResponse) : this.onNoValues();\n\n this.header.hideLoading();\n this.updateQueryStateModel();\n this.values.render();\n this.updateAppearance();\n }\n\n private onNewValues(facetResponse: IFacetResponse) {\n this.moreValuesAvailable = facetResponse.moreValuesAvailable;\n this.values.createFromResponse(facetResponse);\n if (this.options.customSort) {\n this.values.reorderValues(this.options.customSort);\n }\n }\n\n private onNoValues() {\n this.moreValuesAvailable = false;\n this.values.resetValues();\n }\n\n private handleQueryStateChanged(data: IAttributesChangedEventArg) {\n if (!this.listenToQueryStateChange) {\n return;\n }\n\n const querySelectedValues: string[] = data.attributes[this.includedAttributeId];\n if (!querySelectedValues) {\n return;\n }\n\n this.handleQueryStateChangedIncluded(querySelectedValues);\n }\n\n private handleQueryStateChangedIncluded = (querySelectedValues: string[]) => {\n const currentSelectedValues = this.values.selectedValues;\n const validQuerySelectedValues = querySelectedValues.filter(value => this.values.get(value));\n\n const valuesToSelect = difference(validQuerySelectedValues, currentSelectedValues);\n const valuesToDeselect = difference(currentSelectedValues, validQuerySelectedValues);\n\n if (Utils.isNonEmptyArray(valuesToSelect)) {\n this.selectMultipleValues(valuesToSelect);\n }\n\n if (Utils.isNonEmptyArray(valuesToDeselect)) {\n this.deselectMultipleValues(valuesToDeselect);\n }\n };\n\n private handlePopulateBreadcrumb(args: IPopulateBreadcrumbEventArgs) {\n Assert.exists(args);\n\n if (!this.values.hasActiveValues) {\n return;\n }\n\n const breadcrumbs = new DynamicFacetBreadcrumbs(this);\n args.breadcrumbs.push({ element: breadcrumbs.element });\n }\n\n private initDependsOnManager() {\n const facetInfo: IDependentFacet = {\n reset: () => this.reset(),\n ref: this\n };\n\n this.dependsOnManager = new DependsOnManager(facetInfo);\n }\n\n public createDom() {\n this.createAndAppendContent();\n this.updateAppearance();\n }\n\n private createAndAppendContent() {\n this.createAndAppendHeader();\n this.createAndAppendSearch();\n this.createAndAppendValues();\n }\n\n private createAndAppendHeader() {\n this.header = new DynamicFacetHeader({\n title: this.options.title,\n enableCollapse: this.options.enableCollapse,\n clear: () => this.clear(),\n toggleCollapse: () => this.toggleCollapse(),\n collapse: () => this.collapse(),\n expand: () => this.expand()\n });\n this.element.appendChild(this.header.element);\n }\n\n private createAndAppendSearch() {\n if (this.options.enableFacetSearch === false) {\n return;\n }\n\n this.search = new DynamicFacetSearch(this);\n this.element.appendChild(this.search.element);\n }\n\n private createAndAppendValues() {\n this.element.appendChild(this.values.render());\n }\n\n private updateQueryStateModel() {\n this.listenToQueryStateChange = false;\n this.queryStateModel.set(this.includedAttributeId, this.values.selectedValues);\n this.listenToQueryStateChange = true;\n }\n\n private updateAppearance() {\n this.header.toggleClear(this.values.hasSelectedValues);\n this.header.toggleCollapse(this.isCollapsed);\n this.toggleSearchDisplay();\n $$(this.element).toggleClass('coveo-dynamic-facet-collapsed', this.isCollapsed);\n $$(this.element).toggleClass('coveo-active', this.values.hasSelectedValues);\n $$(this.element).toggleClass('coveo-hidden', !this.values.hasDisplayedValues);\n }\n\n private toggleSearchDisplay() {\n if (this.options.enableFacetSearch === false) {\n return;\n }\n\n if (this.isCollapsed) {\n return $$(this.search.element).toggleClass('coveo-hidden', true);\n }\n\n $$(this.search.element).toggleClass('coveo-hidden', !this.options.enableFacetSearch && !this.moreValuesAvailable);\n }\n\n public triggerNewQuery(beforeExecuteQuery?: () => void) {\n this.beforeSendingQuery();\n\n const options: IQueryOptions = beforeExecuteQuery ? { beforeExecuteQuery } : { ignoreWarningSearchEvent: true };\n\n this.queryController.executeQuery(options);\n }\n\n public async triggerNewIsolatedQuery(beforeExecuteQuery?: () => void) {\n this.beforeSendingQuery();\n beforeExecuteQuery && beforeExecuteQuery();\n\n try {\n const results = await this.dynamicFacetQueryController.getQueryResults();\n this.handleQueryResults(results);\n } catch (e) {\n this.header.hideLoading();\n }\n }\n\n private beforeSendingQuery() {\n this.header.showLoading();\n }\n\n private notImplementedError() {\n this.logger.error('DynamicFacets are not supported by your current search endpoint. Disabling this component.');\n this.disable();\n this.updateAppearance();\n }\n\n private verifyCollapsingConfiguration() {\n if (this.options.collapsedByDefault && !this.options.enableCollapse) {\n this.logger.warn('The \"collapsedByDefault\" option is \"true\" while the \"enableCollapse\" is \"false\"');\n }\n }\n\n private logAnalyticsFacetShowMoreLess(cause: IAnalyticsActionCause) {\n this.usageAnalytics.logCustomEvent(cause, this.basicAnalyticsFacetMeta, this.element);\n }\n\n private clear() {\n this.reset();\n this.enableFreezeFacetOrderFlag();\n this.scrollToTop();\n this.triggerNewQuery(() => this.logClearAllToAnalytics());\n }\n\n private logClearAllToAnalytics() {\n this.logAnalyticsEvent(analyticsActionCauseList.dynamicFacetClearAll, this.basicAnalyticsFacetMeta);\n }\n}\n\nInitialization.registerAutoCreateComponent(DynamicFacet);\nDynamicFacet.doExport();\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacet.ts","import { isFunction } from 'underscore';\nimport { QueryStateModel, QueryEvents, Component } from '../Core';\nimport { MODEL_EVENTS } from '../models/Model';\nimport { ComponentsTypes } from './ComponentsTypes';\nimport { $$ } from './Dom';\nimport { InitializationEvents } from '../events/InitializationEvents';\n\nexport interface IDependsOnCompatibleFacetOptions {\n id?: string;\n dependsOn?: string;\n dependsOnCondition?: IDependentFacetCondition;\n}\n\nexport interface IDependsOnCompatibleFacet extends Component {\n options: IDependsOnCompatibleFacetOptions;\n}\n\nexport interface IDependentFacet {\n reset: () => void;\n ref: IDependsOnCompatibleFacet;\n}\n\nexport interface IDependentFacetCondition {\n (facet: IDependsOnCompatibleFacet): boolean;\n}\n\nexport class DependsOnManager {\n private parentFacetRef: IDependsOnCompatibleFacet;\n\n constructor(private facet: IDependentFacet) {\n $$(this.facet.ref.searchInterface.element).on(QueryEvents.buildingQuery, () => this.handleBuildingQuery());\n\n if (this.getDependsOn(this.facet.ref)) {\n this.facet.ref.bind.onRootElement(InitializationEvents.afterComponentsInitialization, () => this.setupDependentFacet());\n }\n }\n\n private setupDependentFacet() {\n $$(this.facet.ref.element).addClass('coveo-hidden-dependant-facet');\n this.parentFacetRef = this.getParentFacet(this.facet.ref);\n\n if (this.parentFacetRef) {\n this.facet.ref.bind.onQueryState(MODEL_EVENTS.CHANGE, undefined, () => this.resetIfConditionUnfullfiled());\n }\n }\n\n private resetIfConditionUnfullfiled() {\n const condition = this.getDependsOnCondition(this.facet.ref);\n\n if (!condition(this.parentFacetRef)) {\n this.facet.reset();\n }\n }\n\n private getId(component: IDependsOnCompatibleFacet) {\n const id = component.options.id;\n return id ? `${id}` : null;\n }\n\n private getDependsOn(component: IDependsOnCompatibleFacet) {\n const dependsOn = component.options.dependsOn;\n return dependsOn ? `${dependsOn}` : null;\n }\n\n private getDependsOnCondition(component: IDependsOnCompatibleFacet): IDependentFacetCondition {\n const conditionOption = component.options.dependsOnCondition;\n return conditionOption && isFunction(conditionOption) ? conditionOption : () => this.parentHasSelectedValues(component);\n }\n\n private parentHasSelectedValues(component: IDependsOnCompatibleFacet) {\n const parent = this.getParentFacet(component);\n return parent && this.valuesExistForFacetWithId(this.getId(parent));\n }\n\n private valuesExistForFacetWithId(facetId: string) {\n const values = this.facet.ref.queryStateModel.get(QueryStateModel.getFacetId(facetId));\n return !!values && !!values.length;\n }\n\n private get allFacetsInInterface() {\n return ComponentsTypes.getAllFacetsFromSearchInterface(this.facet.ref.searchInterface) as IDependsOnCompatibleFacet[];\n }\n\n private getParentFacet(component: IDependsOnCompatibleFacet) {\n const parent = this.allFacetsInInterface.filter(\n potentialParentFacet => this.getId(potentialParentFacet) === this.getDependsOn(component)\n );\n\n if (!parent.length) {\n component.logger.warn('DependsOn reference does not exist', this.getDependsOn(this.facet.ref));\n return null;\n }\n\n return parent[0];\n }\n\n private get dependentFacets() {\n return this.allFacetsInInterface.filter(\n potentialDependentFacet => this.getId(this.facet.ref) === this.getDependsOn(potentialDependentFacet)\n );\n }\n\n private handleBuildingQuery() {\n this.dependentFacets.forEach(dependentFacet => {\n const condition = this.getDependsOnCondition(dependentFacet);\n if (condition(this.facet.ref)) {\n $$(dependentFacet.element).removeClass('coveo-hidden-dependant-facet');\n return dependentFacet.enable();\n }\n\n dependentFacet.disable();\n $$(dependentFacet.element).addClass('coveo-hidden-dependant-facet');\n });\n }\n\n public get hasDependentFacets() {\n return !!this.dependentFacets.length;\n }\n\n public get dependentFacetsHaveSelectedValues() {\n return this.dependentFacets.some(dependentFacet => this.valuesExistForFacetWithId(this.getId(dependentFacet)));\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/DependsOnManager.ts","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { exportGlobally } from '../../GlobalExports';\nimport { Utils } from '../../Core';\nimport { Initialization } from '../Base/Initialization';\n\nexport interface IFacetsMobileModeOptions {\n breakpoint?: number;\n isModal?: boolean;\n displayOverlayWhileOpen?: boolean;\n preventScrolling?: boolean;\n scrollContainer?: HTMLElement;\n}\n\n/**\n * This component lets you customize the mobile responsive behavior of facets in your search interface.\n *\n * **Notes:**\n * - You can include this component anywhere under the root element of your search interface.\n * - You should only include this component once in your search interface.\n * - If you do not include this component in your search interface, facets will still have a default mobile responsive behavior.\n */\nexport class FacetsMobileMode extends Component {\n static ID = 'FacetsMobileMode';\n\n /**\n * @componentOptions\n */\n static options: IFacetsMobileModeOptions = {\n /**\n * The screen width (in number of pixels) at which facets should enter mobile responsive mode and be collapsed under a single button.\n *\n * **Default:** `800`\n */\n breakpoint: ComponentOptions.buildNumberOption(),\n /**\n * Whether to display the facets in a modal instead of a pop-up when the end user expands them in mobile responsive mode.\n */\n isModal: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n /**\n * Whether to display an overlay behind the facets when the end user expands them in mobile responsive mode.\n *\n * By default, the following behavior applies:\n * - `true` when [isModal]{@link FacetsMobileMode.options.isModal} is `false`\n * - `false` when [isModal]{@link FacetsMobileMode.options.isModal} is `true`\n */\n displayOverlayWhileOpen: ComponentOptions.buildBooleanOption({\n postProcessing: (value, options: IFacetsMobileModeOptions) => (Utils.isNullOrUndefined(value) ? !options.isModal : value)\n }),\n /**\n * Whether to disable vertical scrolling on the specified or resolved [`scrollContainer`]{@link FacetsMobileMode.options.scrollContainer} while facets are expanded in mobile responsive mode.\n *\n * By default, the following behavior applies:\n * - `true` when [isModal]{@link FacetsMobileMode.options.isModal} is `true`\n * - `false` when [isModal]{@link FacetsMobileMode.options.isModal} is `false`\n */\n preventScrolling: ComponentOptions.buildBooleanOption({\n postProcessing: (value, options: IFacetsMobileModeOptions) => (Utils.isNullOrUndefined(value) ? options.isModal : value)\n }),\n /**\n * The HTML element whose vertical scrolling should be locked while facets are expanded in mobile responsive mode.\n *\n * By default, the component tries to detect and use the first ancestor element whose CSS `overflow-y` attribute is set to `scroll`, starting from the `FacetsMobileMode`'s element itself. If no such element is found, the `document.body` element is used.\n *\n * Since this heuristic is not perfect, we strongly recommend that you manually set this option by explicitly specifying the desired CSS selector.\n *\n * **Example:** `data-scroll-container-selector='#someCssSelector'`\n */\n scrollContainer: ComponentOptions.buildChildHtmlElementOption({ depend: 'preventScrolling' })\n };\n\n static doExport = () => {\n exportGlobally({\n FacetsMobileMode: FacetsMobileMode\n });\n };\n\n public options: IFacetsMobileModeOptions;\n\n constructor(public element: HTMLElement, options?: IFacetsMobileModeOptions, bindings?: IComponentBindings) {\n super(element, FacetsMobileMode.ID, bindings);\n\n this.options = ComponentOptions.initComponentOptions(element, FacetsMobileMode, options);\n if (this.options.preventScrolling) {\n const scrollContainer = this.options.scrollContainer || this.searchInterface.element;\n this.options.scrollContainer = ComponentOptions.findParentScrollLockable(scrollContainer);\n }\n }\n}\n\nInitialization.registerAutoCreateComponent(FacetsMobileMode);\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/FacetsMobileMode/FacetsMobileMode.ts","import { FacetValueState } from './FacetValueState';\nimport { FacetSortCriteria } from './FacetSortCriteria';\nimport { IRangeValue } from '../RangeValue';\nimport { FacetRangeSortOrder } from './FacetRangeSortOrder';\n\n/**\n * The allowed values for the [`facetType`]{@link IFacetRequest.facetType} property of a [facet request]{@link IFacetRequest}.\n */\nexport enum FacetType {\n /**\n * Request facet values representing specific values.\n */\n specific = 'specific',\n /**\n * Request facet values representing ranges of numbers.\n */\n numericalRange = 'numericalRange',\n /**\n * Request facet values representing ranges of dates.\n */\n dateRange = 'dateRange',\n /**\n * Request facet values representing a hierarchy.\n */\n hierarchical = 'hierarchical'\n}\n\n/**\n * A [`currentValues`]{@link IFacetRequest.currentValues} item in a Search API\n * [facet request]{@link IFacetRequest}.\n */\nexport interface IFacetRequestValue extends IRangeValue {\n /**\n * The current facet value state in the search interface.\n *\n * **Default (Search API):** `idle`\n */\n state: FacetValueState;\n /**\n * **Required (Search API).** The facet value name.\n */\n value?: string;\n /**\n * Whether to prevent Coveo ML from automatically selecting the facet value.\n *\n * **Default:** `false`\n */\n preventAutoSelect?: boolean;\n /**\n * Whether to retrieve the children of this category facet value. Can only be used on leaf values in the request (i.e., values with no current children).\n *\n * **Default:** `false`\n */\n retrieveChildren?: boolean;\n /**\n * If [retrieveChildren]{@link IFacetRequestValue.retrieveChildren} is true, the maximum number of children to retrieve for this leaf value.\n *\n * **Default (Search API):** `0`\n */\n retrieveCount?: number;\n /**\n * The children of this category facet value.\n * Each child is a full-fledged category facet value that may in turn have its own children and so forth,\n * up to a maximum depth of 50 levels\n */\n children?: IFacetRequestValue[];\n}\n\n/**\n * A Search API facet request.\n */\nexport interface IFacetRequest {\n /**\n * The unique identifier of the facet in the search interface.\n *\n * **Note:** Must match `^[A-Za-z0-9-_]{1,60}$`.\n *\n * **Example:** `author-1`\n */\n facetId: string;\n\n /**\n * **Required (Search API).** The name of the field on which to base the\n * facet request.\n *\n * **Note:** Must reference an index field whose **Facet** option is enabled.\n *\n * **Example:** `author`\n */\n field: string;\n\n /**\n * The kind of values to request for the facet.\n *\n * **Default (Search API):** [`Specific`]{@link FacetType.Specific}\n */\n type?: FacetType;\n\n /**\n * The sort criterion to apply to the returned facet values.\n *\n * **Default behaviour when [`type`]{@link IFacetRequest.type} is set to [`specific`]{@link FaceType.Specific}\n * or [`hierarchical`]{@link FaceType.Hierarchical} (Search API):**\n * - When [`isFieldExpanded`]{@link IFacetRequest.isFieldExpanded} is `false`\n * in the facet request, and\n * [`moreValuesAvailable`]{@link IFacetResponse.moreValuesAvailable} is\n * `true` in the corresponding [facet response]{@link IFacetResponse}, use\n * `score`.\n * - Otherwise, use `alphanumeric`.\n *\n * **Default (Search API) when [`type`]{@link IFacetRequest.type} is set to [`dateRange`]{@link FaceType.dateRange}\n * or [`numericalRange`]{@link FacetType.numericalRange} (Search API)::** `ascending`\n * Other possible value: `descending`\n */\n sortCriteria?: FacetSortCriteria | FacetRangeSortOrder;\n\n /**\n * The maximum number of facet values to fetch.\n *\n * **Note:** If\n * [`freezeCurrentValues`]{@link IFacetRequest.freezeCurrentValues} is\n * `true`, `numberOfValues` must be equal to the\n * [`currentValues`]{@link IFacetRequest.currentValues} array length.\n *\n * **Default (Search API):** `8`\n */\n numberOfValues?: number;\n\n /**\n * The maximum number of items to scan for facet values.\n *\n * **Note:** A high `injectionDepth` may negatively impact the facet request\n * performance.\n *\n * **Default (Search API):** `1000`\n */\n injectionDepth?: number;\n\n /**\n * Whether to include the facet request's\n * [`currentValues`]{@link IFacetRequest.currentValues} in the corresponding\n * [facet response]{@link IFacetResponse}'s\n * [`values`]{@link IFacetResponse.values} array.\n *\n * **Note:** Setting this to `true` is useful to ensure that the facet does\n * not move around while the end-user is interacting with it in the search\n * interface.\n *\n * **Default (Search API):** `false`\n */\n freezeCurrentValues?: boolean;\n\n /**\n * The values displayed by the facet in the search interface at the moment of\n * the request.\n *\n * See [IFacetRequestValue]{@link IFacetRequestValue}.\n *\n * **Default (Search API):** `[]`\n */\n currentValues?: IFacetRequestValue[];\n\n /**\n * Whether the facet is expanded in the search interface at the moment of the\n * request.\n *\n * **Default (Search API):** `false`\n */\n isFieldExpanded?: boolean;\n\n /**\n * Whether to automatically generate range values for the facet.\n *\n * **Notes:**\n * - Setting this to `true` is only effective when [`type`]{@link IFacetRequest.type} is set to [`dateRange`]{@link FaceType.dateRange}\n * or [`numericalRange`]{@link FacetType.numericalRange}, and the referenced [`field`]{@link IFacetRequest.field} is of a corresponding type (i.e., date or numeric).\n * - Automatic range generation will fail if the referenced `field` is dynamically generated by a query function.\n * - Enabling the **Use cache for numeric queries** option on the referenced `field` will speed up automatic range generation (see [Add or Edit Fields](https://docs.coveo.com/en/1982/)).\n *\n * **Default (Search API):** `false`\n */\n generateAutomaticRanges?: boolean;\n\n /**\n * The character to use to split field values into a hierarchical sequence.\n *\n * **Example:**\n * For a multi-value field containing the following values: `c; c>folder2; c>folder2>folder3;`\n * The delimiting character is `>`.\n *\n * **Default (Search API):** `;`\n */\n delimitingCharacter?: string;\n\n /**\n * Whether to exclude folded result parents when estimating result counts for facet values.\n *\n * **Default (Search API):** `true`\n */\n filterFacetCount?: boolean;\n\n /**\n * The base path shared by all values for a given hierarchical facet.\n *\n * **Default (Search API):** `[]`\n */\n basePath?: string[];\n\n /**\n * Whether to use the [`basePath`]{@link FacetRequest.basePath} as a filter for the results.\n *\n * **Note:** This parameter is ignored unless the facet [`type`]{@link FacetRequest.type} is `hierarchical`.\n *\n * **Default (Search API):** `true`\n */\n filterByBasePath?: boolean;\n\n /**\n * Whether to prevent Coveo ML from automatically selecting values from that facet.\n *\n * **Default:** `false`\n */\n preventAutoSelect?: boolean;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/rest/Facet/FacetRequest.ts","import { IQueryResult } from '../../rest/QueryResult';\nimport { Component } from '../Base/Component';\nimport { IResultListOptions } from './ResultListOptions';\nimport _ = require('underscore');\n\nexport class ResultListRenderer {\n constructor(protected resultListOptions: IResultListOptions, protected autoCreateComponentsFn: Function) {}\n\n renderResults(\n resultElements: HTMLElement[],\n append = false,\n resultDisplayedCallback: (result: IQueryResult, resultElem: HTMLElement) => any\n ) {\n return Promise.all([this.getStartFragment(resultElements, append), this.getEndFragment(resultElements, append)]).then(\n ([startFrag, endFrag]) => {\n const resultsFragment = document.createDocumentFragment();\n if (startFrag) {\n resultsFragment.appendChild(startFrag);\n }\n _.each(resultElements, resultElement => {\n resultsFragment.appendChild(resultElement);\n resultDisplayedCallback(Component.getResult(resultElement), resultElement);\n });\n if (endFrag) {\n resultsFragment.appendChild(endFrag);\n }\n this.resultListOptions.resultsContainer.appendChild(resultsFragment);\n }\n );\n }\n\n protected getStartFragment(resultElements: HTMLElement[], append: boolean): Promise {\n return Promise.resolve(document.createDocumentFragment());\n }\n\n protected getEndFragment(resultElements: HTMLElement[], append: boolean): Promise {\n return Promise.resolve(document.createDocumentFragment());\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResultList/ResultListRenderer.ts","import 'styling/_ResponsiveFacets';\nimport { IQuerySuccessEventArgs, QueryEvents } from '../../events/QueryEvents';\nimport { Logger } from '../../misc/Logger';\nimport { l } from '../../strings/Strings';\nimport { $$, Dom } from '../../utils/Dom';\nimport { Utils } from '../../utils/Utils';\nimport { Component } from '../Base/Component';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { ResponsiveComponents } from './ResponsiveComponents';\nimport { IResponsiveComponent, IResponsiveComponentOptions, ResponsiveComponentsManager } from './ResponsiveComponentsManager';\nimport { ResponsiveComponentsUtils } from './ResponsiveComponentsUtils';\nimport { ResponsiveDropdown } from './ResponsiveDropdown/ResponsiveDropdown';\nimport { ResponsiveDropdownContent, IResponsiveDropdownContent } from './ResponsiveDropdown/ResponsiveDropdownContent';\nimport { ResponsiveDropdownHeader } from './ResponsiveDropdown/ResponsiveDropdownHeader';\nimport { each, debounce } from 'underscore';\nimport { ComponentsTypes } from '../../utils/ComponentsTypes';\nimport { ResponsiveDropdownModalContent } from './ResponsiveDropdown/ResponsiveDropdownModalContent';\nimport { FacetsMobileMode, IFacetsMobileModeOptions } from '../FacetsMobileMode/FacetsMobileMode';\nimport { FacetsMobileModeEvents } from '../../events/FacetsMobileModeEvents';\n\nexport class ResponsiveFacetColumn implements IResponsiveComponent {\n public static DEBOUNCE_SCROLL_WAIT = 250;\n\n private static DROPDOWN_MIN_WIDTH: number = 280;\n private static DROPDOWN_WIDTH_RATIO: number = 0.35; // Used to set the width relative to the coveo root.\n private static DROPDOWN_HEADER_LABEL_DEFAULT_VALUE = 'Filters';\n\n private searchInterface: SearchInterface;\n private componentsInFacetColumn: any[] = [];\n private preservePositionOriginalValues: boolean[] = [];\n private breakpoint: number;\n protected dropdown: ResponsiveDropdown;\n private dropdownHeaderLabel: string;\n\n public static init(responsiveComponentConstructor, root: HTMLElement, component, options: IResponsiveComponentOptions, ID: string) {\n const column = this.findColumn(root);\n if (!column) {\n return;\n }\n\n ResponsiveComponentsManager.register(ResponsiveFacetColumn, $$(root), 'ResponsiveFacetColumn', component, options);\n ResponsiveComponentsManager.register(responsiveComponentConstructor, $$(root), ID, component, options);\n }\n\n private static findColumn(root: HTMLElement) {\n const column = $$(root).find('.coveo-facet-column');\n if (!column) {\n const logger = new Logger('ResponsiveFacets');\n logger.info('No element with class coveo-facet-column. Responsive facets cannot be enabled');\n }\n return column;\n }\n\n constructor(public coveoRoot: Dom, public ID: string, options: IResponsiveComponentOptions, responsiveDropdown?: ResponsiveDropdown) {\n this.searchInterface = Component.get(this.coveoRoot.el, SearchInterface, false);\n this.dropdownHeaderLabel = this.getDropdownHeaderLabel();\n this.dropdown = this.buildDropdown(responsiveDropdown);\n this.bindDropdownContentEvents();\n this.bindFacetsMobileModeEvents();\n this.registerOnCloseHandler();\n this.registerQueryEvents();\n this.initializeBreakpoint(options.responsiveBreakpoint);\n }\n\n private get facetsMobileModeComponent() {\n return this.searchInterface ? this.searchInterface.getComponents(FacetsMobileMode.ID)[0] : null;\n }\n\n private get facetsMobileModeOptions(): IFacetsMobileModeOptions {\n const facetsMobileModeComponent = this.facetsMobileModeComponent;\n if (!facetsMobileModeComponent) {\n return {\n isModal: false,\n preventScrolling: false,\n displayOverlayWhileOpen: true\n };\n }\n return facetsMobileModeComponent.options;\n }\n\n public registerComponent(accept: Component) {\n this.componentsInFacetColumn.push(accept);\n this.preservePositionOriginalValues.push(accept.options.preservePosition);\n return true;\n }\n\n public needDropdownWrapper() {\n return this.needSmallMode();\n }\n\n public handleResizeEvent() {\n if (this.needSmallMode() && !ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {\n this.changeToSmallMode();\n } else if (!this.needSmallMode() && ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {\n this.changeToLargeMode();\n }\n if (this.dropdown.isOpened) {\n this.dropdown.dropdownContent.positionDropdown();\n }\n }\n\n public dismissFacetSearches() {\n each(this.componentsInFacetColumn, component => {\n if (component.facetSearch && component.facetSearch.currentlyDisplayedResults) {\n component.facetSearch.dismissSearchResults();\n }\n });\n }\n\n private needSmallMode(): boolean {\n if (!this.searchInterface) {\n return (\n this.coveoRoot.width() <=\n (Utils.isNullOrUndefined(this.breakpoint) ? new ResponsiveComponents().getMediumScreenWidth() : this.breakpoint)\n );\n }\n switch (this.searchInterface.responsiveComponents.getResponsiveMode()) {\n case 'small':\n case 'medium':\n return true;\n case 'auto':\n return (\n this.coveoRoot.width() <=\n (Utils.isNullOrUndefined(this.breakpoint) ? this.searchInterface.responsiveComponents.getMediumScreenWidth() : this.breakpoint)\n );\n default:\n return false;\n }\n }\n\n private changeToSmallMode() {\n this.dropdown.close();\n this.disableFacetPreservePosition();\n $$(this.coveoRoot.find(`.${ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS}`)).append(\n this.dropdown.dropdownHeader.element.el\n );\n ResponsiveComponentsUtils.activateSmallFacet(this.coveoRoot);\n }\n\n private changeToLargeMode() {\n this.restoreFacetPreservePositionValue();\n this.dropdown.cleanUp();\n ResponsiveComponentsUtils.deactivateSmallFacet(this.coveoRoot);\n }\n\n private buildDropdown(responsiveDropdown?: ResponsiveDropdown) {\n let dropdownContent = this.buildDropdownContent();\n let dropdownHeader = this.buildDropdownHeader();\n let dropdown = responsiveDropdown ? responsiveDropdown : new ResponsiveDropdown(dropdownContent, dropdownHeader, this.coveoRoot);\n if (!this.facetsMobileModeOptions.displayOverlayWhileOpen) {\n dropdown.disablePopupBackground();\n }\n if (this.facetsMobileModeOptions.preventScrolling) {\n dropdown.enableScrollLocking(this.facetsMobileModeOptions.scrollContainer);\n }\n return dropdown;\n }\n\n private buildDropdownContent(): IResponsiveDropdownContent {\n let dropdownContentElement = $$(this.coveoRoot.find('.coveo-facet-column'));\n let filterByContainer = $$('div', { className: 'coveo-facet-header-filter-by-container', style: 'display: none' });\n let filterBy = $$('div', { className: 'coveo-facet-header-filter-by' });\n filterBy.text(l('Filter by:'));\n filterByContainer.append(filterBy.el);\n dropdownContentElement.prepend(filterByContainer.el);\n if (this.facetsMobileModeOptions.isModal) {\n return new ResponsiveDropdownModalContent('facet', dropdownContentElement, l('CloseFiltersDropdown'), () => this.dropdown.close());\n }\n return new ResponsiveDropdownContent(\n 'facet',\n dropdownContentElement,\n this.coveoRoot,\n ResponsiveFacetColumn.DROPDOWN_MIN_WIDTH,\n ResponsiveFacetColumn.DROPDOWN_WIDTH_RATIO\n );\n }\n\n private buildDropdownHeader() {\n let dropdownHeaderElement = $$('a');\n let content = $$('p');\n content.text(this.dropdownHeaderLabel);\n dropdownHeaderElement.el.appendChild(content.el);\n let dropdownHeader = new ResponsiveDropdownHeader('facet', dropdownHeaderElement);\n return dropdownHeader;\n }\n\n private initializeBreakpoint(defaultBreakpoint: number) {\n const facetsMobileModeBreakpoint = this.facetsMobileModeOptions.breakpoint;\n this.breakpoint = Utils.isNullOrUndefined(facetsMobileModeBreakpoint) ? defaultBreakpoint : facetsMobileModeBreakpoint;\n }\n\n private registerOnCloseHandler() {\n this.dropdown.registerOnCloseHandler(this.dismissFacetSearches, this);\n }\n\n private registerQueryEvents() {\n this.coveoRoot.on(QueryEvents.noResults, () => this.handleNoResults());\n this.coveoRoot.on(QueryEvents.querySuccess, (e: Event, data: IQuerySuccessEventArgs) => this.handleQuerySuccess(data));\n this.coveoRoot.on(QueryEvents.queryError, () => this.handleQueryError());\n }\n\n private bindDropdownContentEvents() {\n this.dropdown.dropdownContent.element.on(\n 'scroll',\n debounce(() => {\n each(this.componentsInFacetColumn, component => {\n let facetSearch = component.facetSearch;\n if (facetSearch && facetSearch.currentlyDisplayedResults && !this.isFacetSearchScrolledIntoView(facetSearch.search)) {\n component.facetSearch.positionSearchResults(this.dropdown.dropdownContent.element.el);\n } else if (facetSearch && component.facetSearch.currentlyDisplayedResults) {\n component.facetSearch.positionSearchResults();\n }\n });\n }, ResponsiveFacetColumn.DEBOUNCE_SCROLL_WAIT)\n );\n }\n\n private bindFacetsMobileModeEvents() {\n const facetsMobileModeComponent = this.facetsMobileModeComponent;\n if (facetsMobileModeComponent) {\n this.dropdown.registerOnOpenHandler(\n () => $$(facetsMobileModeComponent.element).trigger(FacetsMobileModeEvents.popupOpened),\n facetsMobileModeComponent\n );\n this.dropdown.registerOnCloseHandler(\n () => $$(facetsMobileModeComponent.element).trigger(FacetsMobileModeEvents.popupClosed),\n facetsMobileModeComponent\n );\n }\n }\n\n private restoreFacetPreservePositionValue() {\n each(this.componentsInFacetColumn, (component, index) => {\n if (component.options) {\n component.options.preservePosition = this.preservePositionOriginalValues[index];\n }\n });\n }\n\n private disableFacetPreservePosition() {\n each(this.componentsInFacetColumn, component => {\n if (component.options) {\n component.options.preservePosition = false;\n }\n });\n }\n\n private isFacetSearchScrolledIntoView(facetSearchElement: HTMLElement) {\n let facetTop = facetSearchElement.getBoundingClientRect().top;\n let facetBottom = facetSearchElement.getBoundingClientRect().bottom;\n let dropdownTop = this.dropdown.dropdownContent.element.el.getBoundingClientRect().top;\n let dropdownBottom = this.dropdown.dropdownContent.element.el.getBoundingClientRect().bottom;\n\n dropdownTop = dropdownTop >= 0 ? dropdownTop : 0;\n\n return facetTop >= dropdownTop && facetBottom <= dropdownBottom;\n }\n\n private getDropdownHeaderLabel() {\n let dropdownHeaderLabel: string;\n ComponentsTypes.getAllFacetInstancesFromElement(this.coveoRoot.find('.coveo-facet-column')).forEach(facet => {\n const options = facet.options as IResponsiveComponentOptions;\n\n if (!dropdownHeaderLabel && options.dropdownHeaderLabel) {\n dropdownHeaderLabel = options.dropdownHeaderLabel;\n }\n });\n\n if (!dropdownHeaderLabel) {\n dropdownHeaderLabel = l(ResponsiveFacetColumn.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE);\n }\n\n return dropdownHeaderLabel;\n }\n\n private handleNoResults() {\n this.dropdown.dropdownHeader.hide();\n }\n\n private handleQueryError() {\n this.dropdown.dropdownHeader.hide();\n }\n\n private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n if (data.results.totalCount === 0) {\n this.dropdown.dropdownHeader.hide();\n } else {\n this.dropdown.dropdownHeader.show();\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResponsiveComponents/ResponsiveFacetColumn.ts","import { $$ } from '../../../utils/Dom';\n\nexport interface IDynamicFacetValueMoreLessButtonOptions {\n label: string;\n ariaLabel: string;\n className: string;\n action: () => void;\n}\n\nexport class DynamicFacetValueShowMoreLessButton {\n public element: HTMLElement;\n\n constructor(options: IDynamicFacetValueMoreLessButtonOptions) {\n const btn = $$(\n 'button',\n {\n className: options.className,\n ariaLabel: options.ariaLabel,\n type: 'button'\n },\n options.label\n );\n\n this.element = $$('li', null, btn).el;\n btn.on('click', () => options.action());\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValueMoreLessButton.ts","import * as Globalize from 'globalize';\nimport { IDynamicFacet, IDynamicFacetValueProperties, IValueRenderer, IValueRendererKlass, IDynamicFacetValue } from '../IDynamicFacet';\nimport { FacetValueState } from '../../../rest/Facet/FacetValueState';\nimport { analyticsActionCauseList, IAnalyticsFacetMeta } from '../../Analytics/AnalyticsActionListMeta';\nimport { l } from '../../../strings/Strings';\nimport { RangeType } from '../../../rest/RangeValue';\nimport { FacetType } from '../../../rest/Facet/FacetRequest';\nimport { IAnalyticsFacetState } from '../../Analytics/IAnalyticsFacetState';\n\nexport class DynamicFacetValue implements IDynamicFacetValue {\n public value: string;\n public start: RangeType;\n public end: RangeType;\n public endInclusive: boolean;\n public state: FacetValueState;\n public numberOfResults: number;\n public position: number;\n public displayValue: string;\n public renderer: IValueRenderer;\n private element: HTMLElement = null;\n\n constructor(facetValue: IDynamicFacetValueProperties, private facet: IDynamicFacet, rendererKlass: IValueRendererKlass) {\n this.value = facetValue.value;\n this.start = facetValue.start;\n this.end = facetValue.end;\n this.endInclusive = facetValue.endInclusive;\n this.state = facetValue.state;\n this.numberOfResults = facetValue.numberOfResults;\n this.position = facetValue.position;\n this.displayValue = facetValue.displayValue;\n this.renderer = new rendererKlass(this, facet);\n }\n\n public get isSelected() {\n return this.state === FacetValueState.selected;\n }\n\n public get isIdle() {\n return this.state === FacetValueState.idle;\n }\n\n public toggleSelect() {\n this.state === FacetValueState.selected ? this.deselect() : this.select();\n }\n\n public select() {\n this.state = FacetValueState.selected;\n }\n\n public deselect() {\n this.state = FacetValueState.idle;\n }\n\n public equals(arg: string | IDynamicFacetValue) {\n const value = typeof arg === 'string' ? arg : arg.value;\n return value.toLowerCase() === this.value.toLowerCase();\n }\n\n public get formattedCount(): string {\n return Globalize.format(this.numberOfResults, 'n0');\n }\n\n public get selectAriaLabel() {\n const resultCount = l('ResultCount', this.formattedCount, this.numberOfResults);\n\n return `${l('IncludeValueWithResultCount', this.displayValue, resultCount)}`;\n }\n\n private get isRange() {\n return this.facet.facetType !== FacetType.specific;\n }\n\n private get analyticsValue() {\n return this.isRange ? `${this.start}..${this.end}` : this.value;\n }\n\n private get rangeFacetState() {\n if (!this.isRange) {\n return null;\n }\n\n return {\n start: `${this.start}`,\n end: `${this.end}`,\n endInclusive: this.endInclusive\n };\n }\n\n public get analyticsFacetState(): IAnalyticsFacetState {\n return {\n ...this.facet.basicAnalyticsFacetState,\n ...this.rangeFacetState,\n value: this.analyticsValue,\n valuePosition: this.position,\n displayValue: this.displayValue,\n state: this.state\n };\n }\n\n private get rangeFacetMeta() {\n if (!this.isRange) {\n return null;\n }\n\n return {\n facetRangeStart: `${this.start}`,\n facetRangeEnd: `${this.end}`,\n facetRangeEndInclusive: this.endInclusive\n };\n }\n\n public get analyticsFacetMeta(): IAnalyticsFacetMeta {\n return {\n ...this.facet.basicAnalyticsFacetMeta,\n ...this.rangeFacetMeta,\n facetValue: this.analyticsValue\n };\n }\n\n public logSelectActionToAnalytics() {\n const action =\n this.state === FacetValueState.selected ? analyticsActionCauseList.dynamicFacetSelect : analyticsActionCauseList.dynamicFacetDeselect;\n\n this.facet.logAnalyticsEvent(action, this.analyticsFacetMeta);\n }\n\n private render() {\n this.element = this.renderer.render();\n return this.element;\n }\n\n public get renderedElement() {\n if (this.element) {\n return this.element;\n }\n\n return this.render();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValue.ts","import { Component } from '../Base/Component';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { QueryEvents, IQuerySuccessEventArgs, IDoneBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { exportGlobally } from '../../GlobalExports';\nimport { find, without, partition } from 'underscore';\nimport { IFacetResponse } from '../../rest/Facet/FacetResponse';\nimport { $$ } from '../../utils/Dom';\nimport { Utils } from '../../utils/Utils';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Assert } from '../../misc/Assert';\nimport { Initialization } from '../Base/Initialization';\nimport { ComponentsTypes } from '../../utils/ComponentsTypes';\nimport { QueryBuilder } from '../Base/QueryBuilder';\nimport { IAutoLayoutAdjustableInsideFacetColumn } from '../SearchInterface/FacetColumnAutoLayoutAdjustment';\nimport { IQueryResults } from '../../rest/QueryResults';\n\nexport interface IDynamicFacetManagerOptions {\n enableReorder?: boolean;\n onUpdate?: IDynamicFacetManagerOnUpdate;\n compareFacets?: IDynamicFacetManagerCompareFacet;\n maximumNumberOfExpandedFacets?: number;\n}\n\nexport interface IDynamicFacetManagerOnUpdate {\n (facet: IDynamicManagerCompatibleFacet, index: number): void;\n}\n\nexport interface IDynamicFacetManagerCompareFacet {\n (facetA: IDynamicManagerCompatibleFacet, facetB: IDynamicManagerCompatibleFacet): number;\n}\n\nexport interface IDynamicManagerCompatibleFacet extends Component, IAutoLayoutAdjustableInsideFacetColumn {\n dynamicFacetManager: DynamicFacetManager;\n hasActiveValues: boolean;\n isDynamicFacet: boolean;\n\n handleQueryResults(results: IQueryResults): void;\n putStateIntoQueryBuilder(queryBuilder: QueryBuilder): void;\n putStateIntoAnalytics(): void;\n expand(): void;\n collapse(): void;\n}\n\n/**\n * The `DynamicFacetManager` component is meant to be a parent for multiple [DynamicFacet]{@link DynamicFacet} & [DynamicFacetRange]{@link DynamicFacetRange} components.\n * This component allows controlling a set of [`DynamicFacet`]{@link DynamicFacet} and [`DynamicFacetRange`]{@link DynamicFacetRange} as a group.\n *\n * @externaldocs [Using Dynamic Facets](https://docs.coveo.com/en/2917/).\n * @availablesince [May 2019 Release (v2.6063)](https://docs.coveo.com/en/2909/)\n */\nexport class DynamicFacetManager extends Component {\n static ID = 'DynamicFacetManager';\n static doExport = () => exportGlobally({ DynamicFacetManager });\n\n /**\n * The options for the DynamicFacetManager\n * @componentOptions\n */\n static options: IDynamicFacetManagerOptions = {\n /**\n * Whether to allow the reordering of facets based on Coveo ML and index ranking scores.\n *\n * **Default:** `true`\n */\n enableReorder: ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'Filtering' }),\n /**\n * A function to execute whenever facets are updated in the query response @externaldocs [Defining Custom Dynamic Facet Behaviors](https://docs.coveo.com/en/2917/javascript-search-framework/using-dynamic-facets#defining-custom-dynamic-facet-behaviors).\n *\n * **Note:**\n * > You cannot set this option directly in the component markup as an HTML attribute. You must either set it in the\n * > [`init`]{@link init} call of your search interface (see\n * > [Passing Component Options in the init Call](https://developers.coveo.com/x/PoGfAQ#Components-PassingComponentOptionsintheinitCall)),\n * > or before the `init` call, using the `options` top-level function (see\n * > [Passing Component Options Before the init Call](https://developers.coveo.com/x/PoGfAQ#Components-PassingComponentOptionsBeforetheinitCall)).\n */\n onUpdate: ComponentOptions.buildCustomOption(() => {\n return null;\n }),\n /**\n * A custom sort function to execute on facets on every successful query response @externaldocs [Using Custom Dynamic Facet Sort Functions](https://docs.coveo.com/en/2917/javascript-search-framework/using-dynamic-facets#using-custom-dynamic-facet-sort-functions).\n *\n * **Note:**\n * > If specified, the function must implement the JavaScript compareFunction (see [Array.prototype.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort).\n * > You cannot set this option directly in the component markup as an HTML attribute. You must either set it in the\n * > [`init`]{@link init} call of your search interface (see\n * > [Passing Component Options in the init Call](https://developers.coveo.com/x/PoGfAQ#Components-PassingComponentOptionsintheinitCall)),\n * > or before the `init` call, using the `options` top-level function (see\n * > [Passing Component Options Before the init Call](https://developers.coveo.com/x/PoGfAQ#Components-PassingComponentOptionsBeforetheinitCall)).\n */\n compareFacets: ComponentOptions.buildCustomOption(() => {\n return null;\n }),\n /**\n * The maximum number of expanded facets inside the manager.\n * Remaining facets are collapsed.\n *\n * **Note:**\n * Prioritizes facets with active values, and then prioritizes first facets.\n * If the number of facets with active values exceeds the value of the `maximumNumberOfExpandedFacets` option, it overrides the option.\n *\n * Using the value `-1` disables the feature and keeps all facets expanded.\n *\n * @availablesince [September 2019 Release (v2.7023)](https://docs.coveo.com/en/2990/)\n */\n maximumNumberOfExpandedFacets: ComponentOptions.buildNumberOption({ defaultValue: 4, min: -1 })\n };\n\n private childrenFacets: IDynamicManagerCompatibleFacet[] = [];\n private containerElement: HTMLElement;\n\n private get enabledFacets() {\n return this.childrenFacets.filter(facet => !facet.disabled);\n }\n\n private get displayedFacets() {\n return this.childrenFacets.filter(facet => facet.isCurrentlyDisplayed());\n }\n\n /**\n * Creates a new `DynamicFacetManager` instance.\n *\n * @param element The element from which to instantiate the component.\n * @param options The component options.\n * @param bindings The component bindings. Automatically resolved by default.\n */\n constructor(element: HTMLElement, public options?: IDynamicFacetManagerOptions) {\n super(element, 'DynamicFacetManager');\n this.options = ComponentOptions.initComponentOptions(element, DynamicFacetManager, options);\n this.resetContainer();\n this.prependContainer();\n this.initEvents();\n }\n\n private resetContainer() {\n this.containerElement && $$(this.containerElement).remove();\n this.containerElement = $$('div', { className: 'coveo-dynamic-facet-manager-container' }).el;\n }\n\n private prependContainer() {\n $$(this.element).prepend(this.containerElement);\n }\n\n private initEvents() {\n this.bind.onRootElement(InitializationEvents.afterComponentsInitialization, () => this.handleAfterComponentsInitialization());\n this.bind.onRootElement(QueryEvents.doneBuildingQuery, (data: IDoneBuildingQueryEventArgs) => this.handleDoneBuildingQuery(data));\n this.bind.onRootElement(QueryEvents.deferredQuerySuccess, (data: IQuerySuccessEventArgs) => this.handleQuerySuccess(data));\n }\n\n private isDynamicFacet(component: Component) {\n return !!(component as IDynamicManagerCompatibleFacet).isDynamicFacet;\n }\n\n private get allDynamicFacets(): IDynamicManagerCompatibleFacet[] {\n const allFacetsInComponent = ComponentsTypes.getAllFacetInstancesFromElement(this.element);\n return allFacetsInComponent.filter(this.isDynamicFacet);\n }\n\n private handleAfterComponentsInitialization() {\n this.childrenFacets = this.allDynamicFacets;\n this.childrenFacets.forEach(dynamicFacet => {\n dynamicFacet.dynamicFacetManager = this;\n this.containerElement.appendChild(dynamicFacet.element);\n });\n\n if (this.element.children.length > 1) {\n this.logger.warn(`DynamicFacetManager contains incompatible elements. Those elements may be moved in the DOM.\n To prevent this warning, move those elements outside of the DynamicFacetManager.`);\n }\n\n if (!this.childrenFacets.length) {\n this.disable();\n }\n }\n\n private handleDoneBuildingQuery(data: IDoneBuildingQueryEventArgs) {\n Assert.exists(data);\n Assert.exists(data.queryBuilder);\n\n this.enabledFacets.forEach(dynamicFacet => {\n dynamicFacet.putStateIntoQueryBuilder(data.queryBuilder);\n dynamicFacet.putStateIntoAnalytics();\n });\n }\n\n private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n if (Utils.isNullOrUndefined(data.results.facets)) {\n return this.notImplementedError();\n }\n\n this.enabledFacets.forEach(dynamicFacet => {\n dynamicFacet.handleQueryResults(data.results);\n });\n\n const wasFacetOrderFrozen = data.query.facetOptions && data.query.facetOptions.freezeFacetOrder;\n if (wasFacetOrderFrozen) {\n return this.callOnUpdateOnChildrenFacets();\n }\n\n if (this.options.enableReorder) {\n this.options.compareFacets ? this.sortFacetsWithCompareOption() : this.sortFacetsWithResponseOrder(data.results.facets);\n this.reorderFacetsInDom();\n }\n\n this.respectMaximumExpandedFacetsThreshold();\n this.callOnUpdateOnChildrenFacets();\n }\n\n private callOnUpdateOnChildrenFacets() {\n if (!this.options.onUpdate) {\n return;\n }\n\n this.childrenFacets.forEach((dynamicFacet, index) => this.options.onUpdate(dynamicFacet, index));\n }\n\n private sortFacetsWithResponseOrder(facetsResponse: IFacetResponse[]) {\n const facetsInResponse = facetsResponse.map(({ facetId }) => this.getChildFacetWithId(facetId)).filter(Utils.exists);\n const facetsNotInResponse = without(this.childrenFacets, ...facetsInResponse);\n\n this.childrenFacets = [...facetsInResponse, ...facetsNotInResponse];\n }\n\n private sortFacetsWithCompareOption() {\n this.childrenFacets = this.childrenFacets.sort(this.options.compareFacets);\n }\n\n private reorderFacetsInDom() {\n this.resetContainer();\n const fragment = document.createDocumentFragment();\n\n this.childrenFacets.forEach(dynamicFacet => fragment.appendChild(dynamicFacet.element));\n\n this.containerElement.appendChild(fragment);\n this.prependContainer();\n }\n\n private respectMaximumExpandedFacetsThreshold() {\n if (this.options.maximumNumberOfExpandedFacets === -1) {\n return;\n }\n\n const [collapsableFacets, uncollapsableFacets] = partition(this.displayedFacets, facet => facet.options.enableCollapse);\n let facetsLeftToExpandCounter = this.options.maximumNumberOfExpandedFacets - uncollapsableFacets.length;\n\n collapsableFacets.forEach(dynamicFacet => {\n if (facetsLeftToExpandCounter < 1) {\n return dynamicFacet.collapse();\n }\n\n if (dynamicFacet.options.collapsedByDefault) {\n dynamicFacet.logger.info(\n 'The facet has its \"collapsedByDefault\" option set to \"true\", which prevents the DynamicFacetManager from expanding it.',\n 'While this configuration may be legitimate, it partially defeats the purpose of the dynamic navigation experience feature.',\n 'For more information, see https://docs.coveo.com/en/2917/.'\n );\n return dynamicFacet.collapse();\n }\n\n facetsLeftToExpandCounter--;\n dynamicFacet.expand();\n });\n }\n\n private getChildFacetWithId(id: string) {\n return find(this.childrenFacets, facet => facet.options.id === id);\n }\n\n private notImplementedError() {\n this.logger.error('DynamicFacetManager is not supported by your current search endpoint. Disabling this component.');\n this.disable();\n }\n\n public isCurrentlyDisplayed() {\n return !!find(this.childrenFacets, facet => facet.isCurrentlyDisplayed());\n }\n}\n\nInitialization.registerAutoCreateComponent(DynamicFacetManager);\nDynamicFacetManager.doExport();\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacetManager/DynamicFacetManager.ts","/// \nimport { StringUtils } from '../../utils/StringUtils';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { FileTypes } from '../Misc/FileTypes';\nimport { DateUtils } from '../../utils/DateUtils';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\nimport * as _ from 'underscore';\nimport FacetModuleDefinition = require('./Facet');\nimport { l } from '../../strings/Strings';\n\nexport class FacetUtils {\n static getRegexToUseForFacetSearch(value: string, ignoreAccent: boolean) {\n return new RegExp(StringUtils.stringToRegex(value, ignoreAccent), 'i');\n }\n\n static getDisplayValueFromValueCaption(value: string, field: string, valueCaption: Record) {\n const returnValue = this.tryToGetTranslatedCaption(field, value);\n return valueCaption[value] || returnValue;\n }\n\n static getValuesToUseForSearchInFacet(original: string, facet: FacetModuleDefinition.Facet): string[] {\n let ret = [original];\n let regex = this.getRegexToUseForFacetSearch(original, facet.options.facetSearchIgnoreAccents);\n if (facet.options.valueCaption) {\n _.chain(facet.options.valueCaption)\n .pairs()\n .filter(pair => {\n return regex.test(pair[1]);\n })\n .each(match => {\n ret.push(match[0]);\n });\n if (\n QueryUtils.isStratusAgnosticField(facet.options.field, '@objecttype') ||\n QueryUtils.isStratusAgnosticField(facet.options.field, '@filetype')\n ) {\n _.each(FileTypes.getFileTypeCaptions(), (value: string, key: string) => {\n if (!(key in facet.options.valueCaption) && regex.test(value)) {\n ret.push(key);\n }\n });\n }\n } else if (\n QueryUtils.isStratusAgnosticField(facet.options.field, '@objecttype') ||\n QueryUtils.isStratusAgnosticField(facet.options.field, '@filetype')\n ) {\n _.each(\n _.filter(_.pairs(FileTypes.getFileTypeCaptions()), pair => {\n return regex.test(pair[1]);\n }),\n match => {\n ret.push(match[0]);\n }\n );\n } else if (QueryUtils.isStratusAgnosticField(facet.options.field, '@month')) {\n _.each(_.range(1, 13), month => {\n if (regex.test(DateUtils.monthToString(month - 1))) {\n ret.push(('0' + month.toString()).substr(-2));\n }\n });\n }\n return ret;\n }\n\n static buildFacetSearchPattern(values: string[]) {\n values = _.map(values, value => {\n return Utils.escapeRegexCharacter(value);\n });\n values[0] = '.*' + values[0] + '.*';\n return values.join('|');\n }\n\n static needAnotherFacetSearch(\n currentSearchLength: number,\n newSearchLength: number,\n oldSearchLength: number,\n desiredSearchLength: number\n ) {\n // Something was removed (currentSearch < newSearch)\n // && we might want to display more facet search result(currentSearch < desiredSearch)\n // && the new query returned more stuff than the old one so there's still more results(currentSearchLength > oldLength)\n return currentSearchLength < newSearchLength && currentSearchLength < desiredSearchLength && currentSearchLength > oldSearchLength;\n }\n\n static addNoStateCssClassToFacetValues(facet: FacetModuleDefinition.Facet, container: HTMLElement) {\n // This takes care of adding the correct css class on each facet value checkbox (empty white box) if at least one value is selected in that facet\n if (facet.values.getSelected().length != 0) {\n let noStates = $$(container).findAll('li:not(.coveo-selected)');\n _.each(noStates, noState => {\n $$(noState).addClass('coveo-no-state');\n });\n }\n }\n\n static tryToGetTranslatedCaption(field: string, value: string) {\n let found: string;\n\n if (QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@filetype')) {\n found = FileTypes.getFileType(value).caption;\n } else if (QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@objecttype')) {\n found = FileTypes.getObjectType(value).caption;\n } else if (FacetUtils.isMonthFieldValue(field, value)) {\n const month = parseInt(value, 10);\n found = DateUtils.monthToString(month - 1);\n } else {\n found = l(value);\n }\n return found != undefined && Utils.isNonEmptyString(found) ? found : value;\n }\n\n static isMonthFieldValue(field: string, value: string) {\n if (!QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@month')) {\n return false;\n }\n\n const asInt = parseInt(value, 10);\n\n if (isNaN(asInt)) {\n return false;\n }\n\n if (asInt < 1 || asInt > 12) {\n return false;\n }\n\n return true;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Facet/FacetUtils.ts","import { Template, TemplateRole } from './Template';\nimport { TemplateList } from './TemplateList';\nimport _ = require('underscore');\n\nexport class TableTemplate extends TemplateList {\n instantiateRoleToString(role: TemplateRole) {\n const roledTemplate = _.find(this.templates, t => t.role === role);\n if (roledTemplate) {\n return roledTemplate.instantiateToString(undefined, {});\n } else {\n return this.defaultRoledTemplates[role];\n }\n }\n instantiateRoleToElement(role: TemplateRole) {\n const roledTemplate = _.find(this.templates, t => t.role === role);\n if (roledTemplate) {\n return roledTemplate.instantiateToElement(undefined, {});\n } else {\n const tmpl = new Template(() => this.defaultRoledTemplates[role]);\n tmpl.layout = 'table';\n return tmpl.instantiateToElement(undefined);\n }\n }\n\n private defaultTemplate = `\n \n `;\n\n private defaultRoledTemplates = {\n 'table-header': `Link\n Excerpt\n Date`,\n 'table-footer': `Link\n Excerpt\n Date`\n };\n\n protected getFallbackTemplate(): Template {\n return new Template(() => this.defaultTemplate);\n }\n\n hasTemplateWithRole(role: TemplateRole) {\n return _.find(this.templates, t => t.role === role);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Templates/TableTemplate.ts","import { Template } from './Template';\nimport { IQueryResult } from '../../rest/QueryResult';\n\nexport class DefaultRecommendationTemplate extends Template {\n instantiateToString(object?: IQueryResult): string {\n var template = `
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
`;\n return template;\n }\n\n instantiateToElement(object?: IQueryResult): Promise {\n return new Promise((resolve, reject) => {\n var div = document.createElement('div');\n div.innerHTML = this.instantiateToString(object);\n resolve(div);\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Templates/DefaultRecommendationTemplate.ts","import { IQueryResults } from '../../rest/QueryResults';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Assert, QueryUtils, Component, Initialization, QueryStateModel } from '../../Core';\nimport { IInitResult } from '../Base/Initialization';\nimport { Template } from './Template';\nimport { SearchInterface } from '../../ui/SearchInterface/SearchInterface';\nimport { ResultList } from '../ResultList/ResultList';\nimport { RendererValidLayout } from '../ResultLayoutSelector/ValidLayout';\nimport { pluck, sortBy, map } from 'underscore';\nimport { $$ } from '../../utils/Dom';\nimport { Logger } from '../../misc/Logger';\n\nexport interface ITemplateToHtml {\n resultTemplate: Template;\n queryStateModel: QueryStateModel;\n searchInterface: SearchInterface;\n}\n\nexport class TemplateToHtml {\n constructor(public args: ITemplateToHtml) {}\n\n public async buildResults(\n results: IQueryResults,\n layout: RendererValidLayout,\n currentlyDisplayedResults: IQueryResult[]\n ): Promise {\n const res: { elem: HTMLElement; idx: number }[] = [];\n const resultsPromises = map(results.results, (result: IQueryResult, index: number) => {\n return this.buildResult(result, layout, currentlyDisplayedResults).then((resultElement: HTMLElement) => {\n if (resultElement != null) {\n res.push({ elem: resultElement, idx: index });\n }\n ResultList.resultCurrentlyBeingRendered = null;\n return resultElement;\n });\n });\n\n // We need to sort by the original index order, because in lazy loading mode, it's possible that results does not gets rendered\n // in the correct order returned by the index, depending on the time it takes to load all the results component for a given result template\n return Promise.all(resultsPromises).then(() => {\n return pluck(sortBy(res, 'idx'), 'elem');\n });\n }\n\n public async buildResult(\n result: IQueryResult,\n layout: RendererValidLayout,\n currentlyDisplayedResults: IQueryResult[]\n ): Promise {\n Assert.exists(result);\n QueryUtils.setStateObjectOnQueryResult(this.args.queryStateModel.get(), result);\n QueryUtils.setSearchInterfaceObjectOnQueryResult(this.args.searchInterface, result);\n ResultList.resultCurrentlyBeingRendered = result;\n const resultElement = await this.createHtmlElement(result, layout);\n\n if (resultElement != null) {\n Component.bindResultToElement(resultElement, result);\n }\n currentlyDisplayedResults.push(result);\n\n await this.autoCreateComponentsInsideResult(resultElement, result).initResult;\n\n this.verifyChildren(resultElement);\n return resultElement;\n }\n\n public autoCreateComponentsInsideResult(element: HTMLElement, result: IQueryResult): IInitResult {\n Assert.exists(element);\n return Initialization.automaticallyCreateComponentsInsideResult(element, result);\n }\n\n private createHtmlElement(result: IQueryResult, layout: RendererValidLayout) {\n return this.args.resultTemplate.instantiateToElement(result, {\n wrapInDiv: true,\n checkCondition: true,\n currentLayout: layout,\n responsiveComponents: this.args.searchInterface.responsiveComponents\n });\n }\n\n private verifyChildren(element: HTMLElement) {\n const containsResultLink = !!$$(element).find('.CoveoResultLink');\n if (containsResultLink) {\n return;\n }\n\n const msg = `Result does not contain a \"CoveoResultLink\" component, please verify the result template`;\n new Logger(element).warn(msg, this.args.resultTemplate);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Templates/TemplateToHtml.ts","import { Defer } from '../../misc/Defer';\nimport { sortBy, without } from 'underscore';\nimport { $$ } from '../../utils/Dom';\n\nexport class FocusTrap {\n private focusInEvent: (e: FocusEvent) => void;\n private focusOutEvent: (e: FocusEvent) => void;\n private hiddenElements: HTMLElement[];\n private enabled: boolean;\n\n private get focusableElements(): HTMLElement[] {\n return sortBy(this.container.querySelectorAll('[tabindex]'), element => element.tabIndex);\n }\n\n constructor(private container: HTMLElement) {\n this.hiddenElements = [];\n this.enable();\n }\n\n public disable() {\n document.removeEventListener('focusin', this.focusInEvent);\n document.removeEventListener('focusout', this.focusOutEvent);\n this.showHiddenElements();\n this.enabled = false;\n }\n\n private enable() {\n document.addEventListener('focusin', (this.focusInEvent = e => this.onFocusIn(e)));\n document.addEventListener('focusout', (this.focusOutEvent = e => this.onFocusOut(e)));\n this.hideAllExcept(this.container);\n this.enabled = true;\n }\n\n private showHiddenElements() {\n while (this.hiddenElements.length) {\n this.hiddenElements.pop().removeAttribute('aria-hidden');\n }\n }\n\n private hideElement(element: HTMLElement) {\n if (element.getAttribute('aria-hidden')) {\n return;\n }\n this.hiddenElements.push(element);\n element.setAttribute('aria-hidden', `${true}`);\n }\n\n private hideSiblings(allowedElement: HTMLElement) {\n const parent = allowedElement.parentElement;\n if (parent) {\n without($$(parent).children(), allowedElement).forEach(elementToHide => {\n this.hideElement(elementToHide);\n });\n }\n }\n\n private hideAllExcept(allowedElement: HTMLElement) {\n this.hideSiblings(allowedElement);\n const parent = allowedElement.parentElement;\n if (parent && parent !== document.body) {\n this.hideAllExcept(parent);\n }\n }\n\n private getFocusableSibling(element: HTMLElement, previous = false) {\n const elements = this.focusableElements;\n const currentIndex = elements.indexOf(element);\n if (currentIndex === -1) {\n return null;\n }\n return elements[(currentIndex + (previous ? -1 : 1) + elements.length) % elements.length];\n }\n\n private focusSibling(element: HTMLElement, previous = false) {\n const sibling = this.getFocusableSibling(element, previous);\n if (sibling) {\n sibling.focus();\n }\n }\n\n private focusFirstElement() {\n const elements = this.focusableElements;\n if (elements.length) {\n elements[0].focus();\n }\n }\n\n private elementIsBefore(oldElement: HTMLElement, newElement: HTMLElement) {\n if (!newElement) {\n return false;\n }\n return oldElement.compareDocumentPosition(newElement) === Node.DOCUMENT_POSITION_PRECEDING;\n }\n\n private onLosingFocus(oldElement: HTMLElement, newElement: HTMLElement) {\n Defer.defer(() => {\n if (!this.enabled) {\n return;\n }\n this.enabled = false;\n if (oldElement && this.focusIsAllowed(oldElement)) {\n this.focusSibling(oldElement, this.elementIsBefore(oldElement, newElement));\n } else {\n this.focusFirstElement();\n }\n this.enabled = true;\n });\n }\n\n private focusIsAllowed(element: HTMLElement) {\n return this.container.contains(element);\n }\n\n private elementIsInPage(element: HTMLElement) {\n return element && element !== document.body.parentElement;\n }\n\n private onFocusIn(e: FocusEvent) {\n if (!this.enabled) {\n return;\n }\n const oldElement = e.relatedTarget as HTMLElement;\n const handledByFocusOut = this.elementIsInPage(oldElement);\n if (handledByFocusOut) {\n return;\n }\n const newElement = e.target as HTMLElement;\n if (!this.elementIsInPage(newElement)) {\n return;\n }\n if (!this.focusIsAllowed(newElement)) {\n this.onLosingFocus(null, newElement);\n }\n }\n\n private onFocusOut(e: FocusEvent) {\n if (!this.enabled) {\n return;\n }\n const newElement = e.relatedTarget as HTMLElement;\n if (!this.elementIsInPage(newElement)) {\n return;\n }\n if (!newElement || !this.focusIsAllowed(newElement)) {\n this.onLosingFocus(e.target as HTMLElement, newElement);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/FocusTrap/FocusTrap.ts","import { TemplateHelpers, ITemplateHelperFunction } from './TemplateHelpers';\nimport { IHighlight, IHighlightPhrase, IHighlightTerm } from '../../rest/Highlight';\nimport { HighlightUtils, StringAndHoles } from '../../utils/HighlightUtils';\nimport { IStreamHighlightOptions } from '../../utils/StreamHighlightUtils';\nimport { IDateToStringOptions, DateUtils } from '../../utils/DateUtils';\nimport { ICurrencyToStringOptions, CurrencyUtils } from '../../utils/CurrencyUtils';\nimport { IAnchorUtilsOptions, IImageUtilsOptions, AnchorUtils, ImageUtils } from '../../utils/HtmlUtils';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { TimeSpan, ITimeSpanUtilsOptions } from '../../utils/TimeSpanUtils';\nimport { EmailUtils } from '../../utils/EmailUtils';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { $$ } from '../../utils/Dom';\nimport { SearchEndpoint } from '../../rest/SearchEndpoint';\nimport { StreamHighlightUtils } from '../../utils/StreamHighlightUtils';\nimport { FacetUtils } from '../Facet/FacetUtils';\nimport * as Globalize from 'globalize';\nimport { IStringMap } from '../../rest/GenericParam';\nimport * as _ from 'underscore';\nimport { Component } from '../Base/Component';\nimport { TemplateCache } from './TemplateCache';\nimport { INumberFormatOptions } from '../../utils/NumberUtils';\n\n/**\n * The core template helpers provided by default.\n *\n * **Examples:**\n *\n * **HTML**\n *\n * ```html\n *
\n * ```\n *\n * **Underscore**\n *\n * ```erb\n * <%= timeSpan(raw.videoduration, { isMilliseconds: false }) %>\n * ```\n */\nexport interface ICoreHelpers {\n /**\n * Shortens a string so that its length does not exceed a specific number of\n * characters. An ellipsis is appended to the string if it exceeds the\n * maximum length.\n *\n * - `content`: The string to shorten.\n * - `length`: The maximum length of the resulting string.\n * - `highlights`: Optional. If provided, the string will be highlighted\n * using this highlight information.\n * - `cssClass`: Optional. When highlighting, the name of the CSS class to use.\n */\n shorten: (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => string;\n /**\n * Shortens a string using an algorithm suitable for file paths. The helper\n * will insert an ellipsis in the string where text has been removed when\n * the path exceeds the maximum length.\n *\n * - `content`: The path to shorten.\n * - `length`: The maximum length of the resulting string.\n * - `highlights`: Optional. If provided, the string will be highlighted using\n * this highlight information.\n * - `cssClass`: Optional. When highlighting, the name of the CSS class to use.\n */\n shortenPath: (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => string;\n /**\n * Shortens a string using an algorithm suitable for URIs. The helper will\n * insert an ellipsis in the string where text has been removed when the URI\n * exceeds the maximum length.\n *\n * - `content`: The URI to shorten.\n * - `length`: The maximum length of the resulting string.\n * - `highlights`: Optional. If provided, the string will be highlighted\n * using this highlight information.\n * - `cssClass`: Optional. When highlighting, the name of the CSS class to use.\n */\n shortenUri: (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => string;\n /**\n * Highlights a string using the provided highlight information.\n *\n * - `content`: The URI to shorten.\n * - `highlights`: Optional. The highlight information to use.\n * - `cssClass`: Optional. The name of the CSS class to use for highlighting.\n */\n highlight: (content: string, highlights?: IHighlight[], cssClass?: string) => string;\n /**\n * Highlights the provided terms in a given string.
\n * By default, the terms to highlight are the current query and the\n * associated stemming words from the index.\n * The only required parameter is the content, which specify the string that needs to be highlighted.\n * The other parameters will normally be automatically resolved for you from the current result object.\n *\n * - `content`: The string content to highlight\n * - `termsToHighlight`: The terms to highlight (see {@link IHighlightTerm})\n * - `phraseToHighlight`: The phrases to highlight (see {@link IHighlightPhrase})\n * - `options`: Optional. The options defined below as {@link IStreamHighlightOptions}\n *\n * **Note:**\n * > `highlightStreamText` should only be used for very particular/specific use cases (e.g., augmenting the result template with additional information rather than the typical excerpt/title), and is not a proper replacement for actually having the correct title and excerpt on your results.\n * >\n * > Using incorrect result titles or excerpts on your search interface also causes relevancy to suffer greatly, as the index uses the title and excerpt to find relevant results. Consequently, end users are more likely to see results whose titles do not match their query.\n * >\n * > Moreover, the recommended method to implement simple title and/or excerpt highlighting is to simply use the {@link Excerpt} and {@link ResultLink} components.\n */\n highlightStreamText: (\n content: string,\n termsToHighlight: IHighlightTerm,\n phrasesToHighlight: IHighlightPhrase,\n options?: IStreamHighlightOptions\n ) => string;\n /**\n * This helper operates exactly like the {@link highlightStreamText} helper, except\n * that it should be used to highlight HTML content. The helper takes care\n * of not highlighting the HTML markup.\n *\n * - `content`: The string content to highlight\n * - `termsToHighlight`: The terms to highlight (see {@link IHighlightTerm})\n * - `phraseToHighlight`: The phrases to highlight (see {@link IHighlightPhrase})\n * - `options`: Optional. The options defined below as {@link IStreamHighlightOptions}\n *\n * **Note:**\n * > `highlightStreamHTML` should only be used for very particular/specific use cases (e.g., augmenting the result template with additional information rather than the typical excerpt/title), and is not a proper replacement for actually having the correct title and excerpt on your results.\n * >\n * > Using incorrect result titles or excerpts on your search interface also causes relevancy to suffer greatly, as the index uses the title and excerpt to find relevant results. Consequently, end users are more likely to see results whose titles do not match their query.\n * >\n * > Moreover, the recommended method to implement simple title and/or excerpt highlighting is to simply use the {@link Excerpt} and {@link ResultLink} components.\n */\n highlightStreamHTML: (\n content: string,\n termsToHighlight: IHighlightTerm,\n phrasesToHighlight: IHighlightPhrase,\n options?: IStreamHighlightOptions\n ) => string;\n /**\n * Formats a numeric value using the format string.\n *\n * - `content`: The numeric value to format.\n * - `format` Optional. The string format to use. See the Globalize library for the list of available formats.\n *\n * When the helper is used in a [`FieldValue`]{@link FieldValue} component, this value is automatically retrieved from the specified [`field`]{@link FieldValue.options.field}.\n *\n * **Example:**\n *\n * ```html\n *
\n * ```\n */\n number: (content: string, format: string | INumberFormatOptions) => string;\n /**\n * Formats a date value to a date-only string using the specified options.\n *\n * - `content`: The Date value to format.\n * - `options`: Optional. The options to use (see {@link IDateToStringOptions}).\n */\n date: (content: any, options?: IDateToStringOptions) => string;\n /**\n * Formats a date value to a time-only string using the specified options.\n *\n * - `content`: The Date value to format.\n * - `options`: Optional. The options to use (see {@link IDateToStringOptions}).\n */\n time: (content: any, options?: IDateToStringOptions) => string;\n /**\n * Formats a date value to a date and time string using the specified\n * options.\n *\n * - `content`: The Date value to format.\n * - `options`: Optional. The options to use (see {@link IDateToStringOptions}).\n */\n dateTime: (content: any, options?: IDateToStringOptions) => string;\n /**\n * Formats a currency value to a string using the specified options.\n *\n * - `content`: The number value to format.\n * - `options`: Optional. The options to use (see {@link ICurrencyToStringOptions}).\n */\n currency: (content: any, options?: ICurrencyToStringOptions) => string;\n /**\n * Formats a date value to a date and time string using options suitable for\n * email dates\n *\n * - `content`: The Date value to format.\n * - `options`: Optional. The options to use (see {@link IDateToStringOptions}).\n */\n emailDateTime: (content: any, options?: IDateToStringOptions) => string;\n /**\n * Renders one or several email values in `mailto:` hyperlinks.\n *\n * - `value`: The string or array of strings that contains a list of semicolon-separated email\n * values. When multiple values are passed, each value is displayed in a\n * separate hyperlink.\n * - `companyDomain`: Optional. The string that contains your own domain (e.g.:\n * coveo.com). When specified, this parameter allows email addresses\n * coming from your own domain to be displayed in a shortened format\n * (e.g.: Full Name), whereas email addresses coming from an external\n * domain will be displayed in an extended format (e.g.: Full Name\n * (domain.com)). If this parameter is not specified, then the shortened\n * format will automatically be used.\n * - `me`: Optional. The string that contains the current username. If it is\n * specified, then the email address containing the current username will\n * be replaced by the localized string 'Me'.\n * - `lengthLimit`: Optional. The number of email addresses that you want to display\n * before an ellipse is added (e.g.: 'From Joe, John and 5 others').
\n * The default value is 2.\n * - `truncateName`: Optional. When the username is available from the email address,\n * then you can specify if you want to truncate the full name. (e.g.:\n * 'John S.' instead of 'John Smith').
\n * The default value is `false`.\n */\n email: (value: string | string[], companyDomain?: string, me?: string, lengthLimit?: number, truncateName?: boolean) => string;\n /**\n * Formats a clickable HTML link (``).\n *\n * - `href`: The link URI\n * - `options`: Optional. The options to use (see {@link IAnchorUtilsOptions})\n */\n anchor: (href: string, options?: IAnchorUtilsOptions) => string;\n /**\n * Formats an HTML image tag (``).\n *\n * - `src`: The image source URI\n * - `options`: Optional. The options to use (see {@link IImageUtilsOptions})\n */\n image: (src: string, options?: IImageUtilsOptions) => string;\n /**\n * Formats an HTML image tag (``), and automatically uses the result\n * object to query the REST API to get the thumbnail for this result. For\n * example, this can be used to great effect when designing a template\n * showing users or previews of files.\n * - `result`: Optional. The current result object inside your template. In\n * underscore, it is referenced as `obj`. By default, the result\n * will be resolved automatically from your current template function (\n * Meaning the nearest result in the current call stack execution inside\n * your template)\n * - `endpoint`: Optional. The name of the endpoint to use for your\n * thumbnail. Default is default.\n * - `options`: Optional. The options to use (see {@link IImageUtilsOptions}).\n */\n thumbnail: (result?: IQueryResult, endpoint?: string, options?: IImageUtilsOptions) => string;\n /**\n * Generates an icon based on the file type of the current result. The icon\n * will be contained inside a `` element with the appropriate CSS\n * class.\n *\n * - `result`: Optional. The current result object inside your template. In\n * underscore, it is referenced as `obj`. By default, the result\n * will be resolved automatically from your current template function (\n * Meaning the nearest result in the current call stack execution inside\n * your template)\n * - `options`: Optional. The options to use (see {@link IIconOptions}).\n */\n fromFileTypeToIcon: (result?: IQueryResult, options?: any) => string;\n /**\n * Loads a partial template in the current template, by passing the ID of\n * the template to load, the condition for which this template should be\n * loaded, and the context object (the object that the loaded template will\n * use as its data). By default, the context object will be the same as the\n * template that called this helper function. So, for example, in a\n * ResultList Component, the contextObject would, by default, be the Query\n * Results.\n *\n * - `templateId`: The ID of the template to load.\n * - `condition`: Optional. The boolean condition to determine if this template should\n * load for this result set. Most of the time this would be a condition of\n * the type if raw.somefield == 'something'.\n * - `contextObject`: Optional. The object that should be used by the loaded template\n * as its contextObject.\n */\n loadTemplate: (templateId: string, condition?: boolean, contextObject?: any) => string;\n /**\n * Given a number, either in millisecond or second, convert to a HH:MM:SS format.\n *\n * **Examples**\n *\n * >`timeSpan(1, {isMilliseconds: false}) => '00:01'`\n * >\n * >`timeSpan(1000, {isMilliseconds: true}) => '00:01'`\n *\n * - `value`: The number to convert to a timespan\n * - `options` : The options to use (see {@link ITimeSpanUtilsOptions})\n */\n timeSpan: (value: number, options: ITimeSpanUtilsOptions) => string;\n /**\n * Formats a number, which represents a file size in bytes, into a logical unit size.\n *\n * **Examples:**\n *\n * >`size(1024) => 1024 B`\n * >\n * >`size(1025) => 1 KB`\n * >\n * >`size(10240) => 10 KB`\n *\n * **Examples:**\n *\n * >**HTML**\n * >\n * > ```html\n * >
\n * > ```\n *\n * >**Underscore**\n * >\n * > ```erb\n * > <%= size(raw.size, {base: 0, precision: 2}) %>\n * > ```\n *\n * - `value`: The number to format\n * - `options` : The options to use (see {@link ISizeOptions})\n */\n size: (value: number, options?: ISizeOptions) => string;\n /**\n * Given a filetype value, try to return a translated and human readable version.\n *\n * If the filetype is known and recognized by the framework, a translated value will be returned.\n *\n * **Examples**\n *\n * >`translatedCaption('doc') => Document`\n * >\n * >`translatedCaption('xls') => Spreadsheet Document`\n *\n * - `value`: The string value to translate\n */\n translatedCaption: (value: string) => string;\n /**\n * Replace all carriage return in a string by a <br /> tag\n *\n * - `value`: The string value to replace the carriage returns in.\n */\n encodeCarriageReturn: (value: string) => string;\n /**\n * Detect if the results is being rendered in a mobile device.\n *\n * If it's not a mobile device, the helper return null ;\n *\n * If it's a mobile device, return the type of device (Android, iPhone, iPad) etc.\n */\n isMobileDevice: () => string;\n}\n\n/**\n * Available options for the size templateHelpers.\n *\n * Example:\n *
\n */\nexport interface ISizeOptions {\n /**\n * The base into which to format the value.\n *\n * Formula: value * 10^(3 * base)\n *\n * **Examples:**\n * > **Base 0:**\n * >\n * > 1 => 1B\n * >\n * > 1000 => 1KB\n *\n * > **Base 1:**\n * >\n * > 1 => 1KB\n * >\n * > 1000 => 1MB\n */\n base?: number;\n /**\n * The precision to use to format the size (i.e., the number of digits to display after the decimal)\n *\n * **Examples:**\n * > **Precision 0:**\n * >\n * > 1.0 => 1\n * >\n * > 1.85 => 1\n *\n * > **Precision 1:**\n * >\n * > 1.0 => 1.0\n * >\n * > 1.85 => 1.8\n */\n\n precision?: number;\n}\n\nexport interface IShortenOptions {\n length: number;\n highlights?: IHighlight[];\n cssClass?: string;\n}\n\nexport interface IHighlightsOptions {\n highlights: IHighlight[];\n cssClass?: string;\n}\n\nexport interface IHelperStreamHighlightOptions {\n termsToHighlight: IHighlightTerm;\n phrasesToHighlight: IHighlightPhrase;\n opts?: IStreamHighlightOptions;\n}\n\nexport class CoreHelpers {\n public constructor() {}\n\n /**\n * For backward compatibility reason, the \"global\" template helper should be available under the\n * coveo namespace.\n * @param scope\n */\n public static exportAllHelpersGlobally(scope: IStringMap) {\n _.each(TemplateHelpers.getHelpers(), (helper: ITemplateHelperFunction, name: string) => {\n if (scope[name] == undefined) {\n scope[name] = helper;\n }\n });\n }\n}\n\nTemplateHelpers.registerFieldHelper('javascriptEncode', (value: string) => {\n return Utils.exists(value) ? StringUtils.javascriptEncode(value) : undefined;\n});\n\nconst executeShorten = (content: string, options: IShortenOptions) => {\n const strAndHoles = StringAndHoles.shortenString(content, options.length, '...');\n if (Utils.exists(options.highlights)) {\n return HighlightUtils.highlightString(strAndHoles.value, options.highlights, strAndHoles.holes, options.cssClass || 'highlight');\n } else {\n return strAndHoles.value;\n }\n};\n\nTemplateHelpers.registerTemplateHelper('shorten', (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => {\n return executeShorten(content, {\n length,\n highlights,\n cssClass\n });\n});\n\nTemplateHelpers.registerTemplateHelper('shortenv2', (content: string, options: IShortenOptions) => {\n return executeShorten(content, options);\n});\n\nconst executeShortenPath = (content: string, options: IShortenOptions) => {\n const strAndHoles = StringAndHoles.shortenPath(content, options.length);\n if (Utils.exists(options.highlights)) {\n return HighlightUtils.highlightString(strAndHoles.value, options.highlights, strAndHoles.holes, options.cssClass || 'highlight');\n } else {\n return strAndHoles.value;\n }\n};\n\nTemplateHelpers.registerTemplateHelper('shortenPath', (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => {\n return executeShortenPath(content, {\n length,\n highlights,\n cssClass\n });\n});\n\nTemplateHelpers.registerFieldHelper('shortenPathv2', (content: string, options: IShortenOptions) => {\n return executeShortenPath(content, options);\n});\n\nconst executeShortenUri = (content: string, options: IShortenOptions) => {\n const strAndHoles = StringAndHoles.shortenUri(content, options.length);\n\n if (Utils.exists(options.highlights)) {\n return HighlightUtils.highlightString(strAndHoles.value, options.highlights, strAndHoles.holes, options.cssClass || 'highlight');\n } else {\n return strAndHoles.value;\n }\n};\n\nTemplateHelpers.registerTemplateHelper('shortenUri', (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => {\n return executeShortenUri(content, {\n length,\n highlights,\n cssClass\n });\n});\n\nTemplateHelpers.registerTemplateHelper('shortenUriv2', (content: string, options: IShortenOptions) => {\n return executeShortenUri(content, options);\n});\n\nconst executeHighlight = (content: string, options: IHighlightsOptions) => {\n if (Utils.exists(content)) {\n if (Utils.exists(options.highlights)) {\n return HighlightUtils.highlightString(content, options.highlights, null, options.cssClass || 'highlight');\n } else {\n return content;\n }\n } else {\n return undefined;\n }\n};\n\nTemplateHelpers.registerTemplateHelper('highlight', (content: string, highlights: IHighlight[], cssClass?: string) => {\n return executeHighlight(content, {\n highlights,\n cssClass\n });\n});\n\nTemplateHelpers.registerTemplateHelper('highlightv2', (content: string, options: IHighlightsOptions) => {\n return executeHighlight(content, options);\n});\n\nconst executeHighlightStreamText = (content: string, options: IHelperStreamHighlightOptions) => {\n if (Utils.exists(content) && Utils.exists(options.termsToHighlight) && Utils.exists(options.phrasesToHighlight)) {\n if (termsToHighlightAreDefined(options.termsToHighlight, options.phrasesToHighlight)) {\n return StreamHighlightUtils.highlightStreamText(content, options.termsToHighlight, options.phrasesToHighlight, options.opts);\n } else {\n return content;\n }\n } else {\n return undefined;\n }\n};\n\nTemplateHelpers.registerTemplateHelper(\n 'highlightStreamText',\n (\n content: string,\n termsToHighlight = resolveTermsToHighlight(),\n phrasesToHighlight = resolvePhrasesToHighlight(),\n opts?: IStreamHighlightOptions\n ) => {\n return executeHighlightStreamText(content, {\n termsToHighlight,\n phrasesToHighlight,\n opts\n });\n }\n);\n\nTemplateHelpers.registerTemplateHelper('highlightStreamTextv2', (content: string, options: IHelperStreamHighlightOptions) => {\n const mergedOptions = {\n termsToHighlight: resolveTermsToHighlight(),\n phrasesToHighlight: resolvePhrasesToHighlight(),\n ...options\n };\n return executeHighlightStreamText(content, mergedOptions);\n});\n\nconst executeHighlightStreamHTML = (content: string, options: IHelperStreamHighlightOptions) => {\n if (Utils.exists(content) && Utils.exists(options.termsToHighlight) && Utils.exists(options.phrasesToHighlight)) {\n if (termsToHighlightAreDefined(options.termsToHighlight, options.phrasesToHighlight)) {\n return StreamHighlightUtils.highlightStreamHTML(content, options.termsToHighlight, options.phrasesToHighlight, options.opts);\n } else {\n return content;\n }\n } else {\n return undefined;\n }\n};\n\nTemplateHelpers.registerTemplateHelper(\n 'highlightStreamHTML',\n (\n content: string,\n termsToHighlight = resolveTermsToHighlight(),\n phrasesToHighlight = resolvePhrasesToHighlight(),\n opts?: IStreamHighlightOptions\n ) => {\n return executeHighlightStreamHTML(content, {\n termsToHighlight,\n phrasesToHighlight,\n opts\n });\n }\n);\n\nTemplateHelpers.registerTemplateHelper('highlightStreamHTMLv2', (content: string, options: IHelperStreamHighlightOptions) => {\n const mergedOptions = {\n termsToHighlight: resolveTermsToHighlight(),\n phrasesToHighlight: resolvePhrasesToHighlight(),\n ...options\n };\n return executeHighlightStreamHTML(content, mergedOptions);\n});\n\nTemplateHelpers.registerFieldHelper('number', (value: any, options?: INumberFormatOptions | string) => {\n if (!Utils.exists(value)) {\n return undefined;\n }\n\n const numberValue = Number(value);\n const format = _.isString(options) ? options : options && options.format;\n if (!format) {\n return StringUtils.htmlEncode(numberValue.toString());\n }\n\n return StringUtils.htmlEncode(Globalize.format(numberValue, format));\n});\n\nTemplateHelpers.registerFieldHelper('date', (value: any, options?: IDateToStringOptions) => {\n return DateUtils.dateToString(DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\n\nTemplateHelpers.registerFieldHelper('time', (value: any, options?: IDateToStringOptions) => {\n return DateUtils.timeToString(DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\n\nTemplateHelpers.registerFieldHelper('dateTime', (value: any, options?: IDateToStringOptions) => {\n return DateUtils.dateTimeToString(DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\n\nTemplateHelpers.registerFieldHelper('emailDateTime', (value: any, options?: IDateToStringOptions) => {\n var defaultOptions = {};\n defaultOptions.includeTimeIfThisWeek = true;\n var optionsToUse = _.extend(options, defaultOptions);\n return value ? DateUtils.dateTimeToString(DateUtils.convertFromJsonDateIfNeeded(value), optionsToUse) : undefined;\n});\n\nTemplateHelpers.registerFieldHelper('currency', (value: any, options?: ICurrencyToStringOptions) => {\n return CurrencyUtils.currencyToString(value, options);\n});\n\nTemplateHelpers.registerFieldHelper('timeSpan', (value: any, options: ITimeSpanUtilsOptions = { isMilliseconds: false }) => {\n return new TimeSpan(value, options.isMilliseconds).getHHMMSS();\n});\n\nTemplateHelpers.registerFieldHelper('email', (value: string | string[], ...args: any[]) => {\n // support old arguments (value: any, companyDomain: string, me: string, lengthLimit = 2, truncateName = false)\n var companyDomain: string;\n var me: string;\n var lengthLimit: number;\n var truncateName: boolean;\n if (_.isObject(args[0])) {\n companyDomain = args[0]['companyDomain'];\n me = args[0]['me'];\n lengthLimit = args[0]['lengthLimit'];\n truncateName = args[0]['truncateName'];\n } else {\n companyDomain = args[0];\n me = args[1];\n lengthLimit = args[2];\n truncateName = args[3];\n }\n if (lengthLimit == undefined) {\n lengthLimit = 2;\n }\n if (truncateName == undefined) {\n truncateName = false;\n }\n if (_.isString(value)) {\n var listOfAddresses = EmailUtils.splitSemicolonSeparatedListOfEmailAddresses(value);\n return EmailUtils.emailAddressesToHyperlinks(listOfAddresses, companyDomain, me, lengthLimit, truncateName);\n } else if (_.isArray(value)) {\n return EmailUtils.emailAddressesToHyperlinks(value, companyDomain, me, lengthLimit, truncateName);\n } else {\n return undefined;\n }\n});\n\nTemplateHelpers.registerTemplateHelper('excessEmailToggle', (target: HTMLElement) => {\n $$(target).removeClass('coveo-active');\n if ($$(target).hasClass('coveo-emails-excess-collapsed')) {\n _.each($$(target).siblings('.coveo-emails-excess-expanded'), sibling => {\n $$(sibling).addClass('coveo-active');\n });\n } else if ($$(target).hasClass('coveo-hide-expanded')) {\n $$(target.parentElement).addClass('coveo-inactive');\n _.each($$(target.parentElement).siblings('.coveo-emails-excess-collapsed'), sibling => {\n $$(sibling).addClass('coveo-active');\n });\n }\n return undefined;\n});\n\nTemplateHelpers.registerFieldHelper('anchor', (href: string, options?: IAnchorUtilsOptions) => {\n return AnchorUtils.buildAnchor(href, options);\n});\n\nTemplateHelpers.registerFieldHelper('image', (src: string, options?: IImageUtilsOptions, result: IQueryResult = resolveQueryResult()) => {\n if (options && options.srcTemplate) {\n return ImageUtils.buildImage(StringUtils.buildStringTemplateFromResult(options.srcTemplate, result), {\n alt: options.alt,\n height: options.height,\n width: options.width\n });\n }\n return ImageUtils.buildImage(src, options);\n});\n\nTemplateHelpers.registerTemplateHelper(\n 'thumbnail',\n (result: IQueryResult = resolveQueryResult(), endpoint: string = 'default', options?: IImageUtilsOptions) => {\n if (QueryUtils.hasThumbnail(result)) {\n return ImageUtils.buildImageFromResult(result, SearchEndpoint.endpoints[endpoint], options);\n }\n }\n);\n\nTemplateHelpers.registerTemplateHelper('fromFileTypeToIcon', (result: IQueryResult = resolveQueryResult(), options = {}) => {\n let icon = Component.getComponentRef('Icon');\n if (icon) {\n return icon.createIcon(result, options).outerHTML;\n }\n});\n\nTemplateHelpers.registerTemplateHelper('attrEncode', (value: string) => {\n return ('' + value) /* Forces the conversion to string. */\n .replace(/&/g, '&') /* This MUST be the 1st replacement. */\n .replace(/'/g, ''') /* The 4 other predefined entities, required. */\n .replace(/'/g, '"')\n .replace(//g, '>');\n});\n\nTemplateHelpers.registerTemplateHelper('loadTemplates', (templatesToLoad: { [id: string]: any }, once = true) => {\n var ret = '';\n var data = resolveQueryResult();\n var atLeastOneWasLoaded = false;\n var toLoad = templatesToLoad;\n var defaultTmpl;\n _.each(templatesToLoad, (value, key?, obj?) => {\n if (value == 'default') {\n defaultTmpl = key;\n }\n });\n if (defaultTmpl != undefined) {\n toLoad = _.omit(templatesToLoad, defaultTmpl);\n }\n _.each(toLoad, (condition, id?, obj?) => {\n if (!atLeastOneWasLoaded || !once) {\n atLeastOneWasLoaded = atLeastOneWasLoaded || condition;\n ret += TemplateHelpers.getHelper('loadTemplate')(id, condition, data);\n }\n });\n if (!atLeastOneWasLoaded && defaultTmpl != undefined) {\n ret += TemplateHelpers.getHelper('loadTemplate')(defaultTmpl, true, data);\n }\n return ret;\n});\n\nconst byteMeasure = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB'];\n\nTemplateHelpers.registerFieldHelper('size', (value: any, options?: ISizeOptions) => {\n var size = parseInt(value, 10);\n var precision = options != null && options.precision != null ? options.precision : 2;\n var base = options != null && options.base != null ? options.base : 0;\n while (size > 1024 && base + 1 < byteMeasure.length) {\n size /= 1024;\n base++;\n }\n size = Math.floor(size * Math.pow(10, precision)) / Math.pow(10, precision);\n return size + ' ' + byteMeasure[base];\n});\n\nTemplateHelpers.registerFieldHelper('translatedCaption', (value: string) => {\n return FacetUtils.tryToGetTranslatedCaption('@filetype', value);\n});\n\nTemplateHelpers.registerTemplateHelper('loadTemplate', (id: string, condition: boolean = true, data?: any) => {\n if (Utils.isNullOrUndefined(data)) {\n data = resolveQueryResult();\n }\n if (condition) {\n return TemplateCache.getTemplate(id).instantiateToString(data, {\n checkCondition: false\n });\n }\n return '';\n});\n\nTemplateHelpers.registerTemplateHelper('encodeCarriageReturn', (data: string) => {\n if (Utils.isNullOrUndefined(data)) {\n return undefined;\n } else {\n return StringUtils.encodeCarriageReturn(data);\n }\n});\n\nTemplateHelpers.registerTemplateHelper('isMobileDevice', () => {\n return DeviceUtils.isMobileDevice() ? DeviceUtils.getDeviceName() : null;\n});\n\nfunction resolveQueryResult(): IQueryResult {\n let found;\n let resultList = Component.getComponentRef('ResultList');\n if (resultList) {\n found = resultList.resultCurrentlyBeingRendered;\n }\n if (!found) {\n let quickview = Component.getComponentRef('Quickview');\n if (quickview) {\n found = quickview.resultCurrentlyBeingRendered;\n }\n }\n return found;\n}\n\nfunction resolveTermsToHighlight(): IHighlightTerm {\n let currentQueryResult = resolveQueryResult();\n if (currentQueryResult) {\n return currentQueryResult.termsToHighlight;\n }\n}\n\nfunction resolvePhrasesToHighlight(): IHighlightPhrase {\n let currentQueryResult = resolveQueryResult();\n if (currentQueryResult) {\n return currentQueryResult.phrasesToHighlight;\n }\n}\n\nfunction termsToHighlightAreDefined(termsToHighlight, phrasesToHighlight) {\n return Utils.isNonEmptyArray(_.keys(termsToHighlight)) || Utils.isNonEmptyArray(_.keys(phrasesToHighlight));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Templates/CoreHelpers.ts","import { $$, Dom } from '../../../utils/Dom';\nimport { SVGDom } from '../../../utils/SVGDom';\n\nexport interface IDynamicFacetHeaderButtonOptions {\n label: string;\n ariaLabel?: string;\n shouldDisplay?: boolean;\n className?: string;\n iconSVG?: string;\n iconClassName?: string;\n action?: () => void;\n}\n\nexport class DynamicFacetHeaderButton {\n private button: Dom;\n public element: HTMLElement;\n\n constructor(private rootOptions: IDynamicFacetHeaderButtonOptions) {\n this.create();\n }\n\n private create() {\n const hasIcon = this.rootOptions.iconSVG && this.rootOptions.iconClassName;\n\n this.button = $$(\n 'button',\n {\n className: `coveo-dynamic-facet-header-btn ${this.rootOptions.className || ''}`.trim(),\n type: 'button'\n },\n hasIcon ? this.rootOptions.iconSVG : this.rootOptions.label\n );\n\n this.rootOptions.action && this.button.on('click', this.rootOptions.action);\n\n if (hasIcon) {\n this.button.setAttribute('aria-label', this.rootOptions.label);\n this.button.setAttribute('title', this.rootOptions.label);\n SVGDom.addClassToSVGInContainer(this.button.el, this.rootOptions.iconClassName);\n }\n\n if (this.rootOptions.ariaLabel) {\n this.button.setAttribute('aria-label', this.rootOptions.ariaLabel);\n }\n\n if (this.rootOptions.shouldDisplay !== undefined) {\n this.toggle(this.rootOptions.shouldDisplay);\n }\n\n this.element = this.button.el;\n }\n\n public toggle(shouldDisplay: boolean) {\n this.button.toggle(shouldDisplay);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetHeader/DynamicFacetHeaderButton.ts","import { FacetType, IFacetRequest } from '../rest/Facet/FacetRequest';\nimport { FacetSortCriteria } from '../rest/Facet/FacetSortCriteria';\nimport { IQuery } from '../rest/Query';\nimport { Utils } from '../utils/Utils';\n\nexport interface IBasicFacetRequestParameters {\n facetId: string;\n field: string;\n type: FacetType;\n injectionDepth: number;\n sortCriteria?: FacetSortCriteria;\n delimitingCharacter?: string;\n filterFacetCount?: boolean;\n}\n\nexport class DynamicFacetRequestBuilder {\n constructor(private request: IFacetRequest) {}\n\n public buildBaseRequestForQuery(query: IQuery): IFacetRequest {\n return {\n ...this.request,\n filterFacetCount: this.getFilterFacetCount(!!query.filterField)\n };\n }\n\n private getFilterFacetCount(isFoldingEnabled: boolean) {\n if (Utils.isUndefined(this.request.filterFacetCount)) {\n return !isFoldingEnabled;\n }\n\n return this.request.filterFacetCount;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/controllers/DynamicFacetRequestBuilder.ts","import 'styling/DynamicFacet/_DynamicFacetHeader';\nimport { $$, Dom } from '../../../utils/Dom';\nimport { l } from '../../../strings/Strings';\nimport { SVGIcons } from '../../../utils/SVGIcons';\nimport { SVGDom } from '../../../utils/SVGDom';\nimport { DynamicFacetHeaderButton } from './DynamicFacetHeaderButton';\nimport { DynamicFacetHeaderCollapseToggle } from './DynamicFacetHeaderCollapseToggle';\n\nexport interface IDynamicFacetHeaderOptions {\n title: string;\n enableCollapse: boolean;\n toggleCollapse: () => void;\n collapse: () => void;\n expand: () => void;\n clear: () => void;\n}\n\nexport class DynamicFacetHeader {\n public static showLoadingDelay = 2000;\n public element: HTMLElement;\n private title: Dom;\n private waitAnimation: Dom;\n private clearButton: DynamicFacetHeaderButton;\n private collapseToggle: DynamicFacetHeaderCollapseToggle;\n private showLoadingTimeout: number;\n\n constructor(public options: IDynamicFacetHeaderOptions) {\n this.element = $$('div', { className: 'coveo-dynamic-facet-header' }).el;\n this.title = this.createTitle();\n $$(this.element).append(this.title.el);\n $$(this.element).append(this.createWaitAnimation());\n $$(this.element).append(this.createClearButton());\n this.options.enableCollapse && this.enableCollapse();\n }\n\n private createClearButton() {\n this.clearButton = new DynamicFacetHeaderButton({\n label: l('Clear'),\n ariaLabel: l('Clear', this.options.title),\n className: 'coveo-dynamic-facet-header-clear',\n shouldDisplay: false,\n action: () => this.options.clear()\n });\n\n return this.clearButton.element;\n }\n\n private createCollapseToggle() {\n this.collapseToggle = new DynamicFacetHeaderCollapseToggle(this.options);\n return this.collapseToggle.element;\n }\n\n private enableCollapse() {\n $$(this.element).append(this.createCollapseToggle());\n $$(this.title).addClass('coveo-clickable');\n $$(this.title).on('click', () => this.options.toggleCollapse());\n }\n\n public toggleCollapse(isCollapsed: boolean) {\n this.options.enableCollapse && this.collapseToggle.toggleButton(isCollapsed);\n }\n\n private createTitle() {\n return $$(\n 'h2',\n {\n className: 'coveo-dynamic-facet-header-title',\n ariaLabel: `${l('FacetTitle', this.options.title)}`\n },\n $$('span', { ariaHidden: true, title: this.options.title }, this.options.title)\n );\n }\n\n private createWaitAnimation() {\n this.waitAnimation = $$('div', { className: 'coveo-dynamic-facet-header-wait-animation' }, SVGIcons.icons.loading);\n SVGDom.addClassToSVGInContainer(this.waitAnimation.el, 'coveo-dynamic-facet-header-wait-animation-svg');\n this.waitAnimation.toggle(false);\n\n return this.waitAnimation.el;\n }\n\n public toggleClear(visible: boolean) {\n this.clearButton.toggle(visible);\n }\n\n public showLoading() {\n clearTimeout(this.showLoadingTimeout);\n this.showLoadingTimeout = window.setTimeout(() => this.waitAnimation.toggle(true), DynamicFacetHeader.showLoadingDelay);\n }\n\n public hideLoading() {\n clearTimeout(this.showLoadingTimeout);\n this.waitAnimation.toggle(false);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetHeader/DynamicFacetHeader.ts","/**\n * The allowed sort criteria for a Search API\n * [facet request]{@link IFacetRequest}.\n */\nexport enum FacetSortCriteria {\n /**\n * Sort facet values in descending score order.\n *\n * Facet value scores are based on number of occurrences and position in the\n * ranked query result set.\n *\n * The Coveo Machine Learning dynamic navigation experience feature only\n * works with this sort criterion.\n */\n score = 'score',\n /**\n * Sort facet values in ascending alphanumeric order.\n */\n alphanumeric = 'alphanumeric',\n /**\n * Sort facet values in descending number of occurrences.\n */\n occurrences = 'occurrences'\n}\n\nexport function isFacetSortCriteria(sortCriteria: string) {\n return !!FacetSortCriteria[sortCriteria];\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/rest/Facet/FacetSortCriteria.ts","import { $$ } from '../../utils/Dom';\nimport { ComboboxInput } from './ComboboxInput';\nimport { uniqueId, throttle } from 'underscore';\nimport { SVGIcons } from '../../utils/SVGIcons';\nimport { SVGDom } from '../../utils/SVGDom';\nimport { ComboboxValues } from './ComboboxValues';\nimport 'styling/_Combobox';\nimport { Utils } from '../../utils/Utils';\nimport { l } from '../../strings/Strings';\nimport { IComboboxOptions, ICombobox, IComboboxAccessibilityAttributes } from './ICombobox';\n\nexport class Combobox implements ICombobox {\n public element: HTMLElement;\n public id: string;\n public values: ComboboxValues;\n private input: ComboboxInput;\n private waitAnimationElement: HTMLElement;\n private defaultOptions: Partial = {\n wrapperClassName: '',\n clearOnBlur: false\n };\n private throttlingDelay = 600;\n private isRequestCancelled = false;\n\n constructor(public options: IComboboxOptions) {\n this.options = {\n ...this.defaultOptions,\n ...this.options\n };\n\n this.id = uniqueId('coveo-combobox-');\n this.create();\n }\n\n private create() {\n this.element = $$('div', { className: `coveo-combobox-wrapper ${this.options.wrapperClassName}` }).el;\n this.createAndAppendInput();\n this.createAndAppendWaitAnimation();\n this.createAndAppendValues();\n }\n\n private createAndAppendInput() {\n this.input = new ComboboxInput(this);\n this.element.appendChild(this.input.element);\n }\n\n private createAndAppendWaitAnimation() {\n this.waitAnimationElement = $$('div', { className: 'coveo-combobox-wait-animation' }, SVGIcons.icons.loading).el;\n SVGDom.addClassToSVGInContainer(this.waitAnimationElement, 'coveo-combobox-wait-animation-svg');\n this.toggleWaitAnimation(false);\n this.input.element.appendChild(this.waitAnimationElement);\n }\n\n private toggleWaitAnimation(show: boolean) {\n $$(this.waitAnimationElement).toggle(show);\n }\n\n private createAndAppendValues() {\n this.values = new ComboboxValues(this);\n this.element.appendChild(this.values.element);\n }\n\n public clearAll() {\n this.clearValues();\n this.input.clearInput();\n }\n\n private clearValues() {\n this.values.clearValues();\n this.cancelRequest();\n }\n\n private cancelRequest() {\n this.toggleWaitAnimation(false);\n this.throttledRequest.cancel();\n this.isRequestCancelled = true;\n }\n\n public onInputChange(value: string) {\n if (Utils.isEmptyString(value)) {\n return this.clearValues();\n }\n\n this.throttledRequest(\n () => this.options.requestValues(value),\n () => this.values.resetScroll()\n );\n }\n\n public onInputBlur() {\n if (this.values.mouseIsOverValue) {\n return;\n }\n\n if (this.values.isRenderingNewValues) {\n return;\n }\n\n if (this.options.clearOnBlur) {\n return this.clearAll();\n }\n\n this.clearValues();\n }\n\n public updateAccessibilityAttributes(attributes: IComboboxAccessibilityAttributes) {\n this.input.updateAccessibilityAttributes(attributes);\n }\n\n public updateAriaLive() {\n if (!this.values.hasValues()) {\n this.options.ariaLive.updateText(l('NoValuesFound'));\n return;\n }\n\n let text = l('ShowingResultsWithQuery', this.values.numberOfValues, this.input.value, this.values.numberOfValues);\n if (this.options.scrollable && this.options.scrollable.areMoreValuesAvailable()) {\n text = `${text} (${l('MoreValuesAvailable')})`;\n }\n\n this.options.ariaLive.updateText(text);\n }\n\n public onScrollEndReached() {\n this.values.saveFocusedValue();\n this.options.scrollable &&\n this.throttledRequest(\n () => this.options.scrollable.requestMoreValues(),\n () => this.values.restoreFocusedValue()\n );\n }\n\n private throttledRequest = throttle(this.triggerRequest, this.throttlingDelay, {\n leading: true,\n trailing: true\n });\n\n private async triggerRequest(request: () => Promise, callback?: Function) {\n this.isRequestCancelled = false;\n this.toggleWaitAnimation(true);\n\n const response = await request();\n this.toggleWaitAnimation(false);\n\n if (!this.isRequestCancelled) {\n this.values.renderFromResponse(response);\n callback && callback();\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Combobox/Combobox.ts","import { Checkbox } from '../../FormWidgets/Checkbox';\nimport { DynamicFacetValue } from './DynamicFacetValue';\nimport { $$ } from '../../../utils/Dom';\n\nexport class DynamicFacetValueCheckbox {\n private checkbox: Checkbox;\n public element: HTMLElement;\n\n constructor(private facetValue: DynamicFacetValue, selectAction = () => {}) {\n this.checkbox = new Checkbox(\n selectAction.bind(this),\n this.facetValue.displayValue,\n this.facetValue.selectAriaLabel,\n `(${this.facetValue.formattedCount})`\n );\n\n const label = $$(this.checkbox.getElement()).find('.coveo-checkbox-span-label');\n const labelSuffix = $$(this.checkbox.getElement()).find('.coveo-checkbox-span-label-suffix');\n\n if (label && labelSuffix) {\n label.setAttribute('title', this.facetValue.displayValue);\n label.setAttribute('aria-hidden', 'true');\n labelSuffix.setAttribute('aria-hidden', 'true');\n }\n\n this.facetValue.isSelected && this.checkbox.select(false);\n this.element = this.checkbox.getElement();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValueCheckbox.ts","import 'styling/DynamicFacet/_DynamicFacetValues';\nimport { $$ } from '../../../utils/Dom';\nimport { findWhere, find, escape } from 'underscore';\nimport { DynamicFacetValue } from './DynamicFacetValue';\nimport { IFacetResponse } from '../../../rest/Facet/FacetResponse';\nimport { FacetValueState } from '../../../rest/Facet/FacetValueState';\nimport { l } from '../../../strings/Strings';\nimport { IDynamicFacet, IValueCreator, IDynamicFacetValue, IDynamicFacetValues } from '../IDynamicFacet';\nimport { DynamicFacetValueShowMoreLessButton } from './DynamicFacetValueMoreLessButton';\nimport { Utils } from '../../../utils/Utils';\n\nexport interface IDynamicFacetValueCreatorKlass {\n new (facet: IDynamicFacet): IValueCreator;\n}\n\nexport class DynamicFacetValues implements IDynamicFacetValues {\n private facetValues: IDynamicFacetValue[];\n private list = $$('ul', { className: 'coveo-dynamic-facet-values' }).el;\n private valueCreator: IValueCreator;\n\n constructor(private facet: IDynamicFacet, creatorKlass: IDynamicFacetValueCreatorKlass) {\n this.valueCreator = new creatorKlass(this.facet);\n this.resetValues();\n }\n\n public createFromResponse(response: IFacetResponse) {\n this.facetValues = response.values.map((facetValue, index) => this.valueCreator.createFromResponse(facetValue, index));\n }\n\n public reorderValues(order: string[]) {\n this.facetValues = Utils.reorderValuesByKeys(this.facetValues, order, value => value.value);\n }\n\n public resetValues() {\n this.facetValues = this.valueCreator.getDefaultValues();\n }\n\n public get allFacetValues() {\n return this.facetValues;\n }\n\n public get allValues() {\n return this.facetValues.map(facetValue => facetValue.value);\n }\n\n public get selectedValues() {\n return this.facetValues.filter(value => value.isSelected).map(({ value }) => value);\n }\n\n private get selectedDisplayValues() {\n return this.facetValues.filter(value => value.isSelected).map(({ displayValue }) => displayValue);\n }\n\n public get activeValues() {\n return this.facetValues.filter(value => !value.isIdle);\n }\n\n private get displayedValues() {\n return this.facetValues.filter(value => !value.isIdle || value.numberOfResults > 0);\n }\n\n public get hasSelectedValues() {\n return !!findWhere(this.facetValues, { state: FacetValueState.selected });\n }\n\n public get hasActiveValues() {\n return !!this.activeValues.length;\n }\n\n public get hasIdleValues() {\n return !!findWhere(this.facetValues, { state: FacetValueState.idle });\n }\n\n public clearAll() {\n this.facetValues.forEach(value => value.deselect());\n }\n\n public get hasValues() {\n return !!this.allFacetValues.length;\n }\n\n public get hasDisplayedValues() {\n return !!this.displayedValues.length;\n }\n\n public hasSelectedValue(arg: string | DynamicFacetValue) {\n const value = typeof arg === 'string' ? arg : arg.value;\n const foundValue = find(this.facetValues, facetValue => facetValue.equals(value));\n return foundValue && foundValue.isSelected;\n }\n\n public get(arg: string | DynamicFacetValue) {\n const value = typeof arg === 'string' ? arg : arg.value;\n const facetValue = find(this.facetValues, facetValue => facetValue.equals(value));\n\n if (facetValue) {\n return facetValue;\n }\n\n const newFacetValue = this.valueCreator.createFromValue(value);\n if (!newFacetValue) {\n return null;\n }\n\n this.facetValues.push(newFacetValue);\n return newFacetValue;\n }\n\n private buildShowLess() {\n const showLess = new DynamicFacetValueShowMoreLessButton({\n className: 'coveo-dynamic-facet-show-less',\n ariaLabel: l('ShowLessFacetResults', this.facet.options.title),\n label: l('ShowLess'),\n action: () => {\n this.facet.enableFreezeFacetOrderFlag();\n this.facet.showLessValues();\n }\n });\n\n return showLess.element;\n }\n\n private buildShowMore() {\n const showMore = new DynamicFacetValueShowMoreLessButton({\n className: 'coveo-dynamic-facet-show-more',\n ariaLabel: l('ShowMoreFacetResults', this.facet.options.title),\n label: l('ShowMore'),\n action: () => {\n this.facet.enableFreezeFacetOrderFlag();\n this.facet.showMoreValues();\n }\n });\n\n return showMore.element;\n }\n\n private get shouldEnableShowLess() {\n const hasMoreValuesThenDefault = this.facetValues.length > this.facet.options.numberOfValues;\n\n return hasMoreValuesThenDefault && this.hasIdleValues;\n }\n\n private appendShowMoreLess(fragment: DocumentFragment) {\n if (!this.facet.options.enableMoreLess) {\n return;\n }\n\n if (this.shouldEnableShowLess) {\n fragment.appendChild(this.buildShowLess());\n }\n\n if (this.facet.moreValuesAvailable) {\n fragment.appendChild(this.buildShowMore());\n }\n }\n\n private appendSelectedCollapsedValues(fragment: DocumentFragment) {\n if (!this.hasSelectedValues) {\n return;\n }\n\n const selectedValues = this.selectedDisplayValues.join(', ');\n fragment.appendChild(\n $$(\n 'li',\n {\n className: 'coveo-dynamic-facet-collapsed-values',\n ariaLabel: `${l('CurrentSelections')}: ${selectedValues}`\n },\n escape(selectedValues)\n ).el\n );\n }\n\n public render() {\n const fragment = document.createDocumentFragment();\n $$(this.list).empty();\n\n this.displayedValues.forEach(facetValue => {\n fragment.appendChild(facetValue.renderedElement);\n });\n\n this.appendShowMoreLess(fragment);\n\n this.appendSelectedCollapsedValues(fragment);\n\n this.list.appendChild(fragment);\n return this.list;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValues.ts","import { QueryBuilder } from '../ui/Base/QueryBuilder';\nimport { Assert } from '../misc/Assert';\nimport { IFacetRequest, IFacetRequestValue } from '../rest/Facet/FacetRequest';\nimport { QueryEvents } from '../events/QueryEvents';\nimport { findIndex } from 'underscore';\nimport { IQueryResults } from '../rest/QueryResults';\nimport { IDynamicFacet } from '../ui/DynamicFacet/IDynamicFacet';\nimport { DynamicFacetRequestBuilder } from './DynamicFacetRequestBuilder';\nimport { IQuery } from '../rest/Query';\n\nexport class DynamicFacetQueryController {\n protected requestBuilder: DynamicFacetRequestBuilder;\n private numberOfValuesToRequest: number;\n private freezeCurrentValues = false;\n private freezeFacetOrder = false;\n private preventAutoSelection = false;\n\n constructor(protected facet: IDynamicFacet) {\n this.requestBuilder = new DynamicFacetRequestBuilder({\n facetId: this.facet.options.id,\n field: this.facet.fieldName,\n type: this.facet.facetType,\n sortCriteria: this.facet.options.sortCriteria,\n injectionDepth: this.facet.options.injectionDepth,\n filterFacetCount: this.facet.options.filterFacetCount\n });\n this.resetNumberOfValuesToRequest();\n this.resetFlagsDuringQuery();\n }\n\n private resetFlagsDuringQuery() {\n this.facet.bind.onRootElement(QueryEvents.duringQuery, () => {\n this.freezeCurrentValues = false;\n this.freezeFacetOrder = false;\n this.preventAutoSelection = false;\n });\n }\n\n public increaseNumberOfValuesToRequest(additionalNumberOfValues: number) {\n this.numberOfValuesToRequest += additionalNumberOfValues;\n }\n\n public resetNumberOfValuesToRequest() {\n this.numberOfValuesToRequest = this.facet.options.numberOfValues;\n }\n\n public enablePreventAutoSelectionFlag() {\n this.preventAutoSelection = true;\n }\n\n public enableFreezeCurrentValuesFlag() {\n if (this.areValuesIncorrectlyAffectedByDependsOn) {\n return;\n }\n\n this.freezeCurrentValues = true;\n }\n\n public enableFreezeFacetOrderFlag() {\n this.freezeFacetOrder = true;\n }\n\n private get areValuesIncorrectlyAffectedByDependsOn() {\n if (!this.facet.dependsOnManager.hasDependentFacets) {\n return false;\n }\n\n if (this.facet.dependsOnManager.dependentFacetsHaveSelectedValues) {\n return false;\n }\n\n return this.currentValues.length < this.numberOfValuesToRequest;\n }\n\n /**\n * Build the facets request for the DynamicFacet, and insert it in the query builder\n * @param queryBuilder\n */\n public putFacetIntoQueryBuilder(queryBuilder: QueryBuilder) {\n Assert.exists(queryBuilder);\n\n queryBuilder.facetRequests.push(this.buildFacetRequest(queryBuilder.build()));\n if (this.freezeFacetOrder) {\n queryBuilder.facetOptions.freezeFacetOrder = true;\n }\n }\n\n public buildFacetRequest(query: IQuery): IFacetRequest {\n return {\n ...this.requestBuilder.buildBaseRequestForQuery(query),\n currentValues: this.currentValues,\n numberOfValues: this.numberOfValues,\n freezeCurrentValues: this.freezeCurrentValues,\n preventAutoSelect: this.preventAutoSelection,\n isFieldExpanded: this.numberOfValuesToRequest > this.facet.options.numberOfValues\n };\n }\n\n public getQueryResults(): Promise {\n const query = this.facet.queryController.getLastQuery();\n // Specifying a numberOfResults of 0 will not log the query as a full fledged query in the API\n // it will also alleviate the load on the index\n query.numberOfResults = 0;\n\n const previousFacetRequestIndex = findIndex(query.facets, { facetId: this.facet.options.id });\n if (previousFacetRequestIndex !== -1) {\n query.facets[previousFacetRequestIndex] = this.buildFacetRequest(query);\n } else if (query.facets) {\n query.facets.push(this.buildFacetRequest(query));\n } else {\n query.facets = [this.buildFacetRequest(query)];\n }\n\n return this.facet.queryController.getEndpoint().search(query);\n }\n\n protected get currentValues(): IFacetRequestValue[] {\n return this.facet.values.allFacetValues.map(({ value, state }) => ({\n value,\n state\n }));\n }\n\n protected get numberOfValues() {\n if (this.freezeCurrentValues) {\n return this.currentValues.length;\n }\n\n return Math.max(this.numberOfValuesToRequest, this.facet.values.activeValues.length);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/controllers/DynamicFacetQueryController.ts","import { $$, Dom } from '../../../utils/Dom';\nimport { DynamicFacetValue } from './DynamicFacetValue';\nimport { DynamicFacetValueCheckbox } from './DynamicFacetValueCheckbox';\nimport { IDynamicFacet, IValueRenderer } from '../IDynamicFacet';\n\nexport class DynamicFacetValueRenderer implements IValueRenderer {\n private dom: Dom;\n private valueCheckbox: DynamicFacetValueCheckbox;\n\n constructor(private facetValue: DynamicFacetValue, private facet: IDynamicFacet) {}\n\n public render() {\n this.dom = $$('li', {\n className: 'coveo-dynamic-facet-value',\n dataValue: this.facetValue.value\n });\n\n this.toggleSelectedClass();\n this.renderCheckbox();\n this.addFocusAndBlurEventListeners();\n\n return this.dom.el;\n }\n\n private toggleSelectedClass() {\n this.dom.toggleClass('coveo-selected', this.facetValue.isSelected);\n }\n\n private renderCheckbox() {\n this.valueCheckbox = new DynamicFacetValueCheckbox(this.facetValue, this.selectAction.bind(this));\n this.dom.append(this.valueCheckbox.element);\n }\n\n private addFocusAndBlurEventListeners() {\n const checkboxButton = $$(this.valueCheckbox.element).find('button');\n $$(checkboxButton).on('focusin', () => this.onFocusIn());\n $$(checkboxButton).on('focusout', () => this.onFocusOut());\n }\n\n private onFocusIn() {\n this.dom.addClass('coveo-focused');\n }\n\n private onFocusOut() {\n this.dom.removeClass('coveo-focused');\n }\n\n private selectAction() {\n this.facet.toggleSelectValue(this.facetValue.value);\n this.toggleSelectedClass();\n this.facet.enableFreezeCurrentValuesFlag();\n this.facet.enableFreezeFacetOrderFlag();\n this.facet.enablePreventAutoSelectionFlag();\n this.facet.scrollToTop();\n this.facet.triggerNewQuery(() => this.facetValue.logSelectActionToAnalytics());\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValueRenderer.ts","import { IResponsiveComponent, IResponsiveComponentOptions, ResponsiveComponentsManager } from './ResponsiveComponentsManager';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { ResultList } from '../ResultList/ResultList';\nimport { $$, Dom } from '../../utils/Dom';\nimport { Component } from '../Base/Component';\nimport { Logger } from '../../misc/Logger';\nimport { ResponsiveDropdown } from './ResponsiveDropdown/ResponsiveDropdown';\n\nexport class ResponsiveDefaultResultTemplate implements IResponsiveComponent {\n private searchInterface: SearchInterface;\n private resultList: ResultList;\n\n private currentMode: string;\n\n public static init(root: HTMLElement, component: ResultList, options: IResponsiveComponentOptions) {\n if (!$$(root).find(`.${Component.computeCssClassName(ResultList)}`)) {\n let logger = new Logger('ResponsiveDefaultResultTemplate');\n logger.trace('No ResultLayout component found : Cannot instantiate ResponsiveResultLayout');\n return;\n }\n ResponsiveComponentsManager.register(ResponsiveDefaultResultTemplate, $$(root), ResultList.ID, component, options);\n }\n\n constructor(public coveoRoot: Dom, public ID: string, options: IResponsiveComponentOptions, responsiveDropdown?: ResponsiveDropdown) {\n this.searchInterface = Component.get(this.coveoRoot.el, SearchInterface, false);\n this.currentMode = 'large';\n }\n\n public registerComponent(accept: ResultList) {\n if (accept instanceof ResultList) {\n this.resultList = accept;\n return true;\n }\n return false;\n }\n\n public handleResizeEvent() {\n let lastResults = this.resultList.queryController.getLastResults();\n if (this.needSmallMode()) {\n $$(this.resultList.options.resultsContainer).addClass('coveo-card-layout-container');\n $$(this.resultList.options.resultsContainer).removeClass(`coveo-list-layout-container`);\n if (this.currentMode != 'small') {\n if (lastResults) {\n this.resultList.buildResults(lastResults).then((elements: HTMLElement[]) => {\n this.resultList.renderResults(elements);\n });\n }\n this.currentMode = 'small';\n }\n } else {\n $$(this.resultList.options.resultsContainer).removeClass('coveo-card-layout-container');\n $$(this.resultList.options.resultsContainer).addClass(`coveo-list-layout-container`);\n if (this.currentMode != 'large') {\n if (lastResults) {\n this.resultList.buildResults(lastResults).then((elements: HTMLElement[]) => {\n this.resultList.renderResults(elements);\n });\n }\n this.currentMode = 'large';\n }\n }\n }\n\n private needSmallMode(): boolean {\n return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getSmallScreenWidth();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResponsiveComponents/ResponsiveDefaultResultTemplate.ts","import { IQueryResult } from '../../rest/QueryResult';\nimport { $$, Dom } from '../../utils/Dom';\nimport { Component } from '../Base/Component';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\n\nexport interface ResultToRender {\n resultElement: HTMLElement;\n componentsInside: Component[];\n}\n\nexport class ResultContainer {\n public static resultCurrentlyBeingRendered: IQueryResult = null;\n\n public resultContainerElement: Dom;\n\n constructor(resultContainer: HTMLElement, private searchInterface: SearchInterface) {\n this.resultContainerElement = $$(resultContainer);\n }\n\n public empty() {\n this.searchInterface.detachComponentsInside(this.resultContainerElement.el);\n $$(this.resultContainerElement).empty();\n }\n\n public addClass(classToAdd: string) {\n this.resultContainerElement.addClass(classToAdd);\n }\n\n public isEmpty() {\n return this.resultContainerElement.isEmpty();\n }\n\n public hideChildren() {\n this.resultContainerElement.children().forEach(child => $$(child).hide());\n }\n\n public getResultElements() {\n return this.resultContainerElement.findAll('.CoveoResult');\n }\n\n public get el() {\n return this.resultContainerElement.el;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResultList/ResultContainer.ts","import { ResultListRenderer } from './ResultListRenderer';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport class ResultListCardRenderer extends ResultListRenderer {\n getEndFragment(resultElements: HTMLElement[]) {\n return new Promise(resolve => {\n if (!_.isEmpty(resultElements)) {\n // with infinite scrolling, we want the additional results to append at the end of the previous query.\n // For this, we need to remove the padding.\n if (this.resultListOptions.enableInfiniteScroll) {\n const needToBeRemoved = $$(this.resultListOptions.resultsContainer).findAll('.coveo-card-layout-padding');\n _.each(needToBeRemoved, toRemove => $$(toRemove).remove());\n }\n // Used to prevent last card from spanning the grid's whole width\n const emptyCards = document.createDocumentFragment();\n _.times(3, () => emptyCards.appendChild($$('div', { className: 'coveo-card-layout coveo-card-layout-padding' }).el));\n resolve(emptyCards);\n }\n resolve(null);\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResultList/ResultListCardRenderer.ts","import { IResultListOptions } from './ResultListOptions';\nimport { ResultListRenderer } from './ResultListRenderer';\nimport { TemplateRole } from '../Templates/Template';\nimport { TableTemplate } from '../Templates/TableTemplate';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport class ResultListTableRenderer extends ResultListRenderer {\n private shouldDisplayHeader: boolean = true;\n private shouldDisplayFooter: boolean = false;\n\n constructor(protected resultListOptions: IResultListOptions, protected autoCreateComponentsFn: Function) {\n super(resultListOptions, autoCreateComponentsFn);\n if (this.resultListOptions.resultTemplate instanceof TableTemplate) {\n if (this.resultListOptions.resultTemplate.hasTemplateWithRole('table-footer')) {\n this.shouldDisplayFooter = true;\n }\n // If custom templates are defined but no header template, do not display it.\n if (\n this.resultListOptions.resultTemplate.templates.length !== 0 &&\n !this.resultListOptions.resultTemplate.hasTemplateWithRole('table-header')\n ) {\n this.shouldDisplayHeader = false;\n }\n }\n }\n\n getStartFragment(resultElements: HTMLElement[], append: boolean): Promise {\n if (!append && !_.isEmpty(resultElements) && this.shouldDisplayHeader) {\n return this.renderRoledTemplate('table-header');\n }\n }\n\n getEndFragment(resultElements: HTMLElement[], append: boolean): Promise {\n if (!append && !_.isEmpty(resultElements) && this.shouldDisplayFooter) {\n return this.renderRoledTemplate('table-footer');\n }\n }\n\n private async renderRoledTemplate(role: TemplateRole) {\n const elem = await (this.resultListOptions.resultTemplate).instantiateRoleToElement(role);\n $$(elem).addClass(`coveo-result-list-${role}`);\n this.autoCreateComponentsFn(elem, undefined);\n const frag = document.createDocumentFragment();\n frag.appendChild(elem);\n return frag;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResultList/ResultListTableRenderer.ts","import { IResponsiveDropdownContent, ResponsiveDropdownContent } from './ResponsiveDropdownContent';\nimport { Dom, $$, l } from '../../../Core';\nimport { SVGIcons } from '../../../utils/SVGIcons';\nimport { FocusTrap } from '../../FocusTrap/FocusTrap';\n\nexport class ResponsiveDropdownModalContent implements IResponsiveDropdownContent {\n private closeButton: Dom;\n private className: string;\n private focusTrap: FocusTrap;\n\n constructor(private componentName: string, public element: Dom, private closeButtonLabel: string, private close: () => void) {\n this.className = `coveo-${this.componentName}-dropdown-modal-content`;\n }\n\n private set hidden(shouldHide: boolean) {\n this.element.toggleClass('coveo-hidden', shouldHide);\n }\n\n public positionDropdown() {\n this.element.el.classList.add(this.className, ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n this.element.setAttribute('role', 'group');\n this.element.setAttribute('aria-label', l('FiltersDropdown'));\n this.hidden = false;\n this.ensureCloseButton();\n this.ensureFocusTrap();\n }\n\n public hideDropdown() {\n this.element.el.classList.remove(this.className, ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n this.element.setAttribute('role', null);\n this.element.setAttribute('aria-label', null);\n this.hidden = true;\n this.removeCloseButton();\n this.removeFocusTrap();\n }\n\n public cleanUp() {\n this.hidden = false;\n }\n\n private ensureCloseButton() {\n if (!this.closeButton) {\n this.closeButton = $$(\n 'button',\n {\n className: 'coveo-facet-modal-close-button',\n ariaLabel: this.closeButtonLabel\n },\n SVGIcons.icons.mainClear\n );\n this.closeButton.on('click', () => this.close());\n this.element.prepend(this.closeButton.el);\n }\n }\n\n private ensureFocusTrap() {\n if (!this.focusTrap) {\n this.focusTrap = new FocusTrap(this.element.el);\n }\n }\n\n private removeCloseButton() {\n if (this.closeButton) {\n this.closeButton.remove();\n this.closeButton = null;\n }\n }\n\n private removeFocusTrap() {\n if (this.focusTrap) {\n this.focusTrap.disable();\n this.focusTrap = null;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResponsiveComponents/ResponsiveDropdown/ResponsiveDropdownModalContent.ts","/**\n * The names of the events that can be triggered by the [FacetsMobileMode]{@link FacetsMobileMode} component.\n */\nexport class FacetsMobileModeEvents {\n /**\n * The name of the event that gets triggered when the facets pop-up (or modal) is opened in mobile mode.\n */\n public static popupOpened = 'popupOpened';\n /**\n * The name of the event that gets triggered when the facets pop-up (or modal) is closed in mobile mode.\n */\n public static popupClosed = 'popupClosed';\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/events/FacetsMobileModeEvents.ts","import { l } from '../../../strings/Strings';\nimport { SVGIcons } from '../../../utils/SVGIcons';\nimport { $$ } from '../../../utils/Dom';\nimport { DynamicFacetHeaderButton } from './DynamicFacetHeaderButton';\nimport { IDynamicFacetHeaderOptions } from './DynamicFacetHeader';\nimport { SVGDom } from '../../../utils/SVGDom';\n\nexport interface IDynamicFacetCollapseToggleOptions {\n collapsed: boolean;\n}\n\nexport class DynamicFacetHeaderCollapseToggle {\n public element: HTMLElement;\n private button: DynamicFacetHeaderButton;\n\n constructor(private options: IDynamicFacetHeaderOptions) {\n this.create();\n }\n\n private create() {\n const parent = $$('div');\n\n this.button = new DynamicFacetHeaderButton({\n label: l('CollapseFacet', this.options.title),\n iconSVG: SVGIcons.icons.arrowUp,\n iconClassName: 'coveo-dynamic-facet-collapse-toggle-svg',\n className: 'coveo-dynamic-facet-header-collapse',\n shouldDisplay: true,\n action: () => this.options.toggleCollapse()\n });\n\n parent.append(this.button.element);\n this.element = parent.el;\n }\n\n public toggleButton(isCollapsed: boolean) {\n const node = $$(this.button.element);\n const label = isCollapsed ? l('ExpandFacet', this.options.title) : l('CollapseFacet', this.options.title);\n const icon = isCollapsed ? SVGIcons.icons.arrowDown : SVGIcons.icons.arrowUp;\n\n node.setAttribute('aria-label', label);\n node.setAttribute('title', label);\n\n node.toggleClass('coveo-dynamic-facet-header-expand', isCollapsed);\n node.toggleClass('coveo-dynamic-facet-header-collapse', !isCollapsed);\n\n node.setHtml(icon);\n SVGDom.addClassToSVGInContainer(node.el, 'coveo-dynamic-facet-collapse-toggle-svg');\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetHeader/DynamicFacetHeaderCollapseToggle.ts","import { TextInput, ITextInputOptions } from '../FormWidgets/TextInput';\nimport { $$ } from '../../utils/Dom';\nimport { KEYBOARD } from '../../utils/KeyboardUtils';\nimport { Utils } from '../../utils/Utils';\nimport { IComboboxAccessibilityAttributes, ICombobox } from './ICombobox';\n\nexport class ComboboxInput {\n public element: HTMLElement;\n private textInput: TextInput;\n private inputElement: HTMLInputElement;\n private inputOptions: ITextInputOptions = {\n usePlaceholder: true,\n className: 'coveo-combobox-input',\n triggerOnChangeAsYouType: true,\n isRequired: false,\n icon: 'search'\n };\n\n constructor(private combobox: ICombobox) {\n this.create();\n this.element = this.textInput.getElement();\n this.inputElement = $$(this.element).find('input') as HTMLInputElement;\n this.addEventListeners();\n this.addAccessibilityAttributes();\n }\n\n public get value() {\n return this.inputElement.value;\n }\n\n private create() {\n this.textInput = new TextInput(\n (inputInstance: TextInput) => this.combobox.onInputChange(inputInstance.getValue()),\n this.combobox.options.placeholderText,\n this.inputOptions\n );\n }\n\n private addEventListeners() {\n if (!this.combobox.options.clearOnBlur) {\n this.inputElement.addEventListener('focus', () => this.combobox.onInputChange(this.textInput.getValue()));\n }\n this.combobox.element.addEventListener('focusout', (e: FocusEvent) => this.handleFocusOut(e));\n this.combobox.element.addEventListener('keydown', (e: KeyboardEvent) => this.handleKeyboardDirection(e));\n this.combobox.element.addEventListener('keyup', (e: KeyboardEvent) => this.handleKeyboardEnterEscape(e));\n }\n\n private addAccessibilityAttributes() {\n const listboxId = `${this.combobox.id}-listbox`;\n this.inputElement.setAttribute('role', 'combobox');\n this.inputElement.setAttribute('aria-owns', listboxId);\n this.inputElement.setAttribute('aria-haspopup', 'listbox');\n this.inputElement.setAttribute('aria-autocomplete', 'list');\n this.inputElement.setAttribute('id', `${this.combobox.id}-input`);\n this.inputElement.setAttribute('aria-label', this.combobox.options.label);\n\n this.updateAccessibilityAttributes({\n activeDescendant: '',\n expanded: false\n });\n }\n\n public updateAccessibilityAttributes(attributes: IComboboxAccessibilityAttributes) {\n this.inputElement.setAttribute('aria-expanded', attributes.expanded ? 'true' : 'false');\n Utils.isEmptyString(attributes.activeDescendant)\n ? this.inputElement.removeAttribute('aria-activedescendant')\n : this.inputElement.setAttribute('aria-activedescendant', attributes.activeDescendant);\n }\n\n public clearInput() {\n this.textInput.reset();\n }\n\n private handleFocusOut(event: FocusEvent) {\n const newTarget = event.relatedTarget as HTMLElement;\n const focusInsideCombobox = this.combobox.element.contains(newTarget);\n if (focusInsideCombobox) {\n return;\n }\n\n const comboboxValuesHovered = $$(this.combobox.element).find('.coveo-combobox-values:hover');\n if (comboboxValuesHovered) {\n this.inputElement.focus();\n return;\n }\n\n this.combobox.onInputBlur();\n }\n\n private handleKeyboardDirection(event: KeyboardEvent) {\n switch (event.which) {\n case KEYBOARD.DOWN_ARROW:\n event.preventDefault();\n this.combobox.values.focusNextValue();\n break;\n case KEYBOARD.UP_ARROW:\n event.preventDefault();\n this.combobox.values.focusPreviousValue();\n break;\n case KEYBOARD.HOME:\n event.preventDefault();\n this.combobox.values.focusFirstValue();\n break;\n case KEYBOARD.END:\n event.preventDefault();\n this.combobox.values.focusLastValue();\n break;\n }\n }\n\n private handleKeyboardEnterEscape(event: KeyboardEvent) {\n switch (event.which) {\n case KEYBOARD.ENTER:\n this.combobox.values.selectActiveValue();\n break;\n case KEYBOARD.ESCAPE:\n if (Utils.isNonEmptyString(this.textInput.getValue())) {\n event.stopPropagation();\n }\n this.combobox.clearAll();\n break;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Combobox/ComboboxInput.ts","import { ICombobox, IComboboxValues, IComboboxValue } from './ICombobox';\nimport { $$ } from '../../utils/Dom';\nimport { find } from 'underscore';\nimport { l } from '../../strings/Strings';\nimport { escape } from 'underscore';\n\nexport class ComboboxValues implements IComboboxValues {\n public element: HTMLElement;\n public mouseIsOverValue = false;\n public isRenderingNewValues = false;\n private values: IComboboxValue[] = [];\n private keyboardActiveValue?: IComboboxValue;\n private isScrollable: boolean;\n private focusedValueId: string;\n\n constructor(private combobox: ICombobox) {\n this.element = $$('ul', {\n id: `${this.combobox.id}-listbox`,\n role: 'listbox',\n className: 'coveo-combobox-values',\n ariaLabelledby: `${this.combobox.id}-input`\n }).el;\n $$(this.element).hide();\n\n this.isScrollable = !!this.combobox.options.scrollable;\n this.isScrollable && this.element.addEventListener('scroll', () => this.onScroll());\n }\n\n public renderFromResponse(response: any) {\n this.isRenderingNewValues = true;\n this.clearValues();\n this.values = this.combobox.options.createValuesFromResponse(response);\n this.render();\n this.combobox.updateAriaLive();\n this.isRenderingNewValues = false;\n }\n\n private render() {\n $$(this.element).show();\n\n if (!this.hasValues()) {\n return this.renderNoValuesFound();\n }\n\n this.renderValues();\n this.addEventListeners();\n this.updateAccessibilityAttributes();\n }\n\n private renderValues() {\n const fragment = document.createDocumentFragment();\n this.values.forEach((value, index) => {\n const elementWrapper = $$(\n 'li',\n { id: `${this.combobox.id}-value-${index}`, className: 'coveo-combobox-value', role: 'option', tabindex: 0 },\n value.element\n ).el;\n this.highlightCurrentQueryInSearchResults(value.element);\n value.element = elementWrapper;\n fragment.appendChild(value.element);\n });\n\n this.element.appendChild(fragment);\n }\n\n private highlightCurrentQueryInSearchResults(searchResult: HTMLElement) {\n if (this.combobox.options.highlightValueClassName) {\n const regex = new RegExp('(' + this.combobox.element.querySelector('input').value + ')', 'ig');\n const result = $$(searchResult).hasClass(this.combobox.options.highlightValueClassName)\n ? searchResult\n : $$(searchResult).find(`.${this.combobox.options.highlightValueClassName}`);\n if (result) {\n const text = escape($$(result).text());\n result.innerHTML = text.replace(regex, '$1');\n }\n }\n }\n\n public hasValues() {\n return !!this.numberOfValues;\n }\n\n public get numberOfValues() {\n return this.values.length;\n }\n\n private renderNoValuesFound() {\n const noValuesFoundElement = $$(\n 'li',\n {\n role: 'option',\n className: 'coveo-combobox-value-not-found'\n },\n l('NoValuesFound')\n ).el;\n\n this.element.appendChild(noValuesFoundElement);\n }\n\n private addEventListeners() {\n this.values.forEach(value => {\n $$(value.element).on('mouseenter', () => (this.mouseIsOverValue = true));\n $$(value.element).on('mouseleave', () => (this.mouseIsOverValue = false));\n $$(value.element).on('click', (e: MouseEvent) => this.onValueClick(e));\n $$(value.element).on('focus', () => this.setKeyboardActiveValue(value));\n });\n }\n\n private onValueClick(e: MouseEvent) {\n const target = e.target;\n const targetElement = $$(target).hasClass('coveo-combobox-value') ? target : $$(target).parent('coveo-combobox-value');\n\n if (!targetElement) {\n return;\n }\n\n const targetId = targetElement.getAttribute('id');\n const value = find(this.values, ({ element }) => element.getAttribute('id') === targetId);\n value && this.combobox.options.onSelectValue(value);\n this.combobox.clearAll();\n }\n\n private updateAccessibilityAttributes() {\n const activeDescendant = this.keyboardActiveValue ? this.keyboardActiveValue.element.getAttribute('id') : '';\n\n this.combobox.updateAccessibilityAttributes({\n activeDescendant,\n expanded: this.hasValues()\n });\n }\n\n public clearValues() {\n this.mouseIsOverValue = false;\n this.resetKeyboardActiveValue();\n $$(this.element).empty();\n $$(this.element).hide();\n this.values = [];\n this.updateAccessibilityAttributes();\n }\n\n private setKeyboardActiveValue(value: IComboboxValue) {\n this.resetKeyboardActiveValue();\n this.keyboardActiveValue = value;\n this.activateFocusOnValue(this.keyboardActiveValue);\n this.updateAccessibilityAttributes();\n }\n\n private resetKeyboardActiveValue() {\n if (!this.keyboardActiveValue) {\n return;\n }\n\n this.deactivateFocusOnValue(this.keyboardActiveValue);\n this.keyboardActiveValue = null;\n }\n\n private activateFocusOnValue({ element }: IComboboxValue) {\n $$(element).addClass('coveo-focused');\n element.setAttribute('aria-selected', 'true');\n }\n\n private deactivateFocusOnValue({ element }: IComboboxValue) {\n $$(element).removeClass('coveo-focused');\n element.setAttribute('aria-selected', 'false');\n }\n\n public selectActiveValue() {\n if (!this.keyboardActiveValue) {\n return;\n }\n\n this.combobox.options.onSelectValue(this.keyboardActiveValue);\n this.combobox.clearAll();\n }\n\n private onScroll() {\n const scrollEndReached = this.element.scrollTop + this.element.clientHeight >= this.element.scrollHeight;\n if (scrollEndReached && this.combobox.options.scrollable.areMoreValuesAvailable()) {\n this.combobox.onScrollEndReached();\n }\n }\n\n public resetScroll() {\n if (!this.isScrollable) {\n return;\n }\n this.element.style.maxHeight = `${this.combobox.options.scrollable.maxDropdownHeight}px`;\n this.element.scrollTop = 0;\n }\n\n public focusFirstValue() {\n if (!this.hasValues()) {\n return;\n }\n\n this.firstValue.element.focus();\n }\n\n public focusLastValue() {\n if (!this.hasValues()) {\n return;\n }\n\n this.lastValue.element.focus();\n }\n\n public focusNextValue() {\n if (!this.hasValues()) {\n return;\n }\n\n const nextActiveValue = this.nextOrFirstValue;\n nextActiveValue.element.focus();\n }\n\n public focusPreviousValue() {\n if (!this.hasValues()) {\n return;\n }\n\n const previousActiveValue = this.previousOrLastValue;\n previousActiveValue.element.focus();\n }\n\n private get nextOrFirstValue() {\n if (!this.keyboardActiveValue) {\n return this.firstValue;\n }\n\n const nextValueIndex = (this.values.indexOf(this.keyboardActiveValue) + 1) % this.numberOfValues;\n return this.values[nextValueIndex];\n }\n\n private get firstValue() {\n return this.values[0];\n }\n\n private get previousOrLastValue() {\n if (!this.keyboardActiveValue) {\n return this.lastValue;\n }\n\n const previousValueIndex = this.values.indexOf(this.keyboardActiveValue) - 1;\n return previousValueIndex >= 0 ? this.values[previousValueIndex] : this.values[this.numberOfValues - 1];\n }\n\n private get lastValue() {\n const lastValueIndex = this.numberOfValues - 1;\n return this.values[lastValueIndex];\n }\n\n public saveFocusedValue() {\n if (!this.keyboardActiveValue) {\n this.focusedValueId = null;\n return;\n }\n\n this.focusedValueId = this.keyboardActiveValue.element.id;\n }\n\n public restoreFocusedValue() {\n if (!this.focusedValueId) {\n return;\n }\n\n const element = $$(this.element).find(`#${this.focusedValueId}`);\n element.focus();\n this.focusedValueId = null;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Combobox/ComboboxValues.ts","import { ResponsiveFacetColumn } from './ResponsiveFacetColumn';\nimport { IResponsiveComponentOptions } from './ResponsiveComponentsManager';\nimport { DynamicFacet } from '../DynamicFacet/DynamicFacet';\n\nexport class ResponsiveDynamicFacets extends ResponsiveFacetColumn {\n public static init(root: HTMLElement, component, options: IResponsiveComponentOptions) {\n ResponsiveFacetColumn.init(ResponsiveDynamicFacets, root, component, options, DynamicFacet.ID);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResponsiveComponents/ResponsiveDynamicFacets.ts","import 'styling/DynamicFacet/_DynamicFacetBreadcrumbs';\nimport { $$ } from '../../utils/Dom';\nimport { l } from '../../strings/Strings';\nimport { SVGIcons } from '../../utils/SVGIcons';\nimport { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { IDynamicFacet, IDynamicFacetValue } from './IDynamicFacet';\nimport { escape } from 'underscore';\n\nexport class DynamicFacetBreadcrumbs {\n public element: HTMLElement;\n\n constructor(private facet: IDynamicFacet) {\n this.create();\n }\n\n private create() {\n this.element = $$('ul', { className: 'coveo-dynamic-facet-breadcrumb coveo-breadcrumb-item' }).el;\n this.createAndAppendTitle();\n\n const activeFacetValues = this.facet.values.activeValues;\n const breadcrumbFacetValues = activeFacetValues.slice(0, this.facet.options.numberOfValuesInBreadcrumb);\n const collapsedFacetValues = activeFacetValues.slice(this.facet.options.numberOfValuesInBreadcrumb);\n\n this.createAndAppendBreadcrumbValues(breadcrumbFacetValues);\n\n if (collapsedFacetValues.length) {\n this.createAndAppendCollapsedBreadcrumbs(collapsedFacetValues);\n }\n }\n\n private createAndAppendTitle() {\n const titleElement = $$('h3', { className: 'coveo-dynamic-facet-breadcrumb-title' }, `${this.facet.options.title}:`).el;\n this.element.appendChild(titleElement);\n }\n\n private createAndAppendBreadcrumbValues(facetValues: IDynamicFacetValue[]) {\n facetValues.forEach(facetValue => this.createAndAppendBreadcrumbValue(facetValue));\n }\n\n private createAndAppendBreadcrumbValue(facetValue: IDynamicFacetValue) {\n const listContainer = $$('li', { className: 'coveo-dynamic-facet-breadcrumb-value-list-item' }).el;\n const valueElement = $$(\n 'button',\n {\n className: 'coveo-dynamic-facet-breadcrumb-value',\n ariaLabel: l('RemoveFilterOn', facetValue.displayValue)\n },\n escape(facetValue.displayValue)\n ).el;\n const clearElement = $$('span', { className: 'coveo-dynamic-facet-breadcrumb-value-clear' }, SVGIcons.icons.mainClear).el;\n valueElement.appendChild(clearElement);\n\n $$(valueElement).on('click', () => this.valueSelectAction(facetValue));\n listContainer.appendChild(valueElement);\n this.element.appendChild(listContainer);\n }\n\n private valueSelectAction(facetValue: IDynamicFacetValue) {\n this.facet.deselectValue(facetValue.value);\n this.facet.enablePreventAutoSelectionFlag();\n this.facet.triggerNewQuery(() => this.logActionToAnalytics());\n }\n\n private logActionToAnalytics() {\n this.facet.logAnalyticsEvent(analyticsActionCauseList.breadcrumbFacet, this.facet.basicAnalyticsFacetMeta);\n }\n\n private createAndAppendCollapsedBreadcrumbs(facetValues: IDynamicFacetValue[]) {\n const label = l('NMore', `${facetValues.length}`);\n const title = facetValues.map(({ value }) => value).join('\\n');\n const collapsedElement = $$(\n 'button',\n {\n className: 'coveo-dynamic-facet-breadcrumb-collapse',\n title\n },\n label\n ).el;\n\n $$(collapsedElement).on('click', () => {\n $$(collapsedElement).remove();\n this.createAndAppendBreadcrumbValues(facetValues);\n });\n\n this.element.appendChild(collapsedElement);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetBreadcrumbs.ts","import { Combobox } from '../Combobox/Combobox';\nimport { l } from '../../strings/Strings';\nimport { FacetSearchController } from '../../controllers/FacetSearchController';\nimport { IFacetSearchResponse } from '../../rest/Facet/FacetSearchResponse';\nimport { DynamicFacetValue } from '../DynamicFacet/DynamicFacetValues/DynamicFacetValue';\nimport { FacetValueState } from '../../rest/Facet/FacetValueState';\nimport { DynamicFacetSearchValueRenderer } from './DynamicFacetSearchValueRenderer';\nimport { IComboboxValue } from '../Combobox/ICombobox';\nimport 'styling/DynamicFacetSearch/_DynamicFacetSearch';\nimport { IDynamicFacet } from '../DynamicFacet/IDynamicFacet';\nimport { FacetUtils } from '../Facet/FacetUtils';\n\nexport class DynamicFacetSearch {\n public element: HTMLElement;\n private facetSearchController: FacetSearchController;\n private combobox: Combobox;\n\n constructor(private facet: IDynamicFacet) {\n this.facetSearchController = new FacetSearchController(this.facet);\n\n this.combobox = new Combobox({\n label: l('SearchFacetResults', this.facet.options.title),\n ariaLive: this.facet.searchInterface.ariaLive,\n requestValues: terms => this.facetSearchController.search(terms),\n createValuesFromResponse: (response: IFacetSearchResponse) => this.createValuesFromResponse(response),\n onSelectValue: this.onSelectValue,\n placeholderText: l('Search'),\n wrapperClassName: 'coveo-dynamic-facet-search',\n clearOnBlur: true,\n scrollable: {\n requestMoreValues: () => this.facetSearchController.fetchMoreResults(),\n areMoreValuesAvailable: () => this.facetSearchController.moreValuesAvailable,\n maxDropdownHeight: 250\n },\n highlightValueClassName: 'coveo-checkbox-span-label'\n });\n\n this.element = this.combobox.element;\n }\n\n private getDisplayValue(value: string) {\n return FacetUtils.getDisplayValueFromValueCaption(value, this.facet.options.field as string, this.facet.options.valueCaption);\n }\n\n private createValuesFromResponse(response: IFacetSearchResponse): IComboboxValue[] {\n return response.values.map((value, index) => {\n const facetValue = new DynamicFacetValue(\n {\n value: value.rawValue,\n // TODO: remove when https://coveord.atlassian.net/browse/SEARCHAPI-4958 is fixed\n displayValue: this.getDisplayValue(value.displayValue),\n numberOfResults: value.count,\n state: FacetValueState.idle,\n position: index + 1\n },\n this.facet,\n DynamicFacetSearchValueRenderer\n );\n return {\n value: facetValue,\n element: facetValue.renderedElement\n };\n });\n }\n\n private onSelectValue({ value }: IComboboxValue) {\n (value.renderer).selectAction();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacetSearch/DynamicFacetSearch.ts","import { IFacetSearchResponse } from '../rest/Facet/FacetSearchResponse';\nimport { FileTypes } from '../ui/Misc/FileTypes';\nimport { QueryUtils } from '../utils/QueryUtils';\nimport { DateUtils } from '../utils/DateUtils';\nimport { IDynamicFacet } from '../ui/DynamicFacet/IDynamicFacet';\nimport { IFacetSearchRequest } from '../rest/Facet/FacetSearchRequest';\n\nexport class FacetSearchController {\n private terms = '';\n private pageCount = 1;\n private numberOfValuesMultiplier = 3;\n\n public moreValuesAvailable = true;\n\n constructor(private facet: IDynamicFacet) {}\n\n private getMonthsValueCaptions() {\n const monthsValueCaptions: Record = {};\n for (let month = 1; month <= 12; month++) {\n const key = `0${month}`.substr(-2);\n monthsValueCaptions[key] = DateUtils.monthToString(month - 1);\n }\n\n return monthsValueCaptions;\n }\n\n private addTypesCaptionsIfNecessary(): Record {\n const field = this.facet.options.field.toLowerCase();\n const isFileType = QueryUtils.isStratusAgnosticField(field, '@filetype');\n const isObjectType = QueryUtils.isStratusAgnosticField(field, '@objecttype');\n const isMonth = QueryUtils.isStratusAgnosticField(field, '@month');\n\n if (isFileType || isObjectType) {\n return FileTypes.getFileTypeCaptions();\n }\n\n if (isMonth) {\n return this.getMonthsValueCaptions();\n }\n\n return {};\n }\n\n private get captions(): Record {\n return {\n ...this.addTypesCaptionsIfNecessary(),\n ...this.facet.options.valueCaption\n };\n }\n\n private get numberOfValues() {\n return this.facet.options.numberOfValues * this.numberOfValuesMultiplier * this.pageCount;\n }\n\n private get request(): IFacetSearchRequest {\n const optionalLeadingWildcard = this.facet.options.useLeadingWildcardInFacetSearch ? '*' : '';\n return {\n field: this.facet.fieldName,\n numberOfValues: this.numberOfValues,\n ignoreValues: this.facet.values.activeValues.map(value => value.value),\n captions: this.captions,\n searchContext: this.facet.queryController.getLastQuery(),\n query: `${optionalLeadingWildcard}${this.terms}*`\n };\n }\n\n private async triggerRequest() {\n const response = await this.facet.queryController.getEndpoint().facetSearch(this.request);\n this.moreValuesAvailable = response.moreValuesAvailable;\n return response;\n }\n\n public search(terms: string): Promise {\n this.terms = terms;\n this.pageCount = 1;\n return this.triggerRequest();\n }\n\n public fetchMoreResults(): Promise {\n this.pageCount++;\n return this.triggerRequest();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/controllers/FacetSearchController.ts","import { $$, Dom } from '../../utils/Dom';\nimport { DynamicFacetValue } from '../DynamicFacet/DynamicFacetValues/DynamicFacetValue';\nimport { DynamicFacetValueCheckbox } from '../DynamicFacet/DynamicFacetValues/DynamicFacetValueCheckbox';\nimport { IDynamicFacet, IValueRenderer } from '../DynamicFacet/IDynamicFacet';\n\nexport class DynamicFacetSearchValueRenderer implements IValueRenderer {\n private dom: Dom;\n private valueCheckbox: DynamicFacetValueCheckbox;\n\n constructor(private facetValue: DynamicFacetValue, private facet: IDynamicFacet) {}\n\n public render() {\n this.dom = $$('div', {\n className: 'coveo-dynamic-facet-value',\n dataValue: this.facetValue.value\n });\n\n this.renderCheckbox();\n return this.dom.el;\n }\n\n private renderCheckbox() {\n this.valueCheckbox = new DynamicFacetValueCheckbox(this.facetValue);\n $$(this.valueCheckbox.element).find('button').setAttribute('tabindex', '-1');\n\n this.dom.append(this.valueCheckbox.element);\n }\n\n public selectAction() {\n this.facet.enableFreezeFacetOrderFlag();\n this.facet.toggleSelectValue(this.facetValue.value);\n this.facetValue.select();\n this.facet.scrollToTop();\n this.facet.triggerNewQuery(() => this.facetValue.logSelectActionToAnalytics());\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacetSearch/DynamicFacetSearchValueRenderer.ts","import { FacetUtils } from '../../Facet/FacetUtils';\nimport { IDynamicFacet, IValueCreator } from '../IDynamicFacet';\nimport { DynamicFacetValue } from './DynamicFacetValue';\nimport { IFacetResponseValue } from '../../../rest/Facet/FacetResponse';\nimport { FacetValueState } from '../../../rest/Facet/FacetValueState';\nimport { DynamicFacetValueRenderer } from './DynamicFacetValueRenderer';\n\nexport class DynamicFacetValueCreator implements IValueCreator {\n constructor(private facet: IDynamicFacet) {}\n\n private getDisplayValue(value: string) {\n return FacetUtils.getDisplayValueFromValueCaption(value, this.facet.options.field as string, this.facet.options.valueCaption);\n }\n\n public getDefaultValues() {\n return [];\n }\n\n public createFromResponse(facetValue: IFacetResponseValue, index: number) {\n return new DynamicFacetValue(\n {\n value: facetValue.value,\n displayValue: this.getDisplayValue(facetValue.value),\n numberOfResults: facetValue.numberOfResults,\n state: facetValue.state,\n position: index + 1\n },\n this.facet,\n DynamicFacetValueRenderer\n );\n }\n\n public createFromValue(value: string) {\n const position = this.facet.values.allFacetValues.length + 1;\n const state = FacetValueState.idle;\n const displayValue = this.getDisplayValue(value);\n return new DynamicFacetValue({ value, displayValue, state, numberOfResults: 0, position }, this.facet, DynamicFacetValueRenderer);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DynamicFacet/DynamicFacetValues/DynamicFacetValueCreator.ts","/**\n * The allowed states of a facet value in a Search API facet\n * [request]{@link IFacetRequestValue.state} or\n * [response]{@link IFacetResponseValue.state}.\n */\nexport enum FacetValueState {\n /**\n * The facet value is not currently selected or excluded in the search\n * interface.\n */\n idle = 'idle',\n /**\n * The facet value is currently selected in the search interface.\n */\n selected = 'selected'\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/rest/Facet/FacetValueState.ts","import { ComponentOptions } from '../Base/ComponentOptions';\n\n/**\n * ResponsiveFacets options\n */\nexport const ResponsiveFacetOptions = {\n /**\n * Specifies whether to enable *responsive mode* for facets. Setting this options to `false` on any `Facet`, or\n * [`FacetSlider`]{@link FacetSlider} component in a search interface disables responsive mode for all other facets\n * in the search interface.\n *\n * Responsive mode displays all facets under a single dropdown button whenever the width of the HTML element which\n * the search interface is bound to reaches or falls behind a certain threshold (see\n * {@link SearchInterface.responsiveComponents}).\n *\n * See also the [`dropdownHeaderLabel`]{@link Facet.options.dropdownHeaderLabel} option.\n *\n * Default value is `true`.\n */\n enableResponsiveMode: ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'ResponsiveOptions' }),\n responsiveBreakpoint: ComponentOptions.buildNumberOption({\n deprecated:\n 'This option is exposed for legacy reasons. It is not recommended to use this option. Instead, use `SearchInterface.options.responsiveMediumBreakpoint` options exposed on the `SearchInterface`.'\n }),\n /**\n * If the [`enableResponsiveMode`]{@link Facet.options.enableResponsiveMode} option is `true` for all facets and\n * {@link FacetSlider.options.enableResponsiveMode} is also `true` for all sliders, specifies the label of the\n * dropdown button that allows to display the facets when in responsive mode.\n *\n * If more than one `Facet` or {@link FacetSlider} component in the search interface specifies a value for this\n * option, the framework uses the first occurrence of the option.\n *\n * Default value is `Filters`.\n */\n dropdownHeaderLabel: ComponentOptions.buildLocalizedStringOption({ section: 'ResponsiveOptions' })\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResponsiveComponents/ResponsiveFacetOptions.ts","import 'styling/_Result';\nimport 'styling/_ResultFrame';\nimport 'styling/_ResultList';\nimport { chain, compact, contains, each, flatten, map, unique, without, uniqueId, find } from 'underscore';\nimport {\n IBuildingQueryEventArgs,\n IDuringQueryEventArgs,\n INewQueryEventArgs,\n IQueryErrorEventArgs,\n IQuerySuccessEventArgs,\n QueryEvents\n} from '../../events/QueryEvents';\nimport { IResultLayoutPopulateArgs, ResultLayoutEvents } from '../../events/ResultLayoutEvents';\nimport {\n IChangeLayoutEventArgs,\n IDisplayedNewResultEventArgs,\n IDisplayedNewResultsEventArgs,\n ResultListEvents\n} from '../../events/ResultListEvents';\nimport { exportGlobally } from '../../GlobalExports';\nimport { Assert } from '../../misc/Assert';\nimport { Defer } from '../../misc/Defer';\nimport { MODEL_EVENTS } from '../../models/Model';\nimport { QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { $$, Doc, Win } from '../../utils/Dom';\nimport { DomUtils } from '../../utils/DomUtils';\nimport { Utils } from '../../utils/Utils';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IInitializationParameters, IInitResult, Initialization } from '../Base/Initialization';\nimport { InitializationPlaceholder } from '../Base/InitializationPlaceholder';\nimport { TemplateComponentOptions } from '../Base/TemplateComponentOptions';\nimport { ResponsiveDefaultResultTemplate } from '../ResponsiveComponents/ResponsiveDefaultResultTemplate';\nimport { ValidLayout, RendererValidLayout } from '../ResultLayoutSelector/ValidLayout';\nimport { CoreHelpers } from '../Templates/CoreHelpers';\nimport { DefaultRecommendationTemplate } from '../Templates/DefaultRecommendationTemplate';\nimport { DefaultResultTemplate } from '../Templates/DefaultResultTemplate';\nimport { TableTemplate } from '../Templates/TableTemplate';\nimport { Template } from '../Templates/Template';\nimport { TemplateCache } from '../Templates/TemplateCache';\nimport { TemplateList } from '../Templates/TemplateList';\nimport { ResultContainer } from './ResultContainer';\nimport { ResultListCardRenderer } from './ResultListCardRenderer';\nimport { ResultListRenderer } from './ResultListRenderer';\nimport { ResultListTableRenderer } from './ResultListTableRenderer';\nimport ResultLayoutSelectorModule = require('../ResultLayoutSelector/ResultLayoutSelector');\nimport { IResultListOptions } from './ResultListOptions';\nimport { ResultListUtils } from '../../utils/ResultListUtils';\nimport { TemplateToHtml, ITemplateToHtml } from '../Templates/TemplateToHtml';\n\nCoreHelpers.exportAllHelpersGlobally(window['Coveo']);\n\ntype WaitAnimation = 'fade' | 'spinner' | 'none';\n\n/**\n * The `ResultList` component is responsible for displaying query results by applying one or several result templates\n * (see [Result Templates](https://docs.coveo.com/en/413/)).\n *\n * It is possible to include multiple `ResultList` components along with a single `ResultLayout`\n * component in a search page to provide different result layouts (see\n * [Result Layouts](https://docs.coveo.com/en/360/)).\n *\n * This component supports infinite scrolling (see the\n * [`enableInfiniteScroll`]{@link ResultList.options.enableInfiniteScroll} option).\n */\nexport class ResultList extends Component {\n private static getDefaultTemplate(e: HTMLElement): Template {\n const template = ResultList.loadTemplatesFromCache();\n if (template != null) {\n return template;\n }\n\n const component = Component.get(e);\n if (Coveo['Recommendation'] && component.searchInterface instanceof Coveo['Recommendation']) {\n return new DefaultRecommendationTemplate();\n }\n return new DefaultResultTemplate();\n }\n\n private static loadTemplatesFromCache(): Template {\n var pageTemplateNames = TemplateCache.getResultListTemplateNames();\n if (pageTemplateNames.length > 0) {\n return new TemplateList(compact(map(pageTemplateNames, templateName => TemplateCache.getTemplate(templateName))));\n }\n\n return null;\n }\n\n static ID = 'ResultList';\n\n static doExport = () => {\n exportGlobally({\n ResultList: ResultList\n });\n };\n\n /**\n * The options for the ResultList\n * @componentOptions\n */\n static options: IResultListOptions = {\n /**\n * The element inside which to insert the rendered result templates.\n *\n * Performing a new query clears the content of this element.\n *\n * You can change the container by specifying its selector (e.g.,\n * `data-result-container-selector='#someCssSelector'`).\n *\n * If you specify no value for this option, a `div` element will be dynamically created and appended to the result\n * list. This element will then be used as a result container.\n */\n resultsContainer: ComponentOptions.buildChildHtmlElementOption({ alias: 'resultContainerSelector' }),\n resultTemplate: TemplateComponentOptions.buildTemplateOption({ defaultFunction: ResultList.getDefaultTemplate }),\n\n /**\n * The type of animation to display while waiting for a query to return.\n *\n * The possible values are:\n * - `fade`: Fades out the current list of results while the query is executing.\n * - `spinner`: Shows a spinning animation while the query is executing.\n * - `none`: Use no animation during queries.\n *\n * See also the [`waitAnimationContainer`]{@link ResultList.options.waitAnimationContainer} option.\n *\n * @examples spinner\n */\n waitAnimation: ComponentOptions.buildStringOption({ defaultValue: 'none' }),\n\n /**\n * The element inside which to display the [`waitAnimation`]{@link ResultList.options.waitAnimation}.\n *\n * You can change this by specifying a CSS selector (e.g.,\n * `data-wait-animation-container-selector='#someCssSelector'`).\n *\n * Defaults to the value of the [`resultsContainer`]{@link ResultList.options.resultsContainer} option.\n */\n waitAnimationContainer: ComponentOptions.buildChildHtmlElementOption({\n postProcessing: (value, options: IResultListOptions) => value || options.resultsContainer\n }),\n\n /**\n * Whether to automatically retrieve an additional page of results and append it to the\n * results that the `ResultList` is currently displaying when the user scrolls down to the bottom of the\n * [`infiniteScrollContainer`]{@link ResultList.options.infiniteScrollContainer}.\n *\n * See also the [`infiniteScrollPageSize`]{@link ResultList.options.infiniteScrollPageSize} and\n * [`enableInfiniteScrollWaitingAnimation`]{@link ResultList.options.enableInfiniteScrollWaitingAnimation} options.\n *\n * It is important to specify the `infiniteScrollContainer` option manually if you want the scrolling element to be\n * something else than the default `window` element. Otherwise, you might find yourself in a strange state where the\n * framework rapidly triggers multiple successive query.\n */\n enableInfiniteScroll: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n /**\n * The number of additional results to fetch when the user scrolls down to the bottom of the\n * [`infiniteScrollContainer`]{@link ResultList.options.infiniteScrollContainer}.\n *\n * @examples 5\n */\n infiniteScrollPageSize: ComponentOptions.buildNumberOption({\n defaultValue: 10,\n min: 1,\n depend: 'enableInfiniteScroll'\n }),\n\n /**\n * The element that triggers fetching additional results when the end user scrolls down to its bottom.\n *\n * You can change the container by specifying its selector (e.g.,\n * `data-infinite-scroll-container-selector='#someCssSelector'`).\n *\n * By default, the framework uses the first vertically scrollable parent element it finds, starting from the\n * `ResultList` element itself. A vertically scrollable element is an element whose CSS `overflow-y` attribute is\n * `scroll`.\n *\n * This implies that if the framework can find no scrollable parent, it uses the `window` itself as a scrollable\n * container.\n *\n * This heuristic is not perfect, for technical reasons. There are always some corner case CSS combination which the\n * framework will not be able to correctly detect as 'scrollable'.\n *\n * It is highly recommended that you manually set this option if you wish something else than the `window` to be the\n * scrollable element.\n */\n infiniteScrollContainer: ComponentOptions.buildChildHtmlElementOption({\n depend: 'enableInfiniteScroll',\n defaultFunction: element => ComponentOptions.findParentScrolling(element)\n }),\n\n /**\n * Whether to display the [`waitingAnimation`]{@link ResultList.options.waitAnimation} while fetching additional\n * results.\n */\n enableInfiniteScrollWaitingAnimation: ComponentOptions.buildBooleanOption({\n depend: 'enableInfiniteScroll',\n defaultValue: true\n }),\n mobileScrollContainer: ComponentOptions.buildSelectorOption({\n defaultFunction: () => document.querySelector('.coveo-results-column')\n }),\n\n /**\n * Whether the `ResultList` should scan its result templates to discover which fields it must request to\n * be able to render all results.\n *\n * Setting this option to `true` ensures that the Coveo Search API does not return fields that are unnecessary for\n * the UI to function.\n *\n * **Notes:**\n *\n * - Many interfaces created with the JavaScript Search Interface Editor explicitly set this option to `true`.\n * - You cannot set this option to `true` in the Coveo for Sitecore integration.\n */\n autoSelectFieldsToInclude: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n /**\n * A list of fields to include in the query results.\n *\n * If you set the [`autoSelectFieldsToInclude`]{@link ResultList.options.autoSelectFieldsToInclude} option to\n * `true`, the Coveo Search API returns the fields you specify for this option (if those fields are available) in\n * addition to the fields which the `ResultList` automatically requests.\n *\n * Otherwise, the Coveo Search API only returns the fields you specify for this option (if those fields are\n * available), unless you leave this option undefined, in which case the Coveo Search API returns all available\n * fields.\n */\n fieldsToInclude: ComponentOptions.buildFieldsOption({ includeInResults: true }),\n\n /**\n * Specifies the layout to use when displaying results in this `ResultList` (see\n * [Result Layouts](https://docs.coveo.com/en/360/)). Specifying a value for this option automatically\n * populates a [`ResultLayout`]{@link ResultLayout} component with a switcher for the layout.\n *\n * For example, if there are two `ResultList` components in the page, one with its `layout` set to `list` and the\n * other with the same option set to `card`, then the `ResultLayout` component will render two buttons respectively\n * entitled **List** and **Card**.\n *\n * See the [`ValidLayout`]{@link ValidLayout} type for the list of possible values.\n *\n * @examples card\n */\n layout: ComponentOptions.buildStringOption({\n defaultValue: 'list',\n required: true\n }),\n\n /**\n * Whether to scroll back to the top of the page when the end-user:\n * - interacts with a facet when [`infiniteScrollContainer`]{@link ResultList.options.infiniteScrollContainer} is set to `true`\n * - interacts with the [`Pager`]{@link Pager} component when [`infiniteScrollContainer`]{@link ResultList.options.infiniteScrollContainer} is set to `false`\n *\n * **Note:** Setting this option to `false` has no effect on dynamic facets. To disable this behavior on a `DynamicFacet` component, you must set its own [`enableScrollToTop`]{@link DynamicFacet.options.enableScrollToTop} option to `false`.\n *\n * @availablesince [July 2019 Release (v2.6459)](https://docs.coveo.com/en/2938/)\n */\n enableScrollToTop: ComponentOptions.buildBooleanOption({\n defaultValue: true\n })\n };\n\n public static resultCurrentlyBeingRendered: IQueryResult = null;\n public currentlyDisplayedResults: IQueryResult[] = [];\n private fetchingMoreResults: Promise;\n private reachedTheEndOfResults = false;\n private disableLayoutChange = false;\n private renderer: ResultListRenderer;\n private resultContainer: ResultContainer;\n\n // This variable serves to block some setup where the framework fails to correctly identify the \"real\" scrolling container.\n // Since it's not technically feasible to correctly identify the scrolling container in every possible scenario without some very complex logic, we instead try to add some kind of mechanism to\n // block runaway requests where UI will keep asking more results in the index, eventually bringing the browser to it's knee.\n // Those successive request are needed in \"displayMoreResults\" to ensure we fill the scrolling container correctly.\n // Since the container is not identified correctly, it is never \"full\", so we keep asking for more.\n // It is reset every time the user actually scroll the container manually.\n private successiveScrollCount = 0;\n private static MAX_AMOUNT_OF_SUCESSIVE_REQUESTS = 5;\n\n /**\n * Creates a new `ResultList` component. Binds various event related to queries (e.g., on querySuccess ->\n * renderResults). Binds scroll event if the [`enableInfiniteScroll`]{@link ResultList.options.enableInfiniteScroll}\n * option is `true`.\n * @param element The HTMLElement on which to instantiate the component.\n * @param options The options for the `ResultList` component.\n * @param bindings The bindings that the component requires to function normally. If not set, these will be\n * automatically resolved (with a slower execution time).\n * @param elementClassId The class that this component should instantiate. Components that extend the base ResultList\n * use this. Default value is `CoveoResultList`.\n */\n constructor(\n public element: HTMLElement,\n public options?: IResultListOptions,\n public bindings?: IComponentBindings,\n elementClassId: string = ResultList.ID\n ) {\n super(element, elementClassId, bindings);\n this.options = ComponentOptions.initComponentOptions(element, ResultList, options);\n\n Assert.exists(element);\n Assert.exists(this.options);\n Assert.exists(this.options.resultTemplate);\n Assert.exists(this.options.infiniteScrollContainer);\n\n this.showOrHideElementsDependingOnState(false, false);\n\n this.addListeners();\n\n this.resultContainer = this.initResultContainer();\n Assert.exists(this.options.resultsContainer);\n\n this.initWaitAnimationContainer();\n Assert.exists(this.options.waitAnimationContainer);\n\n this.setupTemplatesVersusLayouts();\n $$(this.root).on(ResultLayoutEvents.populateResultLayout, (e, args: IResultLayoutPopulateArgs) =>\n args.layouts.push(this.options.layout)\n );\n this.setupRenderer();\n this.makeElementFocusable();\n this.ensureHasId();\n }\n\n private addListeners() {\n this.bind.onRootElement(QueryEvents.newQuery, (args: INewQueryEventArgs) => this.handleNewQuery());\n this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) =>\n this.handleBuildingQuery(args)\n );\n this.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) =>\n this.handleQuerySuccess(args)\n );\n this.bind.onRootElement(QueryEvents.duringQuery, (args: IDuringQueryEventArgs) => this.handleDuringQuery());\n this.bind.onRootElement(QueryEvents.queryError, (args: IQueryErrorEventArgs) => this.handleQueryError());\n $$(this.root).on(ResultListEvents.changeLayout, (e: Event, args: IChangeLayoutEventArgs) => this.handleChangeLayout(args));\n\n if (this.options.enableInfiniteScroll) {\n this.addInfiniteScrollListeners();\n } else {\n this.addPagerListeners();\n }\n }\n\n private addInfiniteScrollListeners() {\n this.bind.on(this.options.infiniteScrollContainer, 'scroll', () => {\n this.successiveScrollCount = 0;\n this.handleScrollOfResultList();\n });\n this.bind.onRootElement(QueryEvents.deferredQuerySuccess, () => {\n setTimeout(() => {\n this.scrollToTopIfEnabled();\n }, 0);\n });\n }\n\n private addPagerListeners() {\n this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.FIRST, () => {\n this.bind.oneRootElement(QueryEvents.deferredQuerySuccess, () => {\n setTimeout(() => {\n this.scrollToTopIfEnabled();\n }, 0);\n });\n });\n }\n\n /**\n * Get the fields needed to be automatically included in the query for this result list.\n * @returns {string[]}\n */\n public getAutoSelectedFieldsToInclude(): string[] {\n return chain(this.options.resultTemplate.getFields()).concat(this.getMinimalFieldsToInclude()).compact().unique().value();\n }\n\n private setupTemplatesVersusLayouts() {\n const layoutClassToAdd = `coveo-${this.options.layout}-layout-container`;\n this.resultContainer.addClass(layoutClassToAdd);\n\n if (this.options.layout === 'table') {\n this.options.resultTemplate = new TableTemplate((this.options.resultTemplate).templates || []);\n }\n\n // A TemplateList is the scenario where the result template are directly embedded inside the ResultList\n // This is the typical scenario when a page gets created by the interface editor, for example.\n // In that case, we try to stick closely that what is actually configured inside the page, and do no \"special magic\".\n // Stick to the \"hardcoded\" configuration present in the page.\n // We only add the correct layout options if it has not been set manually.\n if (this.options.resultTemplate instanceof TemplateList) {\n each((this.options.resultTemplate).templates, (tmpl: Template) => {\n if (!tmpl.layout) {\n tmpl.layout = this.options.layout;\n }\n });\n } else if (this.options.resultTemplate instanceof DefaultResultTemplate && this.options.layout == 'list') {\n ResponsiveDefaultResultTemplate.init(this.root, this, {});\n }\n }\n\n /**\n * Empties the current result list content and appends the given array of HTMLElement.\n *\n * Can append to existing elements in the result list, or replace them.\n *\n * Triggers the `newResultsDisplayed` and `newResultDisplayed` events.\n * @param resultsElement\n * @param append\n */\n public renderResults(resultElements: HTMLElement[], append = false): Promise {\n if (!append) {\n this.resultContainer.empty();\n }\n\n return this.renderer\n .renderResults(resultElements, append, this.triggerNewResultDisplayed.bind(this))\n .then(() => this.triggerNewResultsDisplayed());\n }\n\n /**\n * Builds and returns an array of HTMLElement with the given result set.\n * @param results the result set to build an array of HTMLElement from.\n */\n public buildResults(results: IQueryResults): Promise {\n const layout = this.options.layout;\n return this.templateToHtml.buildResults(results, layout, this.currentlyDisplayedResults);\n }\n\n /**\n * Builds and returns an HTMLElement for the given result.\n * @param result the result to build an HTMLElement from.\n * @returns {HTMLElement}\n */\n public buildResult(result: IQueryResult): Promise {\n const layout = this.options.layout;\n return this.templateToHtml.buildResult(result, layout, this.currentlyDisplayedResults);\n }\n\n /**\n * Executes a query to fetch new results. After the query returns, renders the new results.\n *\n * Asserts that there are more results to display by verifying whether the last query has returned as many results as\n * requested.\n *\n * Asserts that the `ResultList` is not currently fetching results.\n * @param count The number of results to fetch and display.\n */\n public displayMoreResults(count: number) {\n Assert.isLargerOrEqualsThan(1, count);\n\n if (this.isCurrentlyFetchingMoreResults()) {\n this.logger.warn(\"Ignoring request to display more results since we're already doing so\");\n return;\n }\n if (!this.hasPotentiallyMoreResultsToDisplay()) {\n this.logger.warn(\"Ignoring request to display more results since we know there aren't more to display\");\n return;\n }\n\n if (this.options.enableInfiniteScrollWaitingAnimation) {\n this.showWaitingAnimationForInfiniteScrolling();\n }\n\n return this.fetchAndRenderMoreResults(count);\n }\n\n public get templateToHtml() {\n const templateToHtmlArgs: ITemplateToHtml = {\n resultTemplate: this.options.resultTemplate,\n searchInterface: this.searchInterface,\n queryStateModel: this.queryStateModel\n };\n return new TemplateToHtml(templateToHtmlArgs);\n }\n\n /**\n * Gets the list of currently displayed result.\n * @returns {IQueryResult[]}\n */\n public getDisplayedResults(): IQueryResult[] {\n return this.currentlyDisplayedResults;\n }\n\n /**\n * Gets the list of currently displayed result HTMLElement.\n * @returns {HTMLElement[]}\n */\n public getDisplayedResultsElements(): HTMLElement[] {\n return this.resultContainer.getResultElements();\n }\n\n public enable(): void {\n this.disableLayoutChange = false;\n if (this.resultLayoutSelectors.length > 0) {\n this.enableBasedOnActiveLayouts();\n } else {\n super.enable();\n $$(this.element).removeClass('coveo-hidden');\n }\n }\n\n public disable(): void {\n super.disable();\n const otherLayoutsStillActive = map(this.otherResultLists, otherResultList => otherResultList.options.layout);\n if (!contains(otherLayoutsStillActive, this.options.layout) && !this.disableLayoutChange) {\n each(this.resultLayoutSelectors, resultLayoutSelector => {\n resultLayoutSelector.disableLayouts([this.options.layout] as ValidLayout[]);\n });\n }\n this.disableLayoutChange = false;\n $$(this.element).addClass('coveo-hidden');\n }\n\n protected autoCreateComponentsInsideResult(element: HTMLElement, result: IQueryResult): IInitResult {\n return this.templateToHtml.autoCreateComponentsInsideResult(element, result);\n }\n\n protected triggerNewResultDisplayed(result: IQueryResult, resultElement: HTMLElement) {\n const args: IDisplayedNewResultEventArgs = {\n result: result,\n item: resultElement\n };\n $$(this.element).trigger(ResultListEvents.newResultDisplayed, args);\n }\n\n protected triggerNewResultsDisplayed() {\n const args: IDisplayedNewResultsEventArgs = {\n isInfiniteScrollEnabled: this.options.enableInfiniteScroll\n };\n $$(this.element).trigger(ResultListEvents.newResultsDisplayed, args);\n }\n\n private async fetchAndRenderMoreResults(count: number): Promise {\n this.fetchingMoreResults = this.queryController.fetchMore(count);\n\n try {\n const data = await this.fetchingMoreResults;\n Assert.exists(data);\n this.usageAnalytics.logCustomEvent(analyticsActionCauseList.pagerScrolling, {}, this.element);\n\n this.reachedTheEndOfResults = count > data.results.length;\n this.renderNewResults(data);\n\n this.resetStateAfterFetchingMoreResults();\n\n return data;\n } catch (e) {\n this.resetStateAfterFetchingMoreResults();\n return Promise.reject(e);\n }\n }\n\n private async renderNewResults(data: IQueryResults) {\n const elements = await this.buildResults(data);\n this.renderResults(elements, true);\n this.currentlyDisplayedResults.push(...data.results);\n this.triggerNewResultsDisplayed();\n }\n\n private resetStateAfterFetchingMoreResults() {\n this.hideWaitingAnimationForInfiniteScrolling();\n this.fetchingMoreResults = undefined;\n Defer.defer(() => {\n this.successiveScrollCount++;\n if (this.successiveScrollCount <= ResultList.MAX_AMOUNT_OF_SUCESSIVE_REQUESTS) {\n this.handleScrollOfResultList();\n } else {\n this.logger.info(\n `Result list has triggered 5 consecutive queries to try and fill up the scrolling container, but it is still unable to do so.\n Try explicitly setting the 'data-infinite-scroll-container-selector' option on the result list. See: https://coveo.github.io/search-ui/components/resultlist.html#options.infinitescrollcontainer`\n );\n }\n });\n }\n\n private handleDuringQuery() {\n this.logger.trace('Emptying the result container');\n this.cancelFetchingMoreResultsIfNeeded();\n this.showWaitingAnimation();\n this.showOrHideElementsDependingOnState(false, false);\n }\n\n private handleQueryError() {\n this.hideWaitingAnimation();\n this.resultContainer.empty();\n this.currentlyDisplayedResults = [];\n this.reachedTheEndOfResults = true;\n }\n\n private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n Assert.exists(data);\n Assert.exists(data.results);\n const results = data.results;\n this.logger.trace('Received query results from new query', results);\n this.hideWaitingAnimation();\n\n ResultList.resultCurrentlyBeingRendered = undefined;\n this.reachedTheEndOfResults = data.query.numberOfResults > data.results.results.length;\n\n this.currentlyDisplayedResults = [];\n this.buildResults(data.results).then(async (elements: HTMLElement[]) => {\n await this.renderResults(elements);\n\n this.showOrHideElementsDependingOnState(true, this.currentlyDisplayedResults.length != 0);\n\n if (DeviceUtils.isMobileDevice() && this.options.mobileScrollContainer != undefined) {\n this.options.mobileScrollContainer.scrollTop = 0;\n }\n\n if (this.options.enableInfiniteScroll && results.results.length == data.queryBuilder.numberOfResults) {\n // This will check right away if we need to add more results to make the scroll container full & scrolling.\n this.scrollToTopIfEnabled();\n this.handleScrollOfResultList();\n }\n });\n }\n\n private handleScrollOfResultList() {\n if (this.isCurrentlyFetchingMoreResults() || !this.options.enableInfiniteScroll) {\n return;\n }\n if (this.isScrollingOfResultListAlmostAtTheBottom() && this.hasPotentiallyMoreResultsToDisplay()) {\n this.displayMoreResults(this.options.infiniteScrollPageSize);\n }\n }\n\n private scrollToTopIfEnabled() {\n if (!this.options.enableScrollToTop) {\n return;\n }\n\n ResultListUtils.scrollToTop(this.root);\n }\n\n private handleNewQuery() {\n $$(this.element).removeClass('coveo-hidden');\n ResultList.resultCurrentlyBeingRendered = undefined;\n }\n\n private get otherResultLists() {\n const allResultLists = this.searchInterface.getComponents(ResultList.ID) as ResultList[];\n return without(allResultLists, this);\n }\n\n private get resultLayoutSelectors() {\n return this.searchInterface.getComponents('ResultLayoutSelector') as ResultLayoutSelectorModule.ResultLayoutSelector[];\n }\n\n protected handleBuildingQuery(args: IBuildingQueryEventArgs) {\n if (this.options.fieldsToInclude != null) {\n // remove the @\n args.queryBuilder.addFieldsToInclude(map(this.options.fieldsToInclude, field => field.substr(1)));\n }\n if (this.options.autoSelectFieldsToInclude) {\n const otherFields = flatten(\n map(this.otherResultLists, otherResultList => {\n return otherResultList.getAutoSelectedFieldsToInclude();\n })\n );\n\n args.queryBuilder.addRequiredFields(unique(otherFields.concat(this.getAutoSelectedFieldsToInclude())));\n args.queryBuilder.includeRequiredFields = true;\n }\n }\n\n protected handleChangeLayout(args: IChangeLayoutEventArgs) {\n if (args.layout === this.options.layout) {\n this.disableLayoutChange = false;\n this.enable();\n this.options.resultTemplate.layout = this.options.layout;\n if (args.results) {\n // Prevent flickering when switching to a new layout that is empty\n // add a temporary placeholder, the same that is used on initialization\n if (this.resultContainer.isEmpty()) {\n new InitializationPlaceholder(this.root).withVisibleRootElement().withPlaceholderForResultList();\n }\n Defer.defer(async () => {\n const elements = await this.buildResults(args.results);\n this.renderResults(elements);\n this.showOrHideElementsDependingOnState(true, this.currentlyDisplayedResults.length !== 0);\n });\n }\n } else {\n this.disableLayoutChange = true;\n this.disable();\n this.resultContainer.empty();\n }\n }\n\n private isCurrentlyFetchingMoreResults(): boolean {\n return Utils.exists(this.fetchingMoreResults);\n }\n\n private getMinimalFieldsToInclude() {\n // these fields are needed for analytics click event\n return ['author', 'language', 'urihash', 'objecttype', 'collection', 'source', 'language', 'permanentid'];\n }\n\n private isScrollingOfResultListAlmostAtTheBottom(): boolean {\n // this is in a try catch because the unit test fail otherwise (Window does not exist for phantom js in the console)\n let isWindow;\n try {\n isWindow = this.options.infiniteScrollContainer instanceof Window;\n } catch (e) {\n isWindow = false;\n }\n return isWindow ? this.isScrollAtBottomForWindowElement() : this.isScrollAtBottomForHtmlElement();\n }\n\n private isScrollAtBottomForWindowElement() {\n const win = new Win(window);\n const windowHeight = win.height();\n const scrollTop = win.scrollY();\n const bodyHeight = new Doc(document).height();\n return bodyHeight - (windowHeight + scrollTop) < windowHeight / 2;\n }\n\n private isScrollAtBottomForHtmlElement() {\n const el = this.options.infiniteScrollContainer;\n const elementHeight = el.clientHeight;\n const scrollHeight = el.scrollHeight;\n const bottomPosition = el.scrollTop + elementHeight;\n return scrollHeight - bottomPosition < elementHeight / 2;\n }\n\n public hasPotentiallyMoreResultsToDisplay(): boolean {\n return this.currentlyDisplayedResults.length > 0 && !this.reachedTheEndOfResults;\n }\n\n private cancelFetchingMoreResultsIfNeeded() {\n if (this.isCurrentlyFetchingMoreResults()) {\n this.logger.trace('Cancelling fetching more results');\n Promise.reject(this.fetchingMoreResults);\n this.fetchingMoreResults = undefined;\n }\n }\n\n private showOrHideElementsDependingOnState(hasQuery: boolean, hasResults: boolean) {\n const showIfQuery = $$(this.element).findAll('.coveo-show-if-query');\n const showIfNoQuery = $$(this.element).findAll('.coveo-show-if-no-query');\n const showIfResults = $$(this.element).findAll('.coveo-show-if-results');\n const showIfNoResults = $$(this.element).findAll('.coveo-show-if-no-results');\n\n each(showIfQuery, (s: HTMLElement) => {\n $$(s).toggle(hasQuery);\n });\n each(showIfNoQuery, (s: HTMLElement) => {\n $$(s).toggle(!hasQuery);\n });\n each(showIfResults, (s: HTMLElement) => {\n $$(s).toggle(hasQuery && hasResults);\n });\n each(showIfNoResults, (s: HTMLElement) => {\n $$(s).toggle(hasQuery && !hasResults);\n });\n }\n\n private get waitAnimation() {\n return this.options.waitAnimation.toLowerCase() as WaitAnimation;\n }\n\n private showWaitingAnimation() {\n switch (this.waitAnimation) {\n case 'fade':\n $$(this.options.waitAnimationContainer).addClass('coveo-fade-out');\n break;\n case 'spinner':\n this.resultContainer.hideChildren();\n if ($$(this.options.waitAnimationContainer).find('.coveo-wait-animation') == undefined) {\n this.options.waitAnimationContainer.appendChild(DomUtils.getBasicLoadingAnimation());\n }\n break;\n }\n }\n\n private hideWaitingAnimation() {\n switch (this.waitAnimation) {\n case 'fade':\n $$(this.options.waitAnimationContainer).removeClass('coveo-fade-out');\n break;\n case 'spinner':\n const spinner = $$(this.options.waitAnimationContainer).find('.coveo-loading-spinner');\n if (spinner) {\n $$(spinner).detach();\n }\n break;\n }\n }\n\n private showWaitingAnimationForInfiniteScrolling() {\n const spinner = DomUtils.getLoadingSpinner();\n if (this.options.layout == 'card' && this.options.enableInfiniteScroll) {\n const previousSpinnerContainer = $$(this.options.waitAnimationContainer).findAll('.coveo-loading-spinner-container');\n each(previousSpinnerContainer, previousSpinner => $$(previousSpinner).remove());\n const spinnerContainer = $$('div', {\n className: 'coveo-loading-spinner-container'\n });\n spinnerContainer.append(spinner);\n this.options.waitAnimationContainer.appendChild(spinnerContainer.el);\n } else {\n this.options.waitAnimationContainer.appendChild(DomUtils.getLoadingSpinner());\n }\n }\n\n private hideWaitingAnimationForInfiniteScrolling() {\n const spinners = $$(this.options.waitAnimationContainer).findAll('.coveo-loading-spinner');\n const containers = $$(this.options.waitAnimationContainer).findAll('.coveo-loading-spinner-container');\n each(spinners, spinner => $$(spinner).remove());\n each(containers, container => $$(container).remove());\n }\n\n private initResultContainer(): ResultContainer {\n if (!this.options.resultsContainer) {\n const elemType = this.options.layout === 'table' ? 'table' : 'div';\n this.options.resultsContainer = $$(elemType, { className: 'coveo-result-list-container' }).el;\n this.initResultContainerAddToDom();\n }\n return new ResultContainer(this.options.resultsContainer, this.searchInterface);\n }\n\n protected initResultContainerAddToDom() {\n this.element.appendChild(this.options.resultsContainer);\n }\n\n private initWaitAnimationContainer() {\n if (!this.options.waitAnimationContainer) {\n this.options.waitAnimationContainer = this.resultContainer.el;\n }\n }\n\n private setupRenderer() {\n const initParameters: IInitializationParameters = {\n options: this.searchInterface.options.originalOptionsObject,\n bindings: this.bindings\n };\n\n const autoCreateComponentsFn = (elem: HTMLElement) => Initialization.automaticallyCreateComponentsInside(elem, initParameters);\n\n switch (this.options.layout) {\n case 'card':\n this.renderer = new ResultListCardRenderer(this.options, autoCreateComponentsFn);\n break;\n case 'table':\n this.renderer = new ResultListTableRenderer(this.options, autoCreateComponentsFn);\n break;\n case 'list':\n default:\n this.renderer = new ResultListRenderer(this.options, autoCreateComponentsFn);\n break;\n }\n }\n\n private makeElementFocusable() {\n $$(this.element).setAttribute('tabindex', '-1');\n }\n\n private ensureHasId() {\n const currentId = this.element.id;\n if (currentId === '') {\n this.element.id = uniqueId('coveo-result-list');\n }\n }\n\n private enableBasedOnActiveLayouts() {\n // We should try to enable a result list only when the result layout selector currently allow that result list layout to be displayed.\n each(this.resultLayoutSelectors, resultLayoutSelector => {\n const found = find(resultLayoutSelector.activeLayouts, (activeLayout, activeLayoutKey) => activeLayoutKey == this.options.layout);\n if (found) {\n super.enable();\n resultLayoutSelector.enableLayouts([this.options.layout] as ValidLayout[]);\n $$(this.element).removeClass('coveo-hidden');\n }\n });\n }\n}\n\nInitialization.registerAutoCreateComponent(ResultList);\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/ResultList/ResultList.ts"],"sourceRoot":""}