{"version":3,"sources":["webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/rng.js?7d39","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/regex.js?255d","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/stringify.js?688d","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/validate.js?f4cd","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/v4.js?0bec","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/proactive-chat-trigger.ts?53ff","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-amount-trigger.ts?f249","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?6e2a","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?f770","webpack:///src/modules/msdyn365-pva-chat-connector/helpers/consts.ts?29a6","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/date-range-trigger.ts?7473","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/from-specific-page-trigger.ts?c7f8","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/page-visits-trigger.ts?f742","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-CountryRegion-trigger.ts?53fd","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-page-trigger.ts?4028","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/wait-on-time-trigger.ts?3c0b","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/index.ts?dd07","webpack:///src/modules/msdyn365-pva-chat-connector/helpers/ContextProvider.ts?3993","webpack:///src/modules/msdyn365-pva-chat-connector/helpers/StyleComposers.ts?47f6","webpack:///src/modules/msdyn365-pva-chat-connector/helpers/CommerceChatStore.ts?a21c","webpack:///src/modules/msdyn365-pva-chat-connector/components/ChatCore.tsx?8272","webpack:///src/modules/msdyn365-pva-chat-connector/components/Chat.tsx?d24f","webpack:///src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.view.tsx?1da7","webpack:///src/modules/account-profile-edit/components/account-profile-edit-loading-icon.tsx?e178","webpack:///./src/themes/gardner-theme-b2c/views/cart.view.tsx?c8a4","webpack:///src/modules/adventureworks/views/order-history.view.tsx?16f3","webpack:///src/modules/account-profile-edit/components/account-profile-edit-button.tsx?8f71","webpack:///src/modules/tile-list/tile-list.tsx?f539","webpack:///src/modules/account-profile-edit/components/account-profile-edit-label.tsx?505c","webpack:///./src/themes/gardner-theme/views/cart.view.tsx?3fe6","webpack:///./src/themes/gardner-theme/views/footer-item.view.tsx?7453","webpack:///src/modules/tile-list/tile-list.view.tsx?d2bd","webpack:///src/modules/account-profile-edit/components/account-profile-edit-error.tsx?a0b2","webpack:///src/modules/adventureworks/views/components/search.categorysuggest.tsx?5c98","webpack:///src/modules/adventureworks/views/components/search.mobile.empty.tsx?16ff","webpack:///src/modules/adventureworks/views/components/search.form.tsx?f934","webpack:///src/modules/adventureworks/views/components/search.keywordsuggest.tsx?34ae","webpack:///src/modules/adventureworks/views/components/search.productsuggest.tsx?1992","webpack:///src/modules/adventureworks/views/search.view.tsx?4e21","webpack:///src/modules/account-profile-edit/account-profile-edit.view.tsx?72b7","webpack:///./src/themes/gardner-theme/views/components/line-pagination.tsx?b2dd","webpack:///src/modules/check-in-for-pickup/check-in-confirmation.tsx?9d47","webpack:///src/modules/check-in-for-pickup/check-in-error.tsx?9f7f","webpack:///src/modules/check-in-for-pickup/check-in-for-pickup.tsx?404b","webpack:///src/modules/adventureworks/views/cart.view.tsx?7e13","webpack:///./src/themes/gardner-theme-b2c/views/footer-item.view.tsx?3f11","webpack:///src/modules/adventureworks/views/sign-in.view.tsx?94bb","webpack:///src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.tsx?df0e","webpack:///src/modules/check-in-for-pickup/check-in-for-pickup.view.tsx?26b3","webpack:///src/modules/account-profile-edit/components/account-profile-edit-loading-message.tsx?2c6f","webpack:///src/modules/account-profile-edit/components/account-profile-edit-input.tsx?3bba","webpack:///src/modules/account-profile-edit/account-profile-edit.tsx?a9d6"],"names":["getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","validate","uuid","REGEX","test","byteToHex","i","push","toString","substr","stringify","arr","offset","arguments","length","undefined","toLowerCase","TypeError","v4","options","buf","rnds","random","ProactiveChatTrigger","constructor","props","context","this","CartAmountTrigger","super","totalInCart","min","config","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","telemetry","debug","name","cart","_getCart","isEmpty","TotalAmount","retVal","getContextProvider","_objectSpread","eCommerceCustIsProactiveChat","eCommerceCustProactiveType","eCommerceCustProactiveShoppingCartAmount","getMessage","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","actionContext","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","eCommerceCustProactiveShoppingCartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","_cart$cart$CartLines","_cart$cart$CartLines2","proactiveOnCartSpecificProductList","_this$props$config$pr","j","_this$props$config$pr2","ItemId","eCommerceCustProactiveShoppingCartSpecificProduct","proactiveOnCartSpecificProductMessage","ProactiveChatNames","DateRangeTrigger","start","_toDate","proactiveOnDateRangeStart","end","proactiveOnDateRangeEnd","now","Date","setHours","getTime","DateRange","eCommerceCustProactiveFromDate","toUTCString","eCommerceCustProactiveToDate","proactiveOnDateRangeMessage","date","dateParts","split","FromSpecificPageTrigger","proactiveOnFromSpecificPageList","fromSpecificPageTrimmed","trim","window","document","referrer","indexOf","FromSpecificPage","eCommerceCustProactiveCameFromPage","proactiveOnFromSpecificPageMessage","PageVisitTrigger","visits","cookieName","cookies","request","expdate","setTime","isConsentGiven","setConsentCookie","_updateVisitCounter","proactiveOnPageVisitNumber","clear","set","domain","location","hostname","path","pathname","expires","PageVisits","eCommerceCustProactiveNumberOfVisits","proactiveOnPageVisitMessage","get","value","SpecificCountryRegionTrigger","customerCountryCode","suggestedMarket","proactiveOnSpecificLocation","eCommerceCustProactiveCountryCode","SpecificLocation","proactiveOnSpecificCountryRegionMessage","SpecificPageTrigger","proactiveOnSpecificPageList","specificPageTrimmed","href","SpecificPage","proactiveOnSpecificPageMessage","WaitOnTimeTrigger","proactiveOnWaitTimeSeconds","isNaN","waitTimeInMilliseconds","Number","triggerTime","WaitOnTime","eCommerceCustProactiveTimeOnPage","proactiveOnWaitTimeMessage","ProactiveTriggers","ContextProvider","user","userId","uuidv4","_getContext","data","enabled","timeout","message","_proactiveCheck","e","exception","provider","_getProvider","_this$props$context$r","eCommerceOperatingUnitNumber","apiSettings","oun","eCommerceBaseUrl","baseUrl","eCommerceDataAreaId","channel","InventLocationDataAreaId","UserId","AccountNumber","customerAccountNumber","Email","emailAddress","FirstName","firstName","anonymousUserName","LastName","lastName","Name","eCommerceCustPageURL","eCommerceCustChatType","proactiveChatEnabled","proactive","_isProactive","getChatWrapperStyle","position","top","right","bottom","left","zIndex","display","justifyContent","getMaximizedChatWrapperStyle","isMobileDevice","height","width","padding","chatHeight","chatWidth","getChatButtonStyle","alignItems","backgroundColor","startChatButtonBackgroundColor","color","startChatButtonTextColor","borderColor","startChatButtonBorderColor","borderRadius","startChatButtonBorderRadius","borderStyle","startChatButtonBorderStyle","borderWidth","startChatButtonBorderWidth","storeLogoURL","cursor","outlineStyle","alignSelf","boxShadow","WebkitBoxShadow","MozBoxShadow","getButtonStoreLogoStyle","headerBackgroundColor","headerTextColor","marginRight","boxSizing","getChatStoreLogoStyle","margin","getChatMessagesStyle","minimized","getChatMessageHeader","chatHeaderHeight","backgroundImage","headerBackgroundImageURL","backgroundRepeat","flexDirection","chatBorderStyle","chatBorderWidth","getMinimizeButtonStyle","borderTop","borderLeft","borderRight","borderBottom","marginTop","getCloseButtonStyle","border","getChatMessageContent","chatBorderColor","getProactiveWrapperStyle","getProactiveMessageHeader","getProactiveMessageContent","getProactiveButtonStyle","outline","fontFormat","font","join","CommerceChatStore","setNewMessage","setNewMessageAction","powervaDirectlineTokenURL","botID","tenantID","url","fetch","method","then","r","json","token","app","pvaChatConnectorPowervaDirectlineTokenURL","pvaChatConnectorBotID","pvaChatConnectorTenantID","_ref","dispatch","next","action","type","payload","language","navigator","_activity$from","activity","from","role","triggerQuery","text","ChatCore","ReactWebChat","WebChat","setUserId","useState","useMemo","ctx","directLine","createDirectLine","directLineToken","commerceChatStore","store","createStore","actionHandler","styleOptions","bubbleStyling","bubbleBackground","bubbleTextColor","bubbleBorderColor","bubbleBorderRadius","bubbleBorderStyle","bubbleBorderWidth","bubbleFromUserBackground","bubbleFromUserTextColor","bubbleFromUserBorderColor","bubbleFromUserBorderRadius","bubbleFromUserBorderStyle","bubbleFromUserBorderWidth","getBubbleStyling","avatarStyling","avatarBorderRadius","avatarSize","botAvatarBackgroundColor","botAvatarImage","botAvatarInitials","userAvatarBackgroundColor","userAvatarImage","userAvatarInitials","showAvatarInGroup","getAvatarStyling","suggestedActionStyling","suggestedActionLayout","suggestedActionBackground","suggestedActionTextColor","suggestedActionBorderColor","suggestedActionBorderRadius","suggestedActionBorderStyle","suggestedActionBorderWidth","suggestedActionDisabledBorderStyle","suggestedActionDisabledBorderWidth","suggestedActionDisabledTextColor","suggestedActionHeight","suggestedActionImageHeight","suggestedActionsCarouselFlipperCursor","suggestedActionsCarouselFlipperBoxWidth","suggestedActionsCarouselFlipperSize","suggestedActionsFlowMaxHeight","suggestedActionsStackedHeight","suggestedActionsStackedOverflow","suggestedActionsStackedLayoutButtonMaxHeight","suggestedActionsStackedLayoutButtonTextWrap","getSuggestedActionStyling","otherStyling","groupTimestamp","sendTimeout","sendTimeoutForAttachments","timestampColor","timestampFormat","notificationDebounceTimeout","hideToaster","toasterHeight","toasterMaxHeight","toasterSingularMaxHeight","toastFontSize","toastIconWidth","toastSeparatorColor","toastTextPadding","toastErrorBackgroundColor","toastErrorColor","toastInfoBackgroundColor","toastInfoColor","toastSuccessBackgroundColor","toastSuccessColor","toastWarnBackgroundColor","toastWarnColor","typingAnimationBackgroundImage","typingAnimationDuration","typingAnimationHeight","typingAnimationWidth","videoHeight","markdownExternalLinkIconImage","markdownRespectCRLF","internalLiveRegionFadeAfter","accent","subtle","getOtherStyling","hideUploadButton","primaryFont","getChatStyleOptions","React","createElement","userID","Chat","loaded","setLoaded","setMinimized","newMessage","setToken","isProactive","setIsProactive","proactiveMessage","setProactiveMessage","closed","setClosed","setProvider","isMobile","variant","VariantType","Browser","Viewport","chatStyle","getChatStyling","ChatWrapperStyle","MaximizedChatWrapperStyle","ChatButtonStyle","ButtonStoreLogoStyle","ChatStoreLogoStyle","ChatMessagesStyle","ChatMessageHeader","MinimizeButtonStyle","CloseButtonStyle","ChatMessageContent","ProactiveWrapperStyle","ProactiveMessageHeader","ProactiveMessageContent","ProactiveButtonStyle","RedDotStyle","background","handleMaximizeButtonClick","useEffect","getDirectLineToken","catch","contextProvider","prov","init","setTimeout","isValidToken","style","onClick","src","alt","fontWeight","fontSize","chatButtonHeader","chatButtonText","className","flexGrow","handleMinimizeButtonClick","handleCloseButtonClick","id","version","viewBox","xmlSpace","d","fill","unableToLoadChatMessage","p","interval","setInterval","clearInterval","Object","assign","AccountProfileEditLoadingIcon","toggleBopisHandler","cartLine","isBopisSelected","_cartLine$pickUpInSto","pickUpInStore","callbacks","toggleBopis","onChangeStoreHandler","_cartLine$pickUpInSto2","renderCartLineComment","cartLineComment","comment","cartLineId","cartProductTitle","renderCartLine","resources","storeSelector","telemetryContent","isMultiplePickUp","emailDeliveryModeCode","_cartLine$data3","_cartLine$data4","cartline","Comment","cartLineProductTitle","error","outOfStockErrorMessage","Node","cartlineId","addToWishlist","remove","renderGroupBopisBlock","_cartLine$data2","DeliveryMode","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","puckUpinStoreAttribute","getTelemetryAttributes","Button","addToOrderTemplate","renderCartlinesInternal","isPrintView","cartLines","map","index","itemIndex","key","renderBopisBlock","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","ContainerProps","orgUnitName","renderCartlines","waitingComponent","cartLoadingStatus","isCartDataResult","slots","orderLevelComment","multiplePickUpEnabled","CartlinesWrapper","renderOrderLevelComment","emptyCart","renderCartLinesGroupHeader","count","_cartLine$pickUpInSto6","pickUpText","shippingText","emailshippingText","groupTitle","replace","renderCartLinesGroupTitle","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","_cartLine$pickUpInSto5","itemLabel","itemsLabel","countTitle","deliveryOption","CartView","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","setIsPrintView","printViewToggle","_renderPrintView","handlePrintViewChange","printViewLabel","updatedTitle","cartTitle","totalItemsInCart","renderModuleAttributes","orderSummaryLineitems","orderTotal","checkoutAsGuestButton","renderOrderSummaryCheckoutButton","hasInvoiceLine","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","renderCartLinesGroup","cartLinesGroup","ArrayExtensions","hasElements","cartlines","_props$context$action","_props$context$action2","countItem","reduce","item","_item$data$cartline$Q","_item$data","Quantity","countItems","requestContext","EmailDeliveryModeCode","cartDataResult","orderSummaryHeading","OrderSummaryWrapper","renderInvoiceSummarylines","invoiceSummaryLines","orderSummaryItems","invoices","giftCard","loyalty","invoiceSummaryLineitems","OrderSummaryItems","renderOrderSummarylines","orderSummaryLines","subtotal","shipping","otherCharge","tax","errorData","OrderSummaryErrors","errors","Wrapper","header","_props$cart","promoCode","createTemplateFromCartButton","renderOrderSummaryCheckout","OrderHistoryOrderInfomation","orderInformationProps","salesId","receiptId","channelName","createdDate","amount","channelReferenceId","OrderHistoryGroupDelivery","_ref2","deliveryProps","heading","processing","address","trackingInfo","OrderHistoryGroup","_ref3","groupProps","delivery","salesLinesProps","salesLines","salesLine","LineId","OrderHistoryGroups","_ref4","groupsProps","groups","group","OrderHistoryHeader","_ref5","headerProps","orderCountLabel","extraActions","OrderHistorySalesOder","_ref6","salesOrderProps","orderInfomation","orderDetailsLink","expandProductsButton","placedBy","OrderHistoryList","_ref7","listProps","salesOrders","salesOrder","OrderHistoryView","_ref8","orderHistoryProps","alert","loading","emptyMessage","backToShoppingLink","list","table","moreButton","Module","AccountProfileEditButton","ariaLabel","disabled","attributes","TileList","_telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","StringExtensions","isNullOrWhitespace","Heading","headingTag","tag","render","_this$props$config$cl","title","propsCarousel","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","vertical","viewProps","_createHeading","singleSlideCarouselComponentProps","tileItemContainer","tileListContainer","classnames","tileListHeading","tiles","content","renderView","AccountProfileEditLabel","forId","htmlFor","advancedNotes","notes","_cartLine$data5","itemId","renderAdvancedNotes","filter","n","pagination","paginatedView","_props$cart6","setAdvancedNotes","pageLength","setPaginatedView","slice","paginationPage","setPaginationPage","clearCartModalActive","setClearCartModalActive","changePage","page","skip","_props$cartlines","async","itemIds","cl","getAdvancedNotesAsync","callerContext","getAdvancedNotes","renderClearCart","_renderClearCart","clearCartButtonText","LinePagination","nextPage","prevPage","currentPage","numPages","Math","ceil","prev","paginationPrev","paginationNext","checkoutAsSignInUserButton","_renderClearCartModal","handleClearCart","toggle","Modal","isOpen","ModalHeader","clearCartHeader","ModalBody","clearConfirmBody","ModalFooter","clearCancelButtonText","ids","cartLineIds","Array","c","removeCartLines","refreshCart","FooterItemView","FooterItem","_renderElement","HeadingContainer","Link","linkText","image","EditableLink","tileListView","tileItem","keyIndex","AccountProfileEditError","errorClassName","renderCategorySuggestionsTitle","inCategoriesHeading","categoryAutoSuggestionHeading","CategorySuggestionsComponent","noResultText","isLoadingAutoSuggest","isLoadingNode","autosuggestCategory","CategorySuggest","UlCategory","MobileAutoSuggestEmptyComponent","noSearchResultImage","Image","altText","gridSettings","imageSettings","lazyload","viewports","xs","w","h","q","renderProductNotFoundResultsImage","emptyMobileSearchTextHeading","emptyMobileSearchText","FormComponent","form","searchForm","formWrapper","clearSearchButtonText","isSearchText","clearSearch","cancelButtonNode","cancelBtnAriaLabel","cancelBtn","input","renderClearButton","submitBtn","renderKeywordSuggestionsTitle","keywordsHeading","KeywordSuggestionsComponent","keywordSuggest","ulKeyword","keywordSuggestions","renderProductSuggestionsTitle","productSuggestionsHeading","productAutoSuggestionHeading","renderProductNotFoundResults","noResultContentHeadingText","noResultContentParagraphText","ProductSuggestionsComponent","productSuggest","ulProduct","productSuggestions","productSuggestionHeading","items","_item$id","LiProduct","AProduct","thumbnail","price","renderTitle","searchSuggestionHeading","searchText","searchTextString","concat","searchAutoSuggestionHeading","format","SearchView","Search","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","UlKeyword","UlProduct","autosuggestKeyword","autosuggestProduct","SearchForm","FormWrapper","label","handleCancelSearchFocused","categorySuggestionHeading","setSearchTextString","isMobilePort","setIsMobile","propsFormInput","propsFormInputCurrent","ref","current","isMobileViewport","useCallback","isMobileView","addEventListener","viewport","isNullOrEmpty","Fragment","onBlur","isSearchFormExpanded","AccountProfileEditItem","wrapper","errorMessage","AccountProfileEditLoading","modal","modalBody","icon","AccountProfileEditView","accountProfileEdit","viewState","defaultAADConainer","aadConainer","accountProfileEditLocalAccount","isShowLoading","localAccount","buttonsWrapper","buttons","verificationSuccessModal","verificationSuccessModalMessage","button","LocalAccount","CheckInConfirmationComponent","confirmationText","shouldShowQrCode","channelReferenceIdLabel","QRCode","size","CheckInErrorComponent","CheckInForPickup","checkInForOrderPickup","channelId","parseInt","query","packingSlipId","additionalInformationToSubmit","additionalInformationList","additionalInformationKeyValuePair","_additionalInformatio","formKey","resourceId","extensionPropertyList","ObjectExtensions","isNullOrUndefined","additionalInformation","Key","Value","StringValue","SalesOrdersDataActions","checkInForOrderPickupAsync","queryResultSettings","setState","headerErrorMessage","genericErrorMessage","isCheckedIn","Promise","resolve","_onInit","_this$props$context$r2","_this$props$context$r3","_this$props$context$r4","params","isEditor","isPreview","requiredParameterMissingErrorMessage","additionalInformationKeys","state","_this$props$context$r5","isHeaderError","headerError","confirmationComponent","defaultConfirmationText","confirmationIdLabel","additionalInformationValues","shouldComponentUpdate","nextProps","nextState","additionalInformationHeading","payInvoicesDisplayText","IsInvoiceLine","checkoutBlockedDueToUnavailableFunds","totalDiscounts","expressCheckoutButton","ExpressCheckoutSectionWrapper","SignInLoading","SignInButton","SignInView","signIn","signInSection","signUpSection","signInSectionHeading","signInLocalAccount","signInSocialAccount","signUpSectionHeading","signInB2BAccount","signUpDescription","forgetPassword","disclaimer","signInButton","socialAccounts","SocialAccount","b2bSignUpButtonAriaLabel","b2bSignUpButtonText","signUpButton","B2BAccount","PvaChatConnector","componentDidMount","isOboRequest","botFrameworkCDNURL","pvaChatConnectorBotFrameworkCDNURL","script","crossOrigin","body","appendChild","CheckInViewComponent","_props$config$additio","FormBuilder","additionalInformationDefaultHeading","submitButtonText","additionalInformationSubmitButtonText","keys","requiredValueMissingErrorMessage","onSubmit","AccountProfileEditLoadingMessage","GetMaxLength","maxLength","parsedMaxLength","AccountProfileEditInput","pattern","onChange","AccountProfileEdit","moduleClassName","handleHeadingChange","event","target","onTextBoxChange","givenName","surname","emailRegex","_prePopulateData","_updateErrorMessage","initializationTimer","_isInitializationSuccessful","isInitialized","invalidEmailAddressError","obj","PRE","_htmlDecode","ID","email","PAT","PAT_DESC","required_field","requiredFieldMissingError","verifying_blurb","loadingMessage","EmailRegex","defaultRegex","source","componentDidUpdate","moduleProps","AccountProfileEditLoadingIconComponent","AccountProfileEditLoadingMessageComponent","Msdyn365","editProps","onEdit","_renderLocalAccount","str","innerHTML","childNodes","nodeValue","_renderInput","firstNameLabelText","firstNameMaxLength","lastNameLabelText","lastNameMaxLength","AccountProfileEditErrorComponent","requiredFieldMissingSummaryError","fieldIncorrectError","AccountProfileEditButtonComponent","saveButtonAriaLabel","saveButtonText","cancelButtonText","showEmail","emailAddressLabelText","labelText","AccountProfileEditLabelComponent","AccountProfileEditInputComponent","__decorate","observable","observer"],"mappings":";mHAGIA,E,+EACAC,G,wCAAQ,IAAIC,WAAW,KACZ,SAASC,IAEtB,IAAKH,KAGHA,EAAoC,oBAAXI,QAA0BA,OAAOJ,iBAAmBI,OAAOJ,gBAAgBK,KAAKD,SAA+B,oBAAbE,UAAgE,mBAA7BA,SAASN,iBAAkCM,SAASN,gBAAgBK,KAAKC,WAGrO,MAAM,IAAIC,MAAM,4GAIpB,OAAOP,EAAgBC,G,wBCjBV,wHCQf,ICFeO,MAJf,SAAkBC,GAChB,MAAuB,iBAATA,GAAqBC,EAAMC,KAAKF,IDG5CG,EAAY,GAEPC,EAAI,EAAGA,EAAI,MAAOA,EACzBD,EAAUE,MAAMD,EAAI,KAAOE,SAAS,IAAIC,OAAO,IAoBlCC,MAjBf,SAAmBC,GACjB,IAAIC,EAASC,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,EAG7EX,GAAQG,EAAUM,EAAIC,EAAS,IAAMP,EAAUM,EAAIC,EAAS,IAAMP,EAAUM,EAAIC,EAAS,IAAMP,EAAUM,EAAIC,EAAS,IAAM,IAAMP,EAAUM,EAAIC,EAAS,IAAMP,EAAUM,EAAIC,EAAS,IAAM,IAAMP,EAAUM,EAAIC,EAAS,IAAMP,EAAUM,EAAIC,EAAS,IAAM,IAAMP,EAAUM,EAAIC,EAAS,IAAMP,EAAUM,EAAIC,EAAS,IAAM,IAAMP,EAAUM,EAAIC,EAAS,KAAOP,EAAUM,EAAIC,EAAS,KAAOP,EAAUM,EAAIC,EAAS,KAAOP,EAAUM,EAAIC,EAAS,KAAOP,EAAUM,EAAIC,EAAS,KAAOP,EAAUM,EAAIC,EAAS,MAAMI,cAMzf,IAAKf,EAASC,GACZ,MAAMe,UAAU,+BAGlB,OAAOf,GEHMgB,MApBf,SAAYC,EAASC,EAAKR,GAExB,IAAIS,GADJF,EAAUA,GAAW,IACFG,SAAWH,EAAQvB,KAAOA,KAK7C,GAHAyB,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBD,EAAK,CACPR,EAASA,GAAU,EAEnB,IAAK,IAAIN,EAAI,EAAGA,EAAI,KAAMA,EACxBc,EAAIR,EAASN,GAAKe,EAAKf,GAGzB,OAAOc,EAGT,OAAOV,EAAUW,I,YCmBJE,MA3Bf,MAGIC,YAAYC,EAAmCC,GAC3CC,KAAKF,MAAQA,EACbE,KAAKD,QAAUA,I,ykBCHvB,MAAME,UAA0BL,EAK5BC,YAAYC,EAAmCC,GAC3CG,MAAMJ,EAAOC,GAHT,KAAAI,YAAsB,EAI1BH,KAAKI,IAAMJ,KAAKF,MAAMO,OAAOC,yBAC7BN,KAAKO,IAAMP,KAAKF,MAAMO,OAAOG,yBAC7BR,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,UAAUT,EAAkBU,2DAA2DX,KAAKI,eAAeJ,KAAKO,SAIjH,iBACH,MAAMK,QAAaZ,KAAKa,WACxB,GAAID,EAAKE,QAEL,OADAd,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUT,EAAkBU,wDACxD,EAGXX,KAAKG,YAAcS,EAAKA,KAAKG,aAAe,EAC5C,IAAIC,GAAS,EAiBb,OAdQA,EAFJhB,KAAKI,IACDJ,KAAKO,IACIP,KAAKI,KAAOJ,KAAKG,aAAeH,KAAKG,aAAeH,KAAKO,IAEzDP,KAAKI,KAAOJ,KAAKG,cAG1BH,KAAKO,KACIP,KAAKG,aAAeH,KAAKO,IAK1CP,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,UAAUT,EAAkBU,6BAA6BK,oBAAyBhB,KAAKG,iBAEpFa,EAGJC,qBACH,MAAO,IACHC,IAAA,GACOlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BC,2BAA4B,cAC5BC,yCAA0C,GAAGrB,KAAKG,cAKvDmB,aAEH,OAAOtB,KAAKF,MAAMO,OAAOkB,8BAAgCvB,KAAKF,MAAMO,OAAOmB,wBAGvE,iBACJ,OAAOC,uBAAazB,KAAKF,MAAMC,QAAQ2B,gBAIhCzB,Q,ykBC/Df,MAAM0B,UAAiC/B,EAKnCC,YAAYC,EAAmCC,GAC3CG,MAAMJ,EAAOC,GAHT,KAAA6B,cAAwB,EAI5B5B,KAAKI,IAAMJ,KAAKF,MAAMO,OAAOwB,4BAC7B7B,KAAKO,IAAMP,KAAKF,MAAMO,OAAOyB,4BAE7B9B,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIiB,EAAyBhB,oEAAoEX,KAAKI,eAAeJ,KAAKO,SAI3H,iBACH,MAAMK,QAAaZ,KAAKa,WACxB,GAAID,EAAKE,QAEL,OADAd,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUiB,EAAyBhB,wDAC/D,EAGXX,KAAK4B,cAAgBhB,EAAKA,KAAKmB,YAAc,EAE7C,IAAIf,GAAS,EAiBb,OAdQA,EAFJhB,KAAKI,IACDJ,KAAKO,IACIP,KAAKI,KAAOJ,KAAK4B,eAAiB5B,KAAK4B,eAAiB5B,KAAKO,IAE7DP,KAAKI,KAAOJ,KAAK4B,gBAG1B5B,KAAKO,KACIP,KAAK4B,eAAiB5B,KAAKO,IAK5CP,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIiB,EAAyBhB,6BAA6BK,iCAAsChB,KAAK4B,mBAElGZ,EAGJC,qBACH,MAAO,IACHC,IAAA,GACOlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BC,2BAA4B,uBAC5BY,gDAAiD,GAAGhC,KAAK4B,gBAK9DN,aAEH,OAAOtB,KAAKF,MAAMO,OAAO4B,iCAAmCjC,KAAKF,MAAMO,OAAOmB,wBAG1E,iBACJ,OAAOC,uBAAazB,KAAKF,MAAMC,QAAQ2B,gBAIhCC,Q,ykBClEf,MAAMO,UAAmCtC,EAAzCC,c,oBACY,KAAAsC,QAAkB,GAEnB,iBACH,IAAIC,GAAU,EACd,MAAMxB,QAAaZ,KAAKa,WACxB,GAAKD,EAAKE,QAmCNd,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUwB,EAA2BvB,8BAlCxE,GAAIC,EAAKA,KAAKyB,UAAW,CAAC,IAADC,EACrBtC,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIwB,EAA2BvB,wCAA2D,QAAvD2B,EAAoC1B,EAAKA,KAAKyB,iBAAS,IAAAC,OAAA,EAAnBA,EAAqBnD,WAEhG,IAAK,IAAIR,EAAI,EAAGA,GAAuB,QAAtB4D,EAAG3B,EAAKA,KAAKyB,iBAAS,IAAAE,OAAA,EAAnBA,EAAqBpD,QAAQR,IAAK,CAAC,IAAD4D,EAClD,IAAI3B,EAAKA,KAAKyB,UAAU1D,GAsBpB,MArBA,GAAIqB,KAAKF,MAAMO,OAAOmC,mCAAoC,CAAC,IAADC,EACtDzC,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIwB,EAA2BvB,iFAAqI,QAAjI8B,EAA6EzC,KAAKF,MAAMO,OAAOmC,0CAAkC,IAAAC,OAAA,EAApDA,EAAsDtD,WAG1K,IAAK,IAAIuD,EAAI,EAAGA,IAAyD,QAApDC,EAAA3C,KAAKF,MAAMO,OAAOmC,0CAAkC,IAAAG,OAAA,EAApDA,EAAsDxD,SAAU,GAAIuD,IAAK,CAAC,IAADC,EAC1F,GACI3C,KAAKF,MAAMO,OAAOmC,oCAClB5B,EAAKA,KAAKyB,UAAU1D,GAAGiE,QACvB5C,KAAKF,MAAMO,OAAOmC,mCAAmCE,KAAO9B,EAAKA,KAAKyB,UAAU1D,GAAGiE,OACrF,CACE5C,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIwB,EAA2BvB,oCAAoCC,EAAKA,KAAKyB,UAAU1D,GAAGiE,8EAE9FR,GAAU,EACV,eAUpBpC,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUwB,EAA2BvB,8CAMhF,OADAX,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUwB,EAA2BvB,+BAA+ByB,OAChGA,EAGJnB,qBACH,MAAO,IACHC,IAAA,GACOlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BC,2BAA4B,wBAC5ByB,kDAAmD,GAAG7C,KAAKmC,UAKhEb,aAEH,OAAOtB,KAAKF,MAAMO,OAAOyC,uCAAyC9C,KAAKF,MAAMO,OAAOmB,wBAGhF,iBACJ,OAAOC,uBAAazB,KAAKF,MAAMC,QAAQ2B,gBAIhCQ,IC5EHa,ED4EGb,I,0kBC5Ef,SAAYa,GACRA,EAAA,uBACAA,EAAA,sCACAA,EAAA,yBACAA,EAAA,qCACAA,EAAA,6BACAA,EAAA,0BANJ,CAAYA,MAAkB,KCQ9B,MAAMC,UAAyBpD,EAI3BC,YAAYC,EAAmCC,GAC3CG,MAAMJ,EAAOC,GACbC,KAAKiD,MAAQjD,KAAKkD,QAAQlD,KAAKF,MAAMO,OAAO8C,2BAC5CnD,KAAKoD,IAAMpD,KAAKkD,QAAQlD,KAAKF,MAAMO,OAAOgD,yBAE1CrD,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIsC,EAAiBrC,qDAAqDX,KAAKiD,iBAAiBjD,KAAKoD,SAItG,iBACH,MAAME,EAAM,IAAIC,KAChBD,EAAIE,SAAS,EAAG,EAAG,EAAG,GAEtB,IAAIxC,GAAS,EAcb,OAbIhB,KAAKiD,MAEDjC,EADAhB,KAAKoD,IACIpD,KAAKiD,MAAMQ,WAAaH,EAAIG,WAAaH,EAAIG,WAAazD,KAAKoD,IAAIK,UAEnEzD,KAAKiD,MAAMQ,WAAaH,EAAIG,UAElCzD,KAAKoD,MACZpC,EAASsC,EAAIG,WAAazD,KAAKoD,IAAIK,WAGvCzD,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIsC,EAAiBrC,6BAA6BK,sCAA2CsC,OAE1FtC,EAGJC,qBACH,MAAO,IACHC,IAAA,GACOlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BC,2BAA4B2B,EAAmBW,UAC/CC,+BAAgC3D,KAAKiD,MAAQjD,KAAKiD,MAAMW,cAAgB,GACxEC,6BAA8B7D,KAAKoD,IAAMpD,KAAKoD,IAAIQ,cAAgB,KAKvEtC,aAEH,OAAOtB,KAAKF,MAAMO,OAAOyD,6BAA+B9D,KAAKF,MAAMO,OAAOmB,wBAQtE0B,QAAQa,GACZ,GAAIA,EAAM,CACN,MAAMC,EAAYD,EAAKE,MAAM,KAC7B,OAAO,IAAIV,MAAMS,EAAU,IAAKA,EAAU,GAAK,GAAIA,EAAU,MAO1DhB,Q,ykBCpEf,MAAMkB,UAAgCtE,EAC3B,iBACH,IAAIwC,GAAU,EACd,GAAIpC,KAAKF,MAAMO,OAAO8D,gCAAiC,CAAC,IAAD1B,EACnDzC,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIwD,EAAwBvD,2EAA4H,QAAxH8B,EAAuEzC,KAAKF,MAAMO,OAAO8D,uCAA+B,IAAA1B,OAAA,EAAjDA,EAAmDtD,YAE9J,IAAK,IAAIR,EAAI,EAAGA,IAAsD,QAAjDgE,EAAA3C,KAAKF,MAAMO,OAAO8D,uCAA+B,IAAAxB,OAAA,EAAjDA,EAAmDxD,SAAU,GAAIR,IAAK,CAAC,IAADgE,EACvF,MAAMyB,EAAkCpE,KAAKF,MAAMO,OAAO8D,gCAAgCxF,GAAG0F,OAQ7F,GAPArE,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,UAAUwD,EAAwBvD,4BAA4B2D,OAAOC,SAASC,cAElFxE,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIwD,EAAwBvD,uEAAuEyD,OAGnGE,OAAOC,SAASC,SAASC,QAAQL,IAA4B,EAAG,CAChEhC,GAAU,EACV,aAIRpC,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,UAAUwD,EAAwBvD,+DAI1C,OADAX,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUwD,EAAwBvD,+BAA+ByB,OAC7FA,EAEJnB,qBACH,MAAO,IACHC,IAAA,GACOlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BC,2BAA4B2B,EAAmB2B,iBAC/CC,mCAAoCL,OAAOC,SAASC,WAIzDlD,aAEH,OAAOtB,KAAKF,MAAMO,OAAOuE,oCAAsC5E,KAAKF,MAAMO,OAAOmB,yBAI1E0C,Q,ykBC3Cf,MAAMW,UAAyBjF,EAM3BC,YAAYC,EAAmCC,GAC3CG,MAAMJ,EAAOC,GANV,KAAA+E,OAAiB,EAChB,KAAAC,WAAqB,mBAMzB/E,KAAKgF,QAAUhF,KAAKF,MAAMC,QAAQkF,QAAQD,QAC1ChF,KAAKkF,QAAU,IAAI3B,KAEnBvD,KAAKkF,QAAQC,QAAQnF,KAAKkF,QAAQzB,UAAY,SAC9CzD,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUmE,EAAiBlE,qCAAqCX,KAAKkF,aAExGlF,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUmE,EAAiBlE,mCAAmCX,KAAKgF,QAAQI,sBAC1GpF,KAAKgF,QAAQI,kBACbpF,KAAKgF,QAAQK,mBAGjBrF,KAAKsF,sBAGF,iBACH,IAAItE,GAAkB,EAOtB,OALIhB,KAAKF,MAAMO,OAAOkF,6BAClBvE,EAAShB,KAAK8E,QAAU9E,KAAKF,MAAMO,OAAOkF,4BAG9CvF,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUmE,EAAiBlE,6BAA6BK,OACpFA,EAGJwE,QACHxF,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUmE,EAAiBlE,iDAC9DX,KAAKgF,QAAQS,IAAYzF,KAAK+E,WAAY,EAAG,CACzCW,OAAQpB,OAAOqB,SAASC,SACxBC,KAAMvB,OAAOqB,SAASG,SACtBC,QAAS/F,KAAKkF,UAIfjE,qBACH,MAAO,IACHC,IAAA,GACOlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BC,2BAA4B2B,EAAmBiD,WAC/CC,qCAAsC,GAAGjG,KAAK8E,SAKnDxD,aAEH,OAAOtB,KAAKF,MAAMO,OAAO6F,6BAA+BlG,KAAKF,MAAMO,OAAOmB,wBAGtE8D,sBACJtF,KAAK8E,OAAS9E,KAAKgF,QAAQmB,IAAYnG,KAAK+E,YAAYqB,OAAS,EACjEpG,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUmE,EAAiBlE,4CAA4CX,KAAK8E,aAC7G9E,KAAK8E,OACP9E,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUmE,EAAiBlE,2CAA2CX,KAAK8E,WAE9G9E,KAAKgF,QAAQS,IAAYzF,KAAK+E,WAAY/E,KAAK8E,OAAQ,CACnDY,OAAQpB,OAAOqB,SAASC,SACxBC,KAAMvB,OAAOqB,SAASG,SACtBC,QAAS/F,KAAKkF,WAKXL,Q,ykBCxEf,MAAMwB,UAAqCzG,EAEvCC,YAAYC,EAAmCC,GAC3CG,MAAMJ,EAAOC,GACbC,KAAKsG,oBAAyCtG,KAAKF,MAAMC,QAAQkF,QAASsB,iBAAmB,MAC7FvG,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAI2F,EAA6B1F,wCAAwCX,KAAKsG,yBAI/E,iBACH,MAAMtF,IAAkBhB,KAAKF,MAAMO,OAAOmG,6BACpCxG,KAAKF,MAAMO,OAAOmG,4BAA4BnH,cAAcoF,QAAQzE,KAAKsG,oBAAoBjH,gBAAkB,EAGrH,OADAW,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAU2F,EAA6B1F,+BAA+BK,OAClGA,EAEJC,qBACH,MAAO,IACHC,IAAA,GACOlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BsF,kCAAmCzG,KAAKF,MAAMO,OAAOmG,6BAA+B,GACpFpF,2BAA4B2B,EAAmB2D,mBAIpDpF,aAEH,OAAOtB,KAAKF,MAAMO,OAAOsG,yCAA2C3G,KAAKF,MAAMO,OAAOmB,yBAI/E6E,Q,ykBCnCf,MAAMO,UAA4BhH,EACvB,iBACH,IAAIwC,GAAU,EACd,GAAIpC,KAAKF,MAAMO,OAAOwG,4BAA6B,CAAC,IAADpE,EAC/CzC,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,IAAIkG,EAAoBjG,uEAAoH,QAAhH8B,EAAmEzC,KAAKF,MAAMO,OAAOwG,mCAA2B,IAAApE,OAAA,EAA7CA,EAA+CtD,YAElJ,IAAK,IAAIR,EAAI,EAAGA,IAAkD,QAA7CgE,EAAA3C,KAAKF,MAAMO,OAAOwG,mCAA2B,IAAAlE,OAAA,EAA7CA,EAA+CxD,SAAU,GAAIR,IAAK,CAAC,IAADgE,EACnF,MAAMmE,EAA8B9G,KAAKF,MAAMO,OAAOwG,4BAA4BlI,GAAG0F,OAGrF,GAFArE,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,4BAA4B4D,OAAOqB,SAASoB,SAC/E/G,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,8DAA8DoG,MAC7FxC,OAAOqB,SAASoB,KAAKtC,QAAQqC,IAAwB,EAAG,CACxD1E,GAAU,EACV,aAIRpC,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUkG,EAAoBjG,0DAGrE,OADAX,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUkG,EAAoBjG,+BAA+ByB,OACzFA,EAGJnB,qBACH,MAAO,IACHC,IAAA,GACOlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BC,2BAA4B2B,EAAmBiE,eAKpD1F,aAEH,OAAOtB,KAAKF,MAAMO,OAAO4G,gCAAkCjH,KAAKF,MAAMO,OAAOmB,yBAItEoF,Q,ykBCtCf,MAAMM,UAA0BtH,EAG5BC,YAAYC,EAAmCC,GAC3CG,MAAMJ,EAAOC,GACTC,KAAKF,MAAMO,OAAO8G,6BAA+BC,MAAMpH,KAAKF,MAAMO,OAAO8G,8BACzEnH,KAAKqH,uBAAgF,IAAvDC,OAAOtH,KAAKF,MAAMO,OAAO8G,4BACvDnH,KAAKF,MAAMC,QAAQU,UAAUC,MACzB,UAAUwG,EAAkBvG,iCAAiCX,KAAKqH,6BAKvE,iBACH,MAAMrG,OAAkD5B,IAAhCY,KAAKqH,uBAE7B,OADArH,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,UAAUwG,EAAkBvG,+BAA+BK,OACvFA,EAGJC,qBACH,MAAMsG,EAAchE,KAAKD,OAAStD,KAAKqH,wBAA0B,GACjE,MAAO,IACIE,EAAchE,KAAKD,MACpBtD,KAAKD,QAAOmB,IAAA,GAELlB,KAAKD,SAAO,IACfoB,6BAA8B,OAC9BC,2BAA4B2B,EAAmByE,WAC/CC,iCAAkC,IAAGzH,KAAKqH,uBAAyBrH,KAAKqH,uBAAyB,KAK5G/F,aAEH,OAAOtB,KAAKF,MAAMO,OAAOqH,4BAA8B1H,KAAKF,MAAMO,OAAOmB,yBCnB1E,MAAMmG,GAAqC,CAC9C3E,EACA4D,EACA1C,EACAW,EACAwB,EACApG,EACA0B,EACAO,EDeWgF,GEmFAU,OAtHf,MAQI/H,YAAYC,GACRE,KAAKF,MAAQA,EACbE,KAAK6H,KAAO7H,KAAKF,MAAMC,QAAQkF,QAAQ4C,KACvC7H,KAAK8H,OAAS,MAAMC,IACpB/H,KAAKD,QAAUC,KAAKgI,cAEpBhI,KAAKiI,KAAO,CACRC,SAAS,EACTC,QAASnI,KAAKF,MAAMO,OAAO8G,4BAA8B,EACzDiB,QAASpI,KAAKF,MAAMO,OAAOmB,yBAQ5B,aACH,UACUxB,KAAKqI,kBACb,MAAOC,GAGLtI,KAAKF,MAAMW,UAAU8H,UAAUD,GAEnC,OAAOtI,KAAKwI,UAAYxI,KAAKyI,eAMzBA,eACJ,MAAO,KAAK,IAAAC,EACR,MAAqB,CACjBC,6BAA8B3I,KAAKF,MAAMC,QAAQkF,QAAQ2D,YAAYC,IACrEC,iBAAkB9I,KAAKF,MAAMC,QAAQkF,QAAQ2D,YAAYG,QACzDC,oBAAuD,QAApCN,EAAE1I,KAAKF,MAAMC,QAAQkF,QAAQgE,eAAO,IAAAP,OAAA,EAAlCA,EAAoCQ,yBACzDC,OAAQnJ,KAAK8H,OAEbsB,cAAepJ,KAAK6H,KAAKwB,sBAAwBrJ,KAAK6H,KAAKwB,sBAAwB,MACnFC,MAAOtJ,KAAK6H,KAAK0B,aAAevJ,KAAK6H,KAAK0B,aAAe,MACzDC,UAAWxJ,KAAK6H,KAAK4B,UAAYzJ,KAAK6H,KAAK4B,UAAYzJ,KAAKF,MAAMO,OAAOqJ,kBACzEC,SAAU3J,KAAK6H,KAAK+B,SAAW5J,KAAK6H,KAAK+B,SAAW,MACpDC,KAAM7J,KAAK6H,KAAKlH,KAAOX,KAAK6H,KAAKlH,KAAOX,KAAKF,MAAMO,OAAOqJ,kBAC1DI,qBAAsBxF,OAAOqB,SAASoB,KACtCgD,sBAAuB,MAEvB5I,6BAA8B,QAC9BC,2BAA4B,MAE5BuC,+BAAgC,MAChCE,6BAA8B,MAE9Bc,mCAAoC,MAEpCsB,qCAAsC,MAEtCQ,kCAAmC,MAInCgB,iCAAkC,MAElCpG,yCAA0C,MAE1CW,gDAAiD,MAEjDa,kDAAmD,QAQvDmF,cACJ,OAAOhI,KAAKyI,cAALzI,GAMH,wBACJ,GAAIA,KAAKF,MAAMO,OAAO2J,qBAClB,IAAK,IAAIrL,EAAI,EAAGA,EAAIgJ,GAAkBxI,OAAQR,IAAK,CAC/C,MAAMsL,EAAY,IAAItC,GAAkBhJ,GAAGqB,KAAKF,MAAOE,KAAKD,SAE5D,SAAUC,KAAKkK,aAAaD,GAAY,CACpCjK,KAAKF,MAAMC,QAAQU,UAAUC,MAAM,oDAAoDuJ,GACvF,QAWR,mBAAmBA,GAMvB,OALAjK,KAAKiI,KAAKC,cAAgB+B,EAAU3L,WAChC0B,KAAKiI,KAAKC,UACVlI,KAAKwI,SAAWyB,EAAUhJ,qBAC1BjB,KAAKiI,KAAKG,QAAU6B,EAAU3I,cAE3BtB,KAAKiI,KAAKC,U,6kBCxHzB,MAAMiC,GAAuB9J,IACG,CACxB+J,SAAU/J,EAAO+J,UAAY,UAC7BC,IAAKhK,EAAOgK,IAAMhK,EAAOgK,IAAM,UAC/BC,MAAOjK,EAAOiK,MAAQjK,EAAOiK,MAAQ,UACrCC,OAAQlK,EAAOkK,OAASlK,EAAOkK,OAAS,UACxCC,KAAMnK,EAAOmK,KAAOnK,EAAOmK,KAAO,UAClCC,OAAQ,IACRC,QAAS,OACTC,eAAgB,aAIlBC,GAA+BA,CAACvK,EAAyCwK,IACvEA,EAC4B,CACxBC,OAAQ,MACRC,MAAO,OACPR,OAAQ,QACRD,MAAO,IACPU,QAAS,OAGW,CACxBF,OAAQzK,EAAO4K,WAAa5K,EAAO4K,WAAa,MAChDF,MAAO1K,EAAO6K,UAAY7K,EAAO6K,UAAY,WAI/CC,GAAsB9K,IACI,CACxBqK,QAAS,OACTU,WAAY,SACZC,gBAAiBhL,EAAOiL,gCAAkC,QAC1DC,MAAOlL,EAAOmL,0BAA4B,UAC1CC,YAAapL,EAAOqL,4BAA8B,UAClDC,aAActL,EAAOuL,6BAA+B,MACpDC,YAAaxL,EAAOyL,4BAA8B,QAClDC,YAAa1L,EAAO2L,2BAA6B3L,EAAO2L,2BAA6B,MACrFhB,QAAS3K,EAAO4L,aAAe,mBAAqB,sBACpDC,OAAQ,UACRC,aAAc,OACdC,UAAW,WACXC,UAAW,+BACXC,gBAAiB,+BACjBC,aAAc,iCAIhBC,GAA2BnM,IACD,CACxBgL,gBAAiBhL,EAAOoM,uBAAyB,UACjDlB,MAAOlL,EAAOqM,iBAAmB,UACjCf,aAAc,MACdX,QAAS,OACTD,MAAO,OACPD,OAAQ,OACR6B,YAAa,OACbd,YAAa,QACbE,YAAa,MACba,UAAW,gBAIbC,GAAyBxM,IACC,CACxBgL,gBAAiBhL,EAAOoM,uBAAyB,UACjDlB,MAAOlL,EAAOqM,iBAAmB,UACjCf,aAAc,MACdX,QAAS,OACTD,MAAO,OACPD,OAAQ,OACRgC,OAAQ,mBACRV,UAAW,SACXP,YAAa,QACbE,YAAa,MACba,UAAW,gBAIbG,GAAuBA,CAAC1M,EAAyC2M,KACvC,CACxBtC,QAASsC,EAAY,OAAS,QAC9B3B,gBAAiBhL,EAAOgL,iBAAmB,QAC3CP,OAAQ,OACRC,MAAO,OACP6B,UAAW,aACXxC,SAAU,aAIZ6C,GAAwB5M,IAC1BA,EAAO6M,iBAAmB7M,EAAO6M,kBAAoB,OACzB,CACxB7B,gBAAiBhL,EAAOoM,uBAAyB,UACjDU,gBAAiB,QAAQ9M,EAAO+M,8BAAgC,OAChE7B,MAAOlL,EAAOqM,iBAAmB,UACjCW,iBAAkB,YAClB3C,QAAS,OACTU,WAAY,aACZkC,cAAe,MACfvC,MAAO,OACPX,SAAU,WACVC,IAAKhK,EAAO6M,iBAAmB,IAAI7M,EAAO6M,iBAAqB,GAC/DpC,OAAQzK,EAAO6M,iBACfzB,YAAapL,EAAOoM,sBAAwBpM,EAAOoM,sBAAwB,UAC3EZ,YAAaxL,EAAOkN,gBAAkBlN,EAAOkN,gBAAkB,OAC/DxB,YAAa1L,EAAOmN,gBAAkBnN,EAAOmN,gBAAkB,QAIjEC,GAA0BpN,IAC5BA,EAAO6M,iBAAmB7M,EAAO6M,kBAAoB,OACzB,CACxBQ,UAAW,OACXC,WAAY,OACZC,YAAa,OACbC,aAAc,cAAaxN,EAAOqM,iBAAmB,SACrDrB,gBAAiB,cACjBL,QAAS,oBACTkB,OAAQ,UACRC,aAAc,OACd2B,UAAW,MACXnB,YAAa,QAIfoB,GAAuB1N,IACzBA,EAAO6M,iBAAmB7M,EAAO6M,kBAAoB,OACzB,CACxBc,OAAQ,OACRzC,MAAOlL,EAAOqM,iBAAmB,QACjCrB,gBAAiB,cACjBL,QAAS,kBACTkB,OAAQ,UACRC,aAAc,OACd2B,UAAW,MACXnB,YAAa,QAIfsB,GAAyB5N,IAC3BA,EAAO6M,iBAAmB7M,EAAO6M,kBAAoB,OACzB,CACxBpC,OAAQ,OACRC,MAAO,OACPU,YAAapL,EAAO6N,gBAAkB7N,EAAO6N,gBAAkB,UAC/DrC,YAAaxL,EAAOkN,gBAAkBlN,EAAOkN,gBAAkB,OAC/DxB,YAAa1L,EAAOmN,gBAAkBnN,EAAOmN,gBAAkB,QAIjEW,GAA4B9N,IACF,CACxBiN,cAAe,SACf5C,QAAS,OACTC,eAAgB,WAChBU,gBAAiBhL,EAAOgL,iBAAmB,UAI7C+C,GAA6B/N,IAC/BA,EAAO6M,iBAAmB7M,EAAO6M,kBAAoB,OACzB,CACxB7B,gBAAiBhL,EAAOoM,uBAAyB,UACjDU,gBAAiB,QAAQ9M,EAAO+M,8BAAgC,OAChE7B,MAAOlL,EAAOqM,iBAAmB,UACjCW,iBAAkB,YAClB3C,QAAS,OACTU,WAAY,aACZkC,cAAe,MACfV,UAAW,aACX7B,MAAO,OACPD,OAAQzK,EAAO6M,iBACfzB,YAAapL,EAAOoM,sBAAwBpM,EAAOoM,sBAAwB,UAC3EZ,YAAaxL,EAAOkN,gBAAkBlN,EAAOkN,gBAAkB,OAC/DxB,YAAa1L,EAAOmN,gBAAkBnN,EAAOmN,gBAAkB,QAIjEa,GAA8BhO,IAChCA,EAAO6M,iBAAmB7M,EAAO6M,kBAAoB,OACzB,CACxBnC,MAAO,OACPC,QAAS,YACT4B,UAAW,aACXnB,YAAapL,EAAO6N,gBAAkB7N,EAAO6N,gBAAkB,UAC/DrC,YAAaxL,EAAOkN,gBAAkBlN,EAAOkN,gBAAkB,OAC/DxB,YAAa1L,EAAOmN,gBAAkBnN,EAAOmN,gBAAkB,QAIjEc,GAA2BjO,IAC7BA,EAAO6M,iBAAmB7M,EAAO6M,kBAAoB,OACzB,CACxB3B,MAAOlL,EAAOqM,iBAAmB,UACjCR,OAAQ,UACRlB,QAAS,WACTuD,QAAS,OACTP,OAAQ,OACR3C,gBAAiBhL,EAAOoM,uBAAyB,UACjDd,aAAc,SA0ChB6C,GAAcC,IAChB,GAAIA,GAAQA,EAAKtP,OAAS,EAAG,CACzB,MAAMH,EAAMyP,EAAKxK,MAAM,KACvB,IAAK,IAAItF,EAAI,EAAGA,EAAIK,EAAIG,OAAQR,IAC5BK,EAAIL,GAAK,IAAIK,EAAIL,GAAG0F,UAExBoK,EAAOzP,EAAI0P,KAAK,WAEhBD,EAAO,qDAGX,OAAOA,GC/PJ,MAAME,GA+CT9O,YACIC,EACA0I,EACAoG,GAEA5O,KAAKF,MAAQA,EACbE,KAAKwI,SAAWA,EAChBxI,KAAK6O,oBAAsBD,EA7CxB,gCAAgC9O,GACnC,GAAIA,EAAMO,OAAOyO,2BAA6BhP,EAAMO,OAAO0O,OAASjP,EAAMO,OAAO2O,SAAU,CAEvF,MAAMC,EAAM,GAAGnP,EAAMO,OAAOyO,mCAAmChP,EAAMO,OAAO0O,kBAAkBjP,EAAMO,OAAO2O,WAE3G,OAAOE,MAAMD,EADG,CAAEE,OAAQ,QAErBC,KAAKC,GAAKA,EAAEC,QACZF,KAAKC,IACF,GAAIA,EAAEE,MACF,OAAOF,EAAEE,MAET,MAAMF,IAMtB,MAAMJ,EAAM,GAAGnP,EAAMC,QAAQyP,IAAInP,OAAOoP,mDAAmD3P,EAAMC,QAAQyP,IAAInP,OAAOqP,kCAAkC5P,EAAMC,QAAQyP,IAAInP,OAAOsP,2BAI/K,OAAOT,MAAMD,EAHG,CACZE,OAAQ,QAGPC,KAAKC,GAAKA,EAAEC,QACZF,KAAKC,IACF,GAAIA,EAAEE,MACF,OAAOF,EAAEE,MAET,MAAMF,IA6Bf,oBAAmBO,GAAkF,IAAjF,SAAEC,EAAQ,KAAEC,EAAI,OAAEC,GAA+DH,EAGxG,OAFcG,EAAOC,MAGjB,IAAK,gCAEDH,EAAS,CACLG,KAAM,sBACNC,QAAS,CACLtP,KAAM,eACNyF,MAAO,CAAE8J,SAAU5L,OAAO6L,UAAUD,aAG5C,MAEJ,IAAK,gCAAiC,CAAC,IAADE,EAClC,MAAMC,EAAWN,EAAOE,QAAQI,SACH,SAAzBA,SAAc,QAAND,EAARC,EAAUC,YAAI,IAAAF,OAAA,EAAdA,EAAgBG,OAEhBvQ,KAAK6O,qBAAoB,GAE7B,MAEJ,IAAK,sCACD,OAAQkB,EAAOE,QAAQI,SAAS1P,MAC5B,IAAK,oBAEyBvB,IAAlBY,KAAKwI,UAELqH,EAAS,CACLG,KAAM,sBACNC,QAAS,CACLtP,KAAM,gBACNyF,MAAOpG,KAAKwI,cAK5B,MACJ,IAAK,gBAEOxI,KAAKF,MAAMO,OAAOmQ,cAElBX,EAAS,CACLG,KAAM,6BACNC,QAAS,CACLQ,KAAMzQ,KAAKF,MAAMO,OAAOmQ,iBAiBxD,OAAOV,EAAKC,IClFLW,OAzCsC5Q,IACjD,MAAM,aAAE6Q,GAAiBrM,OAAOsM,SAEzB9I,EAAQ+I,GAAaC,mBAAS,IACrCC,kBAAQ,KACJ,GAAIjR,EAAM0I,SAAU,CAChB,MAAMwI,EAAMlR,EAAM0I,WACdwI,EAAI7H,QACJ0H,EAAgC,iBAAfG,EAAI7H,OAAsB6H,EAAI7H,OAAS6H,EAAI7H,OAAO/C,MAAMvH,cAGlF,CAACiB,EAAM0I,WAEV,MAAMyI,EAAaF,kBAAQ,IAChBzM,OAAOsM,QAAQM,iBAAiB,CAAE3B,MAAOzP,EAAMqR,kBACvD,CAACrR,EAAMqR,kBAEJC,EAAoBL,kBAAQ,KAC9B,GAAIE,GAAcnR,EAAM0I,SACpB,OAAO,IAAImG,GAAkB7O,EAAMO,OAAQP,EAAM0I,SAAU1I,EAAM8O,gBAGtE,CAAC9O,EAAM0I,SAAUyI,IAEdI,EAAQN,kBAAQ,IACXzM,OAAOsM,QAAQU,YAClB,GACA1B,IAAA,IAAC,SAAEC,GAAmCD,EAAA,OAAME,GAA0CC,IAClFqB,WAAmBG,cAAc,CAAE1B,WAAUC,OAAMC,cAG5D,CAACqB,IACEI,EFkU0BnR,KAChC,MAAMoR,EAtGgBpR,KACf,CACHqR,iBAAkBrR,EAAOqR,kBAAoB,QAC7CC,gBAAiBtR,EAAOsR,iBAAmB,QAC3CC,kBAAmBvR,EAAOuR,mBAAqB,UAC/CC,mBAAoBxR,EAAOwR,oBAAsB,IACjDC,kBAAmBzR,EAAOyR,mBAAqB,QAC/CC,kBAAmB1R,EAAO0R,mBAAqB,IAC/CC,yBAA0B3R,EAAO2R,0BAA4B,QAC7DC,wBAAyB5R,EAAO4R,yBAA2B,QAC3DC,0BAA2B7R,EAAO6R,2BAA6B,UAC/DC,2BAA4B9R,EAAO8R,4BAA8B,IACjEC,0BAA2B/R,EAAO+R,2BAA6B,QAC/DC,0BAA2BhS,EAAOgS,2BAA6B,MAyF7CC,CAAiBjS,GACjCkS,EA9CgBlS,KACf,CACHmS,mBAAoBnS,EAAOmS,oBAAsB,MACjDC,WAAYpS,EAAOoS,YAAc,KACjCC,yBAA0BrS,EAAOqS,0BAA4B,YAC7DC,eAAgBtS,EAAOsS,gBAAkB,GACzCC,kBAAmBvS,EAAOuS,mBAAqB,GAC/CC,0BAA2BxS,EAAOwS,2BAA6B,YAC/DC,gBAAiBzS,EAAOyS,iBAAmB,GAC3CC,mBAAoB1S,EAAO0S,oBAAsB,GACjDC,kBAAmB3S,EAAO2S,mBAAqB,WAoC7BC,CAAiB5S,GACjC6S,EAjCyB7S,KACxB,CACH8S,sBAAuB9S,EAAO8S,uBAAyB,WACvDC,0BAA2B/S,EAAO+S,2BAA6B,QAC/DC,yBAA0BhT,EAAOgT,0BAA4B,GAC7DC,2BAA4BjT,EAAOiT,4BAA8B,GACjEC,4BAA6BlT,EAAOkT,6BAA+B,IACnEC,2BAA4BnT,EAAOmT,4BAA8B,QACjEC,2BAA4BpT,EAAOoT,4BAA8B,IACjEC,mCAAoCrT,EAAOqT,oCAAsC,QACjFC,mCAAoCtT,EAAOsT,oCAAsC,IACjFC,iCAAkCvT,EAAOuT,kCAAoC,GAC7EC,sBAAuBxT,EAAOwT,uBAAyB,KACvDC,2BAA4BzT,EAAOyT,4BAA8B,KACjEC,sCAAuC1T,EAAO0T,uCAAyC,GACvFC,wCAAyC3T,EAAO2T,yCAA2C,KAC3FC,oCAAqC5T,EAAO4T,qCAAuC,KACnFC,8BAA+B7T,EAAO6T,+BAAiC,GACvEC,8BAA+B9T,EAAO8T,+BAAiC,GACvEC,gCAAiC/T,EAAO+T,iCAAmC,IAC3EC,6CAA8ChU,EAAOgU,8CAAgD,GACrGC,4CAA6CjU,EAAOiU,8CAA+C,IAYxEC,CAA0BlU,GACnDmU,EAvFenU,KACd,CACHoU,eAAgBpU,EAAOoU,iBAAkB,EACzCC,YAAarU,EAAOqU,aAAe,QACnCC,0BAA2BtU,EAAOsU,2BAA6B,SAC/DC,eAAgBvU,EAAOuU,gBAAkB,YACzCC,gBAAiBxU,EAAOwU,iBAAmB,YAC3CC,4BAA6BzU,EAAOyU,6BAA+B,MACnEC,YAAa1U,EAAO0U,cAAe,EACnCC,cAAe3U,EAAO2U,eAAiB,KACvCC,iBAAkB5U,EAAO4U,kBAAoB,SAC7CC,yBAA0B7U,EAAO6U,0BAA4B,KAC7DC,cAAe9U,EAAO8U,eAAiB,QACvCC,eAAgB/U,EAAO+U,gBAAkB,KACzCC,oBAAqBhV,EAAOgV,qBAAuB,UACnDC,iBAAkBjV,EAAOiV,kBAAoB,IAC7CC,0BAA2BlV,EAAOkV,2BAA6B,UAC/DC,gBAAiBnV,EAAOmV,iBAAmB,UAC3CC,yBAA0BpV,EAAOoV,0BAA4B,UAC7DC,eAAgBrV,EAAOqV,gBAAkB,UACzCC,4BAA6BtV,EAAOsV,6BAA+B,UACnEC,kBAAmBvV,EAAOuV,mBAAqB,UAC/CC,yBAA0BxV,EAAOwV,0BAA4B,UAC7DC,eAAgBzV,EAAOyV,gBAAkB,UACzCC,+BAAgC1V,EAAO0V,gCAAkC,YACzEC,wBAAyB3V,EAAO2V,yBAA2B,OAC3DC,sBAAuB5V,EAAO4V,uBAAyB,KACvDC,qBAAsB7V,EAAO6V,sBAAwB,KACrDC,YAAa9V,EAAO8V,aAAe,MACnCC,8BACI/V,EAAO+V,+BACP,8iEACJC,oBAAqBhW,EAAOgW,qBAAuB,OACnDC,4BAA6BjW,EAAOiW,6BAA+B,OACnEC,OAAQlW,EAAOkW,QAAU,UACzBC,OAAQnW,EAAOmW,QAAU,YAoDRC,CAAgBpW,GACrC,OAAAa,YAAA,CACIwV,kBAAkB,EAClBC,YAAanI,GAAWnO,EAAOsW,aAC/BtL,gBAAiBhL,EAAOgL,iBAAmB,SACxCoG,GACAc,GACAW,GACAsB,IE9UcoC,CAAoB9W,EAAMO,OAAOA,QAEtD,MAAiC,KAA1BP,EAAMqR,gBACT0F,IAAAC,cAACnG,EAAY,CAACM,WAAYA,EAAY8F,OAAQjP,EAAQ0J,aAAcA,EAAcH,MAAOA,IAEzFwF,IAAAC,cAAA,kD,6kBCmGOE,OAjI8ClX,IACzD,MAAOmX,EAAQC,GAAapG,oBAAS,IAC9B9D,EAAWmK,GAAgBrG,oBAAS,IACpCsG,EAAYxI,GAAiBkC,oBAAS,IACtCvB,EAAO8H,GAAYvG,mBAAS,KAC5BwG,EAAaC,GAAkBzG,oBAAS,IACxC0G,EAAkBC,GAAuB3G,mBAAShR,EAAMO,OAAOmB,0BAC/DkW,EAAQC,GAAa7G,oBAAS,IAC9BtI,EAAUoP,GAAe9G,qBAC1BjG,EAC6E,OAA/EgN,mBAAS,CAAEC,QAASC,cAAYC,QAASjY,QAASD,EAAMC,QAAQkF,WACgB,OAAhF4S,mBAAS,CAAEC,QAASC,cAAYE,SAAUlY,QAASD,EAAMC,QAAQkF,UAC/DiT,EHwMoBC,EAAC9X,EAAyC2M,EAAoBnC,KAC/D,CACrBuN,iBAAkBjO,GAAoB9J,GACtCgY,0BAA2BzN,GAA6BvK,EAAQwK,GAChEyN,gBAAiBnN,GAAmB9K,GACpCkY,qBAAsB/L,GAAwBnM,GAC9CmY,mBAAoB3L,GAAsBxM,GAC1CoY,kBAAmB1L,GAAqB1M,EAAQ2M,GAChD0L,kBAAmBzL,GAAqB5M,GACxCsY,oBAAqBlL,GAAuBpN,GAC5CuY,iBAAkB7K,GAAoB1N,GACtCwY,mBAAoB5K,GAAsB5N,GAC1CyY,sBAAuB3K,GAAyB9N,GAChD0Y,uBAAwB3K,GAA0B/N,GAClD2Y,wBAAyB3K,GAA2BhO,GACpD4Y,qBAAsB3K,GAAwBjO,GAC9C6Y,YAjCwB,CACxBC,WAAY,MACZxN,aAAc,MACdb,OAAQ,MACRC,MAAO,MACPX,SAAU,WACVE,MAAO,OACPC,OAAQ,UG9LM4N,CAAerY,EAAMO,OAAQ2M,EAAWnC,GACpDuO,EAA4BA,KAC9BlC,GAAU,GACVC,GAAa,GACbvI,GAAc,IAalByK,oBAAU,KACFpC,GACAtI,GAAkB2K,mBAAmBxZ,GAChCsP,KAAK+B,IACFkG,EAASlG,KAEZoI,MAAMjR,IACH+O,EA5CE,iBA6CFvX,EAAMW,UAAU8H,UAAUD,MAGvC,CAAC2O,IACJoC,oBAAU,KACN,WACI,MAAMG,EAAkB,IAAI5R,GAAgB9H,GACtC2Z,QAAaD,EAAgBE,OACnC,GAAIF,EAAgBvR,KAAKC,QAAS,CAC9BpI,EAAMC,QAAQU,UAAUC,MAAM,uCAAuC8Y,EAAgBvR,KAAKC,aAE1F,MAAMC,EAAyC,IAA/BqR,EAAgBvR,KAAKE,QACrCwR,WAAW,KACF1C,IACDnX,EAAMC,QAAQU,UAAUC,MAAM,qCAAqCuW,MACnEQ,EAAoB+B,EAAgBvR,KAAKG,SACzCmP,GAAe,KAEpBpP,GAEPyP,EAAY,IAAM6B,IAftB,GAgBKF,MAAMjR,GAAKxI,EAAMW,UAAU8H,UAAUD,KAC3C,IACH+Q,oBAAU,KACF3B,GACAC,GAAU,IAEf,CAACpI,EAAO/G,IACX,MAAMoR,EAAeA,IACV,GAAGrK,GA1EI,gBA4ElB,OACIsH,IAAAC,cAAA,OACI+C,MAAK3Y,MAAA,GACEgX,EAAUE,mBACRpL,GAAaiK,GAAU2C,IAAiB1B,EAAUG,0BAA4B,KAGtFrL,KAAesK,GAAgBA,GAAeL,IAC3CJ,IAAAC,cAAA,UAAQgD,QAASV,EAA2BS,MAAO3B,EAAUI,iBACxDxY,EAAMO,OAAO4L,cAAgB4K,IAAAC,cAAA,OAAKiD,IAAKja,EAAMO,OAAO4L,aAAc+N,IAAI,OAAOH,MAAO3B,EAAUK,uBAC/F1B,IAAAC,cAAA,OAAK+C,MAAO,IACRhD,IAAAC,cAAA,OAAK+C,MAAO,CAAEI,WAAY,OAAQC,SAAU,SAAWpa,EAAMO,OAAO8Z,kBACpEtD,IAAAC,cAAA,WAAMhX,EAAMO,OAAO+Z,iBAChB,IACNhD,GACGP,IAAAC,cAAA,QAAMuD,UAAU,UAAUR,MAAO3B,EAAUgB,aAAW,MAMjElM,GAAasK,IAAgBL,GAC1BJ,IAAAC,cAAA,OAAK+C,MAAO3B,EAAUY,uBAClBjC,IAAAC,cAAA,OAAK+C,MAAO3B,EAAUa,wBACjBjZ,EAAMO,OAAO4L,cACV4K,IAAAC,cAAA,OAAKiD,IAAKja,EAAMO,OAAO4L,aAAc+N,IAAI,OAAOH,MAAO3B,EAAUM,qBAErE3B,IAAAC,cAAA,OAAK+C,MAAO,CAAES,SAAU,MAE5BzD,IAAAC,cAAA,OAAK+C,MAAO3B,EAAUc,yBAClBnC,IAAAC,cAAA,SAAIU,GACJX,IAAAC,cAAA,UAAQgD,QAASV,EAA2BS,MAAO3B,EAAUe,sBAAoB,gBAM5FhC,GAAU2C,KACP/C,IAAAC,cAAA,OAAK+C,MAAO3B,EAAUO,mBAClB5B,IAAAC,cAAA,OAAK+C,MAAO3B,EAAUQ,mBACjB5Y,EAAMO,OAAO4L,cACV4K,IAAAC,cAAA,OAAKiD,IAAKja,EAAMO,OAAO4L,aAAc+N,IAAI,OAAOH,MAAO3B,EAAUM,qBAErE3B,IAAAC,cAAA,OAAK+C,MAAO,CAAES,SAAU,KACxBzD,IAAAC,cAAA,UAAQgD,QA9FMS,KAC9BpD,GAAa,GACbvI,GAAc,IA4F8CiL,MAAO3B,EAAUS,sBAC7D9B,IAAAC,cAAA,UAAQgD,QA3FGU,KAC3B7C,GAAU,GACVT,GAAU,GACVC,GAAa,GACbvI,GAAc,GACd2I,GAAe,IAsF0CsC,MAAO3B,EAAUU,kBACtD/B,IAAAC,cAAA,OAAKhM,OAAO,OAAO2P,GAAG,UAAUC,QAAQ,MAAMC,QAAQ,cAAc5P,MAAM,OAAO6P,SAAS,YACtF/D,IAAAC,cAAA,QAAM+D,EAzHlC,geAyHqDC,KAAMhb,EAAMO,OAAOqM,qBAIxDmK,IAAAC,cAAA,OAAK+C,MAAO3B,EAAUW,oBAClBhC,IAAAC,cAACpG,GAAQ,CAACS,gBAAiB5B,EAAOlP,OAAQP,EAAO0I,SAAUA,EAAUoG,cAAeA,OAI9FgL,KAAkB/C,IAAAC,cAAA,OAAK+C,MAAO,CAAEnP,QAAS,OAAQU,WAAY,aAAetL,EAAMO,OAAO0a,2B,+NCzIvFjb,cAEZ,MAAOmX,EAAQC,GAAaL,YAAe,GACrCmE,E,2WAAC9Z,CAAA,GACApB,GAKDmb,EAAWC,YAAY,KAEf,qBADO5W,QACQA,OAAOsM,UAC5BsG,GAAU,GACViE,cAAcF,KAEnB,KAEH,OAAOpE,gBAAA,OAAKwD,UAAU,OAAOpD,GAAUJ,gBAACG,GAAIoE,OAAAC,OAAA,GAAKL,O,oCC1BrD,gBAeeM,IAJiE1L,IAAA,IAAC,UAAEyK,GAAWzK,EAAA,OAC1FiH,gBAAA,OAAKwD,UAAcA,EAAH,qB,2HCgBpB,MAAMkB,EAAqBA,CAACC,EAA+BC,IAA6B,KAAK,IAAAC,EACrE,QAAtBA,EAAAF,EAASG,qBAAa,IAAAD,GAAtBA,EAAwBE,UAAUC,aAAaJ,IAQ3CK,EAAwBN,GAAkC,KAAK,IAAAO,EAC7C,QAAtBA,EAAAP,EAASG,qBAAa,IAAAI,GAAtBA,EAAwBH,UAAUC,aAAY,IAoG1CG,EAAwBA,CAACC,EAAkCC,EAAiBC,EAAoBC,IAC/FH,EAGEpF,eAAmBoF,EAAgB,GAA0B,CAAEC,UAASC,aAAYC,qBAFlF,KAiBLC,EAAiBA,CAACb,EAA+Bc,EAA2BC,EAC1DN,EAA8CO,EAC9CC,EAA4BC,KAA+C,IAAAC,EAAAC,EACjG,MAAMV,GAAuB,QAAbS,EAAAnB,EAASvT,YAAI,IAAA0U,OAAA,EAAbA,EAAeE,SAASC,UAAW,GAC7CC,EAAoC,QAAhBH,EAAGpB,EAASvT,YAAI,IAAA2U,GAAS,QAATA,EAAbA,EAAeza,eAAO,IAAAya,OAAA,EAAtBA,EAAwB/S,KACrD,OAAI2R,EAASwB,QAAUV,EAAUW,uBAE7BpG,gBAACqG,OAAI,CAAC7C,UAAU,0BACb2B,EAAsBC,EAAiBC,EAASV,EAAS2B,WAAaJ,GACtEvB,EAAS4B,cACT5B,EAAS6B,QAKZZ,EAEA5F,gBAACqG,OAAI,CAAC7C,UAAU,sCAjEQiD,EAAC9B,EAA+Bc,EAA2BC,EAC1DC,EAAsCE,KAAsD,IAAAa,EAEzH,IAAK/B,EAASG,gBAAkBY,IAA8B,QAAbgB,EAAA/B,EAASvT,YAAI,IAAAsV,OAAA,EAAbA,EAAeV,SAASW,gBAAiBd,EACxF,OAAO,KAGT,MAAM,uBAAEe,EAAsB,uBAAEC,EAAsB,oBAAEC,GAAwBrB,EAE1Eb,EAAkBD,EAASG,cAAcF,gBAEzCmC,EAAUC,2BAAiB,QAASrB,EAAmBsB,oBAAkBC,eACzEC,EAAyBC,iCAAuBzB,EAAmBoB,GAEzE,OACE/G,2BAAA,KACG4E,EACC5E,gBAACqH,SAAM,CAAC3N,KAAK,OAAO8J,UAAU,qCAAqCP,QAASgC,EAAqBN,IAC9FiC,GACS,KACd5G,gBAACqH,SAAM9C,OAAAC,OAAA,CACL9K,KAAK,OAAO8J,UAAU,sCAAyC2D,EAAsB,CACrFlE,QAASyB,EAAmBC,EAAUC,KACrCA,EAAkBiC,EAAyBC,KA2C3CL,CAAsB9B,EAAUc,EAAWC,EAAeC,EAAkBE,GAC5EV,EAAsBC,EAAiBC,EAASV,EAAS2B,WAAaJ,GACtEvB,EAAS2C,mBACT3C,EAAS4B,cACT5B,EAAS6B,QAKZ7B,EAAS2C,mBAETtH,gBAACqG,OAAI,CAAC7C,UAAU,gCACb2B,EAAsBC,EAAiBC,EAASV,EAAS2B,WAAaJ,GACtEvB,EAAS2C,mBACT3C,EAAS4B,cACT5B,EAAS6B,QAMdxG,gBAACqG,OAAI,CAAC7C,UAAU,0BACb2B,EAAsBC,EAAiBC,EAASV,EAAS2B,WAAaJ,GACtEvB,EAAS4B,cACT5B,EAAS6B,SAeVe,EAA0BA,CAACC,EAAsBC,EAAkChC,EACxDC,EAA4CN,EAA8CO,EAAsCC,EAChIC,IAE7B4B,EAAUC,IAAI,CAAC/C,EAAUgD,KACvB,MAAMC,EAAYD,EAClB,OACE3H,gBAAA,OAAKwD,UAAW,wBAAuBgE,EAAc,4BAA8B,IAAMK,IAAKD,GAC3FjD,EAASqB,SACVhG,gBAAA,QAAMwD,UAAU,mCACDoC,EAAmB,KA9KnBkC,EAACnD,EAA+Bc,EAA2BC,EAC1DC,EAAsCE,KAAsD,IAAAkC,EAEpH,IAAKpD,EAASG,gBAAkBY,IAA8B,QAAbqC,EAAApD,EAASvT,YAAI,IAAA2W,OAAA,EAAbA,EAAe/B,SAASW,gBAAiBd,EACxF,OAAO,KAGT,MAAM,uBACJgB,EAAsB,yBACtBmB,EAAwB,oBACxBlB,EAAmB,8BACnBmB,EAA6B,uBAC7BrB,GACEnB,EAEEb,EAAkBD,EAASG,cAAcF,gBAEzCmC,EAAUC,2BAAiB,QAASrB,EAAmBsB,oBAAkBC,eACzEC,EAAyBC,iCAAuBzB,EAAmBoB,GAEzE,OACE/G,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKG,EAASG,cAAcoD,gBAC/BlI,gBAAA,OAAKwD,UAAU,+BACZoB,EAAkB5E,gBAAA,QAAMwD,UAAU,WACtByE,GACKjI,gBAAA,QAAMwD,UAAU,QACrBwE,IAIbpD,GACA5E,gBAAA,OAAKwD,UAAU,oCACHxD,gBAAA,QAAMwD,UAAU,0CACXmB,EAASG,cAAcqD,aAEtCnI,gBAACqH,SAAM,CACL3N,KAAK,OAAO8J,UAAU,mCACtBP,QAASgC,EAAqBN,IAC7BiC,IAIP5G,gBAACqH,SAAM9C,OAAAC,OAAA,CAAChB,UAAU,4BAA+B2D,EAAsB,CAC/DlE,QAASyB,EAAmBC,EAAUC,KAC3CA,EAAkBiC,EAAyBC,KAkIDgB,CAAiBnD,EAAUc,EAAWC,EAAeC,EAAkBE,GAE5GL,EAAeb,EAAUc,EAAWC,EAAeN,EAAiBO,EAAkBC,EAAkBC,OAsBhHuC,EAAkBA,CAACZ,EAAsBve,EAAiDwe,EAA8ChC,EACrHC,EAA4C2C,EAC5CC,EAA2BC,EAA2B5C,EAAsCC,EAC5FC,KACvB,MAAQ2C,OAAO,gBAAEpD,EAAe,kBAAEqD,IAAwBxf,EAC1D,OAAIqf,EACMtI,2BAAA,KACLsI,GAMDb,EACKxe,EAAMyf,sBACXnB,EAAwBC,EAAaC,EAAWhC,EAAWC,EAAeN,EAAiBO,EAAkBC,EAAkBC,GAE/H7F,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAM0f,kBACbpB,EAAwBC,EAAaC,EAAWhC,EAAWC,EAAeN,EAAiBO,EAAkBC,EAAkBC,GAC/H+C,EAAwBpB,EAAaiB,IAKpCF,EACJvI,gBAAA,OAAKwD,UAAU,wBACbxD,gBAAA,OAAKwD,UAAU,iBACZva,EAAMuf,MAAMK,YAGf7I,2BAAA,KACDqI,IA0CDS,EAA6BA,CAACnE,EAA+Bc,EAA2BsD,EAAelD,KAAkC,IAAAmD,EAC7I,MAAMpE,EAAwC,QAAzBoE,EAAGrE,EAASG,qBAAa,IAAAkE,OAAA,EAAtBA,EAAwBpE,iBAC1C,WAAEqE,EAAU,aAAEC,EAAY,kBAAEC,GAAsB1D,EACxD,IAAI2D,EAKJ,OAHAA,EAAaxE,EAAkBqE,EAAaC,EAC5CE,EAAazE,EAASvT,MAAQuT,EAASvT,KAAK4U,SAASW,eAAiBd,EAAwBsD,EAAoBC,EAGhHpJ,2BAAA,KACEA,gBAAA,OAAKwD,UAAU,+CACbxD,gBAAA,KACEwD,UAAW,+CAA+C4F,EAAW5gB,cAAc6gB,QAAQ,IAAK,cAClGrJ,gBAAA,KAAGwD,UAAW,+CAA+C4F,EAAW5gB,cAAc6gB,QAAQ,IAAK,MAChGD,GA5CuBE,EAAC3E,EAA+Bc,EAA2BsD,KAAiB,IAAAQ,EAAAC,EAAAC,EAC5G,MAAM7E,EAAwC,QAAzB2E,EAAG5E,EAASG,qBAAa,IAAAyE,OAAA,EAAtBA,EAAwB3E,iBAC1C,UAAE8E,EAAS,WAAEC,GAAelE,EAG5BmE,EAAa,IAAIb,KADRA,EADc,EACSY,EAAaD,KAEnD,OACE1J,2BAAA,KACEA,gBAACqG,OAAI,CAAC7C,UAAU,qDACboB,EAAkB5E,gBAAA,KAAGwD,UAAU,wDACP,QAD6DgG,EACnF7E,EAASG,qBAAa,IAAA0E,OAAA,EAAtBA,EAAwBK,eACxB,KACsB,QADlBJ,EACJ9E,EAASG,qBAAa,IAAA2E,OAAA,EAAtBA,EAAwBtB,aACpB,KACPnI,gBAAA,KAAGwD,UAAU,wDACVoG,MA+BFN,CAA0B3E,EAAUc,EAAWsD,MAkMlDH,EAA0BA,CAACpB,EAAsBiB,IAChDA,EAIHzI,gBAAA,OAAKwD,UAAW,4BAA2BgE,EAAc,sCAAwC,KAC9FiB,GAJI,KAuDIqB,UAzCuD7gB,IAAmD,IAAA8gB,EAAAC,EAAAC,EAAAC,EAAAC,EAEvH,MACO3C,EAAa4C,GAAkBpK,YAAwB,GACxDqK,EAzCiBC,EAAC9C,EACA+C,EACAC,IAExBxK,gBAAA,OAAKwD,UAAU,iCACbxD,gBAAA,SAAOwD,UAAU,gDACfxD,gBAAA,QAAMwD,UAAW,8BAA+BgH,GAEhDxK,gBAAA,SAAOiD,QAASsH,EAAuBpR,KAAK,WAAWqK,UAAU,gCACjExD,gBAAA,OACEwD,UAAW,yDAAwDgE,EAAc,UAAY,iBA+B3E8C,CAAiB9C,EAFX+C,IAAMH,GAAgB5C,GAEyB,cAEvEiD,EACJzK,gBAAA,MAAIwD,UAAU,qBACXva,EAAMwc,UAAUiF,UACjB1K,gBAAA,QAAMwD,UAAU,iCACL,KAAK/S,OAAiB,QAAXsZ,EAAC9gB,EAAMc,YAAI,IAAAggB,OAAA,EAAVA,EAAYY,qBALL,KAKoC,QAAVX,EAAA/gB,EAAMc,YAAI,IAAAigB,OAAA,EAAVA,EAAYW,kBAAyC,QAAU,YAI3H,OACE3K,gBAAA,MAAAuE,OAAAC,OAAA,CAAKhB,UAAWva,EAAMua,UAAWI,GAAI3a,EAAM2a,IAAQ3a,EAAM2hB,uBAAuB3hB,IAC7EwhB,EACDzK,gBAAA,OAAKwD,UAAU,4BACe,QADWyG,EACtChhB,EAAM4hB,6BAAqB,IAAAZ,OAAA,EAA3BA,EAA6Ba,YAhEI7hB,IAEtC+W,gBAACqG,OAAI,CAAC7C,UAAU,sCAEbva,EAAM8hB,uBA8DNC,CAAiC/hB,KACtB,QAAXihB,EAACjhB,EAAMc,YAAI,IAAAmgB,GAAVA,EAAYe,iBAAkBhiB,EAAMiiB,mBAzGlBC,EAyGuDliB,EAAMiiB,iBAvGnFlL,2BAAA,KACEA,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK2G,EAAWC,yBAClBD,EAAWE,iBACZrL,gBAACqG,OAAI,CAAC7C,UAAU,oCACb2H,EAAWG,qBAEbH,EAAWI,mBAkGbtiB,EAAMyf,sBA7MgB8C,EAAChE,EAAsBve,EAAiDwc,IAC/Fxc,EAAMwiB,gBAAkBC,kBAAgBC,YAAY1iB,EAAMwiB,gBAE1DzL,gBAAA,OAAKwD,UAAU,wBACZva,EAAMwiB,eAAe/D,IAAIkE,IAAY,IAAAC,EAAAC,EACpC,OAAQ9L,gBAAA,OAAK6H,IAAK+D,EAAU,GAAGtF,WAAY9C,UAAU,+BAClDsF,EAA2B8C,EAAU,GAAInG,EAtBlCd,KAClB,IAAIoH,EAAY,EAMhB,OAJAA,EAAYpH,EAASqH,OAAO,CAACjD,EAAOkD,KAAQ,IAAAC,EAAAC,EAC1C,OAAOpD,GAAqC,QAAhCmD,EAAa,QAAbC,EAAIF,EAAK7a,YAAI,IAAA+a,OAAA,EAATA,EAAWnG,SAASoG,gBAAQ,IAAAF,IAFrB,OAKlBH,GAewDM,CAAWT,GACZ,QADsBC,EACxE5iB,EAAMC,QAAQ2B,cAAcyhB,eAAela,eAAO,IAAAyZ,OAAA,EAAlDA,EAAoDU,uBACrDnE,EAAgBZ,EAAave,EAAO2iB,EAAW3iB,EAAMwc,UAAWxc,EAAMyc,cACrEzc,EAAMof,iBAAkBpf,EAAMqf,kBAAmBrf,EAAMujB,eACvDvjB,EAAM0c,iBAAkB1c,EAAMyf,sBAAyE,QAApDoD,EAAE7iB,EAAMC,QAAQ2B,cAAcyhB,eAAela,eAAO,IAAA0Z,OAAA,EAAlDA,EAAoDS,2BAM7GtjB,EAAMujB,eACVxM,gBAAA,OAAKwD,UAAU,wBACbxD,gBAAA,OAAKwD,UAAU,iBACZva,EAAMuf,MAAMK,YAGf7I,2BAAA,KACD/W,EAAMof,kBAsLwBmD,CAAqBhE,EAAave,EAAOA,EAAMwc,WAAa2C,EAAgBZ,EAAave,EAAOA,EAAM2iB,UACnI3iB,EAAMwc,UAAWxc,EAAMyc,cAAezc,EAAMof,iBAAkBpf,EAAMqf,kBAAmBrf,EAAMujB,gBAC9FvjB,EAAMwjB,qBACLzM,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAMyjB,qBACbrC,EACDrK,gBAACqG,OAAI,CAAC7C,UAAU,4BACbva,EAAMwjB,oBACI,QAAVtC,EAAAlhB,EAAMc,YAAI,IAAAogB,GAAVA,EAAYc,eA/JS0B,EAACC,EAAuDC,EACvD5jB,IAC5B2jB,EAKH5M,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKqI,GACPD,EAAoBE,SACpBF,EAAoBG,SACpBH,EAAoBI,QACpBJ,EAAoB9B,aARvB7hB,EAAMC,QAAQU,UAAUuc,MAAM,uDACvB,MA2J+BwG,CAC5B1jB,EAAMgkB,wBAAyBhkB,EAAMikB,kBAAmBjkB,GAzItCkkB,EAACC,EAAmDP,EACnD5jB,IAC1BmkB,EAKHpN,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKqI,GACPO,EAAkBC,SAElBD,EAAkBE,SAClBF,EAAkBG,YAClBH,EAAkBI,IAClBJ,EAAkBtC,aAVrB7hB,EAAMC,QAAQU,UAAUuc,MAAM,qDACvB,MAqIoEgH,CACjElkB,EAAM4hB,sBAAuB5hB,EAAMikB,kBAAmBjkB,IApL1CwkB,EAqLIxkB,EAAMykB,qBApLfhC,kBAAgBC,YAAY8B,EAAUE,QAIvD3N,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKiJ,EAAUG,SACjBH,EAAUI,OACVJ,EAAUE,QALN,MAmFyB1kB,KAAkD,IAAA6kB,EACpF,OACE9N,gBAACqG,OAAI,CAAC7C,UAAU,+BACH,QAAVsK,EAAA7kB,EAAMc,YAAI,IAAA+jB,GAAVA,EAAY7C,eAAiB,KAAOhiB,EAAM8kB,UAC3C/N,gBAACqG,OAAI,CAAC7C,UAAU,uCAEbva,EAAM8hB,uBAER9hB,EAAM+kB,+BA0FFC,CAA2BhlB,IAE/BA,EAAMyc,eAzLa+H,MAiEAtC,I,scC7bnB,MAAM+C,EAA2DnV,IAAA,IAAC,sBACrEoV,EAAqB,QACrBC,EAAO,UACPC,EAAS,YACTC,EAAW,YACXC,EAAW,MACXxF,EAAK,OACLyF,EAAM,mBACNC,GACH1V,EAAA,OACGiH,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK2J,GACLG,EACAF,EACAC,EACAE,EACAxF,EACAyF,EACAC,IAIIC,EAAsDC,IAAA,IAAC,cAChEC,EAAa,QACbC,EAAO,MACP9F,EAAK,WACL+F,EAAU,QACVC,EAAO,aACPC,GACHL,EAAA,OACG3O,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKoK,GACLC,EACA9F,EACA+F,EACAC,EACAC,IAIIC,EAAsCC,IAAA,IAAC,WAAEC,EAAU,SAAEC,EAAQ,gBAAEC,EAAe,WAAEC,GAAYJ,EAAA,OACrGlP,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK2K,GACLG,GACGtP,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK6K,GACLC,EAAW5H,IAAI6H,GACZvP,gBAACA,WAAc,CAAC6H,IAAK0H,EAAUne,KAAKme,UAAUC,QAASD,EAAUA,eAOxEE,EAAwCC,IAAA,IAAC,YAAEC,EAAW,OAAEC,GAAQF,EAAA,OACzE1P,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKmL,GACLC,EAAOlI,IAAI,CAACmI,EAAOlI,IAChB3H,gBAACiP,EAAiB1K,OAAAC,OAAA,CAACqD,IAAKF,GAAWkI,OAKlCC,EAAwCC,IAAA,IAAC,YAAEC,EAAW,QAAEnB,EAAO,gBAAEoB,EAAe,aAAEC,GAAcH,EAAA,OACzG/P,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKwL,GACLnB,EACAoB,EACAC,IAIIC,EAA+CC,IAAA,IAAC,gBACzDC,EAAe,gBACfC,EAAe,OACfV,EAAM,iBACNW,EAAgB,qBAChBC,GACHJ,EAAA,OACGpQ,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK6L,GACNrQ,gBAAA,WACKsQ,EAAgBG,UAAYzQ,gBAACA,WAAc,KAAEsQ,EAAgBG,UAC9DzQ,gBAAA,WAAMsQ,GAAmBtQ,gBAACkO,EAA2B3J,OAAAC,OAAA,GAAK8L,MAE7DV,GAAU5P,gBAACyP,EAAkBlL,OAAAC,OAAA,GAAKoL,IAClCY,EACAD,IAIIG,EAAoCC,IAAA,IAAC,UAAEC,EAAS,YAAEC,GAAaF,EAAA,OACxE3Q,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKoM,GACLC,GAAeA,EAAYnJ,IAAI,CAACoJ,EAAYnJ,IAAU3H,gBAACmQ,EAAqB5L,OAAAC,OAAA,CAACqD,IAAKF,GAAWmJ,OAoCvFC,UAhC4CC,IAAA,IAAC,kBACxDC,EAAiB,OACjBpD,EAAM,MACNqD,EAAK,QACLC,EAAO,aACPC,EAAY,mBACZC,EAAkB,KAClBC,EAAI,MACJC,EAAK,WACLC,GACHR,EAAA,OACGhR,gBAACyR,SAAMlN,OAAAC,OAAA,GAAKyM,GACPpD,GAAU7N,gBAAC8P,EAAkBvL,OAAAC,OAAA,GAAKqJ,IAClCsD,EACAD,GACGlR,2BAAA,KACKkR,EACAG,GAGRD,GACGpR,gBAACqG,OAAI,CAAC7C,UAAU,6CACX4N,EACAC,GAGRC,GAAQtR,gBAAC0Q,EAAgBnM,OAAAC,OAAA,GAAK8M,IAC9BC,EACAC,GAAcA,K,wECnGRE,IAnBuD3Y,IAQjE,IARkE,GACnE6K,EAAE,UACFJ,EAAS,KACT5J,EAAI,UACJ+X,EAAS,SACTC,EAAQ,iBACRjM,EAAgB,QAChB1C,GACHlK,EACG,MAAMgO,EAAUC,2BAAiB,QAASrB,EAAmB/L,GACvDiY,EAAazK,iCAAuBzB,EAAmBoB,GAE7D,OACI/G,gBAACqH,SAAM9C,OAAAC,OAAA,CAACZ,GAAIA,EAAIJ,UAAWA,EAAS,aAAcmO,EAAWC,SAAUA,EAAU3O,QAASA,GAAa4O,GAClGjY,K,8uBCMN,MAAMkY,UAAiB9R,gBAY1BhX,YAAmBC,GACfI,MAAMJ,GAZO,KAAA8oB,kBAAuCC,6BACpD7oB,KAAKF,MAAMC,QAAQkF,QAAQ6jB,kBAC3B9oB,KAAKF,MAAMipB,aACX/oB,KAAKF,MAAMW,WAEP,sBAAsBilB,GAC1B,OAAKA,GAAYA,EAAQjV,OAAQuY,mBAAiBC,mBAAmBvD,EAAQjV,MAGtEoG,gBAACqS,UAAO,CAACC,WAAYzD,EAAQ0D,IAAK3Y,KAAMiV,EAAQjV,KAAM4J,UAAU,wBAF5D,KAQRgP,SAAM,IAAAC,EACT,MAAM,UAAEhN,GAActc,KAAKF,OACrB,MAAEypB,EAAK,UAAElP,GAAcra,KAAKF,MAAMO,OAClCmpB,EAAgE,CAClEJ,IAAKK,sBACLpP,UAAsC,QAA7BiP,EAAEtpB,KAAKF,MAAMO,OAAOga,iBAAS,IAAAiP,IAAI,GAC1CI,iBAAkBpN,EAAUqN,gBAC5BC,iBAAkBtN,EAAUuN,YAC5BC,SAAU9pB,KAAKF,MAAM2a,GACrB+B,iBAAkBxc,KAAK4oB,kBACvBmB,UAAU,GAGRC,EAAS9oB,IAAA,GACRlB,KAAKF,OAAK,IACbypB,MAAOZ,EAASsB,eAAeV,GAC/BW,kCAAmCV,EACnCW,kBAAmB,CACff,IAAK,KACL/O,UAAW,gBACX9J,KAAM,YAEV6Z,kBAAmB,CAAE/P,UAAWgQ,IAAW,eAAgBhQ,IAC3DiQ,gBAAiB,CAAEjQ,UAAW,yBAC9BkQ,MAAOvqB,KAAKF,MAAMuf,MAAMmL,UAE5B,OAAOxqB,KAAKF,MAAM2qB,WAAWT,IAItBrB,a,kCCpFf,gBAoBe+B,IANqD9a,IAAA,IAAC,GAAE6K,EAAE,MAAEkQ,EAAK,UAAEtQ,EAAS,KAAE5J,GAAMb,EAAA,OAC/FiH,gBAAA,SAAO4D,GAAOA,EAAH,SAAeJ,UAAcA,EAAH,SAAsBuQ,QAASD,GAC/Dla,K,2JCmBT,MAAM8K,EAAqBA,CAACC,EAA+BC,IAA6B,KAAK,IAAAC,EACrE,QAAtBA,EAAAF,EAASG,qBAAa,IAAAD,GAAtBA,EAAwBE,UAAUC,aAAaJ,IAQ3CK,EAAwBN,GAAkC,KAAK,IAAAO,EAC7C,QAAtBA,EAAAP,EAASG,qBAAa,IAAAI,GAAtBA,EAAwBH,UAAUC,aAAY,IAoG1CG,EAAwBA,CAACC,EAAkCC,EAAiBC,EAAoBC,IAC/FH,EAGEpF,eAAmBoF,EAAgB,GAA0B,CAAEC,UAASC,aAAYC,qBAFlF,KAiBLC,EAAiBA,CAACb,EAA+Bc,EAA2BC,EAC1DN,EAA8C4O,EAA4CrO,EAC1FC,EAA4BC,KAA+C,IAAAC,EAAAC,EACjG,MAAMV,GAAuB,QAAbS,EAAAnB,EAASvT,YAAI,IAAA0U,OAAA,EAAbA,EAAeE,SAASC,UAAW,GAC7CC,EAAoC,QAAhBH,EAAGpB,EAASvT,YAAI,IAAA2U,GAAS,QAATA,EAAbA,EAAeza,eAAO,IAAAya,OAAA,EAAtBA,EAAwB/S,KACrD,OAAI2R,EAASwB,QAAUV,EAAUW,uBAE7BpG,gBAACqG,OAAI,CAAC7C,UAAU,0BACb2B,EAAsBC,EAAiBC,EAASV,EAAS2B,WAAaJ,GACtEvB,EAAS4B,cACT5B,EAAS6B,QAKZZ,EAEA5F,gBAACqG,OAAI,CAAC7C,UAAU,sCAjEQiD,EAAC9B,EAA+Bc,EAA2BC,EAC1DC,EAAsCE,KAAsD,IAAAa,EAEzH,IAAK/B,EAASG,gBAAkBY,IAA8B,QAAbgB,EAAA/B,EAASvT,YAAI,IAAAsV,OAAA,EAAbA,EAAeV,SAASW,gBAAiBd,EACxF,OAAO,KAGT,MAAM,uBAAEe,EAAsB,uBAAEC,EAAsB,oBAAEC,GAAwBrB,EAE1Eb,EAAkBD,EAASG,cAAcF,gBAEzCmC,EAAUC,2BAAiB,QAASrB,EAAmBsB,oBAAkBC,eACzEC,EAAyBC,iCAAuBzB,EAAmBoB,GAEzE,OACE/G,2BAAA,KACG4E,EACC5E,gBAACqH,SAAM,CAAC3N,KAAK,OAAO8J,UAAU,qCAAqCP,QAASgC,EAAqBN,IAC9FiC,GACS,KACd5G,gBAACqH,SAAM9C,OAAAC,OAAA,CACL9K,KAAK,OAAO8J,UAAU,sCAAyC2D,EAAsB,CACrFlE,QAASyB,EAAmBC,EAAUC,KACrCA,EAAkBiC,EAAyBC,KA2C3CL,CAAsB9B,EAAUc,EAAWC,EAAeC,EAAkBE,GAC5EV,EAAsBC,EAAiBC,EAASV,EAAS2B,WAAaJ,GACtEvB,EAAS2C,mBACT3C,EAAS4B,cACT5B,EAAS6B,QAKZ7B,EAAS2C,mBAETtH,gBAACqG,OAAI,CAAC7C,UAAU,gCACb2B,EAAsBC,EAAiBC,EAASV,EAAS2B,WAAaJ,GACtEvB,EAAS2C,mBACT3C,EAAS4B,cACT5B,EAAS6B,QAMdxG,gBAACqG,OAAI,CAAC7C,UAAU,0BACb2B,EAAsBC,EAAiBC,EAASV,EAAS2B,WAAaJ,GACtEvB,EAAS4B,cACT5B,EAAS6B,SAeVe,EAA0BA,CAAC0M,EAA8BzM,EAAsBC,EAAkChC,EACtFC,EAA4CN,EAA8C4O,EAA4CrO,EAAsCC,EAC5KC,IAE7B4B,EAAUC,IAAI,CAAC/C,EAAUgD,KAAS,IAAAuM,EAChC,MAAMtM,EAAYD,EACZwM,GAAsB,QAAbD,EAAAvP,EAASvT,YAAI,IAAA8iB,GAAS,QAATA,EAAbA,EAAe5oB,eAAO,IAAA4oB,OAAA,EAAtBA,EAAwBnoB,SAAU,GACjD,OACEiU,gBAAA,OAAKwD,UAAW,wBAAuBgE,EAAc,4BAA8B,IAAMK,IAAKD,GAC3FjD,EAASqB,SACVhG,gBAAA,QAAMwD,UAAU,mCACDoC,EAAmB,KA/KnBkC,EAACnD,EAA+Bc,EAA2BC,EAC1DC,EAAsCE,KAAsD,IAAAkC,EAEpH,IAAKpD,EAASG,gBAAkBY,IAA8B,QAAbqC,EAAApD,EAASvT,YAAI,IAAA2W,OAAA,EAAbA,EAAe/B,SAASW,gBAAiBd,EACxF,OAAO,KAGT,MAAM,uBACJgB,EAAsB,yBACtBmB,EAAwB,oBACxBlB,EAAmB,8BACnBmB,EAA6B,uBAC7BrB,GACEnB,EAEEb,EAAkBD,EAASG,cAAcF,gBAEzCmC,EAAUC,2BAAiB,QAASrB,EAAmBsB,oBAAkBC,eACzEC,EAAyBC,iCAAuBzB,EAAmBoB,GAEzE,OACE/G,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKG,EAASG,cAAcoD,gBAC/BlI,gBAAA,OAAKwD,UAAU,+BACZoB,EAAkB5E,gBAAA,QAAMwD,UAAU,WACtByE,GACKjI,gBAAA,QAAMwD,UAAU,QACrBwE,IAIbpD,GACA5E,gBAAA,OAAKwD,UAAU,oCACHxD,gBAAA,QAAMwD,UAAU,0CACXmB,EAASG,cAAcqD,aAEtCnI,gBAACqH,SAAM,CACL3N,KAAK,OAAO8J,UAAU,mCACtBP,QAASgC,EAAqBN,IAC7BiC,IAIP5G,gBAACqH,SAAM9C,OAAAC,OAAA,CAAChB,UAAU,4BAA+B2D,EAAsB,CAC/DlE,QAASyB,EAAmBC,EAAUC,KAC3CA,EAAkBiC,EAAyBC,KAmIDgB,CAAiBnD,EAAUc,EAAWC,EAAeC,EAAkBE,GAE5GL,EAAeb,EAAUc,EAAWC,EAAeN,EAAiB4O,EAAerO,EAAkBC,EAAkBC,IAG1HuO,EAAoB5M,EAAawM,EAAeC,EAAMI,OAAOC,GAAKA,EAAEvoB,SAAWooB,OAoBpF/L,EAAkBA,CAAC6L,EAA8BzM,EAAsBve,EAAiDwe,EAA8ChC,EACnJC,EAA4C2C,EAC5CC,EAA2BC,EAA2BgM,EACtDC,EAAiD7O,EAAsCC,EACvFC,KACvB,MAAQ2C,OAAO,gBAAEpD,EAAe,kBAAEqD,EAAiB,cAAEuL,IAAoB/qB,EACzE,OAAIqf,EACMtI,2BAAA,KACLsI,GAODkM,EACKvrB,EAAMyf,sBACX1I,2BAAA,KACGuU,EACAhN,EAAwB0M,EAAOzM,EAA2BgN,EAAe/O,EAAWC,EAAeN,EAAiB4O,EAAerO,EAAkBC,EAAkBC,GACvK0O,EACA3L,EAAwBpB,EAAaiB,IAGxCzI,2BAAA,KACAA,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAM0f,kBAIb4L,EACAhN,EAAwB0M,EAAOzM,EAA2BgN,EAAe/O,EAAWC,EAAeN,EAAiB4O,EAAerO,EAAkBC,EAAkBC,GACvK0O,EACA3L,EAAwBpB,EAAaiB,KAMpCF,EACJvI,gBAAA,OAAKwD,UAAU,wBACbxD,gBAAA,OAAKwD,UAAU,iBACZva,EAAMuf,MAAMK,YAGf7I,2BAAA,KACDqI,IA0CDS,EAA6BA,CAACnE,EAA+Bc,EAA2BsD,EAAelD,KAAkC,IAAAmD,EAC7I,MAAMpE,EAAwC,QAAzBoE,EAAGrE,EAASG,qBAAa,IAAAkE,OAAA,EAAtBA,EAAwBpE,iBAC1C,WAAEqE,EAAU,aAAEC,EAAY,kBAAEC,GAAsB1D,EACxD,IAAI2D,EAKJ,OAHAA,EAAaxE,EAAkBqE,EAAaC,EAC5CE,EAAazE,EAASvT,MAAQuT,EAASvT,KAAK4U,SAASW,eAAiBd,EAAwBsD,EAAoBC,EAGhHpJ,2BAAA,KACEA,gBAAA,OAAKwD,UAAU,+CACbxD,gBAAA,KACEwD,UAAW,+CAA+C4F,EAAW5gB,cAAc6gB,QAAQ,IAAK,cAClGrJ,gBAAA,KAAGwD,UAAW,+CAA+C4F,EAAW5gB,cAAc6gB,QAAQ,IAAK,MAChGD,GA5CuBE,EAAC3E,EAA+Bc,EAA2BsD,KAAiB,IAAAQ,EAAAC,EAAAC,EAC5G,MAAM7E,EAAwC,QAAzB2E,EAAG5E,EAASG,qBAAa,IAAAyE,OAAA,EAAtBA,EAAwB3E,iBAC1C,UAAE8E,EAAS,WAAEC,GAAelE,EAG5BmE,EAAa,IAAIb,KADRA,EADc,EACSY,EAAaD,KAEnD,OACE1J,2BAAA,KACEA,gBAACqG,OAAI,CAAC7C,UAAU,qDACboB,EAAkB5E,gBAAA,KAAGwD,UAAU,wDACP,QAD6DgG,EACnF7E,EAASG,qBAAa,IAAA0E,OAAA,EAAtBA,EAAwBK,eACxB,KACsB,QADlBJ,EACJ9E,EAASG,qBAAa,IAAA2E,OAAA,EAAtBA,EAAwBtB,aACpB,KACPnI,gBAAA,KAAGwD,UAAU,wDACVoG,MA+BFN,CAA0B3E,EAAUc,EAAWsD,MAsQlDqL,EAAsBA,CAAC5M,EAAsBwM,EAAgCC,IAE5ED,EAKHhU,gBAAA,OAAKwD,UAAW,IAAGgE,EAAc,uCAAyC,KACvExH,eAAmBgU,EAAc,GAA0B,CAAEC,WALzD,KAcLrL,EAA0BA,CAACpB,EAAsBiB,IAChDA,EAKHzI,gBAAA,OAAKwD,UAAW,4BAA2BgE,EAAc,sCAAwC,KAC9FiB,GALI,KAyJIqB,UA1IuD7gB,IAAmD,IAAA8gB,EAAAC,EAAAC,EAAAE,EAAAsK,EAEvH,MACOjN,EAAa4C,GAAkBpK,YAAwB,IACvDgU,EAAeU,GAAoB1U,gBAAkDzX,GACtF8hB,EA5DiBC,EAAC9C,EACA+C,EACAC,IAExBxK,gBAAA,OAAKwD,UAAU,iCACbxD,gBAAA,SAAOwD,UAAU,gDACfxD,gBAAA,QAAMwD,UAAW,8BAA+BgH,GAEhDxK,gBAAA,SAAOiD,QAASsH,EAAuBpR,KAAK,WAAWqK,UAAU,gCACjExD,gBAAA,OACEwD,UAAW,yDAAwDgE,EAAc,UAAY,iBAkD3E8C,CAAiB9C,EAHX+C,IAAMH,GAAgB5C,GAGyB,cAGvEiD,EACJzK,gBAAA,MAAIwD,UAAU,qBACXva,EAAMwc,UAAUiF,UACjB1K,gBAAA,QAAMwD,UAAU,iCACL,KAAK/S,OAAiB,QAAXsZ,EAAC9gB,EAAMc,YAAI,IAAAggB,OAAA,EAAVA,EAAYY,qBANL,KAMoC,QAAVX,EAAA/gB,EAAMc,YAAI,IAAAigB,OAAA,EAAVA,EAAYW,kBAAyC,QAAU,YAerHgK,EAAa1rB,EAAMO,OAAOmrB,YApBE,GAsBzBH,EAAeI,GAAoB5U,WACtC/W,EAAM2iB,WAAa3iB,EAAM2iB,UAAUtjB,QAAUqsB,EAAa1rB,EAAM2iB,UAAUiJ,MAAM,EAAGF,GAAc1rB,EAAM2iB,YAEpGkJ,EAAgBC,GAAqB/U,WAAuB,IAC5DgV,EAAsBC,GAA2BjV,YAAwB,GAoC9EkV,EAAcC,IAChB,GAAIA,EAAO,EACP,OAGAlsB,EAAM2iB,WAAauJ,GAAQlsB,EAAM2iB,UAAUtjB,OAASqsB,IACpDQ,EAAOlsB,EAAM2iB,UAAUtjB,OAASqsB,EAAa,GAGjD,IAAIS,EAAOD,EAAOR,EAClB,GAAI1rB,EAAM2iB,WAAa3iB,EAAM2iB,UAAUtjB,QAAU8sB,EAAM,KAAAC,EACnDN,EAAkBI,GAClB,IAAIN,EAAuB,QAAlBQ,EAAGpsB,EAAM2iB,iBAAS,IAAAyJ,OAAA,EAAfA,EAAiBR,MAAMO,GACnCR,EAAiBC,EAAMvsB,QAAUqsB,EAAaE,EAAMA,MAAM,EAAGF,GAAcE,KAIjF7U,YAAgB,KACTgU,GAvEkBsB,WAA0B,IAAApL,EACjD,MAAMqL,GAAoB,QAAVrL,EAAAjhB,EAAMc,YAAI,IAAAmgB,GAAgB,QAAhBA,EAAVA,EAAYngB,KAAKyB,iBAAS,IAAA0e,OAAA,EAA1BA,EAA4BxC,IAAI8N,GAAMA,EAAGzpB,UAAY,GAChEwpB,EAAQjtB,QAGbmtB,YAAsB,CAAEC,cAAezsB,EAAMC,QAAQ2B,eAAiB0qB,GACnEhd,KAAK0b,IACJS,EAAiBT,GAAS,OAiEvB0B,IACN,CAAC1sB,EAAMmI,OAEV4O,YAAgB,KACdkV,EAAWJ,IACV7rB,EAAM2iB,WAET,MACMgK,EA9NiBC,EACvBZ,EACAxP,IAEAzF,gBAAA,OAAKwD,UAAW,kCACZxD,gBAAA,UACIwD,UAAU,sCACVkP,MAAOjN,EAAUqQ,oBACjB7S,QAASA,IAAMgS,GAAwB,IAEtCxP,EAAUqQ,sBAoNKD,CAAiBZ,EAAyBhsB,EAAMwc,WAExE,IAAI8O,EACFvU,gBAAC+V,IAAc,CACXC,SAjDWA,KACfd,EAAWJ,EAAiB,IAiDxBmB,SA3CSA,KACbf,EAAWJ,EAAiB,IA2CxBI,WAAYA,EACZgB,YAAapB,EACbqB,SAAUltB,EAAM2iB,UAAYwK,KAAKC,KAAKptB,EAAM2iB,UAAUtjB,OAASqsB,GAAc,EAC7E2B,KAAMrtB,EAAMwc,UAAU8Q,eACtBtd,KAAMhQ,EAAMwc,UAAU+Q,iBAI5B,OACExW,gBAAA,MAAAuE,OAAAC,OAAA,CAAKhB,UAAWva,EAAMua,UAAWI,GAAI3a,EAAM2a,IAAQ3a,EAAM2hB,uBAAuB3hB,IAC7EwhB,EACDzK,gBAAA,OAAKwD,UAAU,4BACe,QADWyG,EACtChhB,EAAM4hB,6BAAqB,IAAAZ,OAAA,EAA3BA,EAA6Ba,YAlLI7hB,IAEtC+W,gBAACqG,OAAI,CAAC7C,UAAU,sCACbva,EAAMwtB,2BACNxtB,EAAM8hB,uBAgLNC,CAAiC/hB,KACtB,QAAXkhB,EAAClhB,EAAMc,YAAI,IAAAogB,GAAVA,EAAYc,iBAAkBhiB,EAAMiiB,mBA5RlBC,EA4RuDliB,EAAMiiB,iBA1RnFlL,2BAAA,KACEA,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK2G,EAAWC,yBAClBD,EAAWE,iBACZrL,gBAACqG,OAAI,CAAC7C,UAAU,oCACb2H,EAAWG,qBAEbH,EAAWI,mBAqRbtiB,EAAMyf,sBAnYgB8C,EAACwI,EAAsCxM,EAAsBve,EAAiDwc,EACzI8O,EACAC,IACIvrB,EAAMwiB,gBAAkBC,kBAAgBC,YAAY1iB,EAAMwiB,gBAE1DzL,gBAAA,OAAKwD,UAAU,wBACZva,EAAMwiB,eAAe/D,IAAIkE,IAAY,IAAAC,EAAAC,EACpC,OAAQ9L,gBAAA,OAAK6H,IAAK+D,EAAU,GAAGtF,WAAY9C,UAAU,+BAClDsF,EAA2B8C,EAAU,GAAInG,EAxBlCd,KAClB,IAAIoH,EAAY,EAMhB,OAJAA,EAAYpH,EAASqH,OAAO,CAACjD,EAAOkD,KAAQ,IAAAC,EAAAC,EAC1C,OAAOpD,GAAqC,QAAhCmD,EAAa,QAAbC,EAAIF,EAAK7a,YAAI,IAAA+a,OAAA,EAATA,EAAWnG,SAASoG,gBAAQ,IAAAF,IAFrB,OAKlBH,GAiBwDM,CAAWT,GACZ,QADsBC,EACxE5iB,EAAMC,QAAQ2B,cAAcyhB,eAAela,eAAO,IAAAyZ,OAAA,EAAlDA,EAAoDU,uBACrDnE,EAAgB4L,EAAexM,EAAave,EAAO2iB,EAAW3iB,EAAMwc,UAAWxc,EAAMyc,cACpFzc,EAAMof,iBAAkBpf,EAAMqf,kBAAmBrf,EAAMujB,eACvD+H,EACAC,EAAcvrB,EAAM0c,iBAAkB1c,EAAMyf,sBAAyE,QAApDoD,EAAE7iB,EAAMC,QAAQ2B,cAAcyhB,eAAela,eAAO,IAAA0Z,OAAA,EAAlDA,EAAoDS,2BAM3HtjB,EAAMujB,eACVxM,gBAAA,OAAKwD,UAAU,wBACbxD,gBAAA,OAAKwD,UAAU,iBACZva,EAAMuf,MAAMK,YAGf7I,2BAAA,KACD/W,EAAMof,kBAyWwBmD,CAAqBwI,GAAiB,GAAIxM,EAAave,EAAOA,EAAMwc,UAAW8O,EAAYC,GAAiBpM,EAAgB4L,GAAiB,GAAIxM,EAAave,EAAOA,EAAM2iB,UACxM3iB,EAAMwc,UAAWxc,EAAMyc,cAAezc,EAAMof,iBAAkBpf,EAAMqf,kBAAmBrf,EAAMujB,eAAgB+H,EAAYC,GAC1HvrB,EAAMwjB,qBACLzM,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAMyjB,qBACbrC,EACDrK,gBAACqG,OAAI,CAAC7C,UAAU,4BACbva,EAAMwjB,oBACI,QAAVgI,EAAAxrB,EAAMc,YAAI,IAAA0qB,GAAVA,EAAYxJ,eAlVS0B,EAACC,EAAuDC,EACvD5jB,IAC5B2jB,EAKH5M,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKqI,GACPD,EAAoBE,SACpBF,EAAoBG,SACpBH,EAAoBI,QACpBJ,EAAoB9B,aARvB7hB,EAAMC,QAAQU,UAAUuc,MAAM,uDACvB,MA8U+BwG,CAC5B1jB,EAAMgkB,wBAAyBhkB,EAAMikB,kBAAmBjkB,GA5TtCkkB,EAACC,EAAmDP,EACnD5jB,IAC1BmkB,EAKHpN,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKqI,GACPO,EAAkBC,SAElBD,EAAkBE,SAClBF,EAAkBG,YAClBH,EAAkBI,IAClBJ,EAAkBtC,aAVrB7hB,EAAMC,QAAQU,UAAUuc,MAAM,qDACvB,MAwToEgH,CACjElkB,EAAM4hB,sBAAuB5hB,EAAMikB,kBAAmBjkB,IAvW1CwkB,EAwWIxkB,EAAMykB,qBAvWfhC,kBAAgBC,YAAY8B,EAAUE,QAIvD3N,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKiJ,EAAUG,SACjBH,EAAUI,OACVJ,EAAUE,QALN,MAmFwBM,EAAChlB,EAAuB2sB,KAA6D,IAAA9H,EACtH,OACE9N,gBAACqG,OAAI,CAAC7C,UAAU,+BACH,QAAVsK,EAAA7kB,EAAMc,YAAI,IAAA+jB,GAAVA,EAAY7C,eAAiB,KAAOhiB,EAAM8kB,UAC3C/N,gBAACqG,OAAI,CAAC7C,UAAU,uCACbva,EAAMwtB,2BACNxtB,EAAM8hB,uBAER9hB,EAAM+kB,6BACN4H,IA4QI3H,CAA2BhlB,EAAO2sB,IAEtC3sB,EAAMyc,cAzOiBgR,EAC5BC,EACA1B,EACA2B,EACA5B,EACAvP,IAmBIzF,gBAAC6W,QAAK,CAACrT,UAAW,YAAyBsT,OAAQ9B,EAAsB4B,OAAQA,GAC7E5W,gBAAC+W,cAAW,CAACvT,UAAW,2BAAwCiC,EAAUuR,iBAC1EhX,gBAACiX,YAAS,CAACzT,UAAW,yBAAsCiC,EAAUyR,kBACtElX,gBAACmX,cAAW,KAdhBnX,gBAAA,OAAKwD,UAAW,qBACZxD,gBAACqH,SAAM,CAACpE,QAAS0T,EAAiBnT,UAAW,2BACxCiC,EAAUqQ,qBAEf9V,gBAACqH,SAAM,CAACpE,QAASA,IAAMgS,GAAwB,GAAQzR,UAAW,6BAC7DiC,EAAU2R,0BAwNlBV,CAlGqBC,KACpB,MAAM5sB,EAAOd,EAAMc,KACb6hB,EAAY7hB,aAAI,EAAJA,EAAMA,KAAKyB,UAE7B,GAAIzB,GAAQ6hB,EAAW,CACnB,IAAIyL,EAAM,CAAEC,YAAaC,SACzB3L,EAAUlE,IAAI8P,GAAMA,EAAEhI,OAAS6H,EAAIC,YAAYvvB,KAAKyvB,EAAEhI,QAAU,MAChEzlB,EAAK0tB,gBAAgBJ,GACrBpC,GAAwB,GACxBlrB,EAAK2tB,YAAY,MAyFiBzC,EAtC7B2B,IAAM3B,GAAyBD,GAsC+BA,EAAsB/rB,EAAMwc,YA7WjFgI,MAiEAtC,I,8HC3dpB,MAAOwM,UAAuB3X,gBACzBwS,SAEH,MAAM,WAAEoF,GAAezuB,KAAKF,MAC5B,OACI+W,gBAACyR,SAAMlN,OAAAC,OAAA,GAAKoT,GACPzuB,KAAK0uB,eAAe1uB,KAAKF,QAK9B4uB,eAAe5uB,GAEnB,MAAM,QAAE4lB,EAAO,iBAAEiJ,EAAgB,KAAEC,EAAI,SAAEC,EAAQ,MAAEC,EAAK,KAAEre,EAAI,aAAEse,GAAiBjvB,EACjF,OAAI4lB,EACQ7O,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKsT,GACb,IACD9X,gBAACqG,OAAI,CAACkM,IAAI,IAAI/O,UAAU,iCAAgC,cAAa,SACpEqL,EACA,KAEEkJ,GAAQE,EAEXjY,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKuT,GACLC,EACAC,GAGFF,EACCG,EAGRlY,2BAAA,KACKpG,EACAqe,IAMFN,a,qICvCR,MAAMQ,EAA6ClvB,IACtD,MAAM,MAAEypB,EAAK,MAAEgB,EAAK,kBAAEH,EAAiB,gBAAEE,EAAe,kBAAEH,EAAiB,kCAAED,GAAsCpqB,EACnH,OACI+W,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK+O,GACNvT,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKiP,GAAkBf,GAC5B1S,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK6O,GACLK,EAAMhM,IAAI,CAAC0Q,EAAqBzQ,KAC7B,MAAM0Q,EAAW,mBAAmB1Q,EACpC,OACI3H,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK8O,EAAiB,CAAEzL,IAAKwQ,IAC7BD,QASdD,a,kCClCf,qCAyBeG,IAV0Dvf,IAA8C,IAA7C,GAAE6K,EAAE,UAAEJ,EAAS,KAAErK,EAAO,OAAM,QAAE5H,GAASwH,EAC/G,MAAMwf,EAAiB,GAAG/U,MAAcrK,UAExC,OACI6G,gBAAA,OAAK4D,GAAIA,EAAIJ,UAAWgQ,IAAW+E,EAAgB,QAAYpf,EAAH,SAAiBO,KAAK,QAAO,YAAW,YAAW,cAAa,QACxHsG,gBAAA,KAAGwD,UAAc+U,EAAH,SAA2BhnB,M,gHCJrD,MAAMinB,EAAkCC,IACpC,MAAMC,EAAgCD,GAA4C,gBAElF,OAAOzY,IAAAC,cAAA,OAAKuD,UAAU,0CAA0CkV,IAYvDC,EAA+BA,CACxCF,EACAG,EACA3vB,EACA4vB,EACAC,IAEO7vB,EAAM8vB,oBACT/Y,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAM+vB,iBACXR,EAA+BC,GAChCzY,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAMgwB,YACXJ,GAAwBC,GACvBD,GACE5vB,EAAM8vB,oBAAoBnf,KAAK8N,IAAI9N,GACxBA,KAKvBoG,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAM+vB,iBACXR,EAA+BC,GAChCzY,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAMgwB,YACZjZ,IAAAC,cAAA,MAAIuD,UAAU,+CAA+CoV,K,gBCpC7E,MA4BaM,EAAmCjwB,GAExC+W,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,wDACZxD,IAAAC,cAAA,OAAKuD,UAAU,iEA/BgBva,KACvC,MAAMkwB,EAA8ClwB,EAAMO,OAAO2vB,oBACjE,IAAKA,IAAwBA,EAAoBjW,IAC7C,OAAO,KAQX,OACIlD,IAAAC,cAACmZ,IAAK,CACFC,QAASF,EAAoBE,QAC7B7V,UAAU,uDACV8V,aAAcrwB,EAAMC,QAAQkF,QAAQkrB,aACpCpW,IAAKiW,EAAoBjW,IACzBoJ,eAAgBrjB,EAAMC,QAAQkF,QAC9BmrB,cAbc,CAClBC,UAAU,EACVC,UAAW,CACPC,GAAI,CAAEC,EAAG,IAAKC,EAAG,IAAKC,EAAG,6BAuBuDC,CAAkC7wB,IAClH+W,IAAAC,cAAA,OAAKuD,UAAU,6DACXxD,IAAAC,cAAA,OAAKuD,UAAU,wDAAwDva,EAAMwc,UAAUsU,8BACvF/Z,IAAAC,cAAA,OAAKuD,UAAU,qDAAqDva,EAAMwc,UAAUuU,yBCbvFC,EAAgBA,CACzBC,EACAC,EACAC,EACApZ,EACAqZ,EACApxB,EACAqxB,EACAC,KAEA,MAAMC,EACFxa,IAAAC,cAACoH,SAAM,CACH7D,UAAU,+BAA8B,aAC5Bva,EAAMwc,UAAUgV,mBAC5BxX,QAASsX,EACTphB,KAAK,WAIb,OAAO6H,EACHhB,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK2V,GACLD,EAAKQ,UACN1a,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK4V,GACLF,EAAKS,MACLL,GA5CSM,EAACP,EAA+BE,IAElDva,IAAAC,cAACoH,SAAM,CAAC7D,UAAU,iCAAiCkP,MAAO2H,GAAyB,QAASpX,QAASsX,GAChGF,GAAyB,SAyCLO,CAAkBP,EAAuBE,GACxDD,EAAwD,KAAzCpB,EAAgCjwB,KAIzD+W,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK2V,GACNna,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK4V,GACLF,EAAKW,UACLX,EAAKS,MACLL,GAAgBE,KCzD3BM,EAAiCC,IACnC,MAAMrC,EAAgCqC,GAAoC,WAE1E,OAAO/a,IAAAC,cAAA,OAAKuD,UAAU,yCAAyCkV,IActDsC,EAA8BA,CACvCC,EACAC,EACAH,EACAnC,EACAuC,EACAtC,EACAC,IAEOqC,EACHnb,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKyW,GACLH,EAA8BC,GAC/B/a,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK0W,GACLrC,GAAwBC,GACvBD,GACEsC,EAAmBvhB,KAAK8N,IAAI9N,GACjBA,KAKvBoG,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKyW,GACLH,EAA8BC,GAC/B/a,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAK0W,GACNlb,IAAAC,cAAA,MAAIuD,UAAU,8CAA8CoV,KCtCtEwC,EAAiCC,IACnC,MAAMC,EAA+BD,GAAwD,WAE7F,OAAOrb,IAAAC,cAAA,OAAKuD,UAAU,yCAAyC8X,IA4B7DC,EAAgCtyB,GAE9B+W,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,sDACZxD,IAAAC,cAAA,OAAKuD,UAAU,oDAvBgBva,KACvC,MAAMkwB,EAA8ClwB,EAAMO,OAAO2vB,oBACjE,OAAKA,GAAwBA,EAAoBjW,IAI7ClD,IAAAC,cAACmZ,IAAK,CACFC,QAASF,EAAoBE,QAC7B7V,UAAU,uDACV8V,aAAcrwB,EAAMC,QAAQkF,QAAQkrB,aACpCpW,IAAKiW,EAAoBjW,MAPtB,MAoBgE4W,CAAkC7wB,IACrG+W,IAAAC,cAAA,OAAKuD,UAAU,4DAA4Dva,EAAMwc,UAAU+V,4BAC3Fxb,IAAAC,cAAA,OAAKuD,UAAU,gEACVva,EAAMwc,UAAUgW,+BAgBpBC,EAA8BA,CACvCC,EACAC,EACA3yB,EACA4yB,EACAhD,EACAC,IAMO+C,EACH7b,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKmX,GACLP,EAA8BnyB,EAAMwc,UAAUqW,0BAC/C9b,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKoX,GACL/C,GAAwBC,GACvBD,GACEgD,EAAmBE,MAAMrU,IAAI,CAACuE,EAAMtE,KAAS,IAAAqU,EACzC,OACIhc,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKyH,EAAKgQ,UAAS,CAAEpU,IAAY,QAATmU,EAAE/P,EAAKrI,UAAE,IAAAoY,IAAIrU,IACtC3H,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKyH,EAAKiQ,UACVjQ,EAAKkQ,UACLlQ,EAAKrS,KACLqS,EAAKmQ,YAQlCpc,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKmX,GACLP,EAA8BnyB,EAAMwc,UAAUqW,0BAC/C9b,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKoX,GACN5b,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GA3Ba,CAC1B+N,IAAK,KACL/O,UAAW,0BAyBmB+X,EAA6BtyB,MCnF7DozB,EAAcA,CAACC,EAAiCC,KAClD,MAAMC,EAAmB,IAAIC,OAAOF,EAAWE,OAAO,MAChDC,EAA8BJ,EAC9BK,iBAAOL,EAAyBE,GAChC,cAAcA,EAEpB,OAAOxc,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,iCAAiCkZ,IAgM7CE,UAvLX3zB,IAEA,MAAM,OACF4zB,EAAM,qBACNC,EAAoB,yBACpBC,EAAwB,WACxBR,EAAU,YACVS,EAAW,eACXC,EAAc,eACdC,EAAc,UACdC,EAAS,UACTC,EAAS,KACTlD,EAAI,mBACJmD,EAAkB,mBAClBC,EAAkB,WAClBC,EAAU,YACVC,EAAW,MACXC,EAAK,QACLv0B,EAAO,qBACP2vB,EAAoB,cACpBC,EACA/T,WAAW,0BAAE2Y,IACbz0B,GAEE,wBAAEqzB,EAAuB,0BAAEqB,EAAyB,gBAAE5C,EAAe,aAAEnC,EAAY,sBAAEyB,GAA0BpxB,EAAMwc,WAEpH+W,EAAkBoB,GAAuB3jB,sBACzC4jB,EAAcC,GAAe7jB,oBAAkB,GAEtDuI,oBAAU,KACNob,EAAoBrB,IACrB,CAACA,IAKJ,MAAMhC,EAAcA,KAChBqD,EAAoB,IAEpB,MACMG,EADY90B,EAAMixB,KACSS,MAC3BqD,EAAyBD,EAAeE,IAA0CC,QAEpFF,IACAA,EAAsBzuB,MAAQ,IAGlCwuB,EAAexuB,MAAQ,GACvBtG,EAAMszB,WAAa,GACnBtzB,EAAMu0B,YAAYtkB,OAAS,IAGzBilB,EAAmBC,sBAAY,KACjC,MAAMC,EAAwF,OAAzErd,mBAAS,CAAEC,QAASC,cAAYC,QAASjY,QAASA,EAAQkF,UAC/E0vB,EAAYO,IACb,CAACn1B,IAEJsZ,oBAAU,KACN/U,OAAO6wB,iBAAiB,SAAUH,GAClCA,KACD,CAACA,IAEJ,MAAMI,EAAWvd,mBAAS,CAAEC,QAASC,cAAYC,QAASjY,QAASA,EAAQkF,UAErEiwB,EAA4B,OAAbE,GAAkC,OAAbA,EAE1CvB,EAAYxZ,UAAa2O,mBAAiBqM,cAAchC,GAE/CQ,EAAYxZ,UAAf,QADGwZ,EAAYxZ,UAAf,QAEN,MAAM8W,GAAyBnI,mBAAiBqM,cAAchC,GAE9D,OACIxc,IAAAC,cAACwR,SAAMlN,OAAAC,OAAA,GAAKqY,GACPY,EACAxD,EACGC,EACAqD,EACAC,EACAK,EACAxD,EACApxB,EACAqxB,EACAC,IAEF8D,GACEre,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKwY,GACJ7K,mBAAiBqM,cAAchC,GAG7B,GAFAxc,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKsY,GAAuBC,GAInC5K,mBAAiBqM,cAAchC,GAyC7B,KAxCAxc,IAAAC,cAAAD,IAAAye,SAAA,KACIze,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,2CACZxD,IAAAC,cAACoH,SAAM,CACH7D,UAAU,+BAA8B,aAC5Bva,EAAMwc,UAAUgV,mBAC5BxX,QAASsX,EACTmE,OAAQhB,EACRvkB,KAAK,WAERkjB,EAAYC,EAAyBC,IAE1Cvc,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,sCACZxD,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,4BACXmV,EACGgF,EACA/E,EACA3vB,EACA4vB,EACAC,GAEHkC,EACGiC,EACAE,EACApC,EACAnC,EACAyE,EACAxE,EACAC,IAGP4C,EACGwB,EACAE,EACAn0B,EACAq0B,EACAzE,EACAC,MAOvBuF,GAAgBp1B,EAAM01B,sBACnB3e,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKwY,GACJ7K,mBAAiBqM,cAAchC,GAG7B,GAFAxc,IAAAC,cAACoG,OAAI9B,OAAAC,OAAA,GAAKsY,GAAuBC,GAInC5K,mBAAiBqM,cAAchC,GAmC7B,KAlCAxc,IAAAC,cAAAD,IAAAye,SAAA,KACIze,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,2CACV0W,EAA8BQ,UAC/B2B,EAAYC,EAAyBC,IAE1Cvc,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,sCACZxD,IAAAC,cAACoG,OAAI,CAAC7C,UAAU,4BACXmV,EACGgF,EACA/E,EACA3vB,EACA4vB,EACAC,GAEHkC,EACGiC,EACAE,EACApC,EACAnC,EACAyE,EACAxE,EACAC,IAGP4C,EACGwB,EACAE,EACAn0B,EACAq0B,EACAzE,EACAC,S,+ECnMpC,MAAM8F,EAA4D7lB,IAA4C,IAA3C,QAAE8lB,EAAO,MAAEpB,EAAK,aAAEqB,EAAY,MAAEnE,GAAO5hB,EACtG,OACIiH,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKqa,GACLpB,EACAqB,EACAnE,IAuCPoE,EAAkE7P,IAAwC,IAAvC,MAAE8P,EAAK,UAAEC,EAAS,KAAEC,EAAI,QAAE3tB,GAAS2d,EACxG,OACIlP,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKwa,GACNhf,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKya,GACLC,EACA3tB,KAqBF4tB,UAfwDl2B,IACnE,MAAM,mBAAEm2B,EAAkB,UAAEC,EAAS,QAAElO,EAAO,mBAAEmO,EAAkB,YAAEC,EAAW,QAAE1Q,EAAO,+BAAE2Q,GAAmCv2B,EAE7H,OACI+W,gBAACyR,SAAMlN,OAAAC,OAAA,GAAK4a,GACPC,EAAUI,eAAiBzf,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK8a,IACrCD,EAAUI,eAAiBzf,gBAAC+e,EAAyBxa,OAAAC,OAAA,GAAK2M,IAC3DnR,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK+a,GACL1Q,EArD+CF,KAQ3D,IAR4D,aAC7D+Q,EAAY,MACZ3D,EAAK,aACL+C,EAAY,eACZa,EAAc,QACdC,EAAO,yBACPC,EAAwB,gCACxBC,GACHnR,EACG,OACI3O,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKkb,GACL3D,GACGA,EAAMrU,IAAKuE,GAEAjM,gBAAC4e,EAAsBra,OAAAC,OAAA,GAAKyH,KAE1C6S,GACGA,EAAapX,IAAI,CAACvB,EAAwBwB,IAC/B3H,gBAACA,WAAc,CAAC6H,IAAKF,GAAQxB,IAE5CnG,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKmb,GACLC,GACGA,EAAQlY,IAAI,CAACqY,EAAyBpY,IAC3B3H,gBAACA,WAAc,CAAC6H,IAAKF,GAAQoY,KAIhD/f,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKqb,GACN7f,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKsb,OA0BTE,CAAaR,O,kCC/E9B,2DA4BO,MAAMzJ,EAAkDhd,IAOlD,IAPmD,SAC5Did,EAAQ,SACRC,EAAQ,WACRf,EAAU,YACVgB,EAAW,SACXC,EAAQ,KACRG,EAAI,KACJrd,GAAKF,EAGL,OAEAiH,IAAAC,cAAA,OAAKuD,UAAU,wBACZ2S,EAAW,GACVnW,IAAAC,cAAAD,IAAAye,SAAA,KAEIze,IAAAC,cAAAD,IAAAye,SAAA,KACEze,IAAAC,cAAA,UAAQ2R,SAAUsE,EAAc,IAThB,EASiC1S,UAAW,gDAA+C0S,EAAc,IATzG,EAS2H,eAAiB,IAAMjT,QAASA,IAAMiS,EAAW,IAC3L,KAEDlV,IAAAC,cAAA,UAAQ2R,SAAUsE,EAAc,IAZhB,EAYiC1S,UAAW,+CAA8C0S,EAAc,IAZxG,EAY0H,eAAiB,IAAMjT,QAASgT,GACvKK,IAIPtW,IAAAC,cAAA,OAAKuD,UAAU,+BACbxD,IAAAC,cAAA,QAAMuD,UAAU,oCACX0S,EAAc,E,MAAMC,IAIzBnW,IAAAC,cAAAD,IAAAye,SAAA,KACEze,IAAAC,cAAA,UAAQ2R,SAAUsE,EAAc,IAAMC,EAAU3S,UAAW,+CAA8C0S,EAAc,IAAMC,EAAW,eAAiB,IAAMlT,QAAS+S,GACrK/c,GAEH+G,IAAAC,cAAA,UAAQ2R,SAAUsE,EAAc,IAAMC,EAAU3S,UAAW,+CAA8C0S,EAAc,IAAMC,EAAW,eAAiB,IAAMlT,QAASA,IAAMiS,EAAWiB,EAAS,IAC/L,GAAGA,Q,4JCnBb,MAAM8J,EAAoElnB,IAK5E,IAL6E,iBAC9EmnB,EAAgB,iBAChBC,EAAgB,wBAChBC,EAAuB,mBACvB3R,GACH1V,EACG,OACIiH,gBAAA,OAAKwD,UAAU,gFACXxD,gBAAA,MAAIwD,UAAU,iDAAiD0c,GAC9DzR,GACGzO,gBAAA,KAAGwD,UAAU,8DACR,GAAG4c,KAA2B3R,KAGtCA,GAAsB0R,GACnBngB,gBAAA,QAAMwD,UAAU,iDACZxD,gBAACqgB,IAAM,CAAC9wB,MAAOkf,EAAoB6R,KAAM,QCzChDC,EAAsDxnB,IAAqB,IAApB,aAAE+lB,GAAc/lB,EAChF,OAAK+lB,EAKD9e,gBAAA,QAAMwD,UAAU,iDACZxD,gBAAA,QAAMwD,UAAU,2BAA0B,cAAa,SACvDxD,gBAAA,YAAO8e,IANJ,M,ykBCmDf,MAAM0B,UAAyBxgB,YAC3BhX,YAAmBC,GACfI,MAAMJ,GA0DH,KAAAw3B,sBAAwBnL,UAC3B,MAAMoL,EAAoBjwB,OAAOkwB,SAASx3B,KAAKF,MAAMC,QAAQkF,QAAQwyB,MAAOF,UAAW,IACjFjS,EAA6BtlB,KAAKF,MAAMC,QAAQkF,QAAQwyB,MAAOnS,mBAC/DoS,EAAwB13B,KAAKF,MAAMC,QAAQkF,QAAQwyB,MAAOC,cAE1DC,EAAkFC,aAAyB,EAAzBA,EAA2BrZ,IAC/GsZ,IAAoC,IAAAC,EAChC,MAAO,CACHC,QAA6D,QAAtDD,EAAED,EAAkCE,QAAQC,kBAAU,IAAAF,IAAI,GACjE1xB,MAAOyxB,EAAkCzxB,SAI/C6xB,EAA4C,GAClD,IAAKC,mBAAiBC,kBAAkBR,GACpC,IAAK,MAAMS,KAAyBT,EAChCM,EAAsBr5B,KAAK,CACvBy5B,IAAKD,EAAsBL,QAC3BO,MAAO,CACHC,YAAaH,EAAsBhyB,SAKnD,UACUoyB,yBAAuBC,2BACzB,CAAElM,cAAevsB,KAAKF,MAAMC,QAAQ2B,cAAeg3B,oBAAqB,IACxEnB,EACAG,EACApS,EACA2S,GAEN,MAAOjb,GAGL,OAFAhd,KAAK24B,SAAS,CAAEC,mBAAoB54B,KAAKF,MAAMwc,UAAUuc,oBAAqBC,aAAa,IAC3F94B,KAAKF,MAAMW,UAAUuc,MAAMA,GACpB+b,QAAQC,UAGnB,OADAh5B,KAAK24B,SAAS,CAAEC,mBAAoB,GAAIE,aAAa,IAC9CC,QAAQC,WAOF,KAAAC,QAAU9M,UAA0B,IAAAzjB,EAAAwwB,EAAAC,EAAAC,EACjD,MAAM7B,EAAoBjwB,OAAOkwB,SAAoD,QAA5C9uB,EAAiC,QAAjCwwB,EAACl5B,KAAKF,MAAMC,QAAQkF,QAAQwyB,aAAK,IAAAyB,OAAA,EAAhCA,EAAkC3B,iBAAS,IAAA7uB,IAAI,GAAI,IACvF4c,EAAyE,QAAvD6T,EAAuBn5B,KAAKF,MAAMC,QAAQkF,QAAQwyB,aAAK,IAAA0B,OAAA,EAAhCA,EAAkC7T,mBAC3EoS,EAAoE,QAAvD0B,EAAuBp5B,KAAKF,MAAMC,QAAQkF,QAAQwyB,aAAK,IAAA2B,OAAA,EAAhCA,EAAkC1B,cAC5E,GAAIpwB,OAAOF,MAAMmwB,KAAejS,IAAuBoS,EAEnD,OAAI13B,KAAKF,MAAMC,QAAQkF,QAAQo0B,OAAOC,WAE3Bt5B,KAAKF,MAAMC,QAAQkF,QAAQo0B,OAAOE,UACzCv5B,KAAK24B,SAAS,CAAEC,mBAAoB54B,KAAKF,MAAMwc,UAAUkd,uCAEzDx5B,KAAK24B,SAAS,CAAEC,mBAAoB54B,KAAKF,MAAMwc,UAAUuc,sBAE7D74B,KAAKF,MAAMC,QAAQU,UAAUuc,MACzB,8JAPO+b,QAAQC,UAavB,MAAM,0BAAES,GAA8Bz5B,KAAKF,MAAMO,OAKjD,IAH0CkiB,kBAAgBC,YAAYiX,GAGvC,CAC3B,UACUjB,yBAAuBC,2BACzB,CAAElM,cAAevsB,KAAKF,MAAMC,QAAQ2B,cAAeg3B,oBAAqB,IACxEnB,EACAG,EACApS,GAEN,MAAOtI,GAGL,OAFAhd,KAAK24B,SAAS,CAAEC,mBAAoB54B,KAAKF,MAAMwc,UAAUuc,oBAAqBC,aAAa,IAC3F94B,KAAKF,MAAMW,UAAUuc,MAAMA,GACpB+b,QAAQC,UAEnBh5B,KAAK24B,SAAS,CAAEC,mBAAoB,GAAIE,aAAa,IAEzD,OAAOC,QAAQC,WA9Ifh5B,KAAK05B,MAAQ,CACTd,mBAAoB,GACpBE,aAAa,GAIdzP,SAAM,IAAAsQ,EACT,MAAMC,EAA2D,KAAlC55B,KAAK05B,MAAMd,mBAEpC5O,EAAS9oB,IAAA,GACRlB,KAAKF,OAAK,IACb+5B,YAAahjB,gBAACugB,EAAqB,CAACzB,aAAc31B,KAAK05B,MAAMd,qBAC7DkB,sBACIjjB,gBAACigB,EAA4B,CACzBC,iBAAkB/2B,KAAKF,MAAMwc,UAAUyd,wBACvC/C,iBAAkBh3B,KAAKF,MAAMO,OAAO22B,iBACpCC,wBAAyBj3B,KAAKF,MAAMwc,UAAU0d,oBAC9C1U,mBAAoD,QAAlCqU,EAAE35B,KAAKF,MAAMC,QAAQkF,QAAQwyB,aAAK,IAAAkC,OAAA,EAAhCA,EAAkCrU,qBAG9DgS,sBAAuBt3B,KAAKs3B,sBAC5B2C,4BAA6Bj6B,KAAKF,MAAMO,OAAOo5B,0BACzCz5B,KAAKF,MAAMO,OAAOo5B,0BAA0Blb,IAAI,KACrC,UAEXnf,EACN82B,UAAW,CACP0D,gBACAd,YAAa94B,KAAK05B,MAAMZ,eAIhC,OAAO94B,KAAKF,MAAM2qB,WAAWT,GAG1BkQ,sBAAsBC,EAA4DC,GACrF,OACIp6B,KAAKF,MAAMO,OAAOg6B,+BAAiCF,EAAU95B,OAAOg6B,8BACpEr6B,KAAKF,MAAMO,OAAO02B,mBAAqBoD,EAAU95B,OAAO02B,mBAIxD/2B,KAAK05B,MAAMd,qBAAuBwB,EAAUxB,oBAAsB54B,KAAK05B,MAAMZ,cAAgBsB,EAAUtB,aAMxG,gCACG94B,KAAKi5B,WAiGJ5B,a,+GC5Lf,MAAM9b,EAAqBA,CAACC,EAA+BC,IAA6B,KAAK,IAAAC,EACnE,QAAtBA,EAAAF,EAASG,qBAAa,IAAAD,GAAtBA,EAAwBE,UAAUC,aAAaJ,IAQ7CK,EAAwBN,GAAkC,KAAK,IAAAO,EAC3C,QAAtBA,EAAAP,EAASG,qBAAa,IAAAI,GAAtBA,EAAwBH,UAAUC,aAAY,IA0H5CQ,EAAiBA,CACnBb,EACAc,EACAC,EACAC,EACAC,EACAC,IAEIlB,EAASwB,QAAUV,EAAUW,uBAEzBpG,gBAACqG,OAAI,CAAC7C,UAAU,0BACXmB,EAAS4B,cACT5B,EAAS6B,QAKlBZ,EAEI5F,gBAACqG,OAAI,CAAC7C,UAAU,sCAnEEiD,EAC1B9B,EACAc,EACAC,EACAC,EACAE,KACoB,IAAAa,EAEpB,IAAK/B,EAASG,gBAAkBY,IAA8B,QAAbgB,EAAA/B,EAASvT,YAAI,IAAAsV,OAAA,EAAbA,EAAeV,SAASW,gBAAiBd,EACtF,OAAO,KAGX,MAAM,uBAAEe,EAAsB,uBAAEC,EAAsB,oBAAEC,GAAwBrB,EAE1Eb,EAAkBD,EAASG,cAAcF,gBAEzCmC,EAAUC,2BAAiB,QAASrB,EAAmBsB,oBAAkBC,eACzEC,EAAyBC,iCAAuBzB,EAAmBoB,GAEzE,OACI/G,2BAAA,KACK4E,EACG5E,gBAACqH,SAAM,CAAC3N,KAAK,OAAO8J,UAAU,qCAAqCP,QAASgC,EAAqBN,IAC5FiC,GAEL,KACJ5G,gBAACqH,SAAM9C,OAAAC,OAAA,CACH9K,KAAK,OACL8J,UAAU,sCACN2D,EAAsB,CAC1BlE,QAASyB,EAAmBC,EAAUC,KAErCA,EAAkBiC,EAAyBC,KAoC3CL,CAAsB9B,EAAUc,EAAWC,EAAeC,EAAkBE,GAC5ElB,EAAS2C,mBACT3C,EAAS4B,cACT5B,EAAS6B,QAKlB7B,EAAS2C,mBAELtH,gBAACqG,OAAI,CAAC7C,UAAU,gCACXmB,EAAS2C,mBACT3C,EAAS4B,cACT5B,EAAS6B,QAMlBxG,gBAACqG,OAAI,CAAC7C,UAAU,0BACXmB,EAAS4B,cACT5B,EAAS6B,QAehBe,EAA0BA,CAC5BE,EACAhC,EACAC,EACAC,EACAC,EACAC,IAEO4B,EAAUC,IAAI,CAAC/C,EAAUgD,KAC5B,MAAMC,EAAYD,EAClB,OACI3H,gBAAA,OAAKwD,UAAU,sBAAsBqE,IAAKD,GACrCjD,EAASqB,SACVhG,gBAAA,QAAMwD,UAAU,mCACXoC,EACK,KArLDkC,EACrBnD,EACAc,EACAC,EACAC,EACAE,KACoB,IAAAkC,EAEpB,IAAKpD,EAASG,gBAAkBY,IAA8B,QAAbqC,EAAApD,EAASvT,YAAI,IAAA2W,OAAA,EAAbA,EAAe/B,SAASW,gBAAiBd,EACtF,OAAO,KAGX,MAAM,uBACFgB,EAAsB,yBACtBmB,EAAwB,oBACxBlB,EAAmB,8BACnBmB,EAA6B,uBAC7BrB,GACAnB,EAEEb,EAAkBD,EAASG,cAAcF,gBAEzCmC,EAAUC,2BAAiB,QAASrB,EAAmBsB,oBAAkBC,eACzEC,EAAyBC,iCAAuBzB,EAAmBoB,GAEzE,OACI/G,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKG,EAASG,cAAcoD,gBAC7BlI,gBAAA,OAAKwD,UAAU,+BACVoB,EACG5E,gBAAA,QAAMwD,UAAU,WAAWyE,GAE3BjI,gBAAA,QAAMwD,UAAU,QAAQwE,IAG/BpD,GACG5E,gBAAA,OAAKwD,UAAU,oCACXxD,gBAAA,QAAMwD,UAAU,0CAA0CmB,EAASG,cAAcqD,aACjFnI,gBAACqH,SAAM,CAAC3N,KAAK,OAAO8J,UAAU,mCAAmCP,QAASgC,EAAqBN,IAC1FiC,IAIb5G,gBAACqH,SAAM9C,OAAAC,OAAA,CACHhB,UAAU,4BACN2D,EAAsB,CAC1BlE,QAASyB,EAAmBC,EAAUC,KAErCA,EAAkBiC,EAAyBC,KAuIlCgB,CAAiBnD,EAAUc,EAAWC,EAAeC,EAAkBE,GAC5EL,EAAeb,EAAUc,EAAWC,EAAeC,EAAkBC,EAAkBC,OAqBtGuC,EAAkBA,CACpBnf,EACAwe,EACAhC,EACAC,EACA2C,EACAC,EACAC,EACA5C,EACAC,EACAC,IAEIyC,EACOtI,2BAAA,KAAGsI,GAKVb,EACOxe,EAAMyf,sBACTnB,EAAwBE,EAAWhC,EAAWC,EAAeC,EAAkBC,EAAkBC,GAEjG7F,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAM0f,kBACXpB,EAAwBE,EAAWhC,EAAWC,EAAeC,EAAkBC,EAAkBC,IAKvG0C,EACHvI,gBAAA,OAAKwD,UAAU,wBACXxD,gBAAA,OAAKwD,UAAU,iBAAiBva,EAAMuf,MAAMK,YAGhD7I,2BAAA,KAAGqI,GAyCLS,EAA6BA,CAC/BnE,EACAc,EACAsD,EACAlD,KACA,IAAAmD,EACA,MAAMpE,EAAwC,QAAzBoE,EAAGrE,EAASG,qBAAa,IAAAkE,OAAA,EAAtBA,EAAwBpE,iBAC1C,WAAEqE,EAAU,aAAEC,EAAY,kBAAEC,EAAiB,uBAAEsa,GAA2Bhe,EAChF,IAAI2D,EASJ,OAPAA,EAAaxE,EAAkBqE,EAAaC,EACxCvE,EAASvT,MAAQuT,EAASvT,KAAK4U,SAAS0d,cACxCta,EAAaqa,EACLtR,mBAAiBqM,cAAc3Y,KACvCuD,EAAazE,EAASvT,MAAQuT,EAASvT,KAAK4U,SAASW,eAAiBd,EAAwBsD,EAAoBC,GAIlHpJ,2BAAA,KACIA,gBAAA,OAAKwD,UAAU,+CACXxD,gBAAA,KAAGwD,UAAW,+CAA+C4F,EAAW5gB,cAAc6gB,QAAQ,IAAK,cACnGrJ,gBAAA,KAAGwD,UAAW,+CAA+C4F,EAAW5gB,cAAc6gB,QAAQ,IAAK,MAASD,GAnD1FE,EAAC3E,EAA+Bc,EAA2BsD,KAAiB,IAAAQ,EAAAC,EAAAC,EAC1G,MAAM7E,EAAwC,QAAzB2E,EAAG5E,EAASG,qBAAa,IAAAyE,OAAA,EAAtBA,EAAwB3E,iBAC1C,UAAE8E,EAAS,WAAEC,GAAelE,EAG5BmE,EAAa,IAAIb,KADRA,EADc,EACSY,EAAaD,KAEnD,OACI1J,2BAAA,KACIA,gBAACqG,OAAI,CAAC7C,UAAU,qDACXoB,EACG5E,gBAAA,KAAGwD,UAAU,wDACc,QADwCgG,EAC9D7E,EAASG,qBAAa,IAAA0E,OAAA,EAAtBA,EAAwBK,eACxB,KACsB,QADlBJ,EACJ9E,EAASG,qBAAa,IAAA2E,OAAA,EAAtBA,EAAwBtB,aAE7B,KACJnI,gBAAA,KAAGwD,UAAU,wDAAwDoG,MAoCpEN,CAA0B3E,EAAUc,EAAWsD,MA+OjDe,UA7CuD7gB,IAAmD,IAAA8gB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAsK,EACrH,MACMhK,EACFzK,gBAAA,MAAIwD,UAAU,qBACTva,EAAMwc,UAAUiF,UACjB1K,gBAAA,QAAMwD,UAAU,iCACX,KAAK/S,OAAiB,QAAXsZ,EAAC9gB,EAAMc,YAAI,IAAAggB,OAAA,EAAVA,EAAYY,qBALH,KAKkC,QAAVX,EAAA/gB,EAAMc,YAAI,IAAAigB,OAAA,EAAVA,EAAYW,kBAAyC,QAAU,YAIzH,OACI3K,gBAAA,MAAAuE,OAAAC,OAAA,CAAKhB,UAAWva,EAAMua,UAAWI,GAAI3a,EAAM2a,IAAQ3a,EAAM2hB,uBAAuB3hB,IAC3EA,EAAM06B,qCACNlZ,EACDzK,gBAAA,OAAKwD,UAAU,4BAAuD,QAA7ByG,EAAEhhB,EAAM4hB,6BAAqB,IAAAZ,OAAA,EAA3BA,EAA6Ba,YA5B1C7hB,IAElC+W,gBAACqG,OAAI,CAAC7C,UAAU,sCACXva,EAAMwtB,2BACNxtB,EAAM8hB,uBAyBNC,CAAiC/hB,KACtB,QAAXihB,EAACjhB,EAAMc,YAAI,IAAAmgB,GAAVA,EAAYe,iBAAkBhiB,EAAMiiB,mBApExBC,EAoE6DliB,EAAMiiB,iBAlErFlL,2BAAA,KACIA,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK2G,EAAWC,yBAChBD,EAAWE,iBACZrL,gBAACqG,OAAI,CAAC7C,UAAU,oCAAoC2H,EAAWG,qBAC9DH,EAAWI,mBA+DL,QAAVpB,EAAAlhB,EAAMc,YAAI,IAAAogB,GAAVA,EAAYc,gBAAkBhiB,EAAMyf,sBAzLpB8C,EAACviB,EAAiDwc,IACvExc,EAAMwiB,gBAAkBC,kBAAgBC,YAAY1iB,EAAMwiB,gBAEtDzL,gBAAA,OAAKwD,UAAU,wBACVva,EAAMwiB,eAAe/D,IAAIkE,IAAY,IAAAC,EAAAC,EAClC,OACI9L,gBAAA,OAAK6H,IAAK+D,EAAU,GAAGtF,WAAY9C,UAAU,+BACxCsF,EACG8C,EAAU,GACVnG,EAxBZd,KAChB,IAAIoH,EAAY,EAKhB,OAHAA,EAAYpH,EAASqH,OAAO,CAACjD,EAAOkD,KAAQ,IAAAC,EAAAC,EACxC,OAAOpD,GAAqC,QAAhCmD,EAAa,QAAbC,EAAIF,EAAK7a,YAAI,IAAA+a,OAAA,EAATA,EAAWnG,SAASoG,gBAAQ,IAAAF,IAFvB,OAIlBH,GAmBqBM,CAAWT,GACuC,QAD7BC,EACrB5iB,EAAMC,QAAQ2B,cAAcyhB,eAAela,eAAO,IAAAyZ,OAAA,EAAlDA,EAAoDU,uBAEvDnE,EACGnf,EACA2iB,EACA3iB,EAAMwc,UACNxc,EAAMyc,cACNzc,EAAMof,iBACNpf,EAAMqf,kBACNrf,EAAMujB,eACNvjB,EAAM0c,iBACN1c,EAAMyf,sBAC4C,QADvBoD,EAC3B7iB,EAAMC,QAAQ2B,cAAcyhB,eAAela,eAAO,IAAA0Z,OAAA,EAAlDA,EAAoDS,2BAQzEtjB,EAAMujB,eACTxM,gBAAA,OAAKwD,UAAU,wBACXxD,gBAAA,OAAKwD,UAAU,iBAAiBva,EAAMuf,MAAMK,YAGhD7I,2BAAA,KAAG/W,EAAMof,kBAsJCmD,CAAqBviB,EAAOA,EAAMwc,WAClC2C,EACInf,EACAA,EAAM2iB,UACN3iB,EAAMwc,UACNxc,EAAMyc,cACNzc,EAAMof,iBACNpf,EAAMqf,kBACNrf,EAAMujB,gBAEfvjB,EAAMwjB,qBACHzM,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAMyjB,qBACZ1M,gBAACqG,OAAI,CAAC7C,UAAU,4BACXva,EAAMwjB,oBACI,QAAVgI,EAAAxrB,EAAMc,YAAI,IAAA0qB,GAAVA,EAAYxJ,eAxIH0B,EAC9BC,EACAC,EACA5jB,IAEK2jB,EAKD5M,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKqI,GACLD,EAAoBE,SACpBF,EAAoBG,SACpBH,EAAoBI,QACpBJ,EAAoB9B,aARzB7hB,EAAMC,QAAQU,UAAUuc,MAAM,uDACvB,MAkIewG,CAA0B1jB,EAAMgkB,wBAAyBhkB,EAAMikB,kBAAmBjkB,GA/GhFkkB,EAC5BC,EACAP,EACA5jB,IAEKmkB,EAKDpN,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKqI,GACLO,EAAkBC,SAClBD,EAAkBwW,eAAiBxW,EAAkBwW,eAAiB,KACtExW,EAAkBE,SAClBF,EAAkBG,YAClBH,EAAkBI,IAClBJ,EAAkBtC,aAVvB7hB,EAAMC,QAAQU,UAAUuc,MAAM,qDACvB,MAyGegH,CAAwBlkB,EAAM4hB,sBAAuB5hB,EAAMikB,kBAAmBjkB,IA7JlFwkB,EA8JgBxkB,EAAMykB,qBA7JzBhC,kBAAgBC,YAAY8B,EAAUE,QAIrD3N,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKiJ,EAAUG,SACfH,EAAUI,OACVJ,EAAUE,QALR,MAsFqB1kB,KAAkD,IAAA6kB,EAClF,OACI9N,gBAACqG,OAAI,CAAC7C,UAAU,+BACD,QAAVsK,EAAA7kB,EAAMc,YAAI,IAAA+jB,GAAVA,EAAY7C,eAAiB,KAAOhiB,EAAM8kB,UAC3C/N,gBAACqG,OAAI,CAAC7C,UAAU,uCACXva,EAAMwtB,2BACNxtB,EAAM8hB,sBACN9hB,EAAM46B,uBAAyBnY,kBAAgBC,YAAY1iB,EAAM46B,uBAC9D7jB,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKvb,EAAM66B,+BAAgC76B,EAAM46B,uBACtD,MAEP56B,EAAM+kB,+BA6DEC,CAA2BhlB,IAGnCA,EAAMyc,eAnKO+H,MAuEAtC,I,8HCpepB,MAAOwM,UAAuB3X,gBACzBwS,SAEH,MAAM,WAAEoF,GAAezuB,KAAKF,MAC5B,OACI+W,gBAACyR,SAAMlN,OAAAC,OAAA,GAAKoT,GACPzuB,KAAK0uB,eAAe1uB,KAAKF,QAK9B4uB,eAAe5uB,GAEnB,MAAM,QAAE4lB,EAAO,iBAAEiJ,EAAgB,KAAEC,EAAI,SAAEC,EAAQ,MAAEC,EAAK,KAAEre,EAAI,aAAEse,GAAiBjvB,EACjF,OAAI4lB,EACQ7O,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKsT,GACb,IACD9X,gBAACqG,OAAI,CAACkM,IAAI,IAAI/O,UAAU,iCAAgC,cAAa,SACpEqL,EACA,KAEEkJ,GAAQE,EAEXjY,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKuT,GACLC,EACAC,GAGFF,EACCG,EAGRlY,2BAAA,KACKpG,EACAqe,IAMFN,a,+EChCf,MAsDMoM,EAA0CrU,IAAwC,IAAvC,MAAEsP,EAAK,UAAEC,EAAS,KAAEC,EAAI,QAAE3tB,GAASme,EAChF,OACI1P,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKwa,GACNhf,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKya,GACLC,EACA3tB,KAKXyyB,EAAwCjU,IAAkE,IAAjE,GAAEnM,EAAE,UAAEJ,EAAS,KAAE5J,EAAI,UAAE+X,EAAS,iBAAEhM,EAAgB,QAAE1C,GAAS8M,EACxG,MAAMhJ,EAAUC,2BAAiB,QAASrB,EAAmB/L,GACvDiY,EAAazK,iCAAuBzB,EAAmBoB,GAC7D,OACI/G,gBAAA,IAAAuE,OAAAC,OAAA,CAAGZ,GAAIA,EAAIJ,UAAWA,EAAS,aAAcmO,EAAW1O,QAASA,GAAa4O,GACzEjY,IA4EEqqB,UA3CiEh7B,IAC5E,MAAM,OACFi7B,EAAM,UACN7E,EAAS,QACTlO,EAAO,mBACPmO,EAAkB,YAClBC,EAAW,cACX4E,EAAa,cACbC,EAAa,qBACbC,EAAoB,mBACpBC,EAAkB,oBAClBC,EAAmB,qBACnBC,EAAoB,iBACpBC,EAAgB,kBAChBC,GACAz7B,EAEJ,OACI+W,gBAACyR,SAAMlN,OAAAC,OAAA,GAAK0f,GACP7E,EAAUI,eAAiBzf,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK8a,IACrCD,EAAUI,eAAiBzf,gBAAC+jB,EAAaxf,OAAAC,OAAA,GAAK2M,IAC/CnR,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK+a,GACNvf,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK2f,GACLE,EA7H+BtrB,KAA6E,IAA5E,aAAE2mB,EAAY,MAAE3D,EAAK,eAAE4I,EAAc,WAAEC,EAAU,MAAEze,EAAK,aAAE0e,GAAc9rB,EACzH,OACIiH,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKkb,GACL3D,GACGA,EAAMrU,IAAKuE,GAEHjM,gBAACqG,OAAI9B,OAAAC,OAAA,CAACqD,IAAKoE,EAAKpE,KAASoE,EAAK4S,SACzB5S,EAAKwR,MACLxR,EAAK9F,MACL8F,EAAK0O,QAIrBgK,EACAC,EACAze,EACA0e,IA8GQ7E,CAAasE,GAzGoB3V,KAA8B,IAA7B,eAAEmW,EAAc,MAAE/I,GAAOpN,EAC5E,OACI3O,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKsgB,GACL/I,GACGA,EAAMrU,IAAKuE,GAEHjM,gBAACqG,OAAI9B,OAAAC,OAAA,CAACqD,IAAKoE,EAAKpE,KAASoE,EAAK8T,QACzB9T,EAAKgM,MACLhM,EAAKrS,SAkGbmrB,CAAcR,IAEnBvkB,gBAACqG,OAAI9B,OAAAC,OAAA,GAAK4f,GACLI,EACAE,EAxDjBz7B,KAEA,MAAM,UACFwc,EAAS,UACT7b,EAAS,aACTsoB,EACAhpB,SACIkF,SAAS,kBAAE6jB,KAEfhpB,EACE0c,EAAmBqM,6BAAmBC,EAAoBC,EAActoB,GAK9E,OACIoW,gBAACgkB,EAAYzf,OAAAC,OAAA,CACTZ,GAAG,iBANQ,CACf1T,KAAM,KAMY,CACdsT,UAAW,mCACXmO,UAAWlM,EAAUuf,yBACrBprB,KAAM6L,EAAUwf,oBAChBtf,iBAAkBA,MAmCTuf,CAAaj8B,IAElB+W,gBAAA,OAAKwD,UAAU,wCACXxD,gBAAA,OAAKwD,UAAU,qDACXxD,gBAAA,mBAnGwBkP,KAA8B,IAA7B,eAAE4V,EAAc,MAAE/I,GAAO7M,EACtE,OACIlP,gBAACqG,OAAI9B,OAAAC,OAAA,GAAKsgB,GACL/I,GACGA,EAAMrU,IAAKuE,GAEHA,GACIjM,gBAACqG,OAAI9B,OAAAC,OAAA,CAACqD,IAAKoE,EAAKpE,KAASoE,EAAK8T,QACzB9T,EAAKrS,SA6FjBurB,CAAWV,Q,kCChKhC,mCAkBA,MAAMW,UAAyBplB,gBAEpBqlB,oBACH,GAAIC,YAAan8B,KAAKF,MAAMC,QAAQkF,SAChC,OAGJ,MAAMgK,EAAMjP,KAAKF,MAAMO,OAAO+7B,oBAAsBp8B,KAAKF,MAAMC,QAAQyP,IAAInP,OAAOg8B,mCAC5EC,EAAS/3B,SAASuS,cAAc,UACtCwlB,EAAOviB,IAAM9K,EACbqtB,EAAOnQ,OAAQ,EACfmQ,EAAOC,YAAc,YACrBh4B,SAASi4B,KAAKC,YAAYH,GAGvBjT,SACH,OAAI8S,YAAan8B,KAAKF,MAAMC,QAAQkF,SACzB,KAGJjF,KAAKF,MAAM2qB,WAAWzqB,KAAKF,QAI3Bm8B,a,kCC1Cf,+CAuCeS,UAvB4C58B,IAA4B,IAAA68B,EACnF,MAAM,YAAE9C,EAAW,sBAAEvC,EAAqB,sBAAEwC,EAAqB,UAAE5D,GAAcp2B,EACjF,OACI+W,2BAAA,KACKqf,EAAU0D,eAAiBC,GAC1B3D,EAAU0D,eAAiBrX,kBAAgBC,YAAY1iB,EAAMO,OAAOo5B,4BAClE5iB,gBAAC+lB,cAAW,CACRlX,QAAkD,QAA3CiX,EAAE78B,EAAMO,OAAOg6B,oCAA4B,IAAAsC,IAAI78B,EAAMwc,UAAUugB,oCACtEC,iBAAkBh9B,EAAMwc,UAAUygB,sCAClCC,KAAMl9B,EAAMO,OAAOo5B,0BACnBwD,iCAAkCn9B,EAAMwc,UAAU2gB,iCAClDC,SAAU5F,EACVwC,sBAAuBA,KAG7B5D,EAAU0D,gBACPrX,kBAAgBC,YAAY1iB,EAAMO,OAAOo5B,4BAC1CvD,EAAU4C,aACVgB,K,kCClChB,gBAgBeqD,IAJuEvtB,IAAA,IAAC,UAAEyK,EAAS,QAAEjS,GAASwH,EAAA,OACzGiH,gBAAA,OAAKwD,UAAcA,EAAH,qBAAkCjS,K,4DCetD,MAAMg1B,EAAgBC,IAClB,GAAIA,EAAW,CACX,MAAMC,EAAkBh2B,OAAOkwB,SAAS6F,EAAW,IACnD,IAAKj2B,MAAMk2B,GACP,OAAOA,IAoBJC,IAb0D3tB,IAAA,IAAC,GAAE6K,EAAE,KAAEzK,EAAI,MAAE5J,EAAK,QAAEo3B,EAAO,UAAEnjB,EAAS,UAAEgjB,EAAS,SAAEI,GAAU7tB,EAAA,OAClIiH,gBAAA,SACI4D,GAAIA,EACJzK,KAAMA,EACN5J,MAAOA,EACPiU,UAAW,GAAGA,WAAmBA,KAAaI,IAC9C+iB,QAAqB,KAAZA,EAAiBA,OAAUp+B,EAAS,gBAC/B,OACdi+B,UAAWD,EAAaC,GACxBI,SAAUA,M,y0BCqBlB,IAAMC,EAAN,cAAiC7mB,YAkB7BhX,YAAYC,GACRI,MAAMJ,GAlBO,KAAA69B,gBAA0B,0BAkGpC,KAAAC,oBAAuBC,GAA0C79B,KAAKF,MAAMO,OAAOqlB,QAAQjV,KAAOotB,EAAMC,OAAO13B,MAE/G,KAAA23B,gBAAmBF,IACtB,MAAMpjB,EAAKojB,EAAMC,OAAOrjB,GAClBrU,EAAQy3B,EAAMC,OAAO13B,MAE3B,OAAQqU,EAAGpb,eACP,IAAK,YACDW,KAAKg+B,UAAY53B,EACjB,MAEJ,IAAK,UACDpG,KAAKi+B,QAAU73B,EACf,MAEJ,IAAK,QACDpG,KAAKk+B,WAAa93B,IAQvB,KAAA6yB,QAAU,KACbj5B,KAAKm+B,mBACLn+B,KAAKo+B,sBAGLp+B,KAAKq+B,oBAAsBnjB,YAAY,KACnClb,KAAKs+B,+BACN,KACH3kB,WAAW,KACPwB,cAAcnb,KAAKq+B,sBACpB,MAIU,KAAAC,4BAA8B,KAEvCh6B,QAAUA,OAAe,QAAKA,OAAe,OAA4B,2BACzE6W,cAAcnb,KAAKq+B,qBACnBr+B,KAAKu+B,eAAgB,IAIZ,KAAAJ,iBAAmB,KAChC,MAAM,UAAE7hB,GAActc,KAAKF,MACrB0+B,EAA2BliB,EAAUkiB,0BAA4B,sCAGnEl6B,OAAkB,WAAKA,OAAkB,UAAmB,iBAE5DA,OAAkB,UAAmB,gBAAEia,IAClCkgB,IACG,MAAMr4B,EAAQq4B,EAAIC,IAAM1+B,KAAK2+B,YAAYF,EAAIC,KAAO,GACpD,OAAQD,EAAIG,GAAGv/B,eACX,IAAK,YACDW,KAAKg+B,UAAY53B,EACjB,MAEJ,IAAK,UACDpG,KAAKi+B,QAAU73B,EACf,MAEJ,IAAK,QACDpG,KAAK6+B,MAAQz4B,EACbpG,KAAKk+B,WAAaO,EAAIK,IACtBL,EAAIM,SAAWP,MAiBtB,KAAAJ,oBAAsB,KACnC,MAAM,UAAE9hB,GAActc,KAAKF,MAG3B,GAAIwE,QAAUA,OAAgB,QAAG,CAC7B,MAAM8D,EAAU,CACZ42B,eAAgB1iB,EAAU2iB,0BAC1BC,gBAAiB5iB,EAAU6iB,gBAI/B/jB,OAAOC,OAAO/W,OAAgB,QAAG8D,KA/KrCpI,KAAKg+B,UAAY,GACjBh+B,KAAKi+B,QAAU,GACfj+B,KAAK6+B,MAAQ,GACb7+B,KAAKk+B,WAAakB,aAAWC,aAAaC,OAC1Ct/B,KAAKu+B,eAAgB,EACrBv+B,KAAKwc,iBAAmBqM,6BACpB7oB,KAAKF,MAAMC,QAAQkF,QAAQ6jB,kBAC3B9oB,KAAKF,MAAMipB,aACX/oB,KAAKF,MAAMW,WAIZy7B,oBACHl8B,KAAKi5B,UAIFsG,qBAECv/B,KAAKu+B,eAAiBj6B,QAAUA,OAAiB,UAAKA,OAAiB,SAAc,YAErFA,OAAiB,SAAc,aAIhC41B,sBACHC,EACAC,GAEA,OAAIp6B,KAAK05B,QAAUU,GAAap6B,KAAKF,MAAMmI,OAASkyB,EAAUlyB,KAM3DohB,SACH,MAAM,OAAEhpB,EAAM,UAAEic,GAActc,KAAKF,MAE7BkqB,EAAS9oB,IAAA,GACRlB,KAAKF,OAAK,IACbo2B,UAAW,CACPI,eAAgBt2B,KAAKu+B,eAEzBtI,mBAAoB,CAChBuJ,YAAax/B,KAAKF,MAClBua,UAAWgQ,IAAWrqB,KAAK29B,gBAAiBt9B,EAAOga,YAEvD2N,QAAS,CACL6N,MAAO,CACHzM,IAAKsE,QACLC,QAAQ,GAEZmI,UAAW,CACP1M,IAAK0E,aAETiI,KAAMlf,gBAAC4oB,IAAsC,CAACplB,UAAWra,KAAK29B,kBAC9Dv1B,QAASyO,gBAAC6oB,IAAyC,CAACrlB,UAAWra,KAAK29B,gBAAiBv1B,QAASkU,EAAU6iB,kBAE5GhJ,mBAAoB,CAChB1b,GAAI,MACJZ,MAAO,CAAEnP,QAAS,SAEtB0rB,YAAa,CACT3b,GAAIza,KAAKu+B,cAAgB,MAAQ,KACjClkB,UAAcra,KAAK29B,gBAAR,eAEfjY,QAASrlB,EAAOqlB,SAAWrlB,EAAOqlB,QAAQjV,MACtCoG,gBAAC8oB,IAAavkB,OAAAC,OAAA,CACVhB,UAAcra,KAAK29B,gBAAR,aACPt9B,EAAOqlB,QAAO,CAClBka,UAAW,CAAEC,OAAQ7/B,KAAK49B,oBAAqBza,eAAgBnjB,KAAKF,MAAMC,QAAQkF,YAG1FoxB,+BAAgCr2B,KAAK8/B,wBAGzC,OAAO9/B,KAAKF,MAAM2qB,WAAWT,GAiFzB2U,YAAYoB,GAChB,MAAMz3B,EAAI/D,SAASuS,cAAc,OAGjC,OADAxO,EAAE03B,UAAYD,EACiB,IAAxBz3B,EAAE23B,WAAW9gC,OAAe,GAAKmJ,EAAE23B,WAAW,GAAGC,WAAa,GAkBjEJ,sBACJ,MAAM,OAAEz/B,EAAM,UAAEic,GAActc,KAAKF,MAC7By2B,EAAe,CACjBA,aAAc,CACV9b,GAAI,gBACJJ,UAAcra,KAAK29B,gBAAR,wBAEf/K,MAAO,CACH5yB,KAAKmgC,aAAa,YAAa,OAAQngC,KAAKg+B,UAAW1hB,EAAU8jB,mBAAoB9jB,EAAU+jB,oBAC/FrgC,KAAKmgC,aAAa,UAAW,OAAQngC,KAAKi+B,QAAS3hB,EAAUgkB,kBAAmBhkB,EAAUikB,oBAE9F5K,aAAc,CACV9e,gBAAC2pB,IAAgC,CAC7B9hB,IAAI,uBACJjE,GAAG,uBACHJ,UAAWra,KAAK29B,gBAChBv1B,QAASkU,EAAUmkB,mCAEvB5pB,gBAAC2pB,IAAgC,CAC7B9hB,IAAI,iBACJjE,GAAG,iBACHJ,UAAWra,KAAK29B,gBAChBv1B,QAASkU,EAAUokB,sBAEvB7pB,gBAAC2pB,IAAgC,CAC7B9hB,IAAI,+BACJjE,GAAG,+BACHJ,UAAWra,KAAK29B,mBAGxBnH,eAAgB,CACZnc,UAAcra,KAAK29B,gBAAR,aAEflH,QAAS,CACL5f,gBAAC8pB,IAAiC,CAC9BjiB,IAAI,WACJjE,GAAG,WACHJ,UAAcra,KAAK29B,gBAAR,gBACXnV,UAAWlM,EAAUskB,oBACrBnwB,KAAM6L,EAAUukB,eAChBrkB,iBAAkBxc,KAAKwc,mBAE3B3F,gBAAC8pB,IAAiC,CAC9BjiB,IAAI,SACJjE,GAAG,SACHJ,UAAcra,KAAK29B,gBAAR,kBACXnV,UAAWlM,EAAUwkB,iBACrBrwB,KAAM6L,EAAUwkB,iBAChBtkB,iBAAkBxc,KAAKwc,oBAG/Bka,yBAA0B,CACtBrc,UAAcra,KAAK29B,gBAAR,qCAEfhH,gCAAiC,CAC7Blc,GAAI,kBACJJ,UAAcra,KAAK29B,gBAAR,8BAUnB,OANIt9B,EAAO0gC,WAA4B,KAAf/gC,KAAK6+B,OACzBtI,EAAa3D,MAAMh0B,KACfoB,KAAKmgC,aAAa,QAAS,QAASngC,KAAK6+B,MAAOviB,EAAU0kB,2BAAuB5hC,EAAWY,KAAKk+B,aAIlG3H,EAGH4J,aACJ1lB,EACAzK,EACA5J,EACA66B,EACA5D,EACAG,GAEA,MAAMnjB,EAAera,KAAK29B,gBAAR,iBAClB,MAAO,CACHjI,QAAS,CACLrb,UAAWgQ,IAAWhQ,EAAW,GAAGA,KAAaI,IAAM,aAAc,cAEzEiE,IAAKjE,EACL6Z,MACIzd,gBAACqqB,IAAgC9lB,OAAAC,OAAA,GACzB,CACAZ,KACAkQ,MAAOlQ,EACPJ,YACA5J,KAAMwwB,KAIlBtL,aACI9e,gBAAC2pB,IAAgCplB,OAAAC,OAAA,GACzB,CACAhB,UAAWra,KAAK29B,gBAChB3tB,KAAM,UAIlBwhB,MACI3a,gBAACsqB,IAAgC/lB,OAAAC,OAAA,GACzB,CACAZ,KACAzK,OACA5J,QACAo3B,UACAnjB,YACAgjB,YACAI,SAAUz9B,KAAK+9B,sBAhTvBqD,YAAA,CAAXC,K,gCAEWD,YAAA,CAAXC,K,8BAEWD,YAAA,CAAXC,K,4BAEWD,YAAA,CAAXC,K,iCAEWD,YAAA,CAAXC,K,oCAbC3D,EAAkB0D,YAAA,CADvBE,KACK5D,GA6TSA","file":"static/js/17.4e49d241af44259d9040.chunk.js","sourcesContent":["// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProactiveChatTrigger } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\n\n/**\n * ProactiveChatTrigger class - checks if Proactive Chat should be triggered, starts the chat and sets context\n */\nabstract class ProactiveChatTrigger implements IProactiveChatTrigger {\n public props: IPvaChatConnectorViewProps;\n public context: IChatContext;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n this.props = props;\n this.context = context;\n }\n\n /**\n * Generates Chat Context with included properties related to Proactive Chat\n * @returns TContextProvider - Chat Context\n */\n public abstract getContextProvider(): TContextProvider;\n\n /**\n * Generates chat welcome message to be used if Proactive Chat is triggered\n * @returns string - chat welcome message\n */\n public abstract getMessage(): string;\n\n /**\n * Validate specific trigger conditions if Proactive Chat should be initiated\n * @returns boolean (TRUE if Proactive Chat should be triggered)\n */\n public abstract validate(): Promise;\n}\n\nexport default ProactiveChatTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartAmountTrigger class - proactive chat is triggered if cArt amount is in preset boundaries (config.proactiveOnCartAmountMin, config.proactiveOnCartAmountMax)\n */\nclass CartAmountTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private totalInCart: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartAmountMin;\n this.max = this.props.config.proactiveOnCartAmountMax;\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Cart amount proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartAmountTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.totalInCart = cart.cart.TotalAmount || 0;\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.totalInCart && this.totalInCart <= this.max;\n } else {\n retVal = this.min <= this.totalInCart;\n }\n } else {\n if (this.max) {\n retVal = this.totalInCart <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Validation result: '${retVal}'; Cart total: '${this.totalInCart}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Amount',\n eCommerceCustProactiveShoppingCartAmount: `${this.totalInCart}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartAmountMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartAmountTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartNumberOfItemsTrigger class - proactive chat is triggered if Cart Number of Items is in preset boundaries (config.proactiveOnCartNoOfItemsMin, config.proactiveOnCartNoOfItemsMax)\n */\nclass CartNumberOfItemsTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private numberOfItems: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartNoOfItemsMin;\n this.max = this.props.config.proactiveOnCartNoOfItemsMax;\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Cart number of items proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartNumberOfItemsTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.numberOfItems = cart.cart.TotalItems || 0;\n\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.numberOfItems && this.numberOfItems <= this.max;\n } else {\n retVal = this.min <= this.numberOfItems;\n }\n } else {\n if (this.max) {\n retVal = this.numberOfItems <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Validation result: '${retVal}'; Number of items in cart: '${this.numberOfItems}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Number of Items',\n eCommerceCustProactiveShoppingCartNumberOfItems: `${this.numberOfItems}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartNoOfItemsMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartNumberOfItemsTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartSpecificProductTrigger class - proactive chat is triggered if a Product in the Cart is in preset list of products (config.proactiveOnCartSpecificProductList)\n */\nclass CartSpecificProductTrigger extends ProactiveChatTrigger {\n private product: string = '';\n\n public async validate(): Promise {\n let isValid = false;\n const cart = await this._getCart();\n if (!cart.isEmpty) {\n if (cart.cart.CartLines) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart line items was '${cart.cart.CartLines?.length}'`\n );\n for (let i = 0; i < cart.cart.CartLines?.length; i++) {\n if (cart.cart.CartLines[i]) {\n if (this.props.config.proactiveOnCartSpecificProductList) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart specific products was configured for proactive chat was '${this.props.config.proactiveOnCartSpecificProductList?.length}'`\n );\n // Find first item, from user-defined list of products, that matches the cart lines' itemId in the cart.\n for (let j = 0; j < (this.props.config.proactiveOnCartSpecificProductList?.length || 0); j++) {\n if (\n this.props.config.proactiveOnCartSpecificProductList &&\n cart.cart.CartLines[i].ItemId &&\n this.props.config.proactiveOnCartSpecificProductList[j] === cart.cart.CartLines[i].ItemId\n ) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Matched cart line item ID '${cart.cart.CartLines[i].ItemId}' against user-defined list of specific products for proactive chat.`\n );\n isValid = true;\n break;\n }\n }\n }\n } else {\n // Rest of the CartLines are undefined\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart did not contain any cart lines.`);\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart was empty.`);\n }\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Specific Product',\n eCommerceCustProactiveShoppingCartSpecificProduct: `${this.product}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartSpecificProductMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartSpecificProductTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ProactiveChatNames {\n DateRange = 'Date Range',\n FromSpecificPage = 'From Specific Page',\n PageVisits = 'Page Visits',\n SpecificLocation = 'Specific Location',\n SpecificPage = 'Specific Page',\n WaitOnTime = 'Wait On Time'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * DateRangeTrigger class - proactive chat is triggered if current date is in preset date boundaries (config.proactiveOnDateRangeStart, config.proactiveOnDateRangeEnd)\n */\nclass DateRangeTrigger extends ProactiveChatTrigger {\n private start?: Date;\n private end?: Date;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.start = this._toDate(this.props.config.proactiveOnDateRangeStart);\n this.end = this._toDate(this.props.config.proactiveOnDateRangeEnd);\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Proactive chat initialized with startDate: '${this.start}'; max: '${this.end}'.`\n );\n }\n\n public async validate(): Promise {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n\n let retVal = false;\n if (this.start) {\n if (this.end) {\n retVal = this.start.getTime() <= now.getTime() && now.getTime() <= this.end.getTime();\n } else {\n retVal = this.start.getTime() <= now.getTime();\n }\n } else if (this.end) {\n retVal = now.getTime() <= this.end.getTime();\n }\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Validation result: '${retVal}'; Current date used to compare: '${now}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.DateRange,\n eCommerceCustProactiveFromDate: this.start ? this.start.toUTCString() : '',\n eCommerceCustProactiveToDate: this.end ? this.end.toUTCString() : ''\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnDateRangeMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Converts string(us-en) to date\n * @param date string (mm/dd/yyyy)\n * @returns Date or undefined\n */\n private _toDate(date?: string): Date | undefined {\n if (date) {\n const dateParts = date.split('/');\n return new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);\n } else {\n return undefined;\n }\n }\n}\n\nexport default DateRangeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * FromSpecificPageTrigger class - proactive chat is triggered if user has come from specific page (the one listed in config.proactiveOnFromSpecificPageList)\n */\nclass FromSpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnFromSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Number of items in user-defined list of 'From Specific Page' was '${this.props.config.proactiveOnFromSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnFromSpecificPageList?.length || 0); i++) {\n const fromSpecificPageTrimmed: string = this.props.config.proactiveOnFromSpecificPageList[i].trim();\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] Current page URL: '${window.document.referrer}'.`\n );\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Current item from user-defined list of 'From Specific Page': '${fromSpecificPageTrimmed}'.`\n );\n\n if (window.document.referrer.indexOf(fromSpecificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] User-defined 'From Specific Page' list was undefined.`\n );\n }\n this.props.context.telemetry.debug(`[Chat][${FromSpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.FromSpecificPage,\n eCommerceCustProactiveCameFromPage: window.document.referrer\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnFromSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default FromSpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/ICookieContext';\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * PageVisitTrigger class - proactive chat is triggered if user has visited current page for (config.proactiveOnPageVisitNumber) or more times\n */\nclass PageVisitTrigger extends ProactiveChatTrigger {\n public visits: number = 0;\n private cookieName: string = 'TimesPageVisited';\n private expdate: Date;\n private cookies: ICookieContext;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.cookies = this.props.context.request.cookies;\n this.expdate = new Date();\n // Set expiry date to 365 days.\n this.expdate.setTime(this.expdate.getTime() + 24 * 60 * 60 * 1000 * 365);\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie expiry date set to: '${this.expdate}'.`);\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie context is given: '${this.cookies.isConsentGiven()}'.`);\n if (this.cookies.isConsentGiven()) {\n this.cookies.setConsentCookie();\n }\n\n this._updateVisitCounter();\n }\n\n public async validate(): Promise {\n let retVal: boolean = false;\n\n if (this.props.config.proactiveOnPageVisitNumber) {\n retVal = this.visits >= this.props.config.proactiveOnPageVisitNumber;\n }\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Validation result: '${retVal}'.`);\n return retVal;\n }\n\n public clear(): void {\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Clearing cookie for page visit counter.`);\n this.cookies.set(this.cookieName, 0, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.PageVisits,\n eCommerceCustProactiveNumberOfVisits: `${this.visits}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnPageVisitMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private _updateVisitCounter(): void {\n this.visits = this.cookies.get(this.cookieName).value || 0;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter BEFORE update: '${this.visits}.`);\n ++this.visits;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter AFTER update: '${this.visits}.`);\n\n this.cookies.set(this.cookieName, this.visits, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n}\n\nexport default PageVisitTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IExtendedRequest } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if user geographically uses the website from specific country/regions(config.proactiveOnSpecificCountryRegionCountry)\n */\nclass SpecificCountryRegionTrigger extends ProactiveChatTrigger {\n private customerCountryCode: string;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.customerCountryCode = (this.props.context.request).suggestedMarket || 'n/a';\n this.props.context.telemetry.debug(\n `[${SpecificCountryRegionTrigger.name}] Customer country code set to: '${this.customerCountryCode}.'`\n );\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.props.config.proactiveOnSpecificLocation\n ? this.props.config.proactiveOnSpecificLocation.toLowerCase().indexOf(this.customerCountryCode.toLowerCase()) > -1\n : false;\n this.props.context.telemetry.debug(`[Chat][${SpecificCountryRegionTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveCountryCode: this.props.config.proactiveOnSpecificLocation || '',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificLocation\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificCountryRegionMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificCountryRegionTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if current page is listed in config.proactiveOnSpecificPageList\n */\nclass SpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${SpecificPageTrigger.name}] Number of items in user-defined list of 'Specific Pages' was '${this.props.config.proactiveOnSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnSpecificPageList?.length || 0); i++) {\n const specificPageTrimmed: string = this.props.config.proactiveOnSpecificPageList[i].trim();\n this.props.context.telemetry.debug(`[] Current location URL: ${window.location.href}.`);\n this.props.context.telemetry.debug(`[] Current item from user-defined list of 'Specific Page': ${specificPageTrimmed}.`);\n if (window.location.href.indexOf(specificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] User-defined 'Specific Page' list was undefined.`);\n }\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificPage\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * WaitOnTimeTrigger - proactive chat is triggered if user stays on current page for more than (config.proactiveOnWaitTimeSeconds) seconds\n */\nclass WaitOnTimeTrigger extends ProactiveChatTrigger {\n private waitTimeInMilliseconds: number | undefined;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n if (this.props.config.proactiveOnWaitTimeSeconds && !isNaN(this.props.config.proactiveOnWaitTimeSeconds)) {\n this.waitTimeInMilliseconds = Number(this.props.config.proactiveOnWaitTimeSeconds) * 1000;\n this.props.context.telemetry.debug(\n `[Chat][${WaitOnTimeTrigger.name}] Wait time (ms) set to: '${this.waitTimeInMilliseconds}'.`\n );\n }\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.waitTimeInMilliseconds !== undefined;\n this.props.context.telemetry.debug(`[Chat][${WaitOnTimeTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n const triggerTime = Date.now() + (this.waitTimeInMilliseconds || 0);\n return () => {\n return triggerTime > Date.now()\n ? this.context\n : {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.WaitOnTime,\n eCommerceCustProactiveTimeOnPage: `${this.waitTimeInMilliseconds ? this.waitTimeInMilliseconds : 0}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnWaitTimeMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default WaitOnTimeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport CartAmountTrigger from './triggers/cart-amount-trigger';\nimport CartNumberOfItemsTrigger from './triggers/cart-number-of-items-trigger';\nimport CartSpecificProductTrigger from './triggers/cart-specific-product-trigger';\nimport DateRangeTrigger from './triggers/date-range-trigger';\nimport FromSpecificPageTrigger from './triggers/from-specific-page-trigger';\nimport PageVisitTrigger from './triggers/page-visits-trigger';\nimport SpecificCountryRegionTrigger from './triggers/specific-CountryRegion-trigger';\nimport SpecificPageTrigger from './triggers/specific-page-trigger';\nimport WaitOnTimeTrigger from './triggers/wait-on-time-trigger';\n\ntype ProactiveChat =\n | typeof DateRangeTrigger\n | typeof SpecificPageTrigger\n | typeof FromSpecificPageTrigger\n | typeof PageVisitTrigger\n | typeof SpecificCountryRegionTrigger\n | typeof CartAmountTrigger\n | typeof CartNumberOfItemsTrigger\n | typeof CartSpecificProductTrigger\n | typeof WaitOnTimeTrigger;\n\n/**\n * List of Proactive Chat Validators in order of validation (first proactive chat that pass validation is triggered, the rest are ommited)\n */\nexport const ProactiveTriggers: ProactiveChat[] = [\n DateRangeTrigger,\n SpecificPageTrigger,\n FromSpecificPageTrigger,\n PageVisitTrigger,\n SpecificCountryRegionTrigger,\n CartAmountTrigger,\n CartNumberOfItemsTrigger,\n CartSpecificProductTrigger,\n WaitOnTimeTrigger\n];\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContextUser } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/IRequestContext';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ProactiveTriggers } from '../proactive';\nimport ProactiveChatTrigger from '../proactive/triggers/proactive-chat-trigger';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { IProactiveData } from './../interfaces';\nimport { IChatContext, TContextProvider } from '../../interfaces';\n\n/**\n *\n * ContextProvider class - generates chat context, and checks for proactive triggers\n */\nclass ContextProvider {\n public data: IProactiveData;\n public props: IPvaChatConnectorViewProps;\n private user: IRequestContextUser;\n private userId: string;\n private context: IChatContext;\n private provider: TContextProvider | undefined;\n\n constructor(props: IPvaChatConnectorViewProps) {\n this.props = props;\n this.user = this.props.context.request.user;\n this.userId = `dl_${uuidv4()}`;\n this.context = this._getContext();\n // Proactive Chat related data\n this.data = {\n enabled: false,\n timeout: this.props.config.proactiveOnWaitTimeSeconds || 0,\n message: this.props.config.proactiveDefaultMessage\n };\n }\n\n /**\n * Executes Proactive Chat validation\n * @returns TContextProvider - a function returning IChatContext object\n */\n public async init(): Promise {\n try {\n await this._proactiveCheck();\n } catch (e) {\n // Use ?debug=true to see telemetry\n // If previous block fails, chat will still be available (no need to display any errors to user)\n this.props.telemetry.exception(e);\n }\n return this.provider || this._getProvider();\n }\n\n /**\n * Returns TContextProvider - a function returning IChatContext object\n */\n private _getProvider(): TContextProvider {\n return () => {\n return {\n eCommerceOperatingUnitNumber: this.props.context.request.apiSettings.oun,\n eCommerceBaseUrl: this.props.context.request.apiSettings.baseUrl,\n eCommerceDataAreaId: this.props.context.request.channel?.InventLocationDataAreaId,\n UserId: this.userId,\n // eCommerceCust...\n AccountNumber: this.user.customerAccountNumber ? this.user.customerAccountNumber : 'N/A',\n Email: this.user.emailAddress ? this.user.emailAddress : 'N/A',\n FirstName: this.user.firstName ? this.user.firstName : this.props.config.anonymousUserName,\n LastName: this.user.lastName ? this.user.lastName : 'N/A',\n Name: this.user.name ? this.user.name : this.props.config.anonymousUserName,\n eCommerceCustPageURL: window.location.href,\n eCommerceCustChatType: 'pva',\n // Proactive chat\n eCommerceCustIsProactiveChat: 'False',\n eCommerceCustProactiveType: 'N/A',\n // Date Range\n eCommerceCustProactiveFromDate: 'N/A',\n eCommerceCustProactiveToDate: 'N/A',\n // From Specific Page\n eCommerceCustProactiveCameFromPage: 'N/A',\n // No. Page Visits\n eCommerceCustProactiveNumberOfVisits: 'N/A',\n // Specific CountryRegion\n eCommerceCustProactiveCountryCode: 'N/A',\n // Specific Page => eCommerceCustPageURL\n // eCommerceCustProactiveSpecificPage: 'N/A',\n // Wait On Time\n eCommerceCustProactiveTimeOnPage: 'N/A',\n // Shopping cart amount\n eCommerceCustProactiveShoppingCartAmount: 'N/A',\n // Shopping cart number of items\n eCommerceCustProactiveShoppingCartNumberOfItems: 'N/A',\n // Shopping cart specific product\n eCommerceCustProactiveShoppingCartSpecificProduct: 'N/A'\n };\n };\n }\n\n /**\n * Returns default IChatContext object\n */\n private _getContext(): IChatContext {\n return this._getProvider()();\n }\n\n /**\n * Validates proactive triggers to check if proactive chat should be initialized\n */\n private async _proactiveCheck(): Promise {\n if (this.props.config.proactiveChatEnabled) {\n for (let i = 0; i < ProactiveTriggers.length; i++) {\n const proactive = new ProactiveTriggers[i](this.props, this.context);\n // Only first detected proactive trigger gets executed\n if (await this._isProactive(proactive)) {\n this.props.context.telemetry.debug(`First detected proactive trigger to be executed: ${proactive}`);\n break;\n }\n }\n }\n }\n\n /**\n * Validates if proactive chat should be triggered for given ProactiveTrigger\n * @param proactive ProactiveChatTrigger\n * @returns boolean\n */\n private async _isProactive(proactive: ProactiveChatTrigger): Promise {\n this.data.enabled = await proactive.validate();\n if (this.data.enabled) {\n this.provider = proactive.getContextProvider();\n this.data.message = proactive.getMessage();\n }\n return this.data.enabled;\n }\n}\n\nexport default ContextProvider;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Style generating functions\n */\nimport { IAvatarStyling, IBubbleStyling, IChatCustomStyle, IChatStyling, IOtherStyling, ISuggestedActionStyling } from '../interfaces';\nimport { IMsdyn365PvaChatConnectorConfig } from '../msdyn365-pva-chat-connector.props.autogenerated';\n\nconst getChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n position: config.position || 'inherit',\n top: config.top ? config.top : 'inherit',\n right: config.right ? config.right : 'inherit',\n bottom: config.bottom ? config.bottom : 'inherit',\n left: config.left ? config.left : 'inherit',\n zIndex: 1000,\n display: 'flex',\n justifyContent: 'flex-end'\n };\n};\n\nconst getMaximizedChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig, isMobileDevice: boolean): React.CSSProperties => {\n if (isMobileDevice) {\n return {\n height: '90%',\n width: '100%',\n bottom: '0.5em',\n right: '0',\n padding: '5px'\n };\n }\n return {\n height: config.chatHeight ? config.chatHeight : '80%',\n width: config.chatWidth ? config.chatWidth : 'inherit'\n };\n};\n\nconst getChatButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: config.startChatButtonBackgroundColor || 'white',\n color: config.startChatButtonTextColor || 'inherit',\n borderColor: config.startChatButtonBorderColor || 'inherit',\n borderRadius: config.startChatButtonBorderRadius || '0px',\n borderStyle: config.startChatButtonBorderStyle || 'solid',\n borderWidth: config.startChatButtonBorderWidth ? config.startChatButtonBorderWidth : '0px',\n padding: config.storeLogoURL ? '2px 20px 2px 2px' : '10px 20px 10px 20px',\n cursor: 'pointer',\n outlineStyle: 'none',\n alignSelf: 'flex-end',\n boxShadow: '0 0 4px rgba(102,102,102,.5)',\n WebkitBoxShadow: '0 0 4px rgba(102,102,102,.5)',\n MozBoxShadow: '0 0 4px rgba(102,102,102,.5)'\n };\n};\n\nconst getButtonStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n marginRight: '12px',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n margin: '5px 12px 5px 5px',\n alignSelf: 'center',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatMessagesStyle = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean): React.CSSProperties => {\n return {\n display: minimized ? 'none' : 'block',\n backgroundColor: config.backgroundColor || 'White',\n height: '100%',\n width: '100%',\n boxSizing: 'border-box',\n position: 'relative'\n };\n};\n\nconst getChatMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n width: '100%',\n position: 'absolute',\n top: config.chatHeaderHeight ? `-${config.chatHeaderHeight}` : '',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getMinimizeButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n borderTop: 'none',\n borderLeft: 'none',\n borderRight: 'none',\n borderBottom: `solid 2px ${config.headerTextColor || 'White'}`,\n backgroundColor: 'transparent',\n padding: '5px 10px 3px 10px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getCloseButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n border: 'none',\n color: config.headerTextColor || 'White',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 7px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getChatMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n height: '100%',\n width: '100%',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n flexDirection: 'column',\n display: 'flex',\n justifyContent: 'flex-end',\n backgroundColor: config.backgroundColor || 'White'\n };\n};\n\nconst getProactiveMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n boxSizing: 'border-box',\n width: '100%',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n width: '100%',\n padding: '10px 20px',\n boxSizing: 'border-box',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n color: config.headerTextColor || 'inherit',\n cursor: 'pointer',\n padding: '5px 10px',\n outline: 'none',\n border: 'none',\n backgroundColor: config.headerBackgroundColor || 'inherit',\n borderRadius: '25px'\n };\n};\n\nconst getRedDotStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n background: 'Red',\n borderRadius: '50%',\n height: '5px',\n width: '5px',\n position: 'absolute',\n right: '10px',\n bottom: '33px'\n };\n};\n\n/**\n * Generates styles for the chat wrapper, and proactive chat parts\n * @param config IMsdyn365PvaChatConnectorConfig\n * @param minimized boolean\n * @returns IChatCustomStyle\n */\nexport const getChatStyling = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean, isMobileDevice: boolean): IChatCustomStyle => {\n return {\n ChatWrapperStyle: getChatWrapperStyle(config),\n MaximizedChatWrapperStyle: getMaximizedChatWrapperStyle(config, isMobileDevice),\n ChatButtonStyle: getChatButtonStyle(config),\n ButtonStoreLogoStyle: getButtonStoreLogoStyle(config),\n ChatStoreLogoStyle: getChatStoreLogoStyle(config),\n ChatMessagesStyle: getChatMessagesStyle(config, minimized),\n ChatMessageHeader: getChatMessageHeader(config),\n MinimizeButtonStyle: getMinimizeButtonStyle(config),\n CloseButtonStyle: getCloseButtonStyle(config),\n ChatMessageContent: getChatMessageContent(config),\n ProactiveWrapperStyle: getProactiveWrapperStyle(config),\n ProactiveMessageHeader: getProactiveMessageHeader(config),\n ProactiveMessageContent: getProactiveMessageContent(config),\n ProactiveButtonStyle: getProactiveButtonStyle(config),\n RedDotStyle: getRedDotStyle(config)\n };\n};\n\nconst fontFormat = (font?: string): string | undefined => {\n if (font && font.length > 0) {\n const arr = font.split(',');\n for (let i = 0; i < arr.length; i++) {\n arr[i] = `'${arr[i].trim()}'`;\n }\n font = arr.join(', ');\n } else {\n font = \"'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'\";\n }\n\n return font;\n};\n\nconst getBubbleStyling = (config: IMsdyn365PvaChatConnectorConfig): IBubbleStyling => {\n return {\n bubbleBackground: config.bubbleBackground || 'White',\n bubbleTextColor: config.bubbleTextColor || 'Black',\n bubbleBorderColor: config.bubbleBorderColor || '#e6e6e6',\n bubbleBorderRadius: config.bubbleBorderRadius || '2',\n bubbleBorderStyle: config.bubbleBorderStyle || 'solid',\n bubbleBorderWidth: config.bubbleBorderWidth || '1',\n bubbleFromUserBackground: config.bubbleFromUserBackground || 'White',\n bubbleFromUserTextColor: config.bubbleFromUserTextColor || 'Black',\n bubbleFromUserBorderColor: config.bubbleFromUserBorderColor || '#e6e6e6',\n bubbleFromUserBorderRadius: config.bubbleFromUserBorderRadius || '2',\n bubbleFromUserBorderStyle: config.bubbleFromUserBorderStyle || 'solid',\n bubbleFromUserBorderWidth: config.bubbleFromUserBorderWidth || '1'\n };\n};\n\n// eslint-disable-next-line complexity\nconst getOtherStyling = (config: IMsdyn365PvaChatConnectorConfig): IOtherStyling => {\n return {\n groupTimestamp: config.groupTimestamp || true,\n sendTimeout: config.sendTimeout || '20000',\n sendTimeoutForAttachments: config.sendTimeoutForAttachments || '120000',\n timestampColor: config.timestampColor || 'undefined',\n timestampFormat: config.timestampFormat || 'undefined',\n notificationDebounceTimeout: config.notificationDebounceTimeout || '400',\n hideToaster: config.hideToaster || true,\n toasterHeight: config.toasterHeight || '32',\n toasterMaxHeight: config.toasterMaxHeight || '32 * 5',\n toasterSingularMaxHeight: config.toasterSingularMaxHeight || '50',\n toastFontSize: config.toastFontSize || '87.5%',\n toastIconWidth: config.toastIconWidth || '36',\n toastSeparatorColor: config.toastSeparatorColor || '#E8EAEC',\n toastTextPadding: config.toastTextPadding || '6',\n toastErrorBackgroundColor: config.toastErrorBackgroundColor || '#FDE7E9',\n toastErrorColor: config.toastErrorColor || '#A80000',\n toastInfoBackgroundColor: config.toastInfoBackgroundColor || '#CEF1FF',\n toastInfoColor: config.toastInfoColor || '#105E7D',\n toastSuccessBackgroundColor: config.toastSuccessBackgroundColor || '#DFF6DD',\n toastSuccessColor: config.toastSuccessColor || '#107C10',\n toastWarnBackgroundColor: config.toastWarnBackgroundColor || '#FFF4CE',\n toastWarnColor: config.toastWarnColor || '#3B3A39',\n typingAnimationBackgroundImage: config.typingAnimationBackgroundImage || 'undefined',\n typingAnimationDuration: config.typingAnimationDuration || '5000',\n typingAnimationHeight: config.typingAnimationHeight || '20',\n typingAnimationWidth: config.typingAnimationWidth || '64',\n videoHeight: config.videoHeight || '270',\n markdownExternalLinkIconImage:\n config.markdownExternalLinkIconImage ||\n 'url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==)',\n markdownRespectCRLF: config.markdownRespectCRLF || 'true',\n internalLiveRegionFadeAfter: config.internalLiveRegionFadeAfter || '1000',\n accent: config.accent || '#0063B1',\n subtle: config.subtle || '#767676'\n };\n};\n\nconst getAvatarStyling = (config: IMsdyn365PvaChatConnectorConfig): IAvatarStyling => {\n return {\n avatarBorderRadius: config.avatarBorderRadius || '50%',\n avatarSize: config.avatarSize || '40',\n botAvatarBackgroundColor: config.botAvatarBackgroundColor || 'undefined',\n botAvatarImage: config.botAvatarImage || '',\n botAvatarInitials: config.botAvatarInitials || '',\n userAvatarBackgroundColor: config.userAvatarBackgroundColor || 'undefined',\n userAvatarImage: config.userAvatarImage || '',\n userAvatarInitials: config.userAvatarInitials || '',\n showAvatarInGroup: config.showAvatarInGroup || 'status'\n };\n};\n\nconst getSuggestedActionStyling = (config: IMsdyn365PvaChatConnectorConfig): ISuggestedActionStyling => {\n return {\n suggestedActionLayout: config.suggestedActionLayout || 'carousel',\n suggestedActionBackground: config.suggestedActionBackground || 'White',\n suggestedActionTextColor: config.suggestedActionTextColor || '',\n suggestedActionBorderColor: config.suggestedActionBorderColor || '',\n suggestedActionBorderRadius: config.suggestedActionBorderRadius || '0',\n suggestedActionBorderStyle: config.suggestedActionBorderStyle || 'solid',\n suggestedActionBorderWidth: config.suggestedActionBorderWidth || '2',\n suggestedActionDisabledBorderStyle: config.suggestedActionDisabledBorderStyle || 'solid',\n suggestedActionDisabledBorderWidth: config.suggestedActionDisabledBorderWidth || '2',\n suggestedActionDisabledTextColor: config.suggestedActionDisabledTextColor || '',\n suggestedActionHeight: config.suggestedActionHeight || '40',\n suggestedActionImageHeight: config.suggestedActionImageHeight || '20',\n suggestedActionsCarouselFlipperCursor: config.suggestedActionsCarouselFlipperCursor || '',\n suggestedActionsCarouselFlipperBoxWidth: config.suggestedActionsCarouselFlipperBoxWidth || '40',\n suggestedActionsCarouselFlipperSize: config.suggestedActionsCarouselFlipperSize || '20',\n suggestedActionsFlowMaxHeight: config.suggestedActionsFlowMaxHeight || '',\n suggestedActionsStackedHeight: config.suggestedActionsStackedHeight || '',\n suggestedActionsStackedOverflow: config.suggestedActionsStackedOverflow || '2',\n suggestedActionsStackedLayoutButtonMaxHeight: config.suggestedActionsStackedLayoutButtonMaxHeight || '',\n suggestedActionsStackedLayoutButtonTextWrap: config.suggestedActionsStackedLayoutButtonTextWrap || false\n };\n};\n\n/**\n * Generates style options for the Botframework-WebChat widget\n * @param config IMsdyn365PvaChatConnectorConfig\n * @returns IChatStyling\n */\nexport const getChatStyleOptions = (config: IMsdyn365PvaChatConnectorConfig): IChatStyling => {\n const bubbleStyling = getBubbleStyling(config);\n const avatarStyling = getAvatarStyling(config);\n const suggestedActionStyling = getSuggestedActionStyling(config);\n const otherStyling = getOtherStyling(config);\n return {\n hideUploadButton: true,\n primaryFont: fontFormat(config.primaryFont),\n backgroundColor: config.backgroundColor || 'White',\n ...bubbleStyling,\n ...avatarStyling,\n ...suggestedActionStyling,\n ...otherStyling\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\nimport { IAction, IDispatch, INext } from '../interfaces';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\n\nexport class CommerceChatStore {\n private props: IPvaChatConnectorViewProps;\n private setNewMessageAction: React.Dispatch>;\n private provider?: TContextProvider;\n\n /**\n * Gets conversation token\n * @param props IPvaChatConnectorViewProps\n */\n public static async getDirectLineToken(props: IPvaChatConnectorViewProps): Promise {\n if (props.config.powervaDirectlineTokenURL && props.config.botID && props.config.tenantID) {\n // use direct line token url, bot id and tenant id from module config to get conversation token\n const url = `${props.config.powervaDirectlineTokenURL}?botId=${props.config.botID}&tenantId=${props.config.tenantID}`;\n const options = { method: 'GET' };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n // use direct line token url, bot id and tenant id from app config to get conversation token\n const url = `${props.context.app.config.pvaChatConnectorPowervaDirectlineTokenURL}?botId=${props.context.app.config.pvaChatConnectorBotID}&tenantId=${props.context.app.config.pvaChatConnectorTenantID}`;\n const options = {\n method: 'GET'\n };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n /**\n * Creates a new instance of commerce store for WebChat\n * @param props IPvaChatConnectorViewProps\n * @param provider TContextProvider\n * @param setNewMessage React.Dispatch>\n */\n constructor(\n props: IPvaChatConnectorViewProps,\n provider: TContextProvider | undefined,\n setNewMessage: React.Dispatch>\n ) {\n this.props = props;\n this.provider = provider;\n this.setNewMessageAction = setNewMessage;\n }\n\n /**\n * Handles custom chat actions\n * @param param0 {\n * dispatch: IDispatch;\n * next: INext;\n * action: IAction;\n * }\n */\n public async actionHandler({ dispatch, next, action }: { dispatch: IDispatch; next: INext; action: IAction }): Promise {\n const atype = action.type;\n\n switch (atype) {\n case 'DIRECT_LINE/CONNECT_FULFILLED': {\n // sets language\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'webchat/join',\n value: { language: window.navigator.language }\n }\n });\n break;\n }\n case 'DIRECT_LINE/INCOMING_ACTIVITY': {\n const activity = action.payload.activity;\n if (activity?.from?.role === 'bot') {\n // Sets flag for new message (will be use to indicate new messages from bot when chat is minimized)\n this.setNewMessageAction(true);\n }\n break;\n }\n case 'DIRECT_LINE/POST_ACTIVITY_FULFILLED': {\n switch (action.payload.activity.name) {\n case 'webchat/join':\n {\n if (this.provider !== undefined) {\n // Sets Chat Context\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'pvaSetContext',\n value: this.provider()\n }\n });\n }\n }\n break;\n case 'pvaSetContext':\n {\n if (this.props.config.triggerQuery) {\n // Initialize chat after Chat Context is set\n dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE_BACK',\n payload: {\n text: this.props.config.triggerQuery\n }\n });\n }\n }\n break;\n default: {\n // default nothing\n }\n }\n break;\n }\n default: {\n // default nothing\n }\n }\n\n return next(action);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useMemo, useState } from 'react';\nimport { getChatStyleOptions } from '../helpers/StyleComposers';\nimport { IChatCoreProps, IAction, IDispatch } from '../interfaces';\nimport { CommerceChatStore } from '../helpers/CommerceChatStore';\n\n/**\n * Just a core Chat component\n * @param props\n */\n\nconst ChatCore: FunctionComponent = (props: IChatCoreProps) => {\n const { ReactWebChat } = window.WebChat;\n\n const [userId, setUserId] = useState('');\n useMemo(() => {\n if (props.provider) {\n const ctx = props.provider();\n if (ctx.UserId) {\n setUserId(typeof ctx.UserId === 'string' ? ctx.UserId : ctx.UserId.value.toString());\n }\n }\n }, [props.provider]);\n\n const directLine = useMemo(() => {\n return window.WebChat.createDirectLine({ token: props.directLineToken });\n }, [props.directLineToken]);\n\n const commerceChatStore = useMemo(() => {\n if (directLine && props.provider) {\n return new CommerceChatStore(props.config, props.provider, props.setNewMessage);\n }\n return undefined;\n }, [props.provider, directLine]);\n\n const store = useMemo(() => {\n return window.WebChat.createStore(\n {},\n ({ dispatch }: { dispatch: IDispatch }) => (next: (action: IAction) => IDispatch) => (action: IAction) => {\n commerceChatStore?.actionHandler({ dispatch, next, action });\n }\n );\n }, [commerceChatStore]);\n const styleOptions = getChatStyleOptions(props.config.config);\n\n return props.directLineToken !== '' ? (\n \n ) : (\n

Please wait while we are connecting.

\n );\n};\n\nexport default ChatCore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useEffect, useState } from 'react';\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport ContextProvider from '../helpers/ContextProvider';\nimport { getChatStyling } from '../helpers/StyleComposers';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { CommerceChatStore } from '../helpers';\nimport ChatCore from './ChatCore';\n\nconst INVALID_TOKEN = 'INVALID_TOKEN';\nconst CLOSE_IMG_DATA =\n 'M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4 L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1 c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1 c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z';\n\n/**\n * Outer chat component, displays chat button, and proactive chat, and handles custom actions\n * @param props IPvaChatConnectorViewProps\n */\nconst Chat: FunctionComponent = (props: IPvaChatConnectorViewProps) => {\n const [loaded, setLoaded] = useState(false); // loaded & minimized are needed as ChatWidget should not be removed from DOM (it resets chat)\n const [minimized, setMinimized] = useState(true);\n const [newMessage, setNewMessage] = useState(false); // TODO: use this to indicate new message in minimized chat\n const [token, setToken] = useState(''); // holds conversation token for WebChat\n const [isProactive, setIsProactive] = useState(false); // if proactive chat is triggered\n const [proactiveMessage, setProactiveMessage] = useState(props.config.proactiveDefaultMessage);\n const [closed, setClosed] = useState(false);\n const [provider, setProvider] = useState();\n const isMobileDevice =\n isMobile({ variant: VariantType.Browser, context: props.context.request }) === 'xs' ||\n isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n const chatStyle = getChatStyling(props.config, minimized, isMobileDevice); // generates chat style objects based on configuration\n const handleMaximizeButtonClick = () => {\n setLoaded(true);\n setMinimized(false);\n setNewMessage(false);\n };\n const handleMinimizeButtonClick = () => {\n setMinimized(true);\n setNewMessage(false);\n };\n const handleCloseButtonClick = () => {\n setClosed(true);\n setLoaded(false);\n setMinimized(true);\n setNewMessage(false);\n setIsProactive(false);\n };\n useEffect(() => {\n if (loaded) {\n CommerceChatStore.getDirectLineToken(props)\n .then(directLineToken => {\n setToken(directLineToken);\n })\n .catch(e => {\n setToken(INVALID_TOKEN);\n props.telemetry.exception(e);\n });\n }\n }, [loaded]);\n useEffect(() => {\n (async () => {\n const contextProvider = new ContextProvider(props); // Generates context (provider) and checks for proactive chat triggers\n const prov = await contextProvider.init();\n if (contextProvider.data.enabled) {\n props.context.telemetry.debug(`[Chat] Proactive chat was enabled: '${contextProvider.data.enabled}'.`);\n // if proactive chat is triggered\n const timeout = contextProvider.data.timeout * 1000; // timeout is there only for WaitOnTime trigger\n setTimeout(() => {\n if (!loaded) {\n props.context.telemetry.debug(`[Chat] Proactive chat was loaded: ${loaded}.`);\n setProactiveMessage(contextProvider.data.message);\n setIsProactive(true);\n }\n }, timeout);\n }\n setProvider(() => prov);\n })().catch(e => props.telemetry.exception(e));\n }, []);\n useEffect(() => {\n if (closed) {\n setClosed(false);\n }\n }, [token, provider]);\n const isValidToken = (): boolean => {\n return `${token}` !== INVALID_TOKEN;\n };\n return (\n \n {minimized && (!isProactive || (isProactive && loaded)) && (\n \n )}\n {minimized && isProactive && !loaded && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n
\n
\n

{proactiveMessage}

\n \n
\n
\n )}\n {loaded && isValidToken() && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n \n
\n
\n \n
\n
\n )}\n {!isValidToken() &&
{props.config.unableToLoadChatMessage}
}\n
\n );\n};\n\nexport default Chat;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport Chat from './components/Chat';\nimport { IPvaChatConnectorViewProps } from './msdyn365-pva-chat-connector';\n\nexport default (props: IPvaChatConnectorViewProps) => {\n // Only for CDN loading check, won't be needed with npm package of Botframework-WebChat\n const [loaded, setLoaded] = React.useState(false);\n const p = {\n ...props\n };\n\n // Just to verify that CDN Chat Widget js lib is loaded\n // Remove this block if moving to npm package of Botframework-WebChat\n const interval = setInterval(() => {\n const t = typeof window;\n if (t !== 'undefined' && window.WebChat) {\n setLoaded(true);\n clearInterval(interval);\n }\n }, 100);\n\n return
{loaded && }
;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLoadingIcon {\n className: string;\n}\n\nconst AccountProfileEditLoadingIcon: React.FC = ({ className }) => (\n
\n);\n\nexport default AccountProfileEditLoadingIcon;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n// @ts-ignore\r\nimport {ICartLineItemViewProps, ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors} from \"@msdyn365-commerce-modules/cart\";\r\nimport { IInvoiceSummaryLines } from \"@msdyn365-commerce-modules/invoice-payment-summary\";\r\nimport { IOrderSummaryLines } from \"@msdyn365-commerce-modules/order-summary-utilities\";\r\nimport { ArrayExtensions } from \"@msdyn365-commerce-modules/retail-actions\";\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n ITelemetryContent,\r\n Node,\r\n TelemetryConstant\r\n} from \"@msdyn365-commerce-modules/utilities\";\r\nimport * as React from \"react\";\r\n\r\nimport { ICartProps as ICartExtensionProps } from \"../definition-extensions/cart.ext.props.autogenerated\";\r\n\r\n/**\r\n * Toggle Bopis Function.\r\n * @param cartLine -CartLine.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Toggle Bopis.\r\n */\r\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * Change Store Function.\r\n * @param cartLine -CartLine.\r\n * @returns Toggle Bopis.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const {\r\n shipInsteadDisplayText,\r\n shipToAddressDisplayText,\r\n pickItUpDisplayText,\r\n pickUpAtStoreWithLocationText,\r\n changeStoreDisplayText\r\n } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject(\"click\", telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n
\r\n {isBopisSelected ? \r\n {pickUpAtStoreWithLocationText}\r\n : \r\n {shipToAddressDisplayText}\r\n }\r\n
\r\n {\r\n isBopisSelected &&\r\n
\r\n \r\n {cartLine.pickUpInStore.orgUnitName}\r\n \r\n \r\n {changeStoreDisplayText}\r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderGroupBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject(\"click\", telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ?\r\n : null}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n \r\n );\r\n};\r\n\r\nconst renderCartLineComment = (cartLineComment: React.ReactNode, comment: string, cartLineId: string, cartProductTitle?: string) => {\r\n if (!cartLineComment) {\r\n return null;\r\n }\r\n return React.cloneElement(cartLineComment[0] as React.ReactElement, { comment, cartLineId, cartProductTitle})\r\n}\r\n\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param cartLineComment - Cart line comment element\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLine = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n cartLineComment: React.ReactNode | undefined, telemetryContent?: ITelemetryContent,\r\n isMultiplePickUp?: boolean, emailDeliveryModeCode?: string): JSX.Element => {\r\n const comment = cartLine.data?.cartline.Comment || '';\r\n const cartLineProductTitle = cartLine.data?.product?.Name;\r\n if (cartLine.error === resources.outOfStockErrorMessage) {\r\n return (\r\n \r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n if (isMultiplePickUp) {\r\n return (\r\n \r\n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n if (cartLine.addToOrderTemplate) {\r\n return (\r\n \r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlinesInternal = (isPrintView: boolean, cartLines: ICartlinesViewProps[], resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, cartLineComment: React.ReactNode | undefined, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n return (\r\n cartLines.map((cartLine, index) => {\r\n const itemIndex = index;\r\n return (\r\n
\r\n {cartLine.cartline}\r\n \r\n {isMultiplePickUp ? null : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {\r\n renderCartLine(cartLine, resources, storeSelector, cartLineComment, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n }\r\n \r\n
\r\n );\r\n }));\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param props - The cart line props.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param waitingComponent - Waiting component element.\r\n * @param cartLoadingStatus - Cart loading status string.\r\n * @param isCartDataResult - Flag to check if there is cart data.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (isPrintView: boolean, props: ICartViewProps & ICartExtensionProps<{}>, cartLines: ICartlinesViewProps[] | undefined, resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string, isCartDataResult: boolean, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n const { slots: { cartLineComment, orderLevelComment } } = props;\r\n if (cartLoadingStatus) {\r\n return (<>\r\n {cartLoadingStatus}\r\n );\r\n }\r\n\r\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\r\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\r\n if (cartLines) {\r\n return props.multiplePickUpEnabled ? (\r\n renderCartlinesInternal(isPrintView, cartLines, resources, storeSelector, cartLineComment, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n ) : (\r\n \r\n {renderCartlinesInternal(isPrintView, cartLines, resources, storeSelector, cartLineComment, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\r\n {renderOrderLevelComment(isPrintView, orderLevelComment)}\r\n \r\n );\r\n }\r\n\r\n return (isCartDataResult ? (\r\n
\r\n
\r\n {props.slots.emptyCart}\r\n
\r\n
\r\n ) : <>\r\n {waitingComponent}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const itemCountOne: number = 1;\r\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\r\n const countTitle = `(${count} ${suffix})`;\r\n return (\r\n <>\r\n \r\n {isBopisSelected ?

\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {\", \"}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n

: null}\r\n

\r\n {countTitle}\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupHeader = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number, emailDeliveryModeCode?: string) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n
\r\n \r\n

\r\n {groupTitle}\r\n

\r\n {renderCartLinesGroupTitle(cartLine, resources, count)}\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Returns count of products.\r\n * @param cartLine - The cart line view props.\r\n * @returns Number of products.\r\n */\r\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n const defaultItemCount = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\r\n\r\n }, defaultItemCount);\r\n return countItem;\r\n};\r\n\r\n/**\r\n * Render Cart Lines group.\r\n * @param props - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroup = (isPrintView: boolean, props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\r\n return (\r\n
\r\n {props.cartLinesGroup.map(cartlines => {\r\n return (
\r\n {renderCartLinesGroupHeader(cartlines[0], resources, countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n {renderCartlines(isPrintView, props, cartlines, props.resources, props.storeSelector,\r\n props.waitingComponent, props.cartLoadingStatus, props.cartDataResult,\r\n props.telemetryContent, props.multiplePickUpEnabled, props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n
);\r\n })}\r\n
\r\n );\r\n }\r\n return (props.cartDataResult ? (\r\n
\r\n
\r\n {props.slots.emptyCart}\r\n
\r\n
\r\n ) : <>\r\n {props.waitingComponent}\r\n \r\n );\r\n\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param errorData - Error component.\r\n * @returns JSX Element.\r\n */\r\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\r\n return null;\r\n }\r\n return (\r\n \r\n {errorData.header}\r\n {errorData.errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render invoice summary.\r\n * @param invoiceSummaryLines - Invoice summary component.\r\n * @param orderSummaryItems - Order summary component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderInvoiceSummarylines = (invoiceSummaryLines: IInvoiceSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error(\"InvoiceSummary content is empty, module wont render\");\r\n return null;\r\n }\r\n return (\r\n \r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary.\r\n * @param orderSummaryLines - Order summary component.\r\n * @param orderSummaryItems - Order summary items component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummarylines = (orderSummaryLines: IOrderSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n props.context.telemetry.error(\"OrderSummary content is empty, module wont render\");\r\n return null;\r\n }\r\n return (\r\n \r\n {orderSummaryLines.subtotal}\r\n {/* {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null} */}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param promotions - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n \r\n {promotions.promotionMessage}\r\n \r\n {promotions.promotionSeeAllLink}\r\n \r\n {promotions.promotionDialog}\r\n \r\n\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n \r\n {props.cart?.hasInvoiceLine ? null : props.promoCode}\r\n \r\n {/* {props.checkoutAsSignInUserButton} */}\r\n {props.checkoutAsGuestButton}\r\n \r\n {props.createTemplateFromCartButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout button.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n \r\n {/* {props.checkoutAsSignInUserButton} */}\r\n {props.checkoutAsGuestButton}\r\n \r\n );\r\n};\r\n\r\nconst _renderPrintView = (isPrintView: boolean,\r\n handlePrintViewChange: (e: React.MouseEventHandler) => void,\r\n printViewLabel: string\r\n): React.ReactNode => (\r\n
\r\n \r\n\r\n\r\n
\r\n);\r\n\r\n/**\r\n * Renders the order-level-comment that displays a comment at the bottom of the cart.\r\n */\r\n\r\nconst renderOrderLevelComment = (isPrintView: boolean, orderLevelComment: React.ReactNode | undefined): React.ReactNode => {\r\n if (!orderLevelComment) {\r\n return null;\r\n }\r\n return(\r\n
\r\n {orderLevelComment}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render cart view.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\r\n\r\n const handlePrintViewChange = () => setIsPrintView(!isPrintView);\r\n const [isPrintView, setIsPrintView] = React.useState(false);\r\n const printViewToggle = _renderPrintView(isPrintView, handlePrintViewChange, \"Print View\");\r\n const totalItemCountOne: number = 1;\r\n const updatedTitle = (\r\n

\r\n {props.resources.cartTitle}\r\n \r\n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? \"items\" : \"item\"})`}\r\n \r\n

\r\n );\r\n return (\r\n
\r\n {updatedTitle}\r\n
\r\n {props.orderSummaryLineitems?.orderTotal}\r\n
\r\n {renderOrderSummaryCheckoutButton(props)}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? renderCartLinesGroup(isPrintView, props, props.resources) : renderCartlines(isPrintView, props, props.cartlines,\r\n props.resources, props.storeSelector, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult)}\r\n {props.orderSummaryHeading &&\r\n \r\n {printViewToggle}\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine ? renderInvoiceSummarylines(\r\n props.invoiceSummaryLineitems, props.OrderSummaryItems, props) : renderOrderSummarylines(\r\n props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {renderErrorBlock(props.OrderSummaryErrors)}\r\n \r\n {renderOrderSummaryCheckout(props)}\r\n }\r\n {props.storeSelector}\r\n
\r\n );\r\n};\r\n\r\nexport default CartView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IGroup,\n IGroupDelivery,\n IGroups,\n IHeader,\n IList,\n IOrderHistoryViewProps,\n IOrderInformation,\n ISalesOrder\n} from '@msdyn365-commerce-modules/order-management';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport const OrderHistoryOrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n receiptId,\n channelName,\n createdDate,\n count,\n amount,\n channelReferenceId\n}) => (\n \n {channelName}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n \n);\n\nexport const OrderHistoryGroupDelivery: React.FC = ({\n deliveryProps,\n heading,\n count,\n processing,\n address,\n trackingInfo\n}) => (\n \n {heading}\n {count}\n {processing}\n {address}\n {trackingInfo}\n \n);\n\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\n \n {salesLines && (\n \n {salesLines.map(salesLine => (\n {salesLine.salesLine}\n ))}\n \n )}\n \n);\n\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\n \n {heading}\n {orderCountLabel}\n {extraActions}\n \n);\n\nexport const OrderHistorySalesOder: React.FC = ({\n salesOrderProps,\n orderInfomation,\n groups,\n orderDetailsLink,\n expandProductsButton\n}) => (\n \n
\n {orderInfomation.placedBy && {orderInfomation.placedBy}}\n
{orderInfomation && }
\n
\n {groups && }\n {expandProductsButton}\n {orderDetailsLink}\n
\n);\n\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\n \n {salesOrders && salesOrders.map((salesOrder, index) => )}\n \n);\n\nconst OrderHistoryView: React.FC = ({\n orderHistoryProps,\n header,\n alert,\n loading,\n emptyMessage,\n backToShoppingLink,\n list,\n table,\n moreButton\n}) => (\n \n {header && }\n {loading}\n {alert && (\n <>\n {alert}\n {backToShoppingLink}\n \n )}\n {emptyMessage && (\n \n {emptyMessage}\n {backToShoppingLink}\n \n )}\n {list && }\n {table}\n {moreButton && moreButton}\n \n);\n\nexport default OrderHistoryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditButton {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n telemetryContent?: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nconst AccountProfileEditButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n disabled,\n telemetryContent,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default AccountProfileEditButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IComponentNodeProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ITileListProps, ITitleData } from './tile-list.props.autogenerated';\n\n/**\n * Tile-list view props.\n */\nexport interface ITileListViewProps extends ITileListProps<{}> {\n title?: React.ReactNode;\n tiles: React.ReactNode[];\n tileItemContainer: INodeProps;\n tileListContainer: INodeProps;\n tileListHeading: INodeProps;\n singleSlideCarouselComponentProps: INodeProps;\n}\n\n/**\n *\n * TileList component.\n * @extends {React.PureComponent>}\n */\nexport class TileList extends React.PureComponent> {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n private static _createHeading(heading?: ITitleData): React.ReactNode | null {\n if (!heading || !heading.text || StringExtensions.isNullOrWhitespace(heading.text)) {\n return null;\n }\n return ;\n }\n public constructor(props: ITileListProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { title, className } = this.props.config;\n const propsCarousel: IComponentNodeProps = {\n tag: SingleSlideCarousel,\n className: this.props.config.className ?? '',\n flipperPrevLabel: resources.flipperPrevious,\n flipperNextLabel: resources.flipperNext,\n parentId: this.props.id,\n telemetryContent: this._telemetryContent,\n vertical: false\n };\n\n const viewProps = {\n ...this.props,\n title: TileList._createHeading(title),\n singleSlideCarouselComponentProps: propsCarousel,\n tileItemContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-tile__item',\n role: 'listitem'\n },\n tileListContainer: { className: classnames('ms-tile-list', className) },\n tileListHeading: { className: 'ms-tile-list__heading' },\n tiles: this.props.slots.content\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default TileList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLabel {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nconst AccountProfileEditLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default AccountProfileEditLabel;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n// @ts-ignore\r\nimport {ICartLineItemViewProps, ICartlinesViewProps, ICartViewProps, IOrderSummaryErrors} from \"@msdyn365-commerce-modules/cart\";\r\nimport { IInvoiceSummaryLines } from \"@msdyn365-commerce-modules/invoice-payment-summary\";\r\nimport { IOrderSummaryLines } from \"@msdyn365-commerce-modules/order-summary-utilities\";\r\nimport { ArrayExtensions } from \"@msdyn365-commerce-modules/retail-actions\";\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n ITelemetryContent,\r\n Node,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n ModalHeader,\r\n TelemetryConstant\r\n} from \"@msdyn365-commerce-modules/utilities\";\r\nimport * as React from \"react\";\r\n\r\nimport { ICartProps as ICartExtensionProps, ICartResources } from \"../definition-extensions/cart.ext.props.autogenerated\";\r\nimport { getAdvancedNotesAsync } from \"../../../actions/DataActionExtension.g\";\r\nimport { IAdvancedNoteEntity } from \"../../../actions/DataServiceEntities.g\";\r\nimport { LinePagination } from './components/line-pagination';\r\n\r\n/**\r\n * Toggle Bopis Function.\r\n * @param cartLine -CartLine.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Toggle Bopis.\r\n */\r\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * Change Store Function.\r\n * @param cartLine -CartLine.\r\n * @returns Toggle Bopis.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const {\r\n shipInsteadDisplayText,\r\n shipToAddressDisplayText,\r\n pickItUpDisplayText,\r\n pickUpAtStoreWithLocationText,\r\n changeStoreDisplayText\r\n } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject(\"click\", telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n
\r\n {isBopisSelected ? \r\n {pickUpAtStoreWithLocationText}\r\n : \r\n {shipToAddressDisplayText}\r\n }\r\n
\r\n {\r\n isBopisSelected &&\r\n
\r\n \r\n {cartLine.pickUpInStore.orgUnitName}\r\n \r\n \r\n {changeStoreDisplayText}\r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderGroupBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject(\"click\", telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ?\r\n : null}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n \r\n );\r\n};\r\n\r\nconst renderCartLineComment = (cartLineComment: React.ReactNode, comment: string, cartLineId: string, cartProductTitle?: string) => {\r\n if (!cartLineComment) {\r\n return null;\r\n }\r\n return React.cloneElement(cartLineComment[0] as React.ReactElement, { comment, cartLineId, cartProductTitle})\r\n}\r\n\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param cartLineComment - Cart line comment element\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLine = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n cartLineComment: React.ReactNode | undefined, advancedNotes: React.ReactNode | undefined, telemetryContent?: ITelemetryContent,\r\n isMultiplePickUp?: boolean, emailDeliveryModeCode?: string): JSX.Element => {\r\n const comment = cartLine.data?.cartline.Comment || '';\r\n const cartLineProductTitle = cartLine.data?.product?.Name;\r\n if (cartLine.error === resources.outOfStockErrorMessage) {\r\n return (\r\n \r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n if (isMultiplePickUp) {\r\n return (\r\n \r\n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n if (cartLine.addToOrderTemplate) {\r\n return (\r\n \r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlinesInternal = (notes: IAdvancedNoteEntity[], isPrintView: boolean, cartLines: ICartlinesViewProps[], resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, cartLineComment: React.ReactNode | undefined, advancedNotes: React.ReactNode | undefined, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n return (\r\n cartLines.map((cartLine, index) => {\r\n const itemIndex = index;\r\n const itemId = cartLine.data?.product?.ItemId || '';\r\n return (\r\n
\r\n {cartLine.cartline}\r\n \r\n {isMultiplePickUp ? null : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {\r\n renderCartLine(cartLine, resources, storeSelector, cartLineComment, advancedNotes, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n }\r\n \r\n {renderAdvancedNotes(isPrintView, advancedNotes, notes.filter(n => n.ItemId === itemId))}\r\n
\r\n );\r\n }));\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param props - The cart line props.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param waitingComponent - Waiting component element.\r\n * @param cartLoadingStatus - Cart loading status string.\r\n * @param isCartDataResult - Flag to check if there is cart data.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (notes: IAdvancedNoteEntity[], isPrintView: boolean, props: ICartViewProps & ICartExtensionProps<{}>, cartLines: ICartlinesViewProps[] | undefined, resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string, isCartDataResult: boolean, pagination: React.ReactNode,\r\n paginatedView: ICartlinesViewProps[] | undefined,telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n const { slots: { cartLineComment, orderLevelComment, advancedNotes } } = props;\r\n if (cartLoadingStatus) {\r\n return (<>\r\n {cartLoadingStatus}\r\n );\r\n }\r\n\r\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\r\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\r\n // if (cartLines) {\r\n if (paginatedView) {\r\n return props.multiplePickUpEnabled ? (\r\n <>\r\n {pagination}\r\n {renderCartlinesInternal(notes, isPrintView, /*cartLines*/ paginatedView, resources, storeSelector, cartLineComment, advancedNotes, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\r\n {pagination}\r\n {renderOrderLevelComment(isPrintView, orderLevelComment)}\r\n \r\n ) : (\r\n <>\r\n \r\n {/*
*/}\r\n {/* {renderCartlinesInternal(notes, isPrintView, cartLines, resources, storeSelector, cartLineComment, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}*/}\r\n {/*
*/}\r\n {pagination}\r\n {renderCartlinesInternal(notes, isPrintView, /*cartLines*/ paginatedView, resources, storeSelector, cartLineComment, advancedNotes, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\r\n {pagination}\r\n {renderOrderLevelComment(isPrintView, orderLevelComment)}\r\n
\r\n \r\n );\r\n }\r\n\r\n return (isCartDataResult ? (\r\n
\r\n
\r\n {props.slots.emptyCart}\r\n
\r\n
\r\n ) : <>\r\n {waitingComponent}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const itemCountOne: number = 1;\r\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\r\n const countTitle = `(${count} ${suffix})`;\r\n return (\r\n <>\r\n \r\n {isBopisSelected ?

\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {\", \"}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n

: null}\r\n

\r\n {countTitle}\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupHeader = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number, emailDeliveryModeCode?: string) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n
\r\n \r\n

\r\n {groupTitle}\r\n

\r\n {renderCartLinesGroupTitle(cartLine, resources, count)}\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Returns count of products.\r\n * @param cartLine - The cart line view props.\r\n * @returns Number of products.\r\n */\r\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n const defaultItemCount = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\r\n\r\n }, defaultItemCount);\r\n return countItem;\r\n};\r\n\r\n/**\r\n * Render Cart Lines group.\r\n * @param props - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroup = (advancedNotes: IAdvancedNoteEntity[], isPrintView: boolean, props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources,\r\n pagination: React.ReactNode,\r\n paginatedView: ICartlinesViewProps[] | undefined): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\r\n return (\r\n
\r\n {props.cartLinesGroup.map(cartlines => {\r\n return (
\r\n {renderCartLinesGroupHeader(cartlines[0], resources, countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n {renderCartlines(advancedNotes, isPrintView, props, cartlines, props.resources, props.storeSelector,\r\n props.waitingComponent, props.cartLoadingStatus, props.cartDataResult,\r\n pagination,\r\n paginatedView,props.telemetryContent, props.multiplePickUpEnabled, props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n
);\r\n })}\r\n
\r\n );\r\n }\r\n return (props.cartDataResult ? (\r\n
\r\n
\r\n {props.slots.emptyCart}\r\n
\r\n
\r\n ) : <>\r\n {props.waitingComponent}\r\n \r\n );\r\n\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param errorData - Error component.\r\n * @returns JSX Element.\r\n */\r\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\r\n return null;\r\n }\r\n return (\r\n \r\n {errorData.header}\r\n {errorData.errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render invoice summary.\r\n * @param invoiceSummaryLines - Invoice summary component.\r\n * @param orderSummaryItems - Order summary component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderInvoiceSummarylines = (invoiceSummaryLines: IInvoiceSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error(\"InvoiceSummary content is empty, module wont render\");\r\n return null;\r\n }\r\n return (\r\n \r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary.\r\n * @param orderSummaryLines - Order summary component.\r\n * @param orderSummaryItems - Order summary items component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummarylines = (orderSummaryLines: IOrderSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n props.context.telemetry.error(\"OrderSummary content is empty, module wont render\");\r\n return null;\r\n }\r\n return (\r\n \r\n {orderSummaryLines.subtotal}\r\n {/* {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null} */}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param promotions - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n \r\n {promotions.promotionMessage}\r\n \r\n {promotions.promotionSeeAllLink}\r\n \r\n {promotions.promotionDialog}\r\n \r\n\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckout = (props: ICartViewProps, renderClearCart: React.ReactNode): JSX.Element | undefined => {\r\n return (\r\n \r\n {props.cart?.hasInvoiceLine ? null : props.promoCode}\r\n \r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n \r\n {props.createTemplateFromCartButton}\r\n {renderClearCart}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Renders the clear cart button on the page. Clicking the button triggers the modal to confirm the action.\r\n *\r\n * @param {(e: React.SetStateAction) => void} setClearCartModalActive\r\n * @param {ICartResources} resources\r\n * @return {*} {React.ReactNode}\r\n */\r\nconst _renderClearCart = (\r\n setClearCartModalActive: (e: React.SetStateAction) => void,\r\n resources: ICartResources\r\n): React.ReactNode => (\r\n
\r\n setClearCartModalActive(true)}\r\n >\r\n {resources.clearCartButtonText}\r\n \r\n
\r\n);\r\n\r\n/**\r\n* Modal which is responsible for verifying the clear cart intention. Can either be dismissed or confirmed. If confirmed, will clear the cart.\r\n*\r\n* @param {(e: React.MouseEvent) => void} handleClearCart\r\n* @param {(e: React.SetStateAction) => void} setClearCartModalActive\r\n* @param {() => void} toggle\r\n* @param {boolean} clearCartModalActive\r\n* @param {ICartResources} resources\r\n* @return {*}\r\n*/\r\nconst _renderClearCartModal = (\r\n handleClearCart: (e: React.MouseEvent) => void,\r\n setClearCartModalActive: (e: React.SetStateAction) => void,\r\n toggle: () => void,\r\n clearCartModalActive: boolean,\r\n resources: ICartResources\r\n) => {\r\n const clearCartClassName = 'clearcart';\r\n\r\n /**\r\n * Renders the button area\r\n */\r\n const _renderButtonArea = (): React.ReactNode => (\r\n
\r\n \r\n \r\n
\r\n );\r\n\r\n return (\r\n \r\n {resources.clearCartHeader}\r\n {resources.clearConfirmBody}\r\n {_renderButtonArea()}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout button.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n \r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n \r\n );\r\n};\r\n\r\nconst _renderPrintView = (isPrintView: boolean,\r\n handlePrintViewChange: (e: React.MouseEventHandler) => void,\r\n printViewLabel: string\r\n): React.ReactNode => (\r\n
\r\n \r\n\r\n\r\n
\r\n);\r\n\r\n/**\r\n * Renders the advanced-notes that display all of the associated notes for each cart line item at the bottom of the item in the cart.\r\n */\r\n\r\nconst renderAdvancedNotes = (isPrintView: boolean, advancedNotes: React.ReactNode, notes: IAdvancedNoteEntity[]): React.ReactNode => {\r\n\r\n if (!advancedNotes) {\r\n return null;\r\n }\r\n\r\n return(\r\n
\r\n {React.cloneElement(advancedNotes[0] as React.ReactElement, { notes })}\r\n
\r\n )\r\n}\r\n\r\n/**\r\n * Renders the order-level-comment that displays a comment at the bottom of the cart.\r\n */\r\n\r\nconst renderOrderLevelComment = (isPrintView: boolean, orderLevelComment: React.ReactNode | undefined): React.ReactNode => {\r\n if (!orderLevelComment) {\r\n return null;\r\n }\r\n\r\n return(\r\n
\r\n {orderLevelComment}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render cart view.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\r\n\r\n const handlePrintViewChange = () => setIsPrintView(!isPrintView);\r\n const [isPrintView, setIsPrintView] = React.useState(false);\r\n const [advancedNotes, setAdvancedNotes] = React.useState(undefined);\r\n const printViewToggle = _renderPrintView(isPrintView, handlePrintViewChange, \"Print View\");\r\n const totalItemCountOne: number = 1;\r\n const defaultPageLength: number = 5;\r\n const updatedTitle = (\r\n

\r\n {props.resources.cartTitle}\r\n \r\n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? \"items\" : \"item\"})`}\r\n \r\n

\r\n );\r\n const getAdvancedNotes = async (): Promise => {\r\n const itemIds = props.cart?.cart.CartLines?.map(cl => cl.ItemId!) || [];\r\n if (!itemIds.length) {\r\n return;\r\n }\r\n getAdvancedNotesAsync({ callerContext: props.context.actionContext }, itemIds)\r\n .then(notes => {\r\n setAdvancedNotes(notes || []);\r\n })\r\n }\r\n\r\n const pageLength = props.config.pageLength || defaultPageLength;\r\n\r\n const [paginatedView, setPaginatedView] = React.useState(\r\n props.cartlines && props.cartlines.length >= pageLength ? props.cartlines.slice(0, pageLength) : props.cartlines\r\n );\r\n const [paginationPage, setPaginationPage] = React.useState(0);\r\n const [clearCartModalActive, setClearCartModalActive] = React.useState(false);\r\n\r\n const handleClearCart = () => {\r\n const cart = props.cart;\r\n const cartlines = cart?.cart.CartLines;\r\n\r\n if (cart && cartlines) {\r\n let ids = { cartLineIds: Array() };\r\n cartlines.map(c => (c.LineId ? ids.cartLineIds.push(c.LineId) : null));\r\n cart.removeCartLines(ids);\r\n setClearCartModalActive(false);\r\n cart.refreshCart({});\r\n }\r\n };\r\n\r\n /**\r\n * Utility class to easily go up one page\r\n */\r\n const nextPage = () => {\r\n changePage(paginationPage + 1);\r\n};\r\n\r\n/**\r\n * Utility class to easily go down one page\r\n */\r\nconst prevPage = () => {\r\n changePage(paginationPage - 1);\r\n};\r\n\r\n/**\r\n * Update the state of @const paginationPage and @const paginatedView to the given page, folliowing some logic\r\n * to prevent the page from going into the negatives or beyond the maximum page length.\r\n *\r\n * @param {number} page\r\n * @return {*}\r\n */\r\nconst changePage = (page: number) => {\r\n if (page < 0) {\r\n return;\r\n }\r\n\r\n if (props.cartlines && page >= props.cartlines.length / pageLength) {\r\n page = props.cartlines.length / pageLength - 1;\r\n }\r\n\r\n let skip = page * pageLength;\r\n if (props.cartlines && props.cartlines.length >= skip) {\r\n setPaginationPage(page);\r\n let slice = props.cartlines?.slice(skip);\r\n setPaginatedView(slice.length >= pageLength ? slice.slice(0, pageLength) : slice);\r\n }\r\n};\r\n\r\n React.useEffect(() => {\r\n if (!advancedNotes)\r\n void getAdvancedNotes();\r\n }, [props.data])\r\n\r\n React.useEffect(() => {\r\n changePage(paginationPage);\r\n }, props.cartlines);\r\n\r\n const toggle = () => setClearCartModalActive(!clearCartModalActive);\r\n const renderClearCart = _renderClearCart(setClearCartModalActive, props.resources);\r\n\r\n let pagination = (\r\n \r\n );\r\n\r\n return (\r\n
\r\n {updatedTitle}\r\n
\r\n {props.orderSummaryLineitems?.orderTotal}\r\n
\r\n {renderOrderSummaryCheckoutButton(props)}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? renderCartLinesGroup(advancedNotes || [], isPrintView, props, props.resources, pagination, paginatedView) : renderCartlines(advancedNotes || [], isPrintView, props, props.cartlines,\r\n props.resources, props.storeSelector, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult, pagination, paginatedView)}\r\n {props.orderSummaryHeading &&\r\n \r\n {printViewToggle}\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine ? renderInvoiceSummarylines(\r\n props.invoiceSummaryLineitems, props.OrderSummaryItems, props) : renderOrderSummarylines(\r\n props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {renderErrorBlock(props.OrderSummaryErrors)}\r\n \r\n {renderOrderSummaryCheckout(props, renderClearCart)}\r\n }\r\n {props.storeSelector}\r\n {_renderClearCartModal(handleClearCart, setClearCartModalActive, toggle, clearCartModalActive, props.resources)}\r\n
\r\n );\r\n};\r\n\r\nexport default CartView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n *\r\n * FooterItemView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class FooterItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { FooterItem } = this.props;\r\n return (\r\n \r\n {this._renderElement(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\r\n if (heading) {\r\n return (\r\n {' '}\r\n );\r\n } else if (Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n \r\n );\r\n } else if (Link) {\r\n return (EditableLink);\r\n }\r\n return (\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FooterItemView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { ITileListViewProps } from './tile-list';\n\n/**\n * View component.\n * @param props - The view properties.\n * @returns Returns props.\n */\nexport const tileListView: React.FC = props => {\n const { title, tiles, tileListContainer, tileListHeading, tileItemContainer, singleSlideCarouselComponentProps } = props;\n return (\n \n {title}\n \n {tiles.map((tileItem: ReactNode, index: number) => {\n const keyIndex = `tile-list-item__${index}`;\n return (\n \n {tileItem}\n \n );\n })}\n \n \n );\n};\n\nexport default tileListView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nconst AccountProfileEditError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n );\n};\n\nexport default AccountProfileEditError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISearchData, ISearchViewProps } from '@msdyn365-commerce-modules/search';\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Categories heading.\n * @param inCategoriesHeading - The Keywords result heading.\n * @returns The JSX Element.\n */\nconst renderCategorySuggestionsTitle = (inCategoriesHeading: string): JSX.Element => {\n const categoryAutoSuggestionHeading = inCategoriesHeading ? inCategoriesHeading : 'In categories';\n\n return
{categoryAutoSuggestionHeading}
;\n};\n\n/**\n * Render Categories suggestion result.\n * @param inCategoriesHeading - The Categories result heading.\n * @param noResultText - The \"No Result\" text.\n * @param props - The Categories suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns The JSX Element.\n */\nexport const CategorySuggestionsComponent = (\n inCategoriesHeading: string,\n noResultText: string,\n props: ISearchViewProps & ISearchProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n return props.autosuggestCategory ? (\n \n {renderCategorySuggestionsTitle(inCategoriesHeading)}\n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n props.autosuggestCategory.text.map(text => {\n return text;\n })}\n \n \n ) : (\n \n {renderCategorySuggestionsTitle(inCategoriesHeading)}\n \n
  • {noResultText}
  • \n
    \n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, Image } from '@msdyn365-commerce/core';\nimport { ISearchData } from '@msdyn365-commerce-modules/search';\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Products Suggestion result heading.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResultsImage = (props: ISearchProps): JSX.Element | null => {\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\n if (!noSearchResultImage || !noSearchResultImage.src) {\n return null;\n }\n const imageSettings = {\n lazyload: true,\n viewports: {\n xs: { w: 100, h: 100, q: 'w=100&h=100&q=60&m=6' }\n }\n };\n return (\n \n );\n};\n\n/**\n * Render Product suggestion result.\n * @param props -The props.\n * @returns The JSX Element.\n */\nexport const MobileAutoSuggestEmptyComponent = (props: ISearchProps): JSX.Element => {\n return (\n \n
    {renderProductNotFoundResultsImage(props)}
    \n
    \n
    {props.resources.emptyMobileSearchTextHeading}
    \n
    {props.resources.emptyMobileSearchText}
    \n
    \n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISearchData, ISearchFormViewProps } from '@msdyn365-commerce-modules/search';\nimport { Button, INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\nimport { MobileAutoSuggestEmptyComponent } from './search.mobile.empty';\n\n/**\n * Render Clear button for mobile viewport.\n * @param clearSearchButtonText -The Clear button text.\n * @param clearSearch -Clear Search callback.\n * @returns -The JSX Element.\n */\nconst renderClearButton = (clearSearchButtonText: string, clearSearch: () => void): JSX.Element => {\n return (\n \n );\n};\n\n/**\n * Render Search form.\n * @param form -Form view props.\n * @param searchForm -Search Form props.\n * @param formWrapper -Form Wrapper props.\n * @param isMobile -Is mobile viewport flag.\n * @param clearSearchButtonText -The Clear button text.\n * @param props -The props for resource.\n * @param isSearchText -Is SearchText flag for input text.\n * @param clearSearch -Clear Search callback.\n * @returns -The JSX Element.\n */\nexport const FormComponent = (\n form: ISearchFormViewProps,\n searchForm: INodeProps,\n formWrapper: INodeProps,\n isMobile: boolean,\n clearSearchButtonText: string,\n props: ISearchProps,\n isSearchText: boolean,\n clearSearch: () => void\n): JSX.Element => {\n const cancelButtonNode = (\n \n );\n\n return isMobile ? (\n \n {form.cancelBtn}\n \n {form.input}\n {isSearchText && renderClearButton(clearSearchButtonText, clearSearch)}\n {!isSearchText ? MobileAutoSuggestEmptyComponent(props) : null}\n \n \n ) : (\n \n \n {form.submitBtn}\n {form.input}\n {isSearchText && cancelButtonNode}\n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISearchKeywordViewProps } from '@msdyn365-commerce-modules/search';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Render keywords heading.\n * @param keywordsHeading -The Keywords result heading.\n * @returns The JSX Element.\n */\nconst renderKeywordSuggestionsTitle = (keywordsHeading: string): JSX.Element => {\n const categoryAutoSuggestionHeading = keywordsHeading ? keywordsHeading : 'Keywords';\n\n return
    {categoryAutoSuggestionHeading}
    ;\n};\n\n/**\n * Render keywords reults.\n * @param keywordSuggest -The Keywords suggest Node props.\n * @param ulKeyword -The List Node props.\n * @param keywordsHeading -The Keywords result heading.\n * @param noResultText -The \"No Result\" text.\n * @param keywordSuggestions -The Keywords suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns -The JSX Element.\n */\nexport const KeywordSuggestionsComponent = (\n keywordSuggest: INodeProps,\n ulKeyword: INodeProps,\n keywordsHeading: string,\n noResultText: string,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n return keywordSuggestions ? (\n \n {renderKeywordSuggestionsTitle(keywordsHeading)}\n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n \n \n ) : (\n \n {renderKeywordSuggestionsTitle(keywordsHeading)}\n \n
  • {noResultText}
  • \n
    \n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, Image } from '@msdyn365-commerce/core';\nimport { ISearchData, ISearchProductViewProps } from '@msdyn365-commerce-modules/search';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Products Suggestion result heading.\n * @param productSuggestionsHeading -The products suggestion result heading.\n * @returns The JSX Element.\n */\nconst renderProductSuggestionsTitle = (productSuggestionsHeading: string): JSX.Element => {\n const productAutoSuggestionHeading = productSuggestionsHeading ? productSuggestionsHeading : 'Products';\n\n return
    {productAutoSuggestionHeading}
    ;\n};\n\n/**\n * Render Products Suggestion result heading.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResultsImage = (props: ISearchProps): JSX.Element | null => {\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\n if (!noSearchResultImage || !noSearchResultImage.src) {\n return null;\n }\n return (\n \n );\n};\n\n/**\n * Render Products No result section.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResults = (props: ISearchProps): JSX.Element => {\n return (\n \n
    {renderProductNotFoundResultsImage(props)}
    \n
    {props.resources.noResultContentHeadingText}
    \n
    \n {props.resources.noResultContentParagraphText}\n
    \n
    \n );\n};\n\n/**\n * Render Product suggestion result.\n * @param productSuggest -The product suggest Node props.\n * @param ulProduct -The List Node props.\n * @param props -The props.\n * @param productSuggestions -The Product suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns The JSX Element.\n */\nexport const ProductSuggestionsComponent = (\n productSuggest: INodeProps,\n ulProduct: INodeProps,\n props: ISearchProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n const liProduct: INodeProps = {\n tag: 'li',\n className: 'msc-no-result-content'\n };\n return productSuggestions ? (\n \n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n \n \n {item.thumbnail}\n {item.text}\n {item.price}\n \n \n );\n })}\n \n \n ) : (\n \n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\n \n {renderProductNotFoundResults(props)}\n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ISearchData, ISearchFormViewProps, ISearchViewProps } from '@msdyn365-commerce-modules/search';\nimport { Button, format, isMobile, Module, Node, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { ISearchProps } from '../definition-extensions/search.ext.props.autogenerated';\nimport { CategorySuggestionsComponent } from './components/search.categorysuggest';\nimport { FormComponent } from './components/search.form';\nimport { KeywordSuggestionsComponent } from './components/search.keywordsuggest';\nimport { ProductSuggestionsComponent } from './components/search.productsuggest';\n\n/**\n * Render Title for AutoSuggest.\n * @param searchSuggestionHeading -The heading resource string.\n * @param searchText -The search string.\n * @returns -The JSX Element.\n */\nconst renderTitle = (searchSuggestionHeading: string, searchText: string): JSX.Element => {\n const searchTextString = '\"'.concat(searchText.concat('\"'));\n const searchAutoSuggestionHeading = searchSuggestionHeading\n ? format(searchSuggestionHeading, searchTextString)\n : `Search for ${searchTextString}`;\n\n return {searchAutoSuggestionHeading};\n};\n\n/**\n * Search View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst SearchView: React.FC> = (\n props: ISearchViewProps & ISearchProps\n): JSX.Element => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n UlKeyword,\n UlProduct,\n form,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n context,\n isLoadingAutoSuggest,\n isLoadingNode,\n callbacks: { handleCancelSearchFocused }\n } = props;\n\n const { searchSuggestionHeading, categorySuggestionHeading, keywordsHeading, noResultText, clearSearchButtonText } = props.resources;\n\n const [searchTextString, setSearchTextString] = useState();\n const [isMobilePort, setIsMobile] = useState(false);\n\n useEffect(() => {\n setSearchTextString(searchText);\n }, [searchText]);\n\n /**\n * ClearSearch callback method to clear search string.\n */\n const clearSearch = (): void => {\n setSearchTextString('');\n\n const propsForm = props.form as ISearchFormViewProps;\n const propsFormInput = propsForm.input as React.DetailedHTMLProps, HTMLInputElement>;\n const propsFormInputCurrent = (propsFormInput.ref as React.RefObject).current;\n\n if (propsFormInputCurrent) {\n propsFormInputCurrent.value = '';\n }\n\n propsFormInput.value = '';\n props.searchText = '';\n props.FormWrapper.action = '';\n };\n\n const isMobileViewport = useCallback(() => {\n const isMobileView = isMobile({ variant: VariantType.Browser, context: context.request }) === 'xs';\n setIsMobile(isMobileView);\n }, [context]);\n\n useEffect(() => {\n window.addEventListener('resize', isMobileViewport);\n isMobileViewport();\n }, [isMobileViewport]);\n\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\n\n const isMobileView = viewport === 'sm' || viewport === 'xs';\n\n AutoSuggest.className = !StringExtensions.isNullOrEmpty(searchTextString)\n ? `${AutoSuggest.className} show`\n : `${AutoSuggest.className} hide`;\n const isSearchText: boolean = !StringExtensions.isNullOrEmpty(searchTextString);\n\n return (\n \n {label}\n {FormComponent(\n form as ISearchFormViewProps,\n SearchForm,\n FormWrapper,\n isMobilePort,\n clearSearchButtonText,\n props,\n isSearchText,\n clearSearch\n )}\n {!isMobileView && (\n \n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n {AutoSuggestAriaLabelText}\n ) : (\n ''\n )}\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n <>\n \n \n {renderTitle(searchSuggestionHeading, searchText)}\n \n \n \n {CategorySuggestionsComponent(\n categorySuggestionHeading,\n noResultText,\n props,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n {KeywordSuggestionsComponent(\n KeywordSuggest,\n UlKeyword,\n keywordsHeading,\n noResultText,\n autosuggestKeyword,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n \n {ProductSuggestionsComponent(\n ProductSuggest,\n UlProduct,\n props,\n autosuggestProduct,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n \n \n ) : null}\n \n )}\n {isMobileView && props.isSearchFormExpanded && (\n \n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n {AutoSuggestAriaLabelText}\n ) : (\n ''\n )}\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n <>\n \n {(form as ISearchFormViewProps).cancelBtn}\n {renderTitle(searchSuggestionHeading, searchText)}\n \n \n \n {CategorySuggestionsComponent(\n categorySuggestionHeading,\n noResultText,\n props,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n {KeywordSuggestionsComponent(\n KeywordSuggest,\n UlKeyword,\n keywordsHeading,\n noResultText,\n autosuggestKeyword,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n \n {ProductSuggestionsComponent(\n ProductSuggest,\n UlProduct,\n props,\n autosuggestProduct,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n \n \n ) : null}\n \n )}\n \n );\n};\nexport default SearchView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IAccountProfileEditItem,\n IAccountProfileEditLoading,\n IAccountProfileEditLocalAccount,\n IAccountProfileEditViewProps\n} from './account-profile-edit';\n\nconst AccountProfileEditItem: React.FC = ({ wrapper, label, errorMessage, input }) => {\n return (\n \n {label}\n {errorMessage}\n {input}\n \n );\n};\n\nconst LocalAccount: React.FC = ({\n localAccount,\n items,\n errorMessage,\n buttonsWrapper,\n buttons,\n verificationSuccessModal,\n verificationSuccessModalMessage\n}) => {\n return (\n \n {items &&\n items.map((item: IAccountProfileEditItem) => {\n // eslint-disable-next-line react/jsx-key\n return ;\n })}\n {errorMessage &&\n errorMessage.map((error: React.ReactNode, index: number) => {\n return {error};\n })}\n \n {buttons &&\n buttons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n \n\n \n \n \n \n );\n};\n\nconst AccountProfileEditLoading: React.FC = ({ modal, modalBody, icon, message }) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\n\nconst AccountProfileEditView: React.FC = props => {\n const { accountProfileEdit, viewState, loading, defaultAADConainer, aadConainer, heading, accountProfileEditLocalAccount } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n {heading}\n {LocalAccount(accountProfileEditLocalAccount)}\n \n \n );\n};\n\nexport default AccountProfileEditView;\n","import React from 'react';\r\n// import { ICartResources } from '../../definition-extensions/cart.ext.props.autogenerated';\r\n// import { ICheckoutResources } from '../../definition-extensions/checkout.ext.props.autogenerated';\r\n\r\n\r\ninterface ILinePaginationProps {\r\n nextPage: (e: React.MouseEvent) => void,\r\n prevPage: (e: React.MouseEvent) => void,\r\n changePage: (page: number) => void,\r\n currentPage: number,\r\n numPages: number,\r\n prev: string,\r\n next: string\r\n}\r\n\r\n/**\r\n * Renders pagination navigation on the page, which displays 4 buttons that allow\r\n * user to navigate to the first, last, next or previous pages. Also displays \r\n * the current page out of the total number of pages. ( ie. 5/7 )\r\n *\r\n * @param {(e: React.MouseEvent) => void} nextPage\r\n * @param {(e: React.MouseEvent) => void} prevPage\r\n * @param {(page: number) => void} changePage\r\n * @param {number} currentPage\r\n * @param {number} numPages\r\n * @param {ICartResources} resources\r\n * @return {*} {React.ReactNode}\r\n */\r\nexport const LinePagination : React.FC = ({\r\n nextPage,\r\n prevPage,\r\n changePage,\r\n currentPage,\r\n numPages,\r\n prev,\r\n next}) => {\r\n const firstPage: number = 1;\r\n \r\n return (\r\n \r\n
    \r\n {numPages > 0 &&\r\n <>\r\n {/* {currentPage !== 0 && */}\r\n <>\r\n \r\n \r\n \r\n {/* } */}\r\n
    \r\n \r\n {currentPage + 1} / {numPages}\r\n \r\n
    \r\n {/* {currentPage !== numPages && */}\r\n <>\r\n \r\n \r\n \r\n {/* } */}\r\n \r\n }\r\n
    \r\n )};\r\n \r\n ","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport QRCode from 'qrcode.react';\nimport * as React from 'react';\n\n/**\n * CheckInConfirmation component Properties.\n */\nexport interface ICheckInConfirmationProps {\n /**\n * The confirmation text to show.\n */\n confirmationText: string;\n\n /**\n * Should the order confirmation number shown as QR code or not.\n * If false, the order confirmation number (channel reference ID) will be shown as text.\n */\n shouldShowQrCode: boolean;\n\n /**\n * The label shows for channel reference ID.\n */\n channelReferenceIdLabel: string;\n\n /**\n * The channel reference ID to show. When shouldShowQrCode is true, the ID is shown as QR code, otherwise it is shown as text.\n */\n channelReferenceId?: string;\n}\n\n/**\n * CheckInConfirmation component for showing confirmation information after check-in succeed.\n * @param confirmationProps - The confirmation properties.\n * @param confirmationProps.confirmationText - The confirmation text.\n * @param confirmationProps.shouldShowQrCode - Should the order confirmation number shown as QR code or not.\n * If false, the order confirmation number (channel reference ID) will be shown as text.\n * @param confirmationProps.channelReferenceIdLabel - The label shows for channel reference ID.\n * @param confirmationProps.channelReferenceId - The channel reference ID to show.\n * When shouldShowQrCode is true, the ID is shown as QR code, otherwise it is shown as text.\n * @returns The check-in confirmation component.\n */\nexport const CheckInConfirmationComponent: React.FC = ({\n confirmationText,\n shouldShowQrCode,\n channelReferenceIdLabel,\n channelReferenceId\n}) => {\n return (\n
    \n

    {confirmationText}

    \n {channelReferenceId && (\n

    \n {`${channelReferenceIdLabel} ${channelReferenceId}`}\n

    \n )}\n {channelReferenceId && shouldShowQrCode && (\n \n \n \n )}\n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\n/**\n * Check-in error properties.\n */\nexport interface ICheckInErrorProps {\n errorMessage?: string;\n}\n\n/**\n * Check-in error.\n * @param errorProps - The error properties.\n * @param errorProps.errorMessage - The error message to show.\n * @returns The alert element showing check-in errors.\n */\nexport const CheckInErrorComponent: React.FC = ({ errorMessage }) => {\n if (!errorMessage) {\n return null;\n }\n\n return (\n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IDictionary } from '@msdyn365-commerce/core';\nimport { CommerceProperty, SalesOrdersDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { CheckInConfirmationComponent } from './check-in-confirmation';\nimport { CheckInErrorComponent } from './check-in-error';\nimport { IAdditionalInformationKeysData, ICheckInForPickupConfig, ICheckInForPickupProps } from './check-in-for-pickup.props.autogenerated';\n\n/**\n * The interface representing a piece of additional information data.\n */\ninterface IAdditionalInformation {\n formKey: IAdditionalInformationKeysData;\n value: string;\n}\n\n/**\n * The state for check-in view.\n */\nexport interface ICheckInViewState {\n /**\n * If the module has header error to show.\n */\n isHeaderError: boolean;\n\n /**\n * If the customer has checked in.\n */\n isCheckedIn: boolean;\n\n /**\n * Additional information to capture.\n */\n additionalInformation: IDictionary[];\n}\n\n/**\n * The properties for check-in view.\n */\nexport interface ICheckInViewProps extends ICheckInForPickupProps {\n headerError: React.ReactNode;\n confirmationComponent: React.ReactNode;\n viewState: ICheckInViewState;\n additionalInformationValues: string[];\n checkInForOrderPickup(additionalInformation?: IAdditionalInformation[]): Promise;\n}\n\n/**\n * The state of the CheckInForPickup module.\n */\nexport interface ICheckInForPickupState {\n /**\n * The header error message.\n */\n headerErrorMessage: string;\n\n /**\n * If the customer has checked in successfully.\n */\n isCheckedIn: boolean;\n}\n\n/**\n *\n * CheckIn component.\n * @extends {React.Component, ICheckInForPickupState>}\n */\nclass CheckInForPickup extends React.Component, ICheckInForPickupState> {\n public constructor(props: ICheckInForPickupProps) {\n super(props);\n this.state = {\n headerErrorMessage: '',\n isCheckedIn: false\n };\n }\n\n public render(): JSX.Element | null {\n const isHeaderError: boolean = this.state.headerErrorMessage !== '';\n\n const viewProps = {\n ...this.props,\n headerError: ,\n confirmationComponent: (\n \n ),\n checkInForOrderPickup: this.checkInForOrderPickup,\n additionalInformationValues: this.props.config.additionalInformationKeys\n ? this.props.config.additionalInformationKeys.map(() => {\n return {};\n })\n : undefined,\n viewState: {\n isHeaderError,\n isCheckedIn: this.state.isCheckedIn\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public shouldComponentUpdate(nextProps: ICheckInForPickupProps, nextState: ICheckInForPickupState): boolean {\n if (\n this.props.config.additionalInformationHeading !== nextProps.config.additionalInformationHeading ||\n this.props.config.confirmationText !== nextProps.config.confirmationText\n ) {\n return true;\n }\n if (this.state.headerErrorMessage !== nextState.headerErrorMessage || this.state.isCheckedIn !== nextState.isCheckedIn) {\n return true;\n }\n return false;\n }\n\n public async componentDidMount(): Promise {\n await this._onInit();\n }\n\n /**\n * The async callback for submitting check-in.\n * @param additionalInformationList - The optional additional information captured.\n * @returns The async result.\n */\n public checkInForOrderPickup = async (additionalInformationList?: IAdditionalInformation[]): Promise => {\n const channelId: number = Number.parseInt(this.props.context.request.query!.channelId, 10);\n const channelReferenceId: string = this.props.context.request.query!.channelReferenceId;\n const packingSlipId: string = this.props.context.request.query!.packingSlipId;\n\n const additionalInformationToSubmit: { formKey: string; value: string }[] | undefined = additionalInformationList?.map(\n additionalInformationKeyValuePair => {\n return {\n formKey: additionalInformationKeyValuePair.formKey.resourceId ?? '',\n value: additionalInformationKeyValuePair.value\n };\n }\n );\n const extensionPropertyList: CommerceProperty[] = [];\n if (!ObjectExtensions.isNullOrUndefined(additionalInformationToSubmit)) {\n for (const additionalInformation of additionalInformationToSubmit) {\n extensionPropertyList.push({\n Key: additionalInformation.formKey,\n Value: {\n StringValue: additionalInformation.value\n }\n });\n }\n }\n try {\n await SalesOrdersDataActions.checkInForOrderPickupAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\n channelId,\n packingSlipId,\n channelReferenceId,\n extensionPropertyList\n );\n } catch (error) {\n this.setState({ headerErrorMessage: this.props.resources.genericErrorMessage, isCheckedIn: false });\n this.props.telemetry.error(error);\n return Promise.resolve();\n }\n this.setState({ headerErrorMessage: '', isCheckedIn: true });\n return Promise.resolve();\n };\n\n /**\n * The action performed on module initialization.\n * @returns The async result.\n */\n private readonly _onInit = async (): Promise => {\n const channelId: number = Number.parseInt(this.props.context.request.query?.channelId ?? '', 10);\n const channelReferenceId: string | undefined = this.props.context.request.query?.channelReferenceId;\n const packingSlipId: string | undefined = this.props.context.request.query?.packingSlipId;\n if (Number.isNaN(channelId) || !channelReferenceId || !packingSlipId) {\n // No error message shown in editor mode.\n if (this.props.context.request.params.isEditor) {\n return Promise.resolve();\n } else if (this.props.context.request.params.isPreview) {\n this.setState({ headerErrorMessage: this.props.resources.requiredParameterMissingErrorMessage });\n } else {\n this.setState({ headerErrorMessage: this.props.resources.genericErrorMessage });\n }\n this.props.context.telemetry.error(\n 'One or more required URL parameters are missing. ' +\n 'Please make sure you have pass in channelId, channelReferenceId and packingSlipId through URL parameter.'\n );\n return Promise.resolve();\n }\n\n const { additionalInformationKeys } = this.props.config;\n\n const hasAdditionalInformation: boolean = ArrayExtensions.hasElements(additionalInformationKeys);\n\n // Call check-in-for-pickup directly if no additional information to capture.\n if (!hasAdditionalInformation) {\n try {\n await SalesOrdersDataActions.checkInForOrderPickupAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\n channelId,\n packingSlipId,\n channelReferenceId\n );\n } catch (error) {\n this.setState({ headerErrorMessage: this.props.resources.genericErrorMessage, isCheckedIn: false });\n this.props.telemetry.error(error);\n return Promise.resolve();\n }\n this.setState({ headerErrorMessage: '', isCheckedIn: true });\n }\n return Promise.resolve();\n };\n}\n\nexport default CheckInForPickup;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICartLineItemViewProps,\n ICartlinesViewProps,\n ICartResources,\n ICartViewProps,\n IOrderSummaryErrors\n} from '@msdyn365-commerce-modules/cart';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartProps as ICartExtensionProps } from '../definition-extensions/cart.ext.props.autogenerated';\n\n/**\n * Toggle Bopis Function.\n * @param cartLine -CartLine.\n * @param isBopisSelected -Boolean.\n * @returns Toggle Bopis.\n */\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * Change Store Function.\n * @param cartLine -CartLine.\n * @returns Toggle Bopis.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
    \n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
    \n {isBopisSelected && (\n
    \n {cartLine.pickUpInStore.orgUnitName}\n \n
    \n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
    \n );\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderGroupBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLine = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element => {\n if (cartLine.error === resources.outOfStockErrorMessage) {\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (isMultiplePickUp) {\n return (\n \n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (cartLine.addToOrderTemplate) {\n return (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlinesInternal = (\n cartLines: ICartlinesViewProps[],\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n return cartLines.map((cartLine, index) => {\n const itemIndex = index;\n return (\n
    \n {cartLine.cartline}\n \n {isMultiplePickUp\n ? null\n : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {renderCartLine(cartLine, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n
    \n );\n });\n};\n\n/**\n * Render Cart Lines.\n * @param props - The cart line props.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param waitingComponent - Waiting component element.\n * @param cartLoadingStatus - Cart loading status string.\n * @param isCartDataResult - Flag to check if there is cart data.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlines = (\n props: ICartViewProps & ICartExtensionProps<{}>,\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n isCartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\n if (cartLines) {\n return props.multiplePickUpEnabled ? (\n renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\n ) : (\n \n {renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n );\n }\n\n return isCartDataResult ? (\n
    \n
    {props.slots.emptyCart}
    \n
    \n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const itemCountOne: number = 1;\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\n const countTitle = `(${count} ${suffix})`;\n return (\n <>\n \n {isBopisSelected ? (\n

    \n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

    \n ) : null}\n

    {countTitle}

    \n
    \n \n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
    \n

    \n

    {groupTitle}

    \n {renderCartLinesGroupTitle(cartLine, resources, count)}\n
    \n \n );\n};\n\n/**\n * Returns count of products.\n * @param cartLine - The cart line view props.\n * @returns Number of products.\n */\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n const defaultItemCount = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\n }, defaultItemCount);\n return countItem;\n};\n\n/**\n * Render Cart Lines group.\n * @param props - The cart line view props.\n * @param resources - Module resource strings.\n * @returns JSX Element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
    \n {props.cartLinesGroup.map(cartlines => {\n return (\n
    \n {renderCartLinesGroupHeader(\n cartlines[0],\n resources,\n countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {renderCartlines(\n props,\n cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n
    \n );\n })}\n
    \n );\n }\n return props.cartDataResult ? (\n
    \n
    {props.slots.emptyCart}
    \n
    \n ) : (\n <>{props.waitingComponent}\n );\n};\n\n/**\n * Render error block.\n * @param errorData - Error component.\n * @returns JSX Element.\n */\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Render invoice summary.\n * @param invoiceSummaryLines - Invoice summary component.\n * @param orderSummaryItems - Order summary component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render order summary.\n * @param orderSummaryLines - Order summary component.\n * @param orderSummaryItems - Order summary items component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {orderSummaryLines.subtotal}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render error block.\n * @param promotions - The module view props.\n * @returns JSX Element.\n */\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Render order summary checkout.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.cart?.hasInvoiceLine ? null : props.promoCode}\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n \n {props.createTemplateFromCartButton}\n \n );\n};\n\n/**\n * Render order summary checkout button.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n \n );\n};\n\n/**\n * Render cart view.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\n const totalItemCountOne: number = 1;\n const updatedTitle = (\n

    \n {props.resources.cartTitle}\n \n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\n \n

    \n );\n return (\n
    \n {props.checkoutBlockedDueToUnavailableFunds}\n {updatedTitle}\n
    {props.orderSummaryLineitems?.orderTotal}
    \n {renderOrderSummaryCheckoutButton(props)}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled\n ? renderCartLinesGroup(props, props.resources)\n : renderCartlines(\n props,\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n {props.orderSummaryHeading && (\n \n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {renderErrorBlock(props.OrderSummaryErrors)}\n \n {renderOrderSummaryCheckout(props)}\n \n )}\n {props.storeSelector}\n
    \n );\n};\n\nexport default CartView;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n *\r\n * FooterItemView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class FooterItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { FooterItem } = this.props;\r\n return (\r\n \r\n {this._renderElement(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\r\n if (heading) {\r\n return (\r\n {' '}\r\n );\r\n } else if (Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n \r\n );\r\n } else if (Link) {\r\n return (EditableLink);\r\n }\r\n return (\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FooterItemView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ISignInItem,\n ISignInLoading,\n ISignInLocalAccount,\n ISignInSocialAccount,\n ISignInSocialItem,\n ISignInB2BAccount,\n ISignInB2BItem,\n ISignInViewProps,\n ISignInButton\n} from '@msdyn365-commerce-modules/account-management';\n\nimport { ISignInProps, ISignInResources } from '../definition-extensions/sign-in.ext.props.autogenerated';\n\nconst LocalAccount: React.FC = ({ localAccount, items, forgetPassword, disclaimer, error, signInButton }) => {\n return (\n \n {items &&\n items.map((item: ISignInItem) => {\n return (\n \n {item.label}\n {item.error}\n {item.input}\n \n );\n })}\n {forgetPassword}\n {disclaimer}\n {error}\n {signInButton}\n \n );\n};\n\nconst SocialAccount: React.FC = ({ socialAccounts, items }) => {\n return (\n \n {items &&\n items.map((item: ISignInSocialItem) => {\n return (\n \n {item.image}\n {item.text}\n \n );\n })}\n \n );\n};\n\nconst B2BAccount: React.FC = ({ socialAccounts, items }) => {\n return (\n \n {items &&\n items.map((item: ISignInB2BItem) => {\n return (\n item && (\n \n {item.text}\n \n )\n );\n })}\n \n );\n};\n\nconst SignInLoading: React.FC = ({ modal, modalBody, icon, message }) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\nconst SignInButton: React.FC = ({ id, className, text, ariaLabel, telemetryContent, onClick }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n \n );\n};\n\nconst signUpButton: React.FC> = (\n props: ISignInViewProps & ISignInProps\n) => {\n const {\n resources,\n telemetry,\n friendlyName,\n context: {\n request: { telemetryPageName }\n }\n } = props;\n const telemetryContent = getTelemetryObject(telemetryPageName!, friendlyName, telemetry);\n const attributes = {\n href: '#'\n };\n\n return (\n \n );\n};\n\nconst SignInView: React.FC> = props => {\n const {\n signIn,\n viewState,\n loading,\n defaultAADConainer,\n aadConainer,\n signInSection,\n signUpSection,\n signInSectionHeading,\n signInLocalAccount,\n signInSocialAccount,\n signUpSectionHeading,\n signInB2BAccount,\n signUpDescription\n } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n \n {signInSectionHeading}\n {LocalAccount(signInLocalAccount)}\n {SocialAccount(signInSocialAccount)}\n \n \n {signUpSectionHeading}\n {signUpDescription}\n {signUpButton(props)}\n \n
    \n
    \n or\n
    \n {B2BAccount(signInB2BAccount)}\n
    \n
    \n
    \n );\n};\n\nexport default SignInView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport { isOboRequest } from '@msdyn365-commerce/core-internal';\nimport { IMsdyn365PvaChatConnectorData } from './msdyn365-pva-chat-connector.data';\nimport { IMsdyn365PvaChatConnectorConfig, IMsdyn365PvaChatConnectorProps } from './msdyn365-pva-chat-connector.props.autogenerated';\n\nexport interface IPvaChatConnectorViewProps extends IMsdyn365PvaChatConnectorProps {\n config: IMsdyn365PvaChatConnectorConfig;\n}\n\n/**\n * PvaChatConnector component\n * @extends {React.PureComponent>}\n */\nclass PvaChatConnector extends React.PureComponent> {\n // Loads CDN version of Botframework-Webchat library\n public componentDidMount(): void {\n if (isOboRequest(this.props.context.request)) {\n return;\n }\n\n const url = this.props.config.botFrameworkCDNURL || this.props.context.app.config.pvaChatConnectorBotFrameworkCDNURL;\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.crossOrigin = 'anonymous';\n document.body.appendChild(script);\n }\n\n public render(): JSX.Element | null {\n if (isOboRequest(this.props.context.request)) {\n return null;\n }\n\n return this.props.renderView(this.props);\n }\n}\n\nexport default PvaChatConnector;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { FormBuilder } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckInViewProps } from './check-in-for-pickup';\n\n/**\n * The check-in view for submitting check-in, capturing additional information, and showing check-in confirmation.\n * @param props - The check-in view properties.\n * @returns The check-in view as a react component.\n */\nconst CheckInViewComponent: React.FC = (props: ICheckInViewProps) => {\n const { headerError, checkInForOrderPickup, confirmationComponent, viewState } = props;\n return (\n <>\n {viewState.isHeaderError && headerError}\n {!viewState.isHeaderError && ArrayExtensions.hasElements(props.config.additionalInformationKeys) && (\n \n )}\n {!viewState.isHeaderError &&\n !ArrayExtensions.hasElements(props.config.additionalInformationKeys) &&\n viewState.isCheckedIn &&\n confirmationComponent}\n \n );\n};\n\nexport default CheckInViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLoadingMessage {\n className: string;\n message: string;\n}\n\nconst AccountProfileEditLoadingMessage: React.FC = ({ className, message }) => (\n
    {message}
    \n);\n\nexport default AccountProfileEditLoadingMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditInputProps {\n id?: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: any;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface IAccountProfileEditInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nconst AccountProfileEditInput: React.FC = ({ id, type, value, pattern, className, maxLength, onChange }) => (\n \n);\n\nexport default AccountProfileEditInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Modal, ModalBody } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IAccountProfileEditConfig, IAccountProfileEditProps } from './account-profile-edit.props.autogenerated';\nimport AccountProfileEditButtonComponent from './components/account-profile-edit-button';\nimport AccountProfileEditErrorComponent from './components/account-profile-edit-error';\nimport AccountProfileEditInputComponent from './components/account-profile-edit-input';\nimport AccountProfileEditLabelComponent from './components/account-profile-edit-label';\nimport AccountProfileEditLoadingIconComponent from './components/account-profile-edit-loading-icon';\nimport AccountProfileEditLoadingMessageComponent from './components/account-profile-edit-loading-message';\n\nexport interface IAccountProfileEditViewState {\n isShowLoading: boolean;\n}\n\nexport interface IAccountProfileEditItem {\n wrapper: INodeProps;\n key: string;\n label: React.ReactNode;\n errorMessage: React.ReactNode;\n input: React.ReactNode;\n}\n\nexport interface IAccountProfileEditLocalAccount {\n localAccount: INodeProps;\n items: IAccountProfileEditItem[];\n errorMessage: React.ReactNode[];\n buttonsWrapper: INodeProps;\n buttons: React.ReactNode[];\n verificationSuccessModal: INodeProps;\n verificationSuccessModalMessage: INodeProps;\n}\n\nexport interface IAccountProfileEditLoading {\n modal: INodeProps;\n modalBody: INodeProps;\n icon: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface IAccountProfileEditViewProps {\n className: string;\n viewState: IAccountProfileEditViewState;\n loading: IAccountProfileEditLoading;\n accountProfileEdit: IModuleProps;\n defaultAADConainer: INodeProps;\n aadConainer: INodeProps;\n heading: React.ReactNode;\n accountProfileEditLocalAccount: IAccountProfileEditLocalAccount;\n}\n\n/**\n *\n * AccountProfileEdit component\n * All AAD related module is rendered on AAD page and we need to respect HTML contract provide by AAD.\n * Please ensure any change in module don't break contract with AAD.\n * @extends {React.Component>}\n */\n@observer\nclass AccountProfileEdit extends React.Component> {\n private readonly moduleClassName: string = 'ms-account-profile-edit';\n\n private readonly telemetryContent: ITelemetryContent;\n\n @observable private givenName: string;\n\n @observable private surname: string;\n\n @observable private email: string;\n\n @observable private emailRegex: string;\n\n @observable private isInitialized: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private initializationTimer: any;\n\n constructor(props: IAccountProfileEditProps) {\n super(props);\n this.givenName = '';\n this.surname = '';\n this.email = '';\n this.emailRegex = EmailRegex.defaultRegex.source;\n this.isInitialized = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n this._onInit();\n }\n\n // After successful AAD initialization, call initialize method provided by AAD to attach events.\n public componentDidUpdate(): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (this.isInitialized && window && window['$element'] && window['$element']['initialize']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['$element']['initialize']();\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IAccountProfileEditProps,\n nextState: IAccountProfileEditViewState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { config, resources } = this.props;\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoading: !this.isInitialized\n },\n accountProfileEdit: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, config.className)\n },\n loading: {\n modal: {\n tag: Modal,\n isOpen: true\n },\n modalBody: {\n tag: ModalBody\n },\n icon: ,\n message: \n },\n defaultAADConainer: {\n id: 'api',\n style: { display: 'none' }\n },\n aadConainer: {\n id: this.isInitialized ? 'api' : null,\n className: `${this.moduleClassName}__container`\n },\n heading: config.heading && config.heading.text && (\n \n ),\n accountProfileEditLocalAccount: this._renderLocalAccount()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading.text = event.target.value);\n\n public onTextBoxChange = (event: React.ChangeEvent) => {\n const id = event.target.id;\n const value = event.target.value;\n\n switch (id.toLowerCase()) {\n case 'givenname': {\n this.givenName = value;\n break;\n }\n case 'surname': {\n this.surname = value;\n break;\n }\n case 'email': {\n this.emailRegex = value;\n break;\n }\n default:\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _onInit = () => {\n this._prePopulateData();\n this._updateErrorMessage();\n\n // Check if AAD initialization is complete. AAD do not provide any event to subscribe so we need to check variable set by AAD to check initialization status.\n this.initializationTimer = setInterval(() => {\n this._isInitializationSuccessful();\n }, 100);\n setTimeout(() => {\n clearInterval(this.initializationTimer);\n }, 10_000);\n };\n\n // After successful AAD initialization, remove waiting and preload any data, if needed.\n private readonly _isInitializationSuccessful = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window && window['$diags'] && window['$diags']['initializationSuccessful']) {\n clearInterval(this.initializationTimer);\n this.isInitialized = true;\n }\n };\n\n private readonly _prePopulateData = () => {\n const { resources } = this.props;\n const invalidEmailAddressError = resources.invalidEmailAddressError || 'Please enter a valid email address.';\n\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window['SA_FIELDS'] && window['SA_FIELDS']['AttributeFields']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['SA_FIELDS']['AttributeFields'].map(\n (obj: { ID: string; PRE: string; PAT: string; UX_INPUT_TYPE: string; PAT_DESC: string }) => {\n const value = obj.PRE ? this._htmlDecode(obj.PRE) : '';\n switch (obj.ID.toLowerCase()) {\n case 'givenname': {\n this.givenName = value;\n break;\n }\n case 'surname': {\n this.surname = value;\n break;\n }\n case 'email': {\n this.email = value;\n this.emailRegex = obj.PAT;\n obj.PAT_DESC = invalidEmailAddressError;\n break;\n }\n default:\n }\n }\n );\n }\n };\n\n private _htmlDecode(str: string): string {\n const e = document.createElement('div');\n\n e.innerHTML = str;\n return e.childNodes.length === 0 ? '' : e.childNodes[0].nodeValue || '';\n }\n\n private readonly _updateErrorMessage = () => {\n const { resources } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n if (window && window['CONTENT']) {\n const message = {\n required_field: resources.requiredFieldMissingError,\n verifying_blurb: resources.loadingMessage\n };\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n Object.assign(window['CONTENT'], message);\n }\n };\n\n private _renderLocalAccount(): IAccountProfileEditLocalAccount {\n const { config, resources } = this.props;\n const localAccount = {\n localAccount: {\n id: 'attributeList',\n className: `${this.moduleClassName}__account-items attr`\n },\n items: [\n this._renderInput('givenName', 'text', this.givenName, resources.firstNameLabelText, resources.firstNameMaxLength),\n this._renderInput('surname', 'text', this.surname, resources.lastNameLabelText, resources.lastNameMaxLength)\n ],\n errorMessage: [\n ,\n ,\n \n ],\n buttonsWrapper: {\n className: `${this.moduleClassName}__buttons`\n },\n buttons: [\n ,\n \n ],\n verificationSuccessModal: {\n className: `${this.moduleClassName}__verifying-modal verifying-modal`\n },\n verificationSuccessModalMessage: {\n id: 'verifying_blurb',\n className: `${this.moduleClassName}__verifying-modal-message`\n }\n };\n\n if (config.showEmail && this.email !== '') {\n localAccount.items.push(\n this._renderInput('email', 'email', this.email, resources.emailAddressLabelText, undefined, this.emailRegex)\n );\n }\n\n return localAccount;\n }\n\n private _renderInput(\n id: string,\n type: string,\n value: string,\n labelText: string,\n maxLength?: string,\n pattern?: string\n ): IAccountProfileEditItem {\n const className = `${this.moduleClassName}__account-item`;\n return {\n wrapper: {\n className: classnames(className, `${className}-${id}`, 'entry-item', 'attrEntry')\n },\n key: id,\n label: (\n \n ),\n errorMessage: (\n \n ),\n input: (\n \n )\n };\n }\n}\n\nexport default AccountProfileEdit;\n"],"sourceRoot":""}