{"version":3,"file":"326.064b732cba19aa06.js","mappings":"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,KACN,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,GAAM,KACN,GAAM,KACN,GAAM,KACN,IAAO,KACP,IAAO,KACP,GAAM,CAAC,KAAM,KAAM,KAAM,MACzB,IAAO,KACP,GAAM,KACN,GAAM,KACN,IAAO,KACP,EAAK,CAAC,KAAM,MACZ,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,CAAC,KAAM,MACd,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,CAAC,KAAM,MACd,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,GAAM,CAAC,KAAM,MACb,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,CAAC,KAAM,MACb,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,GAAM,KACN,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,CAAC,KAAM,KAAM,MACpB,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,GAAM,KACN,IAAO,KACP,GAAM,KACN,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MC/MIC,GAA6B,CACxCC,GAAI,YACJC,GAAI,cACJC,GAAI,WACJC,GAAI,WACJC,GAAI,WACJC,GAAI,qBACJC,GAAI,UACJC,GAAI,SACJC,GAAI,WACJC,GAAI,YACJC,GAAI,sBACJC,GAAI,cACJC,GAAI,WACJC,GAAI,QACJC,GAAI,aACJC,GAAI,gBACJC,GAAI,gBACJC,GAAI,UACJC,GAAI,UACJC,GAAI,cACJC,GAAI,WACJC,GAAI,UACJC,GAAI,UACJC,GAAI,SACJC,GAAI,QACJC,GAAI,UACJC,GAAI,SACJC,GAAI,WACJC,GAAI,0BACJC,GAAI,WACJC,GAAI,cACJC,GAAI,YACJC,GAAI,4CACJC,GAAI,SACJC,GAAI,YACJC,GAAI,eACJC,GAAI,UACJC,GAAI,aACJC,GAAI,UACJC,GAAI,SACJC,GAAI,YACJC,GAAI,eACJC,GAAI,+BACJC,GAAI,SACJC,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,cACJC,GAAI,YACJC,GAAI,UACJC,GAAI,QACJC,GAAI,+BACJC,G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","names":["CustomValidators","phoneLengthValidator","countryId","isLandLine","c","value","inputLength","toString","length","minLength","maxLength","BiCountryId","DK","phoneLength_DK","SE","landLineLength_SE","EN","landLineLength_EN","FI","landLineLength_FI","NO","phoneLength_NO","DE","phoneLength_DE","phoneLength_SE","phoneLength_EN","phoneLength_FI","phoneMin","phoneMax","digitsOnly","whiteSpaceAllowed","isStringNullOrEmpty","replace","test","maxLengthWithoutHtml","maxLenght","regex","RegExp","maxlength","maxSize","maxKb","control","Math","ceil","Blob","size","maxsize","checkLength","requiredLength","isNaN","checkAtLeastOneHasValue","theOtherControls","checkAndRemoveErrorOnOtherCtrl","forEach","errors","atLeast1Required","Object","keys","setErrors","markAsUntouched","updateValueAndValidity","i","touched","dirty","markAsDirty","markAsTouched","email","trim","isUrl","url","minimumOneFilledValidator","controls","filledCount","ctrl","minimumOneFilled","getCountries","metadata","Metadata","getCountryCallingCode","withMetadataArgument","_getCountryCallingCode","arguments","Tooltip","platformId","el","zone","config","renderer","viewContainer","tooltipPosition","tooltipEvent","appendTo","positionStyle","tooltipStyleClass","tooltipZIndex","escape","showDelay","hideDelay","life","positionTop","positionLeft","autoHide","fitContent","hideOnEscape","content","disabled","this","_disabled","val","deactivate","tooltipOptions","_tooltipOptions","tooltipLabel","id","UniqueComponentId","container","styleClass","tooltipText","showTimeout","hideTimeout","active","mouseEnterListener","mouseLeaveListener","containerMouseleaveListener","clickListener","focusListener","blurListener","documentEscapeListener","scrollHandler","resizeListener","interactionInProgress","constructor","ngAfterViewInit","isPlatformBrowser","runOutsideAngular","getOption","onMouseEnter","bind","onMouseLeave","onInputClick","nativeElement","addEventListener","onFocus","onBlur","target","querySelector","getTarget","setAriaDescribedBy","tooltipId","setAttribute","removeAriaDescribedBy","removeAttribute","ngOnChanges","simpleChange","setOption","currentValue","offsetParent","updateText","align","show","hide","isAutoHide","e","activate","DomHandler","hasClass","relatedTarget","clearHideTimeout","setTimeout","duration","listen","clearShowTimeout","create","remove","document","createElement","tooltipArrow","className","appendChild","style","position","body","display","width","pointerEvents","bindContainerMouseleaveListener","unbindContainerMouseleaveListener","closest","fadeIn","ZIndexUtils","set","zIndex","tooltip","bindDocumentResizeListener","bindScrollListener","clear","TemplateRef","embeddedViewRef","createEmbeddedView","detectChanges","rootNodes","node","innerHTML","createTextNode","alignTop","isOutOfBounds","alignBottom","alignRight","alignLeft","getHostOffset","offset","getBoundingClientRect","left","getWindowScrollLeft","top","getWindowScrollTop","preAlign","activeElement","hostOffset","getOuterWidth","getOuterHeight","nodeName","includes","findSingle","option","defaultClassName","targetTop","targetLeft","height","viewport","getViewport","onWindowResize","window","unbindDocumentResizeListener","removeEventListener","ConnectedOverlayScrollHandler","unbindScrollListener","unbindEvents","parentElement","removeChild","clearTimeouts","clearTimeout","ngOnDestroy","destroy","static","__ngFactoryType__","i0","PLATFORM_ID","i1","type","selectors","hostAttrs","inputs","booleanAttribute","numberAttribute","standalone","features","TooltipModule","imports","CommonModule","BlankIcon","BaseIcon","ɵBlankIcon_BaseFactory","decls","vars","consts","template","rf","ctx","encapsulation","_c0","a0","_c1","a1","a2","_c2","$implicit","DropdownItem_ng_container_1_CheckIcon_1_Template","DropdownItem_ng_container_1_BlankIcon_2_Template","DropdownItem_ng_container_1_Template","ctx_r0","selected","DropdownItem_span_2_Template","tmp_1_0","label","undefined","DropdownItem_ng_container_3_Template","_c3","_c4","_c5","_c6","_c7","_c8","_c9","_c10","_c11","_c12","_c13","options","_c14","_c15","_c16","Dropdown_span_2_ng_container_2_Template","ctx_r2","Dropdown_span_2_ng_container_3_Template","selectedItemTemplate","selectedOption","Dropdown_span_2_ng_template_4_span_0_Template","Dropdown_span_2_ng_template_4_Template","isSelectedOptionEmpty","Dropdown_span_2_Template","_r2","$event","onInputFocus","onInputBlur","onKeyDown","tmp_17_0","defaultPlaceholder_r4","inputClass","tooltipPositionStyle","autofocus","inputId","ariaLabel","ariaLabelledBy","overlayVisible","tabindex","focused","focusedOptionId","required","Dropdown_input_3_Template","_r5","onEditableInput","modelValue","placeholder","Dropdown_ng_container_4_TimesIcon_1_Template","_r6","Dropdown_ng_container_4_span_2_1_ng_template_0_Template","Dropdown_ng_container_4_span_2_1_Template","Dropdown_ng_container_4_span_2_Template","_r7","clearIconTemplate","Dropdown_ng_container_4_Template","Dropdown_ng_container_6_ng_container_1_ng_container_1_Template","Dropdown_ng_container_6_ng_container_1_Template","loadingIconTemplate","Dropdown_ng_container_6_ng_container_2_span_1_Template","loadingIcon","Dropdown_ng_container_6_ng_container_2_span_2_Template","Dropdown_ng_container_6_ng_container_2_Template","Dropdown_ng_container_6_Template","Dropdown_ng_template_7_ng_container_0_span_1_Template","dropdownIcon","Dropdown_ng_template_7_ng_container_0_ChevronDownIcon_2_Template","Dropdown_ng_template_7_ng_container_0_Template","Dropdown_ng_template_7_span_1_1_ng_template_0_Template","Dropdown_ng_template_7_span_1_1_Template","Dropdown_ng_template_7_span_1_Template","dropdownIconTemplate","Dropdown_ng_template_7_Template","Dropdown_ng_template_11_ng_container_3_Template","Dropdown_ng_template_11_div_4_ng_container_1_ng_container_1_Template","Dropdown_ng_template_11_div_4_ng_container_1_Template","filterTemplate","filterOptions","Dropdown_ng_template_11_div_4_ng_template_2_SearchIcon_3_Template","Dropdown_ng_template_11_div_4_ng_template_2_span_4_1_ng_template_0_Template","Dropdown_ng_template_11_div_4_ng_template_2_span_4_1_Template","Dropdown_ng_template_11_div_4_ng_template_2_span_4_Template","filterIconTemplate","Dropdown_ng_template_11_div_4_ng_template_2_Template","_r10","onFilterInputChange","onFilterKeyDown","onFilterBlur","_filterValue","variant","inputStyle","filterPlaceholder","ariaFilterLabel","Dropdown_ng_template_11_div_4_Template","_r9","stopPropagation","builtInFilterElement_r11","Dropdown_ng_template_11_p_scroller_6_ng_template_2_ng_container_0_Template","Dropdown_ng_template_11_p_scroller_6_ng_template_2_Template","items_r13","scrollerOptions_r14","buildInItems_r15","Dropdown_ng_template_11_p_scroller_6_ng_container_3_ng_template_1_ng_container_0_Template","Dropdown_ng_template_11_p_scroller_6_ng_container_3_ng_template_1_Template","scrollerOptions_r16","loaderTemplate","Dropdown_ng_template_11_p_scroller_6_ng_container_3_Template","Dropdown_ng_template_11_p_scroller_6_Template","_r12","onLazyLoad","emit","scrollHeight","visibleOptions","virtualScrollItemSize","_itemSize","lazy","virtualScrollOptions","Dropdown_ng_template_11_ng_container_7_ng_container_1_Template","Dropdown_ng_template_11_ng_container_7_Template","Dropdown_ng_template_11_ng_template_8_ng_template_2_ng_container_0_span_2_Template","option_r17","getOptionGroupLabel","optionGroup","Dropdown_ng_template_11_ng_template_8_ng_template_2_ng_container_0_ng_container_3_Template","Dropdown_ng_template_11_ng_template_8_ng_template_2_ng_container_0_Template","ctx_r17","i_r19","index","scrollerOptions_r20","itemSize","getOptionIndex","groupTemplate","Dropdown_ng_template_11_ng_template_8_ng_template_2_ng_container_1_Template","_r21","onOptionSelect","onOptionMouseEnter","checkmark","isSelected","getOptionLabel","isOptionDisabled","itemTemplate","focusedOptionIndex","getAriaPosInset","ariaSetSize","Dropdown_ng_template_11_ng_template_8_ng_template_2_Template","isOptionGroup","Dropdown_ng_template_11_ng_template_8_li_3_ng_container_1_Template","emptyFilterMessageLabel","Dropdown_ng_template_11_ng_template_8_li_3_ng_container_2_Template","Dropdown_ng_template_11_ng_template_8_li_3_Template","emptyFilterTemplate","emptyTemplate","emptyFilter","Dropdown_ng_template_11_ng_template_8_li_4_ng_container_1_Template","emptyMessageLabel","Dropdown_ng_template_11_ng_template_8_li_4_ng_container_2_Template","Dropdown_ng_template_11_ng_template_8_li_4_Template","empty","Dropdown_ng_template_11_ng_template_8_Template","items_r22","contentStyleClass","contentStyle","listLabel","filterValue","isEmpty","Dropdown_ng_template_11_ng_container_10_Template","Dropdown_ng_template_11_Template","_r8","onFirstHiddenFocus","onLastHiddenFocus","panelStyleClass","panelStyle","headerTemplate","filter","virtualScroll","footerTemplate","DROPDOWN_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","Dropdown","multi","DropdownItem","visible","ariaPosInset","onClick","EventEmitter","ngOnInit","onOptionClick","event","outputs","dependencies","i2","CheckIcon","cd","filterService","name","readonly","editable","_placeholder","asReadonly","filterLocale","dataKey","filterBy","filterFields","resetFilterOnHide","loading","optionLabel","optionValue","optionDisabled","optionGroupLabel","optionGroupChildren","autoDisplayFirst","group","showClear","emptyFilterMessage","emptyMessage","overlayOptions","filterMatchMode","focusOnHover","selectOnFocus","autoOptionFocus","autofocusFilter","autoShowPanelOnPrintableCharacterKeyDown","destroyed","console","warn","autoZIndex","_autoZIndex","baseZIndex","_baseZIndex","showTransitionOptions","_showTransitionOptions","hideTransitionOptions","_hideTransitionOptions","_options","ObjectUtils","deepEquals","onChange","onFilter","onShow","onHide","onClear","containerViewChild","filterViewChild","focusInputViewChild","editableInputViewChild","itemsViewChild","scroller","overlayViewChild","firstHiddenFocusableElementOnOverlay","lastHiddenFocusableElementOnOverlay","templates","itemsWrapper","signal","onModelChange","onModelTouched","hover","optionsChanged","panel","dimensionsUpdated","hoveredItem","selectedOptionUpdated","searchValue","searchIndex","searchTimeout","previousSearchChar","currentSearchChar","preventModelTouched","labelId","listId","clicked","getTranslation","TranslationKeys","EMPTY_MESSAGE","EMPTY_FILTER_MESSAGE","isVisibleClearIcon","hasSelectedOption","ARIA","containerClass","panelClass","ripple","computed","getAllVisibleAndNonVisibleOptions","filteredOptions","searchFields","toLowerCase","indexOf","filtered","optionGroups","filteredItems","getOptionGroupChildren","item","push","flatOptions","selectedOptionIndex","findIndex","isOptionValueEqualsModelValue","filled","isOptionSelected","editableInputValue","effect","isNotEmpty","findSelectedOptionIndex","isModelValueNotSet","updateEditableLabel","markForCheck","autoUpdateModel","reset","resetFilter","ngAfterViewChecked","alignOverlay","selectedItem","scrollInView","ngAfterContentInit","getType","reduce","result","o","findFirstFocusedOptionIndex","ind","findFirstOptionIndex","isHide","preventChange","getOptionValue","updateModel","originalEvent","changeFocusedOptionIndex","writeValue","emitEvent","allowModelChange","isValidOption","equals","equalityKey","updatePlaceHolderForFloatingLabel","isInFloatingLabel","classList","contains","textContent","clearEditableLabel","scrollerOptions","virtualScrollerDisabled","getItemOptions","resolveFieldData","items","slice","registerOnChange","fn","registerOnTouched","setDisabledState","onContainerClick","focus","preventScroll","tagName","getAttribute","searchOptions","isFocus","onOverlayAnimationStart","toState","setContentEl","selectedIndex","scrollToIndex","selectedListItem","scrollIntoView","block","inline","mode","unblockBodyScroll","onMouseDown","preventDefault","search","code","onArrowDownKey","onArrowUpKey","onArrowLeftKey","onDeleteKey","onHomeKey","onEndKey","onPageDownKey","onPageUpKey","onSpaceKey","onEnterKey","onEscapeKey","onTabKey","onBackspaceKey","metaKey","isPrintableCharacter","key","optionIndex","findNextOptionIndex","element","isValidSelectedOption","matchedOptionIndex","findPrevOptionIndex","findLastIndex","findLastOptionIndex","findLastFocusedOptionIndex","pressedInInputText","altKey","currentTarget","shiftKey","setSelectionRange","len","pressedInInput","hasFocusableElements","focusableEl","getFirstFocusableElement","getLastFocusableElement","getFocusableElements","split","char","matched","isOptionMatched","toLocaleLowerCase","startsWith","applyFocus","i3","contentQueries","dirIndex","PrimeTemplate","_t","viewQuery","first","hostVars","hostBindings","_r1","tmp_10_0","elseBlock_r23","i4","i5","i6","i7","TimesIcon","ChevronDownIcon","SearchIcon","styles","changeDetection","DropdownModule","OverlayModule","SharedModule","RippleModule","ScrollerModule","AutoFocusModule","callingCodeToCountryCode","countryCodeToDeCountryName","AC","AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BV","BR","IO","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CY","CZ","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","ET","FK","FO","FJ","FR","GF","PF","TF","GA","GM","GE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KR","KP","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","AN","NC","NZ","NI","NE","NG","NU","NF","MP","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SK","SI","SB","SO","ZA","GS","ES","LK","SD","SR","SJ","SZ","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TA","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW","BQ","CW","SS","SX","XK","countryCodeToDkCountryName","countryCodeToEnCountryName","countryCodeToFiCountryName","countryCodeToNoCountryName","countryCodeToSeCountryName","ctx_r1","phonePrefix","BiPhoneInputComponent_p_dropdown_3_ng_template_3_hr_7_Template","option_r4","icon","title","countryItems","selectedCountryItem","_r3","announcer","announce","onCountryCodeChanged","onCountryCodeKeyDown","BiPhoneInputComponent_p_dropdown_3_ng_template_3_Template","BiPhoneInputComponent_p_dropdown_3_ng_template_4_Template","countryCodeDropdownId","focusable","countryCodeOverlayOptions","selectedPhoneType","updatePhoneType","phoneNumberTypes","phoneLength","phoneMaxLength","BiPhoneInputComponent_ng_container_10_p_1_Template","BiPhoneInputComponent_ng_container_10_p_2_Template","BiPhoneInputComponent_ng_container_10_p_3_Template","BiPhoneInputComponent_ng_container_10_p_4_Template","BiPhoneInputComponent_ng_container_10_p_5_Template","controlRef","phoneLengthIsMinimum","BiPhoneInputComponent","cId","_countryId","_phonePrefix","setSelectedCountryCode","countryCode","selectedCountryCode","find","injector","baseLocalizor","translator","canSelectCountryCode","canSelectPhoneType","hasLabel","onlyMainCountries","uniqueID","propagateChange","_","onTouched","language","currentLang","initCountryCodes","phoneCode","getCountryIdByPhoneCode","setPhoneNumberValidation","getLanguageConfigByCountry","phoneCountryCode","phoneType","PhoneNumberTypeEnum","LandLine","Mobile","instant","onLangChange","pipe","untilDestroyed","take","subscribe","get","NgControl","valueChanges","distinctUntilChanged","debounceTime","newVal","inputEl","getElementById","dropdown","initCountryCodeOverlayOptions","inputValue","isDisabled","languageConfig","minimumPhoneLength","phoneLengthLandlineMin","phoneLengthLandlineMax","mobileTranslation","landLineTranslation","validate","getValueWithCode","getRawPhoneNumber","parsedValue","parseInt","getPhoneType","countries","_getCountries","mainCountries","country","otherCountryCodes","callingCode","countryName","sort","a","b","localeCompare","concat","focusOnCountrycodeSelector","blur","NG_VALIDATORS","BiLocalizationHelperBaseService","BiPhoneInputComponent_label_0_Template","BiPhoneInputComponent_span_2_Template","BiPhoneInputComponent_p_dropdown_3_Template","hasFocus","input_r5","BiPhoneInputComponent_p_dropdown_8_Template","BiPhoneInputComponent_ng_container_10_Template","BiTranslatePipe","BiTranslateDirective","FormsModule","InputTextModule","i8","__decorate","UntilDestroy","PageNames","SubscriptionModule","SubscriptionStdReceiver","FakeRequestAndSavePinCode","EnrollmentModule","SupportPage","inject","BiTranslateService","dateFormat","dateFormatNoYear","dateTimeFormat","dateTimeFormatWithDayOfTheWeek","defaultMapCenterLatitude","defaultMapCenterLongitude","getCountryIdByLanguageCode","getLanguageIdByLanguageCode","BiLanguageId","setLanguage","use","factory","ɵfac","SubscribeModuleBaseService","http","HttpClient","getSubscriptions","accessToken","customerId","phoneNumber","phoneVoice","onlyBusiness","onlyPrivate","noOperatorLookup","params","encodeURIComponent","ApiRouting","subscribeModuleEndpoints","getSubscriptionModuleModel","customerPublicId","languageId","subscribeAddress","subscribeAddressCommand","post","unsubscribeAddress","unsubscribeAddressCommand","unsubscribeSupplyNumber","unsubscribeSupplyNumberCommand","unsubscribeEnrollment","enrollmentId","unsubscribeEnrollmentById","subscribeSupplyNumber","subscribeCommand","requestPinCodeAttempt","requestDto","verifyPinCode","pageNameId","landline","BiToastNotificationService","toaster","activeToasts","Map","createNotification","toastConfig","positionClass","enableHtml","closeButton","toast","sticky","disableTimeOut","timeOut","timeout","NotificationType","SUCCESS","success","message","INFO","info","ERROR","error","WARNING","warning","toastId","onHidden","delete","getNotification","updateNotificationMessage","BiNotificationConfig","GoogleCaptchaManagerService","siteKey","setResponseToken","responseToken","getConfig","languageCode","validateGoogleCaptchaToken","commonEndpoints","token","providedIn","SubscriptionModuleBase","hostClass","onKeyPress","activeElClasses","onReset","showDisclaimer","notifier","subscriptionService","sharedService","pinCodeCtrl","FormControl","Validators","min","max","customerGuidMissing","currentStep","localizor","router","Router","LiveAnnouncer","titleService","Title","DOCUMENT","domService","BiDomService","googleCaptchaManager","overflowY","getIndexHtmlTitle","setTitle","getAndSetUrlParams","switchMap","urlParams","EMPTY","initModuleConfigObject","next","model","configureLanguage","googleCaptchaConfig","processUrlParams","initMobileEmailForm","anonymousAccessToken","err","checkForCustomerError","language2Set","documentElement","lang","lastEmailUsed","lastPhoneNumberUsed","lastPinRequestDateTime","showEnterPinArea","showCaptcha","requestingPinCode","verifyingPinCode","pinInvalid","pinValid","pinVerified","setSubscriberInfo","mobileEmailForm","markAsPristine","FormGroup","mobile","hideEmailInput","showLandline","isNameRequired","recaptcha","addControl","mobileCtrl","addValidators","landlineCtrl","emailCtrl","setValidators","allowOnlySingleContactInfo","setupOnlyOneContactInfoAtATimeValidation","updateContactInfoCtrlsValueAndValidity","nameCtrl","onlySelf","toggleEnterPinAreaVisibility","enable","disable","recaptchaCtrl","cssUrl","loadStyle","cssStringParts","backgroundColor","btnColor","btnHoverColor","btnFontSize","btnFontColor","backColor","fontColor","fontSize","inputFontSize","fontFamily","inputFontFamily","thankYouTextColor","disclaimerTextColor","fontUrl","headerSize","headerFontColor","headerColor","borderColor","borders","insertGlobalCss","join","map","onOkOrSendCodeClicked","invalid","phoneInputVoice","phoneInput","mobileNumber","landlineNumber","sessionStorage","getItem","JSON","parse","disableAuth","Number","diff","moment","minBeforePinCanBeRerequested","areStringsEqual","minutes","pinCodeObservable","customerGuid","observable$","isValid","recaptchaComponent","resetCaptcha","finalize","clearValidators","getCurrentSubscriberInfo","pinInput","handlePinRequestError","onVerifyPinCode","refreshData","status","onCaptchaSuccess","onSkipToMainContentClicked","subHeaderTranslationKey","errorMessage","navigate","SharedRouteNames","unavailable","state","formData","onShowDisclaimerChanged","stripHtml","disclaimerText","SubscriptionModuleBaseSharedService","of","activeRoute","ActivatedRoute","currentSubscriberInfo","queryParams","tap","correctUrlColorParams","urlParamsClone","cloneObject","referrer","module","location","href","dueTime","scheduler","asyncScheduler","operate","source","subscriber","activeTask","lastValue","lastTime","unsubscribe","emitWhenIdle","targetTime","now","schedule","add","createOperatorSubscriber","complete","comparator","keySelector","identity","defaultCompare","previousKey","currentKey","hasV8BreakIterator","Intl","v8BreakIterator","Platform","_platformId","isBrowser","EDGE","navigator","userAgent","TRIDENT","BLINK","chrome","CSS","WEBKIT","IOS","FIREFOX","ANDROID","SAFARI","appsWithLoaders","WeakMap","_CdkPrivateStyleLoader","_appRef","_injector","Injector","_environmentInjector","EnvironmentInjector","load","loader","appRef","ApplicationRef","data","loaders","Set","refs","onDestroy","ref","has","createComponent","environmentInjector","_VisuallyHiddenLoader","exportAs","MutationObserverFactory","callback","MutationObserver","ObserversModule","providers","coerceArray","Array","isArray","mediaQueriesForWebkitCompatibility","mediaQueryStyleNode","MediaMatcher","_platform","_nonce","CSP_NONCE","optional","_matchMedia","matchMedia","noopMatchMedia","query","createEmptyStyleRule","nonce","head","sheet","insertRule","matches","media","addListener","removeListener","BreakpointObserver","_mediaMatcher","_zone","NgZone","_queries","_destroySubject","Subject","isMatched","splitQueries","some","mediaQuery","_registerQuery","mql","observe","observables","observable","stateObservable","combineLatest","skip","count","breakpointStates","response","breakpoints","output","Observable","observer","handler","run","startWith","takeUntil","queries","InteractivityChecker","hasAttribute","isVisible","hasGeometry","offsetWidth","offsetHeight","getClientRects","getComputedStyle","visibility","isTabbable","frameElement","getFrameElement","getWindow","ownerDocument","defaultView","getTabIndexValue","tabIndexValue","isPotentiallyTabbableIOS","inputType","tabIndex","isFocusable","isPotentiallyFocusable","isHiddenInput","isInputElement","isNativeFormElement","isAnchorWithHref","isAnchorElement","hasValidTabIndex","ignoreVisibility","FocusTrap","_element","_checker","_ngZone","_document","_startAnchor","_endAnchor","_hasAttached","startAnchorListener","focusLastTabbableElement","endAnchorListener","focusFirstTabbableElement","enabled","_enabled","_toggleAnchorTabIndex","deferAnchors","attachAnchors","startAnchor","endAnchor","_createAnchor","parentNode","insertBefore","nextSibling","focusInitialElementWhenReady","Promise","resolve","_executeOnStable","focusInitialElement","focusFirstTabbableElementWhenReady","focusLastTabbableElementWhenReady","_getRegionBoundary","bound","markers","querySelectorAll","_getFirstTabbableElement","_getLastTabbableElement","redirectToElement","focusableChild","hasAttached","root","children","tabbableChild","nodeType","ELEMENT_NODE","anchor","isEnabled","toggleAnchors","afterNextRender","FocusTrapFactory","deferCaptureElements","CdkTrapFocus","_elementRef","ElementRef","_focusTrapFactory","focusTrap","_previouslyFocusedElement","autoCapture","_captureFocus","ngDoCheck","changes","autoCaptureChange","firstChange","_getFocusedElementPierceShadowDom","shadowRoot","newActiveElement","LIVE_ANNOUNCER_ELEMENT_TOKEN","InjectionToken","LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY","LIVE_ANNOUNCER_DEFAULT_OPTIONS","uniqueIds","_defaultOptions","_liveElement","_previousTimeout","_currentPromise","_currentResolve","elementToken","_createLiveElement","args","defaultOptions","politeness","_exposeAnnouncerToModals","elementClass","previousElements","getElementsByClassName","liveEl","modals","modal","ariaOwns","HighContrastMode","NONE","BLACK_ON_WHITE","WHITE_ON_BLACK","BLACK_ON_WHITE_CSS_CLASS","WHITE_ON_BLACK_CSS_CLASS","HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS","HighContrastModeDetector","_hasCheckedHighContrastMode","_breakpointSubscription","_applyBodyHighContrastModeCssClasses","getHighContrastMode","testElement","documentWindow","computedStyle","computedColor","bodyClasses","A11yModule","ScriptService","scriptElemId","windowGrecaptcha","windowGrecaptchaEnterprise","windowOnLoadCallbackProperty","windowOnLoadEnterpriseCallbackProperty","globalDomain","defaultDomain","enterpriseApi","defaultApi","registerCaptchaScript","render","onLoad","grecaptchaScriptLoaded","useEnterprise","getCallbackName","scriptElem","src","getCaptchaScriptUrl","async","defer","getElementsByTagName","cleanup","elem","execute","getLanguageParam","hl","useGlobalDomain","ɵprov","BaseReCaptchaComponentDirective","scriptService","captchaElemPrefix","setupCaptcha","ready","expire","setupAfterLoad","resetCaptchaAfterSuccess","isLoaded","InjectFlags","Optional","setupComponent","previousValue","getResponse","reCaptchaApi","captchaId","getCaptchaId","getCurrentResponse","currentResponse","reloadCaptcha","ensureCaptchaElem","captchaElemId","captchaElem","Error","renderReCaptcha","getCaptchaProperties","handleCallback","getPseudoUniqueNumber","Date","getUTCMilliseconds","floor","random","captchaSpecificSetup","createAndSetCaptchaElem","grecaptcha","onloadCallback","grecapcha","generateNewElemId","captchaWrapperElem","newElem","obj","handleErrorCallback","handleExpireCallback","ɵdir","ReCaptchaType","InvisibleReCaptcha","ReCaptcha2","ReCaptcha2Component","super","windowOnErrorCallbackProperty","windowOnExpireCallbackProperty","theme","recaptchaType","registerCallbacks","sitekey","expired-callback","error-callback","ɵcmp","ReCaptchaV3Service","action","errorCallback","executeAsPromise","then","catch","reject","NgxCaptchaModule","ɵmod","ɵinj","pathId","ɵSearchIcon_BaseFactory","getClassNames","ariaHidden","role","a3","a4","a5","a6","a7","a8","a9","a10","a11","a12","a13","showTransitionParams","hideTransitionParams","transform","Overlay_div_0_div_2_ng_container_3_Template","Overlay_div_0_div_2_Template","onOverlayContentClick","onOverlayContentAnimationStart","onOverlayContentAnimationDone","transformOptions","overlayResponsiveDirection","contentTemplate","overlayMode","Overlay_div_0_Template","onOverlayClick","OVERLAY_VALUE_ACCESSOR","Overlay","showOverlayContentAnimation","animation","opacity","animate","hideOverlayContentAnimation","overlayService","_visible","modalVisible","_mode","merge","_style","overlayResponsiveOptions","_styleClass","_contentStyle","_contentStyleClass","_target","_appendTo","listener","_listener","responsive","_responsive","visibleChange","onBeforeShow","onBeforeHide","onAnimationStart","onAnimationDone","contentViewChild","isOverlayClicked","isOverlayContentClicked","documentClickListener","documentResizeListener","documentKeyboardListener","default","center","bottom","right","breakpoint","direction","overlayEl","contentEl","targetEl","getTargetElement","overlay","onVisibleChange","handleEvents","addClass","removeClass","appendOverlay","bindListeners","unbindListeners","bindDocumentClickListener","bindDocumentKeyboardListener","unbindDocumentClickListener","unbindDocumentKeyboardListener","valid","isOutsideClicked","isSameNode","which","isTouchDevice","ngContentSelectors","trigger","transition","useAnimation","numCols","rows","columns","Scroller_ng_container_0_ng_container_3_ng_container_1_Template","Scroller_ng_container_0_ng_container_3_Template","loadedItems","getContentOptions","Scroller_ng_container_0_ng_template_4_ng_container_2_ng_container_1_Template","Scroller_ng_container_0_ng_template_4_ng_container_2_Template","item_r3","index_r4","getOptions","Scroller_ng_container_0_ng_template_4_Template","d_loading","_trackBy","Scroller_ng_container_0_div_6_Template","spacerStyle","Scroller_ng_container_0_div_7_ng_container_1_ng_container_1_ng_container_1_Template","Scroller_ng_container_0_div_7_ng_container_1_ng_container_1_Template","index_r5","getLoaderOptions","both","_numItemsInViewport","cols","Scroller_ng_container_0_div_7_ng_container_1_Template","loaderArr","Scroller_ng_container_0_div_7_ng_template_2_ng_container_0_ng_container_1_Template","Scroller_ng_container_0_div_7_ng_template_2_ng_container_0_Template","loaderIconTemplate","Scroller_ng_container_0_div_7_ng_template_2_ng_template_1_Template","Scroller_ng_container_0_div_7_ng_template_2_Template","buildInLoaderIcon_r6","Scroller_ng_container_0_div_7_Template","buildInLoader_r7","Scroller_ng_container_0_Template","onContainerScroll","buildInContent_r8","horizontal","_id","_showSpacer","loaderDisabled","_showLoader","Scroller_ng_template_1_ng_container_1_ng_container_1_Template","Scroller_ng_template_1_ng_container_1_Template","_items","loadedColumns","Scroller_ng_template_1_Template","Scroller","_tabindex","_scrollHeight","scrollWidth","_scrollWidth","orientation","_orientation","step","_step","delay","_delay","resizeDelay","_resizeDelay","appendOnly","_appendOnly","_inline","_lazy","_loaderDisabled","_columns","showSpacer","showLoader","numToleratedItems","_numToleratedItems","_loading","autoSize","_autoSize","trackBy","entries","k","v","onScroll","onScrollIndexChange","elementViewChild","d_numToleratedItems","last","page","isRangeChanged","numItemsInViewport","lastScrollPos","lazyLoadState","scrollTimeout","resizeTimeout","initialized","resizeObserver","defaultWidth","defaultHeight","defaultContentWidth","defaultContentHeight","vertical","loadedRows","setInitialState","simpleChanges","isLoadingChanged","init","calculateAutoSize","viewInit","unbindResizeListener","getWidth","getHeight","ResizeObserver","onResize","setSize","calculateOptions","setSpacerSize","getElementRef","getPageByFirst","isPageChanged","scrollTo","behavior","every","scrollTop","scrollLeft","calculateNumItems","contentPos","getContentPosition","calculateFirst","_index","_numT","calculateCoord","_first","_size","_cpos","newFirst","isScrollChanged","to","getRenderedRange","isToEnd","pos","calculateFirstInViewport","_pos","firstInViewport","lastInViewport","contentWidth","contentHeight","calculateNumItemsInViewport","_contentSize","calculateNumToleratedItems","_numItems","calculateLast","_num","_isCols","getLast","from","minHeight","minWidth","contain","isCols","parseFloat","paddingLeft","paddingRight","paddingTop","paddingBottom","x","y","setProp","_name","_value","_count","numItems","setContentPosition","calculateTranslateVal","setTransform","_x","_y","translateVal","onScrollPositionChange","calculateScrollPos","calculateCurrentIndex","calculateTriggerIndex","_currentIndex","_last","_isScrollDownOrRight","_triggerIndex","newLast","newScrollPos","isScrollDown","isScrollRight","currentIndex","triggerIndex","scrollPos","isScrollDownOrRight","onScrollChange","newState","unobserve","isDiffWidth","isDiffHeight","renderedIndex","even","odd","extOptions","disabledContainer_r9","SpinnerIcon"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./app-globals/classes/CustomValidators.ts","./node_modules/libphonenumber-js/es6/getCountries.js","./node_modules/libphonenumber-js/min/exports/getCountryCallingCode.js","./node_modules/primeng/fesm2022/primeng-tooltip.mjs","./node_modules/primeng/fesm2022/primeng-icons-blank.mjs","./node_modules/primeng/fesm2022/primeng-dropdown.mjs","./app-globals/components/bi-phone-input/CallingCodeToCountryCode.ts","./app-globals/components/bi-phone-input/CountryCodeToDeCountryName.ts","./app-globals/components/bi-phone-input/CountryCodeToDkCountryName.ts","./app-globals/components/bi-phone-input/CountryCodeToEnCountryName.ts","./app-globals/components/bi-phone-input/CountryCodeToFiCountryName.ts","./app-globals/components/bi-phone-input/CountryCodeToNoCountryName.ts","./app-globals/components/bi-phone-input/CountryCodeToSeCountryName.ts","./app-globals/components/bi-phone-input/bi-phone-input.component.html","./app-globals/components/bi-phone-input/bi-phone-input.component.ts","./node_modules/libphonenumber-js/min/exports/getCountries.js","./app-globals/openapi-models/model/pageNames.ts","./app-globals/openapi-models/model/phoneNumberTypeEnum.ts","./app-globals/services/bi-localization-helper-base.service.ts","./app-globals/services/bi-subscribe-module-base.service.ts","./app-globals/services/bi-toast-notification.service.ts","./app-globals/services/google-captcha-manager.service.ts","./side-projects/iframe-modules/src/app/subscribe-unsubscribe/shared/SubscriptionModuleBase.ts","./side-projects/iframe-modules/src/app/subscribe-unsubscribe/shared/SubscriptionModuleBaseSharedService.ts","./node_modules/rxjs/dist/esm/internal/operators/debounceTime.js","./node_modules/rxjs/dist/esm/internal/operators/distinctUntilChanged.js","./node_modules/@angular/cdk/fesm2022/platform.mjs","./node_modules/@angular/cdk/fesm2022/private.mjs","./node_modules/@angular/cdk/fesm2022/observers.mjs","./node_modules/@angular/cdk/fesm2022/coercion.mjs","./node_modules/@angular/cdk/fesm2022/layout.mjs","./node_modules/rxjs/dist/esm/internal/operators/skip.js","./node_modules/@angular/cdk/fesm2022/a11y.mjs","./node_modules/ngx-captcha/fesm2020/ngx-captcha.mjs","./node_modules/primeng/fesm2022/primeng-icons-search.mjs","./node_modules/primeng/fesm2022/primeng-overlay.mjs","./node_modules/primeng/fesm2022/primeng-scroller.mjs"],"sourcesContent":["import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\nimport { BiCountryId } from \"@globals/enums/BiLanguageAndCountryId\";\r\nimport { isStringNullOrEmpty } from \"@globals/helper-functions\";\r\nimport { landLineLength_EN, landLineLength_FI, landLineLength_SE, phoneLength_DE, phoneLength_DK, phoneLength_EN, phoneLength_FI, phoneLength_NO, phoneLength_SE } from \"./global-constants\";\r\n\r\nexport class CustomValidators {\r\n /**\r\n * Validates a phone number's length. Sometimes, there's a min. length and a max. length and other times, there's 1 required length.\r\n * If length is below min., the error \"phoneMin\" is added to FormControl.\r\n * If length is more than max., the error \"phoneMax\" is added to FormControl.\r\n * @param isLandLine Whether the phone number to be validated is a landline numnber (fastnet)\r\n */\r\n public static phoneLengthValidator(countryId: BiCountryId, isLandLine = false): ValidatorFn {\r\n return (c: AbstractControl): { [key: string]: boolean } | null => {\r\n if (c.value) {\r\n const inputLength = (c.value as number).toString().length;\r\n\r\n let minLength: number;\r\n let maxLength: number;\r\n\r\n if (isLandLine) {\r\n switch (countryId) {\r\n case BiCountryId.DK:\r\n minLength = phoneLength_DK;\r\n maxLength = phoneLength_DK;\r\n break;\r\n case BiCountryId.SE:\r\n minLength = landLineLength_SE[0];\r\n maxLength = landLineLength_SE[1];\r\n break;\r\n case BiCountryId.EN:\r\n minLength = landLineLength_EN[1];\r\n maxLength = landLineLength_EN[0];\r\n break;\r\n case BiCountryId.FI:\r\n minLength = landLineLength_FI[0];\r\n maxLength = landLineLength_FI[1];\r\n break;\r\n case BiCountryId.NO:\r\n minLength = phoneLength_NO;\r\n maxLength = phoneLength_NO;\r\n break;\r\n case BiCountryId.DE:\r\n minLength = phoneLength_DE[0];\r\n maxLength = phoneLength_DE[1];\r\n break;\r\n }\r\n } else {\r\n switch (countryId) {\r\n case BiCountryId.DK:\r\n minLength = phoneLength_DK;\r\n maxLength = phoneLength_DK;\r\n break;\r\n case BiCountryId.SE:\r\n minLength = phoneLength_SE[0];\r\n maxLength = phoneLength_SE[1];\r\n break;\r\n case BiCountryId.EN:\r\n minLength = phoneLength_EN;\r\n maxLength = phoneLength_EN;\r\n break;\r\n case BiCountryId.FI:\r\n minLength = phoneLength_FI[0];\r\n maxLength = phoneLength_FI[1];\r\n break;\r\n case BiCountryId.NO:\r\n minLength = phoneLength_NO;\r\n maxLength = phoneLength_NO;\r\n break;\r\n case BiCountryId.DE:\r\n minLength = phoneLength_DE[0];\r\n maxLength = phoneLength_DE[1];\r\n break;\r\n }\r\n }\r\n if (inputLength < minLength) return { phoneMin: true };\r\n if (inputLength > maxLength) return { phoneMax: true };\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n /**\r\n * Validates that input value is only digits. This is usefull when input is for a string value that must only contain\r\n * digits.\r\n * This will add the error \"digitsOnly\" to formcontrol if there's an error\r\n * @param whiteSpaceAllowed Flag telling if white spaces are allowed in the control's value. Validation function will just temporarily\r\n * remove white space and then validate\r\n */\r\n public static digitsOnly(whiteSpaceAllowed?: boolean): ValidatorFn {\r\n return (c: AbstractControl): { [key: string]: boolean } | null => {\r\n if (isStringNullOrEmpty(c.value)) return null; // no email to validate so no error\r\n\r\n const value = !whiteSpaceAllowed ? c.value : c.value.toString().replace(/\\s/g, \"\");\r\n\r\n if (/^\\d+$/.test(value)) return null; // No error\r\n\r\n return { digitsOnly: true }; // error!\r\n };\r\n }\r\n\r\n /**\r\n * Validates the max length is not exceeded with html tags excluded.\r\n */\r\n public static maxLengthWithoutHtml(maxLenght: number): ValidatorFn {\r\n return (c: AbstractControl): { [key: string]: boolean } | null => {\r\n if (isStringNullOrEmpty(c.value)) return null;\r\n\r\n const regex = new RegExp(/(<([^>]+)>)/gi);\r\n\r\n if (c.value.replace(regex, \"\").length > maxLenght) {\r\n return { maxlength: true };\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n public static maxSize(maxKb: number): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n if (!control.value || typeof control.value !== \"string\") {\r\n return null;\r\n }\r\n try {\r\n const text = control.value as string;\r\n const sizeInKb = Math.ceil(new Blob([text]).size / 1024);\r\n return sizeInKb > maxKb ? { maxsize: true } : null;\r\n } catch (error) {\r\n return null;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Validator checking wether a value has a required character length. This also works for numbers!\r\n * If validation fails, this will add the error \"length\" to the errors object of the form control\r\n */\r\n public static checkLength(requiredLength: number): ValidatorFn {\r\n return (c: AbstractControl): { [key: string]: boolean } | null => {\r\n if (c.value) {\r\n if (!isNaN(c.value) && c.value.toString().length !== requiredLength) return { length: true };\r\n else if (typeof c.value === \"string\" && c.value.length !== requiredLength) return { length: true };\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n /**\r\n * Validator that checks whether the control has a value or at least 1 of all the passed controls has.\r\n * If validation fails, the error \"atLeast1Required\" is set on all controls\r\n * NB: this validator ensures that if there no more errors on a control that earlier had, then errors object is set to null and control is updated.\r\n * @param theOtherControls The other form controls that this control depends on\r\n * @returns null if no errors, {atLeast1Required: true} if error\r\n */\r\n public static checkAtLeastOneHasValue(...theOtherControls: AbstractControl[]): ValidatorFn {\r\n // Local function used for checking if there are any errors on the other controls and then remove the \"required\" error\r\n const checkAndRemoveErrorOnOtherCtrl = () => {\r\n theOtherControls.forEach(control => {\r\n if (control.errors) {\r\n delete control.errors.atLeast1Required;\r\n // If no more error, set errors object to null and update the control\r\n if (Object.keys(control.errors).length === 0) {\r\n control.setErrors(null);\r\n control.markAsUntouched();\r\n control.updateValueAndValidity();\r\n }\r\n }\r\n });\r\n };\r\n\r\n return (c: AbstractControl): { [key: string]: boolean } | null => {\r\n // if (c.pristine && theOtherControls.findIndex((c) => c.dirty) === -1) return null;\r\n\r\n if (c.value) {\r\n // This validation is succesfull - be sure to fully remove this error on the other controls\r\n checkAndRemoveErrorOnOtherCtrl();\r\n return null;\r\n } else {\r\n // check the other controls\r\n for (let i = 0; i < theOtherControls.length; i++) {\r\n if (theOtherControls[i].value) {\r\n checkAndRemoveErrorOnOtherCtrl();\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n // No values! For all control, set errors and mark as dirty and touched (for the view to show the errors)\r\n theOtherControls.forEach(control => {\r\n if (control.touched || control.dirty) {\r\n control.setErrors({ atLeast1Required: true });\r\n control.markAsDirty();\r\n control.markAsTouched();\r\n }\r\n });\r\n return { atLeast1Required: true };\r\n };\r\n }\r\n\r\n /**\r\n * Function for validating a username or email entered in a formcontrol. Uses same email regular expr. as Angular source code.\r\n * If validation fails, this will add the error \"email\" to the errors object of the form control.\r\n * NB: No/empty value means no error (nothing to validate). *\r\n */\r\n public static email(): ValidatorFn {\r\n return (c: AbstractControl): { [key: string]: boolean } | null => {\r\n if (!c.value || c.value === \"\") return null; // no email to validate so no error\r\n\r\n const emailRegEx = /^(?:[^!#$%&~\\s@\\.]+\\.?)*(?:[^!#$%&~\\s@\\.])@([^!#$%&~\\s@\\.]+(\\.[^!#$%&~\\s@\\.]+)+)$/;\r\n\r\n if (emailRegEx.test(c.value.trim())) return null; // No error\r\n\r\n return { email: true }; // error!\r\n };\r\n }\r\n\r\n /**\r\n * Validates that the value is a valid URL (only looking at format). If validation fails, adds the error \"url\" to the errors.\r\n */\r\n public static isUrl(): ValidatorFn {\r\n return (c: AbstractControl): { [key: string]: boolean } | undefined => {\r\n if (isStringNullOrEmpty(c.value)) return undefined;\r\n const regex = new RegExp(/^(?:https?:\\/\\/)[\\u00BF-\\u1FFF\\u2C00-\\uD7FF-a-zA-Z0-9._+]{1,256}\\.[\\u00BF-\\u1FFF\\u2C00-\\uD7FF-a-zA-Z0-9]{1,6}\\b(?:\\/\\S*)?$/);\r\n return !regex.test(c.value) ? { url: true } : undefined;\r\n };\r\n }\r\n\r\n /**\r\n * Validator that checks if at least one of the controls has a value.\r\n * If validation fails, it adds the error \"minimumOneFilled\" to the errors object.\r\n * @param controls The form controls to validate\r\n * @returns A validator function\r\n */\r\n static minimumOneFilledValidator(...controls: AbstractControl[]): ValidatorFn {\r\n return (): { [key: string]: any } | null => {\r\n let filledCount = 0;\r\n\r\n controls.forEach(ctrl => {\r\n if (ctrl.value) {\r\n filledCount++;\r\n }\r\n });\r\n\r\n if (filledCount === 0) {\r\n return { minimumOneFilled: true };\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n}\r\n","import Metadata from './metadata.js';\nexport default function getCountries(metadata) {\n return new Metadata(metadata).getCountries();\n}\n","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getCountryCallingCode as _getCountryCallingCode } from '../../core/index.js'\r\n\r\nexport function getCountryCallingCode() {\r\n\treturn withMetadataArgument(_getCountryCallingCode, arguments)\r\n}","import { isPlatformBrowser, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { TemplateRef, PLATFORM_ID, booleanAttribute, numberAttribute, Directive, Inject, Input, NgModule } from '@angular/core';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { UniqueComponentId, ZIndexUtils } from 'primeng/utils';\nimport * as i1 from 'primeng/api';\n\n/**\n * Tooltip directive provides advisory information for a component.\n * @group Components\n */\nclass Tooltip {\n platformId;\n el;\n zone;\n config;\n renderer;\n viewContainer;\n /**\n * Position of the tooltip.\n * @group Props\n */\n tooltipPosition;\n /**\n * Event to show the tooltip.\n * @group Props\n */\n tooltipEvent = 'hover';\n /**\n * Target element to attach the overlay, valid values are \"body\", \"target\" or a local ng-F variable of another element (note: use binding with brackets for template variables, e.g. [appendTo]=\"mydiv\" for a div element having #mydiv as variable name).\n * @group Props\n */\n appendTo;\n /**\n * Type of CSS position.\n * @group Props\n */\n positionStyle;\n /**\n * Style class of the tooltip.\n * @group Props\n */\n tooltipStyleClass;\n /**\n * Whether the z-index should be managed automatically to always go on top or have a fixed value.\n * @group Props\n */\n tooltipZIndex;\n /**\n * By default the tooltip contents are rendered as text. Set to false to support html tags in the content.\n * @group Props\n */\n escape = true;\n /**\n * Delay to show the tooltip in milliseconds.\n * @group Props\n */\n showDelay;\n /**\n * Delay to hide the tooltip in milliseconds.\n * @group Props\n */\n hideDelay;\n /**\n * Time to wait in milliseconds to hide the tooltip even it is active.\n * @group Props\n */\n life;\n /**\n * Specifies the additional vertical offset of the tooltip from its default position.\n * @group Props\n */\n positionTop;\n /**\n * Specifies the additional horizontal offset of the tooltip from its default position.\n * @group Props\n */\n positionLeft;\n /**\n * Whether to hide tooltip when hovering over tooltip content.\n * @group Props\n */\n autoHide = true;\n /**\n * Automatically adjusts the element position when there is not enough space on the selected position.\n * @group Props\n */\n fitContent = true;\n /**\n * Whether to hide tooltip on escape key press.\n * @group Props\n */\n hideOnEscape = true;\n /**\n * Content of the tooltip.\n * @group Props\n */\n content;\n /**\n * When present, it specifies that the component should be disabled.\n * @defaultValue false\n * @group Props\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(val) {\n this._disabled = val;\n this.deactivate();\n }\n /**\n * Specifies the tooltip configuration options for the component.\n * @group Props\n */\n tooltipOptions;\n _tooltipOptions = {\n tooltipLabel: null,\n tooltipPosition: 'right',\n tooltipEvent: 'hover',\n appendTo: 'body',\n positionStyle: null,\n tooltipStyleClass: null,\n tooltipZIndex: 'auto',\n escape: true,\n disabled: null,\n showDelay: null,\n hideDelay: null,\n positionTop: null,\n positionLeft: null,\n life: null,\n autoHide: true,\n hideOnEscape: true,\n id: UniqueComponentId() + '_tooltip'\n };\n _disabled;\n container;\n styleClass;\n tooltipText;\n showTimeout;\n hideTimeout;\n active;\n mouseEnterListener;\n mouseLeaveListener;\n containerMouseleaveListener;\n clickListener;\n focusListener;\n blurListener;\n documentEscapeListener;\n scrollHandler;\n resizeListener;\n interactionInProgress = false;\n constructor(platformId, el, zone, config, renderer, viewContainer) {\n this.platformId = platformId;\n this.el = el;\n this.zone = zone;\n this.config = config;\n this.renderer = renderer;\n this.viewContainer = viewContainer;\n }\n ngAfterViewInit() {\n if (isPlatformBrowser(this.platformId)) {\n this.zone.runOutsideAngular(() => {\n const tooltipEvent = this.getOption('tooltipEvent');\n if (tooltipEvent === 'hover' || tooltipEvent === 'both') {\n this.mouseEnterListener = this.onMouseEnter.bind(this);\n this.mouseLeaveListener = this.onMouseLeave.bind(this);\n this.clickListener = this.onInputClick.bind(this);\n this.el.nativeElement.addEventListener('mouseenter', this.mouseEnterListener);\n this.el.nativeElement.addEventListener('click', this.clickListener);\n this.el.nativeElement.addEventListener('mouseleave', this.mouseLeaveListener);\n }\n if (tooltipEvent === 'focus' || tooltipEvent === 'both') {\n this.focusListener = this.onFocus.bind(this);\n this.blurListener = this.onBlur.bind(this);\n let target = this.el.nativeElement.querySelector('.p-component');\n if (!target) {\n target = this.getTarget(this.el.nativeElement);\n }\n target.addEventListener('focus', this.focusListener);\n target.addEventListener('blur', this.blurListener);\n }\n });\n }\n }\n setAriaDescribedBy() {\n const tooltipId = this.getOption('id');\n if (tooltipId && this.active) {\n this.renderer.setAttribute(this.el.nativeElement, 'aria-describedby', tooltipId);\n }\n }\n removeAriaDescribedBy() {\n this.renderer.removeAttribute(this.el.nativeElement, 'aria-describedby');\n }\n ngOnChanges(simpleChange) {\n if (simpleChange.tooltipPosition) {\n this.setOption({ tooltipPosition: simpleChange.tooltipPosition.currentValue });\n }\n if (simpleChange.tooltipEvent) {\n this.setOption({ tooltipEvent: simpleChange.tooltipEvent.currentValue });\n }\n if (simpleChange.appendTo) {\n this.setOption({ appendTo: simpleChange.appendTo.currentValue });\n }\n if (simpleChange.positionStyle) {\n this.setOption({ positionStyle: simpleChange.positionStyle.currentValue });\n }\n if (simpleChange.tooltipStyleClass) {\n this.setOption({ tooltipStyleClass: simpleChange.tooltipStyleClass.currentValue });\n }\n if (simpleChange.tooltipZIndex) {\n this.setOption({ tooltipZIndex: simpleChange.tooltipZIndex.currentValue });\n }\n if (simpleChange.escape) {\n this.setOption({ escape: simpleChange.escape.currentValue });\n }\n if (simpleChange.showDelay) {\n this.setOption({ showDelay: simpleChange.showDelay.currentValue });\n }\n if (simpleChange.hideDelay) {\n this.setOption({ hideDelay: simpleChange.hideDelay.currentValue });\n }\n if (simpleChange.life) {\n this.setOption({ life: simpleChange.life.currentValue });\n }\n if (simpleChange.positionTop) {\n this.setOption({ positionTop: simpleChange.positionTop.currentValue });\n }\n if (simpleChange.positionLeft) {\n this.setOption({ positionLeft: simpleChange.positionLeft.currentValue });\n }\n if (simpleChange.disabled) {\n this.setOption({ disabled: simpleChange.disabled.currentValue });\n }\n if (simpleChange.content) {\n this.setOption({ tooltipLabel: simpleChange.content.currentValue });\n if (this.active) {\n if (simpleChange.content.currentValue) {\n if (this.container && this.container.offsetParent) {\n this.updateText();\n this.align();\n }\n else {\n this.show();\n }\n }\n else {\n this.hide();\n }\n }\n }\n if (simpleChange.autoHide) {\n this.setOption({ autoHide: simpleChange.autoHide.currentValue });\n }\n if (simpleChange.id) {\n this.setOption({ id: simpleChange.id.currentValue });\n }\n if (simpleChange.tooltipOptions) {\n this._tooltipOptions = { ...this._tooltipOptions, ...simpleChange.tooltipOptions.currentValue };\n this.deactivate();\n if (this.active) {\n if (this.getOption('tooltipLabel')) {\n if (this.container && this.container.offsetParent) {\n this.updateText();\n this.align();\n }\n else {\n this.show();\n }\n }\n else {\n this.hide();\n }\n }\n }\n }\n isAutoHide() {\n return this.getOption('autoHide');\n }\n onMouseEnter(e) {\n if (!this.container && !this.showTimeout) {\n this.activate();\n }\n }\n onMouseLeave(e) {\n if (!this.isAutoHide()) {\n const valid = DomHandler.hasClass(e.relatedTarget, 'p-tooltip') || DomHandler.hasClass(e.relatedTarget, 'p-tooltip-text') || DomHandler.hasClass(e.relatedTarget, 'p-tooltip-arrow');\n !valid && this.deactivate();\n }\n else {\n this.deactivate();\n }\n }\n onFocus(e) {\n this.activate();\n }\n onBlur(e) {\n this.deactivate();\n }\n onInputClick(e) {\n this.deactivate();\n }\n activate() {\n if (!this.interactionInProgress) {\n this.active = true;\n this.clearHideTimeout();\n if (this.getOption('showDelay'))\n this.showTimeout = setTimeout(() => {\n this.show();\n }, this.getOption('showDelay'));\n else\n this.show();\n if (this.getOption('life')) {\n let duration = this.getOption('showDelay') ? this.getOption('life') + this.getOption('showDelay') : this.getOption('life');\n this.hideTimeout = setTimeout(() => {\n this.hide();\n }, duration);\n }\n if (this.getOption('hideOnEscape')) {\n this.documentEscapeListener = this.renderer.listen('document', 'keydown.escape', () => {\n this.deactivate();\n this.documentEscapeListener();\n });\n }\n }\n this.interactionInProgress = true;\n }\n deactivate() {\n this.interactionInProgress = false;\n this.active = false;\n this.clearShowTimeout();\n if (this.getOption('hideDelay')) {\n this.clearHideTimeout(); //life timeout\n this.hideTimeout = setTimeout(() => {\n this.hide();\n }, this.getOption('hideDelay'));\n }\n else {\n this.hide();\n }\n if (this.documentEscapeListener) {\n this.documentEscapeListener();\n }\n }\n create() {\n if (this.container) {\n this.clearHideTimeout();\n this.remove();\n }\n this.container = document.createElement('div');\n this.container.setAttribute('id', this.getOption('id'));\n this.container.setAttribute('role', 'tooltip');\n let tooltipArrow = document.createElement('div');\n tooltipArrow.className = 'p-tooltip-arrow';\n this.container.appendChild(tooltipArrow);\n this.tooltipText = document.createElement('div');\n this.tooltipText.className = 'p-tooltip-text';\n this.updateText();\n if (this.getOption('positionStyle')) {\n this.container.style.position = this.getOption('positionStyle');\n }\n this.container.appendChild(this.tooltipText);\n if (this.getOption('appendTo') === 'body')\n document.body.appendChild(this.container);\n else if (this.getOption('appendTo') === 'target')\n DomHandler.appendChild(this.container, this.el.nativeElement);\n else\n DomHandler.appendChild(this.container, this.getOption('appendTo'));\n this.container.style.display = 'inline-block';\n if (this.fitContent) {\n this.container.style.width = 'fit-content';\n }\n if (this.isAutoHide()) {\n this.container.style.pointerEvents = 'none';\n }\n else {\n this.container.style.pointerEvents = 'unset';\n this.bindContainerMouseleaveListener();\n }\n this.setAriaDescribedBy();\n }\n bindContainerMouseleaveListener() {\n if (!this.containerMouseleaveListener) {\n const targetEl = this.container ?? this.container.nativeElement;\n this.containerMouseleaveListener = this.renderer.listen(targetEl, 'mouseleave', (e) => {\n this.deactivate();\n });\n }\n }\n unbindContainerMouseleaveListener() {\n if (this.containerMouseleaveListener) {\n this.bindContainerMouseleaveListener();\n this.containerMouseleaveListener = null;\n }\n }\n show() {\n if (!this.getOption('tooltipLabel') || this.getOption('disabled')) {\n return;\n }\n this.create();\n const nativeElement = this.el.nativeElement;\n const pDialogWrapper = nativeElement.closest('p-dialog');\n if (pDialogWrapper) {\n setTimeout(() => {\n this.container && this.align();\n }, 100);\n }\n else {\n this.align();\n }\n DomHandler.fadeIn(this.container, 250);\n if (this.getOption('tooltipZIndex') === 'auto')\n ZIndexUtils.set('tooltip', this.container, this.config.zIndex.tooltip);\n else\n this.container.style.zIndex = this.getOption('tooltipZIndex');\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n }\n hide() {\n if (this.getOption('tooltipZIndex') === 'auto') {\n ZIndexUtils.clear(this.container);\n }\n this.remove();\n }\n updateText() {\n const content = this.getOption('tooltipLabel');\n if (content instanceof TemplateRef) {\n const embeddedViewRef = this.viewContainer.createEmbeddedView(content);\n embeddedViewRef.detectChanges();\n embeddedViewRef.rootNodes.forEach((node) => this.tooltipText.appendChild(node));\n }\n else if (this.getOption('escape')) {\n this.tooltipText.innerHTML = '';\n this.tooltipText.appendChild(document.createTextNode(content));\n }\n else {\n this.tooltipText.innerHTML = content;\n }\n }\n align() {\n let position = this.getOption('tooltipPosition');\n switch (position) {\n case 'top':\n this.alignTop();\n if (this.isOutOfBounds()) {\n this.alignBottom();\n if (this.isOutOfBounds()) {\n this.alignRight();\n if (this.isOutOfBounds()) {\n this.alignLeft();\n }\n }\n }\n break;\n case 'bottom':\n this.alignBottom();\n if (this.isOutOfBounds()) {\n this.alignTop();\n if (this.isOutOfBounds()) {\n this.alignRight();\n if (this.isOutOfBounds()) {\n this.alignLeft();\n }\n }\n }\n break;\n case 'left':\n this.alignLeft();\n if (this.isOutOfBounds()) {\n this.alignRight();\n if (this.isOutOfBounds()) {\n this.alignTop();\n if (this.isOutOfBounds()) {\n this.alignBottom();\n }\n }\n }\n break;\n case 'right':\n this.alignRight();\n if (this.isOutOfBounds()) {\n this.alignLeft();\n if (this.isOutOfBounds()) {\n this.alignTop();\n if (this.isOutOfBounds()) {\n this.alignBottom();\n }\n }\n }\n break;\n }\n }\n getHostOffset() {\n if (this.getOption('appendTo') === 'body' || this.getOption('appendTo') === 'target') {\n let offset = this.el.nativeElement.getBoundingClientRect();\n let targetLeft = offset.left + DomHandler.getWindowScrollLeft();\n let targetTop = offset.top + DomHandler.getWindowScrollTop();\n return { left: targetLeft, top: targetTop };\n }\n else {\n return { left: 0, top: 0 };\n }\n }\n alignRight() {\n this.preAlign('right');\n const el = this.activeElement;\n const hostOffset = this.getHostOffset();\n const left = hostOffset.left + DomHandler.getOuterWidth(el);\n const top = hostOffset.top + (DomHandler.getOuterHeight(el) - DomHandler.getOuterHeight(this.container)) / 2;\n this.container.style.left = left + this.getOption('positionLeft') + 'px';\n this.container.style.top = top + this.getOption('positionTop') + 'px';\n }\n get activeElement() {\n return this.el.nativeElement.nodeName.includes('P-') ? DomHandler.findSingle(this.el.nativeElement, '.p-component') || this.el.nativeElement : this.el.nativeElement;\n }\n alignLeft() {\n this.preAlign('left');\n let hostOffset = this.getHostOffset();\n let left = hostOffset.left - DomHandler.getOuterWidth(this.container);\n let top = hostOffset.top + (DomHandler.getOuterHeight(this.el.nativeElement) - DomHandler.getOuterHeight(this.container)) / 2;\n this.container.style.left = left + this.getOption('positionLeft') + 'px';\n this.container.style.top = top + this.getOption('positionTop') + 'px';\n }\n alignTop() {\n this.preAlign('top');\n let hostOffset = this.getHostOffset();\n let left = hostOffset.left + (DomHandler.getOuterWidth(this.el.nativeElement) - DomHandler.getOuterWidth(this.container)) / 2;\n let top = hostOffset.top - DomHandler.getOuterHeight(this.container);\n this.container.style.left = left + this.getOption('positionLeft') + 'px';\n this.container.style.top = top + this.getOption('positionTop') + 'px';\n }\n alignBottom() {\n this.preAlign('bottom');\n let hostOffset = this.getHostOffset();\n let left = hostOffset.left + (DomHandler.getOuterWidth(this.el.nativeElement) - DomHandler.getOuterWidth(this.container)) / 2;\n let top = hostOffset.top + DomHandler.getOuterHeight(this.el.nativeElement);\n this.container.style.left = left + this.getOption('positionLeft') + 'px';\n this.container.style.top = top + this.getOption('positionTop') + 'px';\n }\n setOption(option) {\n this._tooltipOptions = { ...this._tooltipOptions, ...option };\n }\n getOption(option) {\n return this._tooltipOptions[option];\n }\n getTarget(el) {\n return DomHandler.hasClass(el, 'p-inputwrapper') ? DomHandler.findSingle(el, 'input') : el;\n }\n preAlign(position) {\n this.container.style.left = -999 + 'px';\n this.container.style.top = -999 + 'px';\n let defaultClassName = 'p-tooltip p-component p-tooltip-' + position;\n this.container.className = this.getOption('tooltipStyleClass') ? defaultClassName + ' ' + this.getOption('tooltipStyleClass') : defaultClassName;\n }\n isOutOfBounds() {\n let offset = this.container.getBoundingClientRect();\n let targetTop = offset.top;\n let targetLeft = offset.left;\n let width = DomHandler.getOuterWidth(this.container);\n let height = DomHandler.getOuterHeight(this.container);\n let viewport = DomHandler.getViewport();\n return targetLeft + width > viewport.width || targetLeft < 0 || targetTop < 0 || targetTop + height > viewport.height;\n }\n onWindowResize(e) {\n this.hide();\n }\n bindDocumentResizeListener() {\n this.zone.runOutsideAngular(() => {\n this.resizeListener = this.onWindowResize.bind(this);\n window.addEventListener('resize', this.resizeListener);\n });\n }\n unbindDocumentResizeListener() {\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n this.resizeListener = null;\n }\n }\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.el.nativeElement, () => {\n if (this.container) {\n this.hide();\n }\n });\n }\n this.scrollHandler.bindScrollListener();\n }\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n unbindEvents() {\n const tooltipEvent = this.getOption('tooltipEvent');\n if (tooltipEvent === 'hover' || tooltipEvent === 'both') {\n this.el.nativeElement.removeEventListener('mouseenter', this.mouseEnterListener);\n this.el.nativeElement.removeEventListener('mouseleave', this.mouseLeaveListener);\n this.el.nativeElement.removeEventListener('click', this.clickListener);\n }\n if (tooltipEvent === 'focus' || tooltipEvent === 'both') {\n let target = this.el.nativeElement.querySelector('.p-component');\n if (!target) {\n target = this.getTarget(this.el.nativeElement);\n }\n }\n this.unbindDocumentResizeListener();\n }\n remove() {\n if (this.container && this.container.parentElement) {\n if (this.getOption('appendTo') === 'body')\n document.body.removeChild(this.container);\n else if (this.getOption('appendTo') === 'target')\n this.el.nativeElement.removeChild(this.container);\n else\n DomHandler.removeChild(this.container, this.getOption('appendTo'));\n }\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.unbindContainerMouseleaveListener();\n this.clearTimeouts();\n this.removeAriaDescribedBy();\n this.container = null;\n this.scrollHandler = null;\n }\n clearShowTimeout() {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n }\n clearHideTimeout() {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n }\n clearTimeouts() {\n this.clearShowTimeout();\n this.clearHideTimeout();\n }\n ngOnDestroy() {\n this.unbindEvents();\n if (this.container) {\n ZIndexUtils.clear(this.container);\n }\n this.remove();\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n if (this.documentEscapeListener) {\n this.documentEscapeListener();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: Tooltip, deps: [{ token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.PrimeNGConfig }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"18.0.1\", type: Tooltip, selector: \"[pTooltip]\", inputs: { tooltipPosition: \"tooltipPosition\", tooltipEvent: \"tooltipEvent\", appendTo: \"appendTo\", positionStyle: \"positionStyle\", tooltipStyleClass: \"tooltipStyleClass\", tooltipZIndex: \"tooltipZIndex\", escape: [\"escape\", \"escape\", booleanAttribute], showDelay: [\"showDelay\", \"showDelay\", numberAttribute], hideDelay: [\"hideDelay\", \"hideDelay\", numberAttribute], life: [\"life\", \"life\", numberAttribute], positionTop: [\"positionTop\", \"positionTop\", numberAttribute], positionLeft: [\"positionLeft\", \"positionLeft\", numberAttribute], autoHide: [\"autoHide\", \"autoHide\", booleanAttribute], fitContent: [\"fitContent\", \"fitContent\", booleanAttribute], hideOnEscape: [\"hideOnEscape\", \"hideOnEscape\", booleanAttribute], content: [\"pTooltip\", \"content\"], disabled: [\"tooltipDisabled\", \"disabled\"], tooltipOptions: \"tooltipOptions\" }, host: { classAttribute: \"p-element\" }, usesOnChanges: true, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: Tooltip, decorators: [{\n type: Directive,\n args: [{\n selector: '[pTooltip]',\n host: {\n class: 'p-element'\n }\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.PrimeNGConfig }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }], propDecorators: { tooltipPosition: [{\n type: Input\n }], tooltipEvent: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], positionStyle: [{\n type: Input\n }], tooltipStyleClass: [{\n type: Input\n }], tooltipZIndex: [{\n type: Input\n }], escape: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], showDelay: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], hideDelay: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], life: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], positionTop: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], positionLeft: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], autoHide: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], fitContent: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], hideOnEscape: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], content: [{\n type: Input,\n args: ['pTooltip']\n }], disabled: [{\n type: Input,\n args: ['tooltipDisabled']\n }], tooltipOptions: [{\n type: Input\n }] } });\nclass TooltipModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: TooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"18.0.1\", ngImport: i0, type: TooltipModule, declarations: [Tooltip], imports: [CommonModule], exports: [Tooltip] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: TooltipModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: TooltipModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n exports: [Tooltip],\n declarations: [Tooltip]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Tooltip, TooltipModule };\n","import * as i0 from '@angular/core';\nimport { Component } from '@angular/core';\nimport { BaseIcon } from 'primeng/baseicon';\n\nclass BlankIcon extends BaseIcon {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: BlankIcon, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"18.0.1\", type: BlankIcon, isStandalone: true, selector: \"BlankIcon\", usesInheritance: true, ngImport: i0, template: `\n \n \n \n `, isInline: true });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: BlankIcon, decorators: [{\n type: Component,\n args: [{\n selector: 'BlankIcon',\n standalone: true,\n imports: [BaseIcon],\n template: `\n \n \n \n `\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BlankIcon };\n","import * as i1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { forwardRef, EventEmitter, booleanAttribute, numberAttribute, Component, Input, Output, signal, computed, effect, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, ContentChildren, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as i3 from 'primeng/api';\nimport { TranslationKeys, PrimeTemplate, SharedModule } from 'primeng/api';\nimport * as i7 from 'primeng/autofocus';\nimport { AutoFocusModule } from 'primeng/autofocus';\nimport { DomHandler } from 'primeng/dom';\nimport * as i4 from 'primeng/overlay';\nimport { OverlayModule } from 'primeng/overlay';\nimport * as i2 from 'primeng/ripple';\nimport { RippleModule } from 'primeng/ripple';\nimport * as i6 from 'primeng/scroller';\nimport { ScrollerModule } from 'primeng/scroller';\nimport * as i5 from 'primeng/tooltip';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ObjectUtils, UniqueComponentId } from 'primeng/utils';\nimport { TimesIcon } from 'primeng/icons/times';\nimport { CheckIcon } from 'primeng/icons/check';\nimport { BlankIcon } from 'primeng/icons/blank';\nimport { ChevronDownIcon } from 'primeng/icons/chevrondown';\nimport { SearchIcon } from 'primeng/icons/search';\n\nconst DROPDOWN_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Dropdown),\n multi: true\n};\nclass DropdownItem {\n id;\n option;\n selected;\n focused;\n label;\n disabled;\n visible;\n itemSize;\n ariaPosInset;\n ariaSetSize;\n template;\n checkmark;\n onClick = new EventEmitter();\n onMouseEnter = new EventEmitter();\n ngOnInit() { }\n onOptionClick(event) {\n this.onClick.emit(event);\n }\n onOptionMouseEnter(event) {\n this.onMouseEnter.emit(event);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: DropdownItem, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"16.1.0\", version: \"18.0.1\", type: DropdownItem, selector: \"p-dropdownItem\", inputs: { id: \"id\", option: \"option\", selected: [\"selected\", \"selected\", booleanAttribute], focused: [\"focused\", \"focused\", booleanAttribute], label: \"label\", disabled: [\"disabled\", \"disabled\", booleanAttribute], visible: [\"visible\", \"visible\", booleanAttribute], itemSize: [\"itemSize\", \"itemSize\", numberAttribute], ariaPosInset: \"ariaPosInset\", ariaSetSize: \"ariaSetSize\", template: \"template\", checkmark: [\"checkmark\", \"checkmark\", booleanAttribute] }, outputs: { onClick: \"onClick\", onMouseEnter: \"onMouseEnter\" }, host: { classAttribute: \"p-element\" }, ngImport: i0, template: `\n \n \n \n \n \n {{ label ?? 'empty' }}\n \n \n `, isInline: true, dependencies: [{ kind: \"directive\", type: i0.forwardRef(() => i1.NgClass), selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgIf), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgTemplateOutlet), selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgStyle), selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: i0.forwardRef(() => i2.Ripple), selector: \"[pRipple]\" }, { kind: \"component\", type: i0.forwardRef(() => BlankIcon), selector: \"BlankIcon\" }, { kind: \"component\", type: i0.forwardRef(() => CheckIcon), selector: \"CheckIcon\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: DropdownItem, decorators: [{\n type: Component,\n args: [{\n selector: 'p-dropdownItem',\n template: `\n \n \n \n \n \n {{ label ?? 'empty' }}\n \n \n `,\n host: {\n class: 'p-element'\n }\n }]\n }], propDecorators: { id: [{\n type: Input\n }], option: [{\n type: Input\n }], selected: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], focused: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], label: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], visible: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], itemSize: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], ariaPosInset: [{\n type: Input\n }], ariaSetSize: [{\n type: Input\n }], template: [{\n type: Input\n }], checkmark: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], onClick: [{\n type: Output\n }], onMouseEnter: [{\n type: Output\n }] } });\n/**\n * Dropdown also known as Select, is used to choose an item from a collection of options.\n * @group Components\n */\nclass Dropdown {\n el;\n renderer;\n cd;\n zone;\n filterService;\n config;\n /**\n * Unique identifier of the component\n * @group Props\n */\n id;\n /**\n * Height of the viewport in pixels, a scrollbar is defined if height of list exceeds this value.\n * @group Props\n */\n scrollHeight = '200px';\n /**\n * When specified, displays an input field to filter the items on keyup.\n * @group Props\n */\n filter;\n /**\n * Name of the input element.\n * @group Props\n */\n name;\n /**\n * Inline style of the element.\n * @group Props\n */\n style;\n /**\n * Inline style of the overlay panel element.\n * @group Props\n */\n panelStyle;\n /**\n * Style class of the element.\n * @group Props\n */\n styleClass;\n /**\n * Style class of the overlay panel element.\n * @group Props\n */\n panelStyleClass;\n /**\n * When present, it specifies that the component cannot be edited.\n * @group Props\n */\n readonly;\n /**\n * When present, it specifies that an input field must be filled out before submitting the form.\n * @group Props\n */\n required;\n /**\n * When present, custom value instead of predefined options can be entered using the editable input field.\n * @group Props\n */\n editable;\n /**\n * Target element to attach the overlay, valid values are \"body\" or a local ng-template variable of another element (note: use binding with brackets for template variables, e.g. [appendTo]=\"mydiv\" for a div element having #mydiv as variable name).\n * @group Props\n */\n appendTo;\n /**\n * Index of the element in tabbing order.\n * @group Props\n */\n tabindex = 0;\n /**\n * Default text to display when no option is selected.\n * @group Props\n */\n set placeholder(val) {\n this._placeholder.set(val);\n }\n get placeholder() {\n return this._placeholder.asReadonly();\n }\n /**\n * Icon to display in loading state.\n * @group Props\n */\n loadingIcon;\n /**\n * Placeholder text to show when filter input is empty.\n * @group Props\n */\n filterPlaceholder;\n /**\n * Locale to use in filtering. The default locale is the host environment's current locale.\n * @group Props\n */\n filterLocale;\n /**\n * Specifies the input variant of the component.\n * @group Props\n */\n variant = 'outlined';\n /**\n * Identifier of the accessible input element.\n * @group Props\n */\n inputId;\n /**\n * A property to uniquely identify a value in options.\n * @group Props\n */\n dataKey;\n /**\n * When filtering is enabled, filterBy decides which field or fields (comma separated) to search against.\n * @group Props\n */\n filterBy;\n /**\n * Fields used when filtering the options, defaults to optionLabel.\n * @group Props\n */\n filterFields;\n /**\n * When present, it specifies that the component should automatically get focus on load.\n * @group Props\n */\n autofocus;\n /**\n * Clears the filter value when hiding the dropdown.\n * @group Props\n */\n resetFilterOnHide = false;\n /**\n * Whether the selected option will be shown with a check mark.\n * @group Props\n */\n checkmark = false;\n /**\n * Icon class of the dropdown icon.\n * @group Props\n */\n dropdownIcon;\n /**\n * Whether the dropdown is in loading state.\n * @group Props\n */\n loading = false;\n /**\n * Name of the label field of an option.\n * @group Props\n */\n optionLabel;\n /**\n * Name of the value field of an option.\n * @group Props\n */\n optionValue;\n /**\n * Name of the disabled field of an option.\n * @group Props\n */\n optionDisabled;\n /**\n * Name of the label field of an option group.\n * @group Props\n */\n optionGroupLabel = 'label';\n /**\n * Name of the options field of an option group.\n * @group Props\n */\n optionGroupChildren = 'items';\n /**\n * Whether to display the first item as the label if no placeholder is defined and value is null.\n * @deprecated since v17.3.0, set initial value by model instead.\n * @group Props\n */\n autoDisplayFirst = true;\n /**\n * Whether to display options as grouped when nested options are provided.\n * @group Props\n */\n group;\n /**\n * When enabled, a clear icon is displayed to clear the value.\n * @group Props\n */\n showClear;\n /**\n * Text to display when filtering does not return any results. Defaults to global value in i18n translation configuration.\n * @group Props\n */\n emptyFilterMessage = '';\n /**\n * Text to display when there is no data. Defaults to global value in i18n translation configuration.\n * @group Props\n */\n emptyMessage = '';\n /**\n * Defines if data is loaded and interacted with in lazy manner.\n * @group Props\n */\n lazy = false;\n /**\n * Whether the data should be loaded on demand during scroll.\n * @group Props\n */\n virtualScroll;\n /**\n * Height of an item in the list for VirtualScrolling.\n * @group Props\n */\n virtualScrollItemSize;\n /**\n * Whether to use the scroller feature. The properties of scroller component can be used like an object in it.\n * @group Props\n */\n virtualScrollOptions;\n /**\n * Whether to use overlay API feature. The properties of overlay API can be used like an object in it.\n * @group Props\n */\n overlayOptions;\n /**\n * Defines a string that labels the filter input.\n * @group Props\n */\n ariaFilterLabel;\n /**\n * Used to define a aria label attribute the current element.\n * @group Props\n */\n ariaLabel;\n /**\n * Establishes relationships between the component and label(s) where its value should be one or more element IDs.\n * @group Props\n */\n ariaLabelledBy;\n /**\n * Defines how the items are filtered.\n * @group Props\n */\n filterMatchMode = 'contains';\n /**\n * Maximum number of character allows in the editable input field.\n * @group Props\n */\n maxlength;\n /**\n * Advisory information to display in a tooltip on hover.\n * @group Props\n */\n tooltip = '';\n /**\n * Position of the tooltip.\n * @group Props\n */\n tooltipPosition = 'right';\n /**\n * Type of CSS position.\n * @group Props\n */\n tooltipPositionStyle = 'absolute';\n /**\n * Style class of the tooltip.\n * @group Props\n */\n tooltipStyleClass;\n /**\n * Fields used when filtering the options, defaults to optionLabel.\n * @group Props\n */\n focusOnHover = false;\n /**\n * Determines if the option will be selected on focus.\n * @group Props\n */\n selectOnFocus = false;\n /**\n * Whether to focus on the first visible or selected element when the overlay panel is shown.\n * @group Props\n */\n autoOptionFocus = true;\n /**\n * Applies focus to the filter element when the overlay is shown.\n * @group Props\n */\n autofocusFilter = true;\n /**\n * Determines if the panel will be shown when the input is focused and receives a character key down event.\n * @group Props\n */\n autoShowPanelOnPrintableCharacterKeyDown = true;\n /**\n * When present, it specifies that the component should be disabled.\n * @group Props\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(_disabled) {\n if (_disabled) {\n this.focused = false;\n if (this.overlayVisible)\n this.hide();\n }\n this._disabled = _disabled;\n if (!this.cd.destroyed) {\n this.cd.detectChanges();\n }\n }\n /**\n * Item size of item to be virtual scrolled.\n * @group Props\n * @deprecated use virtualScrollItemSize property instead.\n */\n get itemSize() {\n return this._itemSize;\n }\n set itemSize(val) {\n this._itemSize = val;\n console.warn('The itemSize property is deprecated, use virtualScrollItemSize property instead.');\n }\n _itemSize;\n /**\n * Whether to automatically manage layering.\n * @group Props\n * @deprecated since v14.2.0, use overlayOptions property instead.\n */\n get autoZIndex() {\n return this._autoZIndex;\n }\n set autoZIndex(val) {\n this._autoZIndex = val;\n console.warn('The autoZIndex property is deprecated since v14.2.0, use overlayOptions property instead.');\n }\n _autoZIndex;\n /**\n * Base zIndex value to use in layering.\n * @group Props\n * @deprecated since v14.2.0, use overlayOptions property instead.\n */\n get baseZIndex() {\n return this._baseZIndex;\n }\n set baseZIndex(val) {\n this._baseZIndex = val;\n console.warn('The baseZIndex property is deprecated since v14.2.0, use overlayOptions property instead.');\n }\n _baseZIndex;\n /**\n * Transition options of the show animation.\n * @group Props\n * @deprecated since v14.2.0, use overlayOptions property instead.\n */\n get showTransitionOptions() {\n return this._showTransitionOptions;\n }\n set showTransitionOptions(val) {\n this._showTransitionOptions = val;\n console.warn('The showTransitionOptions property is deprecated since v14.2.0, use overlayOptions property instead.');\n }\n _showTransitionOptions;\n /**\n * Transition options of the hide animation.\n * @group Props\n * @deprecated since v14.2.0, use overlayOptions property instead.\n */\n get hideTransitionOptions() {\n return this._hideTransitionOptions;\n }\n set hideTransitionOptions(val) {\n this._hideTransitionOptions = val;\n console.warn('The hideTransitionOptions property is deprecated since v14.2.0, use overlayOptions property instead.');\n }\n _hideTransitionOptions;\n /**\n * When specified, filter displays with this value.\n * @group Props\n */\n get filterValue() {\n return this._filterValue();\n }\n set filterValue(val) {\n setTimeout(() => {\n this._filterValue.set(val);\n });\n }\n /**\n * An array of objects to display as the available options.\n * @group Props\n */\n get options() {\n const options = this._options();\n return options;\n }\n set options(val) {\n if (!ObjectUtils.deepEquals(val, this._options())) {\n this._options.set(val);\n }\n }\n /**\n * Callback to invoke when value of dropdown changes.\n * @param {DropdownChangeEvent} event - custom change event.\n * @group Emits\n */\n onChange = new EventEmitter();\n /**\n * Callback to invoke when data is filtered.\n * @param {DropdownFilterEvent} event - custom filter event.\n * @group Emits\n */\n onFilter = new EventEmitter();\n /**\n * Callback to invoke when dropdown gets focus.\n * @param {Event} event - Browser event.\n * @group Emits\n */\n onFocus = new EventEmitter();\n /**\n * Callback to invoke when dropdown loses focus.\n * @param {Event} event - Browser event.\n * @group Emits\n */\n onBlur = new EventEmitter();\n /**\n * Callback to invoke when component is clicked.\n * @param {MouseEvent} event - Mouse event.\n * @group Emits\n */\n onClick = new EventEmitter();\n /**\n * Callback to invoke when dropdown overlay gets visible.\n * @param {AnimationEvent} event - Animation event.\n * @group Emits\n */\n onShow = new EventEmitter();\n /**\n * Callback to invoke when dropdown overlay gets hidden.\n * @param {AnimationEvent} event - Animation event.\n * @group Emits\n */\n onHide = new EventEmitter();\n /**\n * Callback to invoke when dropdown clears the value.\n * @param {Event} event - Browser event.\n * @group Emits\n */\n onClear = new EventEmitter();\n /**\n * Callback to invoke in lazy mode to load new data.\n * @param {DropdownLazyLoadEvent} event - Lazy load event.\n * @group Emits\n */\n onLazyLoad = new EventEmitter();\n containerViewChild;\n filterViewChild;\n focusInputViewChild;\n editableInputViewChild;\n itemsViewChild;\n scroller;\n overlayViewChild;\n firstHiddenFocusableElementOnOverlay;\n lastHiddenFocusableElementOnOverlay;\n templates;\n _disabled;\n itemsWrapper;\n itemTemplate;\n groupTemplate;\n loaderTemplate;\n selectedItemTemplate;\n headerTemplate;\n filterTemplate;\n footerTemplate;\n emptyFilterTemplate;\n emptyTemplate;\n dropdownIconTemplate;\n loadingIconTemplate;\n clearIconTemplate;\n filterIconTemplate;\n filterOptions;\n _options = signal(null);\n _placeholder = signal(undefined);\n modelValue = signal(null);\n value;\n onModelChange = () => { };\n onModelTouched = () => { };\n hover;\n focused;\n overlayVisible;\n optionsChanged;\n panel;\n dimensionsUpdated;\n hoveredItem;\n selectedOptionUpdated;\n _filterValue = signal(null);\n searchValue;\n searchIndex;\n searchTimeout;\n previousSearchChar;\n currentSearchChar;\n preventModelTouched;\n focusedOptionIndex = signal(-1);\n labelId;\n listId;\n clicked = signal(false);\n get emptyMessageLabel() {\n return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n }\n get emptyFilterMessageLabel() {\n return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);\n }\n get isVisibleClearIcon() {\n return this.modelValue() != null && this.hasSelectedOption() && this.showClear && !this.disabled;\n }\n get listLabel() {\n return this.config.getTranslation(TranslationKeys.ARIA)['listLabel'];\n }\n get containerClass() {\n return {\n 'p-dropdown p-component p-inputwrapper': true,\n 'p-disabled': this.disabled,\n 'p-dropdown-clearable': this.showClear && !this.disabled,\n 'p-focus': this.focused,\n 'p-inputwrapper-filled': this.modelValue() !== undefined && this.modelValue() !== null && !this.modelValue().length,\n 'p-inputwrapper-focus': this.focused || this.overlayVisible,\n 'p-variant-filled': this.variant === 'filled' || this.config.inputStyle() === 'filled',\n 'p-dropdown-open': this.overlayVisible\n };\n }\n get inputClass() {\n const label = this.label();\n return {\n 'p-dropdown-label p-inputtext': true,\n 'p-placeholder': this.placeholder() && label === this.placeholder(),\n 'p-dropdown-label-empty': !this.editable && !this.selectedItemTemplate && (label === undefined || label === null || label === 'p-emptylabel' || label.length === 0)\n };\n }\n get panelClass() {\n return {\n 'p-dropdown-panel p-component': true,\n 'p-input-filled': this.config.inputStyle() === 'filled',\n 'p-ripple-disabled': this.config.ripple === false\n };\n }\n get focusedOptionId() {\n return this.focusedOptionIndex() !== -1 ? `${this.id}_${this.focusedOptionIndex()}` : null;\n }\n visibleOptions = computed(() => {\n const options = this.getAllVisibleAndNonVisibleOptions();\n if (this._filterValue()) {\n const _filterBy = this.filterBy || this.optionLabel;\n const filteredOptions = !_filterBy && !this.filterFields && !this.optionValue\n ? this.options.filter((option) => {\n if (option.label) {\n return option.label.toString().toLowerCase().indexOf(this._filterValue().toLowerCase().trim()) !== -1;\n }\n return option.toString().toLowerCase().indexOf(this._filterValue().toLowerCase().trim()) !== -1;\n })\n : this.filterService.filter(options, this.searchFields(), this._filterValue().trim(), this.filterMatchMode, this.filterLocale);\n if (this.group) {\n const optionGroups = this.options || [];\n const filtered = [];\n optionGroups.forEach((group) => {\n const groupChildren = this.getOptionGroupChildren(group);\n const filteredItems = groupChildren.filter((item) => filteredOptions.includes(item));\n if (filteredItems.length > 0)\n filtered.push({ ...group, [typeof this.optionGroupChildren === 'string' ? this.optionGroupChildren : 'items']: [...filteredItems] });\n });\n return this.flatOptions(filtered);\n }\n return filteredOptions;\n }\n return options;\n });\n label = computed(() => {\n // use getAllVisibleAndNonVisibleOptions verses just visible options\n // this will find the selected option whether or not the user is currently filtering because the filtered (i.e. visible) options, are a subset of all the options\n const options = this.getAllVisibleAndNonVisibleOptions();\n // use isOptionEqualsModelValue for the use case where the dropdown is initalized with a disabled option\n const selectedOptionIndex = options.findIndex((option) => this.isOptionValueEqualsModelValue(option));\n return selectedOptionIndex !== -1 ? this.getOptionLabel(options[selectedOptionIndex]) : this.placeholder() || 'p-emptylabel';\n });\n filled = computed(() => {\n if (typeof this.modelValue() === 'string')\n return !!this.modelValue();\n const options = this.getAllVisibleAndNonVisibleOptions();\n const isOptionSelected = options.findIndex((option) => this.isOptionValueEqualsModelValue(option)) !== -1;\n return this.label() !== 'p-emptylabel' && isOptionSelected;\n });\n selectedOption;\n editableInputValue = computed(() => this.getOptionLabel(this.selectedOption) || this.modelValue() || '');\n constructor(el, renderer, cd, zone, filterService, config) {\n this.el = el;\n this.renderer = renderer;\n this.cd = cd;\n this.zone = zone;\n this.filterService = filterService;\n this.config = config;\n effect(() => {\n const modelValue = this.modelValue();\n const visibleOptions = this.visibleOptions();\n if (visibleOptions && ObjectUtils.isNotEmpty(visibleOptions)) {\n const selectedOptionIndex = this.findSelectedOptionIndex();\n if (selectedOptionIndex !== -1 || modelValue === undefined || (typeof modelValue === 'string' && modelValue.length === 0) || this.isModelValueNotSet() || this.editable) {\n this.selectedOption = visibleOptions[selectedOptionIndex];\n }\n }\n if (ObjectUtils.isEmpty(visibleOptions) && (modelValue === undefined || this.isModelValueNotSet()) && ObjectUtils.isNotEmpty(this.selectedOption)) {\n this.selectedOption = null;\n }\n if (modelValue !== undefined && this.editable) {\n this.updateEditableLabel();\n }\n this.cd.markForCheck();\n });\n }\n isModelValueNotSet() {\n return this.modelValue() === null && !this.isOptionValueEqualsModelValue(this.selectedOption);\n }\n getAllVisibleAndNonVisibleOptions() {\n return this.group ? this.flatOptions(this.options) : this.options || [];\n }\n ngOnInit() {\n this.id = this.id || UniqueComponentId();\n this.autoUpdateModel();\n if (this.filterBy) {\n this.filterOptions = {\n filter: (value) => this.onFilterInputChange(value),\n reset: () => this.resetFilter()\n };\n }\n }\n ngAfterViewChecked() {\n if (this.optionsChanged && this.overlayVisible) {\n this.optionsChanged = false;\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n if (this.overlayViewChild) {\n this.overlayViewChild.alignOverlay();\n }\n }, 1);\n });\n }\n if (this.selectedOptionUpdated && this.itemsWrapper) {\n let selectedItem = DomHandler.findSingle(this.overlayViewChild?.overlayViewChild?.nativeElement, 'li.p-highlight');\n if (selectedItem) {\n DomHandler.scrollInView(this.itemsWrapper, selectedItem);\n }\n this.selectedOptionUpdated = false;\n }\n }\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'item':\n this.itemTemplate = item.template;\n break;\n case 'selectedItem':\n this.selectedItemTemplate = item.template;\n break;\n case 'header':\n this.headerTemplate = item.template;\n break;\n case 'filter':\n this.filterTemplate = item.template;\n break;\n case 'footer':\n this.footerTemplate = item.template;\n break;\n case 'emptyfilter':\n this.emptyFilterTemplate = item.template;\n break;\n case 'empty':\n this.emptyTemplate = item.template;\n break;\n case 'group':\n this.groupTemplate = item.template;\n break;\n case 'loader':\n this.loaderTemplate = item.template;\n break;\n case 'dropdownicon':\n this.dropdownIconTemplate = item.template;\n break;\n case 'loadingicon':\n this.loadingIconTemplate = item.template;\n break;\n case 'clearicon':\n this.clearIconTemplate = item.template;\n break;\n case 'filtericon':\n this.filterIconTemplate = item.template;\n break;\n default:\n this.itemTemplate = item.template;\n break;\n }\n });\n }\n flatOptions(options) {\n return (options || []).reduce((result, option, index) => {\n result.push({ optionGroup: option, group: true, index });\n const optionGroupChildren = this.getOptionGroupChildren(option);\n optionGroupChildren && optionGroupChildren.forEach((o) => result.push(o));\n return result;\n }, []);\n }\n autoUpdateModel() {\n if (this.selectOnFocus && this.autoOptionFocus && !this.hasSelectedOption()) {\n this.focusedOptionIndex.set(this.findFirstFocusedOptionIndex());\n this.onOptionSelect(null, this.visibleOptions()[this.focusedOptionIndex()], false);\n }\n if (this.autoDisplayFirst && (this.modelValue() === null || this.modelValue() === undefined)) {\n if (!this.placeholder()) {\n const ind = this.findFirstOptionIndex();\n this.onOptionSelect(null, this.visibleOptions()[ind], false, true);\n }\n }\n }\n onOptionSelect(event, option, isHide = true, preventChange = false) {\n if (!this.isSelected(option)) {\n const value = this.getOptionValue(option);\n this.updateModel(value, event);\n this.focusedOptionIndex.set(this.findSelectedOptionIndex());\n preventChange === false && this.onChange.emit({ originalEvent: event, value: value });\n }\n if (isHide) {\n this.hide(true);\n }\n }\n onOptionMouseEnter(event, index) {\n if (this.focusOnHover) {\n this.changeFocusedOptionIndex(event, index);\n }\n }\n updateModel(value, event) {\n this.value = value;\n this.onModelChange(value);\n this.modelValue.set(value);\n this.selectedOptionUpdated = true;\n }\n writeValue(value, emitEvent = true) {\n if (this.filter) {\n this.resetFilter();\n }\n this.value = value;\n if (emitEvent && this.allowModelChange()) {\n this.onModelChange(value);\n }\n this.modelValue.set(this.value);\n this.updateEditableLabel();\n this.cd.markForCheck();\n }\n allowModelChange() {\n return this.autoDisplayFirst && !this.placeholder() && (this.modelValue() === undefined || this.modelValue() === null) && !this.editable && this.options && this.options.length;\n }\n isSelectedOptionEmpty() {\n return ObjectUtils.isEmpty(this.selectedOption);\n }\n isSelected(option) {\n return this.isValidOption(option) && this.isOptionValueEqualsModelValue(option);\n }\n isOptionValueEqualsModelValue(option) {\n return ObjectUtils.equals(this.modelValue(), this.getOptionValue(option), this.equalityKey());\n }\n ngAfterViewInit() {\n if (this.editable) {\n this.updateEditableLabel();\n }\n this.updatePlaceHolderForFloatingLabel();\n }\n updatePlaceHolderForFloatingLabel() {\n if (this._placeholder() !== null && this._placeholder() !== undefined) {\n // We don't want to overwrite the placeholder if it's already set\n return;\n }\n const parentElement = this.el.nativeElement.parentElement;\n const isInFloatingLabel = parentElement?.classList.contains('p-float-label');\n if (parentElement && isInFloatingLabel && !this.selectedOption) {\n const label = parentElement.querySelector('label');\n if (label) {\n this._placeholder.set(label.textContent);\n }\n }\n }\n updateEditableLabel() {\n if (this.editableInputViewChild) {\n this.editableInputViewChild.nativeElement.value = this.getOptionLabel(this.selectedOption) || this.modelValue() || '';\n }\n }\n clearEditableLabel() {\n if (this.editableInputViewChild) {\n this.editableInputViewChild.nativeElement.value = '';\n }\n }\n getOptionIndex(index, scrollerOptions) {\n return this.virtualScrollerDisabled ? index : scrollerOptions && scrollerOptions.getItemOptions(index)['index'];\n }\n getOptionLabel(option) {\n return this.optionLabel !== undefined && this.optionLabel !== null ? ObjectUtils.resolveFieldData(option, this.optionLabel) : option && option.label !== undefined ? option.label : option;\n }\n getOptionValue(option) {\n return this.optionValue && this.optionValue !== null ? ObjectUtils.resolveFieldData(option, this.optionValue) : !this.optionLabel && option && option.value !== undefined ? option.value : option;\n }\n isOptionDisabled(option) {\n if (this.getOptionValue(this.modelValue()) === this.getOptionValue(option) || (this.getOptionLabel(this.modelValue() === this.getOptionLabel(option)) && option.disabled === false)) {\n return false;\n }\n else {\n return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : option && option.disabled !== undefined ? option.disabled : false;\n }\n }\n getOptionGroupLabel(optionGroup) {\n return this.optionGroupLabel !== undefined && this.optionGroupLabel !== null ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : optionGroup && optionGroup.label !== undefined ? optionGroup.label : optionGroup;\n }\n getOptionGroupChildren(optionGroup) {\n return this.optionGroupChildren !== undefined && this.optionGroupChildren !== null ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;\n }\n getAriaPosInset(index) {\n return ((this.optionGroupLabel\n ? index -\n this.visibleOptions()\n .slice(0, index)\n .filter((option) => this.isOptionGroup(option)).length\n : index) + 1);\n }\n get ariaSetSize() {\n return this.visibleOptions().filter((option) => !this.isOptionGroup(option)).length;\n }\n /**\n * Callback to invoke on filter reset.\n * @group Method\n */\n resetFilter() {\n this._filterValue.set(null);\n if (this.filterViewChild && this.filterViewChild.nativeElement) {\n this.filterViewChild.nativeElement.value = '';\n }\n }\n registerOnChange(fn) {\n this.onModelChange = fn;\n }\n registerOnTouched(fn) {\n this.onModelTouched = fn;\n }\n setDisabledState(val) {\n this.disabled = val;\n this.cd.markForCheck();\n }\n onContainerClick(event) {\n if (this.disabled || this.readonly || this.loading) {\n return;\n }\n this.focusInputViewChild?.nativeElement.focus({ preventScroll: true });\n if (event.target.tagName === 'INPUT' || event.target.getAttribute('data-pc-section') === 'clearicon' || event.target.closest('[data-pc-section=\"clearicon\"]')) {\n return;\n }\n else if (!this.overlayViewChild || !this.overlayViewChild.el.nativeElement.contains(event.target)) {\n this.overlayVisible ? this.hide(true) : this.show(true);\n }\n this.onClick.emit(event);\n this.clicked.set(true);\n this.cd.detectChanges();\n }\n isEmpty() {\n return !this._options() || (this.visibleOptions() && this.visibleOptions().length === 0);\n }\n onEditableInput(event) {\n const value = event.target.value;\n this.searchValue = '';\n const matched = this.searchOptions(event, value);\n !matched && this.focusedOptionIndex.set(-1);\n this.onModelChange(value);\n this.updateModel(value, event);\n setTimeout(() => {\n this.onChange.emit({ originalEvent: event, value: value });\n }, 1);\n !this.overlayVisible && ObjectUtils.isNotEmpty(value) && this.show();\n }\n /**\n * Displays the panel.\n * @group Method\n */\n show(isFocus) {\n this.overlayVisible = true;\n const focusedOptionIndex = this.focusedOptionIndex() !== -1 ? this.focusedOptionIndex() : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.editable ? -1 : this.findSelectedOptionIndex();\n this.focusedOptionIndex.set(focusedOptionIndex);\n if (isFocus) {\n DomHandler.focus(this.focusInputViewChild?.nativeElement);\n }\n this.cd.markForCheck();\n }\n onOverlayAnimationStart(event) {\n if (event.toState === 'visible') {\n this.itemsWrapper = DomHandler.findSingle(this.overlayViewChild?.overlayViewChild?.nativeElement, this.virtualScroll ? '.p-scroller' : '.p-dropdown-items-wrapper');\n this.virtualScroll && this.scroller?.setContentEl(this.itemsViewChild?.nativeElement);\n if (this.options && this.options.length) {\n if (this.virtualScroll) {\n const selectedIndex = this.modelValue() ? this.focusedOptionIndex() : -1;\n if (selectedIndex !== -1) {\n this.scroller?.scrollToIndex(selectedIndex);\n }\n }\n else {\n let selectedListItem = DomHandler.findSingle(this.itemsWrapper, '.p-dropdown-item.p-highlight');\n if (selectedListItem) {\n selectedListItem.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n }\n }\n if (this.filterViewChild && this.filterViewChild.nativeElement) {\n this.preventModelTouched = true;\n if (this.autofocusFilter && !this.editable) {\n this.filterViewChild.nativeElement.focus();\n }\n }\n this.onShow.emit(event);\n }\n if (event.toState === 'void') {\n this.itemsWrapper = null;\n this.onModelTouched();\n this.onHide.emit(event);\n }\n }\n /**\n * Hides the panel.\n * @group Method\n */\n hide(isFocus) {\n this.overlayVisible = false;\n this.focusedOptionIndex.set(-1);\n this.clicked.set(false);\n this.searchValue = '';\n if (this.overlayOptions?.mode === 'modal') {\n DomHandler.unblockBodyScroll();\n }\n if (this.filter && this.resetFilterOnHide) {\n this.resetFilter();\n }\n if (isFocus) {\n if (this.focusInputViewChild) {\n setTimeout(() => {\n DomHandler.focus(this.focusInputViewChild?.nativeElement);\n });\n }\n if (this.editable && this.editableInputViewChild) {\n setTimeout(() => {\n DomHandler.focus(this.editableInputViewChild?.nativeElement);\n });\n }\n }\n this.cd.markForCheck();\n }\n onInputFocus(event) {\n if (this.disabled) {\n // For ScreenReaders\n return;\n }\n this.focused = true;\n const focusedOptionIndex = this.focusedOptionIndex() !== -1 ? this.focusedOptionIndex() : this.overlayVisible && this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1;\n this.focusedOptionIndex.set(focusedOptionIndex);\n this.overlayVisible && this.scrollInView(this.focusedOptionIndex());\n this.onFocus.emit(event);\n }\n onInputBlur(event) {\n this.focused = false;\n this.onBlur.emit(event);\n if (!this.preventModelTouched) {\n this.onModelTouched();\n }\n this.preventModelTouched = false;\n }\n onMouseDown(event) {\n event.preventDefault();\n }\n onKeyDown(event, search) {\n if (this.disabled || this.readonly || this.loading) {\n return;\n }\n switch (event.code) {\n //down\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n //up\n case 'ArrowUp':\n this.onArrowUpKey(event, this.editable);\n break;\n case 'ArrowLeft':\n case 'ArrowRight':\n this.onArrowLeftKey(event, this.editable);\n break;\n case 'Delete':\n this.onDeleteKey(event);\n break;\n case 'Home':\n this.onHomeKey(event, this.editable);\n break;\n case 'End':\n this.onEndKey(event, this.editable);\n break;\n case 'PageDown':\n this.onPageDownKey(event);\n break;\n case 'PageUp':\n this.onPageUpKey(event);\n break;\n //space\n case 'Space':\n this.onSpaceKey(event, search);\n break;\n //enter\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n //escape and tab\n case 'Escape':\n this.onEscapeKey(event);\n break;\n case 'Tab':\n this.onTabKey(event);\n break;\n case 'Backspace':\n this.onBackspaceKey(event, this.editable);\n break;\n case 'ShiftLeft':\n case 'ShiftRight':\n //NOOP\n break;\n default:\n if (!event.metaKey && ObjectUtils.isPrintableCharacter(event.key)) {\n !this.overlayVisible && this.autoShowPanelOnPrintableCharacterKeyDown && this.show();\n !this.editable && this.searchOptions(event, event.key);\n }\n break;\n }\n this.clicked.set(false);\n }\n onFilterKeyDown(event) {\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n case 'ArrowUp':\n this.onArrowUpKey(event, true);\n break;\n case 'ArrowLeft':\n case 'ArrowRight':\n this.onArrowLeftKey(event, true);\n break;\n case 'Home':\n this.onHomeKey(event, true);\n break;\n case 'End':\n this.onEndKey(event, true);\n break;\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event, true);\n break;\n case 'Escape':\n this.onEscapeKey(event);\n break;\n case 'Tab':\n this.onTabKey(event, true);\n break;\n default:\n break;\n }\n }\n onFilterBlur(event) {\n this.focusedOptionIndex.set(-1);\n }\n onArrowDownKey(event) {\n if (!this.overlayVisible) {\n this.show();\n this.editable && this.changeFocusedOptionIndex(event, this.findSelectedOptionIndex());\n }\n else {\n const optionIndex = this.focusedOptionIndex() !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex()) : this.clicked() ? this.findFirstOptionIndex() : this.findFirstFocusedOptionIndex();\n this.changeFocusedOptionIndex(event, optionIndex);\n }\n // const optionIndex = this.focusedOptionIndex() !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex()) : this.findFirstFocusedOptionIndex();\n // this.changeFocusedOptionIndex(event, optionIndex);\n // !this.overlayVisible && this.show();\n event.preventDefault();\n event.stopPropagation();\n }\n changeFocusedOptionIndex(event, index) {\n if (this.focusedOptionIndex() !== index) {\n this.focusedOptionIndex.set(index);\n this.scrollInView();\n if (this.selectOnFocus) {\n const option = this.visibleOptions()[index];\n this.onOptionSelect(event, option, false);\n }\n }\n }\n get virtualScrollerDisabled() {\n return !this.virtualScroll;\n }\n scrollInView(index = -1) {\n const id = index !== -1 ? `${this.id}_${index}` : this.focusedOptionId;\n if (this.itemsViewChild && this.itemsViewChild.nativeElement) {\n const element = DomHandler.findSingle(this.itemsViewChild.nativeElement, `li[id=\"${id}\"]`);\n if (element) {\n element.scrollIntoView && element.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n else if (!this.virtualScrollerDisabled) {\n setTimeout(() => {\n this.virtualScroll && this.scroller?.scrollToIndex(index !== -1 ? index : this.focusedOptionIndex());\n }, 0);\n }\n }\n }\n hasSelectedOption() {\n return this.modelValue() !== undefined;\n }\n isValidSelectedOption(option) {\n return this.isValidOption(option) && this.isSelected(option);\n }\n equalityKey() {\n return this.optionValue ? null : this.dataKey;\n }\n findFirstFocusedOptionIndex() {\n const selectedIndex = this.findSelectedOptionIndex();\n return selectedIndex < 0 ? this.findFirstOptionIndex() : selectedIndex;\n }\n findFirstOptionIndex() {\n return this.visibleOptions().findIndex((option) => this.isValidOption(option));\n }\n findSelectedOptionIndex() {\n return this.hasSelectedOption() ? this.visibleOptions().findIndex((option) => this.isValidSelectedOption(option)) : -1;\n }\n findNextOptionIndex(index) {\n const matchedOptionIndex = index < this.visibleOptions().length - 1\n ? this.visibleOptions()\n .slice(index + 1)\n .findIndex((option) => this.isValidOption(option))\n : -1;\n return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;\n }\n findPrevOptionIndex(index) {\n const matchedOptionIndex = index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions().slice(0, index), (option) => this.isValidOption(option)) : -1;\n return matchedOptionIndex > -1 ? matchedOptionIndex : index;\n }\n findLastOptionIndex() {\n return ObjectUtils.findLastIndex(this.visibleOptions(), (option) => this.isValidOption(option));\n }\n findLastFocusedOptionIndex() {\n const selectedIndex = this.findSelectedOptionIndex();\n return selectedIndex < 0 ? this.findLastOptionIndex() : selectedIndex;\n }\n isValidOption(option) {\n return option !== undefined && option !== null && !(this.isOptionDisabled(option) || this.isOptionGroup(option));\n }\n isOptionGroup(option) {\n return this.optionGroupLabel !== undefined && this.optionGroupLabel !== null && option.optionGroup !== undefined && option.optionGroup !== null && option.group;\n }\n onArrowUpKey(event, pressedInInputText = false) {\n if (event.altKey && !pressedInInputText) {\n if (this.focusedOptionIndex() !== -1) {\n const option = this.visibleOptions()[this.focusedOptionIndex()];\n this.onOptionSelect(event, option);\n }\n this.overlayVisible && this.hide();\n }\n else {\n const optionIndex = this.focusedOptionIndex() !== -1 ? this.findPrevOptionIndex(this.focusedOptionIndex()) : this.clicked() ? this.findLastOptionIndex() : this.findLastFocusedOptionIndex();\n this.changeFocusedOptionIndex(event, optionIndex);\n !this.overlayVisible && this.show();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n onArrowLeftKey(event, pressedInInputText = false) {\n pressedInInputText && this.focusedOptionIndex.set(-1);\n }\n onDeleteKey(event) {\n if (this.showClear) {\n this.clear(event);\n event.preventDefault();\n }\n }\n onHomeKey(event, pressedInInputText = false) {\n if (pressedInInputText) {\n const target = event.currentTarget;\n if (event.shiftKey) {\n target.setSelectionRange(0, target.value.length);\n }\n else {\n target.setSelectionRange(0, 0);\n this.focusedOptionIndex.set(-1);\n }\n }\n else {\n this.changeFocusedOptionIndex(event, this.findFirstOptionIndex());\n !this.overlayVisible && this.show();\n }\n event.preventDefault();\n }\n onEndKey(event, pressedInInputText = false) {\n if (pressedInInputText) {\n const target = event.currentTarget;\n if (event.shiftKey) {\n target.setSelectionRange(0, target.value.length);\n }\n else {\n const len = target.value.length;\n target.setSelectionRange(len, len);\n this.focusedOptionIndex.set(-1);\n }\n }\n else {\n this.changeFocusedOptionIndex(event, this.findLastOptionIndex());\n !this.overlayVisible && this.show();\n }\n event.preventDefault();\n }\n onPageDownKey(event) {\n this.scrollInView(this.visibleOptions().length - 1);\n event.preventDefault();\n }\n onPageUpKey(event) {\n this.scrollInView(0);\n event.preventDefault();\n }\n onSpaceKey(event, pressedInInputText = false) {\n !this.editable && !pressedInInputText && this.onEnterKey(event);\n }\n onEnterKey(event, pressedInInput = false) {\n if (!this.overlayVisible) {\n this.focusedOptionIndex.set(-1);\n this.onArrowDownKey(event);\n }\n else {\n if (this.focusedOptionIndex() !== -1) {\n const option = this.visibleOptions()[this.focusedOptionIndex()];\n this.onOptionSelect(event, option);\n }\n !pressedInInput && this.hide();\n }\n event.preventDefault();\n }\n onEscapeKey(event) {\n this.overlayVisible && this.hide(true);\n event.preventDefault();\n }\n onTabKey(event, pressedInInputText = false) {\n if (!pressedInInputText) {\n if (this.overlayVisible && this.hasFocusableElements()) {\n DomHandler.focus(event.shiftKey ? this.lastHiddenFocusableElementOnOverlay.nativeElement : this.firstHiddenFocusableElementOnOverlay.nativeElement);\n event.preventDefault();\n }\n else {\n if (this.focusedOptionIndex() !== -1 && this.overlayVisible) {\n const option = this.visibleOptions()[this.focusedOptionIndex()];\n this.onOptionSelect(event, option);\n }\n this.overlayVisible && this.hide(this.filter);\n }\n }\n event.stopPropagation();\n }\n onFirstHiddenFocus(event) {\n const focusableEl = event.relatedTarget === this.focusInputViewChild?.nativeElement ? DomHandler.getFirstFocusableElement(this.overlayViewChild.el?.nativeElement, ':not(.p-hidden-focusable)') : this.focusInputViewChild?.nativeElement;\n DomHandler.focus(focusableEl);\n }\n onLastHiddenFocus(event) {\n const focusableEl = event.relatedTarget === this.focusInputViewChild?.nativeElement\n ? DomHandler.getLastFocusableElement(this.overlayViewChild?.overlayViewChild?.nativeElement, ':not([data-p-hidden-focusable=\"true\"])')\n : this.focusInputViewChild?.nativeElement;\n DomHandler.focus(focusableEl);\n }\n hasFocusableElements() {\n return DomHandler.getFocusableElements(this.overlayViewChild.overlayViewChild.nativeElement, ':not([data-p-hidden-focusable=\"true\"]):not([class=\"p-dropdown-items-wrapper\"])').length > 0;\n }\n onBackspaceKey(event, pressedInInputText = false) {\n if (pressedInInputText) {\n !this.overlayVisible && this.show();\n }\n }\n searchFields() {\n return this.filterBy?.split(',') || this.filterFields || [this.optionLabel];\n }\n searchOptions(event, char) {\n this.searchValue = (this.searchValue || '') + char;\n let optionIndex = -1;\n let matched = false;\n if (this.focusedOptionIndex() !== -1) {\n optionIndex = this.visibleOptions()\n .slice(this.focusedOptionIndex())\n .findIndex((option) => this.isOptionMatched(option));\n optionIndex =\n optionIndex === -1\n ? this.visibleOptions()\n .slice(0, this.focusedOptionIndex())\n .findIndex((option) => this.isOptionMatched(option))\n : optionIndex + this.focusedOptionIndex();\n }\n else {\n optionIndex = this.visibleOptions().findIndex((option) => this.isOptionMatched(option));\n }\n if (optionIndex !== -1) {\n matched = true;\n }\n if (optionIndex === -1 && this.focusedOptionIndex() === -1) {\n optionIndex = this.findFirstFocusedOptionIndex();\n }\n if (optionIndex !== -1) {\n this.changeFocusedOptionIndex(event, optionIndex);\n }\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n this.searchTimeout = setTimeout(() => {\n this.searchValue = '';\n this.searchTimeout = null;\n }, 500);\n return matched;\n }\n isOptionMatched(option) {\n return this.isValidOption(option) && this.getOptionLabel(option).toString().toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale));\n }\n onFilterInputChange(event) {\n let value = event.target.value;\n this._filterValue.set(value);\n this.focusedOptionIndex.set(-1);\n this.onFilter.emit({ originalEvent: event, filter: this._filterValue() });\n !this.virtualScrollerDisabled && this.scroller.scrollToIndex(0);\n setTimeout(() => {\n this.overlayViewChild.alignOverlay();\n });\n this.cd.markForCheck();\n }\n applyFocus() {\n if (this.editable)\n DomHandler.findSingle(this.el.nativeElement, '.p-dropdown-label.p-inputtext').focus();\n else\n DomHandler.focus(this.focusInputViewChild?.nativeElement);\n }\n /**\n * Applies focus.\n * @group Method\n */\n focus() {\n this.applyFocus();\n }\n /**\n * Clears the model.\n * @group Method\n */\n clear(event) {\n this.updateModel(null, event);\n this.clearEditableLabel();\n this.onModelTouched();\n this.onChange.emit({ originalEvent: event, value: this.value });\n this.onClear.emit(event);\n this.resetFilter();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: Dropdown, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i3.FilterService }, { token: i3.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"16.1.0\", version: \"18.0.1\", type: Dropdown, selector: \"p-dropdown\", inputs: { id: \"id\", scrollHeight: \"scrollHeight\", filter: [\"filter\", \"filter\", booleanAttribute], name: \"name\", style: \"style\", panelStyle: \"panelStyle\", styleClass: \"styleClass\", panelStyleClass: \"panelStyleClass\", readonly: [\"readonly\", \"readonly\", booleanAttribute], required: [\"required\", \"required\", booleanAttribute], editable: [\"editable\", \"editable\", booleanAttribute], appendTo: \"appendTo\", tabindex: [\"tabindex\", \"tabindex\", numberAttribute], placeholder: \"placeholder\", loadingIcon: \"loadingIcon\", filterPlaceholder: \"filterPlaceholder\", filterLocale: \"filterLocale\", variant: \"variant\", inputId: \"inputId\", dataKey: \"dataKey\", filterBy: \"filterBy\", filterFields: \"filterFields\", autofocus: [\"autofocus\", \"autofocus\", booleanAttribute], resetFilterOnHide: [\"resetFilterOnHide\", \"resetFilterOnHide\", booleanAttribute], checkmark: [\"checkmark\", \"checkmark\", booleanAttribute], dropdownIcon: \"dropdownIcon\", loading: [\"loading\", \"loading\", booleanAttribute], optionLabel: \"optionLabel\", optionValue: \"optionValue\", optionDisabled: \"optionDisabled\", optionGroupLabel: \"optionGroupLabel\", optionGroupChildren: \"optionGroupChildren\", autoDisplayFirst: [\"autoDisplayFirst\", \"autoDisplayFirst\", booleanAttribute], group: [\"group\", \"group\", booleanAttribute], showClear: [\"showClear\", \"showClear\", booleanAttribute], emptyFilterMessage: \"emptyFilterMessage\", emptyMessage: \"emptyMessage\", lazy: [\"lazy\", \"lazy\", booleanAttribute], virtualScroll: [\"virtualScroll\", \"virtualScroll\", booleanAttribute], virtualScrollItemSize: [\"virtualScrollItemSize\", \"virtualScrollItemSize\", numberAttribute], virtualScrollOptions: \"virtualScrollOptions\", overlayOptions: \"overlayOptions\", ariaFilterLabel: \"ariaFilterLabel\", ariaLabel: \"ariaLabel\", ariaLabelledBy: \"ariaLabelledBy\", filterMatchMode: \"filterMatchMode\", maxlength: [\"maxlength\", \"maxlength\", numberAttribute], tooltip: \"tooltip\", tooltipPosition: \"tooltipPosition\", tooltipPositionStyle: \"tooltipPositionStyle\", tooltipStyleClass: \"tooltipStyleClass\", focusOnHover: [\"focusOnHover\", \"focusOnHover\", booleanAttribute], selectOnFocus: [\"selectOnFocus\", \"selectOnFocus\", booleanAttribute], autoOptionFocus: [\"autoOptionFocus\", \"autoOptionFocus\", booleanAttribute], autofocusFilter: [\"autofocusFilter\", \"autofocusFilter\", booleanAttribute], autoShowPanelOnPrintableCharacterKeyDown: [\"autoShowPanelOnPrintableCharacterKeyDown\", \"autoShowPanelOnPrintableCharacterKeyDown\", booleanAttribute], disabled: \"disabled\", itemSize: \"itemSize\", autoZIndex: \"autoZIndex\", baseZIndex: \"baseZIndex\", showTransitionOptions: \"showTransitionOptions\", hideTransitionOptions: \"hideTransitionOptions\", filterValue: \"filterValue\", options: \"options\" }, outputs: { onChange: \"onChange\", onFilter: \"onFilter\", onFocus: \"onFocus\", onBlur: \"onBlur\", onClick: \"onClick\", onShow: \"onShow\", onHide: \"onHide\", onClear: \"onClear\", onLazyLoad: \"onLazyLoad\" }, host: { properties: { \"class.p-inputwrapper-filled\": \"filled()\", \"class.p-inputwrapper-focus\": \"focused || overlayVisible\" }, classAttribute: \"p-element p-inputwrapper\" }, providers: [DROPDOWN_VALUE_ACCESSOR], queries: [{ propertyName: \"templates\", predicate: PrimeTemplate }], viewQueries: [{ propertyName: \"containerViewChild\", first: true, predicate: [\"container\"], descendants: true }, { propertyName: \"filterViewChild\", first: true, predicate: [\"filter\"], descendants: true }, { propertyName: \"focusInputViewChild\", first: true, predicate: [\"focusInput\"], descendants: true }, { propertyName: \"editableInputViewChild\", first: true, predicate: [\"editableInput\"], descendants: true }, { propertyName: \"itemsViewChild\", first: true, predicate: [\"items\"], descendants: true }, { propertyName: \"scroller\", first: true, predicate: [\"scroller\"], descendants: true }, { propertyName: \"overlayViewChild\", first: true, predicate: [\"overlay\"], descendants: true }, { propertyName: \"firstHiddenFocusableElementOnOverlay\", first: true, predicate: [\"firstHiddenFocusableEl\"], descendants: true }, { propertyName: \"lastHiddenFocusableElementOnOverlay\", first: true, predicate: [\"lastHiddenFocusableEl\"], descendants: true }], ngImport: i0, template: `\n
\n \n {{ label() === 'p-emptylabel' ? ' ' : label() }}\n \n \n {{ label() === 'p-emptylabel' ? ' ' : label() }}\n \n \n \n \n \n \n \n \n \n\n
\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n
\n\n \n \n
\n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n
    \n \n \n
  • \n {{ getOptionGroupLabel(option.optionGroup) }}\n \n
  • \n
    \n \n \n \n
    \n
  • \n \n {{ emptyFilterMessageLabel }}\n \n \n
  • \n
  • \n \n {{ emptyMessageLabel }}\n \n \n
  • \n
\n
\n
\n \n \n
\n \n \n \n `, isInline: true, styles: [\"@layer primeng{.p-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;user-select:none}.p-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.p-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.p-dropdown-label-empty{overflow:hidden;opacity:0}input.p-dropdown-label{cursor:default}.p-dropdown .p-dropdown-panel{min-width:100%}.p-dropdown-items-wrapper{overflow:auto}.p-dropdown-item{cursor:pointer;font-weight:400;white-space:nowrap;position:relative;overflow:hidden}.p-dropdown-item-group{cursor:auto}.p-dropdown-items{margin:0;padding:0;list-style-type:none}.p-dropdown-filter{width:100%}.p-dropdown-filter-container{position:relative}.p-dropdown-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-fluid .p-dropdown{display:flex}.p-fluid .p-dropdown .p-dropdown-label{width:1%}.p-float-label .p-dropdown .p-placeholder{opacity:0}}\\n\"], dependencies: [{ kind: \"directive\", type: i0.forwardRef(() => i1.NgClass), selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgForOf), selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgIf), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgTemplateOutlet), selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgStyle), selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: i0.forwardRef(() => i4.Overlay), selector: \"p-overlay\", inputs: [\"visible\", \"mode\", \"style\", \"styleClass\", \"contentStyle\", \"contentStyleClass\", \"target\", \"appendTo\", \"autoZIndex\", \"baseZIndex\", \"showTransitionOptions\", \"hideTransitionOptions\", \"listener\", \"responsive\", \"options\"], outputs: [\"visibleChange\", \"onBeforeShow\", \"onShow\", \"onBeforeHide\", \"onHide\", \"onAnimationStart\", \"onAnimationDone\"] }, { kind: \"directive\", type: i0.forwardRef(() => i3.PrimeTemplate), selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"directive\", type: i0.forwardRef(() => i5.Tooltip), selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"appendTo\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\"] }, { kind: \"component\", type: i0.forwardRef(() => i6.Scroller), selector: \"p-scroller\", inputs: [\"id\", \"style\", \"styleClass\", \"tabindex\", \"items\", \"itemSize\", \"scrollHeight\", \"scrollWidth\", \"orientation\", \"step\", \"delay\", \"resizeDelay\", \"appendOnly\", \"inline\", \"lazy\", \"disabled\", \"loaderDisabled\", \"columns\", \"showSpacer\", \"showLoader\", \"numToleratedItems\", \"loading\", \"autoSize\", \"trackBy\", \"options\"], outputs: [\"onLazyLoad\", \"onScroll\", \"onScrollIndexChange\"] }, { kind: \"directive\", type: i0.forwardRef(() => i7.AutoFocus), selector: \"[pAutoFocus]\", inputs: [\"autofocus\"] }, { kind: \"component\", type: i0.forwardRef(() => TimesIcon), selector: \"TimesIcon\" }, { kind: \"component\", type: i0.forwardRef(() => ChevronDownIcon), selector: \"ChevronDownIcon\" }, { kind: \"component\", type: i0.forwardRef(() => SearchIcon), selector: \"SearchIcon\" }, { kind: \"component\", type: i0.forwardRef(() => DropdownItem), selector: \"p-dropdownItem\", inputs: [\"id\", \"option\", \"selected\", \"focused\", \"label\", \"disabled\", \"visible\", \"itemSize\", \"ariaPosInset\", \"ariaSetSize\", \"template\", \"checkmark\"], outputs: [\"onClick\", \"onMouseEnter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: Dropdown, decorators: [{\n type: Component,\n args: [{ selector: 'p-dropdown', template: `\n
\n \n {{ label() === 'p-emptylabel' ? ' ' : label() }}\n \n \n {{ label() === 'p-emptylabel' ? ' ' : label() }}\n \n \n \n \n \n \n \n \n \n\n
\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n
\n\n \n \n
\n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n
    \n \n \n
  • \n {{ getOptionGroupLabel(option.optionGroup) }}\n \n
  • \n
    \n \n \n \n
    \n
  • \n \n {{ emptyFilterMessageLabel }}\n \n \n
  • \n
  • \n \n {{ emptyMessageLabel }}\n \n \n
  • \n
\n
\n
\n \n \n
\n \n \n \n `, host: {\n class: 'p-element p-inputwrapper',\n '[class.p-inputwrapper-filled]': 'filled()',\n '[class.p-inputwrapper-focus]': 'focused || overlayVisible'\n }, providers: [DROPDOWN_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [\"@layer primeng{.p-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;user-select:none}.p-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.p-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.p-dropdown-label-empty{overflow:hidden;opacity:0}input.p-dropdown-label{cursor:default}.p-dropdown .p-dropdown-panel{min-width:100%}.p-dropdown-items-wrapper{overflow:auto}.p-dropdown-item{cursor:pointer;font-weight:400;white-space:nowrap;position:relative;overflow:hidden}.p-dropdown-item-group{cursor:auto}.p-dropdown-items{margin:0;padding:0;list-style-type:none}.p-dropdown-filter{width:100%}.p-dropdown-filter-container{position:relative}.p-dropdown-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-fluid .p-dropdown{display:flex}.p-fluid .p-dropdown .p-dropdown-label{width:1%}.p-float-label .p-dropdown .p-placeholder{opacity:0}}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i3.FilterService }, { type: i3.PrimeNGConfig }], propDecorators: { id: [{\n type: Input\n }], scrollHeight: [{\n type: Input\n }], filter: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], name: [{\n type: Input\n }], style: [{\n type: Input\n }], panelStyle: [{\n type: Input\n }], styleClass: [{\n type: Input\n }], panelStyleClass: [{\n type: Input\n }], readonly: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], required: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], editable: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], appendTo: [{\n type: Input\n }], tabindex: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], placeholder: [{\n type: Input\n }], loadingIcon: [{\n type: Input\n }], filterPlaceholder: [{\n type: Input\n }], filterLocale: [{\n type: Input\n }], variant: [{\n type: Input\n }], inputId: [{\n type: Input\n }], dataKey: [{\n type: Input\n }], filterBy: [{\n type: Input\n }], filterFields: [{\n type: Input\n }], autofocus: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], resetFilterOnHide: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], checkmark: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], dropdownIcon: [{\n type: Input\n }], loading: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], optionLabel: [{\n type: Input\n }], optionValue: [{\n type: Input\n }], optionDisabled: [{\n type: Input\n }], optionGroupLabel: [{\n type: Input\n }], optionGroupChildren: [{\n type: Input\n }], autoDisplayFirst: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], group: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], showClear: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], emptyFilterMessage: [{\n type: Input\n }], emptyMessage: [{\n type: Input\n }], lazy: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], virtualScroll: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], virtualScrollItemSize: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], virtualScrollOptions: [{\n type: Input\n }], overlayOptions: [{\n type: Input\n }], ariaFilterLabel: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], filterMatchMode: [{\n type: Input\n }], maxlength: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], tooltip: [{\n type: Input\n }], tooltipPosition: [{\n type: Input\n }], tooltipPositionStyle: [{\n type: Input\n }], tooltipStyleClass: [{\n type: Input\n }], focusOnHover: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], selectOnFocus: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], autoOptionFocus: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], autofocusFilter: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], autoShowPanelOnPrintableCharacterKeyDown: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], disabled: [{\n type: Input\n }], itemSize: [{\n type: Input\n }], autoZIndex: [{\n type: Input\n }], baseZIndex: [{\n type: Input\n }], showTransitionOptions: [{\n type: Input\n }], hideTransitionOptions: [{\n type: Input\n }], filterValue: [{\n type: Input\n }], options: [{\n type: Input\n }], onChange: [{\n type: Output\n }], onFilter: [{\n type: Output\n }], onFocus: [{\n type: Output\n }], onBlur: [{\n type: Output\n }], onClick: [{\n type: Output\n }], onShow: [{\n type: Output\n }], onHide: [{\n type: Output\n }], onClear: [{\n type: Output\n }], onLazyLoad: [{\n type: Output\n }], containerViewChild: [{\n type: ViewChild,\n args: ['container']\n }], filterViewChild: [{\n type: ViewChild,\n args: ['filter']\n }], focusInputViewChild: [{\n type: ViewChild,\n args: ['focusInput']\n }], editableInputViewChild: [{\n type: ViewChild,\n args: ['editableInput']\n }], itemsViewChild: [{\n type: ViewChild,\n args: ['items']\n }], scroller: [{\n type: ViewChild,\n args: ['scroller']\n }], overlayViewChild: [{\n type: ViewChild,\n args: ['overlay']\n }], firstHiddenFocusableElementOnOverlay: [{\n type: ViewChild,\n args: ['firstHiddenFocusableEl']\n }], lastHiddenFocusableElementOnOverlay: [{\n type: ViewChild,\n args: ['lastHiddenFocusableEl']\n }], templates: [{\n type: ContentChildren,\n args: [PrimeTemplate]\n }] } });\nclass DropdownModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"18.0.1\", ngImport: i0, type: DropdownModule, declarations: [Dropdown, DropdownItem], imports: [CommonModule, OverlayModule, SharedModule, TooltipModule, RippleModule, ScrollerModule, AutoFocusModule, TimesIcon, ChevronDownIcon, SearchIcon, BlankIcon, CheckIcon], exports: [Dropdown, OverlayModule, SharedModule, ScrollerModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: DropdownModule, imports: [CommonModule, OverlayModule, SharedModule, TooltipModule, RippleModule, ScrollerModule, AutoFocusModule, TimesIcon, ChevronDownIcon, SearchIcon, BlankIcon, CheckIcon, OverlayModule, SharedModule, ScrollerModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: DropdownModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, OverlayModule, SharedModule, TooltipModule, RippleModule, ScrollerModule, AutoFocusModule, TimesIcon, ChevronDownIcon, SearchIcon, BlankIcon, CheckIcon],\n exports: [Dropdown, OverlayModule, SharedModule, ScrollerModule],\n declarations: [Dropdown, DropdownItem]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DROPDOWN_VALUE_ACCESSOR, Dropdown, DropdownItem, DropdownModule };\n","export const callingCodeToCountryCode = {\r\n \"93\": \"af\",\r\n \"355\": \"al\",\r\n \"213\": \"dz\",\r\n \"1\": [\"sx\", \"vc\", \"as\", \"ai\", \"ag\", \"bs\", \"bb\", \"bm\", \"ca\", \"dm\", \"do\", \"gd\", \"gu\", \"jm\", \"kn\", \"lc\", \"ms\", \"mp\", \"pr\", \"sx\", \"tt\", \"tc\", \"vi\", \"us\"],\r\n \"376\": \"ad\",\r\n \"244\": \"ao\",\r\n \"672\": [\"aq\", \"nf\"],\r\n \"54\": \"ar\",\r\n \"374\": \"am\",\r\n \"297\": \"aw\",\r\n \"61\": [\"au\", \"cx\", \"cc\"],\r\n \"43\": \"at\",\r\n \"994\": \"az\",\r\n \"973\": \"bh\",\r\n \"880\": \"bd\",\r\n \"375\": \"by\",\r\n \"32\": \"be\",\r\n \"501\": \"bz\",\r\n \"229\": \"bj\",\r\n \"975\": \"bt\",\r\n \"591\": \"bo\",\r\n \"387\": \"ba\",\r\n \"267\": \"bw\",\r\n \"55\": \"br\",\r\n \"246\": \"io\",\r\n \"673\": \"bn\",\r\n \"359\": \"bg\",\r\n \"226\": \"bf\",\r\n \"257\": \"bi\",\r\n \"855\": \"kh\",\r\n \"237\": \"cm\",\r\n \"238\": \"cv\",\r\n \"236\": \"cf\",\r\n \"235\": \"td\",\r\n \"56\": \"cl\",\r\n \"86\": \"cn\",\r\n \"57\": \"co\",\r\n \"269\": \"km\",\r\n \"682\": \"ck\",\r\n \"506\": \"cr\",\r\n \"385\": \"hr\",\r\n \"53\": \"cu\",\r\n \"599\": \"cw\",\r\n \"357\": \"cy\",\r\n \"420\": \"cz\",\r\n \"243\": \"cd\",\r\n \"45\": \"dk\",\r\n \"253\": \"dj\",\r\n \"593\": \"ec\",\r\n \"20\": \"eg\",\r\n \"503\": \"sv\",\r\n \"240\": \"gq\",\r\n \"291\": \"er\",\r\n \"372\": \"ee\",\r\n \"251\": \"et\",\r\n \"500\": \"fk\",\r\n \"298\": \"fo\",\r\n \"679\": \"fj\",\r\n \"358\": \"fi\",\r\n \"33\": \"fr\",\r\n \"594\": \"gf\",\r\n \"689\": \"pf\",\r\n \"241\": \"ga\",\r\n \"220\": \"gm\",\r\n \"995\": \"ge\",\r\n \"49\": \"de\",\r\n \"233\": \"gh\",\r\n \"350\": \"gi\",\r\n \"30\": \"gr\",\r\n \"299\": \"gl\",\r\n \"502\": \"gt\",\r\n \"224\": \"gn\",\r\n \"245\": \"gw\",\r\n \"592\": \"gy\",\r\n \"509\": \"ht\",\r\n \"504\": \"hn\",\r\n \"852\": \"hk\",\r\n \"36\": \"hu\",\r\n \"354\": \"is\",\r\n \"91\": \"in\",\r\n \"62\": \"id\",\r\n \"98\": \"ir\",\r\n \"964\": \"iq\",\r\n \"353\": \"ie\",\r\n \"44\": [\"gg\", \"im\", \"je\", \"gb\"],\r\n \"972\": \"il\",\r\n \"39\": \"it\",\r\n \"81\": \"jp\",\r\n \"962\": \"jo\",\r\n \"7\": [\"kz\", \"ru\"],\r\n \"254\": \"ke\",\r\n \"686\": \"ki\",\r\n \"383\": \"xk\",\r\n \"965\": \"kw\",\r\n \"996\": \"kg\",\r\n \"856\": \"la\",\r\n \"371\": \"lv\",\r\n \"961\": \"lb\",\r\n \"266\": \"ls\",\r\n \"231\": \"lr\",\r\n \"218\": \"ly\",\r\n \"423\": \"li\",\r\n \"370\": \"lt\",\r\n \"352\": \"lu\",\r\n \"853\": \"mo\",\r\n \"389\": \"mk\",\r\n \"261\": \"mg\",\r\n \"265\": \"mw\",\r\n \"60\": \"my\",\r\n \"960\": \"mv\",\r\n \"223\": \"ml\",\r\n \"356\": \"mt\",\r\n \"692\": \"mh\",\r\n \"596\": \"mq\",\r\n \"222\": \"mr\",\r\n \"230\": \"mu\",\r\n \"262\": [\"yt\", \"re\"],\r\n \"52\": \"mx\",\r\n \"691\": \"fm\",\r\n \"373\": \"md\",\r\n \"377\": \"mc\",\r\n \"976\": \"mn\",\r\n \"382\": \"me\",\r\n \"212\": [\"ma\", \"eh\"],\r\n \"258\": \"mz\",\r\n \"95\": \"mm\",\r\n \"264\": \"na\",\r\n \"674\": \"nr\",\r\n \"977\": \"np\",\r\n \"31\": \"nl\",\r\n \"687\": \"nc\",\r\n \"64\": [\"pn\", \"nz\"],\r\n \"505\": \"ni\",\r\n \"227\": \"ne\",\r\n \"234\": \"ng\",\r\n \"683\": \"nu\",\r\n \"850\": \"kp\",\r\n \"47\": [\"sj\", \"no\"],\r\n \"968\": \"om\",\r\n \"92\": \"pk\",\r\n \"680\": \"pw\",\r\n \"970\": \"ps\",\r\n \"507\": \"pa\",\r\n \"675\": \"pg\",\r\n \"595\": \"py\",\r\n \"51\": \"pe\",\r\n \"63\": \"ph\",\r\n \"48\": \"pl\",\r\n \"351\": \"pt\",\r\n \"974\": \"qa\",\r\n \"242\": \"cg\",\r\n \"40\": \"ro\",\r\n \"250\": \"rw\",\r\n \"590\": [\"gp\", \"bl\", \"mf\"],\r\n \"290\": \"sh\",\r\n \"508\": \"pm\",\r\n \"685\": \"ws\",\r\n \"378\": \"sm\",\r\n \"239\": \"st\",\r\n \"966\": \"sa\",\r\n \"221\": \"sn\",\r\n \"381\": \"rs\",\r\n \"248\": \"sc\",\r\n \"232\": \"sl\",\r\n \"65\": \"sg\",\r\n \"421\": \"sk\",\r\n \"386\": \"si\",\r\n \"677\": \"sb\",\r\n \"252\": \"so\",\r\n \"27\": \"za\",\r\n \"82\": \"kr\",\r\n \"211\": \"ss\",\r\n \"34\": \"es\",\r\n \"94\": \"lk\",\r\n \"249\": \"sd\",\r\n \"597\": \"sr\",\r\n \"268\": \"sz\",\r\n \"46\": \"se\",\r\n \"41\": \"ch\",\r\n \"963\": \"sy\",\r\n \"886\": \"tw\",\r\n \"992\": \"tj\",\r\n \"255\": \"tz\",\r\n \"66\": \"th\",\r\n \"228\": \"tg\",\r\n \"690\": \"tk\",\r\n \"676\": \"to\",\r\n \"216\": \"tn\",\r\n \"90\": \"tr\",\r\n \"993\": \"tm\",\r\n \"688\": \"tv\",\r\n \"256\": \"ug\",\r\n \"380\": \"ua\",\r\n \"971\": \"ae\",\r\n \"598\": \"uy\",\r\n \"998\": \"uz\",\r\n \"678\": \"vu\",\r\n \"379\": \"va\",\r\n \"58\": \"ve\",\r\n \"84\": \"vn\",\r\n \"681\": \"wf\",\r\n \"967\": \"ye\",\r\n \"260\": \"zm\",\r\n \"263\": \"zw\",\r\n \"225\": \"ci\",\r\n \"247\": \"gb\",\r\n \"670\": \"tl\"\r\n};\r\n","export const countryCodeToDeCountryName = {\r\n AC: \"Ascension\",\r\n AF: \"Afghanistan\",\r\n AX: \"Åland\",\r\n AL: \"Albanien\",\r\n DZ: \"Algerien\",\r\n AS: \"Amerikanisch-Samoa\",\r\n AD: \"Andorra\",\r\n AO: \"Angola\",\r\n AI: \"Anguilla\",\r\n AQ: \"Antarktis\",\r\n AG: \"Antigua und Barbuda\",\r\n AR: \"Argentinien\",\r\n AM: \"Armenien\",\r\n AW: \"Aruba\",\r\n AU: \"Australien\",\r\n AT: \"Österreich\",\r\n AZ: \"Aserbaidschan\",\r\n BS: \"Bahamas\",\r\n BH: \"Bahrain\",\r\n BD: \"Bangladesch\",\r\n BB: \"Barbados\",\r\n BY: \"Belarus\",\r\n BE: \"Belgien\",\r\n BZ: \"Belize\",\r\n BJ: \"Benin\",\r\n BM: \"Bermuda\",\r\n BT: \"Bhutan\",\r\n BO: \"Bolivien\",\r\n BA: \"Bosnien und Herzegowina\",\r\n BW: \"Botswana\",\r\n BV: \"Bouvetinsel\",\r\n BR: \"Brasilien\",\r\n IO: \"Britisches Territorium im Indischen Ozean\",\r\n BN: \"Brunei\",\r\n BG: \"Bulgarien\",\r\n BF: \"Burkina Faso\",\r\n BI: \"Burundi\",\r\n KH: \"Kambodscha\",\r\n CM: \"Kamerun\",\r\n CA: \"Kanada\",\r\n CV: \"Kap Verde\",\r\n KY: \"Kaimaninseln\",\r\n CF: \"Zentralafrikanische Republik\",\r\n TD: \"Tschad\",\r\n CL: \"Chile\",\r\n CN: \"China\",\r\n CX: \"Weihnachtsinsel\",\r\n CC: \"Kokosinseln\",\r\n CO: \"Kolumbien\",\r\n KM: \"Komoren\",\r\n CG: \"Kongo\",\r\n CD: \"Demokratische Republik Kongo\",\r\n CK: \"Cookinseln\",\r\n CR: \"Costa Rica\",\r\n CI: \"Elfenbeinküste\",\r\n HR: \"Kroatien\",\r\n CU: \"Kuba\",\r\n CY: \"Zypern\",\r\n CZ: \"Tschechien\",\r\n DK: \"Dänemark\",\r\n DJ: \"Dschibuti\",\r\n DM: \"Dominica\",\r\n DO: \"Dominikanische Republik\",\r\n EC: \"Ecuador\",\r\n EG: \"Ägypten\",\r\n SV: \"El Salvador\",\r\n GQ: \"Äquatorialguinea\",\r\n ER: \"Eritrea\",\r\n EE: \"Estland\",\r\n ET: \"Äthiopien\",\r\n FK: \"Falklandinseln\",\r\n FO: \"Färöer\",\r\n FJ: \"Fidschi\",\r\n FI: \"Finnland\",\r\n FR: \"Frankreich\",\r\n GF: \"Französisch-Guayana\",\r\n PF: \"Französisch-Polynesien\",\r\n TF: \"Französische Süd- und Antarktisgebiete\",\r\n GA: \"Gabun\",\r\n GM: \"Gambia\",\r\n GE: \"Georgien\",\r\n DE: \"Deutschland\",\r\n GH: \"Ghana\",\r\n GI: \"Gibraltar\",\r\n GR: \"Griechenland\",\r\n GL: \"Grönland\",\r\n GD: \"Grenada\",\r\n GP: \"Guadeloupe\",\r\n GU: \"Guam\",\r\n GT: \"Guatemala\",\r\n GG: \"Guernsey\",\r\n GN: \"Guinea\",\r\n GW: \"Guinea-Bissau\",\r\n GY: \"Guyana\",\r\n HT: \"Haiti\",\r\n HM: \"Heard und McDonaldinseln\",\r\n VA: \"Heiliger Stuhl (Vatikanstadt)\",\r\n HN: \"Honduras\",\r\n HK: \"Hongkong\",\r\n HU: \"Ungarn\",\r\n IS: \"Island\",\r\n IN: \"Indien\",\r\n ID: \"Indonesien\",\r\n IR: \"Iran\",\r\n IQ: \"Irak\",\r\n IE: \"Irland\",\r\n IM: \"Isle of Man\",\r\n IL: \"Israel\",\r\n IT: \"Italien\",\r\n JM: \"Jamaika\",\r\n JP: \"Japan\",\r\n JE: \"Jersey\",\r\n JO: \"Jordanien\",\r\n KZ: \"Kasachstan\",\r\n KE: \"Kenia\",\r\n KI: \"Kiribati\",\r\n KR: \"Südkorea\",\r\n KP: \"Nordkorea\",\r\n KW: \"Kuwait\",\r\n KG: \"Kirgisistan\",\r\n LA: \"Laos\",\r\n LV: \"Lettland\",\r\n LB: \"Libanon\",\r\n LS: \"Lesotho\",\r\n LR: \"Liberia\",\r\n LY: \"Libyen\",\r\n LI: \"Liechtenstein\",\r\n LT: \"Litauen\",\r\n LU: \"Luxemburg\",\r\n MO: \"Macau\",\r\n MK: \"Nordmazedonien\",\r\n MG: \"Madagaskar\",\r\n MW: \"Malawi\",\r\n MY: \"Malaysia\",\r\n MV: \"Malediven\",\r\n ML: \"Mali\",\r\n MT: \"Malta\",\r\n MH: \"Marshallinseln\",\r\n MQ: \"Martinique\",\r\n MR: \"Mauretanien\",\r\n MU: \"Mauritius\",\r\n YT: \"Mayotte\",\r\n MX: \"Mexiko\",\r\n FM: \"Mikronesien\",\r\n MD: \"Moldawien\",\r\n MC: \"Monaco\",\r\n MN: \"Mongolei\",\r\n ME: \"Montenegro\",\r\n MS: \"Montserrat\",\r\n MA: \"Marokko\",\r\n MZ: \"Mosambik\",\r\n MM: \"Myanmar\",\r\n NA: \"Namibia\",\r\n NR: \"Nauru\",\r\n NP: \"Nepal\",\r\n NL: \"Niederlande\",\r\n AN: \"Niederländische Antillen\",\r\n NC: \"Neukaledonien\",\r\n NZ: \"Neuseeland\",\r\n NI: \"Nicaragua\",\r\n NE: \"Niger\",\r\n NG: \"Nigeria\",\r\n NU: \"Niue\",\r\n NF: \"Norfolkinsel\",\r\n MP: \"Nördliche Marianen\",\r\n NO: \"Norwegen\",\r\n OM: \"Oman\",\r\n PK: \"Pakistan\",\r\n PW: \"Palau\",\r\n PS: \"Palästinensische Autonomiegebiete\",\r\n PA: \"Panama\",\r\n PG: \"Papua-Neuguinea\",\r\n PY: \"Paraguay\",\r\n PE: \"Peru\",\r\n PH: \"Philippinen\",\r\n PN: \"Pitcairninseln\",\r\n PL: \"Polen\",\r\n PT: \"Portugal\",\r\n PR: \"Puerto Rico\",\r\n QA: \"Katar\",\r\n RE: \"Réunion\",\r\n RO: \"Rumänien\",\r\n RU: \"Russland\",\r\n RW: \"Ruanda\",\r\n BL: \"Saint-Barthélemy\",\r\n SH: \"St. Helena\",\r\n KN: \"St. Kitts und Nevis\",\r\n LC: \"St. Lucia\",\r\n MF: \"Saint-Martin\",\r\n PM: \"St. Pierre und Miquelon\",\r\n VC: \"St. Vincent und die Grenadinen\",\r\n WS: \"Samoa\",\r\n SM: \"San Marino\",\r\n ST: \"São Tomé und Príncipe\",\r\n SA: \"Saudi-Arabien\",\r\n SN: \"Senegal\",\r\n RS: \"Serbien\",\r\n SC: \"Seychellen\",\r\n SL: \"Sierra Leone\",\r\n SG: \"Singapur\",\r\n SK: \"Slowakei\",\r\n SI: \"Slowenien\",\r\n SB: \"Salomonen\",\r\n SO: \"Somalia\",\r\n ZA: \"Südafrika\",\r\n GS: \"Südgeorgien und die Südlichen Sandwichinseln\",\r\n ES: \"Spanien\",\r\n LK: \"Sri Lanka\",\r\n SD: \"Sudan\",\r\n SR: \"Suriname\",\r\n SJ: \"Svalbard und Jan Mayen\",\r\n SZ: \"Swasiland\",\r\n SE: \"Schweden\",\r\n CH: \"Schweiz\",\r\n SY: \"Syrien\",\r\n TW: \"Taiwan\",\r\n TJ: \"Tadschikistan\",\r\n TZ: \"Tansania\",\r\n TH: \"Thailand\",\r\n TL: \"Timor-Leste\",\r\n TG: \"Togo\",\r\n TK: \"Tokelau\",\r\n TO: \"Tonga\",\r\n TT: \"Trinidad und Tobago\",\r\n TA: \"Tristan da Cunha\",\r\n TN: \"Tunesien\",\r\n TR: \"Türkei\",\r\n TM: \"Turkmenistan\",\r\n TC: \"Turks- und Caicosinseln\",\r\n TV: \"Tuvalu\",\r\n UG: \"Uganda\",\r\n UA: \"Ukraine\",\r\n AE: \"Vereinigte Arabische Emirate\",\r\n GB: \"Vereinigtes Königreich\",\r\n US: \"Vereinigte Staaten\",\r\n UM: \"Amerikanische Überseeinseln\",\r\n UY: \"Uruguay\",\r\n UZ: \"Usbekistan\",\r\n VU: \"Vanuatu\",\r\n VE: \"Venezuela\",\r\n VN: \"Vietnam\",\r\n VG: \"Britische Jungferninseln\",\r\n VI: \"Amerikanische Jungferninseln\",\r\n WF: \"Wallis und Futuna\",\r\n EH: \"Westsahara\",\r\n YE: \"Jemen\",\r\n ZM: \"Sambia\",\r\n ZW: \"Simbabwe\",\r\n BQ: \"Bonaire, Sint Eustatius und Saba\",\r\n CW: \"Curaçao\",\r\n SS: \"Südsudan\",\r\n SX: \"Sint Maarten (niederländischer Teil)\",\r\n XK: \"Kosovo\"\r\n};\r\n","export const countryCodeToDkCountryName = {\r\n AC: \"Ascension Island\",\r\n AF: \"Afghanistan\",\r\n AX: \"Åland\",\r\n AL: \"Albanien\",\r\n DZ: \"Algeriet\",\r\n AS: \"Amerikansk Samoa\",\r\n AD: \"Andorra\",\r\n AO: \"Angola\",\r\n AI: \"Anguilla\",\r\n AQ: \"Antarktis\",\r\n AG: \"Antigua og Barbuda\",\r\n AR: \"Argentina\",\r\n AM: \"Armenien\",\r\n AW: \"Aruba\",\r\n AU: \"Australien\",\r\n AT: \"Østrig\",\r\n AZ: \"Aserbajdsjan\",\r\n BS: \"Bahamas\",\r\n BH: \"Bahrain\",\r\n BD: \"Bangladesh\",\r\n BB: \"Barbados\",\r\n BY: \"Hviderusland\",\r\n BE: \"Belgien\",\r\n BZ: \"Belize\",\r\n BJ: \"Benin\",\r\n BM: \"Bermuda\",\r\n BT: \"Bhutan\",\r\n BO: \"Bolivia\",\r\n BA: \"Bosnien-Hercegovina\",\r\n BW: \"Botswana\",\r\n BV: \"Bouvetøen\",\r\n BR: \"Brasilien\",\r\n IO: \"British Indian Ocean Territory\",\r\n BN: \"Brunei Darussalam\",\r\n BG: \"Bulgarien\",\r\n BF: \"Burkina Faso\",\r\n BI: \"Burundi\",\r\n KH: \"Cambodja\",\r\n CM: \"Cameroun\",\r\n CA: \"Canada\",\r\n CV: \"Kap Verde\",\r\n KY: \"Caymanøerne\",\r\n CF: \"Centralafrikanske Republik\",\r\n TD: \"Tchad\",\r\n CL: \"Chile\",\r\n CN: \"Kina\",\r\n CX: \"Christmas Island\",\r\n CC: \"Cocosøerne\",\r\n CO: \"Colombia\",\r\n KM: \"Comorerne\",\r\n CG: \"Congo\",\r\n CD: \"Congo, Den Demokratiske Republik\",\r\n CK: \"Cookøerne\",\r\n CR: \"Costa Rica\",\r\n CI: \"Elfenbenskysten\",\r\n HR: \"Kroatien\",\r\n CU: \"Cuba\",\r\n CY: \"Cypern\",\r\n CZ: \"Tjekkiet\",\r\n DK: \"Danmark\",\r\n DJ: \"Djibouti\",\r\n DM: \"Dominica\",\r\n DO: \"Dominikanske Republik\",\r\n EC: \"Ecuador\",\r\n EG: \"Egypten\",\r\n SV: \"El Salvador\",\r\n GQ: \"Ækvatorial Guinea\",\r\n ER: \"Eritrea\",\r\n EE: \"Estland\",\r\n ET: \"Etiopien\",\r\n FK: \"Falklandsøerne (Malvinas)\",\r\n FO: \"Færøerne\",\r\n FJ: \"Fiji\",\r\n FI: \"Finland\",\r\n FR: \"Frankrig\",\r\n GF: \"Fransk Guyana\",\r\n PF: \"Fransk Polynesien\",\r\n TF: \"Franske Sydterritorier\",\r\n GA: \"Gabon\",\r\n GM: \"Gambia\",\r\n GE: \"Georgien\",\r\n DE: \"Tyskland\",\r\n GH: \"Ghana\",\r\n GI: \"Gibraltar\",\r\n GR: \"Grækenland\",\r\n GL: \"Grønland\",\r\n GD: \"Grenada\",\r\n GP: \"Guadeloupe\",\r\n GU: \"Guam\",\r\n GT: \"Guatemala\",\r\n GG: \"Guernsey\",\r\n GN: \"Guinea\",\r\n GW: \"Guinea-Bissau\",\r\n GY: \"Guyana\",\r\n HT: \"Haiti\",\r\n HM: \"Heard- og McDonald-øerne\",\r\n VA: \"Vatikanstaten\",\r\n HN: \"Honduras\",\r\n HK: \"Hongkong\",\r\n HU: \"Ungarn\",\r\n IS: \"Island\",\r\n IN: \"Indien\",\r\n ID: \"Indonesien\",\r\n IR: \"Iran, Den Islamiske Republik\",\r\n IQ: \"Irak\",\r\n IE: \"Irland\",\r\n IM: \"Isle of Man\",\r\n IL: \"Israel\",\r\n IT: \"Italien\",\r\n JM: \"Jamaica\",\r\n JP: \"Japan\",\r\n JE: \"Jersey\",\r\n JO: \"Jordan\",\r\n KZ: \"Kasakhstan\",\r\n KE: \"Kenya\",\r\n KI: \"Kiribati\",\r\n KR: \"Korea\",\r\n KP: \"Nordkorea\",\r\n KW: \"Kuwait\",\r\n KG: \"Kirgisistan\",\r\n LA: \"Den Demokratiske Folkerepublik Laos\",\r\n LV: \"Lettland\",\r\n LB: \"Libanon\",\r\n LS: \"Lesotho\",\r\n LR: \"Liberia\",\r\n LY: \"Libyen\",\r\n LI: \"Liechtenstein\",\r\n LT: \"Litauen\",\r\n LU: \"Luxembourg\",\r\n MO: \"Macao\",\r\n MK: \"Makedonien\",\r\n MG: \"Madagaskar\",\r\n MW: \"Malawi\",\r\n MY: \"Malaysia\",\r\n MV: \"Maldiverne\",\r\n ML: \"Mali\",\r\n MT: \"Malta\",\r\n MH: \"Marshalløerne\",\r\n MQ: \"Martinique\",\r\n MR: \"Mauretanien\",\r\n MU: \"Mauritius\",\r\n YT: \"Mayotte\",\r\n MX: \"Mexico\",\r\n FM: \"Mikronesiens Forenede Stater\",\r\n MD: \"Moldova, Den Republikken\",\r\n MC: \"Monaco\",\r\n MN: \"Mongoliet\",\r\n ME: \"Montenegro\",\r\n MS: \"Montserrat\",\r\n MA: \"Marokko\",\r\n MZ: \"Mozambique\",\r\n MM: \"Myanmar\",\r\n NA: \"Namibia\",\r\n NR: \"Nauru\",\r\n NP: \"Nepal\",\r\n NL: \"Nederlandene\",\r\n AN: \"Nederlandske Antiller\",\r\n NC: \"Ny Kaledonien\",\r\n NZ: \"New Zealand\",\r\n NI: \"Nicaragua\",\r\n NE: \"Niger\",\r\n NG: \"Nigeria\",\r\n NU: \"Niue\",\r\n NF: \"Norfolk Island\",\r\n MP: \"Nordmarianerne\",\r\n NO: \"Norge\",\r\n OM: \"Oman\",\r\n PK: \"Pakistan\",\r\n PW: \"Palau\",\r\n PS: \"Palæstina, Stat\",\r\n PA: \"Panama\",\r\n PG: \"Papua Ny Guinea\",\r\n PY: \"Paraguay\",\r\n PE: \"Peru\",\r\n PH: \"Filippinerne\",\r\n PN: \"Pitcairn\",\r\n PL: \"Polen\",\r\n PT: \"Portugal\",\r\n PR: \"Puerto Rico\",\r\n QA: \"Qatar\",\r\n RE: \"Réunion\",\r\n RO: \"Rumænien\",\r\n RU: \"Rusland\",\r\n RW: \"Rwanda\",\r\n BL: \"Saint Barthelemy\",\r\n SH: \"Saint Helena\",\r\n KN: \"Saint Kitts og Nevis\",\r\n LC: \"Saint Lucia\",\r\n MF: \"Saint Martin\",\r\n PM: \"Saint Pierre og Miquelon\",\r\n VC: \"Saint Vincent og Grenadinerne\",\r\n WS: \"Samoa\",\r\n SM: \"San Marino\",\r\n ST: \"Sao Tome og Principe\",\r\n SA: \"Saudi-Arabien\",\r\n SN: \"Senegal\",\r\n RS: \"Serbien\",\r\n SC: \"Seychellerne\",\r\n SL: \"Sierra Leone\",\r\n SG: \"Singapore\",\r\n SK: \"Slovakiet\",\r\n SI: \"Slovenien\",\r\n SB: \"Salomonøerne\",\r\n SO: \"Somalia\",\r\n ZA: \"Sydafrika\",\r\n GS: \"South Georgia og De Sydlige Sandwichøer\",\r\n ES: \"Spanien\",\r\n LK: \"Sri Lanka\",\r\n SD: \"Sudan\",\r\n SR: \"Surinam\",\r\n SJ: \"Svalbard og Jan Mayen\",\r\n SZ: \"Swaziland\",\r\n SE: \"Sverige\",\r\n CH: \"Schweiz\",\r\n SY: \"Den Syriske Arabiske Republik\",\r\n TW: \"Taiwan\",\r\n TJ: \"Tadsjikistan\",\r\n TZ: \"Tanzania, Det Forenede Republik\",\r\n TH: \"Thailand\",\r\n TL: \"Timor-Leste\",\r\n TG: \"Togo\",\r\n TK: \"Tokelau\",\r\n TO: \"Tonga\",\r\n TT: \"Trinidad og Tobago\",\r\n TA: \"Tristan da Cunha\",\r\n TN: \"Tunesien\",\r\n TR: \"Tyrkiet\",\r\n TM: \"Turkmenistan\",\r\n TC: \"Turks- og Caicosøerne\",\r\n TV: \"Tuvalu\",\r\n UG: \"Uganda\",\r\n UA: \"Ukraine\",\r\n AE: \"De Forenede Arabiske Emirater\",\r\n GB: \"Storbritannien\",\r\n US: \"USA\",\r\n UM: \"USA's ydre småøer\",\r\n UY: \"Uruguay\",\r\n UZ: \"Usbekistan\",\r\n VU: \"Vanuatu\",\r\n VE: \"Venezuela\",\r\n VN: \"Vietnam\",\r\n VG: \"Britiske Jomfruøer\",\r\n VI: \"Amerikanske Jomfruøer\",\r\n WF: \"Wallis og Futuna\",\r\n EH: \"Vestlige Sahara\",\r\n YE: \"Yemen\",\r\n ZM: \"Zambia\",\r\n ZW: \"Zimbabwe\",\r\n BQ: \"Bonaire, Sint Eustatius og Saba\",\r\n CW: \"Curaçao\",\r\n SS: \"Sydsudan\",\r\n SX: \"Sint Maarten (hollandsk del)\",\r\n XK: \"Kosovo\"\r\n};\r\n","export const countryCodeToEnCountryName = {\r\n AC: \"Ascension Island\",\r\n AF: \"Afghanistan\",\r\n AX: \"Aland Islands\",\r\n AL: \"Albania\",\r\n DZ: \"Algeria\",\r\n AS: \"American Samoa\",\r\n AD: \"Andorra\",\r\n AO: \"Angola\",\r\n AI: \"Anguilla\",\r\n AQ: \"Antarctica\",\r\n AG: \"Antigua And Barbuda\",\r\n AR: \"Argentina\",\r\n AM: \"Armenia\",\r\n AW: \"Aruba\",\r\n AU: \"Australia\",\r\n AT: \"Austria\",\r\n AZ: \"Azerbaijan\",\r\n BS: \"Bahamas\",\r\n BH: \"Bahrain\",\r\n BD: \"Bangladesh\",\r\n BB: \"Barbados\",\r\n BY: \"Belarus\",\r\n BE: \"Belgium\",\r\n BZ: \"Belize\",\r\n BJ: \"Benin\",\r\n BM: \"Bermuda\",\r\n BT: \"Bhutan\",\r\n BO: \"Bolivia\",\r\n BA: \"Bosnia And Herzegovina\",\r\n BW: \"Botswana\",\r\n BV: \"Bouvet Island\",\r\n BR: \"Brazil\",\r\n IO: \"British Indian Ocean Territory\",\r\n BN: \"Brunei Darussalam\",\r\n BG: \"Bulgaria\",\r\n BF: \"Burkina Faso\",\r\n BI: \"Burundi\",\r\n KH: \"Cambodia\",\r\n CM: \"Cameroon\",\r\n CA: \"Canada\",\r\n CV: \"Cape Verde\",\r\n KY: \"Cayman Islands\",\r\n CF: \"Central African Republic\",\r\n TD: \"Chad\",\r\n CL: \"Chile\",\r\n CN: \"China\",\r\n CX: \"Christmas Island\",\r\n CC: \"Cocos (Keeling) Islands\",\r\n CO: \"Colombia\",\r\n KM: \"Comoros\",\r\n CG: \"Congo\",\r\n CD: \"Congo, Democratic Republic\",\r\n CK: \"Cook Islands\",\r\n CR: \"Costa Rica\",\r\n CI: 'Cote D\"Ivoire',\r\n HR: \"Croatia\",\r\n CU: \"Cuba\",\r\n CY: \"Cyprus\",\r\n CZ: \"Czech Republic\",\r\n DK: \"Denmark\",\r\n DJ: \"Djibouti\",\r\n DM: \"Dominica\",\r\n DO: \"Dominican Republic\",\r\n EC: \"Ecuador\",\r\n EG: \"Egypt\",\r\n SV: \"El Salvador\",\r\n GQ: \"Equatorial Guinea\",\r\n ER: \"Eritrea\",\r\n EE: \"Estonia\",\r\n ET: \"Ethiopia\",\r\n FK: \"Falkland Islands (Malvinas)\",\r\n FO: \"Faroe Islands\",\r\n FJ: \"Fiji\",\r\n FI: \"Finland\",\r\n FR: \"France\",\r\n GF: \"French Guiana\",\r\n PF: \"French Polynesia\",\r\n TF: \"French Southern Territories\",\r\n GA: \"Gabon\",\r\n GM: \"Gambia\",\r\n GE: \"Georgia\",\r\n DE: \"Germany\",\r\n GH: \"Ghana\",\r\n GI: \"Gibraltar\",\r\n GR: \"Greece\",\r\n GL: \"Greenland\",\r\n GD: \"Grenada\",\r\n GP: \"Guadeloupe\",\r\n GU: \"Guam\",\r\n GT: \"Guatemala\",\r\n GG: \"Guernsey\",\r\n GN: \"Guinea\",\r\n GW: \"Guinea-Bissau\",\r\n GY: \"Guyana\",\r\n HT: \"Haiti\",\r\n HM: \"Heard Island & Mcdonald Islands\",\r\n VA: \"Holy See (Vatican City State)\",\r\n HN: \"Honduras\",\r\n HK: \"Hong Kong\",\r\n HU: \"Hungary\",\r\n IS: \"Iceland\",\r\n IN: \"India\",\r\n ID: \"Indonesia\",\r\n IR: \"Iran, Islamic Republic Of\",\r\n IQ: \"Iraq\",\r\n IE: \"Ireland\",\r\n IM: \"Isle Of Man\",\r\n IL: \"Israel\",\r\n IT: \"Italy\",\r\n JM: \"Jamaica\",\r\n JP: \"Japan\",\r\n JE: \"Jersey\",\r\n JO: \"Jordan\",\r\n KZ: \"Kazakhstan\",\r\n KE: \"Kenya\",\r\n KI: \"Kiribati\",\r\n KR: \"Korea\",\r\n KP: \"North Korea\",\r\n KW: \"Kuwait\",\r\n KG: \"Kyrgyzstan\",\r\n LA: 'Lao People\"s Democratic Republic',\r\n LV: \"Latvia\",\r\n LB: \"Lebanon\",\r\n LS: \"Lesotho\",\r\n LR: \"Liberia\",\r\n LY: \"Libyan Arab Jamahiriya\",\r\n LI: \"Liechtenstein\",\r\n LT: \"Lithuania\",\r\n LU: \"Luxembourg\",\r\n MO: \"Macao\",\r\n MK: \"Macedonia\",\r\n MG: \"Madagascar\",\r\n MW: \"Malawi\",\r\n MY: \"Malaysia\",\r\n MV: \"Maldives\",\r\n ML: \"Mali\",\r\n MT: \"Malta\",\r\n MH: \"Marshall Islands\",\r\n MQ: \"Martinique\",\r\n MR: \"Mauritania\",\r\n MU: \"Mauritius\",\r\n YT: \"Mayotte\",\r\n MX: \"Mexico\",\r\n FM: \"Micronesia, Federated States Of\",\r\n MD: \"Moldova\",\r\n MC: \"Monaco\",\r\n MN: \"Mongolia\",\r\n ME: \"Montenegro\",\r\n MS: \"Montserrat\",\r\n MA: \"Morocco\",\r\n MZ: \"Mozambique\",\r\n MM: \"Myanmar\",\r\n NA: \"Namibia\",\r\n NR: \"Nauru\",\r\n NP: \"Nepal\",\r\n NL: \"Netherlands\",\r\n AN: \"Netherlands Antilles\",\r\n NC: \"New Caledonia\",\r\n NZ: \"New Zealand\",\r\n NI: \"Nicaragua\",\r\n NE: \"Niger\",\r\n NG: \"Nigeria\",\r\n NU: \"Niue\",\r\n NF: \"Norfolk Island\",\r\n MP: \"Northern Mariana Islands\",\r\n NO: \"Norway\",\r\n OM: \"Oman\",\r\n PK: \"Pakistan\",\r\n PW: \"Palau\",\r\n PS: \"Palestinian Territory, Occupied\",\r\n PA: \"Panama\",\r\n PG: \"Papua New Guinea\",\r\n PY: \"Paraguay\",\r\n PE: \"Peru\",\r\n PH: \"Philippines\",\r\n PN: \"Pitcairn\",\r\n PL: \"Poland\",\r\n PT: \"Portugal\",\r\n PR: \"Puerto Rico\",\r\n QA: \"Qatar\",\r\n RE: \"Reunion\",\r\n RO: \"Romania\",\r\n RU: \"Russian Federation\",\r\n RW: \"Rwanda\",\r\n BL: \"Saint Barthelemy\",\r\n SH: \"Saint Helena\",\r\n KN: \"Saint Kitts And Nevis\",\r\n LC: \"Saint Lucia\",\r\n MF: \"Saint Martin\",\r\n PM: \"Saint Pierre And Miquelon\",\r\n VC: \"Saint Vincent And Grenadines\",\r\n WS: \"Samoa\",\r\n SM: \"San Marino\",\r\n ST: \"Sao Tome And Principe\",\r\n SA: \"Saudi Arabia\",\r\n SN: \"Senegal\",\r\n RS: \"Serbia\",\r\n SC: \"Seychelles\",\r\n SL: \"Sierra Leone\",\r\n SG: \"Singapore\",\r\n SK: \"Slovakia\",\r\n SI: \"Slovenia\",\r\n SB: \"Solomon Islands\",\r\n SO: \"Somalia\",\r\n ZA: \"South Africa\",\r\n GS: \"South Georgia And Sandwich Isl.\",\r\n ES: \"Spain\",\r\n LK: \"Sri Lanka\",\r\n SD: \"Sudan\",\r\n SR: \"Suriname\",\r\n SJ: \"Svalbard And Jan Mayen\",\r\n SZ: \"Swaziland\",\r\n SE: \"Sweden\",\r\n CH: \"Switzerland\",\r\n SY: \"Syrian Arab Republic\",\r\n TW: \"Taiwan\",\r\n TJ: \"Tajikistan\",\r\n TZ: \"Tanzania\",\r\n TH: \"Thailand\",\r\n TL: \"Timor-Leste\",\r\n TG: \"Togo\",\r\n TK: \"Tokelau\",\r\n TO: \"Tonga\",\r\n TT: \"Trinidad And Tobago\",\r\n TA: \"Tristan da Cunha\",\r\n TN: \"Tunisia\",\r\n TR: \"Turkey\",\r\n TM: \"Turkmenistan\",\r\n TC: \"Turks And Caicos Islands\",\r\n TV: \"Tuvalu\",\r\n UG: \"Uganda\",\r\n UA: \"Ukraine\",\r\n AE: \"United Arab Emirates\",\r\n GB: \"United Kingdom\",\r\n US: \"United States\",\r\n UM: \"United States Outlying Islands\",\r\n UY: \"Uruguay\",\r\n UZ: \"Uzbekistan\",\r\n VU: \"Vanuatu\",\r\n VE: \"Venezuela\",\r\n VN: \"Vietnam\",\r\n VG: \"Virgin Islands, British\",\r\n VI: \"Virgin Islands, U.S.\",\r\n WF: \"Wallis And Futuna\",\r\n EH: \"Western Sahara\",\r\n YE: \"Yemen\",\r\n ZM: \"Zambia\",\r\n ZW: \"Zimbabwe\",\r\n BQ: \"Bonaire, Sint Eustatius and Saba\",\r\n CW: \"Curaçao\",\r\n SS: \"South Sudan\",\r\n SX: \"Sint Maarten (Dutch part)\",\r\n XK: \"Kosovo\"\r\n};\r\n","export const countryCodeToFiCountryName = {\r\n AC: \"Ascension-saari\",\r\n AF: \"Afganistan\",\r\n AX: \"Ahvenanmaa\",\r\n AL: \"Albania\",\r\n DZ: \"Algeria\",\r\n AS: \"Amerikan Samoa\",\r\n AD: \"Andorra\",\r\n AO: \"Angola\",\r\n AI: \"Anguilla\",\r\n AQ: \"Antarktis\",\r\n AG: \"Antigua ja Barbuda\",\r\n AR: \"Argentiina\",\r\n AM: \"Armenia\",\r\n AW: \"Aruba\",\r\n AU: \"Australia\",\r\n AT: \"Itävalta\",\r\n AZ: \"Azerbaidžan\",\r\n BS: \"Bahama\",\r\n BH: \"Bahrain\",\r\n BD: \"Bangladesh\",\r\n BB: \"Barbados\",\r\n BY: \"Valko-Venäjä\",\r\n BE: \"Belgia\",\r\n BZ: \"Belize\",\r\n BJ: \"Benin\",\r\n BM: \"Bermuda\",\r\n BT: \"Bhutan\",\r\n BO: \"Bolivia\",\r\n BA: \"Bosnia ja Hertsegovina\",\r\n BW: \"Botswana\",\r\n BV: \"Bouvet'nsaari\",\r\n BR: \"Brasilia\",\r\n IO: \"Brittiläinen Intian valtameren alue\",\r\n BN: \"Brunei\",\r\n BG: \"Bulgaria\",\r\n BF: \"Burkina Faso\",\r\n BI: \"Burundi\",\r\n KH: \"Kambodža\",\r\n CM: \"Kamerun\",\r\n CA: \"Kanada\",\r\n CV: \"Kap Verde\",\r\n KY: \"Caymansaaret\",\r\n CF: \"Keski-Afrikan tasavalta\",\r\n TD: \"Tšad\",\r\n CL: \"Chile\",\r\n CN: \"Kiina\",\r\n CX: \"Joulusaari\",\r\n CC: \"Kookossaaret\",\r\n CO: \"Kolumbia\",\r\n KM: \"Komorit\",\r\n CG: \"Kongo\",\r\n CD: \"Kongon demokraattinen tasavalta\",\r\n CK: \"Cookinsaaret\",\r\n CR: \"Costa Rica\",\r\n CI: \"Norsunluurannikko\",\r\n HR: \"Kroatia\",\r\n CU: \"Kuuba\",\r\n CY: \"Kypros\",\r\n CZ: \"Tšekki\",\r\n DK: \"Tanska\",\r\n DJ: \"Djibouti\",\r\n DM: \"Dominica\",\r\n DO: \"Dominikaaninen tasavalta\",\r\n EC: \"Ecuador\",\r\n EG: \"Egypti\",\r\n SV: \"El Salvador\",\r\n GQ: \"Päiväntasaajan Guinea\",\r\n ER: \"Eritrea\",\r\n EE: \"Viro\",\r\n ET: \"Etiopia\",\r\n FK: \"Falklandinsaaret (Malvinas)\",\r\n FO: \"Färsaaret\",\r\n FJ: \"Fidži\",\r\n FI: \"Suomi\",\r\n FR: \"Ranska\",\r\n GF: \"Ranskan Guayana\",\r\n PF: \"Ranskan Polynesia\",\r\n TF: \"Ranskan eteläiset ja antarktiset alueet\",\r\n GA: \"Gabon\",\r\n GM: \"Gambia\",\r\n GE: \"Georgia\",\r\n DE: \"Saksa\",\r\n GH: \"Ghana\",\r\n GI: \"Gibraltar\",\r\n GR: \"Kreikka\",\r\n GL: \"Grönlanti\",\r\n GD: \"Grenada\",\r\n GP: \"Guadeloupe\",\r\n GU: \"Guam\",\r\n GT: \"Guatemala\",\r\n GG: \"Guernsey\",\r\n GN: \"Guinea\",\r\n GW: \"Guinea-Bissau\",\r\n GY: \"Guyana\",\r\n HT: \"Haiti\",\r\n HM: \"Heard- ja McDonaldinsaaret\",\r\n VA: \"Vatikaani\",\r\n HN: \"Honduras\",\r\n HK: \"Hongkong\",\r\n HU: \"Unkari\",\r\n IS: \"Islanti\",\r\n IN: \"Intia\",\r\n ID: \"Indonesia\",\r\n IR: \"Iran\",\r\n IQ: \"Irak\",\r\n IE: \"Irlanti\",\r\n IM: \"Mansaari\",\r\n IL: \"Israel\",\r\n IT: \"Italia\",\r\n JM: \"Jamaika\",\r\n JP: \"Japani\",\r\n JE: \"Jersey\",\r\n JO: \"Jordania\",\r\n KZ: \"Kazakstan\",\r\n KE: \"Kenia\",\r\n KI: \"Kiribati\",\r\n KR: \"Korea\",\r\n KP: \"Pohjois-Korea\",\r\n KW: \"Kuwait\",\r\n KG: \"Kirgisia\",\r\n LA: \"Laos\",\r\n LV: \"Latvia\",\r\n LB: \"Libanon\",\r\n LS: \"Lesotho\",\r\n LR: \"Liberia\",\r\n LY: \"Libya\",\r\n LI: \"Liechtenstein\",\r\n LT: \"Liettua\",\r\n LU: \"Luxemburg\",\r\n MO: \"Macao\",\r\n MK: \"Makedonia\",\r\n MG: \"Madagaskar\",\r\n MW: \"Malawi\",\r\n MY: \"Malesia\",\r\n MV: \"Malediivit\",\r\n ML: \"Mali\",\r\n MT: \"Malta\",\r\n MH: \"Marshallinsaaret\",\r\n MQ: \"Martinique\",\r\n MR: \"Mauritania\",\r\n MU: \"Mauritius\",\r\n YT: \"Mayotte\",\r\n MX: \"Meksiko\",\r\n FM: \"Mikronesia\",\r\n MD: \"Moldova\",\r\n MC: \"Monaco\",\r\n MN: \"Mongolia\",\r\n ME: \"Montenegro\",\r\n MS: \"Montserrat\",\r\n MA: \"Marokko\",\r\n MZ: \"Mosambik\",\r\n MM: \"Myanmar\",\r\n NA: \"Namibia\",\r\n NR: \"Nauru\",\r\n NP: \"Nepal\",\r\n NL: \"Alankomaat\",\r\n AN: \"Alankomaiden Antillit\",\r\n NC: \"Uusi-Kaledonia\",\r\n NZ: \"Uusi-Seelanti\",\r\n NI: \"Nicaragua\",\r\n NE: \"Niger\",\r\n NG: \"Nigeria\",\r\n NU: \"Niue\",\r\n NF: \"Norfolkinsaari\",\r\n MP: \"Pohjois-Mariaanit\",\r\n NO: \"Norja\",\r\n OM: \"Oman\",\r\n PK: \"Pakistan\",\r\n PW: \"Palau\",\r\n PS: \"Palestiina\",\r\n PA: \"Panama\",\r\n PG: \"Papua-Uusi-Guinea\",\r\n PY: \"Paraguay\",\r\n PE: \"Peru\",\r\n PH: \"Filippiinit\",\r\n PN: \"Pitcairn\",\r\n PL: \"Puola\",\r\n PT: \"Portugali\",\r\n PR: \"Puerto Rico\",\r\n QA: \"Qatar\",\r\n RE: \"Réunion\",\r\n RO: \"Romania\",\r\n RU: \"Venäjä\",\r\n RW: \"Ruanda\",\r\n BL: \"Saint Barthelemy\",\r\n SH: \"Saint Helena\",\r\n KN: \"Saint Kitts ja Nevis\",\r\n LC: \"Saint Lucia\",\r\n MF: \"Saint Martin\",\r\n PM: \"Saint Pierre ja Miquelon\",\r\n VC: \"Saint Vincent ja Grenadiinit\",\r\n WS: \"Samoa\",\r\n SM: \"San Marino\",\r\n ST: \"São Tomé ja Príncipe\",\r\n SA: \"Saudi-Arabia\",\r\n SN: \"Senegal\",\r\n RS: \"Serbia\",\r\n SC: \"Seychellit\",\r\n SL: \"Sierra Leone\",\r\n SG: \"Singapore\",\r\n SK: \"Slovakia\",\r\n SI: \"Slovenia\",\r\n SB: \"Salomonsaaret\",\r\n SO: \"Somalia\",\r\n ZA: \"Etelä-Afrikka\",\r\n GS: \"Etelä-Georgia ja Eteläiset Sandwichsaaret\",\r\n ES: \"Espanja\",\r\n LK: \"Sri Lanka\",\r\n SD: \"Sudan\",\r\n SR: \"Suriname\",\r\n SJ: \"Huippuvuoret ja Jan Mayen\",\r\n SZ: \"Swazimaa\",\r\n SE: \"Ruotsi\",\r\n CH: \"Sveitsi\",\r\n SY: \"Syyria\",\r\n TW: \"Taiwan\",\r\n TJ: \"Tadžikistan\",\r\n TZ: \"Tansania\",\r\n TH: \"Thaimaa\",\r\n TL: \"Itä-Timor\",\r\n TG: \"Togo\",\r\n TK: \"Tokelau\",\r\n TO: \"Tonga\",\r\n TT: \"Trinidad ja Tobago\",\r\n TA: \"Tristan da Cunha\",\r\n TN: \"Tunisia\",\r\n TR: \"Turkki\",\r\n TM: \"Turkmenistan\",\r\n TC: \"Turks- ja Caicossaaret\",\r\n TV: \"Tuvalu\",\r\n UG: \"Uganda\",\r\n UA: \"Ukraina\",\r\n AE: \"Arabiemiirikunnat\",\r\n GB: \"Iso-Britannia\",\r\n US: \"Yhdysvallat\",\r\n UM: \"Yhdysvaltain erillissaaret\",\r\n UY: \"Uruguay\",\r\n UZ: \"Uzbekistan\",\r\n VU: \"Vanuatu\",\r\n VE: \"Venezuela\",\r\n VN: \"Vietnam\",\r\n VG: \"Brittiläiset Neitsytsaaret\",\r\n VI: \"Yhdysvaltain Neitsytsaaret\",\r\n WF: \"Wallis ja Futuna\",\r\n EH: \"Länsi-Sahara\",\r\n YE: \"Jemen\",\r\n ZM: \"Sambia\",\r\n ZW: \"Zimbabwe\",\r\n BQ: \"Bonaire, Sint Eustatius ja Saba\",\r\n CW: \"Curaçao\",\r\n SS: \"Etelä-Sudan\",\r\n SX: \"Sint Maarten (hollantilainen osa)\",\r\n XK: \"Kosovo\"\r\n};\r\n","export const countryCodeToNoCountryName = {\r\n AC: \"Ascension\",\r\n AF: \"Afghanistan\",\r\n AX: \"Åland\",\r\n AL: \"Albania\",\r\n DZ: \"Algerie\",\r\n AS: \"Amerikansk Samoa\",\r\n AD: \"Andorra\",\r\n AO: \"Angola\",\r\n AI: \"Anguilla\",\r\n AQ: \"Antarktis\",\r\n AG: \"Antigua og Barbuda\",\r\n AR: \"Argentina\",\r\n AM: \"Armenia\",\r\n AW: \"Aruba\",\r\n AU: \"Australia\",\r\n AT: \"Østerrike\",\r\n AZ: \"Aserbajdsjan\",\r\n BS: \"Bahamas\",\r\n BH: \"Bahrain\",\r\n BD: \"Bangladesh\",\r\n BB: \"Barbados\",\r\n BY: \"Hviterussland\",\r\n BE: \"Belgia\",\r\n BZ: \"Belize\",\r\n BJ: \"Benin\",\r\n BM: \"Bermuda\",\r\n BT: \"Bhutan\",\r\n BO: \"Bolivia\",\r\n BA: \"Bosnia og Hercegovina\",\r\n BW: \"Botswana\",\r\n BV: \"Bouvetøya\",\r\n BR: \"Brasil\",\r\n IO: \"Britisk territorium i Indiahavet\",\r\n BN: \"Brunei\",\r\n BG: \"Bulgaria\",\r\n BF: \"Burkina Faso\",\r\n BI: \"Burundi\",\r\n KH: \"Kambodsja\",\r\n CM: \"Kamerun\",\r\n CA: \"Canada\",\r\n CV: \"Kapp Verde\",\r\n KY: \"Caymanøyene\",\r\n CF: \"Den sentralafrikanske republikk\",\r\n TD: \"Tsjad\",\r\n CL: \"Chile\",\r\n CN: \"Kina\",\r\n CX: \"Christmasøya\",\r\n CC: \"Kokosøyene\",\r\n CO: \"Colombia\",\r\n KM: \"Komorene\",\r\n CG: \"Kongo\",\r\n CD: \"Den demokratiske republikken Kongo\",\r\n CK: \"Cookøyene\",\r\n CR: \"Costa Rica\",\r\n CI: \"Elfenbenskysten\",\r\n HR: \"Kroatia\",\r\n CU: \"Cuba\",\r\n CY: \"Kypros\",\r\n CZ: \"Tsjekkia\",\r\n DK: \"Danmark\",\r\n DJ: \"Djibouti\",\r\n DM: \"Dominica\",\r\n DO: \"Den dominikanske republikk\",\r\n EC: \"Ecuador\",\r\n EG: \"Egypt\",\r\n SV: \"El Salvador\",\r\n GQ: \"Ekvatorial-Guinea\",\r\n ER: \"Eritrea\",\r\n EE: \"Estland\",\r\n ET: \"Etiopia\",\r\n FK: \"Falklandsøyene (Malvinas)\",\r\n FO: \"Færøyene\",\r\n FJ: \"Fiji\",\r\n FI: \"Finland\",\r\n FR: \"Frankrike\",\r\n GF: \"Fransk Guyana\",\r\n PF: \"Fransk Polynesia\",\r\n TF: \"De franske sørterritorier\",\r\n GA: \"Gabon\",\r\n GM: \"Gambia\",\r\n GE: \"Georgia\",\r\n DE: \"Tyskland\",\r\n GH: \"Ghana\",\r\n GI: \"Gibraltar\",\r\n GR: \"Hellas\",\r\n GL: \"Grønland\",\r\n GD: \"Grenada\",\r\n GP: \"Guadeloupe\",\r\n GU: \"Guam\",\r\n GT: \"Guatemala\",\r\n GG: \"Guernsey\",\r\n GN: \"Guinea\",\r\n GW: \"Guinea-Bissau\",\r\n GY: \"Guyana\",\r\n HT: \"Haiti\",\r\n HM: \"Heardøya og McDonaldøyene\",\r\n VA: \"Den hellige stol (Vatikanstaten)\",\r\n HN: \"Honduras\",\r\n HK: \"Hongkong\",\r\n HU: \"Ungarn\",\r\n IS: \"Island\",\r\n IN: \"India\",\r\n ID: \"Indonesia\",\r\n IR: \"Iran\",\r\n IQ: \"Irak\",\r\n IE: \"Irland\",\r\n IM: \"Man\",\r\n IL: \"Israel\",\r\n IT: \"Italia\",\r\n JM: \"Jamaica\",\r\n JP: \"Japan\",\r\n JE: \"Jersey\",\r\n JO: \"Jordan\",\r\n KZ: \"Kasakhstan\",\r\n KE: \"Kenya\",\r\n KI: \"Kiribati\",\r\n KR: \"Sør-Korea\",\r\n KP: \"Nord-Korea\",\r\n KW: \"Kuwait\",\r\n KG: \"Kirgisistan\",\r\n LA: \"Laos\",\r\n LV: \"Latvia\",\r\n LB: \"Libanon\",\r\n LS: \"Lesotho\",\r\n LR: \"Liberia\",\r\n LY: \"Libya\",\r\n LI: \"Liechtenstein\",\r\n LT: \"Litauen\",\r\n LU: \"Luxembourg\",\r\n MO: \"Macao\",\r\n MK: \"Makedonia\",\r\n MG: \"Madagaskar\",\r\n MW: \"Malawi\",\r\n MY: \"Malaysia\",\r\n MV: \"Maldivene\",\r\n ML: \"Mali\",\r\n MT: \"Malta\",\r\n MH: \"Marshalløyene\",\r\n MQ: \"Martinique\",\r\n MR: \"Mauritania\",\r\n MU: \"Mauritius\",\r\n YT: \"Mayotte\",\r\n MX: \"Mexico\",\r\n FM: \"Mikronesiaføderasjonen\",\r\n MD: \"Moldova\",\r\n MC: \"Monaco\",\r\n MN: \"Mongolia\",\r\n ME: \"Montenegro\",\r\n MS: \"Montserrat\",\r\n MA: \"Marokko\",\r\n MZ: \"Mosambik\",\r\n MM: \"Myanmar\",\r\n NA: \"Namibia\",\r\n NR: \"Nauru\",\r\n NP: \"Nepal\",\r\n NL: \"Nederland\",\r\n AN: \"De nederlandske Antillene\",\r\n NC: \"Ny-Caledonia\",\r\n NZ: \"New Zealand\",\r\n NI: \"Nicaragua\",\r\n NE: \"Niger\",\r\n NG: \"Nigeria\",\r\n NU: \"Niue\",\r\n NF: \"Norfolkøya\",\r\n MP: \"Nord-Marianene\",\r\n NO: \"Norge\",\r\n OM: \"Oman\",\r\n PK: \"Pakistan\",\r\n PW: \"Palau\",\r\n PS: \"De palestinske territoriene\",\r\n PA: \"Panama\",\r\n PG: \"Papua Ny-Guinea\",\r\n PY: \"Paraguay\",\r\n PE: \"Peru\",\r\n PH: \"Filippinene\",\r\n PN: \"Pitcairn\",\r\n PL: \"Polen\",\r\n PT: \"Portugal\",\r\n PR: \"Puerto Rico\",\r\n QA: \"Qatar\",\r\n RE: \"Réunion\",\r\n RO: \"Romania\",\r\n RU: \"Russland\",\r\n RW: \"Rwanda\",\r\n BL: \"Saint Barthelemy\",\r\n SH: \"Saint Helena\",\r\n KN: \"Saint Kitts og Nevis\",\r\n LC: \"Saint Lucia\",\r\n MF: \"Saint Martin\",\r\n PM: \"Saint Pierre og Miquelon\",\r\n VC: \"Saint Vincent og Grenadinene\",\r\n WS: \"Samoa\",\r\n SM: \"San Marino\",\r\n ST: \"Sao Tome og Principe\",\r\n SA: \"Saudi-Arabia\",\r\n SN: \"Senegal\",\r\n RS: \"Serbia\",\r\n SC: \"Seychellene\",\r\n SL: \"Sierra Leone\",\r\n SG: \"Singapore\",\r\n SK: \"Slovakia\",\r\n SI: \"Slovenia\",\r\n SB: \"Salomonøyene\",\r\n SO: \"Somalia\",\r\n ZA: \"Sør-Afrika\",\r\n GS: \"Sør-Georgia og Sør-Sandwichøyene\",\r\n ES: \"Spania\",\r\n LK: \"Sri Lanka\",\r\n SD: \"Sudan\",\r\n SR: \"Surinam\",\r\n SJ: \"Svalbard og Jan Mayen\",\r\n SZ: \"Swaziland\",\r\n SE: \"Sverige\",\r\n CH: \"Sveits\",\r\n SY: \"Syria\",\r\n TW: \"Taiwan\",\r\n TJ: \"Tadsjikistan\",\r\n TZ: \"Tanzania\",\r\n TH: \"Thailand\",\r\n TL: \"Øst-Timor\",\r\n TG: \"Togo\",\r\n TK: \"Tokelau\",\r\n TO: \"Tonga\",\r\n TT: \"Trinidad og Tobago\",\r\n TA: \"Tristan da Cunha\",\r\n TN: \"Tunisia\",\r\n TR: \"Tyrkia\",\r\n TM: \"Turkmenistan\",\r\n TC: \"Turks- og Caicosøyene\",\r\n TV: \"Tuvalu\",\r\n UG: \"Uganda\",\r\n UA: \"Ukraina\",\r\n AE: \"De forente arabiske emirater\",\r\n GB: \"Storbritannia\",\r\n US: \"USA\",\r\n UM: \"USAs ytre småøyer\",\r\n UY: \"Uruguay\",\r\n UZ: \"Usbekistan\",\r\n VU: \"Vanuatu\",\r\n VE: \"Venezuela\",\r\n VN: \"Vietnam\",\r\n VG: \"De britiske jomfruøyene\",\r\n VI: \"De amerikanske jomfruøyene\",\r\n WF: \"Wallis og Futuna\",\r\n EH: \"Vest-Sahara\",\r\n YE: \"Jemen\",\r\n ZM: \"Zambia\",\r\n ZW: \"Zimbabwe\",\r\n BQ: \"Bonaire, Sint Eustatius og Saba\",\r\n CW: \"Curaçao\",\r\n SS: \"Sør-Sudan\",\r\n SX: \"Sint Maarten (nederlandske delen)\",\r\n XK: \"Kosovo\"\r\n};\r\n","export const countryCodeToSeCountryName = {\r\n AC: \"Ascension Island\",\r\n AF: \"Afghanistan\",\r\n AX: \"Åland\",\r\n AL: \"Albanien\",\r\n DZ: \"Algeriet\",\r\n AS: \"Amerikansk Samoa\",\r\n AD: \"Andorra\",\r\n AO: \"Angola\",\r\n AI: \"Anguilla\",\r\n AQ: \"Antarktis\",\r\n AG: \"Antigua och Barbuda\",\r\n AR: \"Argentina\",\r\n AM: \"Armenien\",\r\n AW: \"Aruba\",\r\n AU: \"Australien\",\r\n AT: \"Österrike\",\r\n AZ: \"Azerbajdzjan\",\r\n BS: \"Bahamas\",\r\n BH: \"Bahrain\",\r\n BD: \"Bangladesh\",\r\n BB: \"Barbados\",\r\n BY: \"Vitryssland\",\r\n BE: \"Belgien\",\r\n BZ: \"Belize\",\r\n BJ: \"Benin\",\r\n BM: \"Bermuda\",\r\n BT: \"Bhutan\",\r\n BO: \"Bolivia\",\r\n BA: \"Bosnien och Hercegovina\",\r\n BW: \"Botswana\",\r\n BV: \"Bouvetön\",\r\n BR: \"Brasilien\",\r\n IO: \"Brittiska territoriet i Indiska Oceanen\",\r\n BN: \"Brunei Darussalam\",\r\n BG: \"Bulgarien\",\r\n BF: \"Burkina Faso\",\r\n BI: \"Burundi\",\r\n KH: \"Kambodja\",\r\n CM: \"Kamerun\",\r\n CA: \"Kanada\",\r\n CV: \"Kap Verde\",\r\n KY: \"Caymanöarna\",\r\n CF: \"Centralafrikanska republiken\",\r\n TD: \"Tchad\",\r\n CL: \"Chile\",\r\n CN: \"Kina\",\r\n CX: \"Julön\",\r\n CC: \"Kokosöarna\",\r\n CO: \"Colombia\",\r\n KM: \"Komorerna\",\r\n CG: \"Kongo\",\r\n CD: \"Kongo, Demokratiska republiken\",\r\n CK: \"Cooköarna\",\r\n CR: \"Costa Rica\",\r\n CI: \"Elfenbenskusten\",\r\n HR: \"Kroatien\",\r\n CU: \"Kuba\",\r\n CY: \"Cypern\",\r\n CZ: \"Tjeckien\",\r\n DK: \"Danmark\",\r\n DJ: \"Djibouti\",\r\n DM: \"Dominica\",\r\n DO: \"Dominikanska republiken\",\r\n EC: \"Ecuador\",\r\n EG: \"Egypten\",\r\n SV: \"El Salvador\",\r\n GQ: \"Ekvatorialguinea\",\r\n ER: \"Eritrea\",\r\n EE: \"Estland\",\r\n ET: \"Etiopien\",\r\n FK: \"Falklandsöarna (Malvinas)\",\r\n FO: \"Färöarna\",\r\n FJ: \"Fiji\",\r\n FI: \"Finland\",\r\n FR: \"Frankrike\",\r\n GF: \"Franska Guyana\",\r\n PF: \"Franska Polynesien\",\r\n TF: \"Franska södra territorierna\",\r\n GA: \"Gabon\",\r\n GM: \"Gambia\",\r\n GE: \"Georgien\",\r\n DE: \"Tyskland\",\r\n GH: \"Ghana\",\r\n GI: \"Gibraltar\",\r\n GR: \"Grekland\",\r\n GL: \"Grönland\",\r\n GD: \"Grenada\",\r\n GP: \"Guadeloupe\",\r\n GU: \"Guam\",\r\n GT: \"Guatemala\",\r\n GG: \"Guernsey\",\r\n GN: \"Guinea\",\r\n GW: \"Guinea-Bissau\",\r\n GY: \"Guyana\",\r\n HT: \"Haiti\",\r\n HM: \"Heard- och McDonaldöarna\",\r\n VA: \"Heliga stolen (Vatikanstaten)\",\r\n HN: \"Honduras\",\r\n HK: \"Hongkong\",\r\n HU: \"Ungern\",\r\n IS: \"Island\",\r\n IN: \"Indien\",\r\n ID: \"Indonesien\",\r\n IR: \"Iran, Islamiska republiken\",\r\n IQ: \"Irak\",\r\n IE: \"Irland\",\r\n IM: \"Isle of Man\",\r\n IL: \"Israel\",\r\n IT: \"Italien\",\r\n JM: \"Jamaica\",\r\n JP: \"Japan\",\r\n JE: \"Jersey\",\r\n JO: \"Jordanien\",\r\n KZ: \"Kazakstan\",\r\n KE: \"Kenya\",\r\n KI: \"Kiribati\",\r\n KR: \"Korea\",\r\n KP: \"Nordkorea\",\r\n KW: \"Kuwait\",\r\n KG: \"Kirgizistan\",\r\n LA: \"Demokratiska folkrepubliken Laos\",\r\n LV: \"Lettland\",\r\n LB: \"Libanon\",\r\n LS: \"Lesotho\",\r\n LR: \"Liberia\",\r\n LY: \"Libyen\",\r\n LI: \"Liechtenstein\",\r\n LT: \"Litauen\",\r\n LU: \"Luxemburg\",\r\n MO: \"Macao\",\r\n MK: \"Makedonien\",\r\n MG: \"Madagaskar\",\r\n MW: \"Malawi\",\r\n MY: \"Malaysia\",\r\n MV: \"Maldiverna\",\r\n ML: \"Mali\",\r\n MT: \"Malta\",\r\n MH: \"Marshallöarna\",\r\n MQ: \"Martinique\",\r\n MR: \"Mauretanien\",\r\n MU: \"Mauritius\",\r\n YT: \"Mayotte\",\r\n MX: \"Mexiko\",\r\n FM: \"Mikronesien, Federerade staterna\",\r\n MD: \"Moldavien, Republiken\",\r\n MC: \"Monaco\",\r\n MN: \"Mongoliet\",\r\n ME: \"Montenegro\",\r\n MS: \"Montserrat\",\r\n MA: \"Marocko\",\r\n MZ: \"Moçambique\",\r\n MM: \"Myanmar\",\r\n NA: \"Namibia\",\r\n NR: \"Nauru\",\r\n NP: \"Nepal\",\r\n NL: \"Nederländerna\",\r\n AN: \"Nederländska Antillerna\",\r\n NC: \"Nya Kaledonien\",\r\n NZ: \"Nya Zeeland\",\r\n NI: \"Nicaragua\",\r\n NE: \"Niger\",\r\n NG: \"Nigeria\",\r\n NU: \"Niue\",\r\n NF: \"Norfolkön\",\r\n MP: \"Nordmarianerna\",\r\n NO: \"Norge\",\r\n OM: \"Oman\",\r\n PK: \"Pakistan\",\r\n PW: \"Palau\",\r\n PS: \"Palestina\",\r\n PA: \"Panama\",\r\n PG: \"Papua Nya Guinea\",\r\n PY: \"Paraguay\",\r\n PE: \"Peru\",\r\n PH: \"Filippinerna\",\r\n PN: \"Pitcairnöarna\",\r\n PL: \"Polen\",\r\n PT: \"Portugal\",\r\n PR: \"Puerto Rico\",\r\n QA: \"Qatar\",\r\n RE: \"Réunion\",\r\n RO: \"Rumänien\",\r\n RU: \"Ryssland\",\r\n RW: \"Rwanda\",\r\n BL: \"Saint Barthélemy\",\r\n SH: \"Saint Helena\",\r\n KN: \"Saint Kitts och Nevis\",\r\n LC: \"Saint Lucia\",\r\n MF: \"Saint Martin (Franska delen)\",\r\n PM: \"Saint Pierre och Miquelon\",\r\n VC: \"Saint Vincent och Grenadinerna\",\r\n WS: \"Samoa\",\r\n SM: \"San Marino\",\r\n ST: \"São Tomé och Príncipe\",\r\n SA: \"Saudiarabien\",\r\n SN: \"Senegal\",\r\n RS: \"Serbien\",\r\n SC: \"Seychellerna\",\r\n SL: \"Sierra Leone\",\r\n SG: \"Singapore\",\r\n SK: \"Slovakien\",\r\n SI: \"Slovenien\",\r\n SB: \"Salomonöarna\",\r\n SO: \"Somalia\",\r\n ZA: \"Sydafrika\",\r\n GS: \"Sydgeorgien och Sydsandwichöarna\",\r\n ES: \"Spanien\",\r\n LK: \"Sri Lanka\",\r\n SD: \"Sudan\",\r\n SR: \"Surinam\",\r\n SJ: \"Svalbard och Jan Mayen\",\r\n SZ: \"Swaziland\",\r\n SE: \"Sverige\",\r\n CH: \"Schweiz\",\r\n SY: \"Syrien\",\r\n TW: \"Taiwan\",\r\n TJ: \"Tadzjikistan\",\r\n TZ: \"Tanzania\",\r\n TH: \"Thailand\",\r\n TL: \"Östtimor\",\r\n TG: \"Togo\",\r\n TK: \"Tokelau\",\r\n TO: \"Tonga\",\r\n TT: \"Trinidad och Tobago\",\r\n TA: \"Tristan da Cunha\",\r\n TN: \"Tunisien\",\r\n TR: \"Turkiet\",\r\n TM: \"Turkmenistan\",\r\n TC: \"Turks- och Caicosöarna\",\r\n TV: \"Tuvalu\",\r\n UG: \"Uganda\",\r\n UA: \"Ukraina\",\r\n AE: \"Förenade Arabemiraten\",\r\n GB: \"Storbritannien\",\r\n US: \"USA\",\r\n UM: \"USA:s yttre öar\",\r\n UY: \"Uruguay\",\r\n UZ: \"Uzbekistan\",\r\n VU: \"Vanuatu\",\r\n VE: \"Venezuela\",\r\n VN: \"Vietnam\",\r\n VG: \"Brittiska Jungfruöarna\",\r\n VI: \"Amerikanska Jungfruöarna\",\r\n WF: \"Wallis- och Futunaöarna\",\r\n EH: \"Västsahara\",\r\n YE: \"Jemen\",\r\n ZM: \"Zambia\",\r\n ZW: \"Zimbabwe\",\r\n BQ: \"Bonaire, Sint Eustatius och Saba\",\r\n CW: \"Curaçao\",\r\n SS: \"Sydsudan\",\r\n SX: \"Sint Maarten (holländsk del)\",\r\n XK: \"Kosovo\"\r\n};\r\n","\r\n\r\n
\r\n {{ phonePrefix }}\r\n 5\"\r\n [ariaLabel]=\"'accessibility.PhoneCountryCode' | translate\"\r\n [tabindex]=\"focusable ? 0 : -1\"\r\n [(ngModel)]=\"selectedCountryItem\"\r\n [overlayOptions]=\"countryCodeOverlayOptions\"\r\n (onFocus)=\"announcer.announce('+' + selectedCountryItem.value)\"\r\n (onChange)=\"onCountryCodeChanged()\"\r\n (keydown)=\"onCountryCodeKeyDown($any($event))\"\r\n optionLabel=\"label\"\r\n selectedItemTemplate=\"selectedItem\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n >\r\n \r\n
\r\n
\r\n \r\n {{ option.title }}\r\n
\r\n +{{ option.value }}\r\n
\r\n
5 && option.icon === 'FI'\" />\r\n
\r\n \r\n
\r\n
\r\n \r\n +{{ selectedCountryItem.value }}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n

errorMessages.MustBeFilled

\r\n \r\n

errorMessages.PhoneMustBeXLong

\r\n

errorMessages.PhoneMustBeMinXLong

\r\n

errorMessages.MaxXDigits

\r\n

errorMessages.OnlyDigits

\r\n
\r\n
\r\n","import { LiveAnnouncer } from \"@angular/cdk/a11y\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Injector, Input, OnInit, ViewChild, ViewRef, forwardRef } from \"@angular/core\";\r\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, ValidationErrors, Validator } from \"@angular/forms\";\r\nimport { BiTranslateDirective, BiTranslatePipe, BiTranslateService } from \"@globals/bi-translate\";\r\nimport { CustomValidators } from \"@globals/classes/CustomValidators\";\r\nimport { BiCountryId } from \"@globals/enums/BiLanguageAndCountryId\";\r\nimport { isStringNullOrEmpty, uniqueID } from \"@globals/helper-functions\";\r\nimport { PhoneNumberTypeEnum } from \"@globals/openapi-models/model/phoneNumberTypeEnum\";\r\nimport { BiLocalizationHelperBaseService } from \"@globals/services/bi-localization-helper-base.service\";\r\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\r\nimport { CountryCode, getCountries, getCountryCallingCode } from \"libphonenumber-js\";\r\nimport { OverlayOptions, SelectItem } from \"primeng/api\";\r\nimport { Dropdown, DropdownModule } from \"primeng/dropdown\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { debounceTime, distinctUntilChanged, filter, take } from \"rxjs\";\r\nimport { callingCodeToCountryCode } from \"./CallingCodeToCountryCode\";\r\nimport { countryCodeToDeCountryName } from \"./CountryCodeToDeCountryName\";\r\nimport { countryCodeToDkCountryName } from \"./CountryCodeToDkCountryName\";\r\nimport { countryCodeToEnCountryName } from \"./CountryCodeToEnCountryName\";\r\nimport { countryCodeToFiCountryName } from \"./CountryCodeToFiCountryName\";\r\nimport { countryCodeToNoCountryName } from \"./CountryCodeToNoCountryName\";\r\nimport { countryCodeToSeCountryName } from \"./CountryCodeToSeCountryName\";\r\n\r\n@UntilDestroy()\r\n@Component({\r\n selector: \"bi-phone-input\",\r\n imports: [BiTranslatePipe, BiTranslateDirective, CommonModule, FormsModule, InputTextModule, DropdownModule],\r\n templateUrl: \"./bi-phone-input.component.html\",\r\n styleUrls: [\"./bi-phone-input.component.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BiPhoneInputComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n multi: true,\r\n useExisting: forwardRef(() => BiPhoneInputComponent)\r\n },\r\n BiLocalizationHelperBaseService\r\n ]\r\n})\r\nexport class BiPhoneInputComponent implements ControlValueAccessor, Validator, AfterViewInit, OnInit {\r\n private _countryId: BiCountryId;\r\n public callingCodeToCountryCode = callingCodeToCountryCode;\r\n public countryCodeToDkCountryName = countryCodeToDkCountryName;\r\n public countryCodeToSeCountryName = countryCodeToSeCountryName;\r\n public countryCodeToNoCountryName = countryCodeToNoCountryName;\r\n public countryCodeToFiCountryName = countryCodeToFiCountryName;\r\n public countryCodeToEnCountryName = countryCodeToEnCountryName;\r\n public countryCodeToDeCountryName = countryCodeToDeCountryName;\r\n\r\n /**\r\n * Used for setting both the phone prefix and also the country id (for validation purposes).\r\n * NOTE: if \"canSelectCountryCode\" is true, then this will be the default value\r\n */\r\n @Input() public set countryId(cId: BiCountryId) {\r\n this._countryId = cId;\r\n }\r\n public get countryId() {\r\n return this._countryId;\r\n }\r\n\r\n /**\r\n * Allow the input to be disabled, Default false\r\n */\r\n @Input() public disabled = false;\r\n\r\n @Input() focusable = true;\r\n\r\n /**\r\n * Set true if you want the input to get autofocus on load\r\n */\r\n @Input() public autofocus = false;\r\n\r\n /**\r\n * Whether the phone country code will be a selectable value\r\n */\r\n @Input() public canSelectCountryCode = false;\r\n public selectedCountryCode: number;\r\n\r\n /**\r\n * Whether the phone type will be a selectable value\r\n */\r\n @Input() public canSelectPhoneType = false;\r\n public selectedPhoneType: PhoneNumberTypeEnum;\r\n\r\n public phoneNumberTypes = [];\r\n\r\n @Input() public phoneCode: number;\r\n @Input() public phoneType: PhoneNumberTypeEnum;\r\n\r\n @Input() public label: string;\r\n @Input() public hasLabel = true;\r\n\r\n /**\r\n * Whether the phone number to be entered is a landline (fastnet) number.\r\n * Used for validation\r\n */\r\n @Input() public isLandLine = false;\r\n\r\n @Input() public onlyMainCountries = false;\r\n\r\n private _phonePrefix: string;\r\n\r\n public selectedCountryItem: SelectItem = null;\r\n\r\n public get phonePrefix() {\r\n return this._phonePrefix;\r\n }\r\n\r\n public inputValue: string;\r\n\r\n public phoneLength: number;\r\n public phoneMaxLength: number;\r\n\r\n /**\r\n * Tells whether the required length of phone number is\r\n * the MINIMUM required length. Default is false meaning that the phone length is the exact required length\r\n */\r\n public phoneLengthIsMinimum = false;\r\n\r\n /**\r\n * HTML input id\r\n */\r\n public inputId: string;\r\n\r\n /**\r\n * HTML id of the hidden accessible input created by Prime Ng in the Dropdown component\r\n */\r\n public countryCodeDropdownId = uniqueID();\r\n public hasFocus: boolean;\r\n\r\n /**\r\n * Fired when value of the native text input has changed\r\n */\r\n public propagateChange = (_: string) => {\r\n return;\r\n };\r\n\r\n // Function to call when the input is touched.\r\n public onTouched = () => {\r\n return;\r\n };\r\n\r\n public setSelectedCountryCode(countryCode: number) {\r\n this.selectedCountryCode = countryCode;\r\n this.selectedCountryItem = this.countryItems.find(item => item.value === countryCode);\r\n this.cd.detectChanges();\r\n }\r\n\r\n /**\r\n * Reference to the form control created for this control value accessor component.\r\n * Makes it easy to access things like errors, status etc. for the control.\r\n */\r\n public controlRef: NgControl;\r\n public countryItems: Array;\r\n public countryCodeOverlayOptions: OverlayOptions;\r\n private language: string;\r\n\r\n @ViewChild(\"input\") private inputEl: ElementRef;\r\n @ViewChild(\"dropdown\") private dropdown: Dropdown;\r\n\r\n constructor(\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private baseLocalizor: BiLocalizationHelperBaseService,\r\n public translator: BiTranslateService,\r\n public announcer: LiveAnnouncer\r\n ) {\r\n this.language = this.translator.currentLang;\r\n }\r\n\r\n public ngOnInit() {\r\n this.inputId = uniqueID();\r\n\r\n this.initCountryCodes();\r\n\r\n if (this.phoneCode && this.canSelectCountryCode) {\r\n this._countryId = this.baseLocalizor.getCountryIdByPhoneCode(\"+\" + this.phoneCode);\r\n }\r\n\r\n this.setPhoneNumberValidation();\r\n\r\n this.selectedCountryCode = this.phoneCode ? this.phoneCode : this.baseLocalizor.getLanguageConfigByCountry(this._countryId).phoneCountryCode;\r\n\r\n this.selectedCountryItem = this.countryItems.find(item => item.value === this.selectedCountryCode);\r\n\r\n this.selectedPhoneType = this.phoneType ? this.phoneType : this.isLandLine ? PhoneNumberTypeEnum.LandLine : PhoneNumberTypeEnum.Mobile;\r\n\r\n // Only set phone type if canSelectPhoneType is true and the phone type is set\r\n if (this.canSelectPhoneType && this.phoneType) {\r\n this.updatePhoneType();\r\n }\r\n\r\n if (this.hasLabel && isStringNullOrEmpty(this.label)) {\r\n // set default label\r\n this.label = this.translator.instant(\"shared.CountryCodeAndMobile\");\r\n\r\n // We can't always assume that correct language is set, so listen to the language change event and set label accordingly\r\n this.translator.onLangChange.pipe(untilDestroyed(this), take(1)).subscribe(() => {\r\n this.label = this.translator.instant(\"shared.CountryCodeAndMobile\");\r\n });\r\n }\r\n\r\n this.phoneNumberTypes = [\r\n {\r\n label: this.translator.instant(\"shared.mobile\"),\r\n value: PhoneNumberTypeEnum.Mobile\r\n },\r\n {\r\n label: this.translator.instant(\"shared.landline\"),\r\n value: PhoneNumberTypeEnum.LandLine\r\n }\r\n ];\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Using the Injector, we can inject the formcontrol bound to this component\r\n const control = this.injector.get(NgControl, undefined);\r\n if (control) this.controlRef = control;\r\n\r\n // Make sure that if user enters non-numeric chars, then remove them (input type \"tel\" or \"number\" allows for entering \"-.,+'\")\r\n this.controlRef.valueChanges\r\n .pipe(\r\n untilDestroyed(this),\r\n distinctUntilChanged(),\r\n filter(val => val != null),\r\n debounceTime(200)\r\n )\r\n .subscribe((val: string) => {\r\n // Determine if new value is a number or not.\r\n const newVal = val.replace(/[^0-9]/g, \"\");\r\n if (newVal !== val) {\r\n this.writeValue(newVal);\r\n this.propagateChange(newVal);\r\n this.cd.detectChanges();\r\n }\r\n });\r\n\r\n // As autofocus doesn't work on the native input, we set it here\r\n if (this.autofocus) setTimeout(() => this.inputEl.nativeElement.focus(), 200);\r\n\r\n if (this.canSelectCountryCode) {\r\n // As PrimeNg is niot setting the required \"aria-controls\" attribute for the hidden accessible input, we do it manually here\r\n document.getElementById(this.countryCodeDropdownId)?.setAttribute(\"aria-controls\", this.dropdown.id + \"_list\");\r\n }\r\n\r\n this.initCountryCodeOverlayOptions();\r\n }\r\n\r\n writeValue(val: string): void {\r\n this.inputValue = val;\r\n if (!(this.cd as ViewRef).destroyed) this.cd.detectChanges();\r\n }\r\n\r\n onChange(val: string) {\r\n this.propagateChange(val);\r\n this.onTouched();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * Registers on touch event. This is to be called when the input loses focus (blur)\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.cd.detectChanges();\r\n }\r\n\r\n private setPhoneNumberValidation() {\r\n const languageConfig = this.baseLocalizor.getLanguageConfigByCountry(this._countryId);\r\n\r\n if (this._countryId == BiCountryId.DK || this._countryId == BiCountryId.NO) {\r\n this.phoneLength = languageConfig.minimumPhoneLength;\r\n this.phoneMaxLength = languageConfig.phoneLength;\r\n this.phoneLengthIsMinimum = false;\r\n } else if (this._countryId == BiCountryId.SE || this._countryId == BiCountryId.FI) {\r\n if (!this.isLandLine) {\r\n this.phoneLength = languageConfig.minimumPhoneLength;\r\n this.phoneMaxLength = languageConfig.phoneLength;\r\n this.phoneLengthIsMinimum = true;\r\n } else {\r\n this.phoneLength = languageConfig.phoneLengthLandlineMin;\r\n this.phoneMaxLength = languageConfig.phoneLengthLandlineMax;\r\n this.phoneLengthIsMinimum = true;\r\n }\r\n } else if (this._countryId == BiCountryId.DE) {\r\n this.phoneLength = languageConfig.minimumPhoneLength;\r\n this.phoneMaxLength = languageConfig.phoneLength;\r\n this.phoneLengthIsMinimum = true;\r\n } else if (this._countryId == BiCountryId.EN) {\r\n if (!this.isLandLine) {\r\n this.phoneLength = languageConfig.phoneLength;\r\n this.phoneLengthIsMinimum = false;\r\n } else {\r\n this.phoneLength = languageConfig.phoneLengthLandlineMin;\r\n this.phoneMaxLength = languageConfig.phoneLengthLandlineMax;\r\n this.phoneLengthIsMinimum = true;\r\n }\r\n }\r\n\r\n this._phonePrefix = \"+\" + languageConfig.phoneCountryCode;\r\n }\r\n\r\n public onCountryCodeChanged() {\r\n this.announcer.announce(\"+\" + this.selectedCountryItem.value);\r\n\r\n this.phoneCode = this.selectedCountryItem.value;\r\n\r\n this._countryId = this.baseLocalizor.getCountryIdByPhoneCode(\"+\" + this.selectedCountryItem.value);\r\n\r\n this.setPhoneNumberValidation();\r\n\r\n if (!isStringNullOrEmpty(this.inputValue)) {\r\n this.controlRef.control.markAsTouched();\r\n this.controlRef.control.markAsDirty();\r\n this.controlRef.control.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public updatePhoneType() {\r\n this.phoneType = this.selectedPhoneType;\r\n\r\n this.isLandLine = this.selectedPhoneType === PhoneNumberTypeEnum.LandLine;\r\n\r\n if (this.hasLabel) {\r\n const mobileTranslation = this.translator.instant(\"shared.CountryCodeAndMobile\");\r\n const landLineTranslation = this.translator.instant(\"shared.CountryCodeAndLandline\");\r\n\r\n if (this.label == mobileTranslation || this.label == landLineTranslation || isStringNullOrEmpty(this.label)) {\r\n this.label = this.isLandLine ? landLineTranslation : mobileTranslation;\r\n }\r\n }\r\n\r\n if (this.controlRef && this.controlRef.control) {\r\n this.controlRef.control.markAsTouched();\r\n this.controlRef.control.markAsDirty();\r\n this.controlRef.control.updateValueAndValidity();\r\n }\r\n\r\n this.setPhoneNumberValidation();\r\n }\r\n\r\n public validate(control: AbstractControl): ValidationErrors | null {\r\n if (isStringNullOrEmpty(control.value)) return null;\r\n\r\n return CustomValidators.phoneLengthValidator(this._countryId, this.isLandLine)(control);\r\n }\r\n\r\n /**\r\n * Get the value of the input including the selected phone coutry code. This is ONLY relevant if canSelectCountryCode === true\r\n */\r\n public getValueWithCode(): string {\r\n if (this.inputEl.nativeElement.value?.length > 0) {\r\n return \"+\" + this.selectedCountryItem.value + this.inputEl.nativeElement.value;\r\n }\r\n return undefined;\r\n }\r\n\r\n public getRawPhoneNumber(): number | undefined {\r\n const inputValue = this.inputEl.nativeElement.value;\r\n if (inputValue && inputValue.length > 0) {\r\n const parsedValue = parseInt(inputValue);\r\n if (!isNaN(parsedValue)) {\r\n return parsedValue;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n public getPhoneType() {\r\n return this.selectedPhoneType;\r\n }\r\n\r\n private initCountryCodes() {\r\n this.countryItems = [];\r\n\r\n let countries: CountryCode[] = getCountries();\r\n const mainCountries: CountryCode[] = [\"DK\", \"SE\", \"NO\", \"DE\", \"FI\"];\r\n\r\n if (this.onlyMainCountries) {\r\n countries = countries.filter(country => mainCountries.includes(country));\r\n }\r\n\r\n const otherCountryCodes = [];\r\n\r\n for (const country of countries) {\r\n const callingCode = +getCountryCallingCode(country);\r\n\r\n let countryName;\r\n switch (this.language) {\r\n case \"da\":\r\n countryName = this.countryCodeToDkCountryName[country];\r\n break;\r\n case \"se\":\r\n countryName = this.countryCodeToSeCountryName[country];\r\n break;\r\n case \"en\":\r\n countryName = this.countryCodeToEnCountryName[country];\r\n break;\r\n case \"fi\":\r\n countryName = this.countryCodeToFiCountryName[country];\r\n break;\r\n case \"no\":\r\n countryName = this.countryCodeToNoCountryName[country];\r\n break;\r\n case \"de\":\r\n countryName = this.countryCodeToDeCountryName[country];\r\n break;\r\n }\r\n\r\n let icon: string = country;\r\n if (icon.toString() === \"AC\") icon = \"GB\";\r\n if (icon.toString() === \"TA\") icon = \"GB\";\r\n\r\n if (callingCode) {\r\n const label = callingCode + \" \" + countryName;\r\n const value = callingCode;\r\n const title = countryName ?? country;\r\n\r\n if (mainCountries.includes(country)) {\r\n this.countryItems.push({ value, label, icon, title });\r\n } else {\r\n otherCountryCodes.push({ value, label, icon, title });\r\n }\r\n }\r\n }\r\n\r\n this.countryItems.sort((a, b) => {\r\n return a.value - b.value;\r\n });\r\n\r\n otherCountryCodes.sort((a, b) => {\r\n return a.title.localeCompare(b.title);\r\n });\r\n\r\n this.countryItems = this.countryItems.concat(otherCountryCodes);\r\n }\r\n\r\n /**\r\n * Method for parent components\r\n */\r\n public focusOnCountrycodeSelector() {\r\n document.getElementById(this.countryCodeDropdownId).focus();\r\n }\r\n\r\n private initCountryCodeOverlayOptions() {\r\n this.countryCodeOverlayOptions = {\r\n onShow: () => document.getElementById(this.dropdown.id + \"_list\")?.setAttribute(\"aria-label\", this.translator.instant(\"accessibility.ListWithCountryCodes\"))\r\n };\r\n }\r\n\r\n /**\r\n * TODO: remove this when PrimeNg has fixed its Dropdown focus trap issue!\r\n */\r\n public onCountryCodeKeyDown(event: KeyboardEvent) {\r\n if (event.key === \"Tab\") {\r\n if (!event.shiftKey) this.inputEl.nativeElement.focus();\r\n else document.getElementById(this.dropdown.inputId).blur();\r\n }\r\n }\r\n}\r\n","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getCountries as _getCountries } from '../../core/index.js'\r\n\r\nexport function getCountries() {\r\n\treturn withMetadataArgument(_getCountries, arguments)\r\n}","/**\r\n * SmsService API Documentation\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nexport type PageNames = 'SubscriptionModule' | 'SubscriptionStdReceiver' | 'FakeRequestAndSavePinCode' | 'EnrollmentModule' | 'SupportPage';\r\n\r\nexport const PageNames = {\r\n SubscriptionModule: 'SubscriptionModule' as PageNames,\r\n SubscriptionStdReceiver: 'SubscriptionStdReceiver' as PageNames,\r\n FakeRequestAndSavePinCode: 'FakeRequestAndSavePinCode' as PageNames,\r\n EnrollmentModule: 'EnrollmentModule' as PageNames,\r\n SupportPage: 'SupportPage' as PageNames\r\n};\r\n\r\n","/**\r\n * SmsService API Documentation\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nexport type PhoneNumberTypeEnum = 'PHONE_NORMAL_LAND_LINE' | 'PHONE_NORMAL_MOBILE';\r\n\r\nexport const PhoneNumberTypeEnum = {\r\n LandLine: 'PHONE_NORMAL_LAND_LINE' as PhoneNumberTypeEnum,\r\n Mobile: 'PHONE_NORMAL_MOBILE' as PhoneNumberTypeEnum\r\n};\r\n\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { BiTranslateService } from \"@globals/bi-translate\";\r\nimport { landLineLength_FI, landLineLength_SE, phoneLength_DE, phoneLength_DK, phoneLength_FI, phoneLength_NO, phoneLength_SE } from \"@globals/classes/global-constants\";\r\nimport { BiCountryId, BiLanguageId } from \"@globals/enums/BiLanguageAndCountryId\";\r\n\r\nexport interface LanguageConfig {\r\n dateFormat: string;\r\n dateTimeFormat: string;\r\n dateFormatNoYear: string;\r\n dateTimeFormatWithDayOfTheWeek: string;\r\n phoneCountryCode: number;\r\n phoneLength: number;\r\n\r\n /**\r\n * Min length of landline numbers\r\n */\r\n phoneLengthLandlineMin: number;\r\n /**\r\n * Max length of land line numbers\r\n */\r\n phoneLengthLandlineMax: number;\r\n minimumPhoneLength?: number;\r\n\r\n defaultMapCenterLatitude: number;\r\n defaultMapCenterLongitude: number;\r\n countryCode: string;\r\n}\r\n\r\n@Injectable()\r\nexport class BiLocalizationHelperBaseService {\r\n protected translator: BiTranslateService;\r\n\r\n constructor() {\r\n this.translator = inject(BiTranslateService);\r\n }\r\n /**\r\n * Returns language configurations based on a language id. By default, Danish countryId is used (if null or undefined\r\n * is passed).\r\n */\r\n public getLanguageConfigByCountry(countryId: BiCountryId): LanguageConfig {\r\n if (!countryId) countryId = BiCountryId.DK;\r\n\r\n switch (countryId) {\r\n case BiCountryId.DK:\r\n return {\r\n dateFormat: \"DD/MM/YYYY\",\r\n dateFormatNoYear: \"DD/MM\",\r\n dateTimeFormat: \"DD/MM/YYYY HH:mm\",\r\n dateTimeFormatWithDayOfTheWeek: \"ddd. D. MMM, HH:mm\",\r\n phoneCountryCode: 45,\r\n minimumPhoneLength: 8,\r\n phoneLength: 8,\r\n phoneLengthLandlineMin: phoneLength_DK,\r\n phoneLengthLandlineMax: phoneLength_DK,\r\n defaultMapCenterLatitude: 56.2639,\r\n defaultMapCenterLongitude: 9.5018,\r\n countryCode: \"dk\"\r\n };\r\n case BiCountryId.SE:\r\n return {\r\n dateFormat: \"YYYY-MM-DD\",\r\n dateFormatNoYear: \"MM-DD\",\r\n dateTimeFormat: \"YYYY-MM-DD HH:mm\",\r\n dateTimeFormatWithDayOfTheWeek: \"ddd D MMM HH:mm\",\r\n phoneCountryCode: 46,\r\n minimumPhoneLength: phoneLength_SE[0],\r\n phoneLength: phoneLength_SE[1],\r\n phoneLengthLandlineMin: landLineLength_SE[0],\r\n phoneLengthLandlineMax: landLineLength_SE[1],\r\n defaultMapCenterLatitude: 60.12816,\r\n defaultMapCenterLongitude: 18.6435,\r\n countryCode: \"se\"\r\n };\r\n case BiCountryId.DE:\r\n return {\r\n dateFormat: \"DD/MM/YYYY\",\r\n dateFormatNoYear: \"DD/MM\",\r\n dateTimeFormat: \"DD/MM/YYYY HH:mm\",\r\n dateTimeFormatWithDayOfTheWeek: \"ddd. D. MMM. HH:mm\",\r\n phoneCountryCode: 49,\r\n minimumPhoneLength: phoneLength_DE[0],\r\n phoneLength: phoneLength_DE[1],\r\n phoneLengthLandlineMin: phoneLength_DE[0],\r\n phoneLengthLandlineMax: phoneLength_DE[1],\r\n defaultMapCenterLatitude: 54.6683626,\r\n defaultMapCenterLongitude: 9.2664124,\r\n countryCode: \"de\"\r\n };\r\n case BiCountryId.EN:\r\n return {\r\n dateFormat: \"DD/MM/YYYY\",\r\n dateFormatNoYear: \"DD/MM\",\r\n dateTimeFormat: \"DD/MM/YYYY HH:mm\",\r\n dateTimeFormatWithDayOfTheWeek: \"ddd, D MMM [at] HH:mm\",\r\n phoneCountryCode: 44, // Change to England\r\n phoneLength: 8, // Change to England\r\n phoneLengthLandlineMin: 8, // Change to England\r\n phoneLengthLandlineMax: 10, // Change to England\r\n defaultMapCenterLatitude: 56.2639, // Change to England\r\n defaultMapCenterLongitude: 9.5018, // Change to England\r\n countryCode: \"en\"\r\n };\r\n case BiCountryId.FI:\r\n return {\r\n dateFormat: \"DD/MM/YYYY\",\r\n dateFormatNoYear: \"DD/MM\",\r\n dateTimeFormat: \"DD/MM/YYYY HH:mm\",\r\n dateTimeFormatWithDayOfTheWeek: \"dd D.M. [klo] HH:mm\",\r\n phoneCountryCode: 358,\r\n minimumPhoneLength: phoneLength_FI[0],\r\n phoneLength: phoneLength_FI[1],\r\n phoneLengthLandlineMin: landLineLength_FI[0],\r\n phoneLengthLandlineMax: landLineLength_FI[1],\r\n defaultMapCenterLatitude: 64.6233799,\r\n defaultMapCenterLongitude: 23.8364001,\r\n countryCode: \"fi\"\r\n };\r\n case BiCountryId.NO:\r\n return {\r\n dateFormat: \"YYYY-MM-DD\",\r\n dateFormatNoYear: \"MM-DD\",\r\n dateTimeFormat: \"YYYY-MM-DD HH:mm\",\r\n dateTimeFormatWithDayOfTheWeek: \"ddd D. MMM., HH:mm\",\r\n phoneCountryCode: 47,\r\n minimumPhoneLength: phoneLength_NO,\r\n phoneLength: phoneLength_NO,\r\n phoneLengthLandlineMin: phoneLength_NO,\r\n phoneLengthLandlineMax: phoneLength_NO,\r\n defaultMapCenterLatitude: 65.4465118,\r\n defaultMapCenterLongitude: 16.7209846,\r\n countryCode: \"no\"\r\n };\r\n }\r\n }\r\n\r\n public getCountryIdByPhoneCode(phoneCode: string) {\r\n switch (phoneCode) {\r\n case \"+45\":\r\n return BiCountryId.DK;\r\n case \"+44\":\r\n return BiCountryId.EN;\r\n case \"+46\":\r\n return BiCountryId.SE;\r\n case \"+47\":\r\n return BiCountryId.NO;\r\n case \"+49\":\r\n return BiCountryId.DE;\r\n case \"+358\":\r\n return BiCountryId.FI;\r\n }\r\n }\r\n\r\n public getCountryIdByLanguageCode(code: string) {\r\n switch (code) {\r\n case \"dk\":\r\n return BiCountryId.DK;\r\n case \"se\":\r\n return BiCountryId.SE;\r\n case \"fi\":\r\n return BiCountryId.FI;\r\n case \"no\":\r\n return BiCountryId.NO;\r\n case \"en\":\r\n return BiCountryId.EN;\r\n default:\r\n return BiCountryId.DK;\r\n }\r\n }\r\n\r\n public getLanguageIdByLanguageCode(code: string) {\r\n switch (code) {\r\n case \"dk\":\r\n return BiLanguageId.DK;\r\n case \"se\":\r\n return BiLanguageId.SE;\r\n case \"fi\":\r\n return BiLanguageId.FI;\r\n case \"no\":\r\n return BiLanguageId.NO;\r\n case \"en\":\r\n return BiLanguageId.EN;\r\n default:\r\n return BiLanguageId.DK;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the language for the Ngx TranslateService.\r\n */\r\n public setLanguage(language: string) {\r\n this.translator.use(language);\r\n }\r\n}\r\n","import { HttpClient } from \"@angular/common/http\";\r\nimport { inject, Injectable } from \"@angular/core\";\r\nimport { ApiRouting } from \"@globals/classes/ApiRouting\";\r\nimport { BiLanguageId } from \"@globals/enums/BiLanguageAndCountryId\";\r\nimport { AnonymousTokenModel } from \"@globals/openapi-models/model/anonymousTokenModel\";\r\nimport { PageNames } from \"@globals/openapi-models/model/pageNames\";\r\nimport { PinCodeRequestDto } from \"@globals/openapi-models/model/pinCodeRequestDto\";\r\nimport { SubscribeAddressCommand } from \"@globals/openapi-models/model/subscribeAddressCommand\";\r\nimport { SubscribeSupplyNumberCommand } from \"@globals/openapi-models/model/subscribeSupplyNumberCommand\";\r\nimport { SubscriptionDto } from \"@globals/openapi-models/model/subscriptionDto\";\r\n\r\nimport { SubscriptionModuleModel } from \"@globals/openapi-models/model/subscriptionModuleModel\";\r\nimport { UnsubscribeAddressCommand } from \"@globals/openapi-models/model/unsubscribeAddressCommand\";\r\nimport { UnsubscribeSupplyNumberCommand } from \"@globals/openapi-models/model/unsubscribeSupplyNumberCommand\";\r\nimport { VerifyPinCodeRequestDto } from \"@globals/openapi-models/model/verifyPinCodeRequestDto\";\r\n\r\n@Injectable()\r\nexport class SubscribeModuleBaseService {\r\n protected http: HttpClient;\r\n\r\n constructor() {\r\n this.http = inject(HttpClient);\r\n }\r\n\r\n /**\r\n * Returns all the addresses that the provided phone number and/or email is subscribed to\r\n */\r\n public getSubscriptions(\r\n accessToken: string,\r\n customerId: number,\r\n phoneNumber?: string,\r\n email?: string,\r\n phoneVoice?: string,\r\n onlyBusiness?: boolean,\r\n onlyPrivate?: boolean,\r\n noOperatorLookup?: boolean\r\n ) {\r\n const params = {\r\n customerId: customerId,\r\n accessToken: accessToken\r\n };\r\n if (phoneNumber) params[\"phoneNumber\"] = encodeURIComponent(phoneNumber);\r\n if (email) params[\"email\"] = email;\r\n if (onlyBusiness) params[\"onlyBusiness\"] = \"true\";\r\n if (onlyPrivate) params[\"onlyPrivate\"] = \"true\";\r\n if (phoneVoice) params[\"phoneVoice\"] = encodeURIComponent(phoneVoice);\r\n if (noOperatorLookup) params[\"noOperatorLookup\"] = \"true\";\r\n\r\n return this.http.get(ApiRouting.subscribeModuleEndpoints.get.getSubscriptions, { params: params });\r\n }\r\n\r\n /**\r\n * Returns configuration model for the Subscription module.\r\n * @param customerPublicId The customer's publicId, e.g. a GUID and NOT the customer id referring to db id.\r\n */\r\n public getSubscriptionModuleModel(customerPublicId: string, languageId?: BiLanguageId) {\r\n const params = { customerPublicId: customerPublicId };\r\n if (languageId) params[\"languageId\"] = languageId;\r\n\r\n return this.http.get(ApiRouting.subscribeModuleEndpoints.get.getSubscriptionModuleModel, {\r\n params: params\r\n });\r\n }\r\n\r\n public subscribeAddress(subscribeAddressCommand: SubscribeAddressCommand) {\r\n return this.http.post(ApiRouting.subscribeModuleEndpoints.post.subscribeAddress, subscribeAddressCommand);\r\n }\r\n\r\n public unsubscribeAddress(unsubscribeAddressCommand: UnsubscribeAddressCommand) {\r\n return this.http.post(ApiRouting.subscribeModuleEndpoints.post.unsubscribeAddress, unsubscribeAddressCommand);\r\n }\r\n\r\n public unsubscribeSupplyNumber(unsubscribeSupplyNumberCommand: UnsubscribeSupplyNumberCommand) {\r\n return this.http.post(ApiRouting.subscribeModuleEndpoints.post.unsubscribeSupplyNumber, unsubscribeSupplyNumberCommand);\r\n }\r\n\r\n public unsubscribeEnrollment(enrollmentId: number) {\r\n return this.http.post(ApiRouting.subscribeModuleEndpoints.post.unsubscribeEnrollmentById, enrollmentId);\r\n }\r\n\r\n public subscribeSupplyNumber(subscribeCommand: SubscribeSupplyNumberCommand) {\r\n return this.http.post(ApiRouting.subscribeModuleEndpoints.post.subscribeSupplyNumber, subscribeCommand);\r\n }\r\n\r\n /**\r\n * For generating a security PIN code and send it to provided email and/or phone number.\r\n * Returns a AnonymousToken if user is already authenticated in smsservice app\r\n */\r\n public requestPinCodeAttempt(requestDto: PinCodeRequestDto) {\r\n return this.http.post(ApiRouting.subscribeModuleEndpoints.requestPinCodeAttempt, requestDto);\r\n }\r\n\r\n /**\r\n * Verifies a PIN code generated using the RequestPinCode() API method.\r\n */\r\n public verifyPinCode(customerId: string, pageNameId: PageNames, code: number, phoneNumber?: string, landline?: string, email?: string) {\r\n const params: VerifyPinCodeRequestDto = {\r\n code: code,\r\n phoneNumber: phoneNumber,\r\n landline: landline,\r\n email: email,\r\n pageNameId: pageNameId,\r\n customerId: customerId\r\n };\r\n\r\n return this.http.post(ApiRouting.subscribeModuleEndpoints.verifyPinCode, params);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { uniqueID } from \"@globals/helper-functions\";\r\nimport { ActiveToast, IndividualConfig, ToastrService } from \"ngx-toastr\";\r\nimport { take } from \"rxjs\";\r\n/**\r\n * Sevice wrapping the NGX Toastr library. Many of the configuration options from the\r\n * library are used and some renamed to more convenient names. The functionality hasn't changed, though, so you can see more info\r\n * on the documentation page of the library (or just by inspecting the types used which have the documentation already!).\r\n *\r\n */\r\n@Injectable()\r\nexport class BiToastNotificationService {\r\n private activeToasts: Map> = new Map();\r\n\r\n constructor(private toaster: ToastrService) {}\r\n\r\n /**\r\n * Creates a new notification using passed config object for configuration.\r\n */\r\n public createNotification(config: BiNotificationConfig): ActiveToast {\r\n const toastConfig: Partial = {\r\n positionClass: `toast-${config.positionClass}`,\r\n enableHtml: config.enableHtml,\r\n closeButton: true\r\n };\r\n if (config.sticky) toastConfig.disableTimeOut = true;\r\n else toastConfig.timeOut = config.timeout;\r\n\r\n let toast: ActiveToast;\r\n switch (config.type) {\r\n case NotificationType.SUCCESS:\r\n toast = this.toaster.success(config.message, config.title, toastConfig);\r\n break;\r\n\r\n case NotificationType.INFO:\r\n toast = this.toaster.info(config.message, config.title, toastConfig);\r\n break;\r\n\r\n case NotificationType.ERROR:\r\n toast = this.toaster.error(config.message, config.title, toastConfig);\r\n break;\r\n\r\n case NotificationType.WARNING:\r\n toast = this.toaster.warning(config.message, config.title, toastConfig);\r\n break;\r\n default:\r\n toast = this.toaster.success(config.message, config.title, toastConfig);\r\n break;\r\n }\r\n // Add toast to map. If an id was provided, use that. Else we generate a random\r\n const toastId = config.id ? config.id : uniqueID();\r\n this.activeToasts.set(toastId, toast);\r\n\r\n // Delete the toast from our map when it's dismissed\r\n toast.onHidden.pipe(take(1)).subscribe(() => this.activeToasts.delete(toastId));\r\n\r\n return toast;\r\n }\r\n\r\n public getNotification(id: string) {\r\n return this.activeToasts.get(id);\r\n }\r\n\r\n /**\r\n * Updates a notification's message text if it exists.\r\n * @param id The id of the notification\r\n * @param message New message for the notification\r\n */\r\n public updateNotificationMessage(id: string, message?: string) {\r\n const toast = this.activeToasts.get(id);\r\n if (toast) toast.message = message;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a configuration object used for configuring an Ngx Toastr toast notification\r\n */\r\nexport class BiNotificationConfig {\r\n /**\r\n * Set true if notification should not auto dismiss. Default false.\r\n */\r\n public sticky = false;\r\n\r\n /**\r\n * Time before notification is auto dismissed (not effective if sticky is true). Default is 3000 ms.\r\n */\r\n public timeout = 3000;\r\n\r\n /**\r\n * Class setting the position of the notification. Format along with all possiblitites: \"{top/bottom/center}-{left/center/right}\". Default is \"top-center\".\r\n */\r\n public positionClass = \"top-center\";\r\n\r\n /**\r\n * To allow HTML content to be inserted in the notification's message. Default false\r\n */\r\n public enableHtml: boolean;\r\n\r\n /**\r\n * @param id Optional id for the toast in case you need to get it using the getNotification() method.\r\n * @param type Type of notification. Defined as enum and sets a matching color. Default is NotificationType.SUCCESS.\r\n */\r\n constructor(\r\n public type = NotificationType.SUCCESS,\r\n public title?: string,\r\n public message?: string,\r\n public id?: string\r\n ) {}\r\n}\r\n\r\nexport enum NotificationType {\r\n SUCCESS,\r\n INFO,\r\n ERROR,\r\n WARNING\r\n}\r\n","import { HttpClient } from \"@angular/common/http\";\r\nimport { inject, Injectable } from \"@angular/core\";\r\nimport { ApiRouting } from \"@globals/classes/ApiRouting\";\r\nimport { PageNames } from \"@globals/openapi-models/model/pageNames\";\r\n\r\nexport type GoogleCaptchaConfig = { siteKey: string; language: string };\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class GoogleCaptchaManagerService {\r\n private readonly siteKey = \"6LcJFLYUAAAAACnujYYEikUd0XWkvfZgnkMvmSYs\";\r\n private responseToken: string;\r\n\r\n private readonly http = inject(HttpClient);\r\n\r\n public setResponseToken(responseToken: string) {\r\n this.responseToken = responseToken;\r\n }\r\n\r\n public getConfig(languageCode: string): GoogleCaptchaConfig {\r\n return { siteKey: this.siteKey, language: languageCode === \"se\" ? \"sv\" : languageCode };\r\n }\r\n\r\n /**\r\n * Calls server for verfiying a Google Captcha user-response-token.\r\n * @param token Google Captcha user-response-token as returned by the frontend captcha component\r\n * @returns boolean - true for success and false for... you guessed right\r\n */\r\n public validateGoogleCaptchaToken(pageNameId: PageNames) {\r\n return this.http.get(ApiRouting.commonEndpoints.validateGoogleCaptchaToken, {\r\n params: { token: this.responseToken, pageNameId }\r\n });\r\n }\r\n}\r\n","import { LiveAnnouncer } from \"@angular/cdk/a11y\";\r\nimport { DOCUMENT } from \"@angular/common\";\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { ChangeDetectorRef, Directive, ElementRef, HostBinding, HostListener, inject, OnInit, ViewChild } from \"@angular/core\";\r\nimport { FormControl, FormGroup, Validators } from \"@angular/forms\";\r\nimport { Title } from \"@angular/platform-browser\";\r\nimport { Router } from \"@angular/router\";\r\nimport { BiTranslateService } from \"@globals/bi-translate\";\r\nimport { CustomValidators } from \"@globals/classes/CustomValidators\";\r\nimport { minBeforePinCanBeRerequested } from \"@globals/classes/global-constants\";\r\nimport { SharedRouteNames } from \"@globals/classes/SharedRouteNames\";\r\nimport { BiPhoneInputComponent } from \"@globals/components/bi-phone-input/bi-phone-input.component\";\r\nimport { BiCountryId } from \"@globals/enums/BiLanguageAndCountryId\";\r\nimport { areStringsEqual, isStringNullOrEmpty, stripHtml } from \"@globals/helper-functions\";\r\nimport { BiHttpErrorResponse } from \"@globals/models/BiHttpErrorResponse\";\r\nimport { AnonymousTokenModel } from \"@globals/openapi-models/model/anonymousTokenModel\";\r\nimport { PageNames } from \"@globals/openapi-models/model/pageNames\";\r\nimport { BiDomService } from \"@globals/services/bi-dom.service\";\r\nimport { BiLocalizationHelperBaseService } from \"@globals/services/bi-localization-helper-base.service\";\r\nimport { SubscribeModuleBaseService } from \"@globals/services/bi-subscribe-module-base.service\";\r\nimport { BiNotificationConfig, BiToastNotificationService, NotificationType } from \"@globals/services/bi-toast-notification.service\";\r\nimport { GoogleCaptchaConfig, GoogleCaptchaManagerService } from \"@globals/services/google-captcha-manager.service\";\r\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\r\nimport moment from \"moment-timezone\";\r\nimport { ReCaptcha2Component } from \"ngx-captcha\";\r\nimport { debounceTime, distinctUntilChanged, EMPTY, finalize, map, Observable, switchMap, take } from \"rxjs\";\r\nimport { MobileEmailFormValue } from \"./MobileEmailFormValue\";\r\nimport { SubscriptionModuleBaseSharedService } from \"./SubscriptionModuleBaseSharedService\";\r\n\r\n/**\r\n * Shared, abstract class that is meant to be extended by subscription module main component classes\r\n */\r\n@UntilDestroy()\r\n@Directive()\r\nexport abstract class SubscriptionModuleBase implements OnInit {\r\n public mobileEmailForm: FormGroup;\r\n\r\n public pinCodeCtrl = new FormControl(null, [Validators.required, Validators.min(1000), Validators.max(9999)]);\r\n\r\n // Flags\r\n public requestingPinCode: boolean;\r\n public verifyingPinCode: boolean;\r\n public showEnterPinArea: boolean;\r\n public showCaptcha: boolean;\r\n public pinVerified: boolean;\r\n public pinValid: boolean;\r\n public pinInvalid: boolean;\r\n public showDisclaimer: boolean;\r\n\r\n public disclaimerText: string;\r\n public pageNameId = PageNames.SubscriptionModule;\r\n\r\n public showSubscribeConfirmedText: boolean;\r\n public loading = true;\r\n public customerGuidMissing = false;\r\n\r\n protected isNameRequired: boolean;\r\n /**\r\n * The Moment date time at which user requested a PIN code\r\n */\r\n protected lastPinRequestDateTime: moment.Moment;\r\n protected lastPhoneNumberUsed: string;\r\n protected lastEmailUsed: string;\r\n public subHeaderTranslationKey: string;\r\n private anonymousAccessToken: string;\r\n\r\n /**\r\n * Step in the subscription module\r\n */\r\n public currentStep: 1 | 2 | 3 = 1;\r\n\r\n @ViewChild(\"pinInput\") public pinInput: ElementRef;\r\n @ViewChild(\"phoneInputVoice\") public phoneInputVoice?: BiPhoneInputComponent;\r\n @ViewChild(\"phoneInput\") public phoneInput: BiPhoneInputComponent;\r\n @ViewChild(\"recaptcha\")\r\n public recaptchaComponent: ReCaptcha2Component;\r\n public googleCaptchaConfig: GoogleCaptchaConfig;\r\n\r\n @HostBinding(\"class.iframe-component\") public get hostClass() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Binding for the native browser's \"keypress\" event where we can listen for press on Enter.\r\n */\r\n @HostListener(\"keypress\", [\"$event\"]) public onKeyPress(e: KeyboardEvent) {\r\n // if focus is on the reset button, then perform reset on Enter\r\n if (e.key === \"Enter\") {\r\n const activeElClasses = document.activeElement.className;\r\n if (activeElClasses.indexOf(\"reset-button\") !== -1) this.onReset();\r\n else if (activeElClasses.indexOf(\"disclaimer-link\") !== -1) this.showDisclaimer = true;\r\n else if (activeElClasses.indexOf(\"close-icon-button\") !== -1) this.showDisclaimer = false;\r\n }\r\n }\r\n\r\n public localizor: BiLocalizationHelperBaseService;\r\n private router: Router;\r\n protected sharedService: SubscriptionModuleBaseSharedService;\r\n protected announcer: LiveAnnouncer;\r\n protected titleService: Title;\r\n private document: Document;\r\n protected domService: BiDomService;\r\n private googleCaptchaManager: GoogleCaptchaManagerService;\r\n\r\n constructor(\r\n protected translator: BiTranslateService,\r\n protected cd: ChangeDetectorRef,\r\n protected notifier: BiToastNotificationService,\r\n protected subscriptionService: SubscribeModuleBaseService,\r\n sharedService: SubscriptionModuleBaseSharedService\r\n ) {\r\n this.localizor = inject(BiLocalizationHelperBaseService);\r\n this.router = inject(Router);\r\n this.sharedService = sharedService;\r\n this.announcer = inject(LiveAnnouncer);\r\n this.titleService = inject(Title);\r\n this.document = inject(DOCUMENT);\r\n this.domService = inject(BiDomService);\r\n this.googleCaptchaManager = inject(GoogleCaptchaManagerService);\r\n }\r\n\r\n public ngOnInit() {\r\n // In order to show a scroll bar if the iFrame isn't hight enough for all content\r\n document.body.style.overflowY = \"auto\";\r\n\r\n this.getIndexHtmlTitle()\r\n .pipe(untilDestroyed(this))\r\n .subscribe(title => this.titleService.setTitle(title));\r\n\r\n // First get URL params\r\n this.sharedService\r\n .getAndSetUrlParams()\r\n .pipe(\r\n untilDestroyed(this),\r\n switchMap(() => {\r\n // The customerId parameter must be present - otherwise inform user by setting flag true\r\n if (isStringNullOrEmpty(this.sharedService.urlParams.customerId)) {\r\n this.customerGuidMissing = true;\r\n return EMPTY;\r\n }\r\n return this.sharedService.initModuleConfigObject(\r\n this.sharedService.urlParams.customerId,\r\n this.sharedService.urlParams.language ? this.localizor.getLanguageIdByLanguageCode(this.sharedService.urlParams.language) : undefined\r\n );\r\n })\r\n )\r\n .subscribe({\r\n next: (model: any) => {\r\n this.configureLanguage();\r\n this.googleCaptchaConfig = this.googleCaptchaManager.getConfig(this.sharedService.urlParams.language);\r\n this.processUrlParams();\r\n this.initMobileEmailForm();\r\n this.anonymousAccessToken = model.accessToken;\r\n this.loading = false;\r\n this.cd.detectChanges();\r\n },\r\n error: err => this.checkForCustomerError(err)\r\n });\r\n }\r\n\r\n private configureLanguage() {\r\n let language2Set = this.sharedService.urlParams.language;\r\n // Set language if set eksplicitly via URL parameter\r\n if (isStringNullOrEmpty(language2Set)) {\r\n switch (this.sharedService.countryId) {\r\n case BiCountryId.DK:\r\n language2Set = \"da\";\r\n break;\r\n case BiCountryId.SE:\r\n language2Set = \"sv\";\r\n break;\r\n case BiCountryId.FI:\r\n language2Set = \"fi\";\r\n break;\r\n case BiCountryId.EN:\r\n language2Set = \"en\";\r\n break;\r\n case BiCountryId.NO:\r\n language2Set = \"no\";\r\n break;\r\n }\r\n }\r\n\r\n this.localizor.setLanguage(language2Set === \"sv\" ? \"se\" : language2Set);\r\n this.document.documentElement.lang = language2Set === \"se\" ? \"sv\" : language2Set;\r\n }\r\n\r\n /**\r\n * Resets all flags and values\r\n */\r\n public onReset() {\r\n // Make sure that user can't reset last entered info by just clicking reset on first page\r\n if (this.currentStep !== 1) {\r\n this.lastEmailUsed = undefined;\r\n this.lastPhoneNumberUsed = undefined;\r\n this.lastPinRequestDateTime = undefined;\r\n }\r\n\r\n this.showEnterPinArea = false;\r\n this.showCaptcha = false;\r\n this.currentStep = 1;\r\n this.requestingPinCode = false;\r\n this.verifyingPinCode = false;\r\n this.pinInvalid = undefined;\r\n this.pinValid = undefined;\r\n this.pinVerified = false;\r\n this.pinCodeCtrl.reset();\r\n this.sharedService.setSubscriberInfo({});\r\n this.mobileEmailForm.reset(undefined, { emitEvent: false });\r\n this.mobileEmailForm.markAsPristine();\r\n this.mobileEmailForm.markAsUntouched();\r\n }\r\n\r\n protected initMobileEmailForm() {\r\n const mobileRequired = this.sharedService.urlParams.hideEmailInput && !+this.sharedService.urlParams.showLandline;\r\n\r\n this.mobileEmailForm = new FormGroup({\r\n mobile: new FormControl(null, mobileRequired ? Validators.required : undefined),\r\n email: new FormControl(\"\", CustomValidators.email()),\r\n name: new FormControl(\"\", this.isNameRequired ? Validators.required : undefined),\r\n recaptcha: new FormControl(\"\")\r\n });\r\n\r\n // add the landline control if URL param true\r\n if (this.sharedService.urlParams.showLandline) this.mobileEmailForm.addControl(\"landline\", new FormControl(undefined));\r\n\r\n // Use timeout before setting validators in order to not run the validators after form is initialized\r\n setTimeout(() => {\r\n if (!this.sharedService.urlParams.hideEmailInput || this.sharedService.urlParams.showLandline) {\r\n if (!this.sharedService.urlParams.hideEmailInput && !this.sharedService.urlParams.showLandline) {\r\n this.mobileCtrl.addValidators([CustomValidators.checkAtLeastOneHasValue(this.emailCtrl)]);\r\n this.emailCtrl.setValidators([CustomValidators.checkAtLeastOneHasValue(this.mobileCtrl), CustomValidators.email()]);\r\n } else if (this.sharedService.urlParams.hideEmailInput && this.sharedService.urlParams.showLandline) {\r\n this.mobileCtrl.addValidators([CustomValidators.checkAtLeastOneHasValue(this.landlineCtrl)]);\r\n this.landlineCtrl.addValidators([CustomValidators.checkAtLeastOneHasValue(this.mobileCtrl)]);\r\n } else {\r\n // both email and landline is present\r\n this.mobileCtrl.addValidators([CustomValidators.checkAtLeastOneHasValue(this.landlineCtrl, this.emailCtrl)]);\r\n this.landlineCtrl.addValidators([CustomValidators.checkAtLeastOneHasValue(this.mobileCtrl, this.emailCtrl)]);\r\n this.emailCtrl.setValidators([CustomValidators.checkAtLeastOneHasValue(this.mobileCtrl, this.landlineCtrl), CustomValidators.email()]);\r\n }\r\n }\r\n\r\n if (this.sharedService.allowOnlySingleContactInfo) this.setupOnlyOneContactInfoAtATimeValidation();\r\n\r\n this.updateContactInfoCtrlsValueAndValidity();\r\n }, 0);\r\n\r\n // When the name input is updated, trigger update on the other controls\r\n this.nameCtrl.valueChanges.pipe(untilDestroyed(this), distinctUntilChanged()).subscribe(() => this.updateContactInfoCtrlsValueAndValidity());\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n private updateContactInfoCtrlsValueAndValidity() {\r\n this.mobileCtrl.updateValueAndValidity({ onlySelf: true });\r\n this.landlineCtrl?.updateValueAndValidity({ onlySelf: true });\r\n this.emailCtrl.updateValueAndValidity({ onlySelf: true });\r\n }\r\n\r\n /**\r\n * Small helper for toggling the visibility state of the \"enter PIN\"-area.\r\n */\r\n public toggleEnterPinAreaVisibility() {\r\n if (this.showEnterPinArea) {\r\n this.showEnterPinArea = false;\r\n this.mobileEmailForm.enable();\r\n this.pinCodeCtrl.reset();\r\n } else {\r\n this.showEnterPinArea = true;\r\n this.mobileEmailForm.disable();\r\n }\r\n }\r\n\r\n //#region FORMCONTROL GETTERS\r\n public get mobileCtrl() {\r\n return this.mobileEmailForm.get(\"mobile\");\r\n }\r\n public get landlineCtrl() {\r\n return this.mobileEmailForm.get(\"landline\");\r\n }\r\n public get emailCtrl() {\r\n return this.mobileEmailForm.get(\"email\");\r\n }\r\n public get nameCtrl() {\r\n return this.mobileEmailForm.get(\"name\");\r\n }\r\n public get recaptchaCtrl() {\r\n return this.mobileEmailForm.get(\"recaptcha\");\r\n }\r\n //#endregion\r\n\r\n /**\r\n * Processes the url params provided\r\n */\r\n protected processUrlParams() {\r\n // If custom CSS url provided, make sure to load that as the first thing\r\n if (this.sharedService.urlParams.cssUrl) this.domService.loadStyle(this.sharedService.urlParams.cssUrl);\r\n\r\n const cssStringParts: Array = [];\r\n\r\n if (this.sharedService.urlParams.backgroundColor) {\r\n cssStringParts.push(`\r\n .p-panel-content {\r\n background-color: ${this.sharedService.urlParams.backgroundColor} !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.btnColor) {\r\n cssStringParts.push(`\r\n body .p-button, body .p-button:disabled {\r\n --color-button-primary-wcag: ${this.sharedService.urlParams.btnColor};\r\n }\r\n\r\n body .p-button:not(:disabled):enabled:focus,\r\n body .p-button:not(:disabled):hover {\r\n --color-button-primary-wcag: ${this.sharedService.urlParams.btnColor};\r\n }\r\n\r\n #reset-button:hover, #reset-button:focus {\r\n --color-reset-button-hover: ${this.sharedService.urlParams.btnColor};\r\n }\r\n\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.btnHoverColor) {\r\n cssStringParts.push(`\r\n body .p-button:enabled:hover {\r\n --color-button-primary-wcag: ${this.sharedService.urlParams.btnHoverColor};\r\n }\r\n #reset-button:hover, #reset-button:focus {\r\n --color-reset-button-hover: ${this.sharedService.urlParams.btnHoverColor};\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.btnFontSize) {\r\n cssStringParts.push(`\r\n body .p-button {\r\n font-size: ${this.sharedService.urlParams.btnFontSize}px !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.btnFontColor) {\r\n cssStringParts.push(`\r\n body .p-button, #show-disclaimer-text-button {\r\n color: ${this.sharedService.urlParams.btnFontColor} !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.backColor) {\r\n cssStringParts.push(`\r\n #reset-button > span {\r\n color: ${this.sharedService.urlParams.backColor};\r\n }\r\n `);\r\n }\r\n\r\n //#region Font\r\n if (this.sharedService.urlParams.fontColor) {\r\n cssStringParts.push(`\r\n body .FieldLabel, body .sub-header {\r\n color: ${this.sharedService.urlParams.fontColor};\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.fontSize) {\r\n cssStringParts.push(`\r\n body .FieldLabel, .sub-header {\r\n font-size: ${this.sharedService.urlParams.fontSize}px !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.inputFontSize) {\r\n cssStringParts.push(`\r\n body .p-inputtext {\r\n font-size: ${this.sharedService.urlParams.inputFontSize}px !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.fontFamily) {\r\n cssStringParts.push(`\r\n .subscription-panel .p-panel-header .header,\r\n .sub-header.enter-contact-info-text,\r\n .FieldLabel,\r\n #show-disclaimer-text-button,\r\n .subscriber-infos span,\r\n\r\n .p-card.p-component .p-card-content *,\r\n p,\r\n ${!this.sharedService.urlParams.inputFontFamily ? \"body .p-inputtext,\" : \"\"}\r\n .p-button .p-button-label {\r\n font-family: ${this.sharedService.urlParams.fontFamily} !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.inputFontFamily && !this.sharedService.urlParams.fontFamily) {\r\n cssStringParts.push(`\r\n body, body .p-inputtext {\r\n font-family: ${this.sharedService.urlParams.inputFontFamily} !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.thankYouTextColor) {\r\n cssStringParts.push(`\r\n body subscription-confirmed-container {\r\n color: ${this.sharedService.urlParams.thankYouTextColor} !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.disclaimerTextColor) {\r\n cssStringParts.push(`\r\n #show-disclaimer-text-button {\r\n color: ${this.sharedService.urlParams.disclaimerTextColor} !important\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.fontUrl) this.domService.loadStyle(this.sharedService.urlParams.fontUrl);\r\n\r\n //#endregion\r\n\r\n // Header Styles\r\n if (this.sharedService.urlParams.headerSize) {\r\n cssStringParts.push(`\r\n .subscription-panel .p-panel-header .p-panel-title {\r\n font-size: ${this.sharedService.urlParams.headerSize}px !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.headerFontColor) {\r\n cssStringParts.push(`\r\n .subscription-panel .p-panel-header .header {\r\n color: ${this.sharedService.urlParams.headerFontColor} !important;\r\n }\r\n `);\r\n }\r\n\r\n if (this.sharedService.urlParams.headerColor) {\r\n cssStringParts.push(`\r\n .subscription-panel .p-panel-header {\r\n background-color: ${this.sharedService.urlParams.headerColor} !important;\r\n box-shadow: 0 0 0.1875em 0.0625em ${this.sharedService.urlParams.headerColor} !important;\r\n }\r\n `);\r\n }\r\n\r\n // Borders\r\n if (this.sharedService.urlParams.borderColor) {\r\n cssStringParts.push(`.subscription-panel .p-panel.p-component {\r\n border-color: ${this.sharedService.urlParams.borderColor} !important;\r\n }`);\r\n }\r\n if (this.sharedService.urlParams.borders && (this.sharedService.urlParams.borders.toString() === \"0\" || this.sharedService.urlParams.borders.toString() === \"false\")) {\r\n cssStringParts.push(`.subscription-panel .p-panel.p-component {\r\n border: none !important;\r\n }`);\r\n }\r\n\r\n // Apply CSS\r\n this.domService.insertGlobalCss(cssStringParts.join(\"\"));\r\n }\r\n\r\n /**\r\n * Must return this title to be used for the title tag in index.html\r\n */\r\n protected getIndexHtmlTitle() {\r\n return this.translator.onLangChange.pipe(map(() => this.translator.instant(\"subscriptionModule.IndexTitle\")));\r\n }\r\n\r\n //#region EVENTHANDLERS\r\n\r\n /**\r\n * callback for when user either hits OK or \"Send PIN kode\" - depending on whether PIN-authentiation is\r\n * enabled or not\r\n */\r\n public onOkOrSendCodeClicked() {\r\n if (this.mobileEmailForm.invalid) {\r\n this.mobileCtrl.markAsTouched();\r\n this.emailCtrl.markAsTouched();\r\n this.nameCtrl.markAsTouched();\r\n return;\r\n }\r\n\r\n let accessToken: string = this.anonymousAccessToken;\r\n const landline = this.phoneInputVoice?.getValueWithCode();\r\n const mobile = this.phoneInput.getValueWithCode();\r\n\r\n this.sharedService.setSubscriberInfo({\r\n mobileNumber: this.phoneInput.getValueWithCode(),\r\n landlineNumber: this.phoneInputVoice?.getValueWithCode(),\r\n email: this.emailCtrl.value,\r\n name: this.nameCtrl.value\r\n });\r\n\r\n if (window.sessionStorage.getItem(\"accessTokenModel\")) {\r\n accessToken = JSON.parse(window.sessionStorage.getItem(\"accessTokenModel\")).accessToken;\r\n }\r\n\r\n // disableAuth is set, we need to issue a token, without authentication the user\r\n if (this.sharedService.urlParams.disableAuth && Number(this.sharedService.urlParams.disableAuth) === 1) {\r\n accessToken = this.sharedService.urlParams.customerId;\r\n }\r\n\r\n // Did user re-request a PIN for same number and/or email within some minutes? Then don't do anything but inform user\r\n if (this.lastPinRequestDateTime && this.lastPinRequestDateTime.diff(moment(), \"m\") < minBeforePinCanBeRerequested) {\r\n if (\r\n (!this.lastPhoneNumberUsed && this.lastEmailUsed && areStringsEqual(this.lastEmailUsed, this.emailCtrl.value)) ||\r\n (this.lastPhoneNumberUsed && areStringsEqual(this.lastPhoneNumberUsed, mobile)) ||\r\n (this.phoneInputVoice && this.lastPhoneNumberUsed && areStringsEqual(this.lastPhoneNumberUsed, landline))\r\n )\r\n this.notifier.createNotification(\r\n new BiNotificationConfig(\r\n NotificationType.WARNING,\r\n this.translator.instant(\"iFrame.Subscription.PinAlreadySent\", {\r\n minutes: minBeforePinCanBeRerequested\r\n })\r\n )\r\n );\r\n return;\r\n }\r\n\r\n this.requestingPinCode = true;\r\n\r\n const pinCodeObservable = this.subscriptionService.requestPinCodeAttempt({\r\n customerGuid: this.sharedService.urlParams.customerId,\r\n urlParams: this.sharedService.urlParams,\r\n pageNameId: this.pageNameId,\r\n phoneNumber: mobile,\r\n landline: landline,\r\n email: this.emailCtrl.value,\r\n accessToken\r\n });\r\n\r\n let observable$: Observable;\r\n\r\n // If captcha is active, we must validate on server first\r\n if (this.showCaptcha) {\r\n observable$ = this.googleCaptchaManager.validateGoogleCaptchaToken(this.pageNameId).pipe(\r\n switchMap(isValid => {\r\n if (isValid) return pinCodeObservable;\r\n else {\r\n this.notifier.createNotification(new BiNotificationConfig(NotificationType.WARNING, this.translator.instant(\"shared.ErrorInCaptcha\")));\r\n this.recaptchaComponent.resetCaptcha();\r\n this.mobileEmailForm.reset();\r\n return EMPTY;\r\n }\r\n }),\r\n untilDestroyed(this),\r\n take(1)\r\n );\r\n } else observable$ = pinCodeObservable.pipe(untilDestroyed(this), take(1));\r\n\r\n // Reset the date of PIN code request and keep track of the last email and number used\r\n this.lastPinRequestDateTime = moment();\r\n this.lastEmailUsed = this.emailCtrl.value;\r\n this.lastPhoneNumberUsed = landline ?? mobile;\r\n observable$\r\n .pipe(\r\n finalize(() => {\r\n this.requestingPinCode = false;\r\n this.cd.detectChanges();\r\n })\r\n )\r\n .subscribe({\r\n next: (token: AnonymousTokenModel) => {\r\n this.showCaptcha = false;\r\n this.recaptchaCtrl.clearValidators();\r\n this.recaptchaCtrl.reset();\r\n\r\n if (token) {\r\n this.sharedService.setSubscriberInfo({ ...this.sharedService.getCurrentSubscriberInfo(), accessToken: token.accessToken });\r\n this.currentStep = 2;\r\n this.cd.detectChanges();\r\n return;\r\n }\r\n this.toggleEnterPinAreaVisibility();\r\n setTimeout(() => {\r\n this.pinCodeCtrl.markAsPristine();\r\n (this.pinInput.nativeElement as HTMLInputElement).focus();\r\n }, 0);\r\n },\r\n error: err => this.handlePinRequestError(err)\r\n });\r\n }\r\n\r\n public onVerifyPinCode() {\r\n if (this.pinCodeCtrl.invalid) {\r\n this.pinCodeCtrl.markAsTouched();\r\n return;\r\n }\r\n this.announcer.clear();\r\n\r\n this.verifyingPinCode = true;\r\n this.pinValid = false;\r\n this.pinInvalid = false;\r\n this.subscriptionService\r\n .verifyPinCode(\r\n this.sharedService.urlParams.customerId,\r\n this.pageNameId,\r\n this.pinCodeCtrl.value,\r\n this.phoneInput.getValueWithCode(),\r\n this.landlineCtrl && !isStringNullOrEmpty(this.landlineCtrl.value) ? this.phoneInputVoice.getValueWithCode() : null,\r\n this.emailCtrl.value\r\n )\r\n .pipe(\r\n untilDestroyed(this),\r\n finalize(() => {\r\n this.verifyingPinCode = false;\r\n this.cd.detectChanges();\r\n })\r\n )\r\n .subscribe({\r\n next: token => {\r\n this.pinValid = true;\r\n this.pinVerified = true;\r\n this.sharedService.setSubscriberInfo({ ...this.sharedService.getCurrentSubscriberInfo(), accessToken: token.accessToken });\r\n\r\n // PIN succesfully verified - now go get subscription overview data\r\n this.currentStep = 2;\r\n this.toggleEnterPinAreaVisibility();\r\n this.announcer.announce(this.translator.instant(\"shared.Verified\"));\r\n\r\n this.sharedService.refreshData().subscribe(() => this.cd.detectChanges());\r\n },\r\n error: (error: HttpErrorResponse) => {\r\n this.verifyingPinCode = false;\r\n this.pinValid = false;\r\n if (error.status == 429) {\r\n this.notifier.createNotification(\r\n new BiNotificationConfig(\r\n NotificationType.WARNING,\r\n this.translator.instant(\"iFrame.Subscription.PinAttemptedTooManyTimes\", {\r\n minutes: minBeforePinCanBeRerequested\r\n })\r\n )\r\n );\r\n this.toggleEnterPinAreaVisibility();\r\n } else {\r\n this.pinInvalid = true;\r\n this.pinVerified = true;\r\n this.announcer.announce(this.translator.instant(\"shared.InvalidPin\"));\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Fired after user finished captcha program\r\n */\r\n public onCaptchaSuccess(responseToken: string) {\r\n this.googleCaptchaManager.setResponseToken(responseToken);\r\n this.lastEmailUsed = undefined;\r\n this.lastPhoneNumberUsed = undefined;\r\n this.lastPinRequestDateTime = undefined;\r\n this.announcer.announce(this.translator.instant(\"googleCaptcha.Verified\"));\r\n }\r\n\r\n public onSkipToMainContentClicked(e: Event) {\r\n e.preventDefault();\r\n this.announcer.announce(this.translator.instant(this.subHeaderTranslationKey));\r\n setTimeout(() => this.phoneInput.focusOnCountrycodeSelector(), 100);\r\n return false;\r\n }\r\n\r\n //#endregion\r\n\r\n protected handlePinRequestError(err: HttpErrorResponse) {\r\n // check error type and act accordingly\r\n if (err.status === 429) {\r\n // HTTP 429 = too many requests. Use captcha\r\n this.notifier.createNotification(new BiNotificationConfig(NotificationType.WARNING, undefined, this.translator.instant(\"iFrame.Subscription.PleaseUseCaptcha\")));\r\n this.showCaptcha = true;\r\n this.announcer.announce(this.translator.instant(\"googleCaptcha.MarkNotRobot\"));\r\n\r\n this.recaptchaCtrl.setValidators(Validators.required);\r\n } else if (err.error.errorMessage === \"Invalid\") {\r\n this.notifier.createNotification(new BiNotificationConfig(NotificationType.WARNING, undefined, this.translator.instant(\"iFrame.Subscription.InvalidPleaseReload\")));\r\n this.announcer.announce(this.translator.instant(\"iFrame.Subscription.InvalidPleaseReload\"));\r\n } else {\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Finds out if an HTTP error has occurred because the customer wasn't found and sets\r\n * error flag accordingly - if it wasn't the case, the error is just thrown to global handler\r\n */\r\n protected checkForCustomerError(error: BiHttpErrorResponse) {\r\n if (error.error?.errorMessage.indexOf(\"customer\") !== -1) {\r\n this.router.navigate([SharedRouteNames.unavailable], {\r\n state: { message: this.translator.instant(\"iFrame.ModuleNotActive\") }\r\n });\r\n return EMPTY;\r\n } else {\r\n throw error;\r\n }\r\n }\r\n\r\n protected setupOnlyOneContactInfoAtATimeValidation() {\r\n this.mobileEmailForm.valueChanges.pipe(untilDestroyed(this), distinctUntilChanged(), debounceTime(300)).subscribe((formData: MobileEmailFormValue) => {\r\n if (!isStringNullOrEmpty(formData.mobile)) {\r\n this.landlineCtrl?.reset(\"\", { emitEvent: false });\r\n this.landlineCtrl?.disable({ emitEvent: false });\r\n this.emailCtrl.reset(\"\", { emitEvent: false });\r\n this.emailCtrl.disable({ emitEvent: false });\r\n } else if (!isStringNullOrEmpty(formData.email)) {\r\n this.mobileCtrl.reset(\"\", { emitEvent: false });\r\n this.mobileCtrl.disable({ emitEvent: false });\r\n this.landlineCtrl?.reset(\"\", { emitEvent: false });\r\n this.landlineCtrl?.disable({ emitEvent: false });\r\n } else if (!isStringNullOrEmpty(formData.landline)) {\r\n this.mobileCtrl.reset(\"\", { emitEvent: false });\r\n this.mobileCtrl.disable({ emitEvent: false });\r\n this.emailCtrl?.reset(\"\", { emitEvent: false });\r\n this.emailCtrl?.disable({ emitEvent: false });\r\n } else {\r\n this.mobileCtrl.enable({ emitEvent: false });\r\n this.landlineCtrl?.enable({ emitEvent: false });\r\n this.emailCtrl.enable({ emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n public onShowDisclaimerChanged(show: boolean) {\r\n this.showDisclaimer = show;\r\n if (show) this.announcer.announce(stripHtml(this.sharedService.disclaimerText));\r\n else this.announcer.clear();\r\n }\r\n}\r\n","import { Directive, inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { BiCountryId, BiLanguageId } from \"@globals/enums/BiLanguageAndCountryId\";\r\nimport { cloneObject } from \"@globals/helper-functions\";\r\nimport { SubscriptionUrlParams } from \"@globals/models/SubscriptionUrlParams\";\r\nimport { SubscriptionDto } from \"@globals/openapi-models/model/subscriptionDto\";\r\nimport { LanguageConfig } from \"@globals/services/bi-localization-helper-base.service\";\r\nimport { Observable, of, take, tap } from \"rxjs\";\r\n\r\nexport type SubscriberInfo = {\r\n mobileNumber?: string;\r\n landlineNumber?: string;\r\n email?: string;\r\n name?: string;\r\n accessToken?: string;\r\n};\r\n\r\n/**\r\n * Base class used for shared services in Subscription modules\r\n */\r\n@Directive()\r\nexport abstract class SubscriptionModuleBaseSharedService {\r\n public refreshData(): Observable {\r\n return of([]);\r\n }\r\n\r\n public countryId: BiCountryId = BiCountryId.DK;\r\n public customerId: number;\r\n /**\r\n * The language configurations based on customer's language\r\n */\r\n public languageConfig: LanguageConfig;\r\n\r\n public urlParams: SubscriptionUrlParams;\r\n public disclaimerText: string;\r\n public allowOnlySingleContactInfo: boolean;\r\n\r\n protected currentSubscriberInfo: SubscriberInfo;\r\n\r\n protected activeRoute: ActivatedRoute;\r\n public constructor() {\r\n this.activeRoute = inject(ActivatedRoute);\r\n }\r\n\r\n public setSubscriberInfo(info: SubscriberInfo) {\r\n this.currentSubscriberInfo = info;\r\n }\r\n\r\n public getCurrentSubscriberInfo(): SubscriberInfo {\r\n return this.currentSubscriberInfo;\r\n }\r\n\r\n public getAndSetUrlParams() {\r\n return this.activeRoute.queryParams.pipe(\r\n take(1),\r\n tap(params => {\r\n this.urlParams = params;\r\n this.correctUrlColorParams();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * For getting the module's settings by customer public id\r\n */\r\n public abstract initModuleConfigObject(publicId: string, languageId?: BiLanguageId): any;\r\n\r\n /**\r\n * For getting the data to display in a list of subscriptions (the subscription data).\r\n */\r\n public abstract getSubscriptionListData(onlyBusiness?: boolean, onlyPrivate?: boolean);\r\n\r\n /**\r\n * Checks all URL params used for setting color styling that if they do not have a #-sign at the beginning, it'll be added\r\n * so that correct HEX-value is ued in CSS\r\n */\r\n private correctUrlColorParams() {\r\n const urlParamsClone = cloneObject(this.urlParams);\r\n\r\n urlParamsClone.referrer = window?.document?.referrer;\r\n\r\n if (window?.location?.href.indexOf(\"std-receivers\") > -1) {\r\n urlParamsClone.module = \"Std-receivers\";\r\n } else {\r\n urlParamsClone.module = \"Subscription\";\r\n }\r\n\r\n if (this.urlParams.btnColor && this.urlParams.btnColor.indexOf(\"#\") === -1) urlParamsClone.btnColor = \"#\" + this.urlParams.btnColor;\r\n if (this.urlParams.btnFontColor && this.urlParams.btnFontColor.indexOf(\"#\") === -1) urlParamsClone.btnFontColor = \"#\" + this.urlParams.btnFontColor;\r\n\r\n if (this.urlParams.backgroundColor && this.urlParams.backgroundColor.indexOf(\"#\") === -1) urlParamsClone.backgroundColor = \"#\" + this.urlParams.backgroundColor;\r\n if (this.urlParams.backColor && this.urlParams.backColor.indexOf(\"#\") === -1) urlParamsClone.backColor = \"#\" + this.urlParams.backColor;\r\n\r\n if (this.urlParams.headerFontColor && this.urlParams.headerFontColor.indexOf(\"#\") === -1) urlParamsClone.headerFontColor = \"#\" + this.urlParams.headerFontColor;\r\n\r\n if (this.urlParams.headerColor && this.urlParams.headerColor.indexOf(\"#\") === -1) urlParamsClone.headerColor = \"#\" + this.urlParams.headerColor;\r\n\r\n if (this.urlParams.fontColor && this.urlParams.fontColor.indexOf(\"#\") === -1) urlParamsClone.fontColor = \"#\" + this.urlParams.fontColor;\r\n\r\n if (this.urlParams.btnHoverColor && this.urlParams.btnHoverColor.indexOf(\"#\") === -1) urlParamsClone.btnHoverColor = \"#\" + this.urlParams.btnHoverColor;\r\n\r\n if (this.urlParams.borderColor && this.urlParams.borderColor.indexOf(\"#\") === -1) urlParamsClone.borderColor = \"#\" + this.urlParams.borderColor;\r\n if (this.urlParams.thankYouTextColor && this.urlParams.thankYouTextColor.indexOf(\"#\") === -1) urlParamsClone.thankYouTextColor = \"#\" + this.urlParams.thankYouTextColor;\r\n if (this.urlParams.disclaimerTextColor && this.urlParams.disclaimerTextColor.indexOf(\"#\") === -1) urlParamsClone.disclaimerTextColor = \"#\" + this.urlParams.disclaimerTextColor;\r\n\r\n this.urlParams = urlParamsClone;\r\n }\r\n}\r\n","import { asyncScheduler } from '../scheduler/async';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function debounceTime(dueTime, scheduler = asyncScheduler) {\n return operate((source, subscriber) => {\n let activeTask = null;\n let lastValue = null;\n let lastTime = null;\n const emit = () => {\n if (activeTask) {\n activeTask.unsubscribe();\n activeTask = null;\n const value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle() {\n const targetTime = lastTime + dueTime;\n const now = scheduler.now();\n if (now < targetTime) {\n activeTask = this.schedule(undefined, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n emit();\n }\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n lastValue = value;\n lastTime = scheduler.now();\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n }, () => {\n emit();\n subscriber.complete();\n }, undefined, () => {\n lastValue = activeTask = null;\n }));\n });\n}\n","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector = identity) {\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate((source, subscriber) => {\n let previousKey;\n let first = true;\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n const currentKey = keySelector(value);\n if (first || !comparator(previousKey, currentKey)) {\n first = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n","import * as i0 from '@angular/core';\nimport { inject, PLATFORM_ID, Injectable, NgModule } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n// Whether the current platform supports the V8 Break Iterator. The V8 check\n// is necessary to detect all Blink based browsers.\nlet hasV8BreakIterator;\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n hasV8BreakIterator = typeof Intl !== 'undefined' && Intl.v8BreakIterator;\n}\ncatch {\n hasV8BreakIterator = false;\n}\n/**\n * Service to detect the current platform by comparing the userAgent strings and\n * checking browser-specific global properties.\n */\nclass Platform {\n _platformId = inject(PLATFORM_ID);\n // We want to use the Angular platform check because if the Document is shimmed\n // without the navigator, the following checks will fail. This is preferred because\n // sometimes the Document may be shimmed without the user's knowledge or intention\n /** Whether the Angular application is being rendered in the browser. */\n isBrowser = this._platformId\n ? isPlatformBrowser(this._platformId)\n : typeof document === 'object' && !!document;\n /** Whether the current browser is Microsoft Edge. */\n EDGE = this.isBrowser && /(edge)/i.test(navigator.userAgent);\n /** Whether the current rendering engine is Microsoft Trident. */\n TRIDENT = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\n // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\n /** Whether the current rendering engine is Blink. */\n BLINK = this.isBrowser &&\n !!(window.chrome || hasV8BreakIterator) &&\n typeof CSS !== 'undefined' &&\n !this.EDGE &&\n !this.TRIDENT;\n // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\n // ensure that Webkit runs standalone and is not used as another engine's base.\n /** Whether the current rendering engine is WebKit. */\n WEBKIT = this.isBrowser &&\n /AppleWebKit/i.test(navigator.userAgent) &&\n !this.BLINK &&\n !this.EDGE &&\n !this.TRIDENT;\n /** Whether the current platform is Apple iOS. */\n IOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);\n // It's difficult to detect the plain Gecko engine, because most of the browsers identify\n // them self as Gecko-like browsers and modify the userAgent's according to that.\n // Since we only cover one explicit Firefox case, we can simply check for Firefox\n // instead of having an unstable check for Gecko.\n /** Whether the current browser is Firefox. */\n FIREFOX = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\n /** Whether the current platform is Android. */\n // Trident on mobile adds the android platform to the userAgent to trick detections.\n ANDROID = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\n // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\n // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\n // Safari browser should also use Webkit as its layout engine.\n /** Whether the current browser is Safari. */\n SAFARI = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\n constructor() { }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: Platform, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: Platform, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: Platform, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n\nclass PlatformModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: PlatformModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"19.0.0\", ngImport: i0, type: PlatformModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: PlatformModule });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: PlatformModule, decorators: [{\n type: NgModule,\n args: [{}]\n }] });\n\n/** Cached result Set of input types support by the current browser. */\nlet supportedInputTypes;\n/** Types of `` that *might* be supported. */\nconst candidateInputTypes = [\n // `color` must come first. Chrome 56 shows a warning if we change the type to `color` after\n // first changing it to something else:\n // The specified value \"\" does not conform to the required format.\n // The format is \"#rrggbb\" where rr, gg, bb are two-digit hexadecimal numbers.\n 'color',\n 'button',\n 'checkbox',\n 'date',\n 'datetime-local',\n 'email',\n 'file',\n 'hidden',\n 'image',\n 'month',\n 'number',\n 'password',\n 'radio',\n 'range',\n 'reset',\n 'search',\n 'submit',\n 'tel',\n 'text',\n 'time',\n 'url',\n 'week',\n];\n/** @returns The input types supported by this browser. */\nfunction getSupportedInputTypes() {\n // Result is cached.\n if (supportedInputTypes) {\n return supportedInputTypes;\n }\n // We can't check if an input type is not supported until we're on the browser, so say that\n // everything is supported when not on the browser. We don't use `Platform` here since it's\n // just a helper function and can't inject it.\n if (typeof document !== 'object' || !document) {\n supportedInputTypes = new Set(candidateInputTypes);\n return supportedInputTypes;\n }\n let featureTestInput = document.createElement('input');\n supportedInputTypes = new Set(candidateInputTypes.filter(value => {\n featureTestInput.setAttribute('type', value);\n return featureTestInput.type === value;\n }));\n return supportedInputTypes;\n}\n\n/** Cached result of whether the user's browser supports passive event listeners. */\nlet supportsPassiveEvents;\n/**\n * Checks whether the user's browser supports passive event listeners.\n * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nfunction supportsPassiveEventListeners() {\n if (supportsPassiveEvents == null && typeof window !== 'undefined') {\n try {\n window.addEventListener('test', null, Object.defineProperty({}, 'passive', {\n get: () => (supportsPassiveEvents = true),\n }));\n }\n finally {\n supportsPassiveEvents = supportsPassiveEvents || false;\n }\n }\n return supportsPassiveEvents;\n}\n/**\n * Normalizes an `AddEventListener` object to something that can be passed\n * to `addEventListener` on any browser, no matter whether it supports the\n * `options` parameter.\n * @param options Object to be normalized.\n */\nfunction normalizePassiveListenerOptions(options) {\n return supportsPassiveEventListeners() ? options : !!options.capture;\n}\n\n/** The possible ways the browser may handle the horizontal scroll axis in RTL languages. */\nvar RtlScrollAxisType;\n(function (RtlScrollAxisType) {\n /**\n * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled\n * all the way right.\n */\n RtlScrollAxisType[RtlScrollAxisType[\"NORMAL\"] = 0] = \"NORMAL\";\n /**\n * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n * all the way right.\n */\n RtlScrollAxisType[RtlScrollAxisType[\"NEGATED\"] = 1] = \"NEGATED\";\n /**\n * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n * all the way right.\n */\n RtlScrollAxisType[RtlScrollAxisType[\"INVERTED\"] = 2] = \"INVERTED\";\n})(RtlScrollAxisType || (RtlScrollAxisType = {}));\n/** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */\nlet rtlScrollAxisType;\n/** Cached result of the check that indicates whether the browser supports scroll behaviors. */\nlet scrollBehaviorSupported;\n/** Check whether the browser supports scroll behaviors. */\nfunction supportsScrollBehavior() {\n if (scrollBehaviorSupported == null) {\n // If we're not in the browser, it can't be supported. Also check for `Element`, because\n // some projects stub out the global `document` during SSR which can throw us off.\n if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) {\n scrollBehaviorSupported = false;\n return scrollBehaviorSupported;\n }\n // If the element can have a `scrollBehavior` style, we can be sure that it's supported.\n if ('scrollBehavior' in document.documentElement.style) {\n scrollBehaviorSupported = true;\n }\n else {\n // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's\n // supported but it doesn't handle scroll behavior, or it has been polyfilled.\n const scrollToFunction = Element.prototype.scrollTo;\n if (scrollToFunction) {\n // We can detect if the function has been polyfilled by calling `toString` on it. Native\n // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get\n // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider\n // polyfilled functions as supporting scroll behavior.\n scrollBehaviorSupported = !/\\{\\s*\\[native code\\]\\s*\\}/.test(scrollToFunction.toString());\n }\n else {\n scrollBehaviorSupported = false;\n }\n }\n }\n return scrollBehaviorSupported;\n}\n/**\n * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,\n * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.\n */\nfunction getRtlScrollAxisType() {\n // We can't check unless we're on the browser. Just assume 'normal' if we're not.\n if (typeof document !== 'object' || !document) {\n return RtlScrollAxisType.NORMAL;\n }\n if (rtlScrollAxisType == null) {\n // Create a 1px wide scrolling container and a 2px wide content element.\n const scrollContainer = document.createElement('div');\n const containerStyle = scrollContainer.style;\n scrollContainer.dir = 'rtl';\n containerStyle.width = '1px';\n containerStyle.overflow = 'auto';\n containerStyle.visibility = 'hidden';\n containerStyle.pointerEvents = 'none';\n containerStyle.position = 'absolute';\n const content = document.createElement('div');\n const contentStyle = content.style;\n contentStyle.width = '2px';\n contentStyle.height = '1px';\n scrollContainer.appendChild(content);\n document.body.appendChild(scrollContainer);\n rtlScrollAxisType = RtlScrollAxisType.NORMAL;\n // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL\n // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're\n // dealing with one of the other two types of browsers.\n if (scrollContainer.scrollLeft === 0) {\n // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an\n // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by\n // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will\n // return 0 when we read it again.\n scrollContainer.scrollLeft = 1;\n rtlScrollAxisType =\n scrollContainer.scrollLeft === 0 ? RtlScrollAxisType.NEGATED : RtlScrollAxisType.INVERTED;\n }\n scrollContainer.remove();\n }\n return rtlScrollAxisType;\n}\n\nlet shadowDomIsSupported;\n/** Checks whether the user's browser support Shadow DOM. */\nfunction _supportsShadowDom() {\n if (shadowDomIsSupported == null) {\n const head = typeof document !== 'undefined' ? document.head : null;\n shadowDomIsSupported = !!(head && (head.createShadowRoot || head.attachShadow));\n }\n return shadowDomIsSupported;\n}\n/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */\nfunction _getShadowRoot(element) {\n if (_supportsShadowDom()) {\n const rootNode = element.getRootNode ? element.getRootNode() : null;\n // Note that this should be caught by `_supportsShadowDom`, but some\n // teams have been able to hit this code path on unsupported browsers.\n if (typeof ShadowRoot !== 'undefined' && ShadowRoot && rootNode instanceof ShadowRoot) {\n return rootNode;\n }\n }\n return null;\n}\n/**\n * Gets the currently-focused element on the page while\n * also piercing through Shadow DOM boundaries.\n */\nfunction _getFocusedElementPierceShadowDom() {\n let activeElement = typeof document !== 'undefined' && document\n ? document.activeElement\n : null;\n while (activeElement && activeElement.shadowRoot) {\n const newActiveElement = activeElement.shadowRoot.activeElement;\n if (newActiveElement === activeElement) {\n break;\n }\n else {\n activeElement = newActiveElement;\n }\n }\n return activeElement;\n}\n/** Gets the target of an event while accounting for Shadow DOM. */\nfunction _getEventTarget(event) {\n // If an event is bound outside the Shadow DOM, the `event.target` will\n // point to the shadow root so we have to use `composedPath` instead.\n return (event.composedPath ? event.composedPath()[0] : event.target);\n}\n\n/** Gets whether the code is currently running in a test environment. */\nfunction _isTestEnvironment() {\n // We can't use `declare const` because it causes conflicts inside Google with the real typings\n // for these symbols and we can't read them off the global object, because they don't appear to\n // be attached there for some runners like Jest.\n // (see: https://github.com/angular/components/issues/23365#issuecomment-938146643)\n return (\n // @ts-ignore\n (typeof __karma__ !== 'undefined' && !!__karma__) ||\n // @ts-ignore\n (typeof jasmine !== 'undefined' && !!jasmine) ||\n // @ts-ignore\n (typeof jest !== 'undefined' && !!jest) ||\n // @ts-ignore\n (typeof Mocha !== 'undefined' && !!Mocha));\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Platform, PlatformModule, RtlScrollAxisType, _getEventTarget, _getFocusedElementPierceShadowDom, _getShadowRoot, _isTestEnvironment, _supportsShadowDom, getRtlScrollAxisType, getSupportedInputTypes, normalizePassiveListenerOptions, supportsPassiveEventListeners, supportsScrollBehavior };\n","import * as i0 from '@angular/core';\nimport { inject, Injector, EnvironmentInjector, ApplicationRef, createComponent, Injectable, Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n/** Apps in which we've loaded styles. */\nconst appsWithLoaders = new WeakMap();\n/**\n * Service that loads structural styles dynamically\n * and ensures that they're only loaded once per app.\n */\nclass _CdkPrivateStyleLoader {\n _appRef;\n _injector = inject(Injector);\n _environmentInjector = inject(EnvironmentInjector);\n /**\n * Loads a set of styles.\n * @param loader Component which will be instantiated to load the styles.\n */\n load(loader) {\n // Resolve the app ref lazily to avoid circular dependency errors if this is called too early.\n const appRef = (this._appRef = this._appRef || this._injector.get(ApplicationRef));\n let data = appsWithLoaders.get(appRef);\n // If we haven't loaded for this app before, we have to initialize it.\n if (!data) {\n data = { loaders: new Set(), refs: [] };\n appsWithLoaders.set(appRef, data);\n // When the app is destroyed, we need to clean up all the related loaders.\n appRef.onDestroy(() => {\n appsWithLoaders.get(appRef)?.refs.forEach(ref => ref.destroy());\n appsWithLoaders.delete(appRef);\n });\n }\n // If the loader hasn't been loaded before, we need to instatiate it.\n if (!data.loaders.has(loader)) {\n data.loaders.add(loader);\n data.refs.push(createComponent(loader, { environmentInjector: this._environmentInjector }));\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: _CdkPrivateStyleLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: _CdkPrivateStyleLoader, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: _CdkPrivateStyleLoader, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * Component used to load the .cdk-visually-hidden styles.\n * @docs-private\n */\nclass _VisuallyHiddenLoader {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: _VisuallyHiddenLoader, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"19.0.0\", type: _VisuallyHiddenLoader, isStandalone: true, selector: \"ng-component\", exportAs: [\"cdkVisuallyHidden\"], ngImport: i0, template: '', isInline: true, styles: [\".cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: _VisuallyHiddenLoader, decorators: [{\n type: Component,\n args: [{ exportAs: 'cdkVisuallyHidden', encapsulation: ViewEncapsulation.None, template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}\"] }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { _CdkPrivateStyleLoader, _VisuallyHiddenLoader };\n","import { coerceElement, coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i0 from '@angular/core';\nimport { Injectable, inject, NgZone, ElementRef, EventEmitter, booleanAttribute, Directive, Output, Input, NgModule } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { map, filter, debounceTime } from 'rxjs/operators';\n\n// Angular may add, remove, or edit comment nodes during change detection. We don't care about\n// these changes because they don't affect the user-preceived content, and worse it can cause\n// infinite change detection cycles where the change detection updates a comment, triggering the\n// MutationObserver, triggering another change detection and kicking the cycle off again.\nfunction shouldIgnoreRecord(record) {\n // Ignore changes to comment text.\n if (record.type === 'characterData' && record.target instanceof Comment) {\n return true;\n }\n // Ignore addition / removal of comments.\n if (record.type === 'childList') {\n for (let i = 0; i < record.addedNodes.length; i++) {\n if (!(record.addedNodes[i] instanceof Comment)) {\n return false;\n }\n }\n for (let i = 0; i < record.removedNodes.length; i++) {\n if (!(record.removedNodes[i] instanceof Comment)) {\n return false;\n }\n }\n return true;\n }\n // Observe everything else.\n return false;\n}\n/**\n * Factory that creates a new MutationObserver and allows us to stub it out in unit tests.\n * @docs-private\n */\nclass MutationObserverFactory {\n create(callback) {\n return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: MutationObserverFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n/** An injectable service that allows watching elements for changes to their content. */\nclass ContentObserver {\n _mutationObserverFactory = inject(MutationObserverFactory);\n /** Keeps track of the existing MutationObservers so they can be reused. */\n _observedElements = new Map();\n _ngZone = inject(NgZone);\n constructor() { }\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n observe(elementOrRef) {\n const element = coerceElement(elementOrRef);\n return new Observable((observer) => {\n const stream = this._observeElement(element);\n const subscription = stream\n .pipe(map(records => records.filter(record => !shouldIgnoreRecord(record))), filter(records => !!records.length))\n .subscribe(records => {\n this._ngZone.run(() => {\n observer.next(records);\n });\n });\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n /**\n * Observes the given element by using the existing MutationObserver if available, or creating a\n * new one if not.\n */\n _observeElement(element) {\n return this._ngZone.runOutsideAngular(() => {\n if (!this._observedElements.has(element)) {\n const stream = new Subject();\n const observer = this._mutationObserverFactory.create(mutations => stream.next(mutations));\n if (observer) {\n observer.observe(element, {\n characterData: true,\n childList: true,\n subtree: true,\n });\n }\n this._observedElements.set(element, { observer, stream, count: 1 });\n }\n else {\n this._observedElements.get(element).count++;\n }\n return this._observedElements.get(element).stream;\n });\n }\n /**\n * Un-observes the given element and cleans up the underlying MutationObserver if nobody else is\n * observing this element.\n */\n _unobserveElement(element) {\n if (this._observedElements.has(element)) {\n this._observedElements.get(element).count--;\n if (!this._observedElements.get(element).count) {\n this._cleanupObserver(element);\n }\n }\n }\n /** Clean up the underlying MutationObserver for the specified element. */\n _cleanupObserver(element) {\n if (this._observedElements.has(element)) {\n const { observer, stream } = this._observedElements.get(element);\n if (observer) {\n observer.disconnect();\n }\n stream.complete();\n this._observedElements.delete(element);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ContentObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ContentObserver, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ContentObserver, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n/**\n * Directive that triggers a callback whenever the content of\n * its associated element has changed.\n */\nclass CdkObserveContent {\n _contentObserver = inject(ContentObserver);\n _elementRef = inject(ElementRef);\n /** Event emitted for each change in the element's content. */\n event = new EventEmitter();\n /**\n * Whether observing content is disabled. This option can be used\n * to disconnect the underlying MutationObserver until it is needed.\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = value;\n this._disabled ? this._unsubscribe() : this._subscribe();\n }\n _disabled = false;\n /** Debounce interval for emitting the changes. */\n get debounce() {\n return this._debounce;\n }\n set debounce(value) {\n this._debounce = coerceNumberProperty(value);\n this._subscribe();\n }\n _debounce;\n _currentSubscription = null;\n constructor() { }\n ngAfterContentInit() {\n if (!this._currentSubscription && !this.disabled) {\n this._subscribe();\n }\n }\n ngOnDestroy() {\n this._unsubscribe();\n }\n _subscribe() {\n this._unsubscribe();\n const stream = this._contentObserver.observe(this._elementRef);\n this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.event);\n }\n _unsubscribe() {\n this._currentSubscription?.unsubscribe();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: CdkObserveContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"19.0.0\", type: CdkObserveContent, isStandalone: true, selector: \"[cdkObserveContent]\", inputs: { disabled: [\"cdkObserveContentDisabled\", \"disabled\", booleanAttribute], debounce: \"debounce\" }, outputs: { event: \"cdkObserveContent\" }, exportAs: [\"cdkObserveContent\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: CdkObserveContent, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkObserveContent]',\n exportAs: 'cdkObserveContent',\n }]\n }], ctorParameters: () => [], propDecorators: { event: [{\n type: Output,\n args: ['cdkObserveContent']\n }], disabled: [{\n type: Input,\n args: [{ alias: 'cdkObserveContentDisabled', transform: booleanAttribute }]\n }], debounce: [{\n type: Input\n }] } });\nclass ObserversModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ObserversModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"19.0.0\", ngImport: i0, type: ObserversModule, imports: [CdkObserveContent], exports: [CdkObserveContent] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ObserversModule, providers: [MutationObserverFactory] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ObserversModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CdkObserveContent],\n exports: [CdkObserveContent],\n providers: [MutationObserverFactory],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkObserveContent, ContentObserver, MutationObserverFactory, ObserversModule };\n","import { ElementRef } from '@angular/core';\n\n/** Coerces a data-bound value (typically a string) to a boolean. */\nfunction coerceBooleanProperty(value) {\n return value != null && `${value}` !== 'false';\n}\n\nfunction coerceNumberProperty(value, fallbackValue = 0) {\n if (_isNumberValue(value)) {\n return Number(value);\n }\n return arguments.length === 2 ? fallbackValue : 0;\n}\n/**\n * Whether the provided value is considered a number.\n * @docs-private\n */\nfunction _isNumberValue(value) {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n return !isNaN(parseFloat(value)) && !isNaN(Number(value));\n}\n\nfunction coerceArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\n/** Coerces a value to a CSS pixel value. */\nfunction coerceCssPixelValue(value) {\n if (value == null) {\n return '';\n }\n return typeof value === 'string' ? value : `${value}px`;\n}\n\n/**\n * Coerces an ElementRef or an Element into an element.\n * Useful for APIs that can accept either a ref or the native element itself.\n */\nfunction coerceElement(elementOrRef) {\n return elementOrRef instanceof ElementRef ? elementOrRef.nativeElement : elementOrRef;\n}\n\n/**\n * Coerces a value to an array of trimmed non-empty strings.\n * Any input that is not an array, `null` or `undefined` will be turned into a string\n * via `toString()` and subsequently split with the given separator.\n * `null` and `undefined` will result in an empty array.\n * This results in the following outcomes:\n * - `null` -> `[]`\n * - `[null]` -> `[\"null\"]`\n * - `[\"a\", \"b \", \" \"]` -> `[\"a\", \"b\"]`\n * - `[1, [2, 3]]` -> `[\"1\", \"2,3\"]`\n * - `[{ a: 0 }]` -> `[\"[object Object]\"]`\n * - `{ a: 0 }` -> `[\"[object\", \"Object]\"]`\n *\n * Useful for defining CSS classes or table columns.\n * @param value the value to coerce into an array of strings\n * @param separator split-separator if value isn't an array\n */\nfunction coerceStringArray(value, separator = /\\s+/) {\n const result = [];\n if (value != null) {\n const sourceValues = Array.isArray(value) ? value : `${value}`.split(separator);\n for (const sourceValue of sourceValues) {\n const trimmedString = `${sourceValue}`.trim();\n if (trimmedString) {\n result.push(trimmedString);\n }\n }\n }\n return result;\n}\n\nexport { _isNumberValue, coerceArray, coerceBooleanProperty, coerceCssPixelValue, coerceElement, coerceNumberProperty, coerceStringArray };\n","import * as i0 from '@angular/core';\nimport { NgModule, inject, CSP_NONCE, Injectable, NgZone } from '@angular/core';\nimport { coerceArray } from '@angular/cdk/coercion';\nimport { Subject, combineLatest, concat, Observable } from 'rxjs';\nimport { take, skip, debounceTime, map, startWith, takeUntil } from 'rxjs/operators';\nimport { Platform } from '@angular/cdk/platform';\n\nclass LayoutModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: LayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"19.0.0\", ngImport: i0, type: LayoutModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: LayoutModule });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: LayoutModule, decorators: [{\n type: NgModule,\n args: [{}]\n }] });\n\n/** Global registry for all dynamically-created, injected media queries. */\nconst mediaQueriesForWebkitCompatibility = new Set();\n/** Style tag that holds all of the dynamically-created media queries. */\nlet mediaQueryStyleNode;\n/** A utility for calling matchMedia queries. */\nclass MediaMatcher {\n _platform = inject(Platform);\n _nonce = inject(CSP_NONCE, { optional: true });\n /** The internal matchMedia method to return back a MediaQueryList like object. */\n _matchMedia;\n constructor() {\n this._matchMedia =\n this._platform.isBrowser && window.matchMedia\n ? // matchMedia is bound to the window scope intentionally as it is an illegal invocation to\n // call it from a different scope.\n window.matchMedia.bind(window)\n : noopMatchMedia;\n }\n /**\n * Evaluates the given media query and returns the native MediaQueryList from which results\n * can be retrieved.\n * Confirms the layout engine will trigger for the selector query provided and returns the\n * MediaQueryList for the query provided.\n */\n matchMedia(query) {\n if (this._platform.WEBKIT || this._platform.BLINK) {\n createEmptyStyleRule(query, this._nonce);\n }\n return this._matchMedia(query);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: MediaMatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: MediaMatcher, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: MediaMatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n/**\n * Creates an empty stylesheet that is used to work around browser inconsistencies related to\n * `matchMedia`. At the time of writing, it handles the following cases:\n * 1. On WebKit browsers, a media query has to have at least one rule in order for `matchMedia`\n * to fire. We work around it by declaring a dummy stylesheet with a `@media` declaration.\n * 2. In some cases Blink browsers will stop firing the `matchMedia` listener if none of the rules\n * inside the `@media` match existing elements on the page. We work around it by having one rule\n * targeting the `body`. See https://github.com/angular/components/issues/23546.\n */\nfunction createEmptyStyleRule(query, nonce) {\n if (mediaQueriesForWebkitCompatibility.has(query)) {\n return;\n }\n try {\n if (!mediaQueryStyleNode) {\n mediaQueryStyleNode = document.createElement('style');\n if (nonce) {\n mediaQueryStyleNode.setAttribute('nonce', nonce);\n }\n mediaQueryStyleNode.setAttribute('type', 'text/css');\n document.head.appendChild(mediaQueryStyleNode);\n }\n if (mediaQueryStyleNode.sheet) {\n mediaQueryStyleNode.sheet.insertRule(`@media ${query} {body{ }}`, 0);\n mediaQueriesForWebkitCompatibility.add(query);\n }\n }\n catch (e) {\n console.error(e);\n }\n}\n/** No-op matchMedia replacement for non-browser platforms. */\nfunction noopMatchMedia(query) {\n // Use `as any` here to avoid adding additional necessary properties for\n // the noop matcher.\n return {\n matches: query === 'all' || query === '',\n media: query,\n addListener: () => { },\n removeListener: () => { },\n };\n}\n\n/** Utility for checking the matching state of `@media` queries. */\nclass BreakpointObserver {\n _mediaMatcher = inject(MediaMatcher);\n _zone = inject(NgZone);\n /** A map of all media queries currently being listened for. */\n _queries = new Map();\n /** A subject for all other observables to takeUntil based on. */\n _destroySubject = new Subject();\n constructor() { }\n /** Completes the active subject, signalling to all other observables to complete. */\n ngOnDestroy() {\n this._destroySubject.next();\n this._destroySubject.complete();\n }\n /**\n * Whether one or more media queries match the current viewport size.\n * @param value One or more media queries to check.\n * @returns Whether any of the media queries match.\n */\n isMatched(value) {\n const queries = splitQueries(coerceArray(value));\n return queries.some(mediaQuery => this._registerQuery(mediaQuery).mql.matches);\n }\n /**\n * Gets an observable of results for the given queries that will emit new results for any changes\n * in matching of the given queries.\n * @param value One or more media queries to check.\n * @returns A stream of matches for the given queries.\n */\n observe(value) {\n const queries = splitQueries(coerceArray(value));\n const observables = queries.map(query => this._registerQuery(query).observable);\n let stateObservable = combineLatest(observables);\n // Emit the first state immediately, and then debounce the subsequent emissions.\n stateObservable = concat(stateObservable.pipe(take(1)), stateObservable.pipe(skip(1), debounceTime(0)));\n return stateObservable.pipe(map(breakpointStates => {\n const response = {\n matches: false,\n breakpoints: {},\n };\n breakpointStates.forEach(({ matches, query }) => {\n response.matches = response.matches || matches;\n response.breakpoints[query] = matches;\n });\n return response;\n }));\n }\n /** Registers a specific query to be listened for. */\n _registerQuery(query) {\n // Only set up a new MediaQueryList if it is not already being listened for.\n if (this._queries.has(query)) {\n return this._queries.get(query);\n }\n const mql = this._mediaMatcher.matchMedia(query);\n // Create callback for match changes and add it is as a listener.\n const queryObservable = new Observable((observer) => {\n // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed\n // back into the zone because matchMedia is only included in Zone.js by loading the\n // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not\n // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js\n // patches it.\n const handler = (e) => this._zone.run(() => observer.next(e));\n mql.addListener(handler);\n return () => {\n mql.removeListener(handler);\n };\n }).pipe(startWith(mql), map(({ matches }) => ({ query, matches })), takeUntil(this._destroySubject));\n // Add the MediaQueryList to the set of queries.\n const output = { observable: queryObservable, mql };\n this._queries.set(query, output);\n return output;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: BreakpointObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: BreakpointObserver, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: BreakpointObserver, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries) {\n return queries\n .map(query => query.split(','))\n .reduce((a1, a2) => a1.concat(a2))\n .map(query => query.trim());\n}\n\n// PascalCase is being used as Breakpoints is used like an enum.\n// tslint:disable-next-line:variable-name\nconst Breakpoints = {\n XSmall: '(max-width: 599.98px)',\n Small: '(min-width: 600px) and (max-width: 959.98px)',\n Medium: '(min-width: 960px) and (max-width: 1279.98px)',\n Large: '(min-width: 1280px) and (max-width: 1919.98px)',\n XLarge: '(min-width: 1920px)',\n Handset: '(max-width: 599.98px) and (orientation: portrait), ' +\n '(max-width: 959.98px) and (orientation: landscape)',\n Tablet: '(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), ' +\n '(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)',\n Web: '(min-width: 840px) and (orientation: portrait), ' +\n '(min-width: 1280px) and (orientation: landscape)',\n HandsetPortrait: '(max-width: 599.98px) and (orientation: portrait)',\n TabletPortrait: '(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)',\n WebPortrait: '(min-width: 840px) and (orientation: portrait)',\n HandsetLandscape: '(max-width: 959.98px) and (orientation: landscape)',\n TabletLandscape: '(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)',\n WebLandscape: '(min-width: 1280px) and (orientation: landscape)',\n};\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BreakpointObserver, Breakpoints, LayoutModule, MediaMatcher };\n","import { filter } from './filter';\nexport function skip(count) {\n return filter((_, index) => count <= index);\n}\n","import { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, APP_ID, Injectable, signal, QueryList, isSignal, effect, InjectionToken, afterNextRender, NgZone, Injector, ElementRef, booleanAttribute, Directive, Input, EventEmitter, Output, NgModule } from '@angular/core';\nimport { Platform, _getFocusedElementPierceShadowDom, normalizePassiveListenerOptions, _getEventTarget, _getShadowRoot } from '@angular/cdk/platform';\nimport { _CdkPrivateStyleLoader, _VisuallyHiddenLoader } from '@angular/cdk/private';\nimport { A, Z, ZERO, NINE, hasModifierKey, PAGE_DOWN, PAGE_UP, END, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, TAB, ALT, CONTROL, MAC_META, META, SHIFT } from '@angular/cdk/keycodes';\nimport { Subject, Subscription, isObservable, of, BehaviorSubject } from 'rxjs';\nimport { tap, debounceTime, filter, map, take, skip, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { coerceObservable } from '@angular/cdk/coercion/private';\nimport { ContentObserver, ObserversModule } from '@angular/cdk/observers';\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { BreakpointObserver } from '@angular/cdk/layout';\n\n/** IDs are delimited by an empty space, as per the spec. */\nconst ID_DELIMITER = ' ';\n/**\n * Adds the given ID to the specified ARIA attribute on an element.\n * Used for attributes such as aria-labelledby, aria-owns, etc.\n */\nfunction addAriaReferencedId(el, attr, id) {\n const ids = getAriaReferenceIds(el, attr);\n id = id.trim();\n if (ids.some(existingId => existingId.trim() === id)) {\n return;\n }\n ids.push(id);\n el.setAttribute(attr, ids.join(ID_DELIMITER));\n}\n/**\n * Removes the given ID from the specified ARIA attribute on an element.\n * Used for attributes such as aria-labelledby, aria-owns, etc.\n */\nfunction removeAriaReferencedId(el, attr, id) {\n const ids = getAriaReferenceIds(el, attr);\n id = id.trim();\n const filteredIds = ids.filter(val => val !== id);\n if (filteredIds.length) {\n el.setAttribute(attr, filteredIds.join(ID_DELIMITER));\n }\n else {\n el.removeAttribute(attr);\n }\n}\n/**\n * Gets the list of IDs referenced by the given ARIA attribute on an element.\n * Used for attributes such as aria-labelledby, aria-owns, etc.\n */\nfunction getAriaReferenceIds(el, attr) {\n // Get string array of all individual ids (whitespace delimited) in the attribute value\n const attrValue = el.getAttribute(attr);\n return attrValue?.match(/\\S+/g) ?? [];\n}\n\n/**\n * ID used for the body container where all messages are appended.\n * @deprecated No longer being used. To be removed.\n * @breaking-change 14.0.0\n */\nconst MESSAGES_CONTAINER_ID = 'cdk-describedby-message-container';\n/**\n * ID prefix used for each created message element.\n * @deprecated To be turned into a private variable.\n * @breaking-change 14.0.0\n */\nconst CDK_DESCRIBEDBY_ID_PREFIX = 'cdk-describedby-message';\n/**\n * Attribute given to each host element that is described by a message element.\n * @deprecated To be turned into a private variable.\n * @breaking-change 14.0.0\n */\nconst CDK_DESCRIBEDBY_HOST_ATTRIBUTE = 'cdk-describedby-host';\n/** Global incremental identifier for each registered message element. */\nlet nextId = 0;\n/**\n * Utility that creates visually hidden elements with a message content. Useful for elements that\n * want to use aria-describedby to further describe themselves without adding additional visual\n * content.\n */\nclass AriaDescriber {\n _platform = inject(Platform);\n _document = inject(DOCUMENT);\n /** Map of all registered message elements that have been placed into the document. */\n _messageRegistry = new Map();\n /** Container for all registered messages. */\n _messagesContainer = null;\n /** Unique ID for the service. */\n _id = `${nextId++}`;\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);\n this._id = inject(APP_ID) + '-' + nextId++;\n }\n describe(hostElement, message, role) {\n if (!this._canBeDescribed(hostElement, message)) {\n return;\n }\n const key = getKey(message, role);\n if (typeof message !== 'string') {\n // We need to ensure that the element has an ID.\n setMessageId(message, this._id);\n this._messageRegistry.set(key, { messageElement: message, referenceCount: 0 });\n }\n else if (!this._messageRegistry.has(key)) {\n this._createMessageElement(message, role);\n }\n if (!this._isElementDescribedByMessage(hostElement, key)) {\n this._addMessageReference(hostElement, key);\n }\n }\n removeDescription(hostElement, message, role) {\n if (!message || !this._isElementNode(hostElement)) {\n return;\n }\n const key = getKey(message, role);\n if (this._isElementDescribedByMessage(hostElement, key)) {\n this._removeMessageReference(hostElement, key);\n }\n // If the message is a string, it means that it's one that we created for the\n // consumer so we can remove it safely, otherwise we should leave it in place.\n if (typeof message === 'string') {\n const registeredMessage = this._messageRegistry.get(key);\n if (registeredMessage && registeredMessage.referenceCount === 0) {\n this._deleteMessageElement(key);\n }\n }\n if (this._messagesContainer?.childNodes.length === 0) {\n this._messagesContainer.remove();\n this._messagesContainer = null;\n }\n }\n /** Unregisters all created message elements and removes the message container. */\n ngOnDestroy() {\n const describedElements = this._document.querySelectorAll(`[${CDK_DESCRIBEDBY_HOST_ATTRIBUTE}=\"${this._id}\"]`);\n for (let i = 0; i < describedElements.length; i++) {\n this._removeCdkDescribedByReferenceIds(describedElements[i]);\n describedElements[i].removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE);\n }\n this._messagesContainer?.remove();\n this._messagesContainer = null;\n this._messageRegistry.clear();\n }\n /**\n * Creates a new element in the visually hidden message container element with the message\n * as its content and adds it to the message registry.\n */\n _createMessageElement(message, role) {\n const messageElement = this._document.createElement('div');\n setMessageId(messageElement, this._id);\n messageElement.textContent = message;\n if (role) {\n messageElement.setAttribute('role', role);\n }\n this._createMessagesContainer();\n this._messagesContainer.appendChild(messageElement);\n this._messageRegistry.set(getKey(message, role), { messageElement, referenceCount: 0 });\n }\n /** Deletes the message element from the global messages container. */\n _deleteMessageElement(key) {\n this._messageRegistry.get(key)?.messageElement?.remove();\n this._messageRegistry.delete(key);\n }\n /** Creates the global container for all aria-describedby messages. */\n _createMessagesContainer() {\n if (this._messagesContainer) {\n return;\n }\n const containerClassName = 'cdk-describedby-message-container';\n const serverContainers = this._document.querySelectorAll(`.${containerClassName}[platform=\"server\"]`);\n for (let i = 0; i < serverContainers.length; i++) {\n // When going from the server to the client, we may end up in a situation where there's\n // already a container on the page, but we don't have a reference to it. Clear the\n // old container so we don't get duplicates. Doing this, instead of emptying the previous\n // container, should be slightly faster.\n serverContainers[i].remove();\n }\n const messagesContainer = this._document.createElement('div');\n // We add `visibility: hidden` in order to prevent text in this container from\n // being searchable by the browser's Ctrl + F functionality.\n // Screen-readers will still read the description for elements with aria-describedby even\n // when the description element is not visible.\n messagesContainer.style.visibility = 'hidden';\n // Even though we use `visibility: hidden`, we still apply `cdk-visually-hidden` so that\n // the description element doesn't impact page layout.\n messagesContainer.classList.add(containerClassName);\n messagesContainer.classList.add('cdk-visually-hidden');\n if (!this._platform.isBrowser) {\n messagesContainer.setAttribute('platform', 'server');\n }\n this._document.body.appendChild(messagesContainer);\n this._messagesContainer = messagesContainer;\n }\n /** Removes all cdk-describedby messages that are hosted through the element. */\n _removeCdkDescribedByReferenceIds(element) {\n // Remove all aria-describedby reference IDs that are prefixed by CDK_DESCRIBEDBY_ID_PREFIX\n const originalReferenceIds = getAriaReferenceIds(element, 'aria-describedby').filter(id => id.indexOf(CDK_DESCRIBEDBY_ID_PREFIX) != 0);\n element.setAttribute('aria-describedby', originalReferenceIds.join(' '));\n }\n /**\n * Adds a message reference to the element using aria-describedby and increments the registered\n * message's reference count.\n */\n _addMessageReference(element, key) {\n const registeredMessage = this._messageRegistry.get(key);\n // Add the aria-describedby reference and set the\n // describedby_host attribute to mark the element.\n addAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id);\n element.setAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE, this._id);\n registeredMessage.referenceCount++;\n }\n /**\n * Removes a message reference from the element using aria-describedby\n * and decrements the registered message's reference count.\n */\n _removeMessageReference(element, key) {\n const registeredMessage = this._messageRegistry.get(key);\n registeredMessage.referenceCount--;\n removeAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id);\n element.removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE);\n }\n /** Returns true if the element has been described by the provided message ID. */\n _isElementDescribedByMessage(element, key) {\n const referenceIds = getAriaReferenceIds(element, 'aria-describedby');\n const registeredMessage = this._messageRegistry.get(key);\n const messageId = registeredMessage && registeredMessage.messageElement.id;\n return !!messageId && referenceIds.indexOf(messageId) != -1;\n }\n /** Determines whether a message can be described on a particular element. */\n _canBeDescribed(element, message) {\n if (!this._isElementNode(element)) {\n return false;\n }\n if (message && typeof message === 'object') {\n // We'd have to make some assumptions about the description element's text, if the consumer\n // passed in an element. Assume that if an element is passed in, the consumer has verified\n // that it can be used as a description.\n return true;\n }\n const trimmedMessage = message == null ? '' : `${message}`.trim();\n const ariaLabel = element.getAttribute('aria-label');\n // We shouldn't set descriptions if they're exactly the same as the `aria-label` of the\n // element, because screen readers will end up reading out the same text twice in a row.\n return trimmedMessage ? !ariaLabel || ariaLabel.trim() !== trimmedMessage : false;\n }\n /** Checks whether a node is an Element node. */\n _isElementNode(element) {\n return element.nodeType === this._document.ELEMENT_NODE;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: AriaDescriber, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: AriaDescriber, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: AriaDescriber, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n/** Gets a key that can be used to look messages up in the registry. */\nfunction getKey(message, role) {\n return typeof message === 'string' ? `${role || ''}/${message}` : message;\n}\n/** Assigns a unique ID to an element, if it doesn't have one already. */\nfunction setMessageId(element, serviceId) {\n if (!element.id) {\n element.id = `${CDK_DESCRIBEDBY_ID_PREFIX}-${serviceId}-${nextId++}`;\n }\n}\n\nconst DEFAULT_TYPEAHEAD_DEBOUNCE_INTERVAL_MS = 200;\n/**\n * Selects items based on keyboard inputs. Implements the typeahead functionality of\n * `role=\"listbox\"` or `role=\"tree\"` and other related roles.\n */\nclass Typeahead {\n _letterKeyStream = new Subject();\n _items = [];\n _selectedItemIndex = -1;\n /** Buffer for the letters that the user has pressed */\n _pressedLetters = [];\n _skipPredicateFn;\n _selectedItem = new Subject();\n selectedItem = this._selectedItem;\n constructor(initialItems, config) {\n const typeAheadInterval = typeof config?.debounceInterval === 'number'\n ? config.debounceInterval\n : DEFAULT_TYPEAHEAD_DEBOUNCE_INTERVAL_MS;\n if (config?.skipPredicate) {\n this._skipPredicateFn = config.skipPredicate;\n }\n if ((typeof ngDevMode === 'undefined' || ngDevMode) &&\n initialItems.length &&\n initialItems.some(item => typeof item.getLabel !== 'function')) {\n throw new Error('KeyManager items in typeahead mode must implement the `getLabel` method.');\n }\n this.setItems(initialItems);\n this._setupKeyHandler(typeAheadInterval);\n }\n destroy() {\n this._pressedLetters = [];\n this._letterKeyStream.complete();\n this._selectedItem.complete();\n }\n setCurrentSelectedItemIndex(index) {\n this._selectedItemIndex = index;\n }\n setItems(items) {\n this._items = items;\n }\n handleKey(event) {\n const keyCode = event.keyCode;\n // Attempt to use the `event.key` which also maps it to the user's keyboard language,\n // otherwise fall back to resolving alphanumeric characters via the keyCode.\n if (event.key && event.key.length === 1) {\n this._letterKeyStream.next(event.key.toLocaleUpperCase());\n }\n else if ((keyCode >= A && keyCode <= Z) || (keyCode >= ZERO && keyCode <= NINE)) {\n this._letterKeyStream.next(String.fromCharCode(keyCode));\n }\n }\n /** Gets whether the user is currently typing into the manager using the typeahead feature. */\n isTyping() {\n return this._pressedLetters.length > 0;\n }\n /** Resets the currently stored sequence of typed letters. */\n reset() {\n this._pressedLetters = [];\n }\n _setupKeyHandler(typeAheadInterval) {\n // Debounce the presses of non-navigational keys, collect the ones that correspond to letters\n // and convert those letters back into a string. Afterwards find the first item that starts\n // with that string and select it.\n this._letterKeyStream\n .pipe(tap(letter => this._pressedLetters.push(letter)), debounceTime(typeAheadInterval), filter(() => this._pressedLetters.length > 0), map(() => this._pressedLetters.join('').toLocaleUpperCase()))\n .subscribe(inputString => {\n // Start at 1 because we want to start searching at the item immediately\n // following the current active item.\n for (let i = 1; i < this._items.length + 1; i++) {\n const index = (this._selectedItemIndex + i) % this._items.length;\n const item = this._items[index];\n if (!this._skipPredicateFn?.(item) &&\n item.getLabel?.().toLocaleUpperCase().trim().indexOf(inputString) === 0) {\n this._selectedItem.next(item);\n break;\n }\n }\n this._pressedLetters = [];\n });\n }\n}\n\n/**\n * This class manages keyboard events for selectable lists. If you pass it a query list\n * of items, it will set the active item correctly when arrow events occur.\n */\nclass ListKeyManager {\n _items;\n _activeItemIndex = -1;\n _activeItem = signal(null);\n _wrap = false;\n _typeaheadSubscription = Subscription.EMPTY;\n _itemChangesSubscription;\n _vertical = true;\n _horizontal;\n _allowedModifierKeys = [];\n _homeAndEnd = false;\n _pageUpAndDown = { enabled: false, delta: 10 };\n _effectRef;\n _typeahead;\n /**\n * Predicate function that can be used to check whether an item should be skipped\n * by the key manager. By default, disabled items are skipped.\n */\n _skipPredicateFn = (item) => item.disabled;\n constructor(_items, injector) {\n this._items = _items;\n // We allow for the items to be an array because, in some cases, the consumer may\n // not have access to a QueryList of the items they want to manage (e.g. when the\n // items aren't being collected via `ViewChildren` or `ContentChildren`).\n if (_items instanceof QueryList) {\n this._itemChangesSubscription = _items.changes.subscribe((newItems) => this._itemsChanged(newItems.toArray()));\n }\n else if (isSignal(_items)) {\n if (!injector && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error('ListKeyManager constructed with a signal must receive an injector');\n }\n this._effectRef = effect(() => this._itemsChanged(_items()), { injector });\n }\n }\n /**\n * Stream that emits any time the TAB key is pressed, so components can react\n * when focus is shifted off of the list.\n */\n tabOut = new Subject();\n /** Stream that emits whenever the active item of the list manager changes. */\n change = new Subject();\n /**\n * Sets the predicate function that determines which items should be skipped by the\n * list key manager.\n * @param predicate Function that determines whether the given item should be skipped.\n */\n skipPredicate(predicate) {\n this._skipPredicateFn = predicate;\n return this;\n }\n /**\n * Configures wrapping mode, which determines whether the active item will wrap to\n * the other end of list when there are no more items in the given direction.\n * @param shouldWrap Whether the list should wrap when reaching the end.\n */\n withWrap(shouldWrap = true) {\n this._wrap = shouldWrap;\n return this;\n }\n /**\n * Configures whether the key manager should be able to move the selection vertically.\n * @param enabled Whether vertical selection should be enabled.\n */\n withVerticalOrientation(enabled = true) {\n this._vertical = enabled;\n return this;\n }\n /**\n * Configures the key manager to move the selection horizontally.\n * Passing in `null` will disable horizontal movement.\n * @param direction Direction in which the selection can be moved.\n */\n withHorizontalOrientation(direction) {\n this._horizontal = direction;\n return this;\n }\n /**\n * Modifier keys which are allowed to be held down and whose default actions will be prevented\n * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys.\n */\n withAllowedModifierKeys(keys) {\n this._allowedModifierKeys = keys;\n return this;\n }\n /**\n * Turns on typeahead mode which allows users to set the active item by typing.\n * @param debounceInterval Time to wait after the last keystroke before setting the active item.\n */\n withTypeAhead(debounceInterval = 200) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const items = this._getItemsArray();\n if (items.length > 0 && items.some(item => typeof item.getLabel !== 'function')) {\n throw Error('ListKeyManager items in typeahead mode must implement the `getLabel` method.');\n }\n }\n this._typeaheadSubscription.unsubscribe();\n const items = this._getItemsArray();\n this._typeahead = new Typeahead(items, {\n debounceInterval: typeof debounceInterval === 'number' ? debounceInterval : undefined,\n skipPredicate: item => this._skipPredicateFn(item),\n });\n this._typeaheadSubscription = this._typeahead.selectedItem.subscribe(item => {\n this.setActiveItem(item);\n });\n return this;\n }\n /** Cancels the current typeahead sequence. */\n cancelTypeahead() {\n this._typeahead?.reset();\n return this;\n }\n /**\n * Configures the key manager to activate the first and last items\n * respectively when the Home or End key is pressed.\n * @param enabled Whether pressing the Home or End key activates the first/last item.\n */\n withHomeAndEnd(enabled = true) {\n this._homeAndEnd = enabled;\n return this;\n }\n /**\n * Configures the key manager to activate every 10th, configured or first/last element in up/down direction\n * respectively when the Page-Up or Page-Down key is pressed.\n * @param enabled Whether pressing the Page-Up or Page-Down key activates the first/last item.\n * @param delta Whether pressing the Home or End key activates the first/last item.\n */\n withPageUpDown(enabled = true, delta = 10) {\n this._pageUpAndDown = { enabled, delta };\n return this;\n }\n setActiveItem(item) {\n const previousActiveItem = this._activeItem();\n this.updateActiveItem(item);\n if (this._activeItem() !== previousActiveItem) {\n this.change.next(this._activeItemIndex);\n }\n }\n /**\n * Sets the active item depending on the key event passed in.\n * @param event Keyboard event to be used for determining which element should be active.\n */\n onKeydown(event) {\n const keyCode = event.keyCode;\n const modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];\n const isModifierAllowed = modifiers.every(modifier => {\n return !event[modifier] || this._allowedModifierKeys.indexOf(modifier) > -1;\n });\n switch (keyCode) {\n case TAB:\n this.tabOut.next();\n return;\n case DOWN_ARROW:\n if (this._vertical && isModifierAllowed) {\n this.setNextItemActive();\n break;\n }\n else {\n return;\n }\n case UP_ARROW:\n if (this._vertical && isModifierAllowed) {\n this.setPreviousItemActive();\n break;\n }\n else {\n return;\n }\n case RIGHT_ARROW:\n if (this._horizontal && isModifierAllowed) {\n this._horizontal === 'rtl' ? this.setPreviousItemActive() : this.setNextItemActive();\n break;\n }\n else {\n return;\n }\n case LEFT_ARROW:\n if (this._horizontal && isModifierAllowed) {\n this._horizontal === 'rtl' ? this.setNextItemActive() : this.setPreviousItemActive();\n break;\n }\n else {\n return;\n }\n case HOME:\n if (this._homeAndEnd && isModifierAllowed) {\n this.setFirstItemActive();\n break;\n }\n else {\n return;\n }\n case END:\n if (this._homeAndEnd && isModifierAllowed) {\n this.setLastItemActive();\n break;\n }\n else {\n return;\n }\n case PAGE_UP:\n if (this._pageUpAndDown.enabled && isModifierAllowed) {\n const targetIndex = this._activeItemIndex - this._pageUpAndDown.delta;\n this._setActiveItemByIndex(targetIndex > 0 ? targetIndex : 0, 1);\n break;\n }\n else {\n return;\n }\n case PAGE_DOWN:\n if (this._pageUpAndDown.enabled && isModifierAllowed) {\n const targetIndex = this._activeItemIndex + this._pageUpAndDown.delta;\n const itemsLength = this._getItemsArray().length;\n this._setActiveItemByIndex(targetIndex < itemsLength ? targetIndex : itemsLength - 1, -1);\n break;\n }\n else {\n return;\n }\n default:\n if (isModifierAllowed || hasModifierKey(event, 'shiftKey')) {\n this._typeahead?.handleKey(event);\n }\n // Note that we return here, in order to avoid preventing\n // the default action of non-navigational keys.\n return;\n }\n this._typeahead?.reset();\n event.preventDefault();\n }\n /** Index of the currently active item. */\n get activeItemIndex() {\n return this._activeItemIndex;\n }\n /** The active item. */\n get activeItem() {\n return this._activeItem();\n }\n /** Gets whether the user is currently typing into the manager using the typeahead feature. */\n isTyping() {\n return !!this._typeahead && this._typeahead.isTyping();\n }\n /** Sets the active item to the first enabled item in the list. */\n setFirstItemActive() {\n this._setActiveItemByIndex(0, 1);\n }\n /** Sets the active item to the last enabled item in the list. */\n setLastItemActive() {\n this._setActiveItemByIndex(this._getItemsArray().length - 1, -1);\n }\n /** Sets the active item to the next enabled item in the list. */\n setNextItemActive() {\n this._activeItemIndex < 0 ? this.setFirstItemActive() : this._setActiveItemByDelta(1);\n }\n /** Sets the active item to a previous enabled item in the list. */\n setPreviousItemActive() {\n this._activeItemIndex < 0 && this._wrap\n ? this.setLastItemActive()\n : this._setActiveItemByDelta(-1);\n }\n updateActiveItem(item) {\n const itemArray = this._getItemsArray();\n const index = typeof item === 'number' ? item : itemArray.indexOf(item);\n const activeItem = itemArray[index];\n // Explicitly check for `null` and `undefined` because other falsy values are valid.\n this._activeItem.set(activeItem == null ? null : activeItem);\n this._activeItemIndex = index;\n this._typeahead?.setCurrentSelectedItemIndex(index);\n }\n /** Cleans up the key manager. */\n destroy() {\n this._typeaheadSubscription.unsubscribe();\n this._itemChangesSubscription?.unsubscribe();\n this._effectRef?.destroy();\n this._typeahead?.destroy();\n this.tabOut.complete();\n this.change.complete();\n }\n /**\n * This method sets the active item, given a list of items and the delta between the\n * currently active item and the new active item. It will calculate differently\n * depending on whether wrap mode is turned on.\n */\n _setActiveItemByDelta(delta) {\n this._wrap ? this._setActiveInWrapMode(delta) : this._setActiveInDefaultMode(delta);\n }\n /**\n * Sets the active item properly given \"wrap\" mode. In other words, it will continue to move\n * down the list until it finds an item that is not disabled, and it will wrap if it\n * encounters either end of the list.\n */\n _setActiveInWrapMode(delta) {\n const items = this._getItemsArray();\n for (let i = 1; i <= items.length; i++) {\n const index = (this._activeItemIndex + delta * i + items.length) % items.length;\n const item = items[index];\n if (!this._skipPredicateFn(item)) {\n this.setActiveItem(index);\n return;\n }\n }\n }\n /**\n * Sets the active item properly given the default mode. In other words, it will\n * continue to move down the list until it finds an item that is not disabled. If\n * it encounters either end of the list, it will stop and not wrap.\n */\n _setActiveInDefaultMode(delta) {\n this._setActiveItemByIndex(this._activeItemIndex + delta, delta);\n }\n /**\n * Sets the active item to the first enabled item starting at the index specified. If the\n * item is disabled, it will move in the fallbackDelta direction until it either\n * finds an enabled item or encounters the end of the list.\n */\n _setActiveItemByIndex(index, fallbackDelta) {\n const items = this._getItemsArray();\n if (!items[index]) {\n return;\n }\n while (this._skipPredicateFn(items[index])) {\n index += fallbackDelta;\n if (!items[index]) {\n return;\n }\n }\n this.setActiveItem(index);\n }\n /** Returns the items as an array. */\n _getItemsArray() {\n if (isSignal(this._items)) {\n return this._items();\n }\n return this._items instanceof QueryList ? this._items.toArray() : this._items;\n }\n /** Callback for when the items have changed. */\n _itemsChanged(newItems) {\n this._typeahead?.setItems(newItems);\n const activeItem = this._activeItem();\n if (activeItem) {\n const newIndex = newItems.indexOf(activeItem);\n if (newIndex > -1 && newIndex !== this._activeItemIndex) {\n this._activeItemIndex = newIndex;\n this._typeahead?.setCurrentSelectedItemIndex(newIndex);\n }\n }\n }\n}\n\nclass ActiveDescendantKeyManager extends ListKeyManager {\n setActiveItem(index) {\n if (this.activeItem) {\n this.activeItem.setInactiveStyles();\n }\n super.setActiveItem(index);\n if (this.activeItem) {\n this.activeItem.setActiveStyles();\n }\n }\n}\n\nclass FocusKeyManager extends ListKeyManager {\n _origin = 'program';\n /**\n * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls.\n * @param origin Focus origin to be used when focusing items.\n */\n setFocusOrigin(origin) {\n this._origin = origin;\n return this;\n }\n setActiveItem(item) {\n super.setActiveItem(item);\n if (this.activeItem) {\n this.activeItem.focus(this._origin);\n }\n }\n}\n\n/**\n * This class manages keyboard events for trees. If you pass it a QueryList or other list of tree\n * items, it will set the active item, focus, handle expansion and typeahead correctly when\n * keyboard events occur.\n */\nclass TreeKeyManager {\n /** The index of the currently active (focused) item. */\n _activeItemIndex = -1;\n /** The currently active (focused) item. */\n _activeItem = null;\n /** Whether or not we activate the item when it's focused. */\n _shouldActivationFollowFocus = false;\n /**\n * The orientation that the tree is laid out in. In `rtl` mode, the behavior of Left and\n * Right arrow are switched.\n */\n _horizontalOrientation = 'ltr';\n /**\n * Predicate function that can be used to check whether an item should be skipped\n * by the key manager.\n *\n * The default value for this doesn't skip any elements in order to keep tree items focusable\n * when disabled. This aligns with ARIA guidelines:\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#focusabilityofdisabledcontrols.\n */\n _skipPredicateFn = (_item) => false;\n /** Function to determine equivalent items. */\n _trackByFn = (item) => item;\n /** Synchronous cache of the items to manage. */\n _items = [];\n _typeahead;\n _typeaheadSubscription = Subscription.EMPTY;\n _hasInitialFocused = false;\n _initializeFocus() {\n if (this._hasInitialFocused || this._items.length === 0) {\n return;\n }\n let activeIndex = 0;\n for (let i = 0; i < this._items.length; i++) {\n if (!this._skipPredicateFn(this._items[i]) && !this._isItemDisabled(this._items[i])) {\n activeIndex = i;\n break;\n }\n }\n const activeItem = this._items[activeIndex];\n // Use `makeFocusable` here, because we want the item to just be focusable, not actually\n // capture the focus since the user isn't interacting with it. See #29628.\n if (activeItem.makeFocusable) {\n this._activeItem?.unfocus();\n this._activeItemIndex = activeIndex;\n this._activeItem = activeItem;\n this._typeahead?.setCurrentSelectedItemIndex(activeIndex);\n activeItem.makeFocusable();\n }\n else {\n // Backwards compatibility for items that don't implement `makeFocusable`.\n this.focusItem(activeIndex);\n }\n this._hasInitialFocused = true;\n }\n /**\n *\n * @param items List of TreeKeyManager options. Can be synchronous or asynchronous.\n * @param config Optional configuration options. By default, use 'ltr' horizontal orientation. By\n * default, do not skip any nodes. By default, key manager only calls `focus` method when items\n * are focused and does not call `activate`. If `typeaheadDefaultInterval` is `true`, use a\n * default interval of 200ms.\n */\n constructor(items, config) {\n // We allow for the items to be an array or Observable because, in some cases, the consumer may\n // not have access to a QueryList of the items they want to manage (e.g. when the\n // items aren't being collected via `ViewChildren` or `ContentChildren`).\n if (items instanceof QueryList) {\n this._items = items.toArray();\n items.changes.subscribe((newItems) => {\n this._items = newItems.toArray();\n this._typeahead?.setItems(this._items);\n this._updateActiveItemIndex(this._items);\n this._initializeFocus();\n });\n }\n else if (isObservable(items)) {\n items.subscribe(newItems => {\n this._items = newItems;\n this._typeahead?.setItems(newItems);\n this._updateActiveItemIndex(newItems);\n this._initializeFocus();\n });\n }\n else {\n this._items = items;\n this._initializeFocus();\n }\n if (typeof config.shouldActivationFollowFocus === 'boolean') {\n this._shouldActivationFollowFocus = config.shouldActivationFollowFocus;\n }\n if (config.horizontalOrientation) {\n this._horizontalOrientation = config.horizontalOrientation;\n }\n if (config.skipPredicate) {\n this._skipPredicateFn = config.skipPredicate;\n }\n if (config.trackBy) {\n this._trackByFn = config.trackBy;\n }\n if (typeof config.typeAheadDebounceInterval !== 'undefined') {\n this._setTypeAhead(config.typeAheadDebounceInterval);\n }\n }\n /** Stream that emits any time the focused item changes. */\n change = new Subject();\n /** Cleans up the key manager. */\n destroy() {\n this._typeaheadSubscription.unsubscribe();\n this._typeahead?.destroy();\n this.change.complete();\n }\n /**\n * Handles a keyboard event on the tree.\n * @param event Keyboard event that represents the user interaction with the tree.\n */\n onKeydown(event) {\n const key = event.key;\n switch (key) {\n case 'Tab':\n // Return early here, in order to allow Tab to actually tab out of the tree\n return;\n case 'ArrowDown':\n this._focusNextItem();\n break;\n case 'ArrowUp':\n this._focusPreviousItem();\n break;\n case 'ArrowRight':\n this._horizontalOrientation === 'rtl'\n ? this._collapseCurrentItem()\n : this._expandCurrentItem();\n break;\n case 'ArrowLeft':\n this._horizontalOrientation === 'rtl'\n ? this._expandCurrentItem()\n : this._collapseCurrentItem();\n break;\n case 'Home':\n this._focusFirstItem();\n break;\n case 'End':\n this._focusLastItem();\n break;\n case 'Enter':\n case ' ':\n this._activateCurrentItem();\n break;\n default:\n if (event.key === '*') {\n this._expandAllItemsAtCurrentItemLevel();\n break;\n }\n this._typeahead?.handleKey(event);\n // Return here, in order to avoid preventing the default action of non-navigational\n // keys or resetting the buffer of pressed letters.\n return;\n }\n // Reset the typeahead since the user has used a navigational key.\n this._typeahead?.reset();\n event.preventDefault();\n }\n /** Index of the currently active item. */\n getActiveItemIndex() {\n return this._activeItemIndex;\n }\n /** The currently active item. */\n getActiveItem() {\n return this._activeItem;\n }\n /** Focus the first available item. */\n _focusFirstItem() {\n this.focusItem(this._findNextAvailableItemIndex(-1));\n }\n /** Focus the last available item. */\n _focusLastItem() {\n this.focusItem(this._findPreviousAvailableItemIndex(this._items.length));\n }\n /** Focus the next available item. */\n _focusNextItem() {\n this.focusItem(this._findNextAvailableItemIndex(this._activeItemIndex));\n }\n /** Focus the previous available item. */\n _focusPreviousItem() {\n this.focusItem(this._findPreviousAvailableItemIndex(this._activeItemIndex));\n }\n focusItem(itemOrIndex, options = {}) {\n // Set default options\n options.emitChangeEvent ??= true;\n let index = typeof itemOrIndex === 'number'\n ? itemOrIndex\n : this._items.findIndex(item => this._trackByFn(item) === this._trackByFn(itemOrIndex));\n if (index < 0 || index >= this._items.length) {\n return;\n }\n const activeItem = this._items[index];\n // If we're just setting the same item, don't re-call activate or focus\n if (this._activeItem !== null &&\n this._trackByFn(activeItem) === this._trackByFn(this._activeItem)) {\n return;\n }\n const previousActiveItem = this._activeItem;\n this._activeItem = activeItem ?? null;\n this._activeItemIndex = index;\n this._typeahead?.setCurrentSelectedItemIndex(index);\n this._activeItem?.focus();\n previousActiveItem?.unfocus();\n if (options.emitChangeEvent) {\n this.change.next(this._activeItem);\n }\n if (this._shouldActivationFollowFocus) {\n this._activateCurrentItem();\n }\n }\n _updateActiveItemIndex(newItems) {\n const activeItem = this._activeItem;\n if (!activeItem) {\n return;\n }\n const newIndex = newItems.findIndex(item => this._trackByFn(item) === this._trackByFn(activeItem));\n if (newIndex > -1 && newIndex !== this._activeItemIndex) {\n this._activeItemIndex = newIndex;\n this._typeahead?.setCurrentSelectedItemIndex(newIndex);\n }\n }\n _setTypeAhead(debounceInterval) {\n this._typeahead = new Typeahead(this._items, {\n debounceInterval: typeof debounceInterval === 'number' ? debounceInterval : undefined,\n skipPredicate: item => this._skipPredicateFn(item),\n });\n this._typeaheadSubscription = this._typeahead.selectedItem.subscribe(item => {\n this.focusItem(item);\n });\n }\n _findNextAvailableItemIndex(startingIndex) {\n for (let i = startingIndex + 1; i < this._items.length; i++) {\n if (!this._skipPredicateFn(this._items[i])) {\n return i;\n }\n }\n return startingIndex;\n }\n _findPreviousAvailableItemIndex(startingIndex) {\n for (let i = startingIndex - 1; i >= 0; i--) {\n if (!this._skipPredicateFn(this._items[i])) {\n return i;\n }\n }\n return startingIndex;\n }\n /**\n * If the item is already expanded, we collapse the item. Otherwise, we will focus the parent.\n */\n _collapseCurrentItem() {\n if (!this._activeItem) {\n return;\n }\n if (this._isCurrentItemExpanded()) {\n this._activeItem.collapse();\n }\n else {\n const parent = this._activeItem.getParent();\n if (!parent || this._skipPredicateFn(parent)) {\n return;\n }\n this.focusItem(parent);\n }\n }\n /**\n * If the item is already collapsed, we expand the item. Otherwise, we will focus the first child.\n */\n _expandCurrentItem() {\n if (!this._activeItem) {\n return;\n }\n if (!this._isCurrentItemExpanded()) {\n this._activeItem.expand();\n }\n else {\n coerceObservable(this._activeItem.getChildren())\n .pipe(take(1))\n .subscribe(children => {\n const firstChild = children.find(child => !this._skipPredicateFn(child));\n if (!firstChild) {\n return;\n }\n this.focusItem(firstChild);\n });\n }\n }\n _isCurrentItemExpanded() {\n if (!this._activeItem) {\n return false;\n }\n return typeof this._activeItem.isExpanded === 'boolean'\n ? this._activeItem.isExpanded\n : this._activeItem.isExpanded();\n }\n _isItemDisabled(item) {\n return typeof item.isDisabled === 'boolean' ? item.isDisabled : item.isDisabled?.();\n }\n /** For all items that are the same level as the current item, we expand those items. */\n _expandAllItemsAtCurrentItemLevel() {\n if (!this._activeItem) {\n return;\n }\n const parent = this._activeItem.getParent();\n let itemsToExpand;\n if (!parent) {\n itemsToExpand = of(this._items.filter(item => item.getParent() === null));\n }\n else {\n itemsToExpand = coerceObservable(parent.getChildren());\n }\n itemsToExpand.pipe(take(1)).subscribe(items => {\n for (const item of items) {\n item.expand();\n }\n });\n }\n _activateCurrentItem() {\n this._activeItem?.activate();\n }\n}\n/** @docs-private */\nfunction TREE_KEY_MANAGER_FACTORY() {\n return (items, options) => new TreeKeyManager(items, options);\n}\n/** Injection token that determines the key manager to use. */\nconst TREE_KEY_MANAGER = new InjectionToken('tree-key-manager', {\n providedIn: 'root',\n factory: TREE_KEY_MANAGER_FACTORY,\n});\n/** @docs-private */\nconst TREE_KEY_MANAGER_FACTORY_PROVIDER = {\n provide: TREE_KEY_MANAGER,\n useFactory: TREE_KEY_MANAGER_FACTORY,\n};\n\n// NoopTreeKeyManager is a \"noop\" implementation of TreeKeyMangerStrategy. Methods are noops. Does\n// not emit to streams.\n//\n// Used for applications built before TreeKeyManager to opt-out of TreeKeyManager and revert to\n// legacy behavior.\n/**\n * @docs-private\n *\n * Opt-out of Tree of key manager behavior.\n *\n * When provided, Tree has same focus management behavior as before TreeKeyManager was introduced.\n * - Tree does not respond to keyboard interaction\n * - Tree node allows tabindex to be set by Input binding\n * - Tree node allows tabindex to be set by attribute binding\n *\n * @deprecated NoopTreeKeyManager deprecated. Use TreeKeyManager or inject a\n * TreeKeyManagerStrategy instead. To be removed in a future version.\n *\n * @breaking-change 21.0.0\n */\nclass NoopTreeKeyManager {\n _isNoopTreeKeyManager = true;\n // Provide change as required by TreeKeyManagerStrategy. NoopTreeKeyManager is a \"noop\"\n // implementation that does not emit to streams.\n change = new Subject();\n destroy() {\n this.change.complete();\n }\n onKeydown() {\n // noop\n }\n getActiveItemIndex() {\n // Always return null. NoopTreeKeyManager is a \"noop\" implementation that does not maintain\n // the active item.\n return null;\n }\n getActiveItem() {\n // Always return null. NoopTreeKeyManager is a \"noop\" implementation that does not maintain\n // the active item.\n return null;\n }\n focusItem() {\n // noop\n }\n}\n/**\n * @docs-private\n *\n * Opt-out of Tree of key manager behavior.\n *\n * When provided, Tree has same focus management behavior as before TreeKeyManager was introduced.\n * - Tree does not respond to keyboard interaction\n * - Tree node allows tabindex to be set by Input binding\n * - Tree node allows tabindex to be set by attribute binding\n *\n * @deprecated NoopTreeKeyManager deprecated. Use TreeKeyManager or inject a\n * TreeKeyManagerStrategy instead. To be removed in a future version.\n *\n * @breaking-change 21.0.0\n */\nfunction NOOP_TREE_KEY_MANAGER_FACTORY() {\n return () => new NoopTreeKeyManager();\n}\n/**\n * @docs-private\n *\n * Opt-out of Tree of key manager behavior.\n *\n * When provided, Tree has same focus management behavior as before TreeKeyManager was introduced.\n * - Tree does not respond to keyboard interaction\n * - Tree node allows tabindex to be set by Input binding\n * - Tree node allows tabindex to be set by attribute binding\n *\n * @deprecated NoopTreeKeyManager deprecated. Use TreeKeyManager or inject a\n * TreeKeyManagerStrategy instead. To be removed in a future version.\n *\n * @breaking-change 21.0.0\n */\nconst NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER = {\n provide: TREE_KEY_MANAGER,\n useFactory: NOOP_TREE_KEY_MANAGER_FACTORY,\n};\n\n/**\n * Configuration for the isFocusable method.\n */\nclass IsFocusableConfig {\n /**\n * Whether to count an element as focusable even if it is not currently visible.\n */\n ignoreVisibility = false;\n}\n// The InteractivityChecker leans heavily on the ally.js accessibility utilities.\n// Methods like `isTabbable` are only covering specific edge-cases for the browsers which are\n// supported.\n/**\n * Utility for checking the interactivity of an element, such as whether it is focusable or\n * tabbable.\n */\nclass InteractivityChecker {\n _platform = inject(Platform);\n constructor() { }\n /**\n * Gets whether an element is disabled.\n *\n * @param element Element to be checked.\n * @returns Whether the element is disabled.\n */\n isDisabled(element) {\n // This does not capture some cases, such as a non-form control with a disabled attribute or\n // a form control inside of a disabled form, but should capture the most common cases.\n return element.hasAttribute('disabled');\n }\n /**\n * Gets whether an element is visible for the purposes of interactivity.\n *\n * This will capture states like `display: none` and `visibility: hidden`, but not things like\n * being clipped by an `overflow: hidden` parent or being outside the viewport.\n *\n * @returns Whether the element is visible.\n */\n isVisible(element) {\n return hasGeometry(element) && getComputedStyle(element).visibility === 'visible';\n }\n /**\n * Gets whether an element can be reached via Tab key.\n * Assumes that the element has already been checked with isFocusable.\n *\n * @param element Element to be checked.\n * @returns Whether the element is tabbable.\n */\n isTabbable(element) {\n // Nothing is tabbable on the server 😎\n if (!this._platform.isBrowser) {\n return false;\n }\n const frameElement = getFrameElement(getWindow(element));\n if (frameElement) {\n // Frame elements inherit their tabindex onto all child elements.\n if (getTabIndexValue(frameElement) === -1) {\n return false;\n }\n // Browsers disable tabbing to an element inside of an invisible frame.\n if (!this.isVisible(frameElement)) {\n return false;\n }\n }\n let nodeName = element.nodeName.toLowerCase();\n let tabIndexValue = getTabIndexValue(element);\n if (element.hasAttribute('contenteditable')) {\n return tabIndexValue !== -1;\n }\n if (nodeName === 'iframe' || nodeName === 'object') {\n // The frame or object's content may be tabbable depending on the content, but it's\n // not possibly to reliably detect the content of the frames. We always consider such\n // elements as non-tabbable.\n return false;\n }\n // In iOS, the browser only considers some specific elements as tabbable.\n if (this._platform.WEBKIT && this._platform.IOS && !isPotentiallyTabbableIOS(element)) {\n return false;\n }\n if (nodeName === 'audio') {\n // Audio elements without controls enabled are never tabbable, regardless\n // of the tabindex attribute explicitly being set.\n if (!element.hasAttribute('controls')) {\n return false;\n }\n // Audio elements with controls are by default tabbable unless the\n // tabindex attribute is set to `-1` explicitly.\n return tabIndexValue !== -1;\n }\n if (nodeName === 'video') {\n // For all video elements, if the tabindex attribute is set to `-1`, the video\n // is not tabbable. Note: We cannot rely on the default `HTMLElement.tabIndex`\n // property as that one is set to `-1` in Chrome, Edge and Safari v13.1. The\n // tabindex attribute is the source of truth here.\n if (tabIndexValue === -1) {\n return false;\n }\n // If the tabindex is explicitly set, and not `-1` (as per check before), the\n // video element is always tabbable (regardless of whether it has controls or not).\n if (tabIndexValue !== null) {\n return true;\n }\n // Otherwise (when no explicit tabindex is set), a video is only tabbable if it\n // has controls enabled. Firefox is special as videos are always tabbable regardless\n // of whether there are controls or not.\n return this._platform.FIREFOX || element.hasAttribute('controls');\n }\n return element.tabIndex >= 0;\n }\n /**\n * Gets whether an element can be focused by the user.\n *\n * @param element Element to be checked.\n * @param config The config object with options to customize this method's behavior\n * @returns Whether the element is focusable.\n */\n isFocusable(element, config) {\n // Perform checks in order of left to most expensive.\n // Again, naive approach that does not capture many edge cases and browser quirks.\n return (isPotentiallyFocusable(element) &&\n !this.isDisabled(element) &&\n (config?.ignoreVisibility || this.isVisible(element)));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: InteractivityChecker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: InteractivityChecker, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: InteractivityChecker, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n/**\n * Returns the frame element from a window object. Since browsers like MS Edge throw errors if\n * the frameElement property is being accessed from a different host address, this property\n * should be accessed carefully.\n */\nfunction getFrameElement(window) {\n try {\n return window.frameElement;\n }\n catch {\n return null;\n }\n}\n/** Checks whether the specified element has any geometry / rectangles. */\nfunction hasGeometry(element) {\n // Use logic from jQuery to check for an invisible element.\n // See https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js#L12\n return !!(element.offsetWidth ||\n element.offsetHeight ||\n (typeof element.getClientRects === 'function' && element.getClientRects().length));\n}\n/** Gets whether an element's */\nfunction isNativeFormElement(element) {\n let nodeName = element.nodeName.toLowerCase();\n return (nodeName === 'input' ||\n nodeName === 'select' ||\n nodeName === 'button' ||\n nodeName === 'textarea');\n}\n/** Gets whether an element is an ``. */\nfunction isHiddenInput(element) {\n return isInputElement(element) && element.type == 'hidden';\n}\n/** Gets whether an element is an anchor that has an href attribute. */\nfunction isAnchorWithHref(element) {\n return isAnchorElement(element) && element.hasAttribute('href');\n}\n/** Gets whether an element is an input element. */\nfunction isInputElement(element) {\n return element.nodeName.toLowerCase() == 'input';\n}\n/** Gets whether an element is an anchor element. */\nfunction isAnchorElement(element) {\n return element.nodeName.toLowerCase() == 'a';\n}\n/** Gets whether an element has a valid tabindex. */\nfunction hasValidTabIndex(element) {\n if (!element.hasAttribute('tabindex') || element.tabIndex === undefined) {\n return false;\n }\n let tabIndex = element.getAttribute('tabindex');\n return !!(tabIndex && !isNaN(parseInt(tabIndex, 10)));\n}\n/**\n * Returns the parsed tabindex from the element attributes instead of returning the\n * evaluated tabindex from the browsers defaults.\n */\nfunction getTabIndexValue(element) {\n if (!hasValidTabIndex(element)) {\n return null;\n }\n // See browser issue in Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n const tabIndex = parseInt(element.getAttribute('tabindex') || '', 10);\n return isNaN(tabIndex) ? -1 : tabIndex;\n}\n/** Checks whether the specified element is potentially tabbable on iOS */\nfunction isPotentiallyTabbableIOS(element) {\n let nodeName = element.nodeName.toLowerCase();\n let inputType = nodeName === 'input' && element.type;\n return (inputType === 'text' ||\n inputType === 'password' ||\n nodeName === 'select' ||\n nodeName === 'textarea');\n}\n/**\n * Gets whether an element is potentially focusable without taking current visible/disabled state\n * into account.\n */\nfunction isPotentiallyFocusable(element) {\n // Inputs are potentially focusable *unless* they're type=\"hidden\".\n if (isHiddenInput(element)) {\n return false;\n }\n return (isNativeFormElement(element) ||\n isAnchorWithHref(element) ||\n element.hasAttribute('contenteditable') ||\n hasValidTabIndex(element));\n}\n/** Gets the parent window of a DOM node with regards of being inside of an iframe. */\nfunction getWindow(node) {\n // ownerDocument is null if `node` itself *is* a document.\n return (node.ownerDocument && node.ownerDocument.defaultView) || window;\n}\n\n/**\n * Class that allows for trapping focus within a DOM element.\n *\n * This class currently uses a relatively simple approach to focus trapping.\n * It assumes that the tab order is the same as DOM order, which is not necessarily true.\n * Things like `tabIndex > 0`, flex `order`, and shadow roots can cause the two to be misaligned.\n */\nclass FocusTrap {\n _element;\n _checker;\n _ngZone;\n _document;\n _injector;\n _startAnchor;\n _endAnchor;\n _hasAttached = false;\n // Event listeners for the anchors. Need to be regular functions so that we can unbind them later.\n startAnchorListener = () => this.focusLastTabbableElement();\n endAnchorListener = () => this.focusFirstTabbableElement();\n /** Whether the focus trap is active. */\n get enabled() {\n return this._enabled;\n }\n set enabled(value) {\n this._enabled = value;\n if (this._startAnchor && this._endAnchor) {\n this._toggleAnchorTabIndex(value, this._startAnchor);\n this._toggleAnchorTabIndex(value, this._endAnchor);\n }\n }\n _enabled = true;\n constructor(_element, _checker, _ngZone, _document, deferAnchors = false, \n /** @breaking-change 20.0.0 param to become required */\n _injector) {\n this._element = _element;\n this._checker = _checker;\n this._ngZone = _ngZone;\n this._document = _document;\n this._injector = _injector;\n if (!deferAnchors) {\n this.attachAnchors();\n }\n }\n /** Destroys the focus trap by cleaning up the anchors. */\n destroy() {\n const startAnchor = this._startAnchor;\n const endAnchor = this._endAnchor;\n if (startAnchor) {\n startAnchor.removeEventListener('focus', this.startAnchorListener);\n startAnchor.remove();\n }\n if (endAnchor) {\n endAnchor.removeEventListener('focus', this.endAnchorListener);\n endAnchor.remove();\n }\n this._startAnchor = this._endAnchor = null;\n this._hasAttached = false;\n }\n /**\n * Inserts the anchors into the DOM. This is usually done automatically\n * in the constructor, but can be deferred for cases like directives with `*ngIf`.\n * @returns Whether the focus trap managed to attach successfully. This may not be the case\n * if the target element isn't currently in the DOM.\n */\n attachAnchors() {\n // If we're not on the browser, there can be no focus to trap.\n if (this._hasAttached) {\n return true;\n }\n this._ngZone.runOutsideAngular(() => {\n if (!this._startAnchor) {\n this._startAnchor = this._createAnchor();\n this._startAnchor.addEventListener('focus', this.startAnchorListener);\n }\n if (!this._endAnchor) {\n this._endAnchor = this._createAnchor();\n this._endAnchor.addEventListener('focus', this.endAnchorListener);\n }\n });\n if (this._element.parentNode) {\n this._element.parentNode.insertBefore(this._startAnchor, this._element);\n this._element.parentNode.insertBefore(this._endAnchor, this._element.nextSibling);\n this._hasAttached = true;\n }\n return this._hasAttached;\n }\n /**\n * Waits for the zone to stabilize, then focuses the first tabbable element.\n * @returns Returns a promise that resolves with a boolean, depending\n * on whether focus was moved successfully.\n */\n focusInitialElementWhenReady(options) {\n return new Promise(resolve => {\n this._executeOnStable(() => resolve(this.focusInitialElement(options)));\n });\n }\n /**\n * Waits for the zone to stabilize, then focuses\n * the first tabbable element within the focus trap region.\n * @returns Returns a promise that resolves with a boolean, depending\n * on whether focus was moved successfully.\n */\n focusFirstTabbableElementWhenReady(options) {\n return new Promise(resolve => {\n this._executeOnStable(() => resolve(this.focusFirstTabbableElement(options)));\n });\n }\n /**\n * Waits for the zone to stabilize, then focuses\n * the last tabbable element within the focus trap region.\n * @returns Returns a promise that resolves with a boolean, depending\n * on whether focus was moved successfully.\n */\n focusLastTabbableElementWhenReady(options) {\n return new Promise(resolve => {\n this._executeOnStable(() => resolve(this.focusLastTabbableElement(options)));\n });\n }\n /**\n * Get the specified boundary element of the trapped region.\n * @param bound The boundary to get (start or end of trapped region).\n * @returns The boundary element.\n */\n _getRegionBoundary(bound) {\n // Contains the deprecated version of selector, for temporary backwards comparability.\n const markers = this._element.querySelectorAll(`[cdk-focus-region-${bound}], ` + `[cdkFocusRegion${bound}], ` + `[cdk-focus-${bound}]`);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n for (let i = 0; i < markers.length; i++) {\n // @breaking-change 8.0.0\n if (markers[i].hasAttribute(`cdk-focus-${bound}`)) {\n console.warn(`Found use of deprecated attribute 'cdk-focus-${bound}', ` +\n `use 'cdkFocusRegion${bound}' instead. The deprecated ` +\n `attribute will be removed in 8.0.0.`, markers[i]);\n }\n else if (markers[i].hasAttribute(`cdk-focus-region-${bound}`)) {\n console.warn(`Found use of deprecated attribute 'cdk-focus-region-${bound}', ` +\n `use 'cdkFocusRegion${bound}' instead. The deprecated attribute ` +\n `will be removed in 8.0.0.`, markers[i]);\n }\n }\n }\n if (bound == 'start') {\n return markers.length ? markers[0] : this._getFirstTabbableElement(this._element);\n }\n return markers.length\n ? markers[markers.length - 1]\n : this._getLastTabbableElement(this._element);\n }\n /**\n * Focuses the element that should be focused when the focus trap is initialized.\n * @returns Whether focus was moved successfully.\n */\n focusInitialElement(options) {\n // Contains the deprecated version of selector, for temporary backwards comparability.\n const redirectToElement = this._element.querySelector(`[cdk-focus-initial], ` + `[cdkFocusInitial]`);\n if (redirectToElement) {\n // @breaking-change 8.0.0\n if ((typeof ngDevMode === 'undefined' || ngDevMode) &&\n redirectToElement.hasAttribute(`cdk-focus-initial`)) {\n console.warn(`Found use of deprecated attribute 'cdk-focus-initial', ` +\n `use 'cdkFocusInitial' instead. The deprecated attribute ` +\n `will be removed in 8.0.0`, redirectToElement);\n }\n // Warn the consumer if the element they've pointed to\n // isn't focusable, when not in production mode.\n if ((typeof ngDevMode === 'undefined' || ngDevMode) &&\n !this._checker.isFocusable(redirectToElement)) {\n console.warn(`Element matching '[cdkFocusInitial]' is not focusable.`, redirectToElement);\n }\n if (!this._checker.isFocusable(redirectToElement)) {\n const focusableChild = this._getFirstTabbableElement(redirectToElement);\n focusableChild?.focus(options);\n return !!focusableChild;\n }\n redirectToElement.focus(options);\n return true;\n }\n return this.focusFirstTabbableElement(options);\n }\n /**\n * Focuses the first tabbable element within the focus trap region.\n * @returns Whether focus was moved successfully.\n */\n focusFirstTabbableElement(options) {\n const redirectToElement = this._getRegionBoundary('start');\n if (redirectToElement) {\n redirectToElement.focus(options);\n }\n return !!redirectToElement;\n }\n /**\n * Focuses the last tabbable element within the focus trap region.\n * @returns Whether focus was moved successfully.\n */\n focusLastTabbableElement(options) {\n const redirectToElement = this._getRegionBoundary('end');\n if (redirectToElement) {\n redirectToElement.focus(options);\n }\n return !!redirectToElement;\n }\n /**\n * Checks whether the focus trap has successfully been attached.\n */\n hasAttached() {\n return this._hasAttached;\n }\n /** Get the first tabbable element from a DOM subtree (inclusive). */\n _getFirstTabbableElement(root) {\n if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\n return root;\n }\n const children = root.children;\n for (let i = 0; i < children.length; i++) {\n const tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE\n ? this._getFirstTabbableElement(children[i])\n : null;\n if (tabbableChild) {\n return tabbableChild;\n }\n }\n return null;\n }\n /** Get the last tabbable element from a DOM subtree (inclusive). */\n _getLastTabbableElement(root) {\n if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\n return root;\n }\n // Iterate in reverse DOM order.\n const children = root.children;\n for (let i = children.length - 1; i >= 0; i--) {\n const tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE\n ? this._getLastTabbableElement(children[i])\n : null;\n if (tabbableChild) {\n return tabbableChild;\n }\n }\n return null;\n }\n /** Creates an anchor element. */\n _createAnchor() {\n const anchor = this._document.createElement('div');\n this._toggleAnchorTabIndex(this._enabled, anchor);\n anchor.classList.add('cdk-visually-hidden');\n anchor.classList.add('cdk-focus-trap-anchor');\n anchor.setAttribute('aria-hidden', 'true');\n return anchor;\n }\n /**\n * Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap.\n * @param isEnabled Whether the focus trap is enabled.\n * @param anchor Anchor on which to toggle the tabindex.\n */\n _toggleAnchorTabIndex(isEnabled, anchor) {\n // Remove the tabindex completely, rather than setting it to -1, because if the\n // element has a tabindex, the user might still hit it when navigating with the arrow keys.\n isEnabled ? anchor.setAttribute('tabindex', '0') : anchor.removeAttribute('tabindex');\n }\n /**\n * Toggles the`tabindex` of both anchors to either trap Tab focus or allow it to escape.\n * @param enabled: Whether the anchors should trap Tab.\n */\n toggleAnchors(enabled) {\n if (this._startAnchor && this._endAnchor) {\n this._toggleAnchorTabIndex(enabled, this._startAnchor);\n this._toggleAnchorTabIndex(enabled, this._endAnchor);\n }\n }\n /** Executes a function when the zone is stable. */\n _executeOnStable(fn) {\n // TODO: remove this conditional when injector is required in the constructor.\n if (this._injector) {\n afterNextRender(fn, { injector: this._injector });\n }\n else {\n setTimeout(fn);\n }\n }\n}\n/**\n * Factory that allows easy instantiation of focus traps.\n */\nclass FocusTrapFactory {\n _checker = inject(InteractivityChecker);\n _ngZone = inject(NgZone);\n _document = inject(DOCUMENT);\n _injector = inject(Injector);\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);\n }\n /**\n * Creates a focus-trapped region around the given element.\n * @param element The element around which focus will be trapped.\n * @param deferCaptureElements Defers the creation of focus-capturing elements to be done\n * manually by the user.\n * @returns The created focus trap instance.\n */\n create(element, deferCaptureElements = false) {\n return new FocusTrap(element, this._checker, this._ngZone, this._document, deferCaptureElements, this._injector);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusTrapFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusTrapFactory, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusTrapFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n/** Directive for trapping focus within a region. */\nclass CdkTrapFocus {\n _elementRef = inject(ElementRef);\n _focusTrapFactory = inject(FocusTrapFactory);\n /** Underlying FocusTrap instance. */\n focusTrap;\n /** Previously focused element to restore focus to upon destroy when using autoCapture. */\n _previouslyFocusedElement = null;\n /** Whether the focus trap is active. */\n get enabled() {\n return this.focusTrap?.enabled || false;\n }\n set enabled(value) {\n if (this.focusTrap) {\n this.focusTrap.enabled = value;\n }\n }\n /**\n * Whether the directive should automatically move focus into the trapped region upon\n * initialization and return focus to the previous activeElement upon destruction.\n */\n autoCapture;\n constructor() {\n const platform = inject(Platform);\n if (platform.isBrowser) {\n this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);\n }\n }\n ngOnDestroy() {\n this.focusTrap?.destroy();\n // If we stored a previously focused element when using autoCapture, return focus to that\n // element now that the trapped region is being destroyed.\n if (this._previouslyFocusedElement) {\n this._previouslyFocusedElement.focus();\n this._previouslyFocusedElement = null;\n }\n }\n ngAfterContentInit() {\n this.focusTrap?.attachAnchors();\n if (this.autoCapture) {\n this._captureFocus();\n }\n }\n ngDoCheck() {\n if (this.focusTrap && !this.focusTrap.hasAttached()) {\n this.focusTrap.attachAnchors();\n }\n }\n ngOnChanges(changes) {\n const autoCaptureChange = changes['autoCapture'];\n if (autoCaptureChange &&\n !autoCaptureChange.firstChange &&\n this.autoCapture &&\n this.focusTrap?.hasAttached()) {\n this._captureFocus();\n }\n }\n _captureFocus() {\n this._previouslyFocusedElement = _getFocusedElementPierceShadowDom();\n this.focusTrap?.focusInitialElementWhenReady();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: CdkTrapFocus, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"19.0.0\", type: CdkTrapFocus, isStandalone: true, selector: \"[cdkTrapFocus]\", inputs: { enabled: [\"cdkTrapFocus\", \"enabled\", booleanAttribute], autoCapture: [\"cdkTrapFocusAutoCapture\", \"autoCapture\", booleanAttribute] }, exportAs: [\"cdkTrapFocus\"], usesOnChanges: true, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: CdkTrapFocus, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkTrapFocus]',\n exportAs: 'cdkTrapFocus',\n }]\n }], ctorParameters: () => [], propDecorators: { enabled: [{\n type: Input,\n args: [{ alias: 'cdkTrapFocus', transform: booleanAttribute }]\n }], autoCapture: [{\n type: Input,\n args: [{ alias: 'cdkTrapFocusAutoCapture', transform: booleanAttribute }]\n }] } });\n\n/**\n * Class that allows for trapping focus within a DOM element.\n *\n * This class uses a strategy pattern that determines how it traps focus.\n * See FocusTrapInertStrategy.\n */\nclass ConfigurableFocusTrap extends FocusTrap {\n _focusTrapManager;\n _inertStrategy;\n /** Whether the FocusTrap is enabled. */\n get enabled() {\n return this._enabled;\n }\n set enabled(value) {\n this._enabled = value;\n if (this._enabled) {\n this._focusTrapManager.register(this);\n }\n else {\n this._focusTrapManager.deregister(this);\n }\n }\n constructor(_element, _checker, _ngZone, _document, _focusTrapManager, _inertStrategy, config, injector) {\n super(_element, _checker, _ngZone, _document, config.defer, injector);\n this._focusTrapManager = _focusTrapManager;\n this._inertStrategy = _inertStrategy;\n this._focusTrapManager.register(this);\n }\n /** Notifies the FocusTrapManager that this FocusTrap will be destroyed. */\n destroy() {\n this._focusTrapManager.deregister(this);\n super.destroy();\n }\n /** @docs-private Implemented as part of ManagedFocusTrap. */\n _enable() {\n this._inertStrategy.preventFocus(this);\n this.toggleAnchors(true);\n }\n /** @docs-private Implemented as part of ManagedFocusTrap. */\n _disable() {\n this._inertStrategy.allowFocus(this);\n this.toggleAnchors(false);\n }\n}\n\n/**\n * Lightweight FocusTrapInertStrategy that adds a document focus event\n * listener to redirect focus back inside the FocusTrap.\n */\nclass EventListenerFocusTrapInertStrategy {\n /** Focus event handler. */\n _listener = null;\n /** Adds a document event listener that keeps focus inside the FocusTrap. */\n preventFocus(focusTrap) {\n // Ensure there's only one listener per document\n if (this._listener) {\n focusTrap._document.removeEventListener('focus', this._listener, true);\n }\n this._listener = (e) => this._trapFocus(focusTrap, e);\n focusTrap._ngZone.runOutsideAngular(() => {\n focusTrap._document.addEventListener('focus', this._listener, true);\n });\n }\n /** Removes the event listener added in preventFocus. */\n allowFocus(focusTrap) {\n if (!this._listener) {\n return;\n }\n focusTrap._document.removeEventListener('focus', this._listener, true);\n this._listener = null;\n }\n /**\n * Refocuses the first element in the FocusTrap if the focus event target was outside\n * the FocusTrap.\n *\n * This is an event listener callback. The event listener is added in runOutsideAngular,\n * so all this code runs outside Angular as well.\n */\n _trapFocus(focusTrap, event) {\n const target = event.target;\n const focusTrapRoot = focusTrap._element;\n // Don't refocus if target was in an overlay, because the overlay might be associated\n // with an element inside the FocusTrap, ex. mat-select.\n if (target && !focusTrapRoot.contains(target) && !target.closest?.('div.cdk-overlay-pane')) {\n // Some legacy FocusTrap usages have logic that focuses some element on the page\n // just before FocusTrap is destroyed. For backwards compatibility, wait\n // to be sure FocusTrap is still enabled before refocusing.\n setTimeout(() => {\n // Check whether focus wasn't put back into the focus trap while the timeout was pending.\n if (focusTrap.enabled && !focusTrapRoot.contains(focusTrap._document.activeElement)) {\n focusTrap.focusFirstTabbableElement();\n }\n });\n }\n }\n}\n\n/** The injection token used to specify the inert strategy. */\nconst FOCUS_TRAP_INERT_STRATEGY = new InjectionToken('FOCUS_TRAP_INERT_STRATEGY');\n\n/** Injectable that ensures only the most recently enabled FocusTrap is active. */\nclass FocusTrapManager {\n // A stack of the FocusTraps on the page. Only the FocusTrap at the\n // top of the stack is active.\n _focusTrapStack = [];\n /**\n * Disables the FocusTrap at the top of the stack, and then pushes\n * the new FocusTrap onto the stack.\n */\n register(focusTrap) {\n // Dedupe focusTraps that register multiple times.\n this._focusTrapStack = this._focusTrapStack.filter(ft => ft !== focusTrap);\n let stack = this._focusTrapStack;\n if (stack.length) {\n stack[stack.length - 1]._disable();\n }\n stack.push(focusTrap);\n focusTrap._enable();\n }\n /**\n * Removes the FocusTrap from the stack, and activates the\n * FocusTrap that is the new top of the stack.\n */\n deregister(focusTrap) {\n focusTrap._disable();\n const stack = this._focusTrapStack;\n const i = stack.indexOf(focusTrap);\n if (i !== -1) {\n stack.splice(i, 1);\n if (stack.length) {\n stack[stack.length - 1]._enable();\n }\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusTrapManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusTrapManager, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusTrapManager, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/** Factory that allows easy instantiation of configurable focus traps. */\nclass ConfigurableFocusTrapFactory {\n _checker = inject(InteractivityChecker);\n _ngZone = inject(NgZone);\n _focusTrapManager = inject(FocusTrapManager);\n _document = inject(DOCUMENT);\n _inertStrategy;\n _injector = inject(Injector);\n constructor() {\n const inertStrategy = inject(FOCUS_TRAP_INERT_STRATEGY, { optional: true });\n // TODO split up the strategies into different modules, similar to DateAdapter.\n this._inertStrategy = inertStrategy || new EventListenerFocusTrapInertStrategy();\n }\n create(element, config = { defer: false }) {\n let configObject;\n if (typeof config === 'boolean') {\n configObject = { defer: config };\n }\n else {\n configObject = config;\n }\n return new ConfigurableFocusTrap(element, this._checker, this._ngZone, this._document, this._focusTrapManager, this._inertStrategy, configObject, this._injector);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ConfigurableFocusTrapFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ConfigurableFocusTrapFactory, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: ConfigurableFocusTrapFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n\n/** Gets whether an event could be a faked `mousedown` event dispatched by a screen reader. */\nfunction isFakeMousedownFromScreenReader(event) {\n // Some screen readers will dispatch a fake `mousedown` event when pressing enter or space on\n // a clickable element. We can distinguish these events when `event.buttons` is zero, or\n // `event.detail` is zero depending on the browser:\n // - `event.buttons` works on Firefox, but fails on Chrome.\n // - `detail` works on Chrome, but fails on Firefox.\n return event.buttons === 0 || event.detail === 0;\n}\n/** Gets whether an event could be a faked `touchstart` event dispatched by a screen reader. */\nfunction isFakeTouchstartFromScreenReader(event) {\n const touch = (event.touches && event.touches[0]) || (event.changedTouches && event.changedTouches[0]);\n // A fake `touchstart` can be distinguished from a real one by looking at the `identifier`\n // which is typically >= 0 on a real device versus -1 from a screen reader. Just to be safe,\n // we can also look at `radiusX` and `radiusY`. This behavior was observed against a Windows 10\n // device with a touch screen running NVDA v2020.4 and Firefox 85 or Chrome 88.\n return (!!touch &&\n touch.identifier === -1 &&\n (touch.radiusX == null || touch.radiusX === 1) &&\n (touch.radiusY == null || touch.radiusY === 1));\n}\n\n/**\n * Injectable options for the InputModalityDetector. These are shallowly merged with the default\n * options.\n */\nconst INPUT_MODALITY_DETECTOR_OPTIONS = new InjectionToken('cdk-input-modality-detector-options');\n/**\n * Default options for the InputModalityDetector.\n *\n * Modifier keys are ignored by default (i.e. when pressed won't cause the service to detect\n * keyboard input modality) for two reasons:\n *\n * 1. Modifier keys are commonly used with mouse to perform actions such as 'right click' or 'open\n * in new tab', and are thus less representative of actual keyboard interaction.\n * 2. VoiceOver triggers some keyboard events when linearly navigating with Control + Option (but\n * confusingly not with Caps Lock). Thus, to have parity with other screen readers, we ignore\n * these keys so as to not update the input modality.\n *\n * Note that we do not by default ignore the right Meta key on Safari because it has the same key\n * code as the ContextMenu key on other browsers. When we switch to using event.key, we can\n * distinguish between the two.\n */\nconst INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS = {\n ignoreKeys: [ALT, CONTROL, MAC_META, META, SHIFT],\n};\n/**\n * The amount of time needed to pass after a touchstart event in order for a subsequent mousedown\n * event to be attributed as mouse and not touch.\n *\n * This is the value used by AngularJS Material. Through trial and error (on iPhone 6S) they found\n * that a value of around 650ms seems appropriate.\n */\nconst TOUCH_BUFFER_MS = 650;\n/**\n * Event listener options that enable capturing and also mark the listener as passive if the browser\n * supports it.\n */\nconst modalityEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n capture: true,\n});\n/**\n * Service that detects the user's input modality.\n *\n * This service does not update the input modality when a user navigates with a screen reader\n * (e.g. linear navigation with VoiceOver, object navigation / browse mode with NVDA, virtual PC\n * cursor mode with JAWS). This is in part due to technical limitations (i.e. keyboard events do not\n * fire as expected in these modes) but is also arguably the correct behavior. Navigating with a\n * screen reader is akin to visually scanning a page, and should not be interpreted as actual user\n * input interaction.\n *\n * When a user is not navigating but *interacting* with a screen reader, this service attempts to\n * update the input modality to keyboard, but in general this service's behavior is largely\n * undefined.\n */\nclass InputModalityDetector {\n _platform = inject(Platform);\n /** Emits whenever an input modality is detected. */\n modalityDetected;\n /** Emits when the input modality changes. */\n modalityChanged;\n /** The most recently detected input modality. */\n get mostRecentModality() {\n return this._modality.value;\n }\n /**\n * The most recently detected input modality event target. Is null if no input modality has been\n * detected or if the associated event target is null for some unknown reason.\n */\n _mostRecentTarget = null;\n /** The underlying BehaviorSubject that emits whenever an input modality is detected. */\n _modality = new BehaviorSubject(null);\n /** Options for this InputModalityDetector. */\n _options;\n /**\n * The timestamp of the last touch input modality. Used to determine whether mousedown events\n * should be attributed to mouse or touch.\n */\n _lastTouchMs = 0;\n /**\n * Handles keydown events. Must be an arrow function in order to preserve the context when it gets\n * bound.\n */\n _onKeydown = (event) => {\n // If this is one of the keys we should ignore, then ignore it and don't update the input\n // modality to keyboard.\n if (this._options?.ignoreKeys?.some(keyCode => keyCode === event.keyCode)) {\n return;\n }\n this._modality.next('keyboard');\n this._mostRecentTarget = _getEventTarget(event);\n };\n /**\n * Handles mousedown events. Must be an arrow function in order to preserve the context when it\n * gets bound.\n */\n _onMousedown = (event) => {\n // Touches trigger both touch and mouse events, so we need to distinguish between mouse events\n // that were triggered via mouse vs touch. To do so, check if the mouse event occurs closely\n // after the previous touch event.\n if (Date.now() - this._lastTouchMs < TOUCH_BUFFER_MS) {\n return;\n }\n // Fake mousedown events are fired by some screen readers when controls are activated by the\n // screen reader. Attribute them to keyboard input modality.\n this._modality.next(isFakeMousedownFromScreenReader(event) ? 'keyboard' : 'mouse');\n this._mostRecentTarget = _getEventTarget(event);\n };\n /**\n * Handles touchstart events. Must be an arrow function in order to preserve the context when it\n * gets bound.\n */\n _onTouchstart = (event) => {\n // Same scenario as mentioned in _onMousedown, but on touch screen devices, fake touchstart\n // events are fired. Again, attribute to keyboard input modality.\n if (isFakeTouchstartFromScreenReader(event)) {\n this._modality.next('keyboard');\n return;\n }\n // Store the timestamp of this touch event, as it's used to distinguish between mouse events\n // triggered via mouse vs touch.\n this._lastTouchMs = Date.now();\n this._modality.next('touch');\n this._mostRecentTarget = _getEventTarget(event);\n };\n constructor() {\n const ngZone = inject(NgZone);\n const document = inject(DOCUMENT);\n const options = inject(INPUT_MODALITY_DETECTOR_OPTIONS, { optional: true });\n this._options = {\n ...INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS,\n ...options,\n };\n // Skip the first emission as it's null.\n this.modalityDetected = this._modality.pipe(skip(1));\n this.modalityChanged = this.modalityDetected.pipe(distinctUntilChanged());\n // If we're not in a browser, this service should do nothing, as there's no relevant input\n // modality to detect.\n if (this._platform.isBrowser) {\n ngZone.runOutsideAngular(() => {\n document.addEventListener('keydown', this._onKeydown, modalityEventListenerOptions);\n document.addEventListener('mousedown', this._onMousedown, modalityEventListenerOptions);\n document.addEventListener('touchstart', this._onTouchstart, modalityEventListenerOptions);\n });\n }\n }\n ngOnDestroy() {\n this._modality.complete();\n if (this._platform.isBrowser) {\n document.removeEventListener('keydown', this._onKeydown, modalityEventListenerOptions);\n document.removeEventListener('mousedown', this._onMousedown, modalityEventListenerOptions);\n document.removeEventListener('touchstart', this._onTouchstart, modalityEventListenerOptions);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: InputModalityDetector, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: InputModalityDetector, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: InputModalityDetector, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n\nconst LIVE_ANNOUNCER_ELEMENT_TOKEN = new InjectionToken('liveAnnouncerElement', {\n providedIn: 'root',\n factory: LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY,\n});\n/** @docs-private */\nfunction LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY() {\n return null;\n}\n/** Injection token that can be used to configure the default options for the LiveAnnouncer. */\nconst LIVE_ANNOUNCER_DEFAULT_OPTIONS = new InjectionToken('LIVE_ANNOUNCER_DEFAULT_OPTIONS');\n\nlet uniqueIds = 0;\nclass LiveAnnouncer {\n _ngZone = inject(NgZone);\n _defaultOptions = inject(LIVE_ANNOUNCER_DEFAULT_OPTIONS, {\n optional: true,\n });\n _liveElement;\n _document = inject(DOCUMENT);\n _previousTimeout;\n _currentPromise;\n _currentResolve;\n constructor() {\n const elementToken = inject(LIVE_ANNOUNCER_ELEMENT_TOKEN, { optional: true });\n this._liveElement = elementToken || this._createLiveElement();\n }\n announce(message, ...args) {\n const defaultOptions = this._defaultOptions;\n let politeness;\n let duration;\n if (args.length === 1 && typeof args[0] === 'number') {\n duration = args[0];\n }\n else {\n [politeness, duration] = args;\n }\n this.clear();\n clearTimeout(this._previousTimeout);\n if (!politeness) {\n politeness =\n defaultOptions && defaultOptions.politeness ? defaultOptions.politeness : 'polite';\n }\n if (duration == null && defaultOptions) {\n duration = defaultOptions.duration;\n }\n // TODO: ensure changing the politeness works on all environments we support.\n this._liveElement.setAttribute('aria-live', politeness);\n if (this._liveElement.id) {\n this._exposeAnnouncerToModals(this._liveElement.id);\n }\n // This 100ms timeout is necessary for some browser + screen-reader combinations:\n // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.\n // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a\n // second time without clearing and then using a non-zero delay.\n // (using JAWS 17 at time of this writing).\n return this._ngZone.runOutsideAngular(() => {\n if (!this._currentPromise) {\n this._currentPromise = new Promise(resolve => (this._currentResolve = resolve));\n }\n clearTimeout(this._previousTimeout);\n this._previousTimeout = setTimeout(() => {\n this._liveElement.textContent = message;\n if (typeof duration === 'number') {\n this._previousTimeout = setTimeout(() => this.clear(), duration);\n }\n // For some reason in tests this can be undefined\n // Probably related to ZoneJS and every other thing that patches browser APIs in tests\n this._currentResolve?.();\n this._currentPromise = this._currentResolve = undefined;\n }, 100);\n return this._currentPromise;\n });\n }\n /**\n * Clears the current text from the announcer element. Can be used to prevent\n * screen readers from reading the text out again while the user is going\n * through the page landmarks.\n */\n clear() {\n if (this._liveElement) {\n this._liveElement.textContent = '';\n }\n }\n ngOnDestroy() {\n clearTimeout(this._previousTimeout);\n this._liveElement?.remove();\n this._liveElement = null;\n this._currentResolve?.();\n this._currentPromise = this._currentResolve = undefined;\n }\n _createLiveElement() {\n const elementClass = 'cdk-live-announcer-element';\n const previousElements = this._document.getElementsByClassName(elementClass);\n const liveEl = this._document.createElement('div');\n // Remove any old containers. This can happen when coming in from a server-side-rendered page.\n for (let i = 0; i < previousElements.length; i++) {\n previousElements[i].remove();\n }\n liveEl.classList.add(elementClass);\n liveEl.classList.add('cdk-visually-hidden');\n liveEl.setAttribute('aria-atomic', 'true');\n liveEl.setAttribute('aria-live', 'polite');\n liveEl.id = `cdk-live-announcer-${uniqueIds++}`;\n this._document.body.appendChild(liveEl);\n return liveEl;\n }\n /**\n * Some browsers won't expose the accessibility node of the live announcer element if there is an\n * `aria-modal` and the live announcer is outside of it. This method works around the issue by\n * pointing the `aria-owns` of all modals to the live announcer element.\n */\n _exposeAnnouncerToModals(id) {\n // TODO(http://github.com/angular/components/issues/26853): consider de-duplicating this with\n // the `SnakBarContainer` and other usages.\n //\n // Note that the selector here is limited to CDK overlays at the moment in order to reduce the\n // section of the DOM we need to look through. This should cover all the cases we support, but\n // the selector can be expanded if it turns out to be too narrow.\n const modals = this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal=\"true\"]');\n for (let i = 0; i < modals.length; i++) {\n const modal = modals[i];\n const ariaOwns = modal.getAttribute('aria-owns');\n if (!ariaOwns) {\n modal.setAttribute('aria-owns', id);\n }\n else if (ariaOwns.indexOf(id) === -1) {\n modal.setAttribute('aria-owns', ariaOwns + ' ' + id);\n }\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: LiveAnnouncer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: LiveAnnouncer, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: LiveAnnouncer, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n/**\n * A directive that works similarly to aria-live, but uses the LiveAnnouncer to ensure compatibility\n * with a wider range of browsers and screen readers.\n */\nclass CdkAriaLive {\n _elementRef = inject(ElementRef);\n _liveAnnouncer = inject(LiveAnnouncer);\n _contentObserver = inject(ContentObserver);\n _ngZone = inject(NgZone);\n /** The aria-live politeness level to use when announcing messages. */\n get politeness() {\n return this._politeness;\n }\n set politeness(value) {\n this._politeness = value === 'off' || value === 'assertive' ? value : 'polite';\n if (this._politeness === 'off') {\n if (this._subscription) {\n this._subscription.unsubscribe();\n this._subscription = null;\n }\n }\n else if (!this._subscription) {\n this._subscription = this._ngZone.runOutsideAngular(() => {\n return this._contentObserver.observe(this._elementRef).subscribe(() => {\n // Note that we use textContent here, rather than innerText, in order to avoid a reflow.\n const elementText = this._elementRef.nativeElement.textContent;\n // The `MutationObserver` fires also for attribute\n // changes which we don't want to announce.\n if (elementText !== this._previousAnnouncedText) {\n this._liveAnnouncer.announce(elementText, this._politeness, this.duration);\n this._previousAnnouncedText = elementText;\n }\n });\n });\n }\n }\n _politeness = 'polite';\n /** Time in milliseconds after which to clear out the announcer element. */\n duration;\n _previousAnnouncedText;\n _subscription;\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);\n }\n ngOnDestroy() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: CdkAriaLive, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"19.0.0\", type: CdkAriaLive, isStandalone: true, selector: \"[cdkAriaLive]\", inputs: { politeness: [\"cdkAriaLive\", \"politeness\"], duration: [\"cdkAriaLiveDuration\", \"duration\"] }, exportAs: [\"cdkAriaLive\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: CdkAriaLive, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkAriaLive]',\n exportAs: 'cdkAriaLive',\n }]\n }], ctorParameters: () => [], propDecorators: { politeness: [{\n type: Input,\n args: ['cdkAriaLive']\n }], duration: [{\n type: Input,\n args: ['cdkAriaLiveDuration']\n }] } });\n\n/** Detection mode used for attributing the origin of a focus event. */\nvar FocusMonitorDetectionMode;\n(function (FocusMonitorDetectionMode) {\n /**\n * Any mousedown, keydown, or touchstart event that happened in the previous\n * tick or the current tick will be used to assign a focus event's origin (to\n * either mouse, keyboard, or touch). This is the default option.\n */\n FocusMonitorDetectionMode[FocusMonitorDetectionMode[\"IMMEDIATE\"] = 0] = \"IMMEDIATE\";\n /**\n * A focus event's origin is always attributed to the last corresponding\n * mousedown, keydown, or touchstart event, no matter how long ago it occurred.\n */\n FocusMonitorDetectionMode[FocusMonitorDetectionMode[\"EVENTUAL\"] = 1] = \"EVENTUAL\";\n})(FocusMonitorDetectionMode || (FocusMonitorDetectionMode = {}));\n/** InjectionToken for FocusMonitorOptions. */\nconst FOCUS_MONITOR_DEFAULT_OPTIONS = new InjectionToken('cdk-focus-monitor-default-options');\n/**\n * Event listener options that enable capturing and also\n * mark the listener as passive if the browser supports it.\n */\nconst captureEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n capture: true,\n});\n/** Monitors mouse and keyboard events to determine the cause of focus events. */\nclass FocusMonitor {\n _ngZone = inject(NgZone);\n _platform = inject(Platform);\n _inputModalityDetector = inject(InputModalityDetector);\n /** The focus origin that the next focus event is a result of. */\n _origin = null;\n /** The FocusOrigin of the last focus event tracked by the FocusMonitor. */\n _lastFocusOrigin;\n /** Whether the window has just been focused. */\n _windowFocused = false;\n /** The timeout id of the window focus timeout. */\n _windowFocusTimeoutId;\n /** The timeout id of the origin clearing timeout. */\n _originTimeoutId;\n /**\n * Whether the origin was determined via a touch interaction. Necessary as properly attributing\n * focus events to touch interactions requires special logic.\n */\n _originFromTouchInteraction = false;\n /** Map of elements being monitored to their info. */\n _elementInfo = new Map();\n /** The number of elements currently being monitored. */\n _monitoredElementCount = 0;\n /**\n * Keeps track of the root nodes to which we've currently bound a focus/blur handler,\n * as well as the number of monitored elements that they contain. We have to treat focus/blur\n * handlers differently from the rest of the events, because the browser won't emit events\n * to the document when focus moves inside of a shadow root.\n */\n _rootNodeFocusListenerCount = new Map();\n /**\n * The specified detection mode, used for attributing the origin of a focus\n * event.\n */\n _detectionMode;\n /**\n * Event listener for `focus` events on the window.\n * Needs to be an arrow function in order to preserve the context when it gets bound.\n */\n _windowFocusListener = () => {\n // Make a note of when the window regains focus, so we can\n // restore the origin info for the focused element.\n this._windowFocused = true;\n this._windowFocusTimeoutId = setTimeout(() => (this._windowFocused = false));\n };\n /** Used to reference correct document/window */\n _document = inject(DOCUMENT, { optional: true });\n /** Subject for stopping our InputModalityDetector subscription. */\n _stopInputModalityDetector = new Subject();\n constructor() {\n const options = inject(FOCUS_MONITOR_DEFAULT_OPTIONS, {\n optional: true,\n });\n this._detectionMode = options?.detectionMode || FocusMonitorDetectionMode.IMMEDIATE;\n }\n /**\n * Event listener for `focus` and 'blur' events on the document.\n * Needs to be an arrow function in order to preserve the context when it gets bound.\n */\n _rootNodeFocusAndBlurListener = (event) => {\n const target = _getEventTarget(event);\n // We need to walk up the ancestor chain in order to support `checkChildren`.\n for (let element = target; element; element = element.parentElement) {\n if (event.type === 'focus') {\n this._onFocus(event, element);\n }\n else {\n this._onBlur(event, element);\n }\n }\n };\n monitor(element, checkChildren = false) {\n const nativeElement = coerceElement(element);\n // Do nothing if we're not on the browser platform or the passed in node isn't an element.\n if (!this._platform.isBrowser || nativeElement.nodeType !== 1) {\n // Note: we don't want the observable to emit at all so we don't pass any parameters.\n return of();\n }\n // If the element is inside the shadow DOM, we need to bind our focus/blur listeners to\n // the shadow root, rather than the `document`, because the browser won't emit focus events\n // to the `document`, if focus is moving within the same shadow root.\n const rootNode = _getShadowRoot(nativeElement) || this._getDocument();\n const cachedInfo = this._elementInfo.get(nativeElement);\n // Check if we're already monitoring this element.\n if (cachedInfo) {\n if (checkChildren) {\n // TODO(COMP-318): this can be problematic, because it'll turn all non-checkChildren\n // observers into ones that behave as if `checkChildren` was turned on. We need a more\n // robust solution.\n cachedInfo.checkChildren = true;\n }\n return cachedInfo.subject;\n }\n // Create monitored element info.\n const info = {\n checkChildren: checkChildren,\n subject: new Subject(),\n rootNode,\n };\n this._elementInfo.set(nativeElement, info);\n this._registerGlobalListeners(info);\n return info.subject;\n }\n stopMonitoring(element) {\n const nativeElement = coerceElement(element);\n const elementInfo = this._elementInfo.get(nativeElement);\n if (elementInfo) {\n elementInfo.subject.complete();\n this._setClasses(nativeElement);\n this._elementInfo.delete(nativeElement);\n this._removeGlobalListeners(elementInfo);\n }\n }\n focusVia(element, origin, options) {\n const nativeElement = coerceElement(element);\n const focusedElement = this._getDocument().activeElement;\n // If the element is focused already, calling `focus` again won't trigger the event listener\n // which means that the focus classes won't be updated. If that's the case, update the classes\n // directly without waiting for an event.\n if (nativeElement === focusedElement) {\n this._getClosestElementsInfo(nativeElement).forEach(([currentElement, info]) => this._originChanged(currentElement, origin, info));\n }\n else {\n this._setOrigin(origin);\n // `focus` isn't available on the server\n if (typeof nativeElement.focus === 'function') {\n nativeElement.focus(options);\n }\n }\n }\n ngOnDestroy() {\n this._elementInfo.forEach((_info, element) => this.stopMonitoring(element));\n }\n /** Access injected document if available or fallback to global document reference */\n _getDocument() {\n return this._document || document;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n const doc = this._getDocument();\n return doc.defaultView || window;\n }\n _getFocusOrigin(focusEventTarget) {\n if (this._origin) {\n // If the origin was realized via a touch interaction, we need to perform additional checks\n // to determine whether the focus origin should be attributed to touch or program.\n if (this._originFromTouchInteraction) {\n return this._shouldBeAttributedToTouch(focusEventTarget) ? 'touch' : 'program';\n }\n else {\n return this._origin;\n }\n }\n // If the window has just regained focus, we can restore the most recent origin from before the\n // window blurred. Otherwise, we've reached the point where we can't identify the source of the\n // focus. This typically means one of two things happened:\n //\n // 1) The element was programmatically focused, or\n // 2) The element was focused via screen reader navigation (which generally doesn't fire\n // events).\n //\n // Because we can't distinguish between these two cases, we default to setting `program`.\n if (this._windowFocused && this._lastFocusOrigin) {\n return this._lastFocusOrigin;\n }\n // If the interaction is coming from an input label, we consider it a mouse interactions.\n // This is a special case where focus moves on `click`, rather than `mousedown` which breaks\n // our detection, because all our assumptions are for `mousedown`. We need to handle this\n // special case, because it's very common for checkboxes and radio buttons.\n if (focusEventTarget && this._isLastInteractionFromInputLabel(focusEventTarget)) {\n return 'mouse';\n }\n return 'program';\n }\n /**\n * Returns whether the focus event should be attributed to touch. Recall that in IMMEDIATE mode, a\n * touch origin isn't immediately reset at the next tick (see _setOrigin). This means that when we\n * handle a focus event following a touch interaction, we need to determine whether (1) the focus\n * event was directly caused by the touch interaction or (2) the focus event was caused by a\n * subsequent programmatic focus call triggered by the touch interaction.\n * @param focusEventTarget The target of the focus event under examination.\n */\n _shouldBeAttributedToTouch(focusEventTarget) {\n // Please note that this check is not perfect. Consider the following edge case:\n //\n //
\n //
\n //
\n //\n // Suppose there is a FocusMonitor in IMMEDIATE mode attached to #parent. When the user touches\n // #child, #parent is programmatically focused. This code will attribute the focus to touch\n // instead of program. This is a relatively minor edge-case that can be worked around by using\n // focusVia(parent, 'program') to focus #parent.\n return (this._detectionMode === FocusMonitorDetectionMode.EVENTUAL ||\n !!focusEventTarget?.contains(this._inputModalityDetector._mostRecentTarget));\n }\n /**\n * Sets the focus classes on the element based on the given focus origin.\n * @param element The element to update the classes on.\n * @param origin The focus origin.\n */\n _setClasses(element, origin) {\n element.classList.toggle('cdk-focused', !!origin);\n element.classList.toggle('cdk-touch-focused', origin === 'touch');\n element.classList.toggle('cdk-keyboard-focused', origin === 'keyboard');\n element.classList.toggle('cdk-mouse-focused', origin === 'mouse');\n element.classList.toggle('cdk-program-focused', origin === 'program');\n }\n /**\n * Updates the focus origin. If we're using immediate detection mode, we schedule an async\n * function to clear the origin at the end of a timeout. The duration of the timeout depends on\n * the origin being set.\n * @param origin The origin to set.\n * @param isFromInteraction Whether we are setting the origin from an interaction event.\n */\n _setOrigin(origin, isFromInteraction = false) {\n this._ngZone.runOutsideAngular(() => {\n this._origin = origin;\n this._originFromTouchInteraction = origin === 'touch' && isFromInteraction;\n // If we're in IMMEDIATE mode, reset the origin at the next tick (or in `TOUCH_BUFFER_MS` ms\n // for a touch event). We reset the origin at the next tick because Firefox focuses one tick\n // after the interaction event. We wait `TOUCH_BUFFER_MS` ms before resetting the origin for\n // a touch event because when a touch event is fired, the associated focus event isn't yet in\n // the event queue. Before doing so, clear any pending timeouts.\n if (this._detectionMode === FocusMonitorDetectionMode.IMMEDIATE) {\n clearTimeout(this._originTimeoutId);\n const ms = this._originFromTouchInteraction ? TOUCH_BUFFER_MS : 1;\n this._originTimeoutId = setTimeout(() => (this._origin = null), ms);\n }\n });\n }\n /**\n * Handles focus events on a registered element.\n * @param event The focus event.\n * @param element The monitored element.\n */\n _onFocus(event, element) {\n // NOTE(mmalerba): We currently set the classes based on the focus origin of the most recent\n // focus event affecting the monitored element. If we want to use the origin of the first event\n // instead we should check for the cdk-focused class here and return if the element already has\n // it. (This only matters for elements that have includesChildren = true).\n // If we are not counting child-element-focus as focused, make sure that the event target is the\n // monitored element itself.\n const elementInfo = this._elementInfo.get(element);\n const focusEventTarget = _getEventTarget(event);\n if (!elementInfo || (!elementInfo.checkChildren && element !== focusEventTarget)) {\n return;\n }\n this._originChanged(element, this._getFocusOrigin(focusEventTarget), elementInfo);\n }\n /**\n * Handles blur events on a registered element.\n * @param event The blur event.\n * @param element The monitored element.\n */\n _onBlur(event, element) {\n // If we are counting child-element-focus as focused, make sure that we aren't just blurring in\n // order to focus another child of the monitored element.\n const elementInfo = this._elementInfo.get(element);\n if (!elementInfo ||\n (elementInfo.checkChildren &&\n event.relatedTarget instanceof Node &&\n element.contains(event.relatedTarget))) {\n return;\n }\n this._setClasses(element);\n this._emitOrigin(elementInfo, null);\n }\n _emitOrigin(info, origin) {\n if (info.subject.observers.length) {\n this._ngZone.run(() => info.subject.next(origin));\n }\n }\n _registerGlobalListeners(elementInfo) {\n if (!this._platform.isBrowser) {\n return;\n }\n const rootNode = elementInfo.rootNode;\n const rootNodeFocusListeners = this._rootNodeFocusListenerCount.get(rootNode) || 0;\n if (!rootNodeFocusListeners) {\n this._ngZone.runOutsideAngular(() => {\n rootNode.addEventListener('focus', this._rootNodeFocusAndBlurListener, captureEventListenerOptions);\n rootNode.addEventListener('blur', this._rootNodeFocusAndBlurListener, captureEventListenerOptions);\n });\n }\n this._rootNodeFocusListenerCount.set(rootNode, rootNodeFocusListeners + 1);\n // Register global listeners when first element is monitored.\n if (++this._monitoredElementCount === 1) {\n // Note: we listen to events in the capture phase so we\n // can detect them even if the user stops propagation.\n this._ngZone.runOutsideAngular(() => {\n const window = this._getWindow();\n window.addEventListener('focus', this._windowFocusListener);\n });\n // The InputModalityDetector is also just a collection of global listeners.\n this._inputModalityDetector.modalityDetected\n .pipe(takeUntil(this._stopInputModalityDetector))\n .subscribe(modality => {\n this._setOrigin(modality, true /* isFromInteraction */);\n });\n }\n }\n _removeGlobalListeners(elementInfo) {\n const rootNode = elementInfo.rootNode;\n if (this._rootNodeFocusListenerCount.has(rootNode)) {\n const rootNodeFocusListeners = this._rootNodeFocusListenerCount.get(rootNode);\n if (rootNodeFocusListeners > 1) {\n this._rootNodeFocusListenerCount.set(rootNode, rootNodeFocusListeners - 1);\n }\n else {\n rootNode.removeEventListener('focus', this._rootNodeFocusAndBlurListener, captureEventListenerOptions);\n rootNode.removeEventListener('blur', this._rootNodeFocusAndBlurListener, captureEventListenerOptions);\n this._rootNodeFocusListenerCount.delete(rootNode);\n }\n }\n // Unregister global listeners when last element is unmonitored.\n if (!--this._monitoredElementCount) {\n const window = this._getWindow();\n window.removeEventListener('focus', this._windowFocusListener);\n // Equivalently, stop our InputModalityDetector subscription.\n this._stopInputModalityDetector.next();\n // Clear timeouts for all potentially pending timeouts to prevent the leaks.\n clearTimeout(this._windowFocusTimeoutId);\n clearTimeout(this._originTimeoutId);\n }\n }\n /** Updates all the state on an element once its focus origin has changed. */\n _originChanged(element, origin, elementInfo) {\n this._setClasses(element, origin);\n this._emitOrigin(elementInfo, origin);\n this._lastFocusOrigin = origin;\n }\n /**\n * Collects the `MonitoredElementInfo` of a particular element and\n * all of its ancestors that have enabled `checkChildren`.\n * @param element Element from which to start the search.\n */\n _getClosestElementsInfo(element) {\n const results = [];\n this._elementInfo.forEach((info, currentElement) => {\n if (currentElement === element || (info.checkChildren && currentElement.contains(element))) {\n results.push([currentElement, info]);\n }\n });\n return results;\n }\n /**\n * Returns whether an interaction is likely to have come from the user clicking the `label` of\n * an `input` or `textarea` in order to focus it.\n * @param focusEventTarget Target currently receiving focus.\n */\n _isLastInteractionFromInputLabel(focusEventTarget) {\n const { _mostRecentTarget: mostRecentTarget, mostRecentModality } = this._inputModalityDetector;\n // If the last interaction used the mouse on an element contained by one of the labels\n // of an `input`/`textarea` that is currently focused, it is very likely that the\n // user redirected focus using the label.\n if (mostRecentModality !== 'mouse' ||\n !mostRecentTarget ||\n mostRecentTarget === focusEventTarget ||\n (focusEventTarget.nodeName !== 'INPUT' && focusEventTarget.nodeName !== 'TEXTAREA') ||\n focusEventTarget.disabled) {\n return false;\n }\n const labels = focusEventTarget.labels;\n if (labels) {\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].contains(mostRecentTarget)) {\n return true;\n }\n }\n }\n return false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusMonitor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusMonitor, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: FocusMonitor, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n/**\n * Directive that determines how a particular element was focused (via keyboard, mouse, touch, or\n * programmatically) and adds corresponding classes to the element.\n *\n * There are two variants of this directive:\n * 1) cdkMonitorElementFocus: does not consider an element to be focused if one of its children is\n * focused.\n * 2) cdkMonitorSubtreeFocus: considers an element focused if it or any of its children are focused.\n */\nclass CdkMonitorFocus {\n _elementRef = inject(ElementRef);\n _focusMonitor = inject(FocusMonitor);\n _monitorSubscription;\n _focusOrigin = null;\n cdkFocusChange = new EventEmitter();\n constructor() { }\n get focusOrigin() {\n return this._focusOrigin;\n }\n ngAfterViewInit() {\n const element = this._elementRef.nativeElement;\n this._monitorSubscription = this._focusMonitor\n .monitor(element, element.nodeType === 1 && element.hasAttribute('cdkMonitorSubtreeFocus'))\n .subscribe(origin => {\n this._focusOrigin = origin;\n this.cdkFocusChange.emit(origin);\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n if (this._monitorSubscription) {\n this._monitorSubscription.unsubscribe();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: CdkMonitorFocus, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"19.0.0\", type: CdkMonitorFocus, isStandalone: true, selector: \"[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]\", outputs: { cdkFocusChange: \"cdkFocusChange\" }, exportAs: [\"cdkMonitorFocus\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: CdkMonitorFocus, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]',\n exportAs: 'cdkMonitorFocus',\n }]\n }], ctorParameters: () => [], propDecorators: { cdkFocusChange: [{\n type: Output\n }] } });\n\n/** Set of possible high-contrast mode backgrounds. */\nvar HighContrastMode;\n(function (HighContrastMode) {\n HighContrastMode[HighContrastMode[\"NONE\"] = 0] = \"NONE\";\n HighContrastMode[HighContrastMode[\"BLACK_ON_WHITE\"] = 1] = \"BLACK_ON_WHITE\";\n HighContrastMode[HighContrastMode[\"WHITE_ON_BLACK\"] = 2] = \"WHITE_ON_BLACK\";\n})(HighContrastMode || (HighContrastMode = {}));\n/** CSS class applied to the document body when in black-on-white high-contrast mode. */\nconst BLACK_ON_WHITE_CSS_CLASS = 'cdk-high-contrast-black-on-white';\n/** CSS class applied to the document body when in white-on-black high-contrast mode. */\nconst WHITE_ON_BLACK_CSS_CLASS = 'cdk-high-contrast-white-on-black';\n/** CSS class applied to the document body when in high-contrast mode. */\nconst HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS = 'cdk-high-contrast-active';\n/**\n * Service to determine whether the browser is currently in a high-contrast-mode environment.\n *\n * Microsoft Windows supports an accessibility feature called \"High Contrast Mode\". This mode\n * changes the appearance of all applications, including web applications, to dramatically increase\n * contrast.\n *\n * IE, Edge, and Firefox currently support this mode. Chrome does not support Windows High Contrast\n * Mode. This service does not detect high-contrast mode as added by the Chrome \"High Contrast\"\n * browser extension.\n */\nclass HighContrastModeDetector {\n _platform = inject(Platform);\n /**\n * Figuring out the high contrast mode and adding the body classes can cause\n * some expensive layouts. This flag is used to ensure that we only do it once.\n */\n _hasCheckedHighContrastMode;\n _document = inject(DOCUMENT);\n _breakpointSubscription;\n constructor() {\n this._breakpointSubscription = inject(BreakpointObserver)\n .observe('(forced-colors: active)')\n .subscribe(() => {\n if (this._hasCheckedHighContrastMode) {\n this._hasCheckedHighContrastMode = false;\n this._applyBodyHighContrastModeCssClasses();\n }\n });\n }\n /** Gets the current high-contrast-mode for the page. */\n getHighContrastMode() {\n if (!this._platform.isBrowser) {\n return HighContrastMode.NONE;\n }\n // Create a test element with an arbitrary background-color that is neither black nor\n // white; high-contrast mode will coerce the color to either black or white. Also ensure that\n // appending the test element to the DOM does not affect layout by absolutely positioning it\n const testElement = this._document.createElement('div');\n testElement.style.backgroundColor = 'rgb(1,2,3)';\n testElement.style.position = 'absolute';\n this._document.body.appendChild(testElement);\n // Get the computed style for the background color, collapsing spaces to normalize between\n // browsers. Once we get this color, we no longer need the test element. Access the `window`\n // via the document so we can fake it in tests. Note that we have extra null checks, because\n // this logic will likely run during app bootstrap and throwing can break the entire app.\n const documentWindow = this._document.defaultView || window;\n const computedStyle = documentWindow && documentWindow.getComputedStyle\n ? documentWindow.getComputedStyle(testElement)\n : null;\n const computedColor = ((computedStyle && computedStyle.backgroundColor) || '').replace(/ /g, '');\n testElement.remove();\n switch (computedColor) {\n // Pre Windows 11 dark theme.\n case 'rgb(0,0,0)':\n // Windows 11 dark themes.\n case 'rgb(45,50,54)':\n case 'rgb(32,32,32)':\n return HighContrastMode.WHITE_ON_BLACK;\n // Pre Windows 11 light theme.\n case 'rgb(255,255,255)':\n // Windows 11 light theme.\n case 'rgb(255,250,239)':\n return HighContrastMode.BLACK_ON_WHITE;\n }\n return HighContrastMode.NONE;\n }\n ngOnDestroy() {\n this._breakpointSubscription.unsubscribe();\n }\n /** Applies CSS classes indicating high-contrast mode to document body (browser-only). */\n _applyBodyHighContrastModeCssClasses() {\n if (!this._hasCheckedHighContrastMode && this._platform.isBrowser && this._document.body) {\n const bodyClasses = this._document.body.classList;\n bodyClasses.remove(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS, BLACK_ON_WHITE_CSS_CLASS, WHITE_ON_BLACK_CSS_CLASS);\n this._hasCheckedHighContrastMode = true;\n const mode = this.getHighContrastMode();\n if (mode === HighContrastMode.BLACK_ON_WHITE) {\n bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS, BLACK_ON_WHITE_CSS_CLASS);\n }\n else if (mode === HighContrastMode.WHITE_ON_BLACK) {\n bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS, WHITE_ON_BLACK_CSS_CLASS);\n }\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: HighContrastModeDetector, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: HighContrastModeDetector, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: HighContrastModeDetector, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n\nclass A11yModule {\n constructor() {\n inject(HighContrastModeDetector)._applyBodyHighContrastModeCssClasses();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: A11yModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"19.0.0\", ngImport: i0, type: A11yModule, imports: [ObserversModule, CdkAriaLive, CdkTrapFocus, CdkMonitorFocus], exports: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: A11yModule, imports: [ObserversModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: A11yModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [ObserversModule, CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],\n exports: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],\n }]\n }], ctorParameters: () => [] });\n\n/**\n * Keeps track of the ID count per prefix. This helps us make the IDs a bit more deterministic\n * like they were before the service was introduced. Note that ideally we wouldn't have to do\n * this, but there are some internal tests that rely on the IDs.\n */\nconst counters = {};\n/** Service that generates unique IDs for DOM nodes. */\nclass _IdGenerator {\n _appId = inject(APP_ID);\n /**\n * Generates a unique ID with a specific prefix.\n * @param prefix Prefix to add to the ID.\n */\n getId(prefix) {\n // Omit the app ID if it's the default `ng`. Since the vast majority of pages have one\n // Angular app on them, we can reduce the amount of breakages by not adding it.\n if (this._appId !== 'ng') {\n prefix += this._appId;\n }\n if (!counters.hasOwnProperty(prefix)) {\n counters[prefix] = 0;\n }\n return `${prefix}${counters[prefix]++}`;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: _IdGenerator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: _IdGenerator, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.0.0\", ngImport: i0, type: _IdGenerator, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { A11yModule, ActiveDescendantKeyManager, AriaDescriber, CDK_DESCRIBEDBY_HOST_ATTRIBUTE, CDK_DESCRIBEDBY_ID_PREFIX, CdkAriaLive, CdkMonitorFocus, CdkTrapFocus, ConfigurableFocusTrap, ConfigurableFocusTrapFactory, EventListenerFocusTrapInertStrategy, FOCUS_MONITOR_DEFAULT_OPTIONS, FOCUS_TRAP_INERT_STRATEGY, FocusKeyManager, FocusMonitor, FocusMonitorDetectionMode, FocusTrap, FocusTrapFactory, HighContrastMode, HighContrastModeDetector, INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS, INPUT_MODALITY_DETECTOR_OPTIONS, InputModalityDetector, InteractivityChecker, IsFocusableConfig, LIVE_ANNOUNCER_DEFAULT_OPTIONS, LIVE_ANNOUNCER_ELEMENT_TOKEN, LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY, ListKeyManager, LiveAnnouncer, MESSAGES_CONTAINER_ID, NOOP_TREE_KEY_MANAGER_FACTORY, NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER, NoopTreeKeyManager, TREE_KEY_MANAGER, TREE_KEY_MANAGER_FACTORY, TREE_KEY_MANAGER_FACTORY_PROVIDER, TreeKeyManager, _IdGenerator, addAriaReferencedId, getAriaReferenceIds, isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader, removeAriaReferencedId };\n","import * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, InjectFlags, Directive, Input, Output, forwardRef, Component, ViewChild, NgModule } from '@angular/core';\nimport { NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nclass ScriptService {\r\n constructor(zone) {\r\n this.zone = zone;\r\n this.scriptElemId = \"ngx-catpcha-script\";\r\n /**\r\n * Name of the global google recaptcha script\r\n */\r\n this.windowGrecaptcha = \"grecaptcha\";\r\n /**\r\n * Name of enterpise property in the global google recaptcha script\r\n */\r\n this.windowGrecaptchaEnterprise = \"enterprise\";\r\n /**\r\n * Name of the global callback\r\n */\r\n this.windowOnLoadCallbackProperty = \"ngx_captcha_onload_callback\";\r\n /**\r\n * Name of the global callback for enterprise\r\n */\r\n this.windowOnLoadEnterpriseCallbackProperty = \"ngx_captcha_onload_enterprise_callback\";\r\n this.globalDomain = \"recaptcha.net\";\r\n this.defaultDomain = \"google.com\";\r\n this.enterpriseApi = \"enterprise.js\";\r\n this.defaultApi = \"api.js\";\r\n }\r\n registerCaptchaScript(config, render, onLoad, language) {\r\n if (this.grecaptchaScriptLoaded(config.useEnterprise)) {\r\n // recaptcha script is already loaded\r\n // just call the callback\r\n if (config.useEnterprise) {\r\n this.zone.run(() => {\r\n onLoad(window[this.windowGrecaptcha][this.windowGrecaptchaEnterprise]);\r\n });\r\n }\r\n else {\r\n this.zone.run(() => {\r\n onLoad(window[this.windowGrecaptcha]);\r\n });\r\n }\r\n return;\r\n }\r\n // we need to patch the callback through global variable, otherwise callback is not accessible\r\n // note: https://github.com/Enngage/ngx-captcha/issues/2\r\n if (config.useEnterprise) {\r\n window[this.getCallbackName(true)] = ((() => this.zone.run(onLoad.bind(this, window[this.windowGrecaptcha][this.windowGrecaptchaEnterprise]))));\r\n }\r\n else {\r\n window[this.getCallbackName(false)] = ((() => this.zone.run(onLoad.bind(this, window[this.windowGrecaptcha]))));\r\n }\r\n // prepare script elem\r\n const scriptElem = document.createElement(\"script\");\r\n scriptElem.id = this.scriptElemId;\r\n scriptElem.innerHTML = \"\";\r\n scriptElem.src = this.getCaptchaScriptUrl(config, render, language);\r\n scriptElem.async = true;\r\n scriptElem.defer = true;\r\n // add script to header\r\n document.getElementsByTagName(\"head\")[0].appendChild(scriptElem);\r\n }\r\n cleanup() {\r\n const elem = document.getElementById(this.scriptElemId);\r\n if (elem) {\r\n elem.remove();\r\n }\r\n window[this.getCallbackName()] = undefined;\r\n window[this.windowGrecaptcha] = undefined;\r\n }\r\n /**\r\n * Indicates if google recaptcha script is available and ready to be used\r\n */\r\n grecaptchaScriptLoaded(useEnterprise) {\r\n if (!window[this.getCallbackName(useEnterprise)] ||\r\n !window[this.windowGrecaptcha]) {\r\n return false;\r\n }\r\n else if (useEnterprise &&\r\n window[this.windowGrecaptcha][this.windowGrecaptchaEnterprise]) {\r\n return true;\r\n // if only enterprise script is loaded we need to check some v3's method\r\n }\r\n else if (window[this.windowGrecaptcha].execute) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Gets global callback name\r\n * @param useEnterprise Optional flag for enterprise script\r\n * @private\r\n */\r\n getCallbackName(useEnterprise) {\r\n return useEnterprise\r\n ? this.windowOnLoadEnterpriseCallbackProperty\r\n : this.windowOnLoadCallbackProperty;\r\n }\r\n /**\r\n * Gets language param used in script url\r\n */\r\n getLanguageParam(hl) {\r\n if (!hl) {\r\n return \"\";\r\n }\r\n return `&hl=${hl}`;\r\n }\r\n /**\r\n * Url to google api script\r\n */\r\n getCaptchaScriptUrl(config, render, language) {\r\n const domain = config.useGlobalDomain\r\n ? this.globalDomain\r\n : this.defaultDomain;\r\n const api = config.useEnterprise ? this.enterpriseApi : this.defaultApi;\r\n const callback = this.getCallbackName(config.useEnterprise);\r\n return `https://www.${domain}/recaptcha/${api}?onload=${callback}&render=${render}${this.getLanguageParam(language)}`;\r\n }\r\n}\r\n/** @nocollapse */ ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: ScriptService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\r\n/** @nocollapse */ ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: ScriptService, providedIn: \"root\" });\r\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: ScriptService, decorators: [{\r\n type: Injectable,\r\n args: [{\r\n providedIn: \"root\",\r\n }]\r\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\nclass BaseReCaptchaComponentDirective {\r\n constructor(renderer, zone, injector, scriptService) {\r\n this.renderer = renderer;\r\n this.zone = zone;\r\n this.injector = injector;\r\n this.scriptService = scriptService;\r\n /**\r\n * Prefix of the captcha element\r\n */\r\n this.captchaElemPrefix = \"ngx_captcha_id_\";\r\n this.setupCaptcha = true;\r\n /**\r\n * Indicates if global domain 'recaptcha.net' should be used instead of default domain ('google.com')\r\n */\r\n this.useGlobalDomain = false;\r\n this.useEnterprise = false;\r\n /**\r\n * Type\r\n */\r\n this.type = \"image\";\r\n /**\r\n * Tab index\r\n */\r\n this.tabIndex = 0;\r\n /**\r\n * Called when captcha receives successful response.\r\n * Captcha response token is passed to event.\r\n */\r\n this.success = new EventEmitter();\r\n /**\r\n * Called when captcha is loaded. Event receives id of the captcha\r\n */\r\n this.load = new EventEmitter();\r\n /**\r\n * Called when captcha is reset.\r\n */\r\n this.reset = new EventEmitter();\r\n /**\r\n * Called when captcha is loaded & ready. I.e. when you need to execute captcha on component load.\r\n */\r\n this.ready = new EventEmitter();\r\n /**\r\n * Error callback\r\n */\r\n this.error = new EventEmitter();\r\n /**\r\n * Expired callback\r\n */\r\n this.expire = new EventEmitter();\r\n /**\r\n * Indicates if captcha should be set on load\r\n */\r\n this.setupAfterLoad = false;\r\n /**\r\n * If enabled, captcha will reset after receiving success response. This is useful\r\n * when invisible captcha need to be resolved multiple times on same page\r\n */\r\n this.resetCaptchaAfterSuccess = false;\r\n /**\r\n * Required by ControlValueAccessor\r\n */\r\n this.onChange = (val) => { };\r\n this.onTouched = (val) => { };\r\n /**\r\n * Indicates if captcha is loaded\r\n */\r\n this.isLoaded = false;\r\n }\r\n ngAfterViewInit() {\r\n this.control = this.injector.get(NgControl, undefined, InjectFlags.Optional)?.control;\r\n }\r\n ngAfterViewChecked() {\r\n if (this.setupCaptcha) {\r\n this.setupCaptcha = false;\r\n this.setupComponent();\r\n }\r\n }\r\n ngOnChanges(changes) {\r\n // cleanup scripts if language changed because they need to be reloaded\r\n if (changes && changes.hl) {\r\n // cleanup scripts when language changes\r\n if (!changes.hl.firstChange &&\r\n changes.hl.currentValue !== changes.hl.previousValue) {\r\n this.scriptService.cleanup();\r\n }\r\n }\r\n if (changes && changes.useGlobalDomain) {\r\n // cleanup scripts when domain changes\r\n if (!changes.useGlobalDomain.firstChange &&\r\n changes.useGlobalDomain.currentValue !==\r\n changes.useGlobalDomain.previousValue) {\r\n this.scriptService.cleanup();\r\n }\r\n }\r\n this.setupCaptcha = true;\r\n }\r\n /**\r\n * Gets captcha response as per reCaptcha docs\r\n */\r\n getResponse() {\r\n return this.reCaptchaApi.getResponse(this.captchaId);\r\n }\r\n /**\r\n * Gets Id of captcha widget\r\n */\r\n getCaptchaId() {\r\n return this.captchaId;\r\n }\r\n /**\r\n * Resets captcha\r\n */\r\n resetCaptcha() {\r\n this.zone.run(() => {\r\n // reset captcha using Google js api\r\n this.reCaptchaApi.reset();\r\n // required due to forms\r\n this.onChange(undefined);\r\n this.onTouched(undefined);\r\n // trigger reset event\r\n this.reset.next();\r\n });\r\n }\r\n /**\r\n * Gets last submitted captcha response\r\n */\r\n getCurrentResponse() {\r\n return this.currentResponse;\r\n }\r\n /**\r\n * Reload captcha. Useful when properties (i.e. theme) changed and captcha need to reflect them\r\n */\r\n reloadCaptcha() {\r\n this.setupComponent();\r\n }\r\n ensureCaptchaElem(captchaElemId) {\r\n const captchaElem = document.getElementById(captchaElemId);\r\n if (!captchaElem) {\r\n throw Error(`Captcha element with id '${captchaElemId}' was not found`);\r\n }\r\n // assign captcha alem\r\n this.captchaElem = captchaElem;\r\n }\r\n /**\r\n * Responsible for instantiating captcha element\r\n */\r\n renderReCaptcha() {\r\n // run outside angular zone due to timeout issues when testing\r\n // details: https://github.com/Enngage/ngx-captcha/issues/26\r\n this.zone.runOutsideAngular(() => {\r\n // to fix reCAPTCHA placeholder element must be an element or id\r\n // https://github.com/Enngage/ngx-captcha/issues/96\r\n setTimeout(() => {\r\n this.captchaId = this.reCaptchaApi.render(this.captchaElemId, this.getCaptchaProperties());\r\n this.ready.next();\r\n }, 0);\r\n });\r\n }\r\n /**\r\n * Called when captcha receives response\r\n * @param callback Callback\r\n */\r\n handleCallback(callback) {\r\n this.currentResponse = callback;\r\n this.success.next(callback);\r\n this.zone.run(() => {\r\n this.onChange(callback);\r\n this.onTouched(callback);\r\n });\r\n if (this.resetCaptchaAfterSuccess) {\r\n this.resetCaptcha();\r\n }\r\n }\r\n getPseudoUniqueNumber() {\r\n return new Date().getUTCMilliseconds() + Math.floor(Math.random() * 9999);\r\n }\r\n setupComponent() {\r\n // captcha specific setup\r\n this.captchaSpecificSetup();\r\n // create captcha wrapper\r\n this.createAndSetCaptchaElem();\r\n this.scriptService.registerCaptchaScript({\r\n useGlobalDomain: this.useGlobalDomain,\r\n useEnterprise: this.useEnterprise,\r\n }, \"explicit\", (grecaptcha) => {\r\n this.onloadCallback(grecaptcha);\r\n }, this.hl);\r\n }\r\n /**\r\n * Called when google's recaptcha script is ready\r\n */\r\n onloadCallback(grecapcha) {\r\n // assign reference to reCaptcha Api once its loaded\r\n this.reCaptchaApi = grecapcha;\r\n if (!this.reCaptchaApi) {\r\n throw Error(`ReCaptcha Api was not initialized correctly`);\r\n }\r\n // loaded flag\r\n this.isLoaded = true;\r\n // fire load event\r\n this.load.next();\r\n // render captcha\r\n this.renderReCaptcha();\r\n // setup component if it was flagged as such\r\n if (this.setupAfterLoad) {\r\n this.setupAfterLoad = false;\r\n this.setupComponent();\r\n }\r\n }\r\n generateNewElemId() {\r\n return this.captchaElemPrefix + this.getPseudoUniqueNumber();\r\n }\r\n createAndSetCaptchaElem() {\r\n // generate new captcha id\r\n this.captchaElemId = this.generateNewElemId();\r\n if (!this.captchaElemId) {\r\n throw Error(`Captcha elem Id is not set`);\r\n }\r\n if (!this.captchaWrapperElem) {\r\n throw Error(`Captcha DOM element is not initialized`);\r\n }\r\n // remove old html\r\n this.captchaWrapperElem.nativeElement.innerHTML = \"\";\r\n // create new wrapper for captcha\r\n const newElem = this.renderer.createElement(\"div\");\r\n newElem.id = this.captchaElemId;\r\n this.renderer.appendChild(this.captchaWrapperElem.nativeElement, newElem);\r\n // when use captcha in cdk stepper then throwing error Captcha element with id 'ngx_captcha_id_XXXX' not found\r\n // to fix it checking ensureCaptchaElem in timeout so that its check in next call and its able to find element\r\n setTimeout(() => {\r\n // update captcha elem\r\n if (this.captchaElemId) {\r\n this.ensureCaptchaElem(this.captchaElemId);\r\n }\r\n }, 0);\r\n }\r\n /**\r\n * To be aligned with the ControlValueAccessor interface we need to implement this method\r\n * However as we don't want to update the recaptcha, this doesn't need to be implemented\r\n */\r\n writeValue(obj) { }\r\n /**\r\n * This method helps us tie together recaptcha and our formControl values\r\n */\r\n registerOnChange(fn) {\r\n this.onChange = fn;\r\n }\r\n /**\r\n * At some point we might be interested whether the user has touched our component\r\n */\r\n registerOnTouched(fn) {\r\n this.onTouched = fn;\r\n }\r\n /**\r\n * Handles error callback\r\n */\r\n handleErrorCallback() {\r\n this.zone.run(() => {\r\n this.onChange(undefined);\r\n this.onTouched(undefined);\r\n });\r\n this.error.next();\r\n }\r\n /**\r\n * Handles expired callback\r\n */\r\n handleExpireCallback() {\r\n this.expire.next();\r\n // reset captcha on expire callback\r\n this.resetCaptcha();\r\n }\r\n}\r\n/** @nocollapse */ BaseReCaptchaComponentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: BaseReCaptchaComponentDirective, deps: [{ token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.Injector }, { token: ScriptService }], target: i0.ɵɵFactoryTarget.Directive });\r\n/** @nocollapse */ BaseReCaptchaComponentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.0.4\", type: BaseReCaptchaComponentDirective, inputs: { siteKey: \"siteKey\", useGlobalDomain: \"useGlobalDomain\", useEnterprise: \"useEnterprise\", type: \"type\", hl: \"hl\", tabIndex: \"tabIndex\" }, outputs: { success: \"success\", load: \"load\", reset: \"reset\", ready: \"ready\", error: \"error\", expire: \"expire\" }, usesOnChanges: true, ngImport: i0 });\r\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: BaseReCaptchaComponentDirective, decorators: [{\r\n type: Directive\r\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.Injector }, { type: ScriptService }]; }, propDecorators: { siteKey: [{\r\n type: Input\r\n }], useGlobalDomain: [{\r\n type: Input\r\n }], useEnterprise: [{\r\n type: Input\r\n }], type: [{\r\n type: Input\r\n }], hl: [{\r\n type: Input\r\n }], tabIndex: [{\r\n type: Input\r\n }], success: [{\r\n type: Output\r\n }], load: [{\r\n type: Output\r\n }], reset: [{\r\n type: Output\r\n }], ready: [{\r\n type: Output\r\n }], error: [{\r\n type: Output\r\n }], expire: [{\r\n type: Output\r\n }] } });\n\nvar ReCaptchaType;\r\n(function (ReCaptchaType) {\r\n ReCaptchaType[ReCaptchaType[\"InvisibleReCaptcha\"] = 0] = \"InvisibleReCaptcha\";\r\n ReCaptchaType[ReCaptchaType[\"ReCaptcha2\"] = 1] = \"ReCaptcha2\";\r\n})(ReCaptchaType || (ReCaptchaType = {}));\n\nclass InvisibleReCaptchaComponent extends BaseReCaptchaComponentDirective {\r\n constructor(renderer, zone, injector, scriptService) {\r\n super(renderer, zone, injector, scriptService);\r\n this.renderer = renderer;\r\n this.zone = zone;\r\n this.injector = injector;\r\n this.scriptService = scriptService;\r\n /**\r\n * This size representing invisible captcha\r\n */\r\n this.size = 'invisible';\r\n /**\r\n * Theme\r\n */\r\n this.theme = 'light';\r\n /**\r\n * Badge\r\n */\r\n this.badge = 'bottomright';\r\n this.recaptchaType = ReCaptchaType.InvisibleReCaptcha;\r\n }\r\n ngOnChanges(changes) {\r\n super.ngOnChanges(changes);\r\n }\r\n /**\r\n * Programatically invoke the reCAPTCHA check. Used if the invisible reCAPTCHA is on a div instead of a button.\r\n */\r\n execute() {\r\n // execute captcha\r\n this.zone.runOutsideAngular(() => this.reCaptchaApi.execute(this.captchaId));\r\n }\r\n captchaSpecificSetup() {\r\n }\r\n /**\r\n * Gets reCaptcha properties\r\n */\r\n getCaptchaProperties() {\r\n return {\r\n 'sitekey': this.siteKey,\r\n 'callback': (response) => this.zone.run(() => this.handleCallback(response)),\r\n 'expired-callback': () => this.zone.run(() => this.handleExpireCallback()),\r\n 'error-callback': () => this.zone.run(() => this.handleErrorCallback()),\r\n 'badge': this.badge,\r\n 'type': this.type,\r\n 'tabindex': this.tabIndex,\r\n 'size': this.size,\r\n 'theme': this.theme\r\n };\r\n }\r\n}\r\n/** @nocollapse */ InvisibleReCaptchaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: InvisibleReCaptchaComponent, deps: [{ token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.Injector }, { token: ScriptService }], target: i0.ɵɵFactoryTarget.Component });\r\n/** @nocollapse */ InvisibleReCaptchaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.0.4\", type: InvisibleReCaptchaComponent, selector: \"ngx-invisible-recaptcha\", inputs: { theme: \"theme\", badge: \"badge\" }, providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef((() => InvisibleReCaptchaComponent)),\r\n multi: true,\r\n }\r\n ], viewQueries: [{ propertyName: \"captchaWrapperElem\", first: true, predicate: [\"captchaWrapperElem\"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\r\n
`, isInline: true });\r\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: InvisibleReCaptchaComponent, decorators: [{\r\n type: Component,\r\n args: [{\r\n selector: 'ngx-invisible-recaptcha',\r\n template: `\r\n
`,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef((() => InvisibleReCaptchaComponent)),\r\n multi: true,\r\n }\r\n ]\r\n }]\r\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.Injector }, { type: ScriptService }]; }, propDecorators: { theme: [{\r\n type: Input\r\n }], badge: [{\r\n type: Input\r\n }], captchaWrapperElem: [{\r\n type: ViewChild,\r\n args: ['captchaWrapperElem', { static: false }]\r\n }] } });\n\nclass ReCaptcha2Component extends BaseReCaptchaComponentDirective {\r\n constructor(renderer, zone, injector, scriptService) {\r\n super(renderer, zone, injector, scriptService);\r\n this.renderer = renderer;\r\n this.zone = zone;\r\n this.injector = injector;\r\n this.scriptService = scriptService;\r\n /**\r\n * Name of the global expire callback\r\n */\r\n this.windowOnErrorCallbackProperty = 'ngx_captcha_error_callback';\r\n /**\r\n * Name of the global error callback\r\n */\r\n this.windowOnExpireCallbackProperty = 'ngx_captcha_expire_callback';\r\n /**\r\n * Theme\r\n */\r\n this.theme = 'light';\r\n /**\r\n * Size\r\n */\r\n this.size = 'normal';\r\n this.recaptchaType = ReCaptchaType.ReCaptcha2;\r\n }\r\n ngOnChanges(changes) {\r\n super.ngOnChanges(changes);\r\n }\r\n ngOnDestroy() {\r\n window[this.windowOnErrorCallbackProperty] = {};\r\n window[this.windowOnExpireCallbackProperty] = {};\r\n }\r\n captchaSpecificSetup() {\r\n this.registerCallbacks();\r\n }\r\n /**\r\n * Gets reCaptcha properties\r\n */\r\n getCaptchaProperties() {\r\n return {\r\n 'sitekey': this.siteKey,\r\n 'callback': (response) => this.zone.run(() => this.handleCallback(response)),\r\n 'expired-callback': () => this.zone.run(() => this.handleExpireCallback()),\r\n 'error-callback': () => this.zone.run(() => this.handleErrorCallback()),\r\n 'theme': this.theme,\r\n 'type': this.type,\r\n 'size': this.size,\r\n 'tabindex': this.tabIndex\r\n };\r\n }\r\n /**\r\n * Registers global callbacks\r\n */\r\n registerCallbacks() {\r\n window[this.windowOnErrorCallbackProperty] = super.handleErrorCallback.bind(this);\r\n window[this.windowOnExpireCallbackProperty] = super.handleExpireCallback.bind(this);\r\n }\r\n}\r\n/** @nocollapse */ ReCaptcha2Component.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: ReCaptcha2Component, deps: [{ token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.Injector }, { token: ScriptService }], target: i0.ɵɵFactoryTarget.Component });\r\n/** @nocollapse */ ReCaptcha2Component.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.0.4\", type: ReCaptcha2Component, selector: \"ngx-recaptcha2\", inputs: { theme: \"theme\", size: \"size\" }, providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef((() => ReCaptcha2Component)),\r\n multi: true,\r\n }\r\n ], viewQueries: [{ propertyName: \"captchaWrapperElem\", first: true, predicate: [\"captchaWrapperElem\"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\r\n
`, isInline: true });\r\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: ReCaptcha2Component, decorators: [{\r\n type: Component,\r\n args: [{\r\n selector: 'ngx-recaptcha2',\r\n template: `\r\n
`,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef((() => ReCaptcha2Component)),\r\n multi: true,\r\n }\r\n ]\r\n }]\r\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.Injector }, { type: ScriptService }]; }, propDecorators: { theme: [{\r\n type: Input\r\n }], size: [{\r\n type: Input\r\n }], captchaWrapperElem: [{\r\n type: ViewChild,\r\n args: ['captchaWrapperElem', { static: false }]\r\n }] } });\n\nclass ReCaptchaV3Service {\r\n constructor(scriptService, zone) {\r\n this.scriptService = scriptService;\r\n this.zone = zone;\r\n }\r\n /**\r\n * Executes reCaptcha v3/Enterprise with given action and passes token via callback. You need to verify\r\n * this callback in your backend to get meaningful results.\r\n *\r\n * For more information see https://developers.google.com/recaptcha/docs/v3\r\n * For enterprise see https://cloud.google.com/recaptcha-enterprise/docs\r\n *\r\n * @param siteKey Site key found in your google admin panel\r\n * @param action Action to log\r\n * @param callback Callback function to to handle token\r\n * @param config Optional configuration like useGlobalDomain to be provided\r\n * @param errorCallback Optional Callback function to handle errors\r\n */\r\n execute(siteKey, action, callback, config, errorCallback) {\r\n this.executeAsPromise(siteKey, action, config)\r\n .then(callback)\r\n .catch((error) => errorCallback ? errorCallback(error) : console.error(error));\r\n }\r\n /**\r\n * Executes reCaptcha v3/Enterprise with given action and returns token via Promise. You need to verify\r\n * this token in your backend to get meaningful results.\r\n *\r\n * For more information see https://developers.google.com/recaptcha/docs/v3\r\n * For enterprise see https://cloud.google.com/recaptcha-enterprise/docs\r\n *\r\n * @param siteKey Site key found in your google admin panel\r\n * @param action Action to log\r\n * @param config Optional configuration like useGlobalDomain to be provided\r\n */\r\n executeAsPromise(siteKey, action, config) {\r\n return new Promise((resolve, reject) => {\r\n const configuration = config || {};\r\n const onRegister = (grecaptcha) => {\r\n this.zone.runOutsideAngular(() => {\r\n try {\r\n grecaptcha\r\n .execute(siteKey, { action })\r\n .then((token) => this.zone.run(() => resolve(token)));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n };\r\n this.scriptService.registerCaptchaScript(configuration, siteKey, onRegister);\r\n });\r\n }\r\n}\r\n/** @nocollapse */ ReCaptchaV3Service.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: ReCaptchaV3Service, deps: [{ token: ScriptService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\r\n/** @nocollapse */ ReCaptchaV3Service.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: ReCaptchaV3Service, providedIn: \"root\" });\r\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: ReCaptchaV3Service, decorators: [{\r\n type: Injectable,\r\n args: [{\r\n providedIn: \"root\",\r\n }]\r\n }], ctorParameters: function () { return [{ type: ScriptService }, { type: i0.NgZone }]; } });\n\nclass NgxCaptchaModule {\r\n}\r\n/** @nocollapse */ NgxCaptchaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgxCaptchaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\r\n/** @nocollapse */ NgxCaptchaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.0.4\", ngImport: i0, type: NgxCaptchaModule, declarations: [ReCaptcha2Component,\r\n InvisibleReCaptchaComponent], imports: [CommonModule], exports: [ReCaptcha2Component,\r\n InvisibleReCaptchaComponent] });\r\n/** @nocollapse */ NgxCaptchaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgxCaptchaModule, providers: [\r\n ScriptService,\r\n ReCaptchaV3Service\r\n ], imports: [CommonModule] });\r\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgxCaptchaModule, decorators: [{\r\n type: NgModule,\r\n args: [{\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n ReCaptcha2Component,\r\n InvisibleReCaptchaComponent\r\n ],\r\n providers: [\r\n ScriptService,\r\n ReCaptchaV3Service\r\n ],\r\n exports: [\r\n ReCaptcha2Component,\r\n InvisibleReCaptchaComponent\r\n ]\r\n }]\r\n }] });\n\n/*\r\n * Public API\r\n */\n\n/**\r\n * Generated bundle index. Do not edit.\r\n */\n\nexport { BaseReCaptchaComponentDirective, InvisibleReCaptchaComponent, NgxCaptchaModule, ReCaptcha2Component, ReCaptchaType, ReCaptchaV3Service, ScriptService };\n","import * as i0 from '@angular/core';\nimport { Component } from '@angular/core';\nimport { BaseIcon } from 'primeng/baseicon';\nimport { UniqueComponentId } from 'primeng/utils';\n\nclass SearchIcon extends BaseIcon {\n pathId;\n ngOnInit() {\n this.pathId = 'url(#' + UniqueComponentId() + ')';\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: SearchIcon, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"18.0.1\", type: SearchIcon, isStandalone: true, selector: \"SearchIcon\", usesInheritance: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n `, isInline: true });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: SearchIcon, decorators: [{\n type: Component,\n args: [{\n selector: 'SearchIcon',\n standalone: true,\n imports: [BaseIcon],\n template: `\n \n \n \n \n \n \n \n \n \n \n `\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { SearchIcon };\n","import { animation, style, animate, trigger, transition, useAnimation } from '@angular/animations';\nimport * as i2 from '@angular/common';\nimport { isPlatformBrowser, DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { forwardRef, EventEmitter, PLATFORM_ID, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Input, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as i1 from 'primeng/api';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { ObjectUtils, ZIndexUtils } from 'primeng/utils';\n\nconst OVERLAY_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Overlay),\n multi: true\n};\nconst showOverlayContentAnimation = animation([style({ transform: '{{transform}}', opacity: 0 }), animate('{{showTransitionParams}}')]);\nconst hideOverlayContentAnimation = animation([animate('{{hideTransitionParams}}', style({ transform: '{{transform}}', opacity: 0 }))]);\n/**\n * This API allows overlay components to be controlled from the PrimeNGConfig. In this way, all overlay components in the application can have the same behavior.\n * @group Components\n */\nclass Overlay {\n document;\n platformId;\n el;\n renderer;\n config;\n overlayService;\n cd;\n zone;\n /**\n * The visible property is an input that determines the visibility of the component.\n * @defaultValue false\n * @group Props\n */\n get visible() {\n return this._visible;\n }\n set visible(value) {\n this._visible = value;\n if (this._visible && !this.modalVisible) {\n this.modalVisible = true;\n }\n }\n /**\n * The mode property is an input that determines the overlay mode type or string.\n * @defaultValue null\n * @group Props\n */\n get mode() {\n return this._mode || this.overlayOptions?.mode;\n }\n set mode(value) {\n this._mode = value;\n }\n /**\n * The style property is an input that determines the style object for the component.\n * @defaultValue null\n * @group Props\n */\n get style() {\n return ObjectUtils.merge(this._style, this.modal ? this.overlayResponsiveOptions?.style : this.overlayOptions?.style);\n }\n set style(value) {\n this._style = value;\n }\n /**\n * The styleClass property is an input that determines the CSS class(es) for the component.\n * @defaultValue null\n * @group Props\n */\n get styleClass() {\n return ObjectUtils.merge(this._styleClass, this.modal ? this.overlayResponsiveOptions?.styleClass : this.overlayOptions?.styleClass);\n }\n set styleClass(value) {\n this._styleClass = value;\n }\n /**\n * The contentStyle property is an input that determines the style object for the content of the component.\n * @defaultValue null\n * @group Props\n */\n get contentStyle() {\n return ObjectUtils.merge(this._contentStyle, this.modal ? this.overlayResponsiveOptions?.contentStyle : this.overlayOptions?.contentStyle);\n }\n set contentStyle(value) {\n this._contentStyle = value;\n }\n /**\n * The contentStyleClass property is an input that determines the CSS class(es) for the content of the component.\n * @defaultValue null\n * @group Props\n */\n get contentStyleClass() {\n return ObjectUtils.merge(this._contentStyleClass, this.modal ? this.overlayResponsiveOptions?.contentStyleClass : this.overlayOptions?.contentStyleClass);\n }\n set contentStyleClass(value) {\n this._contentStyleClass = value;\n }\n /**\n * The target property is an input that specifies the target element or selector for the component.\n * @defaultValue null\n * @group Props\n */\n get target() {\n const value = this._target || this.overlayOptions?.target;\n return value === undefined ? '@prev' : value;\n }\n set target(value) {\n this._target = value;\n }\n /**\n * Overlay can be mounted into its location, body or DOM element instance using this option.\n * @defaultValue null\n * @group Props\n */\n get appendTo() {\n return this._appendTo || this.overlayOptions?.appendTo;\n }\n set appendTo(value) {\n this._appendTo = value;\n }\n /**\n * The autoZIndex determines whether to automatically manage layering. Its default value is 'false'.\n * @defaultValue false\n * @group Props\n */\n get autoZIndex() {\n const value = this._autoZIndex || this.overlayOptions?.autoZIndex;\n return value === undefined ? true : value;\n }\n set autoZIndex(value) {\n this._autoZIndex = value;\n }\n /**\n * The baseZIndex is base zIndex value to use in layering.\n * @defaultValue null\n * @group Props\n */\n get baseZIndex() {\n const value = this._baseZIndex || this.overlayOptions?.baseZIndex;\n return value === undefined ? 0 : value;\n }\n set baseZIndex(value) {\n this._baseZIndex = value;\n }\n /**\n * Transition options of the show or hide animation.\n * @defaultValue .12s cubic-bezier(0, 0, 0.2, 1)\n * @group Props\n */\n get showTransitionOptions() {\n const value = this._showTransitionOptions || this.overlayOptions?.showTransitionOptions;\n return value === undefined ? '.12s cubic-bezier(0, 0, 0.2, 1)' : value;\n }\n set showTransitionOptions(value) {\n this._showTransitionOptions = value;\n }\n /**\n * The hideTransitionOptions property is an input that determines the CSS transition options for hiding the component.\n * @defaultValue .1s linear\n * @group Props\n */\n get hideTransitionOptions() {\n const value = this._hideTransitionOptions || this.overlayOptions?.hideTransitionOptions;\n return value === undefined ? '.1s linear' : value;\n }\n set hideTransitionOptions(value) {\n this._hideTransitionOptions = value;\n }\n /**\n * The listener property is an input that specifies the listener object for the component.\n * @defaultValue null\n * @group Props\n */\n get listener() {\n return this._listener || this.overlayOptions?.listener;\n }\n set listener(value) {\n this._listener = value;\n }\n /**\n * It is the option used to determine in which mode it should appear according to the given media or breakpoint.\n * @defaultValue null\n * @group Props\n */\n get responsive() {\n return this._responsive || this.overlayOptions?.responsive;\n }\n set responsive(val) {\n this._responsive = val;\n }\n /**\n * The options property is an input that specifies the overlay options for the component.\n * @defaultValue null\n * @group Props\n */\n get options() {\n return this._options;\n }\n set options(val) {\n this._options = val;\n }\n /**\n * This EventEmitter is used to notify changes in the visibility state of a component.\n * @param {Boolean} boolean - Value of visibility as boolean.\n * @group Emits\n */\n visibleChange = new EventEmitter();\n /**\n * Callback to invoke before the overlay is shown.\n * @param {OverlayOnBeforeShowEvent} event - Custom overlay before show event.\n * @group Emits\n */\n onBeforeShow = new EventEmitter();\n /**\n * Callback to invoke when the overlay is shown.\n * @param {OverlayOnShowEvent} event - Custom overlay show event.\n * @group Emits\n */\n onShow = new EventEmitter();\n /**\n * Callback to invoke before the overlay is hidden.\n * @param {OverlayOnBeforeHideEvent} event - Custom overlay before hide event.\n * @group Emits\n */\n onBeforeHide = new EventEmitter();\n /**\n * Callback to invoke when the overlay is hidden\n * @param {OverlayOnHideEvent} event - Custom hide event.\n * @group Emits\n */\n onHide = new EventEmitter();\n /**\n * Callback to invoke when the animation is started.\n * @param {AnimationEvent} event - Animation event.\n * @group Emits\n */\n onAnimationStart = new EventEmitter();\n /**\n * Callback to invoke when the animation is done.\n * @param {AnimationEvent} event - Animation event.\n * @group Emits\n */\n onAnimationDone = new EventEmitter();\n templates;\n overlayViewChild;\n contentViewChild;\n contentTemplate;\n _visible = false;\n _mode;\n _style;\n _styleClass;\n _contentStyle;\n _contentStyleClass;\n _target;\n _appendTo;\n _autoZIndex;\n _baseZIndex;\n _showTransitionOptions;\n _hideTransitionOptions;\n _listener;\n _responsive;\n _options;\n modalVisible = false;\n isOverlayClicked = false;\n isOverlayContentClicked = false;\n scrollHandler;\n documentClickListener;\n documentResizeListener;\n documentKeyboardListener;\n window;\n transformOptions = {\n default: 'scaleY(0.8)',\n center: 'scale(0.7)',\n top: 'translate3d(0px, -100%, 0px)',\n 'top-start': 'translate3d(0px, -100%, 0px)',\n 'top-end': 'translate3d(0px, -100%, 0px)',\n bottom: 'translate3d(0px, 100%, 0px)',\n 'bottom-start': 'translate3d(0px, 100%, 0px)',\n 'bottom-end': 'translate3d(0px, 100%, 0px)',\n left: 'translate3d(-100%, 0px, 0px)',\n 'left-start': 'translate3d(-100%, 0px, 0px)',\n 'left-end': 'translate3d(-100%, 0px, 0px)',\n right: 'translate3d(100%, 0px, 0px)',\n 'right-start': 'translate3d(100%, 0px, 0px)',\n 'right-end': 'translate3d(100%, 0px, 0px)'\n };\n get modal() {\n if (isPlatformBrowser(this.platformId)) {\n return this.mode === 'modal' || (this.overlayResponsiveOptions && this.window?.matchMedia(this.overlayResponsiveOptions.media?.replace('@media', '') || `(max-width: ${this.overlayResponsiveOptions.breakpoint})`).matches);\n }\n }\n get overlayMode() {\n return this.mode || (this.modal ? 'modal' : 'overlay');\n }\n get overlayOptions() {\n return { ...this.config?.overlayOptions, ...this.options }; // TODO: Improve performance\n }\n get overlayResponsiveOptions() {\n return { ...this.overlayOptions?.responsive, ...this.responsive }; // TODO: Improve performance\n }\n get overlayResponsiveDirection() {\n return this.overlayResponsiveOptions?.direction || 'center';\n }\n get overlayEl() {\n return this.overlayViewChild?.nativeElement;\n }\n get contentEl() {\n return this.contentViewChild?.nativeElement;\n }\n get targetEl() {\n return DomHandler.getTargetElement(this.target, this.el?.nativeElement);\n }\n constructor(document, platformId, el, renderer, config, overlayService, cd, zone) {\n this.document = document;\n this.platformId = platformId;\n this.el = el;\n this.renderer = renderer;\n this.config = config;\n this.overlayService = overlayService;\n this.cd = cd;\n this.zone = zone;\n this.window = this.document.defaultView;\n }\n ngAfterContentInit() {\n this.templates?.forEach((item) => {\n switch (item.getType()) {\n case 'content':\n this.contentTemplate = item.template;\n break;\n // TODO: new template types may be added.\n default:\n this.contentTemplate = item.template;\n break;\n }\n });\n }\n show(overlay, isFocus = false) {\n this.onVisibleChange(true);\n this.handleEvents('onShow', { overlay: overlay || this.overlayEl, target: this.targetEl, mode: this.overlayMode });\n isFocus && DomHandler.focus(this.targetEl);\n this.modal && DomHandler.addClass(this.document?.body, 'p-overflow-hidden');\n }\n hide(overlay, isFocus = false) {\n if (!this.visible) {\n return;\n }\n else {\n this.onVisibleChange(false);\n this.handleEvents('onHide', { overlay: overlay || this.overlayEl, target: this.targetEl, mode: this.overlayMode });\n isFocus && DomHandler.focus(this.targetEl);\n this.modal && DomHandler.removeClass(this.document?.body, 'p-overflow-hidden');\n }\n }\n alignOverlay() {\n !this.modal && DomHandler.alignOverlay(this.overlayEl, this.targetEl, this.appendTo);\n }\n onVisibleChange(visible) {\n this._visible = visible;\n this.visibleChange.emit(visible);\n }\n onOverlayClick() {\n this.isOverlayClicked = true;\n }\n onOverlayContentClick(event) {\n this.overlayService.add({\n originalEvent: event,\n target: this.targetEl\n });\n this.isOverlayContentClicked = true;\n }\n onOverlayContentAnimationStart(event) {\n switch (event.toState) {\n case 'visible':\n this.handleEvents('onBeforeShow', { overlay: this.overlayEl, target: this.targetEl, mode: this.overlayMode });\n if (this.autoZIndex) {\n ZIndexUtils.set(this.overlayMode, this.overlayEl, this.baseZIndex + this.config?.zIndex[this.overlayMode]);\n }\n DomHandler.appendOverlay(this.overlayEl, this.appendTo === 'body' ? this.document.body : this.appendTo, this.appendTo);\n this.alignOverlay();\n break;\n case 'void':\n this.handleEvents('onBeforeHide', { overlay: this.overlayEl, target: this.targetEl, mode: this.overlayMode });\n this.modal && DomHandler.addClass(this.overlayEl, 'p-component-overlay-leave');\n break;\n }\n this.handleEvents('onAnimationStart', event);\n }\n onOverlayContentAnimationDone(event) {\n const container = this.overlayEl || event.element.parentElement;\n switch (event.toState) {\n case 'visible':\n if (this.visible) {\n this.show(container, true);\n }\n this.bindListeners();\n break;\n case 'void':\n if (!this.visible) {\n this.hide(container, true);\n this.modalVisible = false;\n this.unbindListeners();\n DomHandler.appendOverlay(this.overlayEl, this.targetEl, this.appendTo);\n ZIndexUtils.clear(container);\n this.cd.markForCheck();\n break;\n }\n }\n this.handleEvents('onAnimationDone', event);\n }\n handleEvents(name, params) {\n this[name].emit(params);\n this.options && this.options[name] && this.options[name](params);\n this.config?.overlayOptions && (this.config?.overlayOptions)[name] && (this.config?.overlayOptions)[name](params);\n }\n bindListeners() {\n this.unbindListeners();\n this.bindScrollListener();\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindDocumentKeyboardListener();\n }\n unbindListeners() {\n this.unbindScrollListener();\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindDocumentKeyboardListener();\n }\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.targetEl, (event) => {\n const valid = this.listener ? this.listener(event, { type: 'scroll', mode: this.overlayMode, valid: true }) : true;\n valid && this.hide(event, true);\n });\n }\n this.scrollHandler.bindScrollListener();\n }\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n this.documentClickListener = this.renderer.listen(this.document, 'click', (event) => {\n const isTargetClicked = this.targetEl && (this.targetEl.isSameNode(event.target) || (!this.isOverlayClicked && this.targetEl.contains(event.target)));\n const isOutsideClicked = !isTargetClicked && !this.isOverlayContentClicked;\n const valid = this.listener ? this.listener(event, { type: 'outside', mode: this.overlayMode, valid: event.which !== 3 && isOutsideClicked }) : isOutsideClicked;\n valid && this.hide(event);\n this.isOverlayClicked = this.isOverlayContentClicked = false;\n });\n }\n }\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n }\n }\n bindDocumentResizeListener() {\n if (!this.documentResizeListener) {\n this.documentResizeListener = this.renderer.listen(this.window, 'resize', (event) => {\n const valid = this.listener ? this.listener(event, { type: 'resize', mode: this.overlayMode, valid: !DomHandler.isTouchDevice() }) : !DomHandler.isTouchDevice();\n valid && this.hide(event, true);\n });\n }\n }\n unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n this.documentResizeListener();\n this.documentResizeListener = null;\n }\n }\n bindDocumentKeyboardListener() {\n if (this.documentKeyboardListener) {\n return;\n }\n this.zone.runOutsideAngular(() => {\n this.documentKeyboardListener = this.renderer.listen(this.window, 'keydown', (event) => {\n if (this.overlayOptions.hideOnEscape === false || event.code !== 'Escape') {\n return;\n }\n const valid = this.listener ? this.listener(event, { type: 'keydown', mode: this.overlayMode, valid: !DomHandler.isTouchDevice() }) : !DomHandler.isTouchDevice();\n if (valid) {\n this.zone.run(() => {\n this.hide(event, true);\n });\n }\n });\n });\n }\n unbindDocumentKeyboardListener() {\n if (this.documentKeyboardListener) {\n this.documentKeyboardListener();\n this.documentKeyboardListener = null;\n }\n }\n ngOnDestroy() {\n this.hide(this.overlayEl, true);\n if (this.overlayEl) {\n DomHandler.appendOverlay(this.overlayEl, this.targetEl, this.appendTo);\n ZIndexUtils.clear(this.overlayEl);\n }\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n this.unbindListeners();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: Overlay, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.PrimeNGConfig }, { token: i1.OverlayService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"18.0.1\", type: Overlay, selector: \"p-overlay\", inputs: { visible: \"visible\", mode: \"mode\", style: \"style\", styleClass: \"styleClass\", contentStyle: \"contentStyle\", contentStyleClass: \"contentStyleClass\", target: \"target\", appendTo: \"appendTo\", autoZIndex: \"autoZIndex\", baseZIndex: \"baseZIndex\", showTransitionOptions: \"showTransitionOptions\", hideTransitionOptions: \"hideTransitionOptions\", listener: \"listener\", responsive: \"responsive\", options: \"options\" }, outputs: { visibleChange: \"visibleChange\", onBeforeShow: \"onBeforeShow\", onShow: \"onShow\", onBeforeHide: \"onBeforeHide\", onHide: \"onHide\", onAnimationStart: \"onAnimationStart\", onAnimationDone: \"onAnimationDone\" }, host: { classAttribute: \"p-element\" }, providers: [OVERLAY_VALUE_ACCESSOR], queries: [{ propertyName: \"templates\", predicate: PrimeTemplate }], viewQueries: [{ propertyName: \"overlayViewChild\", first: true, predicate: [\"overlay\"], descendants: true }, { propertyName: \"contentViewChild\", first: true, predicate: [\"content\"], descendants: true }], ngImport: i0, template: `\n \n \n \n \n \n \n `, isInline: true, styles: [\"@layer primeng{.p-overlay{position:absolute;top:0;left:0}.p-overlay-modal{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%}.p-overlay-content{transform-origin:inherit}.p-overlay-modal>.p-overlay-content{z-index:1;width:90%}.p-overlay-top{align-items:flex-start}.p-overlay-top-start{align-items:flex-start;justify-content:flex-start}.p-overlay-top-end{align-items:flex-start;justify-content:flex-end}.p-overlay-bottom{align-items:flex-end}.p-overlay-bottom-start{align-items:flex-end;justify-content:flex-start}.p-overlay-bottom-end{align-items:flex-end;justify-content:flex-end}.p-overlay-left{justify-content:flex-start}.p-overlay-left-start{justify-content:flex-start;align-items:flex-start}.p-overlay-left-end{justify-content:flex-start;align-items:flex-end}.p-overlay-right{justify-content:flex-end}.p-overlay-right-start{justify-content:flex-end;align-items:flex-start}.p-overlay-right-end{justify-content:flex-end;align-items:flex-end}}\\n\"], dependencies: [{ kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], animations: [trigger('overlayContentAnimation', [transition(':enter', [useAnimation(showOverlayContentAnimation)]), transition(':leave', [useAnimation(hideOverlayContentAnimation)])])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: Overlay, decorators: [{\n type: Component,\n args: [{ selector: 'p-overlay', template: `\n \n \n \n \n \n \n `, animations: [trigger('overlayContentAnimation', [transition(':enter', [useAnimation(showOverlayContentAnimation)]), transition(':leave', [useAnimation(hideOverlayContentAnimation)])])], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [OVERLAY_VALUE_ACCESSOR], host: {\n class: 'p-element'\n }, styles: [\"@layer primeng{.p-overlay{position:absolute;top:0;left:0}.p-overlay-modal{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%}.p-overlay-content{transform-origin:inherit}.p-overlay-modal>.p-overlay-content{z-index:1;width:90%}.p-overlay-top{align-items:flex-start}.p-overlay-top-start{align-items:flex-start;justify-content:flex-start}.p-overlay-top-end{align-items:flex-start;justify-content:flex-end}.p-overlay-bottom{align-items:flex-end}.p-overlay-bottom-start{align-items:flex-end;justify-content:flex-start}.p-overlay-bottom-end{align-items:flex-end;justify-content:flex-end}.p-overlay-left{justify-content:flex-start}.p-overlay-left-start{justify-content:flex-start;align-items:flex-start}.p-overlay-left-end{justify-content:flex-start;align-items:flex-end}.p-overlay-right{justify-content:flex-end}.p-overlay-right-start{justify-content:flex-end;align-items:flex-start}.p-overlay-right-end{justify-content:flex-end;align-items:flex-end}}\\n\"] }]\n }], ctorParameters: () => [{ type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.PrimeNGConfig }, { type: i1.OverlayService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { visible: [{\n type: Input\n }], mode: [{\n type: Input\n }], style: [{\n type: Input\n }], styleClass: [{\n type: Input\n }], contentStyle: [{\n type: Input\n }], contentStyleClass: [{\n type: Input\n }], target: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], autoZIndex: [{\n type: Input\n }], baseZIndex: [{\n type: Input\n }], showTransitionOptions: [{\n type: Input\n }], hideTransitionOptions: [{\n type: Input\n }], listener: [{\n type: Input\n }], responsive: [{\n type: Input\n }], options: [{\n type: Input\n }], visibleChange: [{\n type: Output\n }], onBeforeShow: [{\n type: Output\n }], onShow: [{\n type: Output\n }], onBeforeHide: [{\n type: Output\n }], onHide: [{\n type: Output\n }], onAnimationStart: [{\n type: Output\n }], onAnimationDone: [{\n type: Output\n }], templates: [{\n type: ContentChildren,\n args: [PrimeTemplate]\n }], overlayViewChild: [{\n type: ViewChild,\n args: ['overlay']\n }], contentViewChild: [{\n type: ViewChild,\n args: ['content']\n }] } });\nclass OverlayModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: OverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"18.0.1\", ngImport: i0, type: OverlayModule, declarations: [Overlay], imports: [CommonModule, SharedModule], exports: [Overlay, SharedModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: OverlayModule, imports: [CommonModule, SharedModule, SharedModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: OverlayModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, SharedModule],\n exports: [Overlay, SharedModule],\n declarations: [Overlay]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { OVERLAY_VALUE_ACCESSOR, Overlay, OverlayModule };\n","import * as i1 from '@angular/common';\nimport { isPlatformBrowser, DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, PLATFORM_ID, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { DomHandler } from 'primeng/dom';\nimport { SpinnerIcon } from 'primeng/icons/spinner';\n\n/**\n * Scroller is a performance-approach to handle huge data efficiently.\n * @group Components\n */\nclass Scroller {\n document;\n platformId;\n renderer;\n cd;\n zone;\n /**\n * Unique identifier of the element.\n * @group Props\n */\n get id() {\n return this._id;\n }\n set id(val) {\n this._id = val;\n }\n /**\n * Inline style of the component.\n * @group Props\n */\n get style() {\n return this._style;\n }\n set style(val) {\n this._style = val;\n }\n /**\n * Style class of the element.\n * @group Props\n */\n get styleClass() {\n return this._styleClass;\n }\n set styleClass(val) {\n this._styleClass = val;\n }\n /**\n * Index of the element in tabbing order.\n * @group Props\n */\n get tabindex() {\n return this._tabindex;\n }\n set tabindex(val) {\n this._tabindex = val;\n }\n /**\n * An array of objects to display.\n * @group Props\n */\n get items() {\n return this._items;\n }\n set items(val) {\n this._items = val;\n }\n /**\n * The height/width of item according to orientation.\n * @group Props\n */\n get itemSize() {\n return this._itemSize;\n }\n set itemSize(val) {\n this._itemSize = val;\n }\n /**\n * Height of the scroll viewport.\n * @group Props\n */\n get scrollHeight() {\n return this._scrollHeight;\n }\n set scrollHeight(val) {\n this._scrollHeight = val;\n }\n /**\n * Width of the scroll viewport.\n * @group Props\n */\n get scrollWidth() {\n return this._scrollWidth;\n }\n set scrollWidth(val) {\n this._scrollWidth = val;\n }\n /**\n * The orientation of scrollbar.\n * @group Props\n */\n get orientation() {\n return this._orientation;\n }\n set orientation(val) {\n this._orientation = val;\n }\n /**\n * Used to specify how many items to load in each load method in lazy mode.\n * @group Props\n */\n get step() {\n return this._step;\n }\n set step(val) {\n this._step = val;\n }\n /**\n * Delay in scroll before new data is loaded.\n * @group Props\n */\n get delay() {\n return this._delay;\n }\n set delay(val) {\n this._delay = val;\n }\n /**\n * Delay after window's resize finishes.\n * @group Props\n */\n get resizeDelay() {\n return this._resizeDelay;\n }\n set resizeDelay(val) {\n this._resizeDelay = val;\n }\n /**\n * Used to append each loaded item to top without removing any items from the DOM. Using very large data may cause the browser to crash.\n * @group Props\n */\n get appendOnly() {\n return this._appendOnly;\n }\n set appendOnly(val) {\n this._appendOnly = val;\n }\n /**\n * Specifies whether the scroller should be displayed inline or not.\n * @group Props\n */\n get inline() {\n return this._inline;\n }\n set inline(val) {\n this._inline = val;\n }\n /**\n * Defines if data is loaded and interacted with in lazy manner.\n * @group Props\n */\n get lazy() {\n return this._lazy;\n }\n set lazy(val) {\n this._lazy = val;\n }\n /**\n * If disabled, the scroller feature is eliminated and the content is displayed directly.\n * @group Props\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(val) {\n this._disabled = val;\n }\n /**\n * Used to implement a custom loader instead of using the loader feature in the scroller.\n * @group Props\n */\n get loaderDisabled() {\n return this._loaderDisabled;\n }\n set loaderDisabled(val) {\n this._loaderDisabled = val;\n }\n /**\n * Columns to display.\n * @group Props\n */\n get columns() {\n return this._columns;\n }\n set columns(val) {\n this._columns = val;\n }\n /**\n * Used to implement a custom spacer instead of using the spacer feature in the scroller.\n * @group Props\n */\n get showSpacer() {\n return this._showSpacer;\n }\n set showSpacer(val) {\n this._showSpacer = val;\n }\n /**\n * Defines whether to show loader.\n * @group Props\n */\n get showLoader() {\n return this._showLoader;\n }\n set showLoader(val) {\n this._showLoader = val;\n }\n /**\n * Determines how many additional elements to add to the DOM outside of the view. According to the scrolls made up and down, extra items are added in a certain algorithm in the form of multiples of this number. Default value is half the number of items shown in the view.\n * @group Props\n */\n get numToleratedItems() {\n return this._numToleratedItems;\n }\n set numToleratedItems(val) {\n this._numToleratedItems = val;\n }\n /**\n * Defines whether the data is loaded.\n * @group Props\n */\n get loading() {\n return this._loading;\n }\n set loading(val) {\n this._loading = val;\n }\n /**\n * Defines whether to dynamically change the height or width of scrollable container.\n * @group Props\n */\n get autoSize() {\n return this._autoSize;\n }\n set autoSize(val) {\n this._autoSize = val;\n }\n /**\n * Function to optimize the dom operations by delegating to ngForTrackBy, default algoritm checks for object identity.\n * @group Props\n */\n get trackBy() {\n return this._trackBy;\n }\n set trackBy(val) {\n this._trackBy = val;\n }\n /**\n * Defines whether to use the scroller feature. The properties of scroller component can be used like an object in it.\n * @group Props\n */\n get options() {\n return this._options;\n }\n set options(val) {\n this._options = val;\n if (val && typeof val === 'object') {\n //@ts-ignore\n Object.entries(val).forEach(([k, v]) => this[`_${k}`] !== v && (this[`_${k}`] = v));\n }\n }\n /**\n * Callback to invoke in lazy mode to load new data.\n * @param {ScrollerLazyLoadEvent} event - Custom lazy load event.\n * @group Emits\n */\n onLazyLoad = new EventEmitter();\n /**\n * Callback to invoke when scroll position changes.\n * @param {ScrollerScrollEvent} event - Custom scroll event.\n * @group Emits\n */\n onScroll = new EventEmitter();\n /**\n * Callback to invoke when scroll position and item's range in view changes.\n * @param {ScrollerScrollEvent} event - Custom scroll index change event.\n * @group Emits\n */\n onScrollIndexChange = new EventEmitter();\n elementViewChild;\n contentViewChild;\n templates;\n _id;\n _style;\n _styleClass;\n _tabindex = 0;\n _items;\n _itemSize = 0;\n _scrollHeight;\n _scrollWidth;\n _orientation = 'vertical';\n _step = 0;\n _delay = 0;\n _resizeDelay = 10;\n _appendOnly = false;\n _inline = false;\n _lazy = false;\n _disabled = false;\n _loaderDisabled = false;\n _columns;\n _showSpacer = true;\n _showLoader = false;\n _numToleratedItems;\n _loading;\n _autoSize = false;\n _trackBy;\n _options;\n d_loading = false;\n d_numToleratedItems;\n contentEl;\n contentTemplate;\n itemTemplate;\n loaderTemplate;\n loaderIconTemplate;\n first = 0;\n last = 0;\n page = 0;\n isRangeChanged = false;\n numItemsInViewport = 0;\n lastScrollPos = 0;\n lazyLoadState = {};\n loaderArr = [];\n spacerStyle = {};\n contentStyle = {};\n scrollTimeout;\n resizeTimeout;\n initialized = false;\n resizeObserver;\n defaultWidth;\n defaultHeight;\n defaultContentWidth;\n defaultContentHeight;\n get vertical() {\n return this._orientation === 'vertical';\n }\n get horizontal() {\n return this._orientation === 'horizontal';\n }\n get both() {\n return this._orientation === 'both';\n }\n get loadedItems() {\n if (this._items && !this.d_loading) {\n if (this.both)\n return this._items.slice(this._appendOnly ? 0 : this.first.rows, this.last.rows).map((item) => (this._columns ? item : item.slice(this._appendOnly ? 0 : this.first.cols, this.last.cols)));\n else if (this.horizontal && this._columns)\n return this._items;\n else\n return this._items.slice(this._appendOnly ? 0 : this.first, this.last);\n }\n return [];\n }\n get loadedRows() {\n return this.d_loading ? (this._loaderDisabled ? this.loaderArr : []) : this.loadedItems;\n }\n get loadedColumns() {\n if (this._columns && (this.both || this.horizontal)) {\n return this.d_loading && this._loaderDisabled ? (this.both ? this.loaderArr[0] : this.loaderArr) : this._columns.slice(this.both ? this.first.cols : this.first, this.both ? this.last.cols : this.last);\n }\n return this._columns;\n }\n constructor(document, platformId, renderer, cd, zone) {\n this.document = document;\n this.platformId = platformId;\n this.renderer = renderer;\n this.cd = cd;\n this.zone = zone;\n }\n ngOnInit() {\n this.setInitialState();\n }\n ngOnChanges(simpleChanges) {\n let isLoadingChanged = false;\n if (simpleChanges.loading) {\n const { previousValue, currentValue } = simpleChanges.loading;\n if (this.lazy && previousValue !== currentValue && currentValue !== this.d_loading) {\n this.d_loading = currentValue;\n isLoadingChanged = true;\n }\n }\n if (simpleChanges.orientation) {\n this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;\n }\n if (simpleChanges.numToleratedItems) {\n const { previousValue, currentValue } = simpleChanges.numToleratedItems;\n if (previousValue !== currentValue && currentValue !== this.d_numToleratedItems) {\n this.d_numToleratedItems = currentValue;\n }\n }\n if (simpleChanges.options) {\n const { previousValue, currentValue } = simpleChanges.options;\n if (this.lazy && previousValue?.loading !== currentValue?.loading && currentValue?.loading !== this.d_loading) {\n this.d_loading = currentValue.loading;\n isLoadingChanged = true;\n }\n if (previousValue?.numToleratedItems !== currentValue?.numToleratedItems && currentValue?.numToleratedItems !== this.d_numToleratedItems) {\n this.d_numToleratedItems = currentValue.numToleratedItems;\n }\n }\n if (this.initialized) {\n const isChanged = !isLoadingChanged && (simpleChanges.items?.previousValue?.length !== simpleChanges.items?.currentValue?.length || simpleChanges.itemSize || simpleChanges.scrollHeight || simpleChanges.scrollWidth);\n if (isChanged) {\n this.init();\n this.calculateAutoSize();\n }\n }\n }\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'content':\n this.contentTemplate = item.template;\n break;\n case 'item':\n this.itemTemplate = item.template;\n break;\n case 'loader':\n this.loaderTemplate = item.template;\n break;\n case 'loadericon':\n this.loaderIconTemplate = item.template;\n break;\n default:\n this.itemTemplate = item.template;\n break;\n }\n });\n }\n ngAfterViewInit() {\n Promise.resolve().then(() => {\n this.viewInit();\n });\n }\n ngAfterViewChecked() {\n if (!this.initialized) {\n this.viewInit();\n }\n }\n ngOnDestroy() {\n this.unbindResizeListener();\n this.contentEl = null;\n this.initialized = false;\n }\n viewInit() {\n if (isPlatformBrowser(this.platformId) && !this.initialized) {\n if (DomHandler.isVisible(this.elementViewChild?.nativeElement)) {\n this.setInitialState();\n this.setContentEl(this.contentEl);\n this.init();\n this.calculateAutoSize();\n this.defaultWidth = DomHandler.getWidth(this.elementViewChild?.nativeElement);\n this.defaultHeight = DomHandler.getHeight(this.elementViewChild?.nativeElement);\n this.defaultContentWidth = DomHandler.getWidth(this.contentEl);\n this.defaultContentHeight = DomHandler.getHeight(this.contentEl);\n this.resizeObserver = new ResizeObserver(() => this.onResize());\n this.resizeObserver.observe(this.elementViewChild?.nativeElement);\n this.initialized = true;\n }\n }\n }\n init() {\n if (!this._disabled) {\n this.setSize();\n this.calculateOptions();\n this.setSpacerSize();\n this.cd.detectChanges();\n }\n }\n setContentEl(el) {\n this.contentEl = el || this.contentViewChild?.nativeElement || DomHandler.findSingle(this.elementViewChild?.nativeElement, '.p-scroller-content');\n }\n setInitialState() {\n this.first = this.both ? { rows: 0, cols: 0 } : 0;\n this.last = this.both ? { rows: 0, cols: 0 } : 0;\n this.numItemsInViewport = this.both ? { rows: 0, cols: 0 } : 0;\n this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;\n this.d_loading = this._loading || false;\n this.d_numToleratedItems = this._numToleratedItems;\n this.loaderArr = [];\n this.spacerStyle = {};\n this.contentStyle = {};\n }\n getElementRef() {\n return this.elementViewChild;\n }\n getPageByFirst(first) {\n return Math.floor(((first ?? this.first) + this.d_numToleratedItems * 4) / (this._step || 1));\n }\n isPageChanged(first) {\n return this._step ? this.page !== this.getPageByFirst(first ?? this.first) : true;\n }\n scrollTo(options) {\n // this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;\n this.elementViewChild?.nativeElement?.scrollTo(options);\n }\n scrollToIndex(index, behavior = 'auto') {\n const valid = this.both ? index.every((i) => i > -1) : index > -1;\n if (valid) {\n const first = this.first;\n const { scrollTop = 0, scrollLeft = 0 } = this.elementViewChild?.nativeElement;\n const { numToleratedItems } = this.calculateNumItems();\n const contentPos = this.getContentPosition();\n const itemSize = this.itemSize;\n const calculateFirst = (_index = 0, _numT) => (_index <= _numT ? 0 : _index);\n const calculateCoord = (_first, _size, _cpos) => _first * _size + _cpos;\n const scrollTo = (left = 0, top = 0) => this.scrollTo({ left, top, behavior });\n let newFirst = this.both ? { rows: 0, cols: 0 } : 0;\n let isRangeChanged = false, isScrollChanged = false;\n if (this.both) {\n newFirst = { rows: calculateFirst(index[0], numToleratedItems[0]), cols: calculateFirst(index[1], numToleratedItems[1]) };\n scrollTo(calculateCoord(newFirst.cols, itemSize[1], contentPos.left), calculateCoord(newFirst.rows, itemSize[0], contentPos.top));\n isScrollChanged = this.lastScrollPos.top !== scrollTop || this.lastScrollPos.left !== scrollLeft;\n isRangeChanged = newFirst.rows !== first.rows || newFirst.cols !== first.cols;\n }\n else {\n newFirst = calculateFirst(index, numToleratedItems);\n this.horizontal ? scrollTo(calculateCoord(newFirst, itemSize, contentPos.left), scrollTop) : scrollTo(scrollLeft, calculateCoord(newFirst, itemSize, contentPos.top));\n isScrollChanged = this.lastScrollPos !== (this.horizontal ? scrollLeft : scrollTop);\n isRangeChanged = newFirst !== first;\n }\n this.isRangeChanged = isRangeChanged;\n isScrollChanged && (this.first = newFirst);\n }\n }\n scrollInView(index, to, behavior = 'auto') {\n if (to) {\n const { first, viewport } = this.getRenderedRange();\n const scrollTo = (left = 0, top = 0) => this.scrollTo({ left, top, behavior });\n const isToStart = to === 'to-start';\n const isToEnd = to === 'to-end';\n if (isToStart) {\n if (this.both) {\n if (viewport.first.rows - first.rows > index[0]) {\n scrollTo(viewport.first.cols * this._itemSize[1], (viewport.first.rows - 1) * this._itemSize[0]);\n }\n else if (viewport.first.cols - first.cols > index[1]) {\n scrollTo((viewport.first.cols - 1) * this._itemSize[1], viewport.first.rows * this._itemSize[0]);\n }\n }\n else {\n if (viewport.first - first > index) {\n const pos = (viewport.first - 1) * this._itemSize;\n this.horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);\n }\n }\n }\n else if (isToEnd) {\n if (this.both) {\n if (viewport.last.rows - first.rows <= index[0] + 1) {\n scrollTo(viewport.first.cols * this._itemSize[1], (viewport.first.rows + 1) * this._itemSize[0]);\n }\n else if (viewport.last.cols - first.cols <= index[1] + 1) {\n scrollTo((viewport.first.cols + 1) * this._itemSize[1], viewport.first.rows * this._itemSize[0]);\n }\n }\n else {\n if (viewport.last - first <= index + 1) {\n const pos = (viewport.first + 1) * this._itemSize;\n this.horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);\n }\n }\n }\n }\n else {\n this.scrollToIndex(index, behavior);\n }\n }\n getRenderedRange() {\n const calculateFirstInViewport = (_pos, _size) => (_size || _pos ? Math.floor(_pos / (_size || _pos)) : 0);\n let firstInViewport = this.first;\n let lastInViewport = 0;\n if (this.elementViewChild?.nativeElement) {\n const { scrollTop, scrollLeft } = this.elementViewChild.nativeElement;\n if (this.both) {\n firstInViewport = { rows: calculateFirstInViewport(scrollTop, this._itemSize[0]), cols: calculateFirstInViewport(scrollLeft, this._itemSize[1]) };\n lastInViewport = { rows: firstInViewport.rows + this.numItemsInViewport.rows, cols: firstInViewport.cols + this.numItemsInViewport.cols };\n }\n else {\n const scrollPos = this.horizontal ? scrollLeft : scrollTop;\n firstInViewport = calculateFirstInViewport(scrollPos, this._itemSize);\n lastInViewport = firstInViewport + this.numItemsInViewport;\n }\n }\n return {\n first: this.first,\n last: this.last,\n viewport: {\n first: firstInViewport,\n last: lastInViewport\n }\n };\n }\n calculateNumItems() {\n const contentPos = this.getContentPosition();\n const contentWidth = (this.elementViewChild?.nativeElement ? this.elementViewChild.nativeElement.offsetWidth - contentPos.left : 0) || 0;\n const contentHeight = (this.elementViewChild?.nativeElement ? this.elementViewChild.nativeElement.offsetHeight - contentPos.top : 0) || 0;\n const calculateNumItemsInViewport = (_contentSize, _itemSize) => (_itemSize || _contentSize ? Math.ceil(_contentSize / (_itemSize || _contentSize)) : 0);\n const calculateNumToleratedItems = (_numItems) => Math.ceil(_numItems / 2);\n const numItemsInViewport = this.both\n ? { rows: calculateNumItemsInViewport(contentHeight, this._itemSize[0]), cols: calculateNumItemsInViewport(contentWidth, this._itemSize[1]) }\n : calculateNumItemsInViewport(this.horizontal ? contentWidth : contentHeight, this._itemSize);\n const numToleratedItems = this.d_numToleratedItems || (this.both ? [calculateNumToleratedItems(numItemsInViewport.rows), calculateNumToleratedItems(numItemsInViewport.cols)] : calculateNumToleratedItems(numItemsInViewport));\n return { numItemsInViewport, numToleratedItems };\n }\n calculateOptions() {\n const { numItemsInViewport, numToleratedItems } = this.calculateNumItems();\n const calculateLast = (_first, _num, _numT, _isCols = false) => this.getLast(_first + _num + (_first < _numT ? 2 : 3) * _numT, _isCols);\n const first = this.first;\n const last = this.both\n ? { rows: calculateLast(this.first.rows, numItemsInViewport.rows, numToleratedItems[0]), cols: calculateLast(this.first.cols, numItemsInViewport.cols, numToleratedItems[1], true) }\n : calculateLast(this.first, numItemsInViewport, numToleratedItems);\n this.last = last;\n this.numItemsInViewport = numItemsInViewport;\n this.d_numToleratedItems = numToleratedItems;\n if (this.showLoader) {\n this.loaderArr = this.both ? Array.from({ length: numItemsInViewport.rows }).map(() => Array.from({ length: numItemsInViewport.cols })) : Array.from({ length: numItemsInViewport });\n }\n if (this._lazy) {\n Promise.resolve().then(() => {\n this.lazyLoadState = {\n first: this._step ? (this.both ? { rows: 0, cols: first.cols } : 0) : first,\n last: Math.min(this._step ? this._step : this.last, this.items.length)\n };\n this.handleEvents('onLazyLoad', this.lazyLoadState);\n });\n }\n }\n calculateAutoSize() {\n if (this._autoSize && !this.d_loading) {\n Promise.resolve().then(() => {\n if (this.contentEl) {\n this.contentEl.style.minHeight = this.contentEl.style.minWidth = 'auto';\n this.contentEl.style.position = 'relative';\n this.elementViewChild.nativeElement.style.contain = 'none';\n const [contentWidth, contentHeight] = [DomHandler.getWidth(this.contentEl), DomHandler.getHeight(this.contentEl)];\n contentWidth !== this.defaultContentWidth && (this.elementViewChild.nativeElement.style.width = '');\n contentHeight !== this.defaultContentHeight && (this.elementViewChild.nativeElement.style.height = '');\n const [width, height] = [DomHandler.getWidth(this.elementViewChild.nativeElement), DomHandler.getHeight(this.elementViewChild.nativeElement)];\n this.contentEl.style.minHeight = this.contentEl.style.minWidth = '';\n this.contentEl.style.position = '';\n this.elementViewChild.nativeElement.style.contain = '';\n this.defaultWidth = width;\n this.defaultHeight = height;\n this.defaultContentWidth = contentWidth;\n this.defaultContentHeight = contentHeight;\n (this.both || this.horizontal) && (this.elementViewChild.nativeElement.style.width = width < this.defaultWidth ? width + 'px' : this._scrollWidth || this.defaultWidth + 'px');\n (this.both || this.vertical) && (this.elementViewChild.nativeElement.style.height = height < this.defaultHeight ? height + 'px' : this._scrollHeight || this.defaultHeight + 'px');\n }\n });\n }\n }\n getLast(last = 0, isCols = false) {\n return this._items ? Math.min(isCols ? (this._columns || this._items[0]).length : this._items.length, last) : 0;\n }\n getContentPosition() {\n if (this.contentEl) {\n const style = getComputedStyle(this.contentEl);\n const left = parseFloat(style.paddingLeft) + Math.max(parseFloat(style.left) || 0, 0);\n const right = parseFloat(style.paddingRight) + Math.max(parseFloat(style.right) || 0, 0);\n const top = parseFloat(style.paddingTop) + Math.max(parseFloat(style.top) || 0, 0);\n const bottom = parseFloat(style.paddingBottom) + Math.max(parseFloat(style.bottom) || 0, 0);\n return { left, right, top, bottom, x: left + right, y: top + bottom };\n }\n return { left: 0, right: 0, top: 0, bottom: 0, x: 0, y: 0 };\n }\n setSize() {\n if (this.elementViewChild?.nativeElement) {\n const parentElement = this.elementViewChild.nativeElement.parentElement.parentElement;\n const width = this._scrollWidth || `${this.elementViewChild.nativeElement.offsetWidth || parentElement.offsetWidth}px`;\n const height = this._scrollHeight || `${this.elementViewChild.nativeElement.offsetHeight || parentElement.offsetHeight}px`;\n const setProp = (_name, _value) => (this.elementViewChild.nativeElement.style[_name] = _value);\n if (this.both || this.horizontal) {\n setProp('height', height);\n setProp('width', width);\n }\n else {\n setProp('height', height);\n }\n }\n }\n setSpacerSize() {\n if (this._items) {\n const setProp = (_name, _count, _size) => (this.spacerStyle = { ...this.spacerStyle, ...{ [`${_name}`]: _count * _size + 'px' } });\n const numItems = this._items.length;\n if (this.both) {\n setProp('height', numItems, this._itemSize[0]);\n setProp('width', this._columns?.length || this._items[1]?.length, this._itemSize[1]);\n }\n else {\n this.horizontal ? setProp('width', this._columns?.length || this._items.length, this._itemSize) : setProp('height', numItems, this._itemSize);\n }\n }\n }\n setContentPosition(pos) {\n if (this.contentEl && !this._appendOnly) {\n const first = pos ? pos.first : this.first;\n const calculateTranslateVal = (_first, _size) => _first * _size;\n const setTransform = (_x = 0, _y = 0) => (this.contentStyle = { ...this.contentStyle, ...{ transform: `translate3d(${_x}px, ${_y}px, 0)` } });\n if (this.both) {\n setTransform(calculateTranslateVal(first.cols, this._itemSize[1]), calculateTranslateVal(first.rows, this._itemSize[0]));\n }\n else {\n const translateVal = calculateTranslateVal(first, this._itemSize);\n this.horizontal ? setTransform(translateVal, 0) : setTransform(0, translateVal);\n }\n }\n }\n onScrollPositionChange(event) {\n const target = event.target;\n const contentPos = this.getContentPosition();\n const calculateScrollPos = (_pos, _cpos) => (_pos ? (_pos > _cpos ? _pos - _cpos : _pos) : 0);\n const calculateCurrentIndex = (_pos, _size) => (_size || _pos ? Math.floor(_pos / (_size || _pos)) : 0);\n const calculateTriggerIndex = (_currentIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => {\n return _currentIndex <= _numT ? _numT : _isScrollDownOrRight ? _last - _num - _numT : _first + _numT - 1;\n };\n const calculateFirst = (_currentIndex, _triggerIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => {\n if (_currentIndex <= _numT)\n return 0;\n else\n return Math.max(0, _isScrollDownOrRight ? (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) : _currentIndex > _triggerIndex ? _first : _currentIndex - 2 * _numT);\n };\n const calculateLast = (_currentIndex, _first, _last, _num, _numT, _isCols = false) => {\n let lastValue = _first + _num + 2 * _numT;\n if (_currentIndex >= _numT) {\n lastValue += _numT + 1;\n }\n return this.getLast(lastValue, _isCols);\n };\n const scrollTop = calculateScrollPos(target.scrollTop, contentPos.top);\n const scrollLeft = calculateScrollPos(target.scrollLeft, contentPos.left);\n let newFirst = this.both ? { rows: 0, cols: 0 } : 0;\n let newLast = this.last;\n let isRangeChanged = false;\n let newScrollPos = this.lastScrollPos;\n if (this.both) {\n const isScrollDown = this.lastScrollPos.top <= scrollTop;\n const isScrollRight = this.lastScrollPos.left <= scrollLeft;\n if (!this._appendOnly || (this._appendOnly && (isScrollDown || isScrollRight))) {\n const currentIndex = { rows: calculateCurrentIndex(scrollTop, this._itemSize[0]), cols: calculateCurrentIndex(scrollLeft, this._itemSize[1]) };\n const triggerIndex = {\n rows: calculateTriggerIndex(currentIndex.rows, this.first.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0], isScrollDown),\n cols: calculateTriggerIndex(currentIndex.cols, this.first.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], isScrollRight)\n };\n newFirst = {\n rows: calculateFirst(currentIndex.rows, triggerIndex.rows, this.first.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0], isScrollDown),\n cols: calculateFirst(currentIndex.cols, triggerIndex.cols, this.first.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], isScrollRight)\n };\n newLast = {\n rows: calculateLast(currentIndex.rows, newFirst.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0]),\n cols: calculateLast(currentIndex.cols, newFirst.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], true)\n };\n isRangeChanged = newFirst.rows !== this.first.rows || newLast.rows !== this.last.rows || newFirst.cols !== this.first.cols || newLast.cols !== this.last.cols || this.isRangeChanged;\n newScrollPos = { top: scrollTop, left: scrollLeft };\n }\n }\n else {\n const scrollPos = this.horizontal ? scrollLeft : scrollTop;\n const isScrollDownOrRight = this.lastScrollPos <= scrollPos;\n if (!this._appendOnly || (this._appendOnly && isScrollDownOrRight)) {\n const currentIndex = calculateCurrentIndex(scrollPos, this._itemSize);\n const triggerIndex = calculateTriggerIndex(currentIndex, this.first, this.last, this.numItemsInViewport, this.d_numToleratedItems, isScrollDownOrRight);\n newFirst = calculateFirst(currentIndex, triggerIndex, this.first, this.last, this.numItemsInViewport, this.d_numToleratedItems, isScrollDownOrRight);\n newLast = calculateLast(currentIndex, newFirst, this.last, this.numItemsInViewport, this.d_numToleratedItems);\n isRangeChanged = newFirst !== this.first || newLast !== this.last || this.isRangeChanged;\n newScrollPos = scrollPos;\n }\n }\n return {\n first: newFirst,\n last: newLast,\n isRangeChanged,\n scrollPos: newScrollPos\n };\n }\n onScrollChange(event) {\n const { first, last, isRangeChanged, scrollPos } = this.onScrollPositionChange(event);\n if (isRangeChanged) {\n const newState = { first, last };\n this.setContentPosition(newState);\n this.first = first;\n this.last = last;\n this.lastScrollPos = scrollPos;\n this.handleEvents('onScrollIndexChange', newState);\n if (this._lazy && this.isPageChanged(first)) {\n const lazyLoadState = {\n first: this._step ? Math.min(this.getPageByFirst(first) * this._step, this.items.length - this._step) : first,\n last: Math.min(this._step ? (this.getPageByFirst(first) + 1) * this._step : last, this.items.length)\n };\n const isLazyStateChanged = this.lazyLoadState.first !== lazyLoadState.first || this.lazyLoadState.last !== lazyLoadState.last;\n isLazyStateChanged && this.handleEvents('onLazyLoad', lazyLoadState);\n this.lazyLoadState = lazyLoadState;\n }\n }\n }\n onContainerScroll(event) {\n this.handleEvents('onScroll', { originalEvent: event });\n if (this._delay && this.isPageChanged()) {\n if (this.scrollTimeout) {\n clearTimeout(this.scrollTimeout);\n }\n if (!this.d_loading && this.showLoader) {\n const { isRangeChanged } = this.onScrollPositionChange(event);\n const changed = isRangeChanged || (this._step ? this.isPageChanged() : false);\n if (changed) {\n this.d_loading = true;\n this.cd.detectChanges();\n }\n }\n this.scrollTimeout = setTimeout(() => {\n this.onScrollChange(event);\n if (this.d_loading && this.showLoader && (!this._lazy || this._loading === undefined)) {\n this.d_loading = false;\n this.page = this.getPageByFirst();\n this.cd.detectChanges();\n }\n }, this._delay);\n }\n else {\n !this.d_loading && this.onScrollChange(event);\n }\n }\n unbindResizeListener() {\n if (this.resizeObserver) {\n this.resizeObserver.unobserve(this.elementViewChild?.nativeElement);\n this.resizeObserver = null;\n }\n }\n onResize() {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n this.resizeTimeout = setTimeout(() => {\n if (DomHandler.isVisible(this.elementViewChild?.nativeElement)) {\n const [width, height] = [DomHandler.getWidth(this.elementViewChild?.nativeElement), DomHandler.getHeight(this.elementViewChild?.nativeElement)];\n const [isDiffWidth, isDiffHeight] = [width !== this.defaultWidth, height !== this.defaultHeight];\n const reinit = this.both ? isDiffWidth || isDiffHeight : this.horizontal ? isDiffWidth : this.vertical ? isDiffHeight : false;\n reinit &&\n this.zone.run(() => {\n this.d_numToleratedItems = this._numToleratedItems;\n this.init();\n this.calculateAutoSize();\n });\n }\n }, this._resizeDelay);\n }\n handleEvents(name, params) {\n //@ts-ignore\n return this.options && this.options[name] ? this.options[name](params) : this[name].emit(params);\n }\n getContentOptions() {\n return {\n contentStyleClass: `p-scroller-content ${this.d_loading ? 'p-scroller-loading' : ''}`,\n items: this.loadedItems,\n getItemOptions: (index) => this.getOptions(index),\n loading: this.d_loading,\n getLoaderOptions: (index, options) => this.getLoaderOptions(index, options),\n itemSize: this._itemSize,\n rows: this.loadedRows,\n columns: this.loadedColumns,\n spacerStyle: this.spacerStyle,\n contentStyle: this.contentStyle,\n vertical: this.vertical,\n horizontal: this.horizontal,\n both: this.both\n };\n }\n getOptions(renderedIndex) {\n const count = (this._items || []).length;\n const index = this.both ? this.first.rows + renderedIndex : this.first + renderedIndex;\n return {\n index,\n count,\n first: index === 0,\n last: index === count - 1,\n even: index % 2 === 0,\n odd: index % 2 !== 0\n };\n }\n getLoaderOptions(index, extOptions) {\n const count = this.loaderArr.length;\n return {\n index,\n count,\n first: index === 0,\n last: index === count - 1,\n even: index % 2 === 0,\n odd: index % 2 !== 0,\n ...extOptions\n };\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: Scroller, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"18.0.1\", type: Scroller, selector: \"p-scroller\", inputs: { id: \"id\", style: \"style\", styleClass: \"styleClass\", tabindex: \"tabindex\", items: \"items\", itemSize: \"itemSize\", scrollHeight: \"scrollHeight\", scrollWidth: \"scrollWidth\", orientation: \"orientation\", step: \"step\", delay: \"delay\", resizeDelay: \"resizeDelay\", appendOnly: \"appendOnly\", inline: \"inline\", lazy: \"lazy\", disabled: \"disabled\", loaderDisabled: \"loaderDisabled\", columns: \"columns\", showSpacer: \"showSpacer\", showLoader: \"showLoader\", numToleratedItems: \"numToleratedItems\", loading: \"loading\", autoSize: \"autoSize\", trackBy: \"trackBy\", options: \"options\" }, outputs: { onLazyLoad: \"onLazyLoad\", onScroll: \"onScroll\", onScrollIndexChange: \"onScrollIndexChange\" }, host: { classAttribute: \"p-scroller-viewport p-element\" }, queries: [{ propertyName: \"templates\", predicate: PrimeTemplate }], viewQueries: [{ propertyName: \"elementViewChild\", first: true, predicate: [\"element\"], descendants: true }, { propertyName: \"contentViewChild\", first: true, predicate: [\"content\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n
\n \n \n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n \n \n \n \n \n `, isInline: true, styles: [\"@layer primeng{p-scroller{flex:1;outline:0 none}.p-scroller{position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;outline:0 none}.p-scroller-content{position:absolute;top:0;left:0;min-height:100%;min-width:100%;will-change:transform}.p-scroller-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0;pointer-events:none}.p-scroller-loader{position:sticky;top:0;left:0;width:100%;height:100%}.p-scroller-loader.p-component-overlay{display:flex;align-items:center;justify-content:center}.p-scroller-loading-icon{scale:2}.p-scroller-inline .p-scroller-content{position:static}}\\n\"], dependencies: [{ kind: \"directive\", type: i0.forwardRef(() => i1.NgClass), selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgForOf), selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgIf), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgTemplateOutlet), selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i0.forwardRef(() => i1.NgStyle), selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: i0.forwardRef(() => SpinnerIcon), selector: \"SpinnerIcon\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: Scroller, decorators: [{\n type: Component,\n args: [{ selector: 'p-scroller', template: `\n \n \n \n \n \n \n
\n \n \n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n \n \n \n \n \n `, changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, host: {\n class: 'p-scroller-viewport p-element'\n }, styles: [\"@layer primeng{p-scroller{flex:1;outline:0 none}.p-scroller{position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;outline:0 none}.p-scroller-content{position:absolute;top:0;left:0;min-height:100%;min-width:100%;will-change:transform}.p-scroller-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0;pointer-events:none}.p-scroller-loader{position:sticky;top:0;left:0;width:100%;height:100%}.p-scroller-loader.p-component-overlay{display:flex;align-items:center;justify-content:center}.p-scroller-loading-icon{scale:2}.p-scroller-inline .p-scroller-content{position:static}}\\n\"] }]\n }], ctorParameters: () => [{ type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { id: [{\n type: Input\n }], style: [{\n type: Input\n }], styleClass: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], items: [{\n type: Input\n }], itemSize: [{\n type: Input\n }], scrollHeight: [{\n type: Input\n }], scrollWidth: [{\n type: Input\n }], orientation: [{\n type: Input\n }], step: [{\n type: Input\n }], delay: [{\n type: Input\n }], resizeDelay: [{\n type: Input\n }], appendOnly: [{\n type: Input\n }], inline: [{\n type: Input\n }], lazy: [{\n type: Input\n }], disabled: [{\n type: Input\n }], loaderDisabled: [{\n type: Input\n }], columns: [{\n type: Input\n }], showSpacer: [{\n type: Input\n }], showLoader: [{\n type: Input\n }], numToleratedItems: [{\n type: Input\n }], loading: [{\n type: Input\n }], autoSize: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], options: [{\n type: Input\n }], onLazyLoad: [{\n type: Output\n }], onScroll: [{\n type: Output\n }], onScrollIndexChange: [{\n type: Output\n }], elementViewChild: [{\n type: ViewChild,\n args: ['element']\n }], contentViewChild: [{\n type: ViewChild,\n args: ['content']\n }], templates: [{\n type: ContentChildren,\n args: [PrimeTemplate]\n }] } });\nclass ScrollerModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: ScrollerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"18.0.1\", ngImport: i0, type: ScrollerModule, declarations: [Scroller], imports: [CommonModule, SharedModule, SpinnerIcon], exports: [Scroller, SharedModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: ScrollerModule, imports: [CommonModule, SharedModule, SpinnerIcon, SharedModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.0.1\", ngImport: i0, type: ScrollerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, SharedModule, SpinnerIcon],\n exports: [Scroller, SharedModule],\n declarations: [Scroller]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Scroller, ScrollerModule };\n"],"x_google_ignoreList":[1,2,3,4,5,15,24,25,26,27,28,29,30,31,32,33,34,35,36]}