{"version":3,"sources":["webpack:///src/modules/fabrikam/views/reviews-list.view.tsx?39a2","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/modules/advanced-notes/advanced-notes.tsx?0cd5","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/fabrikam/views/ratings-histogram.view.tsx?96ae","webpack:///./src/modules/advanced-notes/advanced-notes.view.tsx?f5d4","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/modules/tile-list/tile-list.view.tsx?d2bd","webpack:///src/modules/adventureworks/views/b2b-requests-status.view.tsx?b8db","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/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/adventureworks/views/footer-item.view.tsx?9747","webpack:///src/modules/adventureworks/views/media-gallery.view.tsx?e2f6","webpack:///src/modules/account-profile-edit/account-profile-edit.tsx?a9d6"],"names":["buildReviewCard","props","React","Node","Object","assign","cardProps","headerProps","rating","name","date","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","ratingHelpfulLabel","like","dislike","edit","report","createReviewModal","moduleProps","Module","modal","modalHeader","modalBody","form","inputRow","ratingLabel","titleLabel","titleInput","textLabel","textInput","privacyPolicyUrl","error","modalFooter","submitButton","cancelButton","createReportModal","state","reported","headerSubmitted","header","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","ReviewsListview","averageRating","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","reviewCount","reviewModal","sortByDropdown","userReview","length","isFilterApplied","map","review","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","validate","uuid","REGEX","test","byteToHex","i","push","toString","substr","stringify","arr","offset","arguments","undefined","toLowerCase","TypeError","v4","options","buf","rnds","random","ProactiveChatTrigger","constructor","context","this","CartAmountTrigger","super","totalInCart","min","config","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","telemetry","debug","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","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","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","AccountProfileEditLoadingIcon","AdvancedNotes","_className","_renderNote","key","_renderNotes","notes","note","index","TextValue","_renderStaticNotesDisplay","isNoteAreaActive","render","viewProps","staticDisplay","tag","children","advancedNotesModuleProps","renderView","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","outOfStockErrorMessage","cartlineId","addToWishlist","remove","renderGroupBopisBlock","_cartLine$data2","DeliveryMode","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","puckUpinStoreAttribute","getTelemetryAttributes","Button","addToOrderTemplate","renderCartlinesInternal","isPrintView","cartLines","itemIndex","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","_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","orderCountLabel","extraActions","OrderHistorySalesOder","_ref6","salesOrderProps","orderInfomation","orderDetailsLink","expandProductsButton","placedBy","OrderHistoryList","_ref7","listProps","salesOrders","salesOrder","OrderHistoryView","_ref8","orderHistoryProps","alert","loading","emptyMessage","backToShoppingLink","list","table","moreButton","AccountProfileEditButton","ariaLabel","disabled","attributes","TileList","_telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","StringExtensions","isNullOrWhitespace","Heading","headingTag","_this$props$config$cl","title","propsCarousel","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","vertical","_createHeading","singleSlideCarouselComponentProps","tileItemContainer","tileListContainer","classnames","tileListHeading","tiles","content","histogramItem","buttonProps","starLabel","bar","percentage","RatingsHistogramView","histogramItems","histogramProps","AccountProfileEditLabel","forId","htmlFor","advancedNotes","_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","tileListView","tileItem","keyIndex","B2bRequestsStatusView","_props$data$operation","b2bRequestsStatus","continueShoppingButtonTitle","operationRequests","result","headingForEmptyRequestStatus","textForEmptyRequestStatus","getUrlSync","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","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","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","_this$props$context$r5","isHeaderError","headerError","confirmationComponent","defaultConfirmationText","confirmationIdLabel","additionalInformationValues","shouldComponentUpdate","nextProps","nextState","additionalInformationHeading","SignInLoading","SignInButton","SignInView","signIn","signInSection","signUpSection","signInSectionHeading","signInLocalAccount","signInSocialAccount","signUpSectionHeading","signInB2BAccount","signUpDescription","forgetPassword","disclaimer","signInButton","socialAccounts","image","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","FooterItemView","FooterItem","_renderElement","HeadingContainer","Link","linkText","EditableLink","renderThumbnailItem","ThumbnailItemContainerProps","Picture","GetEmptyThumbnailItemComponent","_props$context$app$co2","_props$config$thumbna2","fallbackImage","emptyPlaceHolderImage","placeholderImageName","_props$context$reques2","getFallbackImageUrl","OmniChannelMedia","tabIndex","thumbnailImageSettings","loadFailureBehavior","imageFallbackOptimize","skipImageValidation","fallBackSrc","defaultThumbnailImageSettings","xl","cropFocalRegion","renderThumbnails","thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","Thumbnails","mediaGalleryItems","getMediaGalleryItems","lastUpdate","GetThumbnailItemComponent","imageId","modifiedActiveIndex","_props$context$app$co","_props$config$thumbna","_props$context$reques","_props$callbackToggle","_props$callbackThumbn","callbackToggle","call","callbackThumbnailClick","activeIndex","handleKeyDown","event","keyCode","KeyCodes","Enter","preventDefault","onKeyDown","shouldUseOptimizedImage","bypassHideOnFailure","fullScreenTitleText","mediaGalleryView","CarouselProps","MediaGallery","AccountProfileEdit","moduleClassName","handleHeadingChange","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","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":";2IAeA,MA6CMA,EAAmBC,GAEjBC,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMK,WACZJ,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMM,aACXN,EAAMO,OACNP,EAAMQ,KACNR,EAAMS,MAEXR,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMU,eACZT,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMW,aACXX,EAAMY,YACNZ,EAAMa,YAEXZ,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMc,eACXd,EAAMe,aACNf,EAAMgB,aACNhB,EAAMiB,cAEXhB,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMkB,eACXlB,EAAMmB,mBACNnB,EAAMoB,KACNpB,EAAMqB,QACNrB,EAAMsB,KACNtB,EAAMuB,UAOrBC,EAAoBA,CAACxB,EAA8ByB,IAEjDxB,gBAACyB,SAAMvB,OAAAC,OAAA,GAAKqB,EAAiBzB,EAAM2B,OAC9B3B,EAAM4B,YACP3B,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAM6B,WACZ5B,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAM8B,MACZ7B,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAM+B,UACX/B,EAAMO,OACNP,EAAMgC,aAEX/B,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAM+B,UACX/B,EAAMiC,WACNjC,EAAMkC,YAEXjC,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAM+B,UACX/B,EAAMmC,UACNnC,EAAMoC,WAEVpC,EAAMqC,iBACNrC,EAAMsC,QAGfrC,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMuC,aACXvC,EAAMwC,aACNxC,EAAMyC,eAMjBC,EAAoBA,CAAC1C,EAAoC2C,IAEvD1C,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAM2B,OACZ1B,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAM4B,aAAce,EAAMC,SAAW5C,EAAM6C,gBAAkB7C,EAAM8C,QAC7E7C,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAM6B,WACXc,EAAMC,SAAW5C,EAAM+C,uBAAyB,CAAC/C,EAAMgD,cAAehD,EAAMiD,aAAcjD,EAAMsC,QAErGrC,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMuC,aAAcI,EAAMC,SAAW5C,EAAMkD,gBAAkB,CAAClD,EAAMwC,aAAcxC,EAAMyC,gBAK/FU,UArH0CnD,IACrD,MAAM,cACFoD,EAAa,iBACbC,EAAgB,YAChB5B,EAAW,iBACX6B,EAAgB,2BAChBC,EAA0B,aAC1BC,EAAY,mBACZC,EAAkB,kBAClBC,EAAiB,iBACjBC,EAAgB,YAChBC,EAAW,YACXC,EAAW,YACXC,EAAW,eACXC,EAAc,MACdpB,EAAK,WACLqB,GACAhE,EAEJ,OAAKgE,GAAqC,IAAvBJ,EAAYK,QAAiBtB,EAAMuB,gBAKlDjE,gBAACyB,SAAMvB,OAAAC,OAAA,GAAKqB,GACP2B,EACAS,EACD5D,gBAACC,OAAIC,OAAAC,OAAA,GAAKqD,GACLM,EACAV,GAELpD,gBAACC,OAAIC,OAAAC,OAAA,GAAKuD,GACLK,GAAcjE,EAAgBiE,GAC9BJ,EAAYO,IAAIC,GACNrE,EAAgBqE,KAGP,IAAvBR,EAAYK,QAAgBtB,EAAMuB,iBAAmBX,EACrDC,EACAhC,EAAkBsC,EAAarC,GAC/BiB,EAAkBgB,EAAmBf,IApBnC1C,gBAACyB,SAAMvB,OAAAC,OAAA,GAAKqB,GAAc6B,K,yDChCrCe,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,UAAUxB,OAAS,QAAsByB,IAAjBD,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,MAAMG,cAMzf,IAAKd,EAASC,GACZ,MAAMc,UAAU,+BAGlB,OAAOd,GEHMe,MApBf,SAAYC,EAASC,EAAKP,GAExB,IAAIQ,GADJF,EAAUA,GAAW,IACFG,SAAWH,EAAQtB,KAAOA,KAK7C,GAHAwB,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBD,EAAK,CACPP,EAASA,GAAU,EAEnB,IAAK,IAAIN,EAAI,EAAGA,EAAI,KAAMA,EACxBa,EAAIP,EAASN,GAAKc,EAAKd,GAGzB,OAAOa,EAGT,OAAOT,EAAUU,I,YCmBJE,MA3Bf,MAGIC,YAAYnG,EAAmCoG,GAC3CC,KAAKrG,MAAQA,EACbqG,KAAKD,QAAUA,I,ykBCHvB,MAAME,UAA0BJ,EAK5BC,YAAYnG,EAAmCoG,GAC3CG,MAAMvG,EAAOoG,GAHT,KAAAI,YAAsB,EAI1BH,KAAKI,IAAMJ,KAAKrG,MAAM0G,OAAOC,yBAC7BN,KAAKO,IAAMP,KAAKrG,MAAM0G,OAAOG,yBAC7BR,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,UAAUT,EAAkB9F,2DAA2D6F,KAAKI,eAAeJ,KAAKO,SAIjH,iBACH,MAAMI,QAAaX,KAAKY,WACxB,GAAID,EAAKE,QAEL,OADAb,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUT,EAAkB9F,wDACxD,EAGX6F,KAAKG,YAAcQ,EAAKA,KAAKG,aAAe,EAC5C,IAAIC,GAAS,EAiBb,OAdQA,EAFJf,KAAKI,IACDJ,KAAKO,IACIP,KAAKI,KAAOJ,KAAKG,aAAeH,KAAKG,aAAeH,KAAKO,IAEzDP,KAAKI,KAAOJ,KAAKG,cAG1BH,KAAKO,KACIP,KAAKG,aAAeH,KAAKO,IAK1CP,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,UAAUT,EAAkB9F,6BAA6B4G,oBAAyBf,KAAKG,iBAEpFY,EAGJC,qBACH,MAAO,IACHC,IAAA,GACOjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BC,2BAA4B,cAC5BC,yCAA0C,GAAGpB,KAAKG,cAKvDkB,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAOiB,8BAAgCtB,KAAKrG,MAAM0G,OAAOkB,wBAGvE,iBACJ,OAAOC,uBAAaxB,KAAKrG,MAAMoG,QAAQ0B,gBAIhCxB,Q,ykBC/Df,MAAMyB,UAAiC7B,EAKnCC,YAAYnG,EAAmCoG,GAC3CG,MAAMvG,EAAOoG,GAHT,KAAA4B,cAAwB,EAI5B3B,KAAKI,IAAMJ,KAAKrG,MAAM0G,OAAOuB,4BAC7B5B,KAAKO,IAAMP,KAAKrG,MAAM0G,OAAOwB,4BAE7B7B,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIgB,EAAyBvH,oEAAoE6F,KAAKI,eAAeJ,KAAKO,SAI3H,iBACH,MAAMI,QAAaX,KAAKY,WACxB,GAAID,EAAKE,QAEL,OADAb,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUgB,EAAyBvH,wDAC/D,EAGX6F,KAAK2B,cAAgBhB,EAAKA,KAAKmB,YAAc,EAE7C,IAAIf,GAAS,EAiBb,OAdQA,EAFJf,KAAKI,IACDJ,KAAKO,IACIP,KAAKI,KAAOJ,KAAK2B,eAAiB3B,KAAK2B,eAAiB3B,KAAKO,IAE7DP,KAAKI,KAAOJ,KAAK2B,gBAG1B3B,KAAKO,KACIP,KAAK2B,eAAiB3B,KAAKO,IAK5CP,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIgB,EAAyBvH,6BAA6B4G,iCAAsCf,KAAK2B,mBAElGZ,EAGJC,qBACH,MAAO,IACHC,IAAA,GACOjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BC,2BAA4B,uBAC5BY,gDAAiD,GAAG/B,KAAK2B,gBAK9DN,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAO2B,iCAAmChC,KAAKrG,MAAM0G,OAAOkB,wBAG1E,iBACJ,OAAOC,uBAAaxB,KAAKrG,MAAMoG,QAAQ0B,gBAIhCC,Q,ykBClEf,MAAMO,UAAmCpC,EAAzCC,c,oBACY,KAAAoC,QAAkB,GAEnB,iBACH,IAAIC,GAAU,EACd,MAAMxB,QAAaX,KAAKY,WACxB,GAAKD,EAAKE,QAmCNb,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUuB,EAA2B9H,8BAlCxE,GAAIwG,EAAKA,KAAKyB,UAAW,CAAC,IAADC,EACrBrC,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIuB,EAA2B9H,wCAA2D,QAAvDkI,EAAoC1B,EAAKA,KAAKyB,iBAAS,IAAAC,OAAA,EAAnBA,EAAqBzE,WAEhG,IAAK,IAAIiB,EAAI,EAAGA,GAAuB,QAAtByD,EAAG3B,EAAKA,KAAKyB,iBAAS,IAAAE,OAAA,EAAnBA,EAAqB1E,QAAQiB,IAAK,CAAC,IAADyD,EAClD,IAAI3B,EAAKA,KAAKyB,UAAUvD,GAsBpB,MArBA,GAAImB,KAAKrG,MAAM0G,OAAOkC,mCAAoC,CAAC,IAADC,EACtDxC,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIuB,EAA2B9H,iFAAqI,QAAjIqI,EAA6ExC,KAAKrG,MAAM0G,OAAOkC,0CAAkC,IAAAC,OAAA,EAApDA,EAAsD5E,WAG1K,IAAK,IAAI6E,EAAI,EAAGA,IAAyD,QAApDC,EAAA1C,KAAKrG,MAAM0G,OAAOkC,0CAAkC,IAAAG,OAAA,EAApDA,EAAsD9E,SAAU,GAAI6E,IAAK,CAAC,IAADC,EAC1F,GACI1C,KAAKrG,MAAM0G,OAAOkC,oCAClB5B,EAAKA,KAAKyB,UAAUvD,GAAG8D,QACvB3C,KAAKrG,MAAM0G,OAAOkC,mCAAmCE,KAAO9B,EAAKA,KAAKyB,UAAUvD,GAAG8D,OACrF,CACE3C,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIuB,EAA2B9H,oCAAoCwG,EAAKA,KAAKyB,UAAUvD,GAAG8D,8EAE9FR,GAAU,EACV,eAUpBnC,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUuB,EAA2B9H,8CAMhF,OADA6F,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUuB,EAA2B9H,+BAA+BgI,OAChGA,EAGJnB,qBACH,MAAO,IACHC,IAAA,GACOjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BC,2BAA4B,wBAC5ByB,kDAAmD,GAAG5C,KAAKkC,UAKhEb,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAOwC,uCAAyC7C,KAAKrG,MAAM0G,OAAOkB,wBAGhF,iBACJ,OAAOC,uBAAaxB,KAAKrG,MAAMoG,QAAQ0B,gBAIhCQ,IC5EHa,ED4EGb,I,0kBC5Ef,SAAYa,GACRA,EAAA,uBACAA,EAAA,sCACAA,EAAA,yBACAA,EAAA,qCACAA,EAAA,6BACAA,EAAA,0BANJ,CAAYA,MAAkB,KCQ9B,MAAMC,UAAyBlD,EAI3BC,YAAYnG,EAAmCoG,GAC3CG,MAAMvG,EAAOoG,GACbC,KAAKgD,MAAQhD,KAAKiD,QAAQjD,KAAKrG,MAAM0G,OAAO6C,2BAC5ClD,KAAKmD,IAAMnD,KAAKiD,QAAQjD,KAAKrG,MAAM0G,OAAO+C,yBAE1CpD,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIqC,EAAiB5I,qDAAqD6F,KAAKgD,iBAAiBhD,KAAKmD,SAItG,iBACH,MAAME,EAAM,IAAIC,KAChBD,EAAIE,SAAS,EAAG,EAAG,EAAG,GAEtB,IAAIxC,GAAS,EAcb,OAbIf,KAAKgD,MAEDjC,EADAf,KAAKmD,IACInD,KAAKgD,MAAMQ,WAAaH,EAAIG,WAAaH,EAAIG,WAAaxD,KAAKmD,IAAIK,UAEnExD,KAAKgD,MAAMQ,WAAaH,EAAIG,UAElCxD,KAAKmD,MACZpC,EAASsC,EAAIG,WAAaxD,KAAKmD,IAAIK,WAGvCxD,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIqC,EAAiB5I,6BAA6B4G,sCAA2CsC,OAE1FtC,EAGJC,qBACH,MAAO,IACHC,IAAA,GACOjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BC,2BAA4B2B,EAAmBW,UAC/CC,+BAAgC1D,KAAKgD,MAAQhD,KAAKgD,MAAMW,cAAgB,GACxEC,6BAA8B5D,KAAKmD,IAAMnD,KAAKmD,IAAIQ,cAAgB,KAKvEtC,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAOwD,6BAA+B7D,KAAKrG,MAAM0G,OAAOkB,wBAQtE0B,QAAQ7I,GACZ,GAAIA,EAAM,CACN,MAAM0J,EAAY1J,EAAK2J,MAAM,KAC7B,OAAO,IAAIT,MAAMQ,EAAU,IAAKA,EAAU,GAAK,GAAIA,EAAU,MAO1Df,Q,ykBCpEf,MAAMiB,UAAgCnE,EAC3B,iBACH,IAAIsC,GAAU,EACd,GAAInC,KAAKrG,MAAM0G,OAAO4D,gCAAiC,CAAC,IAADzB,EACnDxC,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIsD,EAAwB7J,2EAA4H,QAAxHqI,EAAuExC,KAAKrG,MAAM0G,OAAO4D,uCAA+B,IAAAzB,OAAA,EAAjDA,EAAmD5E,YAE9J,IAAK,IAAIiB,EAAI,EAAGA,IAAsD,QAAjD6D,EAAA1C,KAAKrG,MAAM0G,OAAO4D,uCAA+B,IAAAvB,OAAA,EAAjDA,EAAmD9E,SAAU,GAAIiB,IAAK,CAAC,IAAD6D,EACvF,MAAMwB,EAAkClE,KAAKrG,MAAM0G,OAAO4D,gCAAgCpF,GAAGsF,OAQ7F,GAPAnE,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,UAAUsD,EAAwB7J,4BAA4BiK,OAAOC,SAASC,cAElFtE,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIsD,EAAwB7J,uEAAuE+J,OAGnGE,OAAOC,SAASC,SAASC,QAAQL,IAA4B,EAAG,CAChE/B,GAAU,EACV,aAIRnC,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,UAAUsD,EAAwB7J,+DAI1C,OADA6F,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUsD,EAAwB7J,+BAA+BgI,OAC7FA,EAEJnB,qBACH,MAAO,IACHC,IAAA,GACOjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BC,2BAA4B2B,EAAmB0B,iBAC/CC,mCAAoCL,OAAOC,SAASC,WAIzDjD,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAOqE,oCAAsC1E,KAAKrG,MAAM0G,OAAOkB,yBAI1EyC,Q,ykBC3Cf,MAAMW,UAAyB9E,EAM3BC,YAAYnG,EAAmCoG,GAC3CG,MAAMvG,EAAOoG,GANV,KAAA6E,OAAiB,EAChB,KAAAC,WAAqB,mBAMzB7E,KAAK8E,QAAU9E,KAAKrG,MAAMoG,QAAQgF,QAAQD,QAC1C9E,KAAKgF,QAAU,IAAI1B,KAEnBtD,KAAKgF,QAAQC,QAAQjF,KAAKgF,QAAQxB,UAAY,SAC9CxD,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUiE,EAAiBxK,qCAAqC6F,KAAKgF,aAExGhF,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUiE,EAAiBxK,mCAAmC6F,KAAK8E,QAAQI,sBAC1GlF,KAAK8E,QAAQI,kBACblF,KAAK8E,QAAQK,mBAGjBnF,KAAKoF,sBAGF,iBACH,IAAIrE,GAAkB,EAOtB,OALIf,KAAKrG,MAAM0G,OAAOgF,6BAClBtE,EAASf,KAAK4E,QAAU5E,KAAKrG,MAAM0G,OAAOgF,4BAG9CrF,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUiE,EAAiBxK,6BAA6B4G,OACpFA,EAGJuE,QACHtF,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUiE,EAAiBxK,iDAC9D6F,KAAK8E,QAAQS,IAAYvF,KAAK6E,WAAY,EAAG,CACzCW,OAAQpB,OAAOqB,SAASC,SACxBC,KAAMvB,OAAOqB,SAASG,SACtBC,QAAS7F,KAAKgF,UAIfhE,qBACH,MAAO,IACHC,IAAA,GACOjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BC,2BAA4B2B,EAAmBgD,WAC/CC,qCAAsC,GAAG/F,KAAK4E,SAKnDvD,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAO2F,6BAA+BhG,KAAKrG,MAAM0G,OAAOkB,wBAGtE6D,sBACJpF,KAAK4E,OAAS5E,KAAK8E,QAAQmB,IAAYjG,KAAK6E,YAAYqB,OAAS,EACjElG,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUiE,EAAiBxK,4CAA4C6F,KAAK4E,aAC7G5E,KAAK4E,OACP5E,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUiE,EAAiBxK,2CAA2C6F,KAAK4E,WAE9G5E,KAAK8E,QAAQS,IAAYvF,KAAK6E,WAAY7E,KAAK4E,OAAQ,CACnDY,OAAQpB,OAAOqB,SAASC,SACxBC,KAAMvB,OAAOqB,SAASG,SACtBC,QAAS7F,KAAKgF,WAKXL,Q,ykBCxEf,MAAMwB,UAAqCtG,EAEvCC,YAAYnG,EAAmCoG,GAC3CG,MAAMvG,EAAOoG,GACbC,KAAKoG,oBAAyCpG,KAAKrG,MAAMoG,QAAQgF,QAASsB,iBAAmB,MAC7FrG,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIyF,EAA6BhM,wCAAwC6F,KAAKoG,yBAI/E,iBACH,MAAMrF,IAAkBf,KAAKrG,MAAM0G,OAAOiG,6BACpCtG,KAAKrG,MAAM0G,OAAOiG,4BAA4BhH,cAAciF,QAAQvE,KAAKoG,oBAAoB9G,gBAAkB,EAGrH,OADAU,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUyF,EAA6BhM,+BAA+B4G,OAClGA,EAEJC,qBACH,MAAO,IACHC,IAAA,GACOjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BqF,kCAAmCvG,KAAKrG,MAAM0G,OAAOiG,6BAA+B,GACpFnF,2BAA4B2B,EAAmB0D,mBAIpDnF,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAOoG,yCAA2CzG,KAAKrG,MAAM0G,OAAOkB,yBAI/E4E,Q,ykBCnCf,MAAMO,UAA4B7G,EACvB,iBACH,IAAIsC,GAAU,EACd,GAAInC,KAAKrG,MAAM0G,OAAOsG,4BAA6B,CAAC,IAADnE,EAC/CxC,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,IAAIgG,EAAoBvM,uEAAoH,QAAhHqI,EAAmExC,KAAKrG,MAAM0G,OAAOsG,mCAA2B,IAAAnE,OAAA,EAA7CA,EAA+C5E,YAElJ,IAAK,IAAIiB,EAAI,EAAGA,IAAkD,QAA7C6D,EAAA1C,KAAKrG,MAAM0G,OAAOsG,mCAA2B,IAAAjE,OAAA,EAA7CA,EAA+C9E,SAAU,GAAIiB,IAAK,CAAC,IAAD6D,EACnF,MAAMkE,EAA8B5G,KAAKrG,MAAM0G,OAAOsG,4BAA4B9H,GAAGsF,OAGrF,GAFAnE,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,4BAA4B0D,OAAOqB,SAASoB,SAC/E7G,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,8DAA8DkG,MAC7FxC,OAAOqB,SAASoB,KAAKtC,QAAQqC,IAAwB,EAAG,CACxDzE,GAAU,EACV,aAIRnC,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUgG,EAAoBvM,0DAGrE,OADA6F,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUgG,EAAoBvM,+BAA+BgI,OACzFA,EAGJnB,qBACH,MAAO,IACHC,IAAA,GACOjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BC,2BAA4B2B,EAAmBgE,eAKpDzF,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAO0G,gCAAkC/G,KAAKrG,MAAM0G,OAAOkB,yBAItEmF,Q,ykBCtCf,MAAMM,UAA0BnH,EAG5BC,YAAYnG,EAAmCoG,GAC3CG,MAAMvG,EAAOoG,GACTC,KAAKrG,MAAM0G,OAAO4G,6BAA+BC,MAAMlH,KAAKrG,MAAM0G,OAAO4G,8BACzEjH,KAAKmH,uBAAgF,IAAvDC,OAAOpH,KAAKrG,MAAM0G,OAAO4G,4BACvDjH,KAAKrG,MAAMoG,QAAQU,UAAUC,MACzB,UAAUsG,EAAkB7M,iCAAiC6F,KAAKmH,6BAKvE,iBACH,MAAMpG,OAAkD1B,IAAhCW,KAAKmH,uBAE7B,OADAnH,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,UAAUsG,EAAkB7M,+BAA+B4G,OACvFA,EAGJC,qBACH,MAAMqG,EAAc/D,KAAKD,OAASrD,KAAKmH,wBAA0B,GACjE,MAAO,IACIE,EAAc/D,KAAKD,MACpBrD,KAAKD,QAAOkB,IAAA,GAELjB,KAAKD,SAAO,IACfmB,6BAA8B,OAC9BC,2BAA4B2B,EAAmBwE,WAC/CC,iCAAkC,IAAGvH,KAAKmH,uBAAyBnH,KAAKmH,uBAAyB,KAK5G9F,aAEH,OAAOrB,KAAKrG,MAAM0G,OAAOmH,4BAA8BxH,KAAKrG,MAAM0G,OAAOkB,yBCnB1E,MAAMkG,GAAqC,CAC9C1E,EACA2D,EACA1C,EACAW,EACAwB,EACAlG,EACAyB,EACAO,EDeW+E,GEmFAU,OAtHf,MAQI5H,YAAYnG,GACRqG,KAAKrG,MAAQA,EACbqG,KAAK2H,KAAO3H,KAAKrG,MAAMoG,QAAQgF,QAAQ4C,KACvC3H,KAAK4H,OAAS,MAAMC,IACpB7H,KAAKD,QAAUC,KAAK8H,cAEpB9H,KAAK+H,KAAO,CACRC,SAAS,EACTC,QAASjI,KAAKrG,MAAM0G,OAAO4G,4BAA8B,EACzDiB,QAASlI,KAAKrG,MAAM0G,OAAOkB,yBAQ5B,aACH,UACUvB,KAAKmI,kBACb,MAAOC,GAGLpI,KAAKrG,MAAM8G,UAAU4H,UAAUD,GAEnC,OAAOpI,KAAKsI,UAAYtI,KAAKuI,eAMzBA,eACJ,MAAO,KAAK,IAAAC,EACR,MAAqB,CACjBC,6BAA8BzI,KAAKrG,MAAMoG,QAAQgF,QAAQ2D,YAAYC,IACrEC,iBAAkB5I,KAAKrG,MAAMoG,QAAQgF,QAAQ2D,YAAYG,QACzDC,oBAAuD,QAApCN,EAAExI,KAAKrG,MAAMoG,QAAQgF,QAAQgE,eAAO,IAAAP,OAAA,EAAlCA,EAAoCQ,yBACzDC,OAAQjJ,KAAK4H,OAEbsB,cAAelJ,KAAK2H,KAAKwB,sBAAwBnJ,KAAK2H,KAAKwB,sBAAwB,MACnFC,MAAOpJ,KAAK2H,KAAK0B,aAAerJ,KAAK2H,KAAK0B,aAAe,MACzDC,UAAWtJ,KAAK2H,KAAK4B,UAAYvJ,KAAK2H,KAAK4B,UAAYvJ,KAAKrG,MAAM0G,OAAOmJ,kBACzEC,SAAUzJ,KAAK2H,KAAK+B,SAAW1J,KAAK2H,KAAK+B,SAAW,MACpDC,KAAM3J,KAAK2H,KAAKxN,KAAO6F,KAAK2H,KAAKxN,KAAO6F,KAAKrG,MAAM0G,OAAOmJ,kBAC1DI,qBAAsBxF,OAAOqB,SAASoB,KACtCgD,sBAAuB,MAEvB3I,6BAA8B,QAC9BC,2BAA4B,MAE5BuC,+BAAgC,MAChCE,6BAA8B,MAE9Ba,mCAAoC,MAEpCsB,qCAAsC,MAEtCQ,kCAAmC,MAInCgB,iCAAkC,MAElCnG,yCAA0C,MAE1CW,gDAAiD,MAEjDa,kDAAmD,QAQvDkF,cACJ,OAAO9H,KAAKuI,cAALvI,GAMH,wBACJ,GAAIA,KAAKrG,MAAM0G,OAAOyJ,qBAClB,IAAK,IAAIjL,EAAI,EAAGA,EAAI4I,GAAkB7J,OAAQiB,IAAK,CAC/C,MAAMkL,EAAY,IAAItC,GAAkB5I,GAAGmB,KAAKrG,MAAOqG,KAAKD,SAE5D,SAAUC,KAAKgK,aAAaD,GAAY,CACpC/J,KAAKrG,MAAMoG,QAAQU,UAAUC,MAAM,oDAAoDqJ,GACvF,QAWR,mBAAmBA,GAMvB,OALA/J,KAAK+H,KAAKC,cAAgB+B,EAAUvL,WAChCwB,KAAK+H,KAAKC,UACVhI,KAAKsI,SAAWyB,EAAU/I,qBAC1BhB,KAAK+H,KAAKG,QAAU6B,EAAU1I,cAE3BrB,KAAK+H,KAAKC,U,6kBCxHzB,MAAMiC,GAAuB5J,IACG,CACxB6J,SAAU7J,EAAO6J,UAAY,UAC7BC,IAAK9J,EAAO8J,IAAM9J,EAAO8J,IAAM,UAC/BC,MAAO/J,EAAO+J,MAAQ/J,EAAO+J,MAAQ,UACrCC,OAAQhK,EAAOgK,OAAShK,EAAOgK,OAAS,UACxCC,KAAMjK,EAAOiK,KAAOjK,EAAOiK,KAAO,UAClCC,OAAQ,IACRC,QAAS,OACTC,eAAgB,aAIlBC,GAA+BA,CAACrK,EAAyCsK,IACvEA,EAC4B,CACxBC,OAAQ,MACRC,MAAO,OACPR,OAAQ,QACRD,MAAO,IACPU,QAAS,OAGW,CACxBF,OAAQvK,EAAO0K,WAAa1K,EAAO0K,WAAa,MAChDF,MAAOxK,EAAO2K,UAAY3K,EAAO2K,UAAY,WAI/CC,GAAsB5K,IACI,CACxBmK,QAAS,OACTU,WAAY,SACZC,gBAAiB9K,EAAO+K,gCAAkC,QAC1DC,MAAOhL,EAAOiL,0BAA4B,UAC1CC,YAAalL,EAAOmL,4BAA8B,UAClDC,aAAcpL,EAAOqL,6BAA+B,MACpDC,YAAatL,EAAOuL,4BAA8B,QAClDC,YAAaxL,EAAOyL,2BAA6BzL,EAAOyL,2BAA6B,MACrFhB,QAASzK,EAAO0L,aAAe,mBAAqB,sBACpDC,OAAQ,UACRC,aAAc,OACdC,UAAW,WACXC,UAAW,+BACXC,gBAAiB,+BACjBC,aAAc,iCAIhBC,GAA2BjM,IACD,CACxB8K,gBAAiB9K,EAAOkM,uBAAyB,UACjDlB,MAAOhL,EAAOmM,iBAAmB,UACjCf,aAAc,MACdX,QAAS,OACTD,MAAO,OACPD,OAAQ,OACR6B,YAAa,OACbd,YAAa,QACbE,YAAa,MACba,UAAW,gBAIbC,GAAyBtM,IACC,CACxB8K,gBAAiB9K,EAAOkM,uBAAyB,UACjDlB,MAAOhL,EAAOmM,iBAAmB,UACjCf,aAAc,MACdX,QAAS,OACTD,MAAO,OACPD,OAAQ,OACRgC,OAAQ,mBACRV,UAAW,SACXP,YAAa,QACbE,YAAa,MACba,UAAW,gBAIbG,GAAuBA,CAACxM,EAAyCyM,KACvC,CACxBtC,QAASsC,EAAY,OAAS,QAC9B3B,gBAAiB9K,EAAO8K,iBAAmB,QAC3CP,OAAQ,OACRC,MAAO,OACP6B,UAAW,aACXxC,SAAU,aAIZ6C,GAAwB1M,IAC1BA,EAAO2M,iBAAmB3M,EAAO2M,kBAAoB,OACzB,CACxB7B,gBAAiB9K,EAAOkM,uBAAyB,UACjDU,gBAAiB,QAAQ5M,EAAO6M,8BAAgC,OAChE7B,MAAOhL,EAAOmM,iBAAmB,UACjCW,iBAAkB,YAClB3C,QAAS,OACTU,WAAY,aACZkC,cAAe,MACfvC,MAAO,OACPX,SAAU,WACVC,IAAK9J,EAAO2M,iBAAmB,IAAI3M,EAAO2M,iBAAqB,GAC/DpC,OAAQvK,EAAO2M,iBACfzB,YAAalL,EAAOkM,sBAAwBlM,EAAOkM,sBAAwB,UAC3EZ,YAAatL,EAAOgN,gBAAkBhN,EAAOgN,gBAAkB,OAC/DxB,YAAaxL,EAAOiN,gBAAkBjN,EAAOiN,gBAAkB,QAIjEC,GAA0BlN,IAC5BA,EAAO2M,iBAAmB3M,EAAO2M,kBAAoB,OACzB,CACxBQ,UAAW,OACXC,WAAY,OACZC,YAAa,OACbC,aAAc,cAAatN,EAAOmM,iBAAmB,SACrDrB,gBAAiB,cACjBL,QAAS,oBACTkB,OAAQ,UACRC,aAAc,OACd2B,UAAW,MACXnB,YAAa,QAIfoB,GAAuBxN,IACzBA,EAAO2M,iBAAmB3M,EAAO2M,kBAAoB,OACzB,CACxBc,OAAQ,OACRzC,MAAOhL,EAAOmM,iBAAmB,QACjCrB,gBAAiB,cACjBL,QAAS,kBACTkB,OAAQ,UACRC,aAAc,OACd2B,UAAW,MACXnB,YAAa,QAIfsB,GAAyB1N,IAC3BA,EAAO2M,iBAAmB3M,EAAO2M,kBAAoB,OACzB,CACxBpC,OAAQ,OACRC,MAAO,OACPU,YAAalL,EAAO2N,gBAAkB3N,EAAO2N,gBAAkB,UAC/DrC,YAAatL,EAAOgN,gBAAkBhN,EAAOgN,gBAAkB,OAC/DxB,YAAaxL,EAAOiN,gBAAkBjN,EAAOiN,gBAAkB,QAIjEW,GAA4B5N,IACF,CACxB+M,cAAe,SACf5C,QAAS,OACTC,eAAgB,WAChBU,gBAAiB9K,EAAO8K,iBAAmB,UAI7C+C,GAA6B7N,IAC/BA,EAAO2M,iBAAmB3M,EAAO2M,kBAAoB,OACzB,CACxB7B,gBAAiB9K,EAAOkM,uBAAyB,UACjDU,gBAAiB,QAAQ5M,EAAO6M,8BAAgC,OAChE7B,MAAOhL,EAAOmM,iBAAmB,UACjCW,iBAAkB,YAClB3C,QAAS,OACTU,WAAY,aACZkC,cAAe,MACfV,UAAW,aACX7B,MAAO,OACPD,OAAQvK,EAAO2M,iBACfzB,YAAalL,EAAOkM,sBAAwBlM,EAAOkM,sBAAwB,UAC3EZ,YAAatL,EAAOgN,gBAAkBhN,EAAOgN,gBAAkB,OAC/DxB,YAAaxL,EAAOiN,gBAAkBjN,EAAOiN,gBAAkB,QAIjEa,GAA8B9N,IAChCA,EAAO2M,iBAAmB3M,EAAO2M,kBAAoB,OACzB,CACxBnC,MAAO,OACPC,QAAS,YACT4B,UAAW,aACXnB,YAAalL,EAAO2N,gBAAkB3N,EAAO2N,gBAAkB,UAC/DrC,YAAatL,EAAOgN,gBAAkBhN,EAAOgN,gBAAkB,OAC/DxB,YAAaxL,EAAOiN,gBAAkBjN,EAAOiN,gBAAkB,QAIjEc,GAA2B/N,IAC7BA,EAAO2M,iBAAmB3M,EAAO2M,kBAAoB,OACzB,CACxB3B,MAAOhL,EAAOmM,iBAAmB,UACjCR,OAAQ,UACRlB,QAAS,WACTuD,QAAS,OACTP,OAAQ,OACR3C,gBAAiB9K,EAAOkM,uBAAyB,UACjDd,aAAc,SA0ChB6C,GAAcC,IAChB,GAAIA,GAAQA,EAAK3Q,OAAS,EAAG,CACzB,MAAMsB,EAAMqP,EAAKxK,MAAM,KACvB,IAAK,IAAIlF,EAAI,EAAGA,EAAIK,EAAItB,OAAQiB,IAC5BK,EAAIL,GAAK,IAAIK,EAAIL,GAAGsF,UAExBoK,EAAOrP,EAAIsP,KAAK,WAEhBD,EAAO,qDAGX,OAAOA,GC/PJ,MAAME,GA+CT3O,YACInG,EACA2O,EACAoG,GAEA1O,KAAKrG,MAAQA,EACbqG,KAAKsI,SAAWA,EAChBtI,KAAK2O,oBAAsBD,EA7CxB,gCAAgC/U,GACnC,GAAIA,EAAM0G,OAAOuO,2BAA6BjV,EAAM0G,OAAOwO,OAASlV,EAAM0G,OAAOyO,SAAU,CAEvF,MAAMC,EAAM,GAAGpV,EAAM0G,OAAOuO,mCAAmCjV,EAAM0G,OAAOwO,kBAAkBlV,EAAM0G,OAAOyO,WAE3G,OAAOE,MAAMD,EADG,CAAEE,OAAQ,QAErBC,KAAKC,GAAKA,EAAEC,QACZF,KAAKC,IACF,GAAIA,EAAEE,MACF,OAAOF,EAAEE,MAET,MAAMF,IAMtB,MAAMJ,EAAM,GAAGpV,EAAMoG,QAAQuP,IAAIjP,OAAOkP,mDAAmD5V,EAAMoG,QAAQuP,IAAIjP,OAAOmP,kCAAkC7V,EAAMoG,QAAQuP,IAAIjP,OAAOoP,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,CACL5V,KAAM,eACN+L,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,OAEhBrQ,KAAK2O,qBAAoB,GAE7B,MAEJ,IAAK,sCACD,OAAQkB,EAAOE,QAAQI,SAAShW,MAC5B,IAAK,oBAEyBkF,IAAlBW,KAAKsI,UAELqH,EAAS,CACLG,KAAM,sBACNC,QAAS,CACL5V,KAAM,gBACN+L,MAAOlG,KAAKsI,cAK5B,MACJ,IAAK,gBAEOtI,KAAKrG,MAAM0G,OAAOiQ,cAElBX,EAAS,CACLG,KAAM,6BACNC,QAAS,CACLQ,KAAMvQ,KAAKrG,MAAM0G,OAAOiQ,iBAiBxD,OAAOV,EAAKC,IClFLW,OAzCsC7W,IACjD,MAAM,aAAE8W,GAAiBrM,OAAOsM,SAEzB9I,EAAQ+I,GAAaC,mBAAS,IACrCC,kBAAQ,KACJ,GAAIlX,EAAM2O,SAAU,CAChB,MAAMwI,EAAMnX,EAAM2O,WACdwI,EAAI7H,QACJ0H,EAAgC,iBAAfG,EAAI7H,OAAsB6H,EAAI7H,OAAS6H,EAAI7H,OAAO/C,MAAMnH,cAGlF,CAACpF,EAAM2O,WAEV,MAAMyI,EAAaF,kBAAQ,IAChBzM,OAAOsM,QAAQM,iBAAiB,CAAE3B,MAAO1V,EAAMsX,kBACvD,CAACtX,EAAMsX,kBAEJC,EAAoBL,kBAAQ,KAC9B,GAAIE,GAAcpX,EAAM2O,SACpB,OAAO,IAAImG,GAAkB9U,EAAM0G,OAAQ1G,EAAM2O,SAAU3O,EAAM+U,gBAGtE,CAAC/U,EAAM2O,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,EFkU0BjR,KAChC,MAAMkR,EAtGgBlR,KACf,CACHmR,iBAAkBnR,EAAOmR,kBAAoB,QAC7CC,gBAAiBpR,EAAOoR,iBAAmB,QAC3CC,kBAAmBrR,EAAOqR,mBAAqB,UAC/CC,mBAAoBtR,EAAOsR,oBAAsB,IACjDC,kBAAmBvR,EAAOuR,mBAAqB,QAC/CC,kBAAmBxR,EAAOwR,mBAAqB,IAC/CC,yBAA0BzR,EAAOyR,0BAA4B,QAC7DC,wBAAyB1R,EAAO0R,yBAA2B,QAC3DC,0BAA2B3R,EAAO2R,2BAA6B,UAC/DC,2BAA4B5R,EAAO4R,4BAA8B,IACjEC,0BAA2B7R,EAAO6R,2BAA6B,QAC/DC,0BAA2B9R,EAAO8R,2BAA6B,MAyF7CC,CAAiB/R,GACjCgS,EA9CgBhS,KACf,CACHiS,mBAAoBjS,EAAOiS,oBAAsB,MACjDC,WAAYlS,EAAOkS,YAAc,KACjCC,yBAA0BnS,EAAOmS,0BAA4B,YAC7DC,eAAgBpS,EAAOoS,gBAAkB,GACzCC,kBAAmBrS,EAAOqS,mBAAqB,GAC/CC,0BAA2BtS,EAAOsS,2BAA6B,YAC/DC,gBAAiBvS,EAAOuS,iBAAmB,GAC3CC,mBAAoBxS,EAAOwS,oBAAsB,GACjDC,kBAAmBzS,EAAOyS,mBAAqB,WAoC7BC,CAAiB1S,GACjC2S,EAjCyB3S,KACxB,CACH4S,sBAAuB5S,EAAO4S,uBAAyB,WACvDC,0BAA2B7S,EAAO6S,2BAA6B,QAC/DC,yBAA0B9S,EAAO8S,0BAA4B,GAC7DC,2BAA4B/S,EAAO+S,4BAA8B,GACjEC,4BAA6BhT,EAAOgT,6BAA+B,IACnEC,2BAA4BjT,EAAOiT,4BAA8B,QACjEC,2BAA4BlT,EAAOkT,4BAA8B,IACjEC,mCAAoCnT,EAAOmT,oCAAsC,QACjFC,mCAAoCpT,EAAOoT,oCAAsC,IACjFC,iCAAkCrT,EAAOqT,kCAAoC,GAC7EC,sBAAuBtT,EAAOsT,uBAAyB,KACvDC,2BAA4BvT,EAAOuT,4BAA8B,KACjEC,sCAAuCxT,EAAOwT,uCAAyC,GACvFC,wCAAyCzT,EAAOyT,yCAA2C,KAC3FC,oCAAqC1T,EAAO0T,qCAAuC,KACnFC,8BAA+B3T,EAAO2T,+BAAiC,GACvEC,8BAA+B5T,EAAO4T,+BAAiC,GACvEC,gCAAiC7T,EAAO6T,iCAAmC,IAC3EC,6CAA8C9T,EAAO8T,8CAAgD,GACrGC,4CAA6C/T,EAAO+T,8CAA+C,IAYxEC,CAA0BhU,GACnDiU,EAvFejU,KACd,CACHkU,eAAgBlU,EAAOkU,iBAAkB,EACzCC,YAAanU,EAAOmU,aAAe,QACnCC,0BAA2BpU,EAAOoU,2BAA6B,SAC/DC,eAAgBrU,EAAOqU,gBAAkB,YACzCC,gBAAiBtU,EAAOsU,iBAAmB,YAC3CC,4BAA6BvU,EAAOuU,6BAA+B,MACnEC,YAAaxU,EAAOwU,cAAe,EACnCC,cAAezU,EAAOyU,eAAiB,KACvCC,iBAAkB1U,EAAO0U,kBAAoB,SAC7CC,yBAA0B3U,EAAO2U,0BAA4B,KAC7DC,cAAe5U,EAAO4U,eAAiB,QACvCC,eAAgB7U,EAAO6U,gBAAkB,KACzCC,oBAAqB9U,EAAO8U,qBAAuB,UACnDC,iBAAkB/U,EAAO+U,kBAAoB,IAC7CC,0BAA2BhV,EAAOgV,2BAA6B,UAC/DC,gBAAiBjV,EAAOiV,iBAAmB,UAC3CC,yBAA0BlV,EAAOkV,0BAA4B,UAC7DC,eAAgBnV,EAAOmV,gBAAkB,UACzCC,4BAA6BpV,EAAOoV,6BAA+B,UACnEC,kBAAmBrV,EAAOqV,mBAAqB,UAC/CC,yBAA0BtV,EAAOsV,0BAA4B,UAC7DC,eAAgBvV,EAAOuV,gBAAkB,UACzCC,+BAAgCxV,EAAOwV,gCAAkC,YACzEC,wBAAyBzV,EAAOyV,yBAA2B,OAC3DC,sBAAuB1V,EAAO0V,uBAAyB,KACvDC,qBAAsB3V,EAAO2V,sBAAwB,KACrDC,YAAa5V,EAAO4V,aAAe,MACnCC,8BACI7V,EAAO6V,+BACP,8iEACJC,oBAAqB9V,EAAO8V,qBAAuB,OACnDC,4BAA6B/V,EAAO+V,6BAA+B,OACnEC,OAAQhW,EAAOgW,QAAU,UACzBC,OAAQjW,EAAOiW,QAAU,YAoDRC,CAAgBlW,GACrC,OAAAY,YAAA,CACIuV,kBAAkB,EAClBC,YAAanI,GAAWjO,EAAOoW,aAC/BtL,gBAAiB9K,EAAO8K,iBAAmB,SACxCoG,GACAc,GACAW,GACAsB,IE9UcoC,CAAoB/c,EAAM0G,OAAOA,QAEtD,MAAiC,KAA1B1G,EAAMsX,gBACTrX,IAAA+c,cAAClG,EAAY,CAACM,WAAYA,EAAY6F,OAAQhP,EAAQ0J,aAAcA,EAAcH,MAAOA,IAEzFvX,IAAA+c,cAAA,kD,6kBCmGOE,OAjI8Cld,IACzD,MAAOmd,EAAQC,GAAanG,oBAAS,IAC9B9D,EAAWkK,GAAgBpG,oBAAS,IACpCqG,EAAYvI,GAAiBkC,oBAAS,IACtCvB,EAAO6H,GAAYtG,mBAAS,KAC5BuG,EAAaC,GAAkBxG,oBAAS,IACxCyG,EAAkBC,GAAuB1G,mBAASjX,EAAM0G,OAAOkB,0BAC/DgW,EAAQC,GAAa5G,oBAAS,IAC9BtI,EAAUmP,GAAe7G,qBAC1BjG,EAC6E,OAA/E+M,mBAAS,CAAEC,QAASC,cAAYC,QAAS9X,QAASpG,EAAMoG,QAAQgF,WACgB,OAAhF2S,mBAAS,CAAEC,QAASC,cAAYE,SAAU/X,QAASpG,EAAMoG,QAAQgF,UAC/DgT,EHwMoBC,EAAC3X,EAAyCyM,EAAoBnC,KAC/D,CACrBsN,iBAAkBhO,GAAoB5J,GACtC6X,0BAA2BxN,GAA6BrK,EAAQsK,GAChEwN,gBAAiBlN,GAAmB5K,GACpC+X,qBAAsB9L,GAAwBjM,GAC9CgY,mBAAoB1L,GAAsBtM,GAC1CiY,kBAAmBzL,GAAqBxM,EAAQyM,GAChDyL,kBAAmBxL,GAAqB1M,GACxCmY,oBAAqBjL,GAAuBlN,GAC5CoY,iBAAkB5K,GAAoBxN,GACtCqY,mBAAoB3K,GAAsB1N,GAC1CsY,sBAAuB1K,GAAyB5N,GAChDuY,uBAAwB1K,GAA0B7N,GAClDwY,wBAAyB1K,GAA2B9N,GACpDyY,qBAAsB1K,GAAwB/N,GAC9C0Y,YAjCwB,CACxBC,WAAY,MACZvN,aAAc,MACdb,OAAQ,MACRC,MAAO,MACPX,SAAU,WACVE,MAAO,OACPC,OAAQ,UG9LM2N,CAAere,EAAM0G,OAAQyM,EAAWnC,GACpDsO,EAA4BA,KAC9BlC,GAAU,GACVC,GAAa,GACbtI,GAAc,IAalBwK,oBAAU,KACFpC,GACArI,GAAkB0K,mBAAmBxf,GAChCuV,KAAK+B,IACFiG,EAASjG,KAEZmI,MAAMhR,IACH8O,EA5CE,iBA6CFvd,EAAM8G,UAAU4H,UAAUD,MAGvC,CAAC0O,IACJoC,oBAAU,KACN,WACI,MAAMG,EAAkB,IAAI3R,GAAgB/N,GACtC2f,QAAaD,EAAgBE,OACnC,GAAIF,EAAgBtR,KAAKC,QAAS,CAC9BrO,EAAMoG,QAAQU,UAAUC,MAAM,uCAAuC2Y,EAAgBtR,KAAKC,aAE1F,MAAMC,EAAyC,IAA/BoR,EAAgBtR,KAAKE,QACrCuR,WAAW,KACF1C,IACDnd,EAAMoG,QAAQU,UAAUC,MAAM,qCAAqCoW,MACnEQ,EAAoB+B,EAAgBtR,KAAKG,SACzCkP,GAAe,KAEpBnP,GAEPwP,EAAY,IAAM6B,IAftB,GAgBKF,MAAMhR,GAAKzO,EAAM8G,UAAU4H,UAAUD,KAC3C,IACH8Q,oBAAU,KACF3B,GACAC,GAAU,IAEf,CAACnI,EAAO/G,IACX,MAAMmR,EAAeA,IACV,GAAGpK,GA1EI,gBA4ElB,OACIzV,IAAA+c,cAAA,OACI+C,MAAKzY,MAAA,GACE8W,EAAUE,mBACRnL,GAAagK,GAAU2C,IAAiB1B,EAAUG,0BAA4B,KAGtFpL,KAAeqK,GAAgBA,GAAeL,IAC3Cld,IAAA+c,cAAA,UAAQgD,QAASV,EAA2BS,MAAO3B,EAAUI,iBACxDxe,EAAM0G,OAAO0L,cAAgBnS,IAAA+c,cAAA,OAAKiD,IAAKjgB,EAAM0G,OAAO0L,aAAc8N,IAAI,OAAOH,MAAO3B,EAAUK,uBAC/Fxe,IAAA+c,cAAA,OAAK+C,MAAO,IACR9f,IAAA+c,cAAA,OAAK+C,MAAO,CAAEI,WAAY,OAAQC,SAAU,SAAWpgB,EAAM0G,OAAO2Z,kBACpEpgB,IAAA+c,cAAA,WAAMhd,EAAM0G,OAAO4Z,iBAChB,IACNhD,GACGrd,IAAA+c,cAAA,QAAMuD,UAAU,UAAUR,MAAO3B,EAAUgB,aAAW,MAMjEjM,GAAaqK,IAAgBL,GAC1Bld,IAAA+c,cAAA,OAAK+C,MAAO3B,EAAUY,uBAClB/e,IAAA+c,cAAA,OAAK+C,MAAO3B,EAAUa,wBACjBjf,EAAM0G,OAAO0L,cACVnS,IAAA+c,cAAA,OAAKiD,IAAKjgB,EAAM0G,OAAO0L,aAAc8N,IAAI,OAAOH,MAAO3B,EAAUM,qBAErEze,IAAA+c,cAAA,OAAK+C,MAAO,CAAES,SAAU,MAE5BvgB,IAAA+c,cAAA,OAAK+C,MAAO3B,EAAUc,yBAClBjf,IAAA+c,cAAA,SAAIU,GACJzd,IAAA+c,cAAA,UAAQgD,QAASV,EAA2BS,MAAO3B,EAAUe,sBAAoB,gBAM5FhC,GAAU2C,KACP7f,IAAA+c,cAAA,OAAK+C,MAAO3B,EAAUO,mBAClB1e,IAAA+c,cAAA,OAAK+C,MAAO3B,EAAUQ,mBACjB5e,EAAM0G,OAAO0L,cACVnS,IAAA+c,cAAA,OAAKiD,IAAKjgB,EAAM0G,OAAO0L,aAAc8N,IAAI,OAAOH,MAAO3B,EAAUM,qBAErEze,IAAA+c,cAAA,OAAK+C,MAAO,CAAES,SAAU,KACxBvgB,IAAA+c,cAAA,UAAQgD,QA9FMS,KAC9BpD,GAAa,GACbtI,GAAc,IA4F8CgL,MAAO3B,EAAUS,sBAC7D5e,IAAA+c,cAAA,UAAQgD,QA3FGU,KAC3B7C,GAAU,GACVT,GAAU,GACVC,GAAa,GACbtI,GAAc,GACd0I,GAAe,IAsF0CsC,MAAO3B,EAAUU,kBACtD7e,IAAA+c,cAAA,OAAK/L,OAAO,OAAO0P,GAAG,UAAUC,QAAQ,MAAMC,QAAQ,cAAc3P,MAAM,OAAO4P,SAAS,YACtF7gB,IAAA+c,cAAA,QAAM+D,EAzHlC,geAyHqDC,KAAMhhB,EAAM0G,OAAOmM,qBAIxD5S,IAAA+c,cAAA,OAAK+C,MAAO3B,EAAUW,oBAClB9e,IAAA+c,cAACnG,GAAQ,CAACS,gBAAiB5B,EAAOhP,OAAQ1G,EAAO2O,SAAUA,EAAUoG,cAAeA,OAI9F+K,KAAkB7f,IAAA+c,cAAA,OAAK+C,MAAO,CAAElP,QAAS,OAAQU,WAAY,aAAevR,EAAM0G,OAAOua,2B,+NCzIvFjhB,cAEZ,MAAOmd,EAAQC,GAAand,YAAe,GACrCihB,E,2WAAC5Z,CAAA,GACAtH,GAKDmhB,EAAWC,YAAY,KAEf,qBADO3W,QACQA,OAAOsM,UAC5BqG,GAAU,GACViE,cAAcF,KAEnB,KAEH,OAAOlhB,gBAAA,OAAKsgB,UAAU,OAAOpD,GAAUld,gBAACid,GAAI/c,OAAAC,OAAA,GAAK8gB,O,oCC1BrD,gBAeeI,IAJiEvL,IAAA,IAAC,UAAEwK,GAAWxK,EAAA,OAC1F9V,gBAAA,OAAKsgB,UAAcA,EAAH,qB,0pBCkBpB,MAAMgB,UAAsBthB,gBAExBkG,YAAYnG,GACRuG,MAAMvG,GAFF,KAAAwhB,WAAa,iBAQb,KAAAC,YAAc,CAACC,EAAanT,IAE5BtO,gBAAA,OAAKsgB,UAAU,sCAAsCmB,IAAKA,GACtDzhB,gBAAA,SAAIsO,IAKR,KAAAoT,aAAe,IAEf1hB,gBAAA,OAAKsgB,UAAU,4BACVla,KAAKrG,MAAM4hB,MAAMzd,IAAI,CAAC0d,EAAMC,IAClBzb,KAAKob,YAAY,GAAGK,IAAQD,EAAK7Y,SAAU6Y,EAAKE,WAAa,MAU5E,KAAAC,0BAA4B,KAChC,MAAMJ,EAAQvb,KAAKsb,eACnB,OAAO1hB,gBAAA,OAAKsgB,UAAU,0BAA0BqB,IA7BhDvb,KAAK1D,MAAQ,CACTif,MAAO5hB,EAAM4hB,MACbK,kBAAkB,GA8BnBC,SACH,MAAMC,EAAS7a,IAAA,GACRjB,KAAKrG,OAAK,IACboiB,cAAe,CACXC,IAAK,MACL9B,UAAcla,KAAKmb,WAAR,mBACXc,SAAUjc,KAAK2b,6BAEnBO,yBAA0B,CACtBF,IAAK,MACL9B,UAAW,GAAGla,KAAKmb,WACnB/f,YAAW6F,EAAA,GAAOjB,KAAKrG,UAG/B,OAAOqG,KAAKrG,MAAMwiB,WAAWL,IAItBZ,a,2HCxDf,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,EAGEljB,eAAmBkjB,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,EAAStU,YAAI,IAAAyV,OAAA,EAAbA,EAAeE,SAASC,UAAW,GAC7CC,EAAoC,QAAhBH,EAAGpB,EAAStU,YAAI,IAAA0V,GAAS,QAATA,EAAbA,EAAevb,eAAO,IAAAub,OAAA,EAAtBA,EAAwB9T,KACrD,OAAI0S,EAASpgB,QAAUkhB,EAAUU,uBAE7BjkB,gBAACC,OAAI,CAACqgB,UAAU,0BACb2C,EAAsBC,EAAiBC,EAASV,EAASyB,WAAaF,GACtEvB,EAAS0B,cACT1B,EAAS2B,QAKZV,EAEA1jB,gBAACC,OAAI,CAACqgB,UAAU,sCAjEQ+D,EAAC5B,EAA+Bc,EAA2BC,EAC1DC,EAAsCE,KAAsD,IAAAW,EAEzH,IAAK7B,EAASG,gBAAkBY,IAA8B,QAAbc,EAAA7B,EAAStU,YAAI,IAAAmW,OAAA,EAAbA,EAAeR,SAASS,gBAAiBZ,EACxF,OAAO,KAGT,MAAM,uBAAEa,EAAsB,uBAAEC,EAAsB,oBAAEC,GAAwBnB,EAE1Eb,EAAkBD,EAASG,cAAcF,gBAEzCiC,EAAUC,2BAAiB,QAASnB,EAAmBoB,oBAAkBC,eACzEC,EAAyBC,iCAAuBvB,EAAmBkB,GAEzE,OACE3kB,2BAAA,KACG0iB,EACC1iB,gBAACilB,SAAM,CAACxO,KAAK,OAAO6J,UAAU,qCAAqCP,QAASgD,EAAqBN,IAC9F+B,GACS,KACdxkB,gBAACilB,SAAM/kB,OAAAC,OAAA,CACLsW,KAAK,OAAO6J,UAAU,sCAAyCyE,EAAsB,CACrFhF,QAASyC,EAAmBC,EAAUC,KACrCA,EAAkB+B,EAAyBC,KA2C3CL,CAAsB5B,EAAUc,EAAWC,EAAeC,EAAkBE,GAC5EV,EAAsBC,EAAiBC,EAASV,EAASyB,WAAaF,GACtEvB,EAASyC,mBACTzC,EAAS0B,cACT1B,EAAS2B,QAKZ3B,EAASyC,mBAETllB,gBAACC,OAAI,CAACqgB,UAAU,gCACb2C,EAAsBC,EAAiBC,EAASV,EAASyB,WAAaF,GACtEvB,EAASyC,mBACTzC,EAAS0B,cACT1B,EAAS2B,QAMdpkB,gBAACC,OAAI,CAACqgB,UAAU,0BACb2C,EAAsBC,EAAiBC,EAASV,EAASyB,WAAaF,GACtEvB,EAAS0B,cACT1B,EAAS2B,SAeVe,EAA0BA,CAACC,EAAsBC,EAAkC9B,EACxDC,EAA4CN,EAA8CO,EAAsCC,EAChIC,IAE7B0B,EAAUnhB,IAAI,CAACue,EAAUZ,KACvB,MAAMyD,EAAYzD,EAClB,OACE7hB,gBAAA,OAAKsgB,UAAW,wBAAuB8E,EAAc,4BAA8B,IAAM3D,IAAK6D,GAC3F7C,EAASqB,SACV9jB,gBAAA,QAAMsgB,UAAU,mCACDoD,EAAmB,KA9KnB6B,EAAC9C,EAA+Bc,EAA2BC,EAC1DC,EAAsCE,KAAsD,IAAA6B,EAEpH,IAAK/C,EAASG,gBAAkBY,IAA8B,QAAbgC,EAAA/C,EAAStU,YAAI,IAAAqX,OAAA,EAAbA,EAAe1B,SAASS,gBAAiBZ,EACxF,OAAO,KAGT,MAAM,uBACJc,EAAsB,yBACtBgB,EAAwB,oBACxBf,EAAmB,8BACnBgB,EAA6B,uBAC7BlB,GACEjB,EAEEb,EAAkBD,EAASG,cAAcF,gBAEzCiC,EAAUC,2BAAiB,QAASnB,EAAmBoB,oBAAkBC,eACzEC,EAAyBC,iCAAuBvB,EAAmBkB,GAEzE,OACE3kB,gBAACC,OAAIC,OAAAC,OAAA,GAAKsiB,EAASG,cAAc+C,gBAC/B3lB,gBAAA,OAAKsgB,UAAU,+BACZoC,EAAkB1iB,gBAAA,QAAMsgB,UAAU,WACtBoF,GACK1lB,gBAAA,QAAMsgB,UAAU,QACrBmF,IAIb/C,GACA1iB,gBAAA,OAAKsgB,UAAU,oCACHtgB,gBAAA,QAAMsgB,UAAU,0CACXmC,EAASG,cAAcgD,aAEtC5lB,gBAACilB,SAAM,CACLxO,KAAK,OAAO6J,UAAU,mCACtBP,QAASgD,EAAqBN,IAC7B+B,IAIPxkB,gBAACilB,SAAM/kB,OAAAC,OAAA,CAACmgB,UAAU,4BAA+ByE,EAAsB,CAC/DhF,QAASyC,EAAmBC,EAAUC,KAC3CA,EAAkB+B,EAAyBC,KAkIDa,CAAiB9C,EAAUc,EAAWC,EAAeC,EAAkBE,GAE5GL,EAAeb,EAAUc,EAAWC,EAAeN,EAAiBO,EAAkBC,EAAkBC,OAsBhHkC,EAAkBA,CAACT,EAAsBrlB,EAAiDslB,EAA8C9B,EACrHC,EAA4CsC,EAC5CC,EAA2BC,EAA2BvC,EAAsCC,EAC5FC,KACvB,MAAQsC,OAAO,gBAAE/C,EAAe,kBAAEgD,IAAwBnmB,EAC1D,OAAIgmB,EACM/lB,2BAAA,KACL+lB,GAMDV,EACKtlB,EAAMomB,sBACXhB,EAAwBC,EAAaC,EAAW9B,EAAWC,EAAeN,EAAiBO,EAAkBC,EAAkBC,GAE/H3jB,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMqmB,kBACbjB,EAAwBC,EAAaC,EAAW9B,EAAWC,EAAeN,EAAiBO,EAAkBC,EAAkBC,GAC/H0C,EAAwBjB,EAAac,IAKpCF,EACJhmB,gBAAA,OAAKsgB,UAAU,wBACbtgB,gBAAA,OAAKsgB,UAAU,iBACZvgB,EAAMkmB,MAAMK,YAGftmB,2BAAA,KACD8lB,IA0CDS,EAA6BA,CAAC9D,EAA+Bc,EAA2BiD,EAAe7C,KAAkC,IAAA8C,EAC7I,MAAM/D,EAAwC,QAAzB+D,EAAGhE,EAASG,qBAAa,IAAA6D,OAAA,EAAtBA,EAAwB/D,iBAC1C,WAAEgE,EAAU,aAAEC,EAAY,kBAAEC,GAAsBrD,EACxD,IAAIsD,EAKJ,OAHAA,EAAanE,EAAkBgE,EAAaC,EAC5CE,EAAapE,EAAStU,MAAQsU,EAAStU,KAAK2V,SAASS,eAAiBZ,EAAwBiD,EAAoBC,EAGhH7mB,2BAAA,KACEA,gBAAA,OAAKsgB,UAAU,+CACbtgB,gBAAA,KACEsgB,UAAW,+CAA+CuG,EAAWnhB,cAAcohB,QAAQ,IAAK,cAClG9mB,gBAAA,KAAGsgB,UAAW,+CAA+CuG,EAAWnhB,cAAcohB,QAAQ,IAAK,MAChGD,GA5CuBE,EAACtE,EAA+Bc,EAA2BiD,KAAiB,IAAAQ,EAAAC,EAAAC,EAC5G,MAAMxE,EAAwC,QAAzBsE,EAAGvE,EAASG,qBAAa,IAAAoE,OAAA,EAAtBA,EAAwBtE,iBAC1C,UAAEyE,EAAS,WAAEC,GAAe7D,EAG5B8D,EAAa,IAAIb,KADRA,EADc,EACSY,EAAaD,KAEnD,OACEnnB,2BAAA,KACEA,gBAACC,OAAI,CAACqgB,UAAU,qDACboC,EAAkB1iB,gBAAA,KAAGsgB,UAAU,wDACP,QAD6D2G,EACnFxE,EAASG,qBAAa,IAAAqE,OAAA,EAAtBA,EAAwBK,eACxB,KACsB,QADlBJ,EACJzE,EAASG,qBAAa,IAAAsE,OAAA,EAAtBA,EAAwBtB,aACpB,KACP5lB,gBAAA,KAAGsgB,UAAU,wDACV+G,MA+BFN,CAA0BtE,EAAUc,EAAWiD,MAkMlDH,EAA0BA,CAACjB,EAAsBc,IAChDA,EAIHlmB,gBAAA,OAAKsgB,UAAW,4BAA2B8E,EAAc,sCAAwC,KAC9Fc,GAJI,KAuDIqB,UAzCuDxnB,IAAmD,IAAAynB,EAAAC,EAAAC,EAAAC,EAAAC,EAEvH,MACOxC,EAAayC,GAAkB7nB,YAAwB,GACxD8nB,EAzCiBC,EAAC3C,EACA4C,EACAC,IAExBjoB,gBAAA,OAAKsgB,UAAU,iCACbtgB,gBAAA,SAAOsgB,UAAU,gDACftgB,gBAAA,QAAMsgB,UAAW,8BAA+B2H,GAEhDjoB,gBAAA,SAAO+f,QAASiI,EAAuB9R,KAAK,WAAWoK,UAAU,gCACjEtgB,gBAAA,OACEsgB,UAAW,yDAAwD8E,EAAc,UAAY,iBA+B3E2C,CAAiB3C,EAFX4C,IAAMH,GAAgBzC,GAEyB,cAEvE8C,EACJloB,gBAAA,MAAIsgB,UAAU,qBACXvgB,EAAMwjB,UAAU4E,UACjBnoB,gBAAA,QAAMsgB,UAAU,iCACL,KAAK9S,OAAiB,QAAXga,EAACznB,EAAMgH,YAAI,IAAAygB,OAAA,EAAVA,EAAYY,qBALL,KAKoC,QAAVX,EAAA1nB,EAAMgH,YAAI,IAAA0gB,OAAA,EAAVA,EAAYW,kBAAyC,QAAU,YAI3H,OACEpoB,gBAAA,MAAAE,OAAAC,OAAA,CAAKmgB,UAAWvgB,EAAMugB,UAAWI,GAAI3gB,EAAM2gB,IAAQ3gB,EAAMsoB,uBAAuBtoB,IAC7EmoB,EACDloB,gBAAA,OAAKsgB,UAAU,4BACe,QADWoH,EACtC3nB,EAAMuoB,6BAAqB,IAAAZ,OAAA,EAA3BA,EAA6Ba,YAhEIxoB,IAEtCC,gBAACC,OAAI,CAACqgB,UAAU,sCAEbvgB,EAAMyoB,uBA8DNC,CAAiC1oB,KACtB,QAAX4nB,EAAC5nB,EAAMgH,YAAI,IAAA4gB,GAAVA,EAAYe,iBAAkB3oB,EAAM4oB,mBAzGlBC,EAyGuD7oB,EAAM4oB,iBAvGnF3oB,2BAAA,KACEA,gBAACC,OAAIC,OAAAC,OAAA,GAAKyoB,EAAWC,yBAClBD,EAAWE,iBACZ9oB,gBAACC,OAAI,CAACqgB,UAAU,oCACbsI,EAAWG,qBAEbH,EAAWI,mBAkGbjpB,EAAMomB,sBA7MgB8C,EAAC7D,EAAsBrlB,EAAiDwjB,IAC/FxjB,EAAMmpB,gBAAkBC,kBAAgBC,YAAYrpB,EAAMmpB,gBAE1DlpB,gBAAA,OAAKsgB,UAAU,wBACZvgB,EAAMmpB,eAAehlB,IAAImlB,IAAY,IAAAC,EAAAC,EACpC,OAAQvpB,gBAAA,OAAKyhB,IAAK4H,EAAU,GAAGnF,WAAY5D,UAAU,+BAClDiG,EAA2B8C,EAAU,GAAI9F,EAtBlCd,KAClB,IAAI+G,EAAY,EAMhB,OAJAA,EAAY/G,EAASgH,OAAO,CAACjD,EAAOkD,KAAQ,IAAAC,EAAAC,EAC1C,OAAOpD,GAAqC,QAAhCmD,EAAa,QAAbC,EAAIF,EAAKvb,YAAI,IAAAyb,OAAA,EAATA,EAAW9F,SAAS+F,gBAAQ,IAAAF,IAFrB,OAKlBH,GAewDM,CAAWT,GACZ,QADsBC,EACxEvpB,EAAMoG,QAAQ0B,cAAckiB,eAAe5a,eAAO,IAAAma,OAAA,EAAlDA,EAAoDU,uBACrDnE,EAAgBT,EAAarlB,EAAOspB,EAAWtpB,EAAMwjB,UAAWxjB,EAAMyjB,cACrEzjB,EAAM+lB,iBAAkB/lB,EAAMgmB,kBAAmBhmB,EAAMkqB,eACvDlqB,EAAM0jB,iBAAkB1jB,EAAMomB,sBAAyE,QAApDoD,EAAExpB,EAAMoG,QAAQ0B,cAAckiB,eAAe5a,eAAO,IAAAoa,OAAA,EAAlDA,EAAoDS,2BAM7GjqB,EAAMkqB,eACVjqB,gBAAA,OAAKsgB,UAAU,wBACbtgB,gBAAA,OAAKsgB,UAAU,iBACZvgB,EAAMkmB,MAAMK,YAGftmB,2BAAA,KACDD,EAAM+lB,kBAsLwBmD,CAAqB7D,EAAarlB,EAAOA,EAAMwjB,WAAasC,EAAgBT,EAAarlB,EAAOA,EAAMspB,UACnItpB,EAAMwjB,UAAWxjB,EAAMyjB,cAAezjB,EAAM+lB,iBAAkB/lB,EAAMgmB,kBAAmBhmB,EAAMkqB,gBAC9FlqB,EAAMmqB,qBACLlqB,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMoqB,qBACbrC,EACD9nB,gBAACC,OAAI,CAACqgB,UAAU,4BACbvgB,EAAMmqB,oBACI,QAAVtC,EAAA7nB,EAAMgH,YAAI,IAAA6gB,GAAVA,EAAYc,eA/JS0B,EAACC,EAAuDC,EACvDvqB,IAC5BsqB,EAKHrqB,gBAACC,OAAIC,OAAAC,OAAA,GAAKmqB,GACPD,EAAoBE,SACpBF,EAAoBG,SACpBH,EAAoBI,QACpBJ,EAAoB9B,aARvBxoB,EAAMoG,QAAQU,UAAUxE,MAAM,uDACvB,MA2J+B+nB,CAC5BrqB,EAAM2qB,wBAAyB3qB,EAAM4qB,kBAAmB5qB,GAzItC6qB,EAACC,EAAmDP,EACnDvqB,IAC1B8qB,EAKH7qB,gBAACC,OAAIC,OAAAC,OAAA,GAAKmqB,GACPO,EAAkBC,SAElBD,EAAkBE,SAClBF,EAAkBG,YAClBH,EAAkBI,IAClBJ,EAAkBtC,aAVrBxoB,EAAMoG,QAAQU,UAAUxE,MAAM,qDACvB,MAqIoEuoB,CACjE7qB,EAAMuoB,sBAAuBvoB,EAAM4qB,kBAAmB5qB,IApL1CmrB,EAqLInrB,EAAMorB,qBApLfhC,kBAAgBC,YAAY8B,EAAUE,QAIvDprB,gBAACC,OAAIC,OAAAC,OAAA,GAAK+qB,EAAUG,SACjBH,EAAUroB,OACVqoB,EAAUE,QALN,MAmFyBrrB,KAAkD,IAAAurB,EACpF,OACEtrB,gBAACC,OAAI,CAACqgB,UAAU,+BACH,QAAVgL,EAAAvrB,EAAMgH,YAAI,IAAAukB,GAAVA,EAAY5C,eAAiB,KAAO3oB,EAAMwrB,UAC3CvrB,gBAACC,OAAI,CAACqgB,UAAU,uCAEbvgB,EAAMyoB,uBAERzoB,EAAMyrB,+BA0FFC,CAA2B1rB,IAE/BA,EAAMyjB,eAzLa0H,MAiEAtC,I,scC7bnB,MAAM8C,EAA2D5V,IAAA,IAAC,sBACrE6V,EAAqB,QACrBC,EAAO,UACPC,EAAS,YACTC,EAAW,YACXC,EAAW,MACXvF,EAAK,OACLwF,EAAM,mBACNC,GACHnW,EAAA,OACG9V,gBAACC,OAAIC,OAAAC,OAAA,GAAKwrB,GACLG,EACAF,EACAC,EACAE,EACAvF,EACAwF,EACAC,IAIIC,EAAsDC,IAAA,IAAC,cAChEC,EAAa,QACbC,EAAO,MACP7F,EAAK,WACL8F,EAAU,QACVC,EAAO,aACPC,GACHL,EAAA,OACGnsB,gBAACC,OAAIC,OAAAC,OAAA,GAAKisB,GACLC,EACA7F,EACA8F,EACAC,EACAC,IAIIC,EAAsCC,IAAA,IAAC,WAAEC,EAAU,SAAEC,EAAQ,gBAAEC,EAAe,WAAEC,GAAYJ,EAAA,OACrG1sB,gBAACC,OAAIC,OAAAC,OAAA,GAAKwsB,GACLG,GACG9sB,gBAACC,OAAIC,OAAAC,OAAA,GAAK0sB,GACLC,EAAW5oB,IAAI6oB,GACZ/sB,gBAACA,WAAc,CAACyhB,IAAKsL,EAAU5e,KAAK4e,UAAUC,QAASD,EAAUA,eAOxEE,EAAwCC,IAAA,IAAC,YAAEC,EAAW,OAAEC,GAAQF,EAAA,OACzEltB,gBAACC,OAAIC,OAAAC,OAAA,GAAKgtB,GACLC,EAAOlpB,IAAI,CAACmpB,EAAOxL,IAChB7hB,gBAACysB,EAAiBvsB,OAAAC,OAAA,CAACshB,IAAKI,GAAWwL,OAKlCC,EAAwCC,IAAA,IAAC,YAAEltB,EAAW,QAAEgsB,EAAO,gBAAEmB,EAAe,aAAEC,GAAcF,EAAA,OACzGvtB,gBAACC,OAAIC,OAAAC,OAAA,GAAKE,GACLgsB,EACAmB,EACAC,IAIIC,EAA+CC,IAAA,IAAC,gBACzDC,EAAe,gBACfC,EAAe,OACfT,EAAM,iBACNU,EAAgB,qBAChBC,GACHJ,EAAA,OACG3tB,gBAACC,OAAIC,OAAAC,OAAA,GAAKytB,GACN5tB,gBAAA,WACK6tB,EAAgBG,UAAYhuB,gBAACA,WAAc,KAAE6tB,EAAgBG,UAC9DhuB,gBAAA,WAAM6tB,GAAmB7tB,gBAAC0rB,EAA2BxrB,OAAAC,OAAA,GAAK0tB,MAE7DT,GAAUptB,gBAACitB,EAAkB/sB,OAAAC,OAAA,GAAKitB,IAClCW,EACAD,IAIIG,EAAoCC,IAAA,IAAC,UAAEC,EAAS,YAAEC,GAAaF,EAAA,OACxEluB,gBAACC,OAAIC,OAAAC,OAAA,GAAKguB,GACLC,GAAeA,EAAYlqB,IAAI,CAACmqB,EAAYxM,IAAU7hB,gBAAC0tB,EAAqBxtB,OAAAC,OAAA,CAACshB,IAAKI,GAAWwM,OAoCvFC,UAhC4CC,IAAA,IAAC,kBACxDC,EAAiB,OACjB3rB,EAAM,MACN4rB,EAAK,QACLC,EAAO,aACPC,EAAY,mBACZC,EAAkB,KAClBC,EAAI,MACJC,EAAK,WACLC,GACHR,EAAA,OACGvuB,gBAACyB,SAAMvB,OAAAC,OAAA,GAAKquB,GACP3rB,GAAU7C,gBAACstB,EAAkBptB,OAAAC,OAAA,GAAK0C,IAClC6rB,EACAD,GACGzuB,2BAAA,KACKyuB,EACAG,GAGRD,GACG3uB,gBAACC,OAAI,CAACqgB,UAAU,6CACXqO,EACAC,GAGRC,GAAQ7uB,gBAACiuB,EAAgB/tB,OAAAC,OAAA,GAAK0uB,IAC9BC,EACAC,GAAcA,K,wECnGRC,IAnBuDlZ,IAQjE,IARkE,GACnE4K,EAAE,UACFJ,EAAS,KACT3J,EAAI,UACJsY,EAAS,SACTC,EAAQ,iBACRzL,EAAgB,QAChB1D,GACHjK,EACG,MAAM6O,EAAUC,2BAAiB,QAASnB,EAAmB9M,GACvDwY,EAAanK,iCAAuBvB,EAAmBkB,GAE7D,OACI3kB,gBAACilB,SAAM/kB,OAAAC,OAAA,CAACugB,GAAIA,EAAIJ,UAAWA,EAAS,aAAc2O,EAAWC,SAAUA,EAAUnP,QAASA,GAAaoP,GAClGxY,K,8uBCMN,MAAMyY,UAAiBpvB,gBAY1BkG,YAAmBnG,GACfuG,MAAMvG,GAZO,KAAAsvB,kBAAuCC,6BACpDlpB,KAAKrG,MAAMoG,QAAQgF,QAAQokB,kBAC3BnpB,KAAKrG,MAAMyvB,aACXppB,KAAKrG,MAAM8G,WAEP,sBAAsBwlB,GAC1B,OAAKA,GAAYA,EAAQ1V,OAAQ8Y,mBAAiBC,mBAAmBrD,EAAQ1V,MAGtE3W,gBAAC2vB,UAAO,CAACC,WAAYvD,EAAQjK,IAAKzL,KAAM0V,EAAQ1V,KAAM2J,UAAU,wBAF5D,KAQR2B,SAAM,IAAA4N,EACT,MAAM,UAAEtM,GAAcnd,KAAKrG,OACrB,MAAE+vB,EAAK,UAAExP,GAAcla,KAAKrG,MAAM0G,OAClCspB,EAAgE,CAClE3N,IAAK4N,sBACL1P,UAAsC,QAA7BuP,EAAEzpB,KAAKrG,MAAM0G,OAAO6Z,iBAAS,IAAAuP,IAAI,GAC1CI,iBAAkB1M,EAAU2M,gBAC5BC,iBAAkB5M,EAAU6M,YAC5BC,SAAUjqB,KAAKrG,MAAM2gB,GACrB+C,iBAAkBrd,KAAKipB,kBACvBiB,UAAU,GAGRpO,EAAS7a,IAAA,GACRjB,KAAKrG,OAAK,IACb+vB,MAAOV,EAASmB,eAAeT,GAC/BU,kCAAmCT,EACnCU,kBAAmB,CACfrO,IAAK,KACL9B,UAAW,gBACX7J,KAAM,YAEVia,kBAAmB,CAAEpQ,UAAWqQ,IAAW,eAAgBrQ,IAC3DsQ,gBAAiB,CAAEtQ,UAAW,yBAC9BuQ,MAAOzqB,KAAKrG,MAAMkmB,MAAM6K,UAE5B,OAAO1qB,KAAKrG,MAAMwiB,WAAWL,IAItBkN,a,+EC3Ef,MAcM2B,EAAiBhxB,GAEfC,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMixB,aACXjxB,EAAMkxB,UACNlxB,EAAMmxB,IACNnxB,EAAMoxB,YAKJC,UAxBoDrxB,IAC/D,MAAM,QAAEssB,EAAO,eAAEgF,EAAc,eAAEC,EAAc,YAAE9vB,GAAgBzB,EACjE,OACIC,gBAACyB,SAAMvB,OAAAC,OAAA,GAAKqB,GACP6qB,EACDrsB,gBAACC,OAAIC,OAAAC,OAAA,GAAKmxB,GACLD,EAAentB,IAAIwlB,GACTqH,EAAcrH,Q,+ECPzB3pB,cACZ,MAAM,cAAEoiB,EAAa,yBAAEG,GAA6BviB,EACpD,OACIC,gBAACyB,SAAMvB,OAAAC,OAAA,GAAKmiB,GACRtiB,gBAACC,OAAIC,OAAAC,OAAA,GAAKgiB,O,kCCbtB,gBAoBeoP,IANqDzb,IAAA,IAAC,GAAE4K,EAAE,MAAE8Q,EAAK,UAAElR,EAAS,KAAE3J,GAAMb,EAAA,OAC/F9V,gBAAA,SAAO0gB,GAAOA,EAAH,SAAeJ,UAAcA,EAAH,SAAsBmR,QAASD,GAC/D7a,K,2JCmBT,MAAM6L,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,EAGEljB,eAAmBkjB,EAAgB,GAA0B,CAAEC,UAASC,aAAYC,qBAFlF,KAiBLC,EAAiBA,CAACb,EAA+Bc,EAA2BC,EAC1DN,EAA8CwO,EAA4CjO,EAC1FC,EAA4BC,KAA+C,IAAAC,EAAAC,EACjG,MAAMV,GAAuB,QAAbS,EAAAnB,EAAStU,YAAI,IAAAyV,OAAA,EAAbA,EAAeE,SAASC,UAAW,GAC7CC,EAAoC,QAAhBH,EAAGpB,EAAStU,YAAI,IAAA0V,GAAS,QAATA,EAAbA,EAAevb,eAAO,IAAAub,OAAA,EAAtBA,EAAwB9T,KACrD,OAAI0S,EAASpgB,QAAUkhB,EAAUU,uBAE7BjkB,gBAACC,OAAI,CAACqgB,UAAU,0BACb2C,EAAsBC,EAAiBC,EAASV,EAASyB,WAAaF,GACtEvB,EAAS0B,cACT1B,EAAS2B,QAKZV,EAEA1jB,gBAACC,OAAI,CAACqgB,UAAU,sCAjEQ+D,EAAC5B,EAA+Bc,EAA2BC,EAC1DC,EAAsCE,KAAsD,IAAAW,EAEzH,IAAK7B,EAASG,gBAAkBY,IAA8B,QAAbc,EAAA7B,EAAStU,YAAI,IAAAmW,OAAA,EAAbA,EAAeR,SAASS,gBAAiBZ,EACxF,OAAO,KAGT,MAAM,uBAAEa,EAAsB,uBAAEC,EAAsB,oBAAEC,GAAwBnB,EAE1Eb,EAAkBD,EAASG,cAAcF,gBAEzCiC,EAAUC,2BAAiB,QAASnB,EAAmBoB,oBAAkBC,eACzEC,EAAyBC,iCAAuBvB,EAAmBkB,GAEzE,OACE3kB,2BAAA,KACG0iB,EACC1iB,gBAACilB,SAAM,CAACxO,KAAK,OAAO6J,UAAU,qCAAqCP,QAASgD,EAAqBN,IAC9F+B,GACS,KACdxkB,gBAACilB,SAAM/kB,OAAAC,OAAA,CACLsW,KAAK,OAAO6J,UAAU,sCAAyCyE,EAAsB,CACrFhF,QAASyC,EAAmBC,EAAUC,KACrCA,EAAkB+B,EAAyBC,KA2C3CL,CAAsB5B,EAAUc,EAAWC,EAAeC,EAAkBE,GAC5EV,EAAsBC,EAAiBC,EAASV,EAASyB,WAAaF,GACtEvB,EAASyC,mBACTzC,EAAS0B,cACT1B,EAAS2B,QAKZ3B,EAASyC,mBAETllB,gBAACC,OAAI,CAACqgB,UAAU,gCACb2C,EAAsBC,EAAiBC,EAASV,EAASyB,WAAaF,GACtEvB,EAASyC,mBACTzC,EAAS0B,cACT1B,EAAS2B,QAMdpkB,gBAACC,OAAI,CAACqgB,UAAU,0BACb2C,EAAsBC,EAAiBC,EAASV,EAASyB,WAAaF,GACtEvB,EAAS0B,cACT1B,EAAS2B,SAeVe,EAA0BA,CAACxD,EAA8ByD,EAAsBC,EAAkC9B,EACtFC,EAA4CN,EAA8CwO,EAA4CjO,EAAsCC,EAC5KC,IAE7B0B,EAAUnhB,IAAI,CAACue,EAAUZ,KAAS,IAAA8P,EAChC,MAAMrM,EAAYzD,EACZ+P,GAAsB,QAAbD,EAAAlP,EAAStU,YAAI,IAAAwjB,GAAS,QAATA,EAAbA,EAAerpB,eAAO,IAAAqpB,OAAA,EAAtBA,EAAwB5oB,SAAU,GACjD,OACE/I,gBAAA,OAAKsgB,UAAW,wBAAuB8E,EAAc,4BAA8B,IAAM3D,IAAK6D,GAC3F7C,EAASqB,SACV9jB,gBAAA,QAAMsgB,UAAU,mCACDoD,EAAmB,KA/KnB6B,EAAC9C,EAA+Bc,EAA2BC,EAC1DC,EAAsCE,KAAsD,IAAA6B,EAEpH,IAAK/C,EAASG,gBAAkBY,IAA8B,QAAbgC,EAAA/C,EAAStU,YAAI,IAAAqX,OAAA,EAAbA,EAAe1B,SAASS,gBAAiBZ,EACxF,OAAO,KAGT,MAAM,uBACJc,EAAsB,yBACtBgB,EAAwB,oBACxBf,EAAmB,8BACnBgB,EAA6B,uBAC7BlB,GACEjB,EAEEb,EAAkBD,EAASG,cAAcF,gBAEzCiC,EAAUC,2BAAiB,QAASnB,EAAmBoB,oBAAkBC,eACzEC,EAAyBC,iCAAuBvB,EAAmBkB,GAEzE,OACE3kB,gBAACC,OAAIC,OAAAC,OAAA,GAAKsiB,EAASG,cAAc+C,gBAC/B3lB,gBAAA,OAAKsgB,UAAU,+BACZoC,EAAkB1iB,gBAAA,QAAMsgB,UAAU,WACtBoF,GACK1lB,gBAAA,QAAMsgB,UAAU,QACrBmF,IAIb/C,GACA1iB,gBAAA,OAAKsgB,UAAU,oCACHtgB,gBAAA,QAAMsgB,UAAU,0CACXmC,EAASG,cAAcgD,aAEtC5lB,gBAACilB,SAAM,CACLxO,KAAK,OAAO6J,UAAU,mCACtBP,QAASgD,EAAqBN,IAC7B+B,IAIPxkB,gBAACilB,SAAM/kB,OAAAC,OAAA,CAACmgB,UAAU,4BAA+ByE,EAAsB,CAC/DhF,QAASyC,EAAmBC,EAAUC,KAC3CA,EAAkB+B,EAAyBC,KAmIDa,CAAiB9C,EAAUc,EAAWC,EAAeC,EAAkBE,GAE5GL,EAAeb,EAAUc,EAAWC,EAAeN,EAAiBwO,EAAejO,EAAkBC,EAAkBC,IAG1HkO,EAAoBzM,EAAasM,EAAe/P,EAAMmQ,OAAOC,GAAKA,EAAEhpB,SAAW6oB,OAoBpF/L,EAAkBA,CAAClE,EAA8ByD,EAAsBrlB,EAAiDslB,EAA8C9B,EACnJC,EAA4CsC,EAC5CC,EAA2BC,EAA2BgM,EACtDC,EAAiDxO,EAAsCC,EACvFC,KACvB,MAAQsC,OAAO,gBAAE/C,EAAe,kBAAEgD,EAAiB,cAAEwL,IAAoB3xB,EACzE,OAAIgmB,EACM/lB,2BAAA,KACL+lB,GAODkM,EACKlyB,EAAMomB,sBACXnmB,2BAAA,KACGgyB,EACA7M,EAAwBxD,EAAOyD,EAA2B6M,EAAe1O,EAAWC,EAAeN,EAAiBwO,EAAejO,EAAkBC,EAAkBC,GACvKqO,EACA3L,EAAwBjB,EAAac,IAGxClmB,2BAAA,KACAA,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMqmB,kBAIb4L,EACA7M,EAAwBxD,EAAOyD,EAA2B6M,EAAe1O,EAAWC,EAAeN,EAAiBwO,EAAejO,EAAkBC,EAAkBC,GACvKqO,EACA3L,EAAwBjB,EAAac,KAMpCF,EACJhmB,gBAAA,OAAKsgB,UAAU,wBACbtgB,gBAAA,OAAKsgB,UAAU,iBACZvgB,EAAMkmB,MAAMK,YAGftmB,2BAAA,KACD8lB,IA0CDS,EAA6BA,CAAC9D,EAA+Bc,EAA2BiD,EAAe7C,KAAkC,IAAA8C,EAC7I,MAAM/D,EAAwC,QAAzB+D,EAAGhE,EAASG,qBAAa,IAAA6D,OAAA,EAAtBA,EAAwB/D,iBAC1C,WAAEgE,EAAU,aAAEC,EAAY,kBAAEC,GAAsBrD,EACxD,IAAIsD,EAKJ,OAHAA,EAAanE,EAAkBgE,EAAaC,EAC5CE,EAAapE,EAAStU,MAAQsU,EAAStU,KAAK2V,SAASS,eAAiBZ,EAAwBiD,EAAoBC,EAGhH7mB,2BAAA,KACEA,gBAAA,OAAKsgB,UAAU,+CACbtgB,gBAAA,KACEsgB,UAAW,+CAA+CuG,EAAWnhB,cAAcohB,QAAQ,IAAK,cAClG9mB,gBAAA,KAAGsgB,UAAW,+CAA+CuG,EAAWnhB,cAAcohB,QAAQ,IAAK,MAChGD,GA5CuBE,EAACtE,EAA+Bc,EAA2BiD,KAAiB,IAAAQ,EAAAC,EAAAC,EAC5G,MAAMxE,EAAwC,QAAzBsE,EAAGvE,EAASG,qBAAa,IAAAoE,OAAA,EAAtBA,EAAwBtE,iBAC1C,UAAEyE,EAAS,WAAEC,GAAe7D,EAG5B8D,EAAa,IAAIb,KADRA,EADc,EACSY,EAAaD,KAEnD,OACEnnB,2BAAA,KACEA,gBAACC,OAAI,CAACqgB,UAAU,qDACboC,EAAkB1iB,gBAAA,KAAGsgB,UAAU,wDACP,QAD6D2G,EACnFxE,EAASG,qBAAa,IAAAqE,OAAA,EAAtBA,EAAwBK,eACxB,KACsB,QADlBJ,EACJzE,EAASG,qBAAa,IAAAsE,OAAA,EAAtBA,EAAwBtB,aACpB,KACP5lB,gBAAA,KAAGsgB,UAAU,wDACV+G,MA+BFN,CAA0BtE,EAAUc,EAAWiD,MAsQlDqL,EAAsBA,CAACzM,EAAsBsM,EAAgC/P,IAE5E+P,EAKH1xB,gBAAA,OAAKsgB,UAAW,IAAG8E,EAAc,uCAAyC,KACvEplB,eAAmB0xB,EAAc,GAA0B,CAAE/P,WALzD,KAcL0E,EAA0BA,CAACjB,EAAsBc,IAChDA,EAKHlmB,gBAAA,OAAKsgB,UAAW,4BAA2B8E,EAAc,sCAAwC,KAC9Fc,GALI,KAyJIqB,UA1IuDxnB,IAAmD,IAAAynB,EAAAC,EAAAC,EAAAE,EAAAsK,EAEvH,MACO9M,EAAayC,GAAkB7nB,YAAwB,IACvD0xB,EAAeS,GAAoBnyB,gBAAkDyF,GACtFqiB,EA5DiBC,EAAC3C,EACA4C,EACAC,IAExBjoB,gBAAA,OAAKsgB,UAAU,iCACbtgB,gBAAA,SAAOsgB,UAAU,gDACftgB,gBAAA,QAAMsgB,UAAW,8BAA+B2H,GAEhDjoB,gBAAA,SAAO+f,QAASiI,EAAuB9R,KAAK,WAAWoK,UAAU,gCACjEtgB,gBAAA,OACEsgB,UAAW,yDAAwD8E,EAAc,UAAY,iBAkD3E2C,CAAiB3C,EAHX4C,IAAMH,GAAgBzC,GAGyB,cAGvE8C,EACJloB,gBAAA,MAAIsgB,UAAU,qBACXvgB,EAAMwjB,UAAU4E,UACjBnoB,gBAAA,QAAMsgB,UAAU,iCACL,KAAK9S,OAAiB,QAAXga,EAACznB,EAAMgH,YAAI,IAAAygB,OAAA,EAAVA,EAAYY,qBANL,KAMoC,QAAVX,EAAA1nB,EAAMgH,YAAI,IAAA0gB,OAAA,EAAVA,EAAYW,kBAAyC,QAAU,YAerHgK,EAAaryB,EAAM0G,OAAO2rB,YApBE,GAsBzBH,EAAeI,GAAoBryB,WACtCD,EAAMspB,WAAatpB,EAAMspB,UAAUrlB,QAAUouB,EAAaryB,EAAMspB,UAAUiJ,MAAM,EAAGF,GAAcryB,EAAMspB,YAEpGkJ,EAAgBC,GAAqBxyB,WAAuB,IAC5DyyB,EAAsBC,GAA2B1yB,YAAwB,GAoC9E2yB,EAAcC,IAChB,GAAIA,EAAO,EACP,OAGA7yB,EAAMspB,WAAauJ,GAAQ7yB,EAAMspB,UAAUrlB,OAASouB,IACpDQ,EAAO7yB,EAAMspB,UAAUrlB,OAASouB,EAAa,GAGjD,IAAIS,EAAOD,EAAOR,EAClB,GAAIryB,EAAMspB,WAAatpB,EAAMspB,UAAUrlB,QAAU6uB,EAAM,KAAAC,EACnDN,EAAkBI,GAClB,IAAIN,EAAuB,QAAlBQ,EAAG/yB,EAAMspB,iBAAS,IAAAyJ,OAAA,EAAfA,EAAiBR,MAAMO,GACnCR,EAAiBC,EAAMtuB,QAAUouB,EAAaE,EAAMA,MAAM,EAAGF,GAAcE,KAIjFtyB,YAAgB,KACT0xB,GAvEkBqB,WAA0B,IAAApL,EACjD,MAAMqL,GAAoB,QAAVrL,EAAA5nB,EAAMgH,YAAI,IAAA4gB,GAAgB,QAAhBA,EAAVA,EAAY5gB,KAAKyB,iBAAS,IAAAmf,OAAA,EAA1BA,EAA4BzjB,IAAI+uB,GAAMA,EAAGlqB,UAAY,GAChEiqB,EAAQhvB,QAGbkvB,YAAsB,CAAEC,cAAepzB,EAAMoG,QAAQ0B,eAAiBmrB,GACnE1d,KAAKqM,IACJwQ,EAAiBxQ,GAAS,OAiEvByR,IACN,CAACrzB,EAAMoO,OAEVnO,YAAgB,KACd2yB,EAAWJ,IACVxyB,EAAMspB,WAET,MACMgK,EA9NiBC,EACvBZ,EACAnP,IAEAvjB,gBAAA,OAAKsgB,UAAW,kCACZtgB,gBAAA,UACIsgB,UAAU,sCACVwP,MAAOvM,EAAUgQ,oBACjBxT,QAASA,IAAM2S,GAAwB,IAEtCnP,EAAUgQ,sBAoNKD,CAAiBZ,EAAyB3yB,EAAMwjB,WAExE,IAAIyO,EACFhyB,gBAACwzB,IAAc,CACXC,SAjDWA,KACfd,EAAWJ,EAAiB,IAiDxBmB,SA3CSA,KACbf,EAAWJ,EAAiB,IA2CxBI,WAAYA,EACZgB,YAAapB,EACbqB,SAAU7zB,EAAMspB,UAAYwK,KAAKC,KAAK/zB,EAAMspB,UAAUrlB,OAASouB,GAAc,EAC7E2B,KAAMh0B,EAAMwjB,UAAUyQ,eACtBhe,KAAMjW,EAAMwjB,UAAU0Q,iBAI5B,OACEj0B,gBAAA,MAAAE,OAAAC,OAAA,CAAKmgB,UAAWvgB,EAAMugB,UAAWI,GAAI3gB,EAAM2gB,IAAQ3gB,EAAMsoB,uBAAuBtoB,IAC7EmoB,EACDloB,gBAAA,OAAKsgB,UAAU,4BACe,QADWoH,EACtC3nB,EAAMuoB,6BAAqB,IAAAZ,OAAA,EAA3BA,EAA6Ba,YAlLIxoB,IAEtCC,gBAACC,OAAI,CAACqgB,UAAU,sCACbvgB,EAAMm0B,2BACNn0B,EAAMyoB,uBAgLNC,CAAiC1oB,KACtB,QAAX6nB,EAAC7nB,EAAMgH,YAAI,IAAA6gB,GAAVA,EAAYc,iBAAkB3oB,EAAM4oB,mBA5RlBC,EA4RuD7oB,EAAM4oB,iBA1RnF3oB,2BAAA,KACEA,gBAACC,OAAIC,OAAAC,OAAA,GAAKyoB,EAAWC,yBAClBD,EAAWE,iBACZ9oB,gBAACC,OAAI,CAACqgB,UAAU,oCACbsI,EAAWG,qBAEbH,EAAWI,mBAqRbjpB,EAAMomB,sBAnYgB8C,EAACyI,EAAsCtM,EAAsBrlB,EAAiDwjB,EACzIyO,EACAC,IACIlyB,EAAMmpB,gBAAkBC,kBAAgBC,YAAYrpB,EAAMmpB,gBAE1DlpB,gBAAA,OAAKsgB,UAAU,wBACZvgB,EAAMmpB,eAAehlB,IAAImlB,IAAY,IAAAC,EAAAC,EACpC,OAAQvpB,gBAAA,OAAKyhB,IAAK4H,EAAU,GAAGnF,WAAY5D,UAAU,+BAClDiG,EAA2B8C,EAAU,GAAI9F,EAxBlCd,KAClB,IAAI+G,EAAY,EAMhB,OAJAA,EAAY/G,EAASgH,OAAO,CAACjD,EAAOkD,KAAQ,IAAAC,EAAAC,EAC1C,OAAOpD,GAAqC,QAAhCmD,EAAa,QAAbC,EAAIF,EAAKvb,YAAI,IAAAyb,OAAA,EAATA,EAAW9F,SAAS+F,gBAAQ,IAAAF,IAFrB,OAKlBH,GAiBwDM,CAAWT,GACZ,QADsBC,EACxEvpB,EAAMoG,QAAQ0B,cAAckiB,eAAe5a,eAAO,IAAAma,OAAA,EAAlDA,EAAoDU,uBACrDnE,EAAgB6L,EAAetM,EAAarlB,EAAOspB,EAAWtpB,EAAMwjB,UAAWxjB,EAAMyjB,cACpFzjB,EAAM+lB,iBAAkB/lB,EAAMgmB,kBAAmBhmB,EAAMkqB,eACvD+H,EACAC,EAAclyB,EAAM0jB,iBAAkB1jB,EAAMomB,sBAAyE,QAApDoD,EAAExpB,EAAMoG,QAAQ0B,cAAckiB,eAAe5a,eAAO,IAAAoa,OAAA,EAAlDA,EAAoDS,2BAM3HjqB,EAAMkqB,eACVjqB,gBAAA,OAAKsgB,UAAU,wBACbtgB,gBAAA,OAAKsgB,UAAU,iBACZvgB,EAAMkmB,MAAMK,YAGftmB,2BAAA,KACDD,EAAM+lB,kBAyWwBmD,CAAqByI,GAAiB,GAAItM,EAAarlB,EAAOA,EAAMwjB,UAAWyO,EAAYC,GAAiBpM,EAAgB6L,GAAiB,GAAItM,EAAarlB,EAAOA,EAAMspB,UACxMtpB,EAAMwjB,UAAWxjB,EAAMyjB,cAAezjB,EAAM+lB,iBAAkB/lB,EAAMgmB,kBAAmBhmB,EAAMkqB,eAAgB+H,EAAYC,GAC1HlyB,EAAMmqB,qBACLlqB,gBAACC,OAAIC,OAAAC,OAAA,GAAKJ,EAAMoqB,qBACbrC,EACD9nB,gBAACC,OAAI,CAACqgB,UAAU,4BACbvgB,EAAMmqB,oBACI,QAAVgI,EAAAnyB,EAAMgH,YAAI,IAAAmrB,GAAVA,EAAYxJ,eAlVS0B,EAACC,EAAuDC,EACvDvqB,IAC5BsqB,EAKHrqB,gBAACC,OAAIC,OAAAC,OAAA,GAAKmqB,GACPD,EAAoBE,SACpBF,EAAoBG,SACpBH,EAAoBI,QACpBJ,EAAoB9B,aARvBxoB,EAAMoG,QAAQU,UAAUxE,MAAM,uDACvB,MA8U+B+nB,CAC5BrqB,EAAM2qB,wBAAyB3qB,EAAM4qB,kBAAmB5qB,GA5TtC6qB,EAACC,EAAmDP,EACnDvqB,IAC1B8qB,EAKH7qB,gBAACC,OAAIC,OAAAC,OAAA,GAAKmqB,GACPO,EAAkBC,SAElBD,EAAkBE,SAClBF,EAAkBG,YAClBH,EAAkBI,IAClBJ,EAAkBtC,aAVrBxoB,EAAMoG,QAAQU,UAAUxE,MAAM,qDACvB,MAwToEuoB,CACjE7qB,EAAMuoB,sBAAuBvoB,EAAM4qB,kBAAmB5qB,IAvW1CmrB,EAwWInrB,EAAMorB,qBAvWfhC,kBAAgBC,YAAY8B,EAAUE,QAIvDprB,gBAACC,OAAIC,OAAAC,OAAA,GAAK+qB,EAAUG,SACjBH,EAAUroB,OACVqoB,EAAUE,QALN,MAmFwBK,EAAC1rB,EAAuBszB,KAA6D,IAAA/H,EACtH,OACEtrB,gBAACC,OAAI,CAACqgB,UAAU,+BACH,QAAVgL,EAAAvrB,EAAMgH,YAAI,IAAAukB,GAAVA,EAAY5C,eAAiB,KAAO3oB,EAAMwrB,UAC3CvrB,gBAACC,OAAI,CAACqgB,UAAU,uCACbvgB,EAAMm0B,2BACNn0B,EAAMyoB,uBAERzoB,EAAMyrB,6BACN6H,IA4QI5H,CAA2B1rB,EAAOszB,IAEtCtzB,EAAMyjB,cAzOiB2Q,EAC5BC,EACA1B,EACA2B,EACA5B,EACAlP,IAmBIvjB,gBAACs0B,QAAK,CAAChU,UAAW,YAAyBiU,OAAQ9B,EAAsB4B,OAAQA,GAC7Er0B,gBAACw0B,cAAW,CAAClU,UAAW,2BAAwCiD,EAAUkR,iBAC1Ez0B,gBAAC00B,YAAS,CAACpU,UAAW,yBAAsCiD,EAAUoR,kBACtE30B,gBAAC40B,cAAW,KAdhB50B,gBAAA,OAAKsgB,UAAW,qBACZtgB,gBAACilB,SAAM,CAAClF,QAASqU,EAAiB9T,UAAW,2BACxCiD,EAAUgQ,qBAEfvzB,gBAACilB,SAAM,CAAClF,QAASA,IAAM2S,GAAwB,GAAQpS,UAAW,6BAC7DiD,EAAUsR,0BAwNlBV,CAlGqBC,KACpB,MAAMrtB,EAAOhH,EAAMgH,KACbsiB,EAAYtiB,aAAI,EAAJA,EAAMA,KAAKyB,UAE7B,GAAIzB,GAAQsiB,EAAW,CACnB,IAAIyL,EAAM,CAAEC,YAAaC,SACzB3L,EAAUnlB,IAAI+wB,GAAMA,EAAEjI,OAAS8H,EAAIC,YAAY7vB,KAAK+vB,EAAEjI,QAAU,MAChEjmB,EAAKmuB,gBAAgBJ,GACrBpC,GAAwB,GACxB3rB,EAAKouB,YAAY,MAyFiBzC,EAtC7B2B,IAAM3B,GAAyBD,GAsC+BA,EAAsB1yB,EAAMwjB,YA7WjF2H,MAiEAtC,I,qIC1dnB,MAAMwM,EAA6Cr1B,IACtD,MAAM,MAAE+vB,EAAK,MAAEe,EAAK,kBAAEH,EAAiB,gBAAEE,EAAe,kBAAEH,EAAiB,kCAAED,GAAsCzwB,EACnH,OACIC,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKuwB,GACN1wB,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKywB,GAAkBd,GAC5B9vB,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKqwB,GACLK,EAAM3sB,IAAI,CAACmxB,EAAqBxT,KAC7B,MAAMyT,EAAW,mBAAmBzT,EACpC,OACI7hB,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKswB,EAAiB,CAAEhP,IAAK6T,IAC7BD,QASdD,a,oGCqBAG,UArC6Gx1B,IAAQ,IAAAy1B,EAChI,MAAM,kBAAEC,EAAiB,QAAEpJ,EAAO,MAAEyC,GAAU/uB,GACxC,4BAAE21B,GAAgC31B,EAAMwjB,UAG9C,OAFqB,KAEkB,QAAnCiS,EAAAz1B,EAAMoO,KAAKwnB,kBAAkBC,cAAM,IAAAJ,OAAA,EAAnCA,EAAqCxxB,QAEjChE,IAAA+c,cAACtb,SAAMvB,OAAAC,OAAA,GAAKs1B,GACPpJ,EACDrsB,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,IACZtgB,IAAA+c,cAAA,OAAKuD,UAAU,uCACXtgB,IAAA+c,cAAA,MAAIuD,UAAU,+CAA+CvgB,EAAMwjB,UAAUsS,8BAC7E71B,IAAA+c,cAAA,KAAGuD,UAAU,4CAA4CvgB,EAAMwjB,UAAUuS,2BACzE91B,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,oDACZtgB,IAAA+c,cAACkI,SAAM,CACHxO,KAAK,SACLqZ,MAAO4F,EAA2B,aACtBA,EACZpV,UAAU,0DACVrT,KAAM8oB,YAAW,OAAQh2B,EAAMoG,QAAQ0B,gBAEtC6tB,OASzB11B,IAAA+c,cAACtb,SAAMvB,OAAAC,OAAA,GAAKs1B,GACPpJ,EACAyC,K,kCClDb,qCAyBekH,IAV0DlgB,IAA8C,IAA7C,GAAE4K,EAAE,UAAEJ,EAAS,KAAEpK,EAAO,OAAM,QAAE5H,GAASwH,EAC/G,MAAMmgB,EAAiB,GAAG3V,MAAcpK,UAExC,OACIlW,gBAAA,OAAK0gB,GAAIA,EAAIJ,UAAWqQ,IAAWsF,EAAgB,QAAY/f,EAAH,SAAiBO,KAAK,QAAO,YAAW,YAAW,cAAa,QACxHzW,gBAAA,KAAGsgB,UAAc2V,EAAH,SAA2B3nB,M,gHCJrD,MAAM4nB,EAAkCC,IACpC,MAAMC,EAAgCD,GAA4C,gBAElF,OAAOn2B,IAAA+c,cAAA,OAAKuD,UAAU,0CAA0C8V,IAYvDC,EAA+BA,CACxCF,EACAG,EACAv2B,EACAw2B,EACAC,IAEOz2B,EAAM02B,oBACTz2B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKJ,EAAM22B,iBACXR,EAA+BC,GAChCn2B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKJ,EAAM42B,YACXJ,GAAwBC,GACvBD,GACEx2B,EAAM02B,oBAAoB9f,KAAKzS,IAAIyS,GACxBA,KAKvB3W,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKJ,EAAM22B,iBACXR,EAA+BC,GAChCn2B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKJ,EAAM42B,YACZ32B,IAAA+c,cAAA,MAAIuD,UAAU,+CAA+CgW,K,gBCpC7E,MA4BaM,EAAmC72B,GAExCC,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,wDACZtgB,IAAA+c,cAAA,OAAKuD,UAAU,iEA/BgBvgB,KACvC,MAAM82B,EAA8C92B,EAAM0G,OAAOowB,oBACjE,IAAKA,IAAwBA,EAAoB7W,IAC7C,OAAO,KAQX,OACIhgB,IAAA+c,cAAC+Z,IAAK,CACFC,QAASF,EAAoBE,QAC7BzW,UAAU,uDACV0W,aAAcj3B,EAAMoG,QAAQgF,QAAQ6rB,aACpChX,IAAK6W,EAAoB7W,IACzB+J,eAAgBhqB,EAAMoG,QAAQgF,QAC9B8rB,cAbc,CAClBC,UAAU,EACVC,UAAW,CACPC,GAAI,CAAEC,EAAG,IAAKC,EAAG,IAAKC,EAAG,6BAuBuDC,CAAkCz3B,IAClHC,IAAA+c,cAAA,OAAKuD,UAAU,6DACXtgB,IAAA+c,cAAA,OAAKuD,UAAU,wDAAwDvgB,EAAMwjB,UAAUkU,8BACvFz3B,IAAA+c,cAAA,OAAKuD,UAAU,qDAAqDvgB,EAAMwjB,UAAUmU,yBCbvFC,EAAgBA,CACzB91B,EACA+1B,EACAC,EACA/Z,EACAga,EACA/3B,EACAg4B,EACAC,KAEA,MAAMC,EACFj4B,IAAA+c,cAACkI,SAAM,CACH3E,UAAU,+BAA8B,aAC5BvgB,EAAMwjB,UAAU2U,mBAC5BnY,QAASiY,EACT9hB,KAAK,WAIb,OAAO4H,EACH9d,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKy3B,GACL/1B,EAAKs2B,UACNn4B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAK03B,GACLh2B,EAAKu2B,MACLL,GA5CSM,EAACP,EAA+BE,IAElDh4B,IAAA+c,cAACkI,SAAM,CAAC3E,UAAU,iCAAiCwP,MAAOgI,GAAyB,QAAS/X,QAASiY,GAChGF,GAAyB,SAyCLO,CAAkBP,EAAuBE,GACxDD,EAAwD,KAAzCnB,EAAgC72B,KAIzDC,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKy3B,GACN53B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAK03B,GACLh2B,EAAKy2B,UACLz2B,EAAKu2B,MACLL,GAAgBE,KCzD3BM,EAAiCC,IACnC,MAAMpC,EAAgCoC,GAAoC,WAE1E,OAAOx4B,IAAA+c,cAAA,OAAKuD,UAAU,yCAAyC8V,IActDqC,EAA8BA,CACvCC,EACAC,EACAH,EACAlC,EACAsC,EACArC,EACAC,IAEOoC,EACH54B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKu4B,GACLH,EAA8BC,GAC/Bx4B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKw4B,GACLpC,GAAwBC,GACvBD,GACEqC,EAAmBjiB,KAAKzS,IAAIyS,GACjBA,KAKvB3W,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKu4B,GACLH,EAA8BC,GAC/Bx4B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKw4B,GACN34B,IAAA+c,cAAA,MAAIuD,UAAU,8CAA8CgW,KCtCtEuC,EAAiCC,IACnC,MAAMC,EAA+BD,GAAwD,WAE7F,OAAO94B,IAAA+c,cAAA,OAAKuD,UAAU,yCAAyCyY,IA4B7DC,EAAgCj5B,GAE9BC,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,sDACZtgB,IAAA+c,cAAA,OAAKuD,UAAU,oDAvBgBvgB,KACvC,MAAM82B,EAA8C92B,EAAM0G,OAAOowB,oBACjE,OAAKA,GAAwBA,EAAoB7W,IAI7ChgB,IAAA+c,cAAC+Z,IAAK,CACFC,QAASF,EAAoBE,QAC7BzW,UAAU,uDACV0W,aAAcj3B,EAAMoG,QAAQgF,QAAQ6rB,aACpChX,IAAK6W,EAAoB7W,MAPtB,MAoBgEwX,CAAkCz3B,IACrGC,IAAA+c,cAAA,OAAKuD,UAAU,4DAA4DvgB,EAAMwjB,UAAU0V,4BAC3Fj5B,IAAA+c,cAAA,OAAKuD,UAAU,gEACVvgB,EAAMwjB,UAAU2V,+BAgBpBC,EAA8BA,CACvCC,EACAC,EACAt5B,EACAu5B,EACA/C,EACAC,IAMO8C,EACHt5B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKi5B,GACLP,EAA8B94B,EAAMwjB,UAAUgW,0BAC/Cv5B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKk5B,GACL9C,GAAwBC,GACvBD,GACE+C,EAAmBE,MAAMt1B,IAAI,CAACwlB,EAAM7H,KAAS,IAAA4X,EACzC,OACIz5B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKupB,EAAKgQ,UAAS,CAAEjY,IAAY,QAATgY,EAAE/P,EAAKhJ,UAAE,IAAA+Y,IAAI5X,IACtC7hB,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKupB,EAAKiQ,UACVjQ,EAAKkQ,UACLlQ,EAAK/S,KACL+S,EAAKmQ,YAQlC75B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKi5B,GACLP,EAA8B94B,EAAMwjB,UAAUgW,0BAC/Cv5B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKk5B,GACNr5B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GA3Ba,CAC1BiiB,IAAK,KACL9B,UAAW,0BAyBmB0Y,EAA6Bj5B,MCnF7D+5B,EAAcA,CAACC,EAAiCC,KAClD,MAAMC,EAAmB,IAAIC,OAAOF,EAAWE,OAAO,MAChDC,EAA8BJ,EAC9BK,iBAAOL,EAAyBE,GAChC,cAAcA,EAEpB,OAAOj6B,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,iCAAiC6Z,IAgM7CE,UAvLXt6B,IAEA,MAAM,OACFu6B,EAAM,qBACNC,EAAoB,yBACpBC,EAAwB,WACxBR,EAAU,YACVS,EAAW,eACXC,EAAc,eACdC,EAAc,UACdC,EAAS,UACTC,EAAS,KACTh5B,EAAI,mBACJi5B,EAAkB,mBAClBC,EAAkB,WAClBC,EAAU,YACVC,EAAW,MACXC,EAAK,QACL/0B,EAAO,qBACPowB,EAAoB,cACpBC,EACA3T,WAAW,0BAAEsY,IACbp7B,GAEE,wBAAEg6B,EAAuB,0BAAEqB,EAAyB,gBAAE5C,EAAe,aAAElC,EAAY,sBAAEwB,GAA0B/3B,EAAMwjB,WAEpH0W,EAAkBoB,GAAuBrkB,sBACzCskB,EAAcC,GAAevkB,oBAAkB,GAEtDsI,oBAAU,KACN+b,EAAoBrB,IACrB,CAACA,IAKJ,MAAMhC,EAAcA,KAChBqD,EAAoB,IAEpB,MACMG,EADYz7B,EAAM8B,KACSu2B,MAC3BqD,EAAyBD,EAAeE,IAA0CC,QAEpFF,IACAA,EAAsBnvB,MAAQ,IAGlCkvB,EAAelvB,MAAQ,GACvBvM,EAAMi6B,WAAa,GACnBj6B,EAAMk7B,YAAYhlB,OAAS,IAGzB2lB,EAAmBC,sBAAY,KACjC,MAAMC,EAAwF,OAAzEhe,mBAAS,CAAEC,QAASC,cAAYC,QAAS9X,QAASA,EAAQgF,UAC/EowB,EAAYO,IACb,CAAC31B,IAEJmZ,oBAAU,KACN9U,OAAOuxB,iBAAiB,SAAUH,GAClCA,KACD,CAACA,IAEJ,MAAMI,EAAWle,mBAAS,CAAEC,QAASC,cAAYC,QAAS9X,QAASA,EAAQgF,UAErE2wB,EAA4B,OAAbE,GAAkC,OAAbA,EAE1CvB,EAAYna,UAAamP,mBAAiBwM,cAAchC,GAE/CQ,EAAYna,UAAf,QADGma,EAAYna,UAAf,QAEN,MAAMyX,GAAyBtI,mBAAiBwM,cAAchC,GAE9D,OACIj6B,IAAA+c,cAACtb,SAAMvB,OAAAC,OAAA,GAAKm6B,GACPY,EACAvD,EACG91B,EACAm5B,EACAC,EACAK,EACAxD,EACA/3B,EACAg4B,EACAC,IAEF8D,GACE97B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKs6B,GACJhL,mBAAiBwM,cAAchC,GAG7B,GAFAj6B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKo6B,GAAuBC,GAInC/K,mBAAiBwM,cAAchC,GAyC7B,KAxCAj6B,IAAA+c,cAAA/c,IAAAk8B,SAAA,KACIl8B,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,2CACZtgB,IAAA+c,cAACkI,SAAM,CACH3E,UAAU,+BAA8B,aAC5BvgB,EAAMwjB,UAAU2U,mBAC5BnY,QAASiY,EACTmE,OAAQhB,EACRjlB,KAAK,WAER4jB,EAAYC,EAAyBC,IAE1Ch6B,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,sCACZtgB,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,4BACX+V,EACG+E,EACA9E,EACAv2B,EACAw2B,EACAC,GAEHiC,EACGiC,EACAE,EACApC,EACAlC,EACAwE,EACAvE,EACAC,IAGP2C,EACGwB,EACAE,EACA96B,EACAg7B,EACAxE,EACAC,MAOvBsF,GAAgB/7B,EAAMq8B,sBACnBp8B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKs6B,GACJhL,mBAAiBwM,cAAchC,GAG7B,GAFAj6B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKo6B,GAAuBC,GAInC/K,mBAAiBwM,cAAchC,GAmC7B,KAlCAj6B,IAAA+c,cAAA/c,IAAAk8B,SAAA,KACIl8B,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,2CACVze,EAA8Bs2B,UAC/B2B,EAAYC,EAAyBC,IAE1Ch6B,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,sCACZtgB,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,4BACX+V,EACG+E,EACA9E,EACAv2B,EACAw2B,EACAC,GAEHiC,EACGiC,EACAE,EACApC,EACAlC,EACAwE,EACAvE,EACAC,IAGP2C,EACGwB,EACAE,EACA96B,EACAg7B,EACAxE,EACAC,S,+ECnMpC,MAAM6F,EAA4DvmB,IAA4C,IAA3C,QAAEwmB,EAAO,MAAEpB,EAAK,aAAEqB,EAAY,MAAEnE,GAAOtiB,EACtG,OACI9V,gBAACC,OAAIC,OAAAC,OAAA,GAAKm8B,GACLpB,EACAqB,EACAnE,IAuCPoE,EAAkE9P,IAAwC,IAAvC,MAAEhrB,EAAK,UAAEE,EAAS,KAAE66B,EAAI,QAAEnuB,GAASoe,EACxG,OACI1sB,gBAACC,OAAIC,OAAAC,OAAA,GAAKuB,GACN1B,gBAACC,OAAIC,OAAAC,OAAA,GAAKyB,GACL66B,EACAnuB,KAqBFouB,UAfwD38B,IACnE,MAAM,mBAAE48B,EAAkB,UAAEC,EAAS,QAAElO,EAAO,mBAAEmO,EAAkB,YAAEC,EAAW,QAAEzQ,EAAO,+BAAE0Q,GAAmCh9B,EAE7H,OACIC,gBAACyB,SAAMvB,OAAAC,OAAA,GAAKw8B,GACPC,EAAUI,eAAiBh9B,gBAACC,OAAIC,OAAAC,OAAA,GAAK08B,IACrCD,EAAUI,eAAiBh9B,gBAACw8B,EAAyBt8B,OAAAC,OAAA,GAAKuuB,IAC3D1uB,gBAACC,OAAIC,OAAAC,OAAA,GAAK28B,GACLzQ,EArD+CF,KAQ3D,IAR4D,aAC7D8Q,EAAY,MACZzD,EAAK,aACL+C,EAAY,eACZW,EAAc,QACdC,EAAO,yBACPC,EAAwB,gCACxBC,GACHlR,EACG,OACInsB,gBAACC,OAAIC,OAAAC,OAAA,GAAK88B,GACLzD,GACGA,EAAMt1B,IAAKwlB,GAEA1pB,gBAACq8B,EAAsBn8B,OAAAC,OAAA,GAAKupB,KAE1C6S,GACGA,EAAar4B,IAAI,CAAC7B,EAAwBwf,IAC/B7hB,gBAACA,WAAc,CAACyhB,IAAKI,GAAQxf,IAE5CrC,gBAACC,OAAIC,OAAAC,OAAA,GAAK+8B,GACLC,GACGA,EAAQj5B,IAAI,CAACo5B,EAAyBzb,IAC3B7hB,gBAACA,WAAc,CAACyhB,IAAKI,GAAQyb,KAIhDt9B,gBAACC,OAAIC,OAAAC,OAAA,GAAKi9B,GACNp9B,gBAACC,OAAIC,OAAAC,OAAA,GAAKk9B,OA0BTE,CAAaR,O,kCC/E9B,2DA4BO,MAAMvJ,EAAkD1d,IAOlD,IAPmD,SAC5D2d,EAAQ,SACRC,EAAQ,WACRf,EAAU,YACVgB,EAAW,SACXC,EAAQ,KACRG,EAAI,KACJ/d,GAAKF,EAGL,OAEA9V,IAAA+c,cAAA,OAAKuD,UAAU,wBACZsT,EAAW,GACV5zB,IAAA+c,cAAA/c,IAAAk8B,SAAA,KAEIl8B,IAAA+c,cAAA/c,IAAAk8B,SAAA,KACEl8B,IAAA+c,cAAA,UAAQmS,SAAUyE,EAAc,IAThB,EASiCrT,UAAW,gDAA+CqT,EAAc,IATzG,EAS2H,eAAiB,IAAM5T,QAASA,IAAM4S,EAAW,IAC3L,KAED3yB,IAAA+c,cAAA,UAAQmS,SAAUyE,EAAc,IAZhB,EAYiCrT,UAAW,+CAA8CqT,EAAc,IAZxG,EAY0H,eAAiB,IAAM5T,QAAS2T,GACvKK,IAIP/zB,IAAA+c,cAAA,OAAKuD,UAAU,+BACbtgB,IAAA+c,cAAA,QAAMuD,UAAU,oCACXqT,EAAc,E,MAAMC,IAIzB5zB,IAAA+c,cAAA/c,IAAAk8B,SAAA,KACEl8B,IAAA+c,cAAA,UAAQmS,SAAUyE,EAAc,IAAMC,EAAUtT,UAAW,+CAA8CqT,EAAc,IAAMC,EAAW,eAAiB,IAAM7T,QAAS0T,GACrKzd,GAEHhW,IAAA+c,cAAA,UAAQmS,SAAUyE,EAAc,IAAMC,EAAUtT,UAAW,+CAA8CqT,EAAc,IAAMC,EAAW,eAAiB,IAAM7T,QAASA,IAAM4S,EAAWiB,EAAS,IAC/L,GAAGA,Q,4JCnBb,MAAM4J,EAAoE1nB,IAK5E,IAL6E,iBAC9E2nB,EAAgB,iBAChBC,EAAgB,wBAChBC,EAAuB,mBACvB1R,GACHnW,EACG,OACI9V,gBAAA,OAAKsgB,UAAU,gFACXtgB,gBAAA,MAAIsgB,UAAU,iDAAiDmd,GAC9DxR,GACGjsB,gBAAA,KAAGsgB,UAAU,8DACR,GAAGqd,KAA2B1R,KAGtCA,GAAsByR,GACnB19B,gBAAA,QAAMsgB,UAAU,iDACZtgB,gBAAC49B,IAAM,CAACtxB,MAAO2f,EAAoB4R,KAAM,QCzChDC,EAAsDhoB,IAAqB,IAApB,aAAEymB,GAAczmB,EAChF,OAAKymB,EAKDv8B,gBAAA,QAAMsgB,UAAU,iDACZtgB,gBAAA,QAAMsgB,UAAU,2BAA0B,cAAa,SACvDtgB,gBAAA,YAAOu8B,IANJ,M,ykBCmDf,MAAMwB,UAAyB/9B,YAC3BkG,YAAmBnG,GACfuG,MAAMvG,GA0DH,KAAAi+B,sBAAwBjL,UAC3B,MAAMkL,EAAoBzwB,OAAO0wB,SAAS93B,KAAKrG,MAAMoG,QAAQgF,QAAQgzB,MAAOF,UAAW,IACjFhS,EAA6B7lB,KAAKrG,MAAMoG,QAAQgF,QAAQgzB,MAAOlS,mBAC/DmS,EAAwBh4B,KAAKrG,MAAMoG,QAAQgF,QAAQgzB,MAAOC,cAE1DC,EAAkFC,aAAyB,EAAzBA,EAA2Bp6B,IAC/Gq6B,IAAoC,IAAAC,EAChC,MAAO,CACHC,QAA6D,QAAtDD,EAAED,EAAkCE,QAAQC,kBAAU,IAAAF,IAAI,GACjElyB,MAAOiyB,EAAkCjyB,SAI/CqyB,EAA4C,GAClD,IAAKC,mBAAiBC,kBAAkBR,GACpC,IAAK,MAAMS,KAAyBT,EAChCM,EAAsBz5B,KAAK,CACvB65B,IAAKD,EAAsBL,QAC3BO,MAAO,CACHC,YAAaH,EAAsBxyB,SAKnD,UACU4yB,yBAAuBC,2BACzB,CAAEhM,cAAe/sB,KAAKrG,MAAMoG,QAAQ0B,cAAeu3B,oBAAqB,IACxEnB,EACAG,EACAnS,EACA0S,GAEN,MAAOt8B,GAGL,OAFA+D,KAAKi5B,SAAS,CAAEC,mBAAoBl5B,KAAKrG,MAAMwjB,UAAUgc,oBAAqBC,aAAa,IAC3Fp5B,KAAKrG,MAAM8G,UAAUxE,MAAMA,GACpBo9B,QAAQC,UAGnB,OADAt5B,KAAKi5B,SAAS,CAAEC,mBAAoB,GAAIE,aAAa,IAC9CC,QAAQC,WAOF,KAAAC,QAAU5M,UAA0B,IAAAnkB,EAAAgxB,EAAAC,EAAAC,EACjD,MAAM7B,EAAoBzwB,OAAO0wB,SAAoD,QAA5CtvB,EAAiC,QAAjCgxB,EAACx5B,KAAKrG,MAAMoG,QAAQgF,QAAQgzB,aAAK,IAAAyB,OAAA,EAAhCA,EAAkC3B,iBAAS,IAAArvB,IAAI,GAAI,IACvFqd,EAAyE,QAAvD4T,EAAuBz5B,KAAKrG,MAAMoG,QAAQgF,QAAQgzB,aAAK,IAAA0B,OAAA,EAAhCA,EAAkC5T,mBAC3EmS,EAAoE,QAAvD0B,EAAuB15B,KAAKrG,MAAMoG,QAAQgF,QAAQgzB,aAAK,IAAA2B,OAAA,EAAhCA,EAAkC1B,cAC5E,GAAI5wB,OAAOF,MAAM2wB,KAAehS,IAAuBmS,EAEnD,OAAIh4B,KAAKrG,MAAMoG,QAAQgF,QAAQ40B,OAAOC,WAE3B55B,KAAKrG,MAAMoG,QAAQgF,QAAQ40B,OAAOE,UACzC75B,KAAKi5B,SAAS,CAAEC,mBAAoBl5B,KAAKrG,MAAMwjB,UAAU2c,uCAEzD95B,KAAKi5B,SAAS,CAAEC,mBAAoBl5B,KAAKrG,MAAMwjB,UAAUgc,sBAE7Dn5B,KAAKrG,MAAMoG,QAAQU,UAAUxE,MACzB,8JAPOo9B,QAAQC,UAavB,MAAM,0BAAES,GAA8B/5B,KAAKrG,MAAM0G,OAKjD,IAH0C0iB,kBAAgBC,YAAY+W,GAGvC,CAC3B,UACUjB,yBAAuBC,2BACzB,CAAEhM,cAAe/sB,KAAKrG,MAAMoG,QAAQ0B,cAAeu3B,oBAAqB,IACxEnB,EACAG,EACAnS,GAEN,MAAO5pB,GAGL,OAFA+D,KAAKi5B,SAAS,CAAEC,mBAAoBl5B,KAAKrG,MAAMwjB,UAAUgc,oBAAqBC,aAAa,IAC3Fp5B,KAAKrG,MAAM8G,UAAUxE,MAAMA,GACpBo9B,QAAQC,UAEnBt5B,KAAKi5B,SAAS,CAAEC,mBAAoB,GAAIE,aAAa,IAEzD,OAAOC,QAAQC,WA9Ift5B,KAAK1D,MAAQ,CACT48B,mBAAoB,GACpBE,aAAa,GAIdvd,SAAM,IAAAme,EACT,MAAMC,EAA2D,KAAlCj6B,KAAK1D,MAAM48B,mBAEpCpd,EAAS7a,IAAA,GACRjB,KAAKrG,OAAK,IACbugC,YAAatgC,gBAAC89B,EAAqB,CAACvB,aAAcn2B,KAAK1D,MAAM48B,qBAC7DiB,sBACIvgC,gBAACw9B,EAA4B,CACzBC,iBAAkBr3B,KAAKrG,MAAMwjB,UAAUid,wBACvC9C,iBAAkBt3B,KAAKrG,MAAM0G,OAAOi3B,iBACpCC,wBAAyBv3B,KAAKrG,MAAMwjB,UAAUkd,oBAC9CxU,mBAAoD,QAAlCmU,EAAEh6B,KAAKrG,MAAMoG,QAAQgF,QAAQgzB,aAAK,IAAAiC,OAAA,EAAhCA,EAAkCnU,qBAG9D+R,sBAAuB53B,KAAK43B,sBAC5B0C,4BAA6Bt6B,KAAKrG,MAAM0G,OAAO05B,0BACzC/5B,KAAKrG,MAAM0G,OAAO05B,0BAA0Bj8B,IAAI,KACrC,UAEXuB,EACNm3B,UAAW,CACPyD,gBACAb,YAAap5B,KAAK1D,MAAM88B,eAIhC,OAAOp5B,KAAKrG,MAAMwiB,WAAWL,GAG1Bye,sBAAsBC,EAA4DC,GACrF,OACIz6B,KAAKrG,MAAM0G,OAAOq6B,+BAAiCF,EAAUn6B,OAAOq6B,8BACpE16B,KAAKrG,MAAM0G,OAAOg3B,mBAAqBmD,EAAUn6B,OAAOg3B,mBAIxDr3B,KAAK1D,MAAM48B,qBAAuBuB,EAAUvB,oBAAsBl5B,KAAK1D,MAAM88B,cAAgBqB,EAAUrB,aAMxG,gCACGp5B,KAAKu5B,WAiGJ5B,a,+ECxMf,MAsDMgD,EAA0C7T,IAAwC,IAAvC,MAAExrB,EAAK,UAAEE,EAAS,KAAE66B,EAAI,QAAEnuB,GAAS4e,EAChF,OACIltB,gBAACC,OAAIC,OAAAC,OAAA,GAAKuB,GACN1B,gBAACC,OAAIC,OAAAC,OAAA,GAAKyB,GACL66B,EACAnuB,KAKX0yB,EAAwCzT,IAAkE,IAAjE,GAAE7M,EAAE,UAAEJ,EAAS,KAAE3J,EAAI,UAAEsY,EAAS,iBAAExL,EAAgB,QAAE1D,GAASwN,EACxG,MAAM5I,EAAUC,2BAAiB,QAASnB,EAAmB9M,GACvDwY,EAAanK,iCAAuBvB,EAAmBkB,GAC7D,OACI3kB,gBAAA,IAAAE,OAAAC,OAAA,CAAGugB,GAAIA,EAAIJ,UAAWA,EAAS,aAAc2O,EAAWlP,QAASA,GAAaoP,GACzExY,IA4EEsqB,UA3CiElhC,IAC5E,MAAM,OACFmhC,EAAM,UACNtE,EAAS,QACTlO,EAAO,mBACPmO,EAAkB,YAClBC,EAAW,cACXqE,EAAa,cACbC,EAAa,qBACbC,EAAoB,mBACpBC,EAAkB,oBAClBC,EAAmB,qBACnBC,EAAoB,iBACpBC,EAAgB,kBAChBC,GACA3hC,EAEJ,OACIC,gBAACyB,SAAMvB,OAAAC,OAAA,GAAK+gC,GACPtE,EAAUI,eAAiBh9B,gBAACC,OAAIC,OAAAC,OAAA,GAAK08B,IACrCD,EAAUI,eAAiBh9B,gBAAC+gC,EAAa7gC,OAAAC,OAAA,GAAKuuB,IAC/C1uB,gBAACC,OAAIC,OAAAC,OAAA,GAAK28B,GACN98B,gBAACC,OAAIC,OAAAC,OAAA,GAAKghC,GACLE,EA7H+BvrB,KAA6E,IAA5E,aAAEmnB,EAAY,MAAEzD,EAAK,eAAEmI,EAAc,WAAEC,EAAU,MAAEv/B,EAAK,aAAEw/B,GAAc/rB,EACzH,OACI9V,gBAACC,OAAIC,OAAAC,OAAA,GAAK88B,GACLzD,GACGA,EAAMt1B,IAAKwlB,GAEH1pB,gBAACC,OAAIC,OAAAC,OAAA,CAACshB,IAAKiI,EAAKjI,KAASiI,EAAK4S,SACzB5S,EAAKwR,MACLxR,EAAKrnB,MACLqnB,EAAK0O,QAIrBuJ,EACAC,EACAv/B,EACAw/B,IA8GQtE,CAAa+D,GAzGoBnV,KAA8B,IAA7B,eAAE2V,EAAc,MAAEtI,GAAOrN,EAC5E,OACInsB,gBAACC,OAAIC,OAAAC,OAAA,GAAK2hC,GACLtI,GACGA,EAAMt1B,IAAKwlB,GAEH1pB,gBAACC,OAAIC,OAAAC,OAAA,CAACshB,IAAKiI,EAAKjI,KAASiI,EAAK4T,QACzB5T,EAAKqY,MACLrY,EAAK/S,SAkGbqrB,CAAcT,IAEnBvhC,gBAACC,OAAIC,OAAAC,OAAA,GAAKihC,GACLI,EACAE,EAxDjB3hC,KAEA,MAAM,UACFwjB,EAAS,UACT1c,EAAS,aACT2oB,EACArpB,SACIgF,SAAS,kBAAEokB,KAEfxvB,EACE0jB,EAAmB6L,6BAAmBC,EAAoBC,EAAc3oB,GAK9E,OACI7G,gBAACghC,EAAY9gC,OAAAC,OAAA,CACTugB,GAAG,iBANQ,CACfzT,KAAM,KAMY,CACdqT,UAAW,mCACX2O,UAAW1L,EAAU0e,yBACrBtrB,KAAM4M,EAAU2e,oBAChBze,iBAAkBA,MAmCT0e,CAAapiC,IAElBC,gBAAA,OAAKsgB,UAAU,wCACXtgB,gBAAA,OAAKsgB,UAAU,qDACXtgB,gBAAA,mBAnGwB0sB,KAA8B,IAA7B,eAAEoV,EAAc,MAAEtI,GAAO9M,EACtE,OACI1sB,gBAACC,OAAIC,OAAAC,OAAA,GAAK2hC,GACLtI,GACGA,EAAMt1B,IAAKwlB,GAEHA,GACI1pB,gBAACC,OAAIC,OAAAC,OAAA,CAACshB,IAAKiI,EAAKjI,KAASiI,EAAK4T,QACzB5T,EAAK/S,SA6FjByrB,CAAWX,Q,kCChKhC,mCAkBA,MAAMY,UAAyBriC,gBAEpBsiC,oBACH,GAAIC,YAAan8B,KAAKrG,MAAMoG,QAAQgF,SAChC,OAGJ,MAAMgK,EAAM/O,KAAKrG,MAAM0G,OAAO+7B,oBAAsBp8B,KAAKrG,MAAMoG,QAAQuP,IAAIjP,OAAOg8B,mCAC5EC,EAASj4B,SAASsS,cAAc,UACtC2lB,EAAO1iB,IAAM7K,EACbutB,EAAO3P,OAAQ,EACf2P,EAAOC,YAAc,YACrBl4B,SAASm4B,KAAKC,YAAYH,GAGvBzgB,SACH,OAAIsgB,YAAan8B,KAAKrG,MAAMoG,QAAQgF,SACzB,KAGJ/E,KAAKrG,MAAMwiB,WAAWnc,KAAKrG,QAI3BsiC,a,kCC1Cf,+CAuCeS,UAvB4C/iC,IAA4B,IAAAgjC,EACnF,MAAM,YAAEzC,EAAW,sBAAEtC,EAAqB,sBAAEuC,EAAqB,UAAE3D,GAAc78B,EACjF,OACIC,2BAAA,KACK48B,EAAUyD,eAAiBC,GAC1B1D,EAAUyD,eAAiBlX,kBAAgBC,YAAYrpB,EAAM0G,OAAO05B,4BAClEngC,gBAACgjC,cAAW,CACR3W,QAAkD,QAA3C0W,EAAEhjC,EAAM0G,OAAOq6B,oCAA4B,IAAAiC,IAAIhjC,EAAMwjB,UAAU0f,oCACtEC,iBAAkBnjC,EAAMwjB,UAAU4f,sCAClCC,KAAMrjC,EAAM0G,OAAO05B,0BACnBkD,iCAAkCtjC,EAAMwjB,UAAU8f,iCAClDC,SAAUtF,EACVuC,sBAAuBA,KAG7B3D,EAAUyD,gBACPlX,kBAAgBC,YAAYrpB,EAAM0G,OAAO05B,4BAC1CvD,EAAU4C,aACVe,K,kCClChB,gBAgBegD,IAJuEztB,IAAA,IAAC,UAAEwK,EAAS,QAAEhS,GAASwH,EAAA,OACzG9V,gBAAA,OAAKsgB,UAAcA,EAAH,qBAAkChS,K,4DCetD,MAAMk1B,EAAgBC,IAClB,GAAIA,EAAW,CACX,MAAMC,EAAkBl2B,OAAO0wB,SAASuF,EAAW,IACnD,IAAKn2B,MAAMo2B,GACP,OAAOA,IAoBJC,IAb0D7tB,IAAA,IAAC,GAAE4K,EAAE,KAAExK,EAAI,MAAE5J,EAAK,QAAEs3B,EAAO,UAAEtjB,EAAS,UAAEmjB,EAAS,SAAEI,GAAU/tB,EAAA,OAClI9V,gBAAA,SACI0gB,GAAIA,EACJxK,KAAMA,EACN5J,MAAOA,EACPgU,UAAW,GAAGA,WAAmBA,KAAaI,IAC9CkjB,QAAqB,KAAZA,EAAiBA,OAAUn+B,EAAS,gBAC/B,OACdg+B,UAAWD,EAAaC,GACxBI,SAAUA,M,8HClCX,MAAMC,UAAuB9jC,gBACzBiiB,SAEH,MAAM,WAAE8hB,GAAe39B,KAAKrG,MAC5B,OAAOC,gBAACyB,SAAMvB,OAAAC,OAAA,GAAK4jC,GAAa39B,KAAK49B,eAAe59B,KAAKrG,QAGrDikC,eAAejkC,GAEnB,MAAM,QAAEssB,EAAO,iBAAE4X,EAAgB,KAAEC,EAAI,SAAEC,EAAQ,MAAEpC,EAAK,KAAEprB,EAAI,aAAEytB,GAAiBrkC,EACjF,OAAIssB,EAEIrsB,gBAACC,OAAIC,OAAAC,OAAA,GAAK8jC,GACL,IACDjkC,gBAACC,OAAI,CAACmiB,IAAI,IAAI9B,UAAU,iCAAgC,cAAa,SACpE+L,EAAS,KAGX6X,GAAQnC,EAEX/hC,gBAACC,OAAIC,OAAAC,OAAA,GAAK+jC,GACLC,EACApC,GAGFmC,EACAE,EAGPpkC,2BAAA,KACK2W,EACAorB,IAMF+B,a,qIC9Bf,MAAMO,EAAuBzK,IAEzB,MAAM,4BAAE0K,EAA2B,QAAEC,GAAY3K,EAEjD,OAAO55B,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKmkC,GAA8BC,IA4G7CC,EAAiCA,CACnCvN,EACAl3B,KACqC,IAAA0kC,EAAAC,EACrC,IAAIC,EAAoC,GAExC,MAAMC,EAAgD,QAA3BH,EAAG1kC,EAAMoG,QAAQuP,IAAIjP,cAAM,IAAAg+B,OAAA,EAAxBA,EAA0BI,qBACxB,IAADC,EAA3B/kC,EAAMoO,KAAK7F,QAAQstB,SACnB+O,EAAgBI,8BACZhlC,EAAMoO,KAAK7F,QAAQstB,OAAO7sB,OAC1BhJ,EAAMoG,QAAQgF,QAAQ2D,YACG,QADQg2B,EACjC/kC,EAAMoG,QAAQgF,QAAQuK,WAAG,IAAAovB,GAAQ,QAARA,EAAzBA,EAA2Br+B,cAAM,IAAAq+B,OAAA,EAAjCA,EAAmCE,mBAM3C,OAHIJ,GAAyBD,IACzBA,EAAgB,GAAGA,KAAiBC,KAEjC,CACHN,4BAA6B,CACzBliB,IAAK,KACL9B,UAAW,mCACX7J,KAAM,MACNwuB,SAAU,EACVxjB,IAAK,EACL,aAAc,GACd,iBAAiB,GAErB8iB,QACIvkC,IAAA+c,cAAC+Z,IAAK,CACF/M,eAAgBhqB,EAAMoG,QAAQ0B,cAAckiB,eAC5CzJ,UAAU,0CACVN,IAAI,QACJgX,aAAcj3B,EAAMoG,QAAQgF,QAAQ6rB,aACpCC,cAAkD,QAArCyN,EAAE3kC,EAAM0G,OAAOy+B,8BAAsB,IAAAR,IAAIzN,EACtDkO,oBAAoB,QACpBC,wBAAyBrlC,EAAM0G,OAAO4+B,oBACtCC,YAAaX,MAoBvBY,EAAgD,CAClDpO,UAAW,CACPC,GAAI,CAAEG,EAAG,6BAA8BF,EAAG,IAAKC,EAAG,KAClDkO,GAAI,CAAEjO,EAAG,6BAA8BF,EAAG,IAAKC,EAAG,MAEtDJ,UAAU,EACVuO,iBAAiB,GASfC,EAAmBA,CAACC,EAA8C5lC,KAEpE,MAAM,yBAAE6lC,EAAwB,kCAAEC,GAAsCF,GAClE,MAAEjjC,EAAK,WAAEojC,GAAe/lC,EACxBgmC,EA5BoBvM,IACnBA,aAAK,EAALA,EAAOt1B,IAAIwlB,IACP,CACHqN,QAASrN,EAAK6a,QAAQxkC,MAAMg3B,QAC5B/W,IAAK0J,EAAK6a,QAAQxkC,MAAMigB,OAwBNgmB,CAAqBF,EAAWtM,OAEpDA,EAEF92B,EAAMujC,YAAcF,GAAkD,UAA7BA,EAAkB,GAAG/lB,IACxD,CAACwkB,EAA+Be,EAA+BxlC,IAE/DgmC,aAAiB,EAAjBA,EAAmB7hC,IAAI,CAACwlB,EAAkBhJ,IAlLtBwlB,EAC9BnE,EACA9K,EACAkP,EACAC,EACArmC,KACqC,IAAAsmC,EAAAC,EACrC,IAAI3B,EAAoC,GAExC,MAAMC,EAAgD,QAA3ByB,EAAGtmC,EAAMoG,QAAQuP,IAAIjP,cAAM,IAAA4/B,OAAA,EAAxBA,EAA0BxB,qBACxB,IAAD0B,EAA3BxmC,EAAMoO,KAAK7F,QAAQstB,SACnB+O,EAAgBI,8BACZhlC,EAAMoO,KAAK7F,QAAQstB,OAAO7sB,OAC1BhJ,EAAMoG,QAAQgF,QAAQ2D,YACG,QADQy3B,EACjCxmC,EAAMoG,QAAQgF,QAAQuK,WAAG,IAAA6wB,GAAQ,QAARA,EAAzBA,EAA2B9/B,cAAM,IAAA8/B,OAAA,EAAjCA,EAAmCvB,mBAGvCJ,GAAyBD,IACzBA,EAAgB,GAAGA,KAAiBC,KAMxC,MAAM7kB,EAAUA,KAAK,IAAAymB,EAAAC,EACG,QAApBD,EAAAzmC,EAAM2mC,sBAAc,IAAAF,GAApBA,EAAAG,KAAA5mC,GAC4B,QAA5B0mC,EAAA1mC,EAAM6mC,8BAAsB,IAAAH,GAA5BA,EAAAE,KAAA5mC,EAA+BomC,GAC/BpmC,EAAM2C,MAAMmkC,YAAcV,GAYxBW,EAAiBC,IACfA,EAAMC,UAAYC,WAASC,QAC3BH,EAAMI,iBACNpnB,MAIR,MAAO,CACHukB,4BAA6B,CACzBliB,IAAK,KACL9B,UAnBQqQ,IACZ,mCACAyV,IAAwBD,EAAU,0CAA4C,IAkB1E1vB,KAAM,eACNgL,IAAK0kB,GAET5B,QACIvkC,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,yBACZtgB,IAAA+c,cAACkI,SAAM,CACHxO,KAAK,MAAK,aACEsrB,EAAMhL,QAAO,gBACVqP,IAAwBD,EAAO,gBAC/B,GAAGpmC,EAAM2gB,sBAAsBylB,IAC9C7lB,UAAU,sCACVP,QAASA,EACTqnB,UAAWN,GAEX9mC,IAAA+c,cAAC+Z,IAAK52B,OAAAC,OAAA,CACF4pB,eAAgBhqB,EAAMoG,QAAQ0B,cAAckiB,eAC5CzJ,UAAU,+BACNyhB,EAAK,CACT/K,aAAcj3B,EAAMoG,QAAQgF,QAAQ6rB,aACpCC,cAAkD,QAArCqP,EAAEvmC,EAAM0G,OAAOy+B,8BAAsB,IAAAoB,IAAIrP,EACtDkO,oBAAoB,OACpBC,sBAAuBrlC,EAAM2C,MAAM2kC,wBACnC/B,YA3BC,IA2BYa,EAA2BxB,EAAgB5C,EAAM/hB,IAC9DsnB,oBA5BC,IA4BoBnB,MAG7BnmC,IAAA+c,cAAC9c,OAAI,CAACqgB,UAAU,kCACZtgB,IAAA+c,cAACkI,SAAM,CACHmiB,UAAWN,EACXhX,MAAO/vB,EAAMwjB,UAAUgkB,oBACvB9wB,KAAK,SACL6J,UAAU,+CACVP,QAASA,QAiGfmmB,CAA0Bxc,EAAM6b,EAA+B7kB,EAAIhe,EAAMmkC,YAAa9mC,IAGpG,OACIC,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKylC,GACN5lC,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAK0lC,GAAoCrM,aAAK,EAALA,EAAOt1B,IAAImgC,MAsBtDmD,UAZ4CznC,IAEvD,MAAM,cAAE0nC,EAAa,WAAE3B,EAAU,aAAE4B,EAAY,MAAEpT,GAAUv0B,EAC3D,OACIC,IAAA+c,cAACtb,SAAMvB,OAAAC,OAAA,GAAKunC,GACR1nC,IAAA+c,cAAC9c,OAAIC,OAAAC,OAAA,GAAKsnC,IACTnT,EACAoR,EAAiBI,EAAY/lC,M,y0BCzK1C,IAAM4nC,EAAN,cAAiC3nC,YAkB7BkG,YAAYnG,GACRuG,MAAMvG,GAlBO,KAAA6nC,gBAA0B,0BAkGpC,KAAAC,oBAAuBd,GAA0C3gC,KAAKrG,MAAM0G,OAAO4lB,QAAQ1V,KAAOowB,EAAMe,OAAOx7B,MAE/G,KAAAy7B,gBAAmBhB,IACtB,MAAMrmB,EAAKqmB,EAAMe,OAAOpnB,GAClBpU,EAAQy6B,EAAMe,OAAOx7B,MAE3B,OAAQoU,EAAGhb,eACP,IAAK,YACDU,KAAK4hC,UAAY17B,EACjB,MAEJ,IAAK,UACDlG,KAAK6hC,QAAU37B,EACf,MAEJ,IAAK,QACDlG,KAAK8hC,WAAa57B,IAQvB,KAAAqzB,QAAU,KACbv5B,KAAK+hC,mBACL/hC,KAAKgiC,sBAGLhiC,KAAKiiC,oBAAsBlnB,YAAY,KACnC/a,KAAKkiC,+BACN,KACH1oB,WAAW,KACPwB,cAAchb,KAAKiiC,sBACpB,MAIU,KAAAC,4BAA8B,KAEvC99B,QAAUA,OAAe,QAAKA,OAAe,OAA4B,2BACzE4W,cAAchb,KAAKiiC,qBACnBjiC,KAAKmiC,eAAgB,IAIZ,KAAAJ,iBAAmB,KAChC,MAAM,UAAE5kB,GAAcnd,KAAKrG,MACrByoC,EAA2BjlB,EAAUilB,0BAA4B,sCAGnEh+B,OAAkB,WAAKA,OAAkB,UAAmB,iBAE5DA,OAAkB,UAAmB,gBAAEtG,IAClCukC,IACG,MAAMn8B,EAAQm8B,EAAIC,IAAMtiC,KAAKuiC,YAAYF,EAAIC,KAAO,GACpD,OAAQD,EAAIG,GAAGljC,eACX,IAAK,YACDU,KAAK4hC,UAAY17B,EACjB,MAEJ,IAAK,UACDlG,KAAK6hC,QAAU37B,EACf,MAEJ,IAAK,QACDlG,KAAKyiC,MAAQv8B,EACblG,KAAK8hC,WAAaO,EAAIK,IACtBL,EAAIM,SAAWP,MAiBtB,KAAAJ,oBAAsB,KACnC,MAAM,UAAE7kB,GAAcnd,KAAKrG,MAG3B,GAAIyK,QAAUA,OAAgB,QAAG,CAC7B,MAAM8D,EAAU,CACZ06B,eAAgBzlB,EAAU0lB,0BAC1BC,gBAAiB3lB,EAAU4lB,gBAI/BjpC,OAAOC,OAAOqK,OAAgB,QAAG8D,KA/KrClI,KAAK4hC,UAAY,GACjB5hC,KAAK6hC,QAAU,GACf7hC,KAAKyiC,MAAQ,GACbziC,KAAK8hC,WAAakB,aAAWC,aAAaC,OAC1CljC,KAAKmiC,eAAgB,EACrBniC,KAAKqd,iBAAmB6L,6BACpBlpB,KAAKrG,MAAMoG,QAAQgF,QAAQokB,kBAC3BnpB,KAAKrG,MAAMyvB,aACXppB,KAAKrG,MAAM8G,WAIZy7B,oBACHl8B,KAAKu5B,UAIF4J,qBAECnjC,KAAKmiC,eAAiB/9B,QAAUA,OAAiB,UAAKA,OAAiB,SAAc,YAErFA,OAAiB,SAAc,aAIhCm2B,sBACHC,EACAC,GAEA,OAAIz6B,KAAK1D,QAAUm+B,GAAaz6B,KAAKrG,MAAMoO,OAASyyB,EAAUzyB,KAM3D8T,SACH,MAAM,OAAExb,EAAM,UAAE8c,GAAcnd,KAAKrG,MAE7BmiB,EAAS7a,IAAA,GACRjB,KAAKrG,OAAK,IACb68B,UAAW,CACPI,eAAgB52B,KAAKmiC,eAEzB5L,mBAAoB,CAChBn7B,YAAa4E,KAAKrG,MAClBugB,UAAWqQ,IAAWvqB,KAAKwhC,gBAAiBnhC,EAAO6Z,YAEvDoO,QAAS,CACLhtB,MAAO,CACH0gB,IAAKkS,QACLC,QAAQ,GAEZ3yB,UAAW,CACPwgB,IAAKsS,aAET+H,KAAMz8B,gBAACwpC,IAAsC,CAAClpB,UAAWla,KAAKwhC,kBAC9Dt5B,QAAStO,gBAACypC,IAAyC,CAACnpB,UAAWla,KAAKwhC,gBAAiBt5B,QAASiV,EAAU4lB,kBAE5GtM,mBAAoB,CAChBnc,GAAI,MACJZ,MAAO,CAAElP,QAAS,SAEtBksB,YAAa,CACTpc,GAAIta,KAAKmiC,cAAgB,MAAQ,KACjCjoB,UAAcla,KAAKwhC,gBAAR,eAEfvb,QAAS5lB,EAAO4lB,SAAW5lB,EAAO4lB,QAAQ1V,MACtC3W,gBAAC0pC,IAAaxpC,OAAAC,OAAA,CACVmgB,UAAcla,KAAKwhC,gBAAR,aACPnhC,EAAO4lB,QAAO,CAClBsd,UAAW,CAAEC,OAAQxjC,KAAKyhC,oBAAqB9d,eAAgB3jB,KAAKrG,MAAMoG,QAAQgF,YAG1F4xB,+BAAgC32B,KAAKyjC,wBAGzC,OAAOzjC,KAAKrG,MAAMwiB,WAAWL,GAiFzBymB,YAAYmB,GAChB,MAAMt7B,EAAI/D,SAASsS,cAAc,OAGjC,OADAvO,EAAEu7B,UAAYD,EACiB,IAAxBt7B,EAAEw7B,WAAWhmC,OAAe,GAAKwK,EAAEw7B,WAAW,GAAGC,WAAa,GAkBjEJ,sBACJ,MAAM,OAAEpjC,EAAM,UAAE8c,GAAcnd,KAAKrG,MAC7Bk9B,EAAe,CACjBA,aAAc,CACVvc,GAAI,gBACJJ,UAAcla,KAAKwhC,gBAAR,wBAEfpO,MAAO,CACHpzB,KAAK8jC,aAAa,YAAa,OAAQ9jC,KAAK4hC,UAAWzkB,EAAU4mB,mBAAoB5mB,EAAU6mB,oBAC/FhkC,KAAK8jC,aAAa,UAAW,OAAQ9jC,KAAK6hC,QAAS1kB,EAAU8mB,kBAAmB9mB,EAAU+mB,oBAE9F/N,aAAc,CACVv8B,gBAACuqC,IAAgC,CAC7B9oB,IAAI,uBACJf,GAAG,uBACHJ,UAAWla,KAAKwhC,gBAChBt5B,QAASiV,EAAUinB,mCAEvBxqC,gBAACuqC,IAAgC,CAC7B9oB,IAAI,iBACJf,GAAG,iBACHJ,UAAWla,KAAKwhC,gBAChBt5B,QAASiV,EAAUknB,sBAEvBzqC,gBAACuqC,IAAgC,CAC7B9oB,IAAI,+BACJf,GAAG,+BACHJ,UAAWla,KAAKwhC,mBAGxB1K,eAAgB,CACZ5c,UAAcla,KAAKwhC,gBAAR,aAEfzK,QAAS,CACLn9B,gBAAC0qC,IAAiC,CAC9BjpB,IAAI,WACJf,GAAG,WACHJ,UAAcla,KAAKwhC,gBAAR,gBACX3Y,UAAW1L,EAAUonB,oBACrBh0B,KAAM4M,EAAUqnB,eAChBnnB,iBAAkBrd,KAAKqd,mBAE3BzjB,gBAAC0qC,IAAiC,CAC9BjpB,IAAI,SACJf,GAAG,SACHJ,UAAcla,KAAKwhC,gBAAR,kBACX3Y,UAAW1L,EAAUsnB,iBACrBl0B,KAAM4M,EAAUsnB,iBAChBpnB,iBAAkBrd,KAAKqd,oBAG/B2Z,yBAA0B,CACtB9c,UAAcla,KAAKwhC,gBAAR,qCAEfvK,gCAAiC,CAC7B3c,GAAI,kBACJJ,UAAcla,KAAKwhC,gBAAR,8BAUnB,OANInhC,EAAOqkC,WAA4B,KAAf1kC,KAAKyiC,OACzB5L,EAAazD,MAAMt0B,KACfkB,KAAK8jC,aAAa,QAAS,QAAS9jC,KAAKyiC,MAAOtlB,EAAUwnB,2BAAuBtlC,EAAWW,KAAK8hC,aAIlGjL,EAGHiN,aACJxpB,EACAxK,EACA5J,EACA0+B,EACAvH,EACAG,GAEA,MAAMtjB,EAAela,KAAKwhC,gBAAR,iBAClB,MAAO,CACHtL,QAAS,CACLhc,UAAWqQ,IAAWrQ,EAAW,GAAGA,KAAaI,IAAM,aAAc,cAEzEe,IAAKf,EACLwa,MACIl7B,gBAACirC,IAAgC/qC,OAAAC,OAAA,GACzB,CACAugB,KACA8Q,MAAO9Q,EACPJ,YACA3J,KAAMq0B,KAIlBzO,aACIv8B,gBAACuqC,IAAgCrqC,OAAAC,OAAA,GACzB,CACAmgB,UAAWla,KAAKwhC,gBAChB1xB,KAAM,UAIlBkiB,MACIp4B,gBAACkrC,IAAgChrC,OAAAC,OAAA,GACzB,CACAugB,KACAxK,OACA5J,QACAs3B,UACAtjB,YACAmjB,YACAI,SAAUz9B,KAAK2hC,sBAhTvBoD,YAAA,CAAXC,K,gCAEWD,YAAA,CAAXC,K,8BAEWD,YAAA,CAAXC,K,4BAEWD,YAAA,CAAXC,K,iCAEWD,YAAA,CAAXC,K,oCAbCzD,EAAkBwD,YAAA,CADvBE,KACK1D,GA6TSA","file":"static/js/13.940ca1046f154b769618.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport {\n IReportReviewModalViewProps,\n IReviewCardViewProps,\n IReviewsListState,\n IReviewsListViewProps\n} from '@msdyn365-commerce-modules/ratings-reviews/src/modules/reviews-list';\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst ReviewsListview: React.FC = props => {\n const {\n averageRating,\n filterByDropdown,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n reviewCount,\n reviewModal,\n sortByDropdown,\n state,\n userReview\n } = props;\n\n if (!userReview && reviewCards.length === 0 && !state.isFilterApplied) {\n return {noReviewsMessage};\n }\n\n return (\n \n {averageRating}\n {reviewCount}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview)}\n {reviewCards.map(review => {\n return buildReviewCard(review);\n })}\n \n {reviewCards.length === 0 && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(reviewModal, moduleProps)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nconst buildReviewCard = (props: IReviewCardViewProps) => {\n return (\n \n \n {props.rating}\n {props.name}\n {props.date}\n \n \n \n {props.reviewTitle}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {props.ratingHelpfulLabel}\n {props.like}\n {props.dislike}\n {props.edit}\n {props.report}\n \n \n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n {state.reported ? props.headerSubmitted : props.header}\n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n );\n};\n\nexport default ReviewsListview;\n","// 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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { IAdvancedNotesData } from './advanced-notes.data';\r\nimport { IAdvancedNotesProps } from './advanced-notes.props.autogenerated';\r\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { IAdvancedNoteEntity } from '../../actions/DataServiceEntities.g';\r\n\r\nexport interface IAdvancedNotesViewProps extends IAdvancedNotesProps {\r\n staticDisplay: INodeProps;\r\n advancedNotesModuleProps: IModuleProps;\r\n}\r\n\r\ninterface IAdvancedNotesExtendedProps extends IAdvancedNotesProps {\r\n notes: IAdvancedNoteEntity[];\r\n}\r\n\r\ninterface IAdvancedNotesState {\r\n notes: IAdvancedNoteEntity[];\r\n isNoteAreaActive: boolean;\r\n}\r\n/**\r\n *\r\n * AdvancedNotes component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass AdvancedNotes extends React.PureComponent {\r\n private _className = 'advanced-notes';\r\n constructor(props: IAdvancedNotesExtendedProps) {\r\n super(props);\r\n this.state = {\r\n notes: props.notes,\r\n isNoteAreaActive: false\r\n };\r\n }\r\n private _renderNote = (key: string, message: string): React.ReactNode => {\r\n return (\r\n
\r\n

{message}

\r\n
\r\n );\r\n };\r\n\r\n private _renderNotes = (): React.ReactNode => {\r\n return (\r\n
\r\n {this.props.notes.map((note, index) => {\r\n return this._renderNote(`${index}${note.ItemId}`, note.TextValue || '');\r\n })}\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Renders the static comment display for when the isCommentAreaActive state param is false\r\n * @return React.ReactNode\r\n */\r\n private _renderStaticNotesDisplay = () => {\r\n const notes = this._renderNotes();\r\n return
{notes}
;\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n const viewProps: IAdvancedNotesViewProps = {\r\n ...this.props,\r\n staticDisplay: {\r\n tag: 'div',\r\n className: `${this._className}__static-display`,\r\n children: this._renderStaticNotesDisplay()\r\n },\r\n advancedNotesModuleProps: {\r\n tag: 'div',\r\n className: `${this._className}`,\r\n moduleProps: { ...this.props }\r\n }\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n}\r\n\r\nexport default AdvancedNotes;\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// @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 { IHistogramItemViewProps, IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { IAdvancedNotesViewProps } from './advanced-notes';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\n\r\nexport default (props: IAdvancedNotesViewProps) => {\r\n const { staticDisplay, advancedNotesModuleProps } = props;\r\n return (\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 * 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","/*!\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 { getUrlSync } from '@msdyn365-commerce/core';\nimport { IB2bRequestsStatusViewProps } from '@msdyn365-commerce-modules/account-management';\nimport { Button, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { IB2bRequestsStatusProps, IB2bRequestsStatusResources } from '../definition-extensions/b2b-requests-status.ext.props.autogenerated';\n\n/**\n * B2b Request status View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file.\nconst B2bRequestsStatusView: React.FC> = props => {\n const { b2bRequestsStatus, heading, table } = props;\n const { continueShoppingButtonTitle } = props.resources;\n const initialCount = 0;\n\n if (props.data.operationRequests.result?.length === initialCount) {\n return (\n \n {heading}\n \n
\n

{props.resources.headingForEmptyRequestStatus}

\n

{props.resources.textForEmptyRequestStatus}

\n \n \n {continueShoppingButtonTitle}\n \n \n
\n
\n
\n );\n }\n return (\n \n {heading}\n {table}\n \n );\n};\n\nexport default B2bRequestsStatusView;\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 { 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 { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n *\n * FooterItemView component.\n * @extends {React.PureComponent}\n */\nexport class FooterItemView extends React.PureComponent {\n public render(): JSX.Element | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { FooterItem } = this.props;\n return {this._renderElement(this.props)};\n }\n\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\n if (heading) {\n return (\n \n {' '}\n \n );\n } else if (Link && image) {\n return (\n \n {linkText}\n {image}\n \n );\n } else if (Link) {\n return EditableLink;\n }\n return (\n <>\n {text}\n {image}\n \n );\n }\n}\n\nexport default FooterItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport {\n IMediaGalleryThumbnailItemViewProps,\n IMediaGalleryThumbnailsViewProps,\n IMediaGalleryViewProps\n} from '@msdyn365-commerce-modules/media-gallery';\nimport { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Render the thumbnail item images.\n * @param thumbnail - The carousel thumbnail line props.\n * @returns Return HTML having thumnailcontainer props with image.\n */\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\n/**\n * Gets the thumbnail item to display media gallery images.\n * @param image - The media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param imageId - Image id.\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render images.\n */\nconst GetThumbnailItemComponent = (\n image: IImageData,\n imageSettings: IImageSettings,\n imageId: number,\n modifiedActiveIndex: number,\n props: IMediaGalleryViewProps\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n /**\n * OnClick method of media gallery item.\n */\n const onClick = () => {\n props.callbackToggle?.();\n props.callbackThumbnailClick?.(imageId);\n props.state.activeIndex = imageId;\n };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n /**\n * Keydown event of media gallery item.\n * @param event - React.KeyboardEvent.\n */\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Enter) {\n event.preventDefault();\n onClick();\n }\n };\n const defaultIndex = 0;\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'presentation',\n key: imageId\n },\n Picture: (\n \n \n \n \n \n \n \n \n )\n };\n};\n\n/**\n * Gets the empty thumbnail item to display media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render empty images.\n */\nconst GetEmptyThumbnailItemComponent = (\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: 'ms-media-gallery__thumbnail-item',\n role: 'tab',\n tabIndex: 0,\n key: 0,\n 'aria-label': '',\n 'aria-selected': true\n },\n Picture: (\n \n )\n };\n};\n\n/**\n * Update media gallery items method.\n * @param items - The media gallery thumbnail item view props.\n * @returns The IImageData array.\n */\nconst getMediaGalleryItems = (items?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\n return items?.map(item => {\n return {\n altText: item.Picture.props.altText,\n src: item.Picture.props.src\n };\n });\n};\n\nconst defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Render the Media gallery thumbnails to represent images in grid view.\n * @param thumbnails - The thumbnail view props.\n * @param props - The media gallery view props.\n * @returns - The single slide carousel component to render as media gallery image.\n */\nconst renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps, props: IMediaGalleryViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\n const { state, Thumbnails } = props;\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\n\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\n state.lastUpdate && mediaGalleryItems && mediaGalleryItems[0].src === 'empty'\n ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)]\n : // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\n mediaGalleryItems?.map((item: IImageData, id: number) =>\n GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props)\n );\n\n return (\n \n {items?.map(renderThumbnailItem)}\n \n );\n};\n\n/**\n * Render the Media gallery items using viewprops.\n * @param props - The media gallery view props.\n * @returns The media gallery module wrapping up images node.\n */\nconst mediaGalleryView: React.FC = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n return (\n \n \n {Modal}\n {renderThumbnails(Thumbnails, props)}\n \n );\n};\n\nexport default mediaGalleryView;\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":""}