{"version":3,"sources":["webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/zoom-image/ZoomImage.tsx?3088","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/table/Table.tsx?8faf","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/progress/Progress.tsx?fbb5","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/tooltip/UncontrolledTooltip.tsx?30ec","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/slider/SliderThumb.tsx?5d3f","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/slider/Slider.tsx?bb4c","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/table/checkbox.tsx?36f8","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/wrapper/node.tsx?cdf8","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/waiting/Waiting.tsx?ba13","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/tooltip/Tooltip.tsx?8355","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/popover/index.ts?bf24","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/collapse/Collapse.tsx?27f6","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/button/Button.tsx?457f","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/index.ts?5680","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/popup-products/Popup-products.tsx?2288","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/common/KeyCodes.ts?0c24","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/labeled-dropdown/LabeledDropdown.tsx?ab7c","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/common/localeBasedPrice.ts?42e9","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/wrapper/module.tsx?dadb","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/isMobile/isMobile.props.ts?d9d2","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/quantity/Quantity.tsx?b66b","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/incremental-quantity/index.ts?6ddc","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/price/price-editor-mode-selection.tsx?3c70","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/price/price-editor.tsx?ca15","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/PaginationLink.tsx?b97e","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/zoom-image/ImagefullView.tsx?adc9","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/flipper/Flipper.tsx?36cd","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/table/index.ts?75ef","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/isMobile/isMobile.tsx?1fd3","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/incremental-quantity/IncrementalQuantity.tsx?1af1","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/drawer/Drawer.tsx?da2c","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/popup/Popup.tsx?0173","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/heading/Heading.tsx?c36b","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/popper-content/PopperContent.tsx?1148","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/fade/Fade.tsx?31ba","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/common/telemetryHelper.ts?068b","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/common/urlCheck.ts?1d7a","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/alert/Alert.tsx?44c5","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/back-to-top/BackToTop.tsx?0cf6","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/single-slide-carousel/SingleSlideCarousel.tsx?b47d","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/quantity/index.ts?f7b4","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/drawer/ControlledDrawer.tsx?9a39","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/common/utilities.ts?93e6","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/PaginationItem.tsx?6f25","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/form-builder/form-builder.tsx?c7f3","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/common/stringExtensions.ts?f421","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/UncontrolledPagination.tsx?4877","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/Pagination.tsx?ebf9","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/popover/Popover.tsx?3cf4","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/modal/Portal.tsx?c937","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/modal/Modal.tsx?7d4b","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalBody.tsx?c097","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalFooter.tsx?8e31","webpack:///./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalHeader.tsx?627d"],"names":["removeInlineZoomStyle","zoomedImages","document","body","getElementsByClassName","zoomedImagesArray","Array","from","item","style","width","height","defaultDataScale","onMouseOutLensContainer","event","zoomLens","currentTarget","visibility","classList","remove","zoomedImageContainer","querySelector","getCenter","size","x","y","getLensPosition","cursorPosition","lensSize","originalSize","lensCenter","position","maxPositionX","Math","min","max","maxPositionY","getCursorPosition","element","containerBoundingRect","getBoundingClientRect","pageX","left","window","pageXOffset","pageY","top","pageYOffset","formatPixelsValue","numericValue","handleInlineStyles","zoomedImage","dataScaleText","removeAttribute","imageElement","parentElement","previousElementSibling","dataScale","Number","imageContainerSize","offsetWidth","offsetHeight","zoomedImageSize","opacity","imageCenter","offset","scaledCursorPosition","zoomedImagePosition","inlineZoomInitClick","_event$currentTarget$","type","zoomImg","nextElementSibling","handleMouseMovementInContainerZoom","lens","_lens$getAttribute","zoomedContainer","createElement","setAttribute","appendChild","getAttribute","displayedImageSize","imageInitialHeight","naturalHeight","imageInitialWidth","naturalWidth","imageContainerHeight","widthScaleRatio","heightScaleRatio","scaleRatio","getDisplayedImageSize","lensPosition","mainImageSource","backgroundImage","offsetCenter","lensScaledPositionX","lensScaledPositionY","backgroundPositionX","backgroundPositionY","backgroundSize","topPosition","onMouseOverImageContainer","add","onMouseMoveLensContainer","onContainerZoomInit","containerDiv","inlineZoomImageOnMouseMove","_parentElement$getAtt","inlineZoomImageOnMouseOut","inlineZoomImageOnHover","scale","arguments","length","undefined","zoomedImg","removeContainerZoomStyle","TableDataType","Table","React","PureComponent","constructor","props","super","componentClassName","headingPrefix","capitalizeHeadingPrefix","_selectSortingKey","target","columnName","sortingKey","ascendingOrder","this","state","newOrder","setState","showActions","_onCheckBoxChangeHandler","rows","checkBoxCallback","index","ObjectExtensions","isNumber","isSelected","_renderHeadingRow","columnData","resources","showCheckBoxes","enableToModify","minifyActions","actionLinkText","isSortable","resourcePrefix","isSingleSelectOnly","businessUserSelectCheckBoxAriaLabelText","sortByAscending","sortByDescending","sortingClassName","sortingValue","columns","map","data","cellIndex","updatedCellIndex","heading","name","columnSortValue","columnAriaLabel","ariaLabel","format","sortable","onClick","onKeyUp","_handleKeyPressPrev","className","classnames","key","scope","role","tabIndex","trim","radioCheckBox","CheckBoxButton","onChange","actionContent","tableCell","header","content","_renderRow","excludedColumns","actions","formatPrice","rowsData","additionalNameAriaLabel","row","value","toString","cell","includes","id","extraClass","Price","cellContent","columnSpecificClass","rowKey","selectedIndex","actionButtons","_renderActions","buttonReferences","records","buttonReference","editLinkText","deleteLinkText","viewLinkText","editLinkTooltip","deleteLinkTooltip","viewLinkTooltip","actionLinkTooltip","minifiedButtonText","onEdit","onDelete","onView","handleClickEdit","_buttonReference$edit","edit","current","handleClickDelete","_buttonReference$dele","delete","handleClickView","Node","Button","innerRef","title","_toggleActions","newKey","_sortTableRow","table","sortingkey","sort","userOne","userTwo","userOneData","find","userTwoData","cleanFirst","toLowerCase","cleanSecond","_getCurrentPageData","tableRows","start","end","result","i","push","colSpan","_renderPrev","paginationPreviousText","_renderNext","paginationNextText","keyCode","KeyCodes","Enter","Space","headings","render","showPagination","paginationProperty","tableAriaLabel","tableTabIndex","classname","paginationLinks","skipCount","itemPerPage","nextText","prevText","paginationText","url","UncontrolledPagination","qsp","items","itemsPerPage","startingItem","previousText","previousAriaLabel","nextAriaLabel","tableBody","tableHead","Progress","percent","defaultProps","UncontrolledTooltip","isOpen","_toggle","bind","_isAutoDisplayTriggered","isCartPage","StringExtensions","isNullOrWhitespace","cartPageUrl","location","shouldShowMiniCart","Tooltip","Object","assign","showToolTipOnTab","toggle","previousState","SliderThumb","sliderButtonRef","sliderThumbClass","trackThumbClass","ref","onMouseDown","handleStart","onMouseUp","handleEnd","onTouchMove","handleDrag","onTouchEnd","onKeyDown","handleKeydown","onFocus","handleFocus","onBlur","handleBlur","showTooltip","placement","tooltip","handleTooltipText","sliderValue","orientations","horizontal","dimension","direction","coordinate","vertical","EventType","Slider","thumb1Ref","thumb2Ref","_prevState","_renderLabels","labels","label","labelId","labelPositioning","labelString","_renderSliderThumbs","thumbStyles","isMobileCheck","isMobile","variant","VariantType","Browser","context","gridSettings","xs","w","sm","md","lg","xl","isMobileView","sliderAriaLabelMin","sliderThumbs","sliderAriaLabelMax","isRangeSlider","step","orientation","_handleOnChange","_handleStart","_handleDrag","_handleEnd","ariaValueText","_handleUpdate","dimensionStr","toUpperCaseFirstChar","sliderPos","handlePos","limit","grab","e","stopPropagation","eventType","addEventListener","castTarget","thumbid","active","_getThumbAndPublishEvent","Start","_position","castEvent","node","coordinateStyle","directionStyle","clientCoordinateStyle","touches","pos","_getValueFromPosition","_getPositionFromValue","percentage","round","clamp","baseVal","_coordinates","fill","handle","_setSliderValue","sliderThumb","_objectSpread","Change","_publishNotification","thumb","delegate","slider","firstThumbValue","secondThumbValue","NaN","nativeEventType","elmenentId","replace","_getThumbFromProps","End","onChangeEnd","onChangeStart","_willThumbsCrossOver","_handleOnClick","MsDyn365","isBrowser","shouldSliderAdjustToRTL","nextState","componentDidMount","componentDidUpdate","shouldComponentUpdate","nextProps","_nextState","shouldRender","thumb1Position","thumb2Position","componentWillUnmount","removeEventListener","sliderClass","sliderBaseClass","sliderId","camelCasedDirection","positionThumb1","coordsThumb1","fillStyle","handleStyle","trackProgressClass","sliderKey","String","positionThumb2","coordsThumb2","marginBottom","showProgressBar","fillTrackValue","showLabels","castThumb","thumbId","thumbPressed","thumb1","thumb2","thumbInteractedWith","parseInt","thumbFound","filter","keycode","checkCondition","inForm","_ref","isChecked","cssClass","checked","tag","Tag","Element","restAttribute","_objectWithoutProperties","_excluded","Waiting","_this$props","watingClassName","DEFAULT_DELAYS","show","hide","addTargetEvents","handleDocumentClick","removeTargetEvents","onMouseOverTooltip","onMouseLeaveTooltip","onMouseOverTooltipContent","onMouseLeaveTooltipContent","onFocusOutTarget","onEscKeyDown","onEscKeyDownNative","tabPressed","getTargetElement","getElementsByTagName","bodyClasses","attributes","getNamedItem","removeNamedItem","clearHideTimeout","clearShowTimeout","hideTimeout","showTimeout","setTimeout","getDelay","nativeEvent","nextFocus","activeElement","contains","delay","isNaN","ariaAttr","createAttribute","setNamedItem","clearTimeout","trigger","triggers","split","forEach","displayMode","disabled","preventDefault","cssModule","placementPrefix","hideArrow","hideAriaHidden","innerClassName","modifiers","boundariesElement","arrowClassName","classes","mapToCssModules","classNames","popperClasses","PopperContent","shouldShowCloseButton","onMouseOver","onMouseLeave","Collapse","_transitionStatusToClassHash","entering","entered","exiting","exited","_tagRef","_updateParentElement","minHeight","_onEntering","_onExit","_onExited","_onExiting","_reevaluateHeight","children","navbar","in","collapseIn","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","onEnter","onEntering","onEntered","onExit","onExiting","onExited","otherProps","transitionProps","Transition","TransitionTimeouts","status","collapseClass","_getTransitionClass","reEvaluateHeight","firstElementChild","scrollHeight","isAppearing","block","color","outline","href","PopupProducts","popupProps","processStatusClass","dialogStrings","text","modalOpen","setModalOpen","closeModal","Modal","onClosed","ModalHeader","ModalBody","closeWindowButtonText","LabeledDropdown","_onSelectOption","selectedKey","selectedOption","keys","dropdownOptions","option","indexOf","labelText","labelClassname","dropdownId","dropdownClassname","labelClassNames","dropdownClassNames","_getSelectedIndex","htmlFor","selected","controlledByParent","onSelectOption","selectedOptions","toggleColor","getLocaleBasedCustomizedPrice","customPrice","locale","returnState","Back","amountData","amountVariable","slice","isNullOrEmpty","paymentAmount","parseFloat","setLocaleBasedAmount","charAt","_state$amountVariable","stringAmount","EMPTY","_state$amountVariable2","lastDigit","inputTextValue","amountForUI","newVar","usedVar","recentInputNumber","Intl","NumberFormat","customizedAmount","_state$amountVariable3","_state$amountVariable4","_state$amountVariable5","substring","inputWithDot","Module","moduleProps","renderModuleAttributes","Quantity","_props$currentCount","inputRef","_validateMin","minValue","currentInput","currentCount","_handleChange","currentValue","pattern","inputQuantityAriaLabel","inputElement","HTMLInputElement","debounce","PriceEditorModeSelectionState","getPriceEditorModeSelectionStateResources","modeState","full","payFullAmountButtonText","partial","specifyAmountButtonText","Error","onClickHandler","handleStateChange","togglePopoverHandler","setPopoverState","isPopoverState","PriceEditorModeSelectionComponent","popoverReference","createRef","isPopoverShown","setIsPopoverShown","useState","setModeState","currentState","onChangeMode","clickedState","onStateChanged","Popover","EnumExtensions","getEnumValues","renderModeStateItem","stateStringRepresentation","PriceEditor","_handleInputFocus","isInputFocused","_handleInputBlur","_handleEditorModeStateChange","newState","_this$_inputRef$curre","_updateAmount","maximumValue","_inputRef","focus","newAmount","handleChange","toFixed","_precision","isNullOrUndefined","minimumValue","defaultValue","defaultAmount","_this$state$currentVa","_this$state$currentVa2","_this$state$currentVa3","hasMultipleModes","mode","formattedValue","editedValue","priceEditorInputAriaLabel","PaginationLink","payLoad","getPayloadObject","telemetryContent","next","previous","etext","paginationLinkclasses","defaultCaret","isArray","contentAction","attribute","getTelemetryAttributes","ImagefullView","galleryCarousel","modalWindow","autoFocus","applicationNode","modalIsOpen","ontoggle","zIndex","modalHeader","cloneElement","Flipper","telemetryLabel","glyphProps","displayTooltip","sizeClass","_context$device","innerWidth","Viewport","device","Type","IncrementalQuantity","IncrementalQuantity_1","_this$props$min","_minValue","isUpdating","_onIncrement","_onDecrement","_props$currentCount2","_this$props$inputQuan","_this$props$inputQuan2","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","decrementDisabled","isGiftCard","incrementDisabled","TelemetryConstant","DecrementQuantity","decrementAttributes","IncrementQuantity","incrementAttributes","ariaLablelText","extraClassDecrement","extraClassIncrement","decrementButtonAriaLabel","incrementButtonAriaLabel","invokeCallback","currQuantity","updatedQuantity","_debounce","__decorate","observer","Drawer","_props$collapseProps$","_props$collapseProps","isManuallyToggled","collapseProps","buttonText","drawerGlyphClass","toggleGlyphClassName","animateGlyph","drawerOpenGlyph","openGlyph","closeGlyph","drawerCloseGlyph","drawerClass","toggleButtonProps","_generateDrawerButtonInnerMarkup","collapseState","drawerButtonTextClass","toggleButtonClassName","glyphPlacement","toggleButtonText","_generateGlyphMarkup","glyphClass","onToggle","innerText","Popup","_context$app$config","imageSettings","product","price","productQuantity","priceComponent","navigationUrl","ContinueShopping","continueShoppingAttribute","ViewBagAndCheckout","viewBagAttribute","fallbackImageUrl","getFallbackImageUrl","ItemId","actionContext","requestContext","apiSettings","cropFocalRegion","quantity","itemsString","headerItemOneText","headerItemFormatText","shouldDisplayUnitOfMeasure","app","config","unitOfMeasureDisplayType","reducedDimensions","Dimensions","reduce","str","productDimension","DimensionValue","Value","headerMessageText","Image","src","PrimaryImageUrl","fallBackSrc","altText","Name","loadFailureBehavior","DefaultUnitOfMeasure","ModalFooter","goToCartText","continueShoppingText","Heading","headingTag","HTag","_handlePlacementChange","_handleProps","prevProps","_renderChildren","container","_show","_hide","flip","fallbackPlacement","focusOut","arrowClassNameOrUndefined","attrs","popperClassName","extendedModifiers","enabled","behavior","preventOverflow","update","order","fn","targetElement","ReactPopper","component","display","Arrow","Fade","baseClass","baseClassActive","fadeIn","timeoutOrUndefined","addEndListener","baseClassAlways","baseClassActiveAlways","isActive","getTelemetryObject","pageName","moduleName","telemetry","recid","contentCategory","pgname","mname","etype","contentData","setTelemetryAttribute","onTelemetryClick","linkText","logEvent","TelemetryEvent","Custom","urlCheck","testUrl","parsedUrl","parse","protocol","host","Alert","closeClassName","transition","fade","assertive","includeAlertClass","closeClasses","alertTransition","buttonId","innerContent","closeAriaLabel","BackToTop","_renderHeading","Msdyn365","editProps","_reevaluatePosition","_scrollToTop","threshold","delayInMs","scrollStepInPx","_scrollStep","documentElement","scrollTop","clearInterval","intervalId","scrollTo","setInterval","innerHeight","clientHeight","tabIndexValue","SingleSlideCarousel","carouselSize","slideSize","itemSize","flipperNextLabel","flipperPrevLabel","_onResized","_onCarouselResized","_nextSlide","_previousSlide","_handleTouchStart","_handleTouchEnd","_onFocus","showPrevious","showNext","slideRef","itemRef","parentId","scrollThreshold","touchScrollThreshold","carousel","slide","_setSizes","_updateFlippers","resizeThrottledEventHandler","addThrottledEvent","isVert","slidePositionStyle","modifiedChildren","_getClonedChildren","carouselClass","carouselSlideClass","overflowClass","previousFlipperGlyph","nextFlipperGlyph","previousFlipperClassName","nextFlipperClassName","disableClassName","onTouchStart","useTabList","child","castChild","verticalItemsSelector","itemsSelector","_moveSingleSlide","evt","scrollStart","screenY","screenX","changedTouches","delta","currentOffset","getCSS","maxScrollCount","floor","directionModifier","maxScrollDistance","distanceToEdge","abs","scrollWidth","_calculateCarouselSize","carouselStyle","getComputedStyle","padding","paddingTop","paddingBottom","paddingLeft","paddingRight","clientWidth","_canScrollPrevious","_canScrollNext","_scrollItemIntoView","offsetTop","offsetLeft","updateOffset","scrollLeft","ControlledDrawer","isExpanded","Expand","_generateTitle","isStart","additionalClassName","titleLClassName","onTextChange","toUpperCase","substr","property","createThrottledEvent","listener","timer","last","now","Date","throttledEventHandler","c","join","canUseDOM","getTarget","selection","querySelectorAll","_unused","console","error","findDOMElements","isRef","isElement","Carousel","focusableElements","updateMaxQuantityForCartLineItem","currentMaxQuantityForCartLineItem","PaginationItem","paginationItemClasses","FormBuilderErrorComponent","errorMessage","FormBuilder","_onSubmit","async","formData","formKey","values","resourceId","resourceValue","onSubmit","isSubmitted","_onInputChange","_event$target$getAttr","changedValueIndex","Promise","reject","currentKey","_currentKey$isRequire","requiredValueMissing","setValue","isRequired","resolve","Dictionary","_formKey$isRequired","confirmationComponent","submitButtonText","requiredValueMissingErrorMessage","every","ArrayExtensions","hasElements","autoComplete","_formKey$isRequired2","_formKey$isRequired3","getValue","required","isAnyRequiredValueMissing","getValues","findIndex","isMissing","formatSpecifier","_len","parameters","_key","match","isNullOrWhiteSpace","activePage","maxPages","ceil","qsps","splitUrl","secondSplit","hash","parsedQsps","qspPair","baseUrl","listClassName","listTag","ListTag","activeQsp","paginationClasses","listpaginationClasses","_generatePageLinks","_generateUrl","page","qspUrl","_generatePaginationArrow","disable","tooltipId","nextId","prevId","ariaDescribedBy","nextAreaDescribed","prevAreaDescribed","_generatePaginationItem","_generateEllipse","leftDistance","rightDistance","leftEllipse","pagesDisplayed","rightEllipse","pages","displayedPagesOnLeft","startingIndex","endIndex","Pagination","popover","_addTargetEvents","_handleDocumentClick","_removeTargetEvents","getRef","_focusOutTarget","_focusOutPopover","_keyDown","Portal","defaultNode","createPortal","mounted","_getFocusableChildren","_handleBackdropClick","_handleBackdropMouseDown","_handleEscape","_handleTab","_onOpened","_onClosed","wasOpen","mouseDownElement","_open","HTMLElement","_close","_prevProps","prevState","shouldUpdateFocusToFirstElement","focusableElementArr","componentWillReceiveProps","wrapClassName","modalClassName","backdropClassName","contentClassName","modalTransition","backdropTransition","backdrop","onOpened","external","verticalPosition","horizontalPosition","keyboard","returnFocusRef","ariaLabelledbyId","dialogAttributes","modalAttributes","modalTransitions","backdropTransitions","Backdrop","dialogBaseClass","dialogClasses","dialog","_document$body$firstE","openCount","scrollY","scrollbarWidth","right","removeProperty","_document$body$firstE2","modalOpenClassName","modalOpenClassNameRegex","RegExp","_getFocusedChild","focusableChildren","which","totalFocusable","currentFocus","focusedIndex","el","shiftKey","closeButton","wrapTag","closeButtonLabel","WrapTag","closeButtonTabIndex"],"mappings":";6dAKO,SAASA,IACZ,MAAMC,EAA0CC,SAASC,KAAKC,uBAAuB,6BAE/EC,EAAoBC,MAAMC,KAAKN,GACrC,IAAK,MAAMO,KAAQH,EACfG,EAAKC,MAAMC,MAAQ,IACnBF,EAAKC,MAAME,OAAS,IAOrB,MAAMC,EAAmB,EAMzB,SAASC,EAAwBC,GACpC,MAAMC,EAAWD,EAAME,cACvBD,EAASN,MAAMQ,WAAa,SAC5BF,EAASG,UAAUC,OAAO,wCAE1B,MAAMC,EAAuBlB,SAASC,KAAKkB,cAA8B,6BACrED,IACAA,EAAqBX,MAAMQ,WAAa,UAsDhD,SAASK,EAAUC,GAEf,MAAO,CACHC,EAAGD,EAAKb,MAFU,EAGlBe,EAAGF,EAAKZ,OAHU,GAc1B,SAASe,EAAgBC,EAA2BC,EAAiBC,GACjE,MAAMC,EAAaR,EAAUM,GAEvBG,EAAsB,CACxBP,EAAGG,EAAeH,EAAIM,EAAWN,EACjCC,EAAGE,EAAeF,EAAIK,EAAWL,GAK/BO,EAAeH,EAAanB,MAAQkB,EAASlB,MACnDqB,EAASP,EAAIS,KAAKC,IAAID,KAAKE,IAAIJ,EAASP,EAFnB,GAEqCQ,GAE1D,MACMI,EAAeP,EAAalB,OAASiB,EAASjB,OAGpD,OAFAoB,EAASN,EAAIQ,KAAKC,IAAID,KAAKE,IAAIJ,EAASN,EAFnB,GAEqCW,GAEnDL,EASX,SAASM,EAAkBvB,EAAyBwB,GAChD,MAAMC,EAAwBD,EAAQE,wBACtC,MAAO,CACHhB,EAAGV,EAAM2B,MAAQF,EAAsBG,KAAOC,OAAOC,YACrDnB,EAAGX,EAAM+B,MAAQN,EAAsBO,IAAMH,OAAOI,aAS5D,SAASC,EAAkBC,GACvB,OAAUA,EAAH,KAkBX,SAASC,EACLC,EACAC,EACAtC,GAEAqC,EAAYE,gBAAgB,SAC5B,MAAMC,EAAeH,EAAYI,cAAeC,uBAAwBnC,cAAc,OAEhFoC,EAAYC,OAAON,GAEnBO,EAA4B,CAC9BjD,MAAO4C,EAAaM,YACpBjD,OAAQ2C,EAAaO,cAGnBC,EAAyB,CAC3BpD,MAAOiD,EAAmBjD,MAAQ+C,EAClC9C,OAAQgD,EAAmBhD,OAAS8C,GAGxCN,EAAY1C,MAAMC,MAAQsC,EAAkBc,EAAgBpD,OAC5DyC,EAAY1C,MAAME,OAASqC,EAAkBc,EAAgBnD,QAC7DwC,EAAY1C,MAAMsD,QAAU,IAE5B,MAAMpC,EAAiBU,EAAkBvB,EAAOwC,GAC1CU,EAAc1C,EAAUqC,GACxBM,EACCtC,EAAeH,EAAIwC,EAAYxC,EADhCyC,EAECtC,EAAeF,EAAIuC,EAAYvC,EAGhCyC,EAAkC,CACpC1C,EAAGG,EAAeH,EAAIiC,EACtBhC,EAAGE,EAAeF,EAAIgC,GAE1BS,EAAqB1C,GAAKyC,EAC1BC,EAAqBzC,GAAKwC,EAE1B,MAAME,EAAsBzC,EAAgBwC,EAAsBP,EAAoBG,GAEtFX,EAAY1C,MAAMiC,KAAOM,GAAmBmB,EAAoB3C,GAChE2B,EAAY1C,MAAMqC,IAAME,GAAmBmB,EAAoB1C,GAQ5D,SAAS2C,EAAoBtD,EAA2C2C,GAAkB,IAAAY,EAC7F,GAAmB,cAAfvD,EAAMwD,MAAuC,eAAfxD,EAAMwD,MAAwC,aAAfxD,EAAMwD,KACnE,OAGJ,MAAMC,EAA2C,QAApCF,EAAGvD,EAAME,cAAcuC,qBAAa,IAAAc,GAAoB,QAApBA,EAAjCA,EAAmCG,0BAAkB,IAAAH,OAAA,EAArDA,EAAuDhD,cAAc,OAChFkD,GAILrB,EAAmBqB,EAASd,UAAa,IAAK3C,GASlD,SAAS2D,EACL3D,EACAwC,EACAoB,GAAkC,IAAAC,EAElC,IAAIC,EAAkB1E,SAASC,KAAKkB,cAA8B,6BAC7DuD,IACDA,EAAkB1E,SAAS2E,cAAc,OACzCD,EAAgBE,aAAa,QAAS,4BACtC5E,SAASC,KAAK4E,YAAYH,IAG9B,MAAMhD,EAAkB,CACpBlB,MAAOgE,EAAKd,YACZjD,OAAQ+D,EAAKb,cAGXJ,EAAYC,OAAsC,QAAhCiB,EAACD,EAAKM,aAAa,qBAAa,IAAAL,IAAI/D,GAEtDe,EAAiBU,EAAkBvB,EAAOwC,GAC1C2B,EAvLV,SAA+B3B,GAC3B,MAAM4B,EAAqB5B,EAAa6B,cAClCC,EAAoB9B,EAAa+B,aACjCC,EAAuBhC,EAAa3C,OAGpC4E,EAFsBjC,EAAa5C,MAEK0E,EACxCI,EAAmBF,EAAuBJ,EAE1CO,EAAaxD,KAAKC,IAAIqD,EAAiBC,GAE7C,MAAO,CACH9E,MAAO0E,EAAoBK,EAC3B9E,OAAQuE,EAAqBO,GA0KNC,CAAsBpC,GAC3CK,EAA4B,CAC9BjD,MAAO4C,EAAaM,YACpBjD,OAAQ2C,EAAaO,cAGnB8B,EAAejE,EAAgBC,EAAgBC,EAAU+B,GAC/De,EAAKjE,MAAMQ,WAAa,QACxByD,EAAKjE,MAAMiC,KAAOM,EAAkB2C,EAAanE,GACjDkD,EAAKjE,MAAMqC,IAAME,EAAkB2C,EAAalE,GAEhD,MAAMmE,EAAkBtC,EAAa0B,aAAa,OAElDJ,EAAgBnE,MAAMQ,WAAa,QACnC2D,EAAgBnE,MAAMoF,gBA/Gf,QA+G0DD,MACjEhB,EAAgBnE,MAAMC,MAAQsC,EAAkBpB,EAASlB,MAAQ+C,GACjEmB,EAAgBnE,MAAME,OAASqC,EAAkBpB,EAASlB,MAAQ+C,GAElE,MAIMqC,EAAexE,EAJK,CACtBZ,MAAOiD,EAAmBjD,MAAQuE,EAAmBvE,MACrDC,OAAQgD,EAAmBhD,OAASsE,EAAmBtE,SAGrDoF,GAAuBD,EAAatE,EAAImE,EAAanE,GAAKiC,EAC1DuC,GAAuBF,EAAarE,EAAIkE,EAAalE,GAAKgC,EAEhEmB,EAAgBnE,MAAMwF,oBAAsBjD,EAAkB+C,GAC9DnB,EAAgBnE,MAAMyF,oBAAsBlD,EAAkBgD,GAE9DpB,EAAgBnE,MAAM0F,eAAiB,GAAGnD,EAAkBiC,EAAmBvE,MAAQ+C,MAAcT,EACjGiC,EAAmBtE,OAAS8C,KAGhC,MAAM2C,EAAc9C,EAAad,wBAAwBM,IACzD8B,EAAgBnE,MAAMqC,IAAME,EAAkBoD,GAG3C,SAASC,EAA0BvF,GACtC,MAAM4D,EAAO5D,EAAME,cAAcuC,cAAeC,uBAChDkB,EAAKxD,UAAUoF,IAAI,wCAInB7B,EAAmC3D,EAFdA,EAAME,cAE6B0D,GAGrD,SAAS6B,EAAyBzF,GACrC,GAAmB,cAAfA,EAAMwD,MAAuC,eAAfxD,EAAMwD,MAAwC,aAAfxD,EAAMwD,KACnE,OAGJ,MAAMhB,EAAexC,EAAME,cAAcwD,mBAAoBnD,cAAc,OAG3EoD,EAAmC3D,EAAOwC,EAF7BxC,EAAME,eAKhB,SAASwF,EAAoB1F,GAChC,IAAKZ,SAASC,KAAKkB,cAAc,6BAA8B,CAC3D,MAAMoF,EAAevG,SAAS2E,cAAc,OAC5C4B,EAAa3B,aAAa,QAAS,4BACnC5E,SAASC,KAAK4E,YAAY0B,GAG9BJ,EAA0BvF,GAGvB,SAAS4F,EAA2B5F,GAAyC,IAAA6F,EAChF,GAAmB,cAAf7F,EAAMwD,MAAuC,eAAfxD,EAAMwD,MAAwC,aAAfxD,EAAMwD,KACnE,OAGJ,MAAMf,EAAgBzC,EAAME,cAAcuC,cAAeA,cAIzDL,EAHgBpC,EAAME,cAEoC,QAA3C2F,EAAGpD,EAAcyB,aAAa,qBAAa,IAAA2B,IAAI,GAAG/F,EAC1BE,GAGpC,SAAS8F,EAA0B9F,GACnB,cAAfA,EAAMwD,MAAuC,eAAfxD,EAAMwD,MAAwC,aAAfxD,EAAMwD,OAIvExD,EAAME,cAAcP,MAAME,OAAS,IACnCG,EAAME,cAAcP,MAAMC,MAAQ,KAgB/B,SAASmG,EAAuB/F,GAA8D,IAAnBgG,EAAAC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAgB,IAC9F,GAAmB,cAAfjG,EAAMwD,MAAuC,eAAfxD,EAAMwD,MAAwC,aAAfxD,EAAMwD,KACnE,OAGJ,MAAM4C,EAAYpG,EAAME,cAAcuC,cAAeiB,mBAAoBnD,cAAc,OACvF6B,EAAmBgE,EAAWJ,EAAOhG,GAMlC,SAASqG,IACZ,MAAMpG,EAAWb,SAASC,KAAKkB,cAA8B,gCACzDN,IACAA,EAASN,MAAMQ,WAAa,SAC5BF,EAASG,UAAUC,OAAO,yCAG9B,MAAMC,EAAuBlB,SAASC,KAAKkB,cAA8B,6BACrED,IACAA,EAAqBX,MAAMQ,WAAa,Y,0IC7OpCmG,E,+EAAZ,SAAYA,GACRA,EAAA,gBACAA,EAAA,YACAA,EAAA,cAHJ,CAAYA,MAAa,KAMV,MAAMC,UAAcC,IAAMC,cAOrCC,YAAYC,GACRC,MAAMD,GAPH,KAAAE,mBAA6B,WAEnB,KAAAC,cAAwB,QAExB,KAAAC,wBAAkC,QA6DlC,KAAAC,kBAAqBhH,IAClC,MAAMiH,EAASjH,EAAMiH,OACfC,EAAaD,EAAO/C,aAAa,kBAAqB+C,EAAO/C,aAAa,kBAA+B,IACzG,WAAEiD,EAAU,eAAEC,GAAmBC,KAAKC,MAC5C,IAAIC,GAAW,EAEXJ,IAAeD,IACfK,GAAYH,GAGhBC,KAAKG,SAAS,CACVL,WAAYD,EACZE,eAAgBG,EAChBE,aAAa,KAWJ,KAAAC,yBAA2B,CACxCC,EACAC,EACAC,IACC,KACGC,mBAAiBC,SAASF,KAC1BF,EAAKE,GAAOG,YAAcL,EAAKE,GAAOG,YAE1CJ,EAAiBD,IAGJ,KAAAM,kBAAqBC,IAClC,MAAM,UACFC,EAAS,eACTC,EAAc,eACdC,EAAc,cACdC,EAAa,KACbX,EAAI,eACJY,EAAc,WACdC,EAAU,iBACVZ,EAAgB,eAChBa,EAAc,mBACdC,EAAkB,wCAClBC,EAAuC,gBACvCC,EAAe,iBACfC,GACAxB,KAAKV,OACH,WAAEQ,EAAU,eAAEC,GAAmBC,KAAKC,MAEtCwB,EAAmB1B,EAAiB,MAAQ,MAE5C2B,EAAe3B,EAAiBwB,EAAkBC,EAElDG,EAAUd,EAAWe,IAAI,CAACC,EAAMC,KAClC,IAAKD,EACD,OAEJ,MACME,EAAmBD,EADD,EAGlBE,EACFlB,EAAU,GAAGd,KAAKP,gBAAgBoC,EAAKI,oBACvCnB,EAAU,GAAGM,IAAkBpB,KAAKN,0BAA0BmC,EAAKI,oBACnEnB,EAAae,EAAKI,KAAR,gBACVJ,EAAKI,KAEHC,EAAkBpC,IAAe+B,EAAKI,WAAyBnD,IAAjB4C,EAA6BA,EAAe,GAE1FS,EAAkBN,EAAKO,UAAY,GAAGC,iBAAOR,EAAKO,UAAWJ,MAAYE,IAAoB,GA4BnG,OA1BiBf,GAAcU,EAAKS,UAChCnD,IAAAzC,cAAA,uBACoBmF,EAAKI,KACrBM,QAASvC,KAAKL,kBACd6C,QAASxC,KAAKyC,oBACdC,UAAWC,IAAc3C,KAAKR,mBAAR,sBACtBoD,IAAK,WAAWb,EAChBc,MAAM,MACNC,KAAK,eACLC,SAAU,GAEV5D,IAAAzC,cAAA,OACIgG,UAAWC,IAAc3C,KAAKR,mBAAR,oBAA+CM,IAAe+B,EAAKI,MAAQR,GAAiB,aACtGI,EAAKO,WAAaD,EAAgBa,OAAM,iBACpC,GAAGnB,EAAKI,KAAM,YACpB,UAETD,KAIT7C,IAAAzC,cAAA,MAAImG,MAAM,MAAMC,KAAK,eAAeC,SAAU,GACzCf,KAOPiB,EAAgBlC,GAAkBR,IAAqBc,GACzDlC,IAAAzC,cAACwG,IAAc,CACXC,SAAUnD,KAAKK,yBAAyBC,EAAMC,GAC9C0B,KAAK,MACLG,UAAWd,IAIb8B,EACFjE,IAAAzC,cAAA,OACIgG,UAAWC,IAAc3C,KAAKR,mBAAR,oBAA6C,aACvDyB,EAAgB,GAAKC,EAAc,YACrC,UAETD,EAAgB,GAAKC,GAI9B,OACI/B,IAAAzC,cAAA,MAAIgG,UAAc1C,KAAKR,mBAAR,iBACVuB,GACGf,KAAKqD,UAAU,CACXC,QAAQ,EACRZ,UAAc1C,KAAKR,mBAAR,wCACX+D,QAASN,EACTnB,WAAY,EACZe,MAAO,QAEdlB,EACAX,GACGhB,KAAKqD,UAAU,CACXC,QAAQ,EACRZ,UAAc1C,KAAKR,mBAAR,kCACX+D,QAASH,EACTtB,UAAW,EACXe,MAAO,UAMV,KAAAW,WAAclD,IAC3B,MAAM,eACFU,EAAc,eACdD,EAAc,gBACd0C,EAAe,QACfC,EAAO,iBACPnD,EAAgB,YAChBoD,EAAW,mBACXtC,EAAkB,wCAClBC,GACAtB,KAAKV,MAoET,OAlEkBgB,EAAKsB,IAAI,CAACgC,EAAUpD,KAClC,IAAIkC,EAAYlC,EAAQ,EAAOR,KAAKR,mBAAR,iBAAgDQ,KAAKR,mBAAR,gBACrEY,GAAc,EAElB,MAAMyD,EAA0BD,EAASE,IAAI,GAAGC,MAAMC,WAChDnD,EAAa+C,EAASE,IAAIlC,IAAIqC,IAChC,GAAIR,GAAmBA,EAAgBS,SAASD,EAAKE,IACjD,OAIJ,MAAMC,EAAaH,EAAK9H,OAAS8C,EAAc1D,QAAU0I,EAAK9H,OAAS8C,EAAcoF,MAAQ,WAAa,GACpGC,EAAcL,EAAK9H,OAAS8C,EAAcoF,OAASV,EAAcA,EAAYM,EAAKF,OAAmBE,EAAKF,MAC1GQ,EAAsBN,EAAKvB,WAAa,GAC9C,OAAO1C,KAAKqD,UAAU,CAClBC,QAAQ,EACRZ,UAAWC,IAAc3C,KAAKR,mBAAR,aAAwC4E,EAAYG,GAC1EhB,QAASe,EACTxC,UAAWtB,EACXqC,MAAO,UAITI,EAAgBlC,GAAkBR,GACpCpB,IAAAzC,cAACwG,IAAc,CACXC,SAAUnD,KAAKK,yBAAyBC,EAAMC,EAAkBC,GAChEyB,KAAK,gBACL8B,MAAO,YAAYvD,EACnBa,mBAAoBA,EACpBe,UAAW,GAAGd,KAA4CuC,MAG5DW,EAAS,OAAOhE,EAElBgE,IAAWxE,KAAKC,MAAMwE,eAAiBzE,KAAKC,MAAMG,cAClDsC,GAAa,YACbtC,GAAc,GAGlB,MAAMsE,EAAgBhB,GAAW1D,KAAK2E,eAAef,EAASE,IAAK1D,EAAaoE,EAAQZ,EAASgB,kBAEjG,OACIzF,IAAAzC,cAAA,MAAIkG,IAAK4B,EAAQ9B,UAAWA,GACvB3B,GACGf,KAAKqD,UAAU,CACXC,QAAQ,EACRZ,UAAc1C,KAAKR,mBAAR,aACX+D,QAASN,EACTnB,UAAWtB,EACXqC,MAAO,MACPgC,QAASjB,IAEhB/C,EACAG,GACGhB,KAAKqD,UAAU,CACXC,QAAQ,EACRZ,UAAc1C,KAAKR,mBAAR,aACX+D,QAASmB,EACT5C,UAAWtB,EACXqC,MAAO,MACPgC,QAASjB,QAShB,KAAAe,eAAiB,CAC9B9C,EACAzB,EACAwC,EACAkC,KAEA,MAAM,aACFC,EAAY,eACZC,EAAc,aACdC,EAAY,gBACZC,EAAe,kBACfC,EAAiB,gBACjBC,EAAe,kBACfC,EAAiB,cACjBpE,EAAa,mBACbqE,EAAkB,eAClBpE,EACAwC,SAAS,OAAE6B,EAAM,SAAEC,EAAQ,OAAEC,IAC7BzF,KAAKV,MACHoG,OACS5G,IAAXyG,EACM,KAAK,IAAAI,EACDJ,EAAO1D,EAAMiD,SAAqB,QAANa,EAAfb,EAAiBc,YAAI,IAAAD,OAAA,EAArBA,EAAuBE,eAExC/G,EACJgH,OACWhH,IAAb0G,EACM,KAAK,IAAAO,EACDP,EAAS3D,EAAMiD,SAAuB,QAARiB,EAAfjB,EAAiBkB,cAAM,IAAAD,OAAA,EAAvBA,EAAyBF,eAE5C/G,EACJmH,OACSnH,IAAX2G,EACM,KACIA,EAAO5D,SAEX/C,EAEJ4F,EACFvF,IAAAzC,cAACwJ,OAAI,CAACxD,UAAc1C,KAAKR,mBAAR,eACZyG,GACG9G,IAAAzC,cAACyJ,SAAM,CAACzD,UAAc1C,KAAKR,mBAAR,mBAA4C,aAAc4F,EAAiB7C,QAAS0D,GAClGhB,GAGRS,GACGvG,IAAAzC,cAACyJ,SAAM,CACHC,SAAUtB,aAAe,EAAfA,EAAiBc,KAC3BlD,UAAc1C,KAAKR,mBAAR,mBAA4C,aAC3C0F,EACZ3C,QAASmD,GAERX,GAGRe,GACG3G,IAAAzC,cAACyJ,SAAM,CACHC,SAAUtB,aAAe,EAAfA,EAAiBkB,OAC3BtD,UAAc1C,KAAKR,mBAAR,qBAA8C,aAC7C2F,EACZ5C,QAASuD,GAERd,IAMjB,OAAI/D,EAEI9B,IAAAzC,cAACwJ,OAAI,CAACxD,UAAc1C,KAAKR,mBAAR,wBACbL,IAAAzC,cAACyJ,SAAM,CACHzD,UAAc1C,KAAKR,mBAAR,qBAA8C,aAC7C0B,EAAc,YACf0B,EACXyD,MAAOhB,EACP9C,QAASvC,KAAKsG,eAAc,gBACbtG,KAAKC,MAAMG,aAEzBkF,GAA0C,IAE9ClF,GAAesE,GAIrBA,GAGM,KAAA4B,eAAkB3N,IAC/B,MAAMiH,EAASjH,GAAUA,EAAMiH,OACzB2G,EAAS3G,GAAUA,EAAO/C,aAAa,aAAgB+C,EAAO/C,aAAa,aAA0B,GAC3GmD,KAAKG,SAAS,CACVC,aAAcJ,KAAKC,MAAMG,YACzBqE,cAAe8B,KAIN,KAAAC,cAAgB,CAACC,EAAyBC,EAAoB3G,IACpE0G,EAAME,KAAK,CAACC,EAAyBC,KACxC,MAAMC,EAAcF,EAAQ9C,IAAIiD,KAAK9C,GAC1BA,EAAKE,KAAOuC,GAEjBM,EAAcH,EAAQ/C,IAAIiD,KAAK9C,GAC1BA,EAAKE,KAAOuC,GAGvB,IAAKI,IAAgBE,EACjB,OAAQ,EAGZ,GAAiC,iBAAtBF,EAAY/C,OAAmD,iBAAtBiD,EAAYjD,MAC5D,OAAOhE,EAAiB+G,EAAY/C,MAAQiD,EAAYjD,MAAQiD,EAAYjD,MAAQ+C,EAAY/C,MAGpG,MAAMkD,EACDH,EAAY/C,OACb+C,EAAY/C,MACPC,WACAkD,cACAlE,OACHmE,EACDL,EAAY/C,OACbiD,EAAYjD,MACPC,WACAkD,cACAlE,OAET,OAAKiE,GAAeE,EAGhBpH,EACOkH,EAAaE,GAAe,EAAI,EAEpCF,EAAaE,GAAe,EAAI,GAL3B,IASH,KAAAC,oBAAsB,CAACC,EAA6BC,EAAeC,KAChF,GAAID,GAASC,EACT,OAAOF,EAGX,MAAMG,EAAS,GACf,IAAK,IAAIC,EAAIH,EAAOG,EAAIF,EAAKE,IACzBJ,EAAUI,IAAMD,EAAOE,KAAKL,EAAUI,IAG1C,OAAOD,GAGM,KAAAnE,UAAa/D,IAC1B,MAAM,UAAEoD,EAAS,OAAEY,EAAM,UAAExB,EAAS,MAAEe,EAAK,QAAE8E,EAAO,QAAEpE,GAAYjE,EAGlE,OAAOgE,EACHnE,IAAAzC,cAAA,MACIgG,UAAWA,EACXE,IAAK,WAAWd,EAChBe,MAAOA,EACP8E,QAASA,EACT5E,SAAUjB,EAPM,KADA,GAUfyB,GAGLpE,IAAAzC,cAAA,MAAIgG,UAAWA,EAAWG,MAAOA,EAAO8E,QAASA,GAC5CpE,IAUI,KAAAqE,YAAeC,GAExB1I,IAAAzC,cAAA,OAAKgG,UAAU,wBACXvD,IAAAzC,cAAA,QAAMgG,UAAU,yCAAwC,cAAa,SACrEvD,IAAAzC,cAAA,QAAMgG,UAAU,aAAamF,IAUxB,KAAAC,YAAeC,GAExB5I,IAAAzC,cAAA,OAAKgG,UAAU,wBACXvD,IAAAzC,cAAA,QAAMgG,UAAU,aAAaqF,GAC7B5I,IAAAzC,cAAA,QAAMgG,UAAU,0CAAyC,cAAa,UASjE,KAAAD,oBAAuB9J,IAChCA,EAAMqP,UAAYC,WAASC,OAASvP,EAAMqP,UAAYC,WAASE,OAC/DnI,KAAKL,kBAAkBhH,IAve3BqH,KAAKC,MAAQ,CACTF,gBAAgB,EAChBD,WAAaR,EAAM8I,SAAS,IAAM9I,EAAM8I,SAAS,GAAGnG,MAAS,GAC7D7B,iBAAqCtB,IAAxBQ,EAAM2B,gBAA+B3B,EAAM2B,cACxDwD,cAAe,IAIhB4D,SACH,MAAM,UAAE3F,EAAS,SAAE0F,EAAQ,KAAE9H,EAAI,WAAEa,EAAU,eAAEmH,EAAc,mBAAEC,EAAkB,eAAEC,EAAc,cAAEC,GAAkBzI,KAAKV,OACpH,WAAEQ,EAAU,eAAEC,GAAmBC,KAAKC,MAEtCyI,EAAY/F,IAAW3C,KAAKR,mBAAoBkD,GACtD,IAAI2E,EAAYlG,GAAcrB,EAAaE,KAAKwG,cAAclG,EAAMR,EAAYC,GAAkBO,EAC9FqI,EAAkB,KAEtB,GAAIL,EAAgB,CAChB,MAAM,UAAEM,EAAS,YAAEC,EAAW,SAAEC,EAAQ,SAAEC,EAAQ,eAAEC,EAAc,IAAEC,GAAQV,EAE5EI,EACIxJ,IAAAzC,cAACwM,yBAAsB,CACnBxG,UAAU,oCACVI,KAAK,aAAY,aACLkG,EACZC,IAAKA,EACLE,IAAI,OACJC,MAAO/B,EAAUxI,OACjBwK,aAAcR,EACdS,aAAcV,EACdW,aAAcvJ,KAAK4H,YAAYmB,GAC/BD,SAAU9I,KAAK8H,YAAYgB,GAC3BU,kBAAmBT,EACnBU,cAAeX,IAIvBzB,EAAYrH,KAAKoH,oBAAoBC,EAAWuB,EAAWA,EAAYC,GAG3E,MAAMa,EAAY1J,KAAKwD,WAAW6D,GAC5BsC,EAAY3J,KAAKY,kBAAkBwH,GAEzC,OACIjJ,IAAAzC,cAAA,OAAKgG,UAAc1C,KAAKR,mBAAR,eACZL,IAAAzC,cAAA,SAAOgG,UAAWgG,EAAS,aAAcF,EAAgBzF,SAAU0F,GAC/DtJ,IAAAzC,cAAA,aAAQiN,GACRxK,IAAAzC,cAAA,aAAQgN,IAEXf,M,oCClMjB,qCAiBO,MAAMiB,EAAsCtK,IAC/C,MAAM,GAAE6E,EAAE,UAAEzB,EAAS,IAAE1I,EAAG,IAAED,EAAG,MAAEgK,EAAK,UAAE3B,GAAc9C,EAChDuK,EAAU/P,KAAKE,IAAI,EAAGF,KAAKC,IAAa,IAARgK,EAAe/J,EAAK,MACpD1B,EAAQ,CAAEC,MAAUsR,EAAH,KAEvB,OACI1K,gBAAA,OAAKuD,UAAWgG,IAAU,eAAgBhG,GAAU,YAAamH,EAAU,KACvE1K,gBAAA,OACIuD,UAAU,oBACVpK,MAAOA,EACP6L,GAAIA,EACJrB,KAAK,cAAa,gBACH9I,EAAG,gBACH+J,EAAK,gBACLhK,EAAG,aACNqI,EAAS,YACVyH,EAAU,QAOrCD,EAASE,aAAe,CACpB,gBAAiB,IACjB,gBAAiB,GAGNF,O,mKC3BA,MAAMG,UAA4B5K,gBAG7CE,YAAYC,GACRC,MAAMD,GACNU,KAAKC,MAAQ,CAAE+J,QAAQ,GACvBhK,KAAKiK,QAAUjK,KAAKiK,QAAQC,KAAKlK,MACjCA,KAAKmK,yBAA0B,EAG5B9B,SACH,MAAM+B,GACDC,mBAAiBC,mBAAmBtK,KAAKV,MAAMiL,cAAgB/P,OAAOgQ,SAASxG,WAAWE,SAASlE,KAAKV,MAAMiL,aAanH,OAXIvK,KAAKV,MAAMmL,qBAAuBL,IAC7BpK,KAAKmK,wBAIEnK,KAAKC,MAAM+J,SAEnBhK,KAAKmK,yBAA0B,IAJ/BnK,KAAKG,SAAS,CAAE6J,QAAQ,IACxBhK,KAAKmK,yBAA0B,IAQnChL,gBAACuL,IAAOC,OAAAC,OAAA,CACJZ,OAAQhK,KAAKV,MAAM2K,QAAUjK,KAAKV,MAAMuL,mBAAoB,EAAQ7K,KAAKC,MAAM+J,OAC/Ec,OAAQA,KACJ9K,KAAKV,MAAM2K,QAAUjK,KAAKV,MAAM2K,UAAYjK,KAAKiK,YAEjDjK,KAAKV,QAKb2K,UACJjK,KAAKG,SAAS4K,IAAa,CAAOf,QAASe,EAAcf,a,mOCzClD,MAAMgB,UAAoB7L,gBAAzCE,c,oBASW,KAAA4L,gBAAmD9L,cAEnDkJ,SACH,MACM6C,EAAmBlL,KAAKV,MAAM6L,gBAC9B,kBAA2BnL,KAAKV,MAAM6L,gBAFf,iBAK7B,OACIhM,2BAAA,KACIA,gBAAA,OACI2D,KAAK,QACLqB,GAAInE,KAAKV,MAAM6E,GACfiH,IAAKpL,KAAKiL,gBACVI,YAAarL,KAAKV,MAAMgM,YACxBC,UAAWvL,KAAKV,MAAMkM,UACtBC,YAAazL,KAAKV,MAAMoM,WACxBC,WAAY3L,KAAKV,MAAMkM,UACvBI,UAAW5L,KAAKV,MAAMuM,cACtBC,QAAS9L,KAAKV,MAAMyM,YACpBC,OAAQhM,KAAKV,MAAM2M,WACnB3T,MAAO0H,KAAKV,MAAMhH,MAClBoK,UAAWwI,EAAgB,aACflL,KAAKV,MAAM8C,YAE1BpC,KAAKV,MAAM4M,aACR/M,gBAAC4K,sBAAmB,CAChBoC,UAAWnM,KAAKV,MAAM8M,QAASD,UAC/BvM,OAAQI,KAAKiL,gBACbJ,iBAAkB7K,KAAKV,MAAMuL,iBAC7BZ,QAASjK,KAAKV,MAAM2K,SAEnBjK,KAAKV,MAAM+M,kBACNrM,KAAKV,MAAM+M,kBAAkBrM,KAAKV,MAAMgN,aACxCtM,KAAKV,MAAMgN,YAAatI,c,ykBA1CpCgH,EAAAlB,aAA2C,CACrDoC,aAAa,EACbrB,kBAAkB,EAClBuB,QAAS,CACLD,UAAW,QCKvB,MAAMI,EAAe,CACjBC,WAAY,CACRC,UAAW,QACXC,UAAW,OACXC,WAAY,KAEhBC,SAAU,CACNH,UAAW,SACXC,UAAW,MACXC,WAAY,MAUpB,IAAKE,GAAL,SAAKA,GACDA,IAAA,iBACAA,IAAA,aACAA,IAAA,mBAHJ,CAAKA,MAAS,KAaC,MAAMC,UAAe3N,YAoChCE,YAAYC,GACRC,MAAMD,GAtBO,KAAA8L,IAAuCjM,cAEvC,KAAA4N,UAA0C5N,cAE1C,KAAA6N,UAA0C7N,cA6DpD,KAAA2L,OAAS,KACZ9K,KAAKG,SAAU8M,IACJ,CAAEpC,kBAAmBoC,EAAWpC,qBAmF9B,KAAAqC,cAAiBC,GAE1BhO,gBAAA,OAAKuD,UAAU,sBACVyK,EAAOvL,IAAKwL,GAELjO,gBAAA,OAAKyD,IAAKwK,EAAMC,QAASvK,KAAK,eAAeJ,UAAW,uBAAuB0K,EAAME,kBAChFF,EAAMG,eAQd,KAAAC,oBAAuBC,IAEpC,MAUMC,EAAgBC,mBAAS,CAAEC,QAASC,cAAYC,QAASC,QAV/C,CACZC,aAAc,CACVC,GAAI,CAAEC,EAAG,KACTC,GAAI,CAAED,EAAG,KACTE,GAAI,CAAEF,EAAG,MACTG,GAAI,CAAEH,EAAG,MACTI,GAAI,CAAEJ,EAAG,UAKXK,EAAiC,OAAlBb,GAA4C,OAAlBA,EAEzCc,EAAqBnM,iBAAO,UAAWrC,KAAKV,MAAMmP,aAAa,GAAGrM,UAAWpC,KAAKC,MAAMwO,aAAa,GAAG1K,OAExG2K,EAAqB1O,KAAK2O,cAC1BtM,iBAAO,UAAWrC,KAAKV,MAAMmP,aAAa,GAAGrM,UAAWpC,KAAKC,MAAMwO,aAAa,GAAG1K,OACnF,GACN,OACI5E,2BAAA,KACIA,gBAAA,SACIhD,KAAK,QACLgI,GAAOnE,KAAKV,MAAMmP,aAAa,GAAGtK,GAA9B,QACJzB,UAAU,+BACV3I,IAAKiG,KAAKV,MAAMvF,IAChBC,IAAKgG,KAAK2O,cAAgB3O,KAAKC,MAAMwO,aAAa,GAAG1K,MAAQ/D,KAAKV,MAAMsP,KAAO5O,KAAKV,MAAMtF,IAC1F+J,MAAO/D,KAAKC,MAAMwO,aAAa,GAAG1K,MAClCjB,KAAK,SAAQ,YACH,SAAQ,gBACH9C,KAAKV,MAAMvF,IAAG,gBACdiG,KAAK2O,cAAgB3O,KAAKC,MAAMwO,aAAa,GAAG1K,MAAQ/D,KAAKV,MAAMsP,KAAO5O,KAAKV,MAAMtF,IAAG,aAC3FuU,EAAeC,EAAqBxO,KAAKV,MAAMmP,aAAa,GAAGrM,UAAS,mBAClEpC,KAAKV,MAAMuP,YAC7B1L,SAAUnD,KAAK8O,gBACf9C,OAAQA,KACJhM,KAAKG,SAAS,CACV0K,kBAAkB,IAEtB7K,KAAKV,MAAM0M,QAAUhM,KAAKV,MAAM0M,UAEpCJ,UAAWA,KACP5L,KAAKG,SAAS,CACV0K,kBAAkB,KAG1BiB,QAASA,KACL9L,KAAKG,SAAS,CACV0K,kBAAkB,KAG1B9H,SAAU,EACVzK,MAAOmV,EAAY,GAAE,gBACNc,OAAezP,EAAYkB,KAAKC,MAAMwO,aAAa,GAAG1K,QAEzE5E,gBAAC6L,EAAW,CACR7G,GAAInE,KAAKV,MAAMmP,aAAa,GAAGtK,GAC/BiH,IAAKpL,KAAK+M,UACVzB,YAAatL,KAAK+O,aAClBrD,WAAY1L,KAAKgP,YACjBxD,UAAWxL,KAAKiP,WAChBlD,YAAa/L,KAAKV,MAAMwM,QACxBG,WAAYjM,KAAKV,MAAM0M,OACvBK,kBAAmBrM,KAAKV,MAAM+M,kBAC9BH,YAAalM,KAAKV,MAAM4M,YACxB5T,MAAOmV,EAAY,GACnBxD,QAASjK,KAAK8K,OACdD,iBAAkB7K,KAAKC,MAAM4K,iBAC7BM,gBAAiBnL,KAAKV,MAAM6L,gBAC5BmB,YAAatM,KAAKC,MAAMwO,aAAa,GAAG1K,MACxC3B,UAAWmM,EAAeC,EAAqBxO,KAAKV,MAAMmP,aAAa,GAAGrM,YAC3E,IACFpC,KAAK2O,eACFxP,2BAAA,KACIA,gBAAA,SACIhD,KAAK,QACLgI,GAAOnE,KAAKV,MAAMmP,aAAa,GAAGtK,GAA9B,QACJzB,UAAU,+BACV3I,IAAKiG,KAAKC,MAAMwO,aAAa,GAAG1K,MAAQ/D,KAAKV,MAAMsP,KACnD5U,IAAKgG,KAAKV,MAAMtF,IAChB+J,MAAO/D,KAAKC,MAAMwO,aAAa,GAAG1K,MAClCjB,KAAK,SAAQ,YACH,SAAQ,gBACH9C,KAAKC,MAAMwO,aAAa,GAAG1K,MAAQ/D,KAAKV,MAAMsP,KAAI,gBAClD5O,KAAKV,MAAMtF,IAAG,aACjBuU,EAAeG,EAAqB1O,KAAKV,MAAMmP,aAAa,GAAGrM,UAAS,mBAClEpC,KAAKV,MAAMuP,YAC7B1L,SAAUnD,KAAK8O,gBACf9C,OAAQhM,KAAKV,MAAM0M,OACnBF,QAAS9L,KAAKV,MAAMwM,QACpB/I,SAAU,EACVzK,MAAOmV,EAAY,GAAE,gBACNc,OAAezP,EAAYkB,KAAKC,MAAMwO,aAAa,GAAG1K,QAEzE5E,gBAAC6L,EAAW,CACR7G,GAAInE,KAAKV,MAAMmP,aAAa,GAAGtK,GAC/BiH,IAAKpL,KAAKgN,UACVV,YAAatM,KAAKC,MAAMwO,aAAa,GAAG1K,MACxCuH,YAAatL,KAAK+O,aAClBrD,WAAY1L,KAAKgP,YACjBxD,UAAWxL,KAAKiP,WAChBlD,YAAa/L,KAAKV,MAAMwM,QACxBG,WAAYjM,KAAKV,MAAM0M,OACvBK,kBAAmBrM,KAAKV,MAAM+M,kBAC9BH,YAAalM,KAAKV,MAAM4M,YACxB5T,MAAOmV,EAAY,GACnBtC,gBAAiBnL,KAAKV,MAAM6L,gBAC5B+D,cAAelP,KAAKV,MAAMmP,aAAa,GAAGS,cAC1C9M,UAAWmM,EAAeG,EAAqB1O,KAAKV,MAAMmP,aAAa,GAAGrM,eAQjF,KAAA+M,cAAgB,KAC7B,MAAM,YAAEN,GAAgB7O,KAAKV,MACvB8P,EAAeC,YAAqB9C,EAAasC,GAAapC,WAG9D6C,EAAYtP,KAAKoL,IAAIvF,QAAS,SAASuJ,GACvCG,EAAYvP,KAAK+M,UAAUlH,QAASoF,gBAAgBpF,QAAS,SAASuJ,GAE1D,IAAdG,GACAvP,KAAKG,SAAS,CACVqP,MAAOF,EAAYC,EACnBE,KAA4C,UAAtClD,EAAaC,WAAWE,WAAyB6C,EAAY,EAAIA,EAAY,KAK9E,KAAAR,aAAgBW,IAC7BA,EAAEC,kBACF,MAAMC,EAAYF,EAAEvT,KACpBpE,SAAS8X,iBAAiB,YAAc7P,KAAKgP,aAC7CjX,SAAS8X,iBAAiB,UAAY7P,KAAKiP,YAC3C,MAAMa,EAAaJ,EAAE9P,OACfmQ,EAAUD,GAAcA,EAAW3L,GACzCnE,KAAKG,SACA8M,IACU,CAAE+C,QAAQ,EAAM7L,GAAI4L,IAE/B,KACI/P,KAAKiQ,yBAAyBH,EAAYjD,EAAUqD,MAAON,MA+EtD,KAAAO,UAAaT,IAC1B,MAAM,KAAED,GAASzP,KAAKC,OAChB,YAAE4O,GAAgB7O,KAAKV,MACvB8Q,EAAaV,EACbW,EAAOrQ,KAAKoL,IACZkF,EAAkBjB,YAAqB9C,EAAasC,GAAalC,YACjE4D,EAAiBhE,EAAasC,GAAanC,UAG3C8D,EAAwB,SAASF,EACjC3D,EAAcyD,EAAUK,QAAqCL,EAAUK,QAAQ,GAAGD,GAAhDd,EAAEc,GACpC9D,EAAY2D,EAAKxK,QAASxL,wBAAwBkW,GAClDG,EAA4C,UAAtCnE,EAAaC,WAAWE,UAAwBA,EAAYC,EAAa8C,EAAO9C,EAAaD,EAAY+C,EACrH,OAAOzP,KAAK2Q,sBAAsBD,IAGrB,KAAAE,sBAAyB7M,IACtC,MAAM,MAAEyL,GAAUxP,KAAKC,OACjB,IAAElG,EAAG,IAAEC,GAAQgG,KAAKV,MAGpBuR,GADa9M,EAAQhK,IADRC,EAAMD,GAGzB,OAAOD,KAAKgX,MAAMD,EAAarB,IAQlB,KAAAmB,sBAAyBD,IACtC,MAAM,MAAElB,GAAUxP,KAAKC,OACjB,YAAE4O,EAAW,IAAE9U,EAAG,IAAEC,EAAG,KAAE4U,GAAS5O,KAAKV,MAEvCuR,EAAaE,YAAML,EAAK,EAAGlB,IAAUA,GAAS,GAC9CwB,EAAUpC,EAAO9U,KAAKgX,MAAOD,GAAc7W,EAAMD,GAAQ6U,GACzD7K,EAAwB,eAAhB8K,EAA+BmC,EAAUjX,EAAMC,EAAMgX,EAEnE,OAAOD,YAAMhN,EAAOhK,EAAKC,IAQZ,KAAAiX,aAAgBP,IAC7B,MAAM,MAAElB,EAAK,KAAEC,GAASzP,KAAKC,OACvB,YAAE4O,GAAgB7O,KAAKV,MACvByE,EAAQ/D,KAAK2Q,sBAAsBD,GACnC9W,EAAWoG,KAAK4Q,sBAAsB7M,GACtCwL,EAA4B,eAAhBV,EAA+BjV,EAAW6V,EAAO7V,EAGnE,MAAO,CACHsX,KAH4B,eAAhBrC,EAA+BU,EAAYC,EAAQD,EAI/D4B,OAAQ5B,EACRnC,MAAOmC,IAaE,KAAA6B,gBAAkB,CAACC,EAAkCvB,EAAyBF,KACvF5P,KAAK2O,eACD3O,KAAKV,MAAMmP,aAAa,GAAG1K,MAAQ/D,KAAKV,MAAMmP,aAAa,GAAG1K,QAC9D/D,KAAKV,MAAMmP,aAAa,GAAG1K,MAAQ/D,KAAKV,MAAMmP,aAAa,GAAG1K,OAElE/D,KAAKG,SACA8M,IACU,CACHwB,aAAY6C,EAAA,GAAOtR,KAAKV,MAAMmP,gBAGtC,KACIzO,KAAKiQ,yBAAyBH,EAAYjD,EAAU0E,OAAQ3B,MAIpE5P,KAAKG,SACA8M,IACU,CACHwB,aAAc4C,IAGtB,KACIrR,KAAKiQ,yBAAyBH,EAAYjD,EAAU0E,OAAQ3B,MAgB3D,KAAA4B,qBAAuB,CACpCC,EACAC,EACA9B,KAEA8B,EAAS,CACLvN,GAAKsN,GAASA,EAAMtN,IAAO,GAC3BwN,OAAQ3R,KACR4R,gBAAiB5R,KAAKC,MAAMwO,aAAa,GAAG1K,MAC5C8N,iBAAmB7R,KAAKC,MAAMwO,aAAa,IAAMzO,KAAKC,MAAMwO,aAAa,GAAG1K,OAAUxI,OAAOuW,IAC7FlC,eAIS,KAAAK,yBAA2B,CAAC9V,EAAsByV,EAAsBmC,KACrF,IAAIC,EAAa,GACb7X,GAAWA,EAAQgK,IAAMyL,IAAc/C,EAAU0E,SACjDS,EAAa7X,EAAQgK,GAAG8N,QAAQ,QAAS,KAE7C,MAAMR,EAAQtX,GAAW6F,KAAKkS,mBAAmBF,GAE7CpC,IAAc/C,EAAUsF,KACpBnS,KAAKV,MAAM8S,aACXpS,KAAKwR,qBAAqBC,GAASA,EAAM,GAAIzR,KAAKV,MAAM8S,YAAaL,GAGzEnC,IAAc/C,EAAUqD,OACpBlQ,KAAKV,MAAM+S,eACXrS,KAAKwR,qBAAqBC,GAASA,EAAM,GAAIzR,KAAKV,MAAM+S,cAAeN,GAG3EnC,IAAc/C,EAAU0E,QACpBvR,KAAKV,MAAM6D,UACXnD,KAAKwR,qBAAqBC,GAASA,EAAM,GAAIzR,KAAKV,MAAM6D,SAAU4O,IA3f1E/R,KAAK2O,cAAmD,IAAnC3O,KAAKV,MAAMmP,aAAa5P,OAC7CmB,KAAKC,MAAQ,CACTwO,aAAczO,KAAKV,MAAMmP,aACzBgB,KAAM,EACND,MAAO,EACPQ,QAAQ,EACR7L,GAAI,GACJ0G,kBAAkB,GAEtB7K,KAAKmP,cAAgBnP,KAAKmP,cAAcjF,KAAKlK,MAC7CA,KAAKgP,YAAchP,KAAKgP,YAAY9E,KAAKlK,MACzCA,KAAKiP,WAAajP,KAAKiP,WAAW/E,KAAKlK,MACvCA,KAAK+O,aAAe/O,KAAK+O,aAAa7E,KAAKlK,MAC3CA,KAAK8K,OAAS9K,KAAK8K,OAAOZ,KAAKlK,MAC/BA,KAAK8O,gBAAkB9O,KAAK8O,gBAAgB5E,KAAKlK,MACjDA,KAAKoR,gBAAkBpR,KAAKoR,gBAAgBlH,KAAKlK,MACjDA,KAAKkS,mBAAqBlS,KAAKkS,mBAAmBhI,KAAKlK,MACvDA,KAAKwR,qBAAuBxR,KAAKwR,qBAAqBtH,KAAKlK,MAC3DA,KAAKiQ,yBAA2BjQ,KAAKiQ,yBAAyB/F,KAAKlK,MACnEA,KAAKsS,qBAAuBtS,KAAKsS,qBAAqBpI,KAAKlK,MAC3DA,KAAKuS,eAAiBvS,KAAKuS,eAAerI,KAAKlK,MAE3CwS,IAASC,WACT1a,SAASC,KAAKoD,eACsC,QAApDrD,SAASC,KAAKoD,cAAcyB,aAAa,cACDiC,IAAvCkB,KAAKV,MAAMoT,yBAAyC1S,KAAKV,MAAMoT,2BAEhEnG,EAAaC,WAAWE,UAAY,SA5CrC,gCAAgCpN,EAAqBW,GACxD,GACKX,EAAMmP,aAAa5P,OAAS,GAAKS,EAAMmP,aAAa,GAAG1K,QAAU9D,EAAMwO,aAAa,GAAG1K,OACvFzE,EAAMmP,aAAa5P,OAAS,GAAKS,EAAMmP,aAAa,GAAG1K,QAAU9D,EAAMwO,aAAa,GAAG1K,MAC1F,CACE,MAAM4O,EAASrB,EAAA,GAAQrR,GAKvB,OAJA0S,EAAUlE,aAAa,GAAG1K,MAAQzE,EAAMmP,aAAa,GAAG1K,MACpDzE,EAAMmP,aAAa5P,OAAS,IAC5B8T,EAAUlE,aAAa,GAAG1K,MAAQzE,EAAMmP,aAAa,GAAG1K,OAErD4O,EAEX,OAAO,KAoCJC,oBACH5S,KAAKmP,gBACLqD,IAASC,WAAajY,OAAOqV,iBAAiB,SAAU7P,KAAKmP,eAG1D0D,qBACC7S,KAAKoL,IAAIvF,SAAW7F,KAAKoL,IAAIvF,QAAQpK,YAlFpB,OAkF0DuE,KAAKC,MAAMuP,OACtFxP,KAAKmP,gBAUN2D,sBAAsBC,EAAyBC,GAClD,IAAIC,GAAe,EACnB,GAAIjT,KAAK2O,cAAe,CACpB,MAAMuE,EAAiBlT,KAAK4Q,sBAAsBmC,EAAUtE,aAAa,GAAG1K,OACtEoP,EAAiBnT,KAAK4Q,sBAAsBmC,EAAUtE,aAAa,GAAG1K,OAO5EkP,IAAeE,EAAiB,IAAIA,GAAkBD,EAAiBH,EAAUnE,KAErF,OAAOqE,EAGJG,uBACH5Y,OAAO6Y,oBAAoB,SAAUrT,KAAKmP,eAGvC9G,SACH,MAAM,YAAEwG,GAAgB7O,KAAKV,MACvBgU,EAActT,KAAKV,MAAMoD,UACzB,GAAGoK,EAAOyG,0BAA0B1E,KAAe7O,KAAKV,MAAMoD,YAC9D,GAAGoK,EAAOyG,0BAA0B1E,IAEpC2E,EAAWxT,KAAKV,MAAM6E,GACtBsI,EAAYF,EAAasC,GAAapC,UACtCC,EAAYH,EAAasC,GAAanC,UACtC+G,EAAsBpE,YAAqB3C,GAC3CgH,EAAiB1T,KAAK4Q,sBAAsB5Q,KAAKV,MAAMmP,aAAa,GAAG1K,OACvE4P,EAAe3T,KAAKiR,aAAayC,GACvC,IAAIE,EAAY,CAAE,CAACnH,GAAekH,EAAazC,KAAhB,MAC/B,MAAM2C,EAAqC,GAC3CA,EAAYnM,KAAK,CAAE,CAACgF,GAAeiH,EAAaxC,OAAhB,OAChC,MAAM2C,EAAqBnR,IAAW,eAAgB3C,KAAKV,MAAMwU,mBAAqB9T,KAAKV,MAAMwU,mBAAqB,IAChHC,EAAY/T,KAAKV,MAAMyU,UAAY,IAAIC,OAAOhU,KAAKV,MAAMyU,WAAe,GAE9E,GAAI/T,KAAK2O,cAAe,CACpB,MAAMsF,EAAiBjU,KAAK4Q,sBAAsB5Q,KAAKV,MAAMmP,aAAa,GAAG1K,OACvEmQ,EAAelU,KAAKiR,aAAagD,GACvCJ,EAAYnM,KAAK,CAAE,CAACgF,GAAewH,EAAa/C,OAAhB,OAE5ByC,EADgB,aAAhB/E,EACY,CACRsF,aAAiBR,EAAazC,KAAhB,KACd,CAACzE,GAAeyH,EAAahD,KAAOyC,EAAazC,KAApC,MAGL,CACR,CAAC,SAASuC,IACgC,UAAtClH,EAAaC,WAAWE,UAAwBiH,EAAazC,KAAOlR,KAAKC,MAAMwP,KAAOkE,EAAazC,MADrE,KAGlC,CAACzE,GAAeyH,EAAa/C,OAASwC,EAAaxC,OAAtC,MAKzB,OACIhS,gBAAA,OAAKuD,UAAW4Q,EAAalI,IAAKpL,KAAKoL,KACnCjM,gBAAA,OAAKuD,UAAU,oBAAoBH,QAASvC,KAAKuS,eAAgBzP,KAAK,QACjE9C,KAAKV,MAAM8U,iBACRjV,gBAACyK,WAAQe,OAAAC,OAAA,CACLzG,GAAI,YAAYqP,EAChBpR,UAAWpC,KAAKV,MAAM8C,UACtBM,UAAWoR,EACX/Z,IAAKiG,KAAKV,MAAMvF,IAChBC,IAAKgG,KAAKV,MAAMtF,IAChB+J,MAAO/D,KAAKV,MAAM+U,eAAiBrU,KAAKV,MAAM+U,eAAiB,GAC1DrU,KAAKV,MAAM+U,eAAiB,CAAE,iBAAkBrU,KAAKV,MAAM+U,gBAAmB,KAG3FlV,gBAAA,OAAKuD,UAAU,gBAAgByB,GAAI,GAAGqP,IAAWO,IAAazb,MAAOsb,IACpE5T,KAAKwN,oBAAoBqG,IAE7B7T,KAAKV,MAAMgV,WAAatU,KAAKkN,cAAclN,KAAKV,MAAM6N,QAAW,MAyKtE8B,WAAWS,GACfA,EAAEC,kBACF,MAAMC,EAAYF,EAAEvT,KACd2T,EAAaJ,EAAE9P,OACrBI,KAAKG,SACA8M,IACU,CAAE+C,QAAQ,EAAO7L,GAAI,KAEhC,KACInE,KAAKiQ,yBAAyBH,EAAYjD,EAAUsF,IAAKvC,KAGjE7X,SAASsb,oBAAoB,YAAcrT,KAAKgP,aAChDjX,SAASsb,oBAAoB,UAAYrT,KAAKiP,YAG1CD,YAAYU,GAChBA,EAAEC,kBACF,MAAM5L,EAAQ/D,KAAKmQ,UAAUT,GACvBE,EAAYF,EAAEvT,KACdoY,EAAY7E,EAAE9P,OACd4U,EAAUxU,KAAKC,MAAMkE,IAAOoQ,GAAaA,EAAUpQ,GACnDsQ,EAAezU,KAAKkS,mBAAmBsC,GAEzCC,IAAiBzU,KAAKsS,qBAAqBmC,EAAa,GAAI/E,KAC5D+E,EAAa,GAAG1Q,MAAQA,EACxB/D,KAAKoR,gBAAgBqD,EAAcF,EAAW3E,IAI9C2C,eAAe7C,GACnBA,EAAEC,kBACF,MAAM/V,EAAWoG,KAAKmQ,UAAUT,GAC1B6E,EAAY7E,EAAE9P,OACdgQ,EAAYF,EAAEvT,KACduY,EAAS1U,KAAKkS,mBAAmBlS,KAAKV,MAAMmP,aAAa,GAAGtK,IAElE,GAAInE,KAAK2O,cAAe,CACpB,MAAMgG,EAAS3U,KAAKkS,mBAAmBlS,KAAKV,MAAMmP,aAAa,GAAGtK,IAElE,GAAIuQ,GAAUC,EAAQ,CAGO/a,EAFD8a,EAAO,GAAG3Q,MACV4Q,EAAO,GAAG5Q,MAESnK,EAGvC8a,EAAO,GAAG3Q,MAAQnK,EAElB+a,EAAO,GAAG5Q,MAAQnK,EAGtBoG,KAAKG,SACA8M,IACU,CAAEwB,aAAc,CAACiG,EAAO,GAAIC,EAAO,MAE9C,KACI3U,KAAKiQ,yBAAyBsE,EAAW1H,EAAU0E,OAAQ3B,WAIhE8E,IACPA,EAAO,GAAG3Q,MAAQnK,EAClBoG,KAAKG,SACA8M,IACU,CAAEwB,aAAciG,IAE3B,KACI1U,KAAKiQ,yBAAyBsE,EAAW1H,EAAU0E,OAAQ3B,MAmEnEd,gBAAgBY,GACpBA,EAAEC,kBACF,MAAMG,EAAaJ,EAAE9P,OACfgV,EAAsB9E,GAAc9P,KAAKkS,mBAAmBpC,EAAW3L,GAAG8N,QAAQ,QAAS,KAC3FrC,EAAYF,EAAEvT,KACpByY,EAAqB,GAAG7Q,MAAQxI,OAAOsZ,SAASnF,EAAE9P,OAAOmE,MAAO,IAChE/D,KAAKoR,gBAAgBwD,EAAsB9E,EAAYF,GAgCnDsC,mBAAmBsC,GACvB,IAAIM,EAMJ,OAJAA,EAAa9U,KAAKV,MAAMmP,aAAasG,OAAQtD,GAClCA,EAAMtN,KAAOqQ,GAGjBM,EAAWjW,OAAS,EAAIiW,EAAa,KAyCxCxC,qBACJmC,EACA9b,GAEA,IAAKqH,KAAK2O,cACN,OAAO,EAEX,IAAIqG,EAAU,EACVC,GAAiB,EAErB,GAAmB,YAAftc,EAAMwD,KAAoB,CAG1B,GADA6Y,EADmBrc,EACCqP,QAEfyM,IAAiBzU,KAAKV,MAAMmP,aAAa,KAAmB,KAAZuG,GAA8B,KAAZA,IAClEP,IAAiBzU,KAAKV,MAAMmP,aAAa,KAAmB,KAAZuG,GAA8B,KAAZA,GAEnE,OAAO,EAEXC,GAAiB,EAErB,GAAmB,cAAftc,EAAMwD,MAAuC,cAAfxD,EAAMwD,MAAuC,UAAfxD,EAAMwD,KAAkB,CACpF,MAAM4H,EAAQ/D,KAAKmQ,UAAUxX,GAC7B,GACKqH,KAAKC,MAAMwO,aAAa,GAAG1K,MAAQA,GAAS0Q,EAAatQ,KAAOnE,KAAKV,MAAMmP,aAAa,GAAGtK,IAC3FnE,KAAKC,MAAMwO,aAAa,GAAG1K,MAAQA,GAAS0Q,EAAatQ,KAAOnE,KAAKV,MAAMmP,aAAa,GAAGtK,GAE5F,OAAO,EAEX8Q,GAAiB,EAGrB,QAASA,GAAkBjV,KAAKV,MAAMmP,aAAa,GAAG1K,MAA0B,EAAlB/D,KAAKV,MAAMsP,MAAY5O,KAAKV,MAAMmP,aAAa,GAAG1K,QArkBtG+I,EAAAhD,aAAsC,CAChDoC,aAAa,EACbgJ,QAAQ,EACRrG,YAAa,aACb9U,IAAK,EACLC,IAAK,IACL4U,KAAM,EACNH,aAAc,CAAC,CAAEtK,GAAI,kBAAmBJ,MAAO,MAG3B+I,EAAAyG,gBAA0B,U,kCCnEtD,qCAgDerQ,IAhBqCiS,IAAmF,IAAlF,UAAEC,EAAS,MAAErR,EAAK,UAAE3B,EAAS,KAAEH,EAAI,UAAES,EAAS,SAAES,EAAQ,mBAAE9B,GAAoB8T,EAC/H,MAAME,EAAW1S,IAAW,iBAAkBD,GAAwB,IACtE,OACIvD,gBAAA,SACIuD,UAAW2S,EACXC,QAASF,EAAS,eACJA,EACdjZ,KAAMkF,EAAqB,QAAU,WAAU,aACnCe,EACZ2B,MAAOA,EACP9B,KAAMA,EACNkB,SAAUA,M,kJCbT+C,EAA6B/G,aACtC,CAAAgW,EAA2E/J,KAAO,IAAjF,UAAE1I,EAAY,GAAI6S,IAAKC,EAAM,MAAOrb,QAASsb,GAA2BN,EAAfO,EAAaC,YAAAR,EAAAS,GACnE,OAAOzW,gBAACqW,EAAG7K,OAAAC,OAAA,CAAClI,UAAWA,GAAegT,EAAa,CAAEtK,IAAKA,Q,kICpBnD,MAAMyK,UAAgB1W,gBAK1BkJ,SACH,MAAAyN,EAAgC9V,KAAKV,OAA/B,UAAEoD,GAAqBoT,EAAPxW,EAAKqW,YAAAG,EAAAF,GACrBG,EAAkB,eAAerT,EAEvC,OAAOvD,gBAAA,MAAAwL,OAAAC,OAAA,CAAKlI,UAAWqT,GAAqBzW,KARlCuW,EAAA/L,aAAuC,CACjDpH,UAAW,yB,iaCFbsT,EAAiB,CACnBC,KAAM,EACNC,KAAM,KAMK,MAAMxL,UAAgBvL,gBA2BjCE,YAAYC,GACRC,MAAMD,GAENU,KAAKoL,IAAMjM,cACXa,KAAKmW,gBAAkBnW,KAAKmW,gBAAgBjM,KAAKlK,MACjDA,KAAKoW,oBAAsBpW,KAAKoW,oBAAoBlM,KAAKlK,MACzDA,KAAKqW,mBAAqBrW,KAAKqW,mBAAmBnM,KAAKlK,MACvDA,KAAK8K,OAAS9K,KAAK8K,OAAOZ,KAAKlK,MAC/BA,KAAKsW,mBAAqBtW,KAAKsW,mBAAmBpM,KAAKlK,MACvDA,KAAKuW,oBAAsBvW,KAAKuW,oBAAoBrM,KAAKlK,MACzDA,KAAKwW,0BAA4BxW,KAAKwW,0BAA0BtM,KAAKlK,MACrEA,KAAKyW,2BAA6BzW,KAAKyW,2BAA2BvM,KAAKlK,MACvEA,KAAKiW,KAAOjW,KAAKiW,KAAK/L,KAAKlK,MAC3BA,KAAKkW,KAAOlW,KAAKkW,KAAKhM,KAAKlK,MAC3BA,KAAK0W,iBAAmB1W,KAAK0W,iBAAiBxM,KAAKlK,MACnDA,KAAK2W,aAAe3W,KAAK2W,aAAazM,KAAKlK,MAC3CA,KAAK4W,mBAAqB5W,KAAK4W,mBAAmB1M,KAAKlK,MACvDA,KAAKJ,OAAS,KACdI,KAAK2N,UAAW,EAChB3N,KAAK6W,YAAa,EAGfjE,oBACH5S,KAAKJ,OAASkX,YAAiB9W,KAAKV,MAAMM,QAC1CI,KAAKmW,kBAIL,MAAMne,EAAOD,SAASgf,qBAAqB,QAAQ1e,KAAK,GACxD,GAAIL,EAAM,CACN,MAAMgf,EAAchf,EAAK6E,aAAa,SAClCma,GAAeA,EAAY9S,SAAS,YACpClE,KAAK2N,UAAW,GAIJ,OAAhB3N,KAAKJ,QAA+E,OAA5DI,KAAKJ,OAAOqX,WAAWC,aAAa,qBAC5DlX,KAAKJ,OAAOqX,WAAWE,gBAAgB,oBAIxC/D,uBACHpT,KAAKoX,mBACLpX,KAAKqX,mBACLrX,KAAKqW,qBAGFC,mBAAmB5G,GAClB1P,KAAKsX,aACLtX,KAAKoX,mBAETpX,KAAKuX,YAAc/c,OAAOgd,WAAWxX,KAAKiW,KAAK/L,KAAKlK,KAAM0P,GAAI1P,KAAKyX,SAAS,SAGzElB,oBAAoB7G,GACnB1P,KAAKuX,aACLvX,KAAKqX,mBAETrX,KAAKsX,YAAc9c,OAAOgd,WAAWxX,KAAKkW,KAAKhM,KAAKlK,KAAM0P,GAAI1P,KAAKyX,SAAS,SAGzEjB,4BACCxW,KAAKsX,aACLtX,KAAKoX,mBAINX,2BAA2B/G,GAC1B1P,KAAKuX,aACLvX,KAAKqX,mBAETrX,KAAKsX,YAAc9c,OAAOgd,WAAWxX,KAAKkW,KAAKhM,KAAKlK,KAAM0P,EAAEgI,aAAc1X,KAAKyX,SAAS,SAGrFf,iBAAiBhH,GACf1P,KAAKV,MAAM0K,SAIZhK,KAAK6W,YACL7W,KAAK6W,YAAa,EAClBW,WAAW,KACP,MAAMG,EAAY5f,SAAS6f,cAEtB5X,KAAKoL,KAAQpL,KAAKoL,IAAIvF,SAAY7F,KAAKoL,IAAIvF,QAAQgS,SAASF,IAC7D3X,KAAKkW,KAAKxG,IAEf,IAEH1P,KAAKkW,KAAKxG,IAIXiH,aAAajH,GACE,IAAdA,EAAE1H,QACFhI,KAAK6W,YAAa,EACD,WAAVnH,EAAE9M,KACT5C,KAAKkW,KAAKxG,EAAEgI,aAIbd,mBAAmBlH,GACJ,IAAdA,EAAE1H,QACFhI,KAAK6W,YAAa,EACD,WAAVnH,EAAE9M,KACT5C,KAAKkW,KAAKxG,GAIX+H,SAAS7U,GACZ,MAAM,MAAEkV,GAAU9X,KAAKV,MACvB,MAAqB,iBAAVwY,EACAC,MAAMD,EAAMlV,IAAQoT,EAAepT,GAAOkV,EAAMlV,GAGpDkV,GAAS,EAGb7B,KAAKvG,GACR,IAAK1P,KAAKV,MAAM0K,SACZhK,KAAKqX,mBACLrX,KAAK8K,OAAO4E,GAGQ,OAAhB1P,KAAKJ,QAAiB,CACtB,MAAMoY,EAAWjgB,SAASkgB,gBAAgB,oBAC1CD,EAASjU,MAAQ/D,KAAKV,MAAM6E,GAC5BnE,KAAKJ,OAAOqX,WAAWiB,aAAaF,IAKzC9B,KAAKxG,GACJ1P,KAAKV,MAAM0K,SACXhK,KAAKoX,mBACLpX,KAAK8K,OAAO4E,GAGQ,OAAhB1P,KAAKJ,QAA+E,OAA5DI,KAAKJ,OAAOqX,WAAWC,aAAa,qBAC5DlX,KAAKJ,OAAOqX,WAAWE,gBAAgB,qBAK5CE,mBACHc,aAAanY,KAAKuX,aAClBvX,KAAKuX,iBAAczY,EAGhBsY,mBACHe,aAAanY,KAAKsX,aAClBtX,KAAKsX,iBAAcxY,EAGhBsX,oBAAoB1G,GACvB,IAAK1P,KAAKJ,OACN,OAGJ,MAAMA,EAAS8P,EAAE9P,OACb8P,EAAE9P,SAAWI,KAAKJ,QAAUI,KAAKJ,OAAOiY,SAASjY,IAC7CI,KAAKsX,aACLtX,KAAKoX,mBAGJpX,KAAKV,MAAM0K,QACZhK,KAAK8K,OAAO4E,IAET1P,KAAKV,MAAM0K,QAA0C,YAAhCpK,EAAO/C,aAAa,UAC5CmD,KAAKuX,aACLvX,KAAKqX,mBAETrX,KAAKsX,YAAc9c,OAAOgd,WAAWxX,KAAKkW,KAAKhM,KAAKlK,KAAM0P,GAAI1P,KAAKyX,SAAS,UAI7EtB,kBACH,GAAKnW,KAAKJ,OAIV,GAAII,KAAKV,MAAM8Y,QAAS,CACpB,MAAMC,EAAWrY,KAAKV,MAAM8Y,QAAQE,MAAM,KACrCD,EAASnU,SAAS,YACfmU,EAASnU,SAAS,UAClB,CAAC,QAAS,cAAcqU,QAAS5f,IAC7BZ,SAAS8X,iBAAiBlX,EAAOqH,KAAKoW,qBAAqB,KAG/DiC,EAASnU,SAAS,WAClBlE,KAAKJ,OAAOiQ,iBAAiB,YAAa7P,KAAKsW,oBAAoB,GACnEtW,KAAKJ,OAAOiQ,iBAAiB,WAAY7P,KAAKuW,qBAAqB,IAEnE8B,EAASnU,SAAS,WAClBlE,KAAKJ,OAAOiQ,iBAAiB,UAAW7P,KAAKiW,MAAM,GACpB,WAA3BjW,KAAKV,MAAMkZ,YACXxY,KAAKJ,OAAOiQ,iBAAiB,WAAY7P,KAAK0W,kBAAkB,GAEhE1W,KAAKJ,OAAOiQ,iBAAiB,WAAY7P,KAAKkW,MAAM,IAG5DlW,KAAKJ,OAAOiQ,iBAAiB,UAAW7P,KAAK4W,oBAAoB,SAGrE5W,KAAKJ,OAAOiQ,iBAAiB,YAAa7P,KAAKsW,oBAAoB,GACnEtW,KAAKJ,OAAOiQ,iBAAiB,WAAY7P,KAAKuW,qBAAqB,GACnEvW,KAAKJ,OAAOiQ,iBAAiB,UAAW7P,KAAK4W,oBAAoB,GACjE5W,KAAKJ,OAAOiQ,iBAAiB,UAAW7P,KAAKiW,MAAM,GACpB,WAA3BjW,KAAKV,MAAMkZ,YACXxY,KAAKJ,OAAOiQ,iBAAiB,WAAY7P,KAAK0W,kBAAkB,GAEhE1W,KAAKJ,OAAOiQ,iBAAiB,WAAY7P,KAAKkW,MAAM,GAGxD,CAAC,QAAS,cAAcqC,QAAS5f,IAC7BZ,SAAS8X,iBAAiBlX,EAAOqH,KAAKoW,qBAAqB,KAKhEC,qBACErW,KAAKJ,SAIVI,KAAKJ,OAAOyT,oBAAoB,YAAarT,KAAKsW,oBAAoB,GACtEtW,KAAKJ,OAAOyT,oBAAoB,WAAYrT,KAAKuW,qBAAqB,GACtEvW,KAAKJ,OAAOyT,oBAAoB,UAAWrT,KAAK4W,oBAAoB,GACpE5W,KAAKJ,OAAOyT,oBAAoB,UAAWrT,KAAKiW,MAAM,GACtDjW,KAAKJ,OAAOyT,oBAAoB,WAAYrT,KAAK0W,kBAAkB,GACnE1W,KAAKJ,OAAOyT,oBAAoB,WAAYrT,KAAKkW,MAAM,GAEvD,CAAC,QAAS,cAAcqC,QAAS5f,IAC7BZ,SAASsb,oBAAoB1a,EAAOqH,KAAKoW,qBAAqB,MAI/DtL,OAAO4E,GACNA,GAAK1P,KAAKV,MAAMmZ,UAChB/I,EAAEgJ,iBAGF1Y,KAAKV,MAAMwL,QACX9K,KAAKV,MAAMwL,SAIZzC,SACH,IAAKrI,KAAKV,MAAM0K,QAAUhK,KAAK2N,SAC3B,OAAO,KAGX,MAAAmI,EAsBI9V,KAAKV,OAtBH,UACFqZ,EAAS,OACT3O,EAAM,OACNpK,EAAM,gBACNgZ,EAAe,UACfC,EAAS,eACTC,EAAc,UACdpW,EAAS,eACTqW,EAAc,SACd3S,EAAQ,UACR4S,EAAS,OACTlO,EAAM,MACNgN,EAAK,UACL3L,EAAS,SACTsM,EAAQ,QACRL,EAAO,kBACPa,EAAiB,OACjBnd,EAAM,eACNod,EAAc,YACdV,EAAW,GACXrU,GAEH2R,EADMmB,EAAUtB,YAAAG,EAAAF,GAGXuD,EAAUC,YACZC,IAA2B,WAAhBb,EAA2B,mBAAqB,oBAAqBxY,KAAKV,MAAMyZ,gBAC3F/Y,KAAKV,MAAMqZ,WAGTW,EAAgBF,YAClBC,IAA2B,WAAhBb,EAA2B,aAAe,cAAe,OAAQxY,KAAKV,MAAMoD,WACvF1C,KAAKV,MAAMqZ,WAGf,OACIxZ,gBAAA,OAAKiM,IAAKpL,KAAKoL,KACXjM,gBAACoa,IAAa,CACVpN,UAAWA,EACXnC,OAAQA,IAAU,EAClBpK,OAAQA,EACR8C,UAAW4W,EACXT,UAAWA,EACXD,gBAAiBA,EACjBK,kBAAmBA,EACnBC,eAAgBA,EAChBpd,OAAQA,EACRkd,UAAWA,EACXL,UAAWA,GAEV3Y,KAAKV,MAAMwL,QAAU9K,KAAKV,MAAMka,sBAC7Bra,gBAAA,UAAQhD,KAAK,SAASuG,UAAU,2BAA2BH,QAASvC,KAAKV,MAAMwL,OAAM,aAAa,UAElG,GAEJ3L,gBAAA,MAAAwL,OAAAC,OAAA,GACQqM,EAAU,CACdvU,UAAWyW,EACXrW,UAAsBhE,IAAhB0Z,GAA6C,YAAhBA,EAA4B,eAAY1Z,EAC3EsM,IAAKhF,EACLjC,GAAInE,KAAKV,MAAM6E,GAAE,eACJ2U,GAAyB9O,EACtCyP,YAAazZ,KAAKwW,0BAClBkD,aAAc1Z,KAAKyW,2BACnB7K,UAAW5L,KAAK2W,mBArVtBjM,EAAAZ,aAAuC,CACjDE,QAAQ,EACRS,oBAAoB,EACpB+O,uBAAuB,EACvBX,WAAW,EACXC,gBAAgB,EAChB3M,UAAW,MACXyM,gBAAiB,iBACjBd,MAAO9B,EACPlL,OAAQA,S,kCC9BhB,0a,s8BCyBe,MAAM6O,UAAiBxa,YAoBlCE,YAAYC,GACRC,MAAMD,GAVO,KAAAsa,6BAAsC,CACnDC,SAAU,aACVC,QAAS,gBACTC,QAAS,aACTC,OAAQ,YAGK,KAAAC,QAAwC9a,cAsJxC,KAAA+a,qBAAwB7J,IACrC,MAAMjV,EAAgBiV,EAAKjV,cACvBA,IACIA,EAAcrC,UAAU8e,SAAS,aAAezc,EAAcrC,UAAU8e,SAAS,UACjFzc,EAAc9C,MAAM6hB,UAAY,QAEpCna,KAAKka,qBAAqB9e,KAxJ9B4E,KAAKV,MAAQA,EAEbU,KAAKC,MAAQ,CACTzH,OAAQ,GAGZwH,KAAKoa,YAAcpa,KAAKoa,YAAYlQ,KAAKlK,MACzCA,KAAKqa,QAAUra,KAAKqa,QAAQnQ,KAAKlK,MACjCA,KAAKsa,UAAYta,KAAKsa,UAAUpQ,KAAKlK,MACrCA,KAAKua,WAAava,KAAKua,WAAWrQ,KAAKlK,MACvCA,KAAKwa,kBAAoBxa,KAAKwa,kBAAkBtQ,KAAKlK,MAGlD4S,oBACHpY,QAAUA,OAAOqV,iBAAiB,SAAU7P,KAAKwa,mBAG9C3H,mBAAmBE,GAClBA,EAAU0H,WAAaza,KAAKV,MAAMmb,UAClCza,KAAKwa,oBAINpH,uBACH5Y,QAAUA,OAAO6Y,oBAAoB,SAAUrT,KAAKwa,mBAGjD1H,sBAAsBC,EAA2BJ,GACpD,OAAI3S,KAAKC,QAAU0S,GAAa3S,KAAKV,QAAUyT,EAM5C1K,SACH,MAAAyN,EAuBI9V,KAAKV,OAvBH,IACFiW,EAAG,OACHvL,EAAM,UACNtH,EAAS,SACT+X,EAAQ,OACRC,EAAM,UACN/B,EAEAgC,GAAIC,EAAU,aACdC,EAAY,cACZC,EAAa,OACbC,EAAM,MACNC,EAAK,KACLC,EAAI,QACJC,EAAO,QACPC,EAAO,WACPC,EAAU,UACVC,EAAS,OACTC,EAAM,UACNC,EAAS,SACTC,GAGH1F,EADM2F,EAAU9F,YAAAG,EAAAF,GAGXJ,EAAMD,GAAO,MACbmG,EAAkB,CACpBf,GAAIC,EACJC,eACAC,gBACAC,SACAC,QACAC,OACAE,UACAC,aACAC,YACAC,SACAC,YACAC,aAGE,OAAEhjB,GAAWwH,KAAKC,MAClB3H,EAAmB,OAAXE,GAA8B,IAAXA,EAAe,KAAO,CAAE2hB,UAAW3hB,GAEpE,OACI2G,gBAACwc,IAAUhR,OAAAC,OAAA,GACH8Q,EAAe,CACnBf,GAAI3Q,EACJkR,QAASA,GAAWU,IAAmBjC,SACvCyB,WAAYpb,KAAKoa,YACjBkB,OAAQtb,KAAKqa,QACbkB,UAAWvb,KAAKua,WAChBiB,SAAUxb,KAAKsa,YAEbuB,IACE,MAAMC,EAAgB9b,KAAK+b,oBAAoBF,GACzC1C,EAAUC,YAAgBC,IAAW3W,EAAWoZ,EAAepB,GAAU,mBAAoB/B,GAEnG,OACIxZ,gBAACqW,EAAG7K,OAAAC,OAAA,GAAK6Q,EAAU,CAAE/Y,UAAWyW,EAAS/N,IAAKpL,KAAKia,QAAS3hB,MAAKgZ,EAAA,GAAOhZ,KACnEmiB,KAQlBuB,mBACHhc,KAAKwa,oBAGDA,oBACJ,MAAMnK,EAAOrQ,KAAKia,QAAQpU,QACb,OAATwK,GAAiBA,EAAK4L,mBAAqB5L,EAAK4L,kBAAkBC,aAAe,GACjFlc,KAAKG,SAAS,CAAE3H,OAAQ6X,EAAK4L,kBAAkBC,eAI/CH,oBAAoBF,GACxB,OAAO7b,KAAK4Z,6BAA6BiC,IAAW,WAGhDzB,YAAY/J,EAAmB8L,GACnCnc,KAAKG,SAAS,CAAE3H,OAAQ6X,EAAK6L,eAEzBlc,KAAKV,MAAM8b,YACXpb,KAAKV,MAAM8b,WAAW/K,EAAM8L,GAI5B9B,QAAQhK,GACZrQ,KAAKG,SAAS,CAAE3H,OAAQ6X,EAAK6L,eAEzBlc,KAAKV,MAAMgc,QACXtb,KAAKV,MAAMgc,OAAOjL,GAIlBkK,WAAWlK,GACfrQ,KAAKG,SAAS,CAAE3H,OAAQ,IAEpBwH,KAAKV,MAAMic,WACXvb,KAAKV,MAAMic,UAAUlL,GAkBrBiK,UAAUjK,GACdrQ,KAAKG,SAAS,CAAE3H,OAAQ,OACxBwH,KAAKka,qBAAqB7J,GAEtBrQ,KAAKV,MAAMkc,UACXxb,KAAKV,MAAMkc,SAASnL,IAtLdsJ,EAAA7P,aAAwC,CAClDE,QAAQ,EACRuL,IAAK,MACL2F,QAASU,IAAmBjC,W,0OCfrB,MAAMxT,UAAehH,gBAQhCE,YAAYC,GACRC,MAAMD,GA0CO,KAAAiD,QAAWmN,IACpB1P,KAAKV,MAAMmZ,SACX/I,EAAEgJ,iBAKF1Y,KAAKV,MAAMiD,SACXvC,KAAKV,MAAMiD,QAAQmN,IAjDvB1P,KAAKV,MAAQA,EACbU,KAAKuC,QAAUvC,KAAKuC,QAAQ2H,KAAKlK,MAG9BqI,SACH,MAAAyN,EAAoG9V,KAAKV,OAAnG,OAAE0Q,EAAM,MAAEoM,EAAK,UAAE1Z,EAAS,UAAEiW,EAAS,MAAE0D,EAAK,QAAEC,EAAO,KAAEljB,EAAI,IAAEmc,EAAG,SAAEnP,GAAyB0P,EAAZmB,EAAUtB,YAAAG,EAAAF,GACzFuD,EAAUC,YACZC,IACI3W,EACA,UACA4Z,GAAWD,EACL,eAAeA,EACfA,IAAqB,IAAZC,EACT,OAAOD,OACGvd,IAAVud,IAAmC,IAAZC,EACvB,cACA,KACNljB,GAAO,OAAOA,IACdgjB,GAAQ,YACR,CAAEpM,SAAQyI,SAAUzY,KAAKV,MAAMmZ,WAEnCE,GAGJ,IAAInD,EAAMD,GAAO,SAMjB,OAJI0B,EAAWsF,MAAgB,WAAR/G,IACnBA,EAAM,KAINrW,gBAACqW,EAAG7K,OAAAC,OAAA,CACAzO,KAAc,WAARqZ,GAAoByB,EAAW1U,QAAU,cAAWzD,GACtDmY,EAAU,CACdvU,UAAWyW,EACX/N,IAAKhF,EACL7D,QAASvC,KAAKuC,YA7CZ4D,EAAA2D,aAAsC,CAChDyL,IAAK,SACL+G,SAAS,I,kCCjBjB,0iI,kCCAA,6DAqDeE,IA7BeC,IAC1B,MAAM,mBAAEC,EAAkB,cAAEC,EAAa,UAAEja,EAAS,KAAEka,EAAI,UAAEC,EAAS,aAAEC,GAAiBL,EAElFM,EAAa5d,cAAkB,KACjC2d,GAAa,IACd,CAACA,IAEJ,OAAKH,GAAkBC,EAKnBzd,gBAAC6d,IAAK,CAAClS,OAAQiS,EAAY/S,OAAQ6S,EAAWI,SAAUF,EAAYra,UAAcA,EAAH,YAC3EvD,gBAAC+d,IAAW,CAACpS,OAAQiS,EAAYra,UAAcA,EAAH,qBAC5CvD,gBAACge,IAAS,CAACza,UAAWC,IAAcD,EAAH,iBAA8B,GAAGA,oBAA4Bga,MAC1Fvd,gBAAA,OAAKuD,UAAcA,EAAH,oBAChBvD,gBAAA,OAAKuD,UAAcA,EAAH,4BAAyCka,GACzDzd,gBAACgH,SAAM,CACHzD,UAAcA,EAAH,mCACXH,QAASwa,EACT1W,MAAOsW,EAAcS,uBAEpBT,EAAcS,yBAdpB,O,kCC3BR,IAAKnV,EALZ,kCAKA,SAAYA,GACRA,IAAA,eACAA,IAAA,aACAA,IAAA,kBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,cACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,oBACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,wBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,0BACAA,IAAA,sBACAA,IAAA,4BACAA,IAAA,0BACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,oBACAA,IAAA,oBACAA,IAAA,sBACAA,IAAA,uBACAA,IAAA,qBACAA,IAAA,qBACAA,IAAA,8BACAA,IAAA,gCACAA,IAAA,iCACAA,IAAA,gBACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,uBACAA,IAAA,uBACAA,IAAA,uBACAA,IAAA,uBACAA,IAAA,uBACAA,IAAA,uBACAA,IAAA,qCACAA,IAAA,6BACAA,IAAA,+BACAA,IAAA,2BACAA,IAAA,iCACAA,IAAA,2BACAA,IAAA,2BACAA,IAAA,2BACAA,IAAA,2BACAA,IAAA,2BACAA,IAAA,2BACAA,IAAA,2BACAA,IAAA,2BACAA,IAAA,2BACAA,IAAA,6BACAA,IAAA,6BACAA,IAAA,6BACAA,IAAA,iCACAA,IAAA,qCACAA,IAAA,qCACAA,IAAA,uCACAA,IAAA,yCACAA,IAAA,uBACAA,IAAA,6BACAA,IAAA,mBACAA,IAAA,qBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,iCACAA,IAAA,mBACAA,IAAA,yBACAA,IAAA,yBACAA,IAAA,yBACAA,IAAA,yBACAA,IAAA,6CACAA,IAAA,2CACAA,IAAA,6CACAA,IAAA,+CACAA,IAAA,mCACAA,IAAA,uCACAA,IAAA,uCACAA,IAAA,yCACAA,IAAA,mCACAA,IAAA,iCACAA,IAAA,mDACAA,IAAA,qDACAA,IAAA,uDACAA,IAAA,2DACAA,IAAA,6DACAA,IAAA,2DACAA,IAAA,yDACAA,IAAA,6DACAA,IAAA,+DACAA,IAAA,6DACAA,IAAA,+BACAA,IAAA,2BACAA,IAAA,iCACAA,IAAA,mBAlGJ,CAAYA,MAAQ,M,kCCLpB,uEAiBe,MAAMoV,UAAwBle,gBAKzCE,YAAYC,GACRC,MAAMD,GACNU,KAAKsd,gBAAkBtd,KAAKsd,gBAAgBpT,KAAKlK,MACjD,MAAMud,EAAcvd,KAAKV,MAAMke,eAAe5a,IACxC6a,EAAOzd,KAAKV,MAAMoe,gBAAgB9b,IAAI+b,GAAUA,EAAO/a,KAC7D5C,KAAKC,MAAQ,CAAEwE,cAAegZ,EAAKG,QAAQL,IAGxClV,SACH,MAAM,UAAEwV,EAAS,eAAEC,EAAc,WAAEC,EAAU,gBAAEL,EAAe,kBAAEM,GAAsBhe,KAAKV,MAErF2e,EAAkB5E,IAAW,wBAAyByE,GACtDI,EAAqB7E,IAAW,iBAAkB2E,GAClDvZ,EAAgBzE,KAAKme,oBAE3B,OACIhf,2BAAA,KACIA,gBAAA,SAAOuD,UAAWub,EAAiBG,QAASL,GACvCF,GAEL1e,gBAAA,UAAQgF,GAAI4Z,EAAYrb,UAAWwb,EAAoB/a,SAAUnD,KAAKsd,iBACjEI,EAAgB9b,IAAI,CAAC+b,EAAQnd,KAC1B,MAAM6d,EAAW7d,IAAUiE,EAC3B,OACItF,gBAAA,UAAQuD,UAAU,yBAAyBE,IAAK+a,EAAO/a,IAAKyb,SAAUA,EAAQ,gBAAiBA,GAC1FV,EAAO5Z,WAS5Boa,oBACJ,GAAIne,KAAKV,MAAMgf,mBAAoB,CAC/B,IAAI7Z,GAAiB,EACrB,MAAM8Y,EAAcvd,KAAKV,MAAMke,eAAe5a,IAC9C,IAAK,IAAI6E,EAAI,EAAGA,EAAIzH,KAAKV,MAAMoe,gBAAgB7e,OAAQ4I,IACnD,GAAIzH,KAAKV,MAAMoe,gBAAgBjW,GAAG7E,MAAQ2a,EAAa,CACnD9Y,EAAgBgD,EAChB,MAIR,OAAOhD,EAGX,OAAOzE,KAAKC,MAAMwE,cAGd6Y,gBAAgB3kB,GACpB,MAAM,gBAAE+kB,EAAe,eAAEa,GAAmBve,KAAKV,MAC3CkB,EAAQ7H,EAAME,cAAc2lB,gBAAgB,GAAGhe,MAC/Cgd,EAAiBE,EAAgBld,GACvCR,KAAKG,SAAS,CAAEsE,cAAejE,IAC/B+d,EAAe,CAAEf,oBA5DPH,EAAAvT,aAA+C,CACzD2U,YAAa,S,8JCId,SAASC,EACZC,EACA1e,EACA2e,EACA5W,GAGA,MAAM6W,EAA+B5e,EACrC,GAAI+H,IAAYC,IAAS6W,KAAM,CAE3B,MAAMC,EAAc9e,EAAM+e,eAA0BC,MAAM,GAAI,GAC1D5U,mBAAiB6U,cAAcP,IAC/BE,EAAYM,cAAgBC,WAAWT,GACvCU,EAAqB,IAAKT,EAAQC,EAAa5e,EAAO+H,KAGtD6W,EAAYM,cAAgBC,WAAWL,GACvCM,EAAqBV,EAAaC,EAAQC,EAAa5e,EAAO+H,SAE/D,GAAIqC,mBAAiBC,mBAAmBqU,IAAuC,IAAvBA,EAAY9f,OAEvEggB,EAAYM,cAAgBC,WAAWT,GACZ,IAAvBA,EAAY9f,OACZwgB,EAAqBV,EAAaC,EAAQC,EAAa5e,EAAO+H,GAG9DqX,EAAqB,IAAKT,EAAQC,EAAa5e,EAAO+H,QAGvD,GAAmD,MAA/C2W,EAAYW,OAAOX,EAAY9f,OAAS,IAAeoB,EAAM+e,eAA0B1G,MAAM,KAAKzZ,OAAS,GAAM,EAAG,CAAC,IAAD0gB,EAG3H,GAAwB,QAApBA,EAAAtf,EAAM+e,sBAAc,IAAAO,GAApBA,EAAsBrb,SAAS,MAAuD,MAA/Cya,EAAYW,OAAOX,EAAY9f,OAAS,GAC/E,OAAOoB,EAEX,IAAIuf,EAAeb,EAAY1M,QAAQ,UAAWwN,SAClDD,GAAe,IACfX,EAAYM,cAAgBC,WAAWI,GACvCH,EAAqBV,EAAaC,EAAQC,EAAa5e,EAAO+H,QAC3D,GAAmD,MAA/C2W,EAAYW,OAAOX,EAAY9f,OAAS,IAAeoB,EAAM+e,eAA0B1G,MAAM,KAAKzZ,OAAS,GAAM,EAAG,CAAC,IAAD6gB,EAE3H,GAAwB,QAApBA,EAAAzf,EAAM+e,sBAAc,IAAAU,GAApBA,EAAsBxb,SAAS,MAAuD,MAA/Cya,EAAYW,OAAOX,EAAY9f,OAAS,GAC/E,OAAOoB,EAEX4e,EAAYM,cAAgBC,WAAWT,GACvCU,EAAqBV,EAAaC,EAAQC,EAAa5e,EAAO+H,QAC3D,GAAK/H,EAAM+e,eAA0B9a,SAAS,MAASjE,EAAM+e,eAA0B1G,MAAM,KAAKzZ,OAAS,GAAM,EAAG,CAEvH,MAAM8gB,EAAYhB,EAAYW,OAAOX,EAAY9f,OAAS,GAC1DggB,EAAYM,cAAgBC,WAAYnf,EAAM+e,eAA4BW,GAC1EN,EAAsBpf,EAAM+e,eAA4BW,EAAWf,EAAQC,EAAa5e,EAAO+H,OAC5F,CAEH,MAAMwX,EAAeb,EAAY1M,QAAQ,UAAWwN,SAASd,EAAYrG,MAAM,KAAKzZ,OAAS,GAAM,GACnGggB,EAAYM,cAAgBC,WAAWI,GACvCH,EAAqBV,EAAaC,EAAQC,EAAa5e,EAAO+H,GAGlE,OAAO6W,EAYX,MAAMQ,EAAuBA,CACzBO,EACAhB,EACAC,EACA5e,EACA+H,KAEA,IAAI6X,EAAsBJ,QACtBK,EAAkB7f,EAAMkf,cAAyBnb,WACrD,MAAM+b,EAAU,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAG9D,GAAI1V,mBAAiBC,mBAAmBsV,IAA6C,IAA1BA,EAAe/gB,OAAc,CACpF,MAAMmhB,EAAoBJ,EAAeN,OAAOM,EAAe/gB,OAAS,GACxE,IAAIkhB,EAAQ7b,SAAS8b,GAGjB,OAFAnB,EAAYG,eAAiBY,EAIjCC,EAAc,IAAII,KAAKC,aAAatB,GAAQvc,OAAO9G,OAAOqkB,IAC1Df,EAAYsB,iBAAmBN,MAC5B,CACH,MAAMG,EAAoBJ,EAAeN,OAAOM,EAAe/gB,OAAS,GAG9B,IAADuhB,EACIC,EAAAC,EAD7C,GAAIP,EAAQ7b,SAAS8b,GACjB,GAAwB,QAAxBI,EAAIngB,EAAM+e,sBAAc,IAAAoB,GAApBA,EAAsBlc,SAAS,MACP,QAApBmc,EAAApgB,EAAM+e,sBAAc,IAAAqB,OAAA,EAApBA,EAAsBE,WAA8B,QAApBD,EAAArgB,EAAM+e,sBAAc,IAAAsB,OAAA,EAApBA,EAAsB1C,QAAQ,MAAO,GAAG/e,SAAU,IAClFihB,EAASA,EAAOb,MAAM,GAAI,GAC1BJ,EAAYG,eAAiBc,EAASE,EACtCH,EAAc,IAAII,KAAKC,aAAatB,GAAQvc,OAAO9G,OAAOukB,EAASE,IACnEnB,EAAYsB,iBAAmBN,QAGnChB,EAAYG,eAAiBc,EAC7BD,EAAc,IAAII,KAAKC,aAAatB,GAAQvc,OAAO9G,OAAOukB,IAC1DjB,EAAYsB,iBAAmBN,OAEhC,GAA0B,MAAtBG,GAAuE,IAA1CF,EAAO7N,QAAQ,QAASwN,SAAO5gB,QAAgBihB,EAAOxH,MAAM,KAAKzZ,OAAS,GAAM,EAAG,CAEvH,MAAM2hB,EAAeV,EAASE,EAC9BnB,EAAYG,eAAiBwB,EAC7B3B,EAAYsB,iBAAmBK,OACxBxY,IAAYC,IAAS6W,OAC5BD,EAAYG,eAAiBc,EAC7BD,EAAc,IAAII,KAAKC,aAAatB,GAAQvc,OAAO9G,OAAOukB,IAC1DjB,EAAYsB,iBAAmBN,M,6JC7H9BY,EAAiCthB,aAC1C,CAAAgW,EAA+E/J,KAAO,IAArF,UAAE1I,EAAY,GAAE,GAAEyB,EAAK,GAAIoR,IAAKC,EAAM,MAAK,YAAEkL,GAA+BvL,EAAfO,EAAaC,YAAAR,EAAAS,GACvE,OAAOzW,gBAACqW,EAAG7K,OAAAC,OAAA,CAAClI,UAAWA,EAAWyB,GAAIA,GAAQuc,EAAYC,uBAAuBD,GAAkBhL,EAAa,CAAEtK,IAAKA,Q,kCCTxH,IAAKyC,EAPZ,kCAOA,SAAYA,GACRA,IAAA,qBACAA,IAAA,uBAFJ,CAAYA,MAAW,M,6HCYR,MAAM+S,UAAiBzhB,gBAOlCE,YAAYC,GAAqB,IAAAuhB,EAC7BthB,MAAMD,GAHO,KAAAwhB,SAA8C3hB,cA4D9C,KAAA4hB,aAAe,KAC5B,MAAMC,OAA8BliB,IAAnBkB,KAAKV,MAAMvF,IAAoB,EAAIiG,KAAKV,MAAMvF,IAC3Dge,MAAM/X,KAAKC,MAAMghB,eAAiBjhB,KAAKC,MAAMghB,aAAeD,EAC5DhhB,KAAKG,SAAS,CAAE8gB,aAAcD,GAAY,KACtChhB,KAAKV,MAAM6D,UAAYnD,KAAKV,MAAM6D,SAASnD,KAAKC,MAAMghB,gBAG1DjhB,KAAKV,MAAM6D,UAAYnD,KAAKV,MAAM6D,SAASnD,KAAKC,MAAMghB,eA/D1DjhB,KAAKC,MAAQ,CAAEghB,aAAgC,QAApBJ,EAAEvhB,EAAM4hB,oBAAY,IAAAL,IAAI,GACnD7gB,KAAKmhB,cAAgBnhB,KAAKmhB,cAAcjX,KAAKlK,MAG1CqI,SACH,MAAM+Y,EAAephB,KAAKC,MAAMghB,aAEhC,OACI9hB,gBAAA,SACIhD,KAAK,SACLpC,IAAKiG,KAAKV,MAAMvF,IAChB2I,UAAU,qBACV2e,QAAQ,SACRtd,MAAO/D,KAAKC,MAAMghB,aAClB9d,SAAUnD,KAAKmhB,cACfnV,OAAQhM,KAAK+gB,aAAY,YACf,SAAQ,aACN,GAAG/gB,KAAKV,MAAMgiB,uBAC1Bxe,KAAK,aAAY,gBACF9C,KAAKV,MAAMvF,IAAG,gBACdiG,KAAKV,MAAMtF,IAAG,gBACdonB,EACfjd,GAAInE,KAAKV,MAAM6E,GACfiH,IAAKpL,KAAK8gB,WAKdK,cAAczR,GAClB,MAAM0R,EAAe7lB,OAAOsZ,SAASnF,EAAE9P,OAAOmE,MAAO,IAC/Cid,OAA8BliB,IAAnBkB,KAAKV,MAAMvF,IAAoB,EAAIiG,KAAKV,MAAMvF,IACzDwnB,EACFvhB,KAAK8gB,UAAY9gB,KAAK8gB,SAASjb,SAAW7F,KAAK8gB,SAASjb,mBAAmB2b,kBAAoBxhB,KAAK8gB,SAASjb,QAE7Gub,EAAephB,KAAKV,MAAMtF,IAC1BgG,KAAKG,SAAS,CAAE8gB,aAAcjhB,KAAKV,MAAMtF,KAAO,KAC5CynB,IAAS,KACLzhB,KAAKV,MAAM6D,UAAYnD,KAAKV,MAAM6D,SAASnD,KAAKC,MAAMghB,eACvD,IAFHQ,KAKJzhB,KAAKG,SAAS,CAAE8gB,aAAcG,GAAgB,KAC1CK,IAAS,KACA1J,MAAM/X,KAAKC,MAAMghB,eAAmBjhB,KAAKC,MAAMghB,aAAeD,IAC/DhhB,KAAKV,MAAM6D,UAAYnD,KAAKV,MAAM6D,SAASnD,KAAKC,MAAMghB,cAElDM,IACAA,EAAa5kB,aAAa,gBAAiBykB,EAAapd,YACxDud,EAAa5kB,aAAa,QAASykB,EAAapd,eAGzD,IATHyd,MAlDEb,EAAA9W,aAAwC,CAClD/P,IAAK,I,oCCrBb,iF,4FCkCY2nB,E,2FAAZ,SAAYA,GACRA,IAAA,eACAA,IAAA,qBAFJ,CAAYA,MAA6B,KAWzC,MAAMC,EAA4CA,CAC9CC,EACA9gB,KAEA,OAAQ8gB,GACJ,KAAKF,EAA8BG,KAC/B,OAAO/gB,EAAUghB,wBACrB,KAAKJ,EAA8BK,QAC/B,OAAOjhB,EAAUkhB,wBACrB,QACI,MAAM,IAAIC,MAAM,uFAUtBC,EAAiBA,CACnBC,EACAP,IACC,KACDO,EAAkBP,IAgChBQ,EAAuBA,CAACC,EAAgEC,IAA4B,KACtHD,GAAiBC,IAQRC,EAA+EjjB,IACxF,MAAMkjB,EAAmBrjB,IAAMsjB,aACxBC,EAAgBC,GAAqBxjB,IAAMyjB,UAAS,IAEpDhB,EAAWiB,GAAgB1jB,IAAMyjB,SAAStjB,EAAMwjB,cAMjDC,EAAgBC,IAClBH,EAAaG,GACbL,GAAkB,GAClBrjB,EAAM2jB,eAAeD,IAGzB,OACI7jB,IAAAzC,cAAA,OAAKgG,UAAWpD,EAAMoD,WAClBvD,IAAAzC,cAACyJ,IAAM,CACHzD,UAAcpD,EAAMoD,UAAT,wBACX0D,SAAUoc,EAAgB,gBACXE,EAAc,mBACXpjB,EAAMoD,UACxBH,QAAS6f,EAAqBO,EAAmBD,IAEhDf,EAA0CC,EAAWtiB,EAAMwB,YAEhE3B,IAAAzC,cAACwmB,UAAO,CACJ/e,GAAI7E,EAAMoD,UACVyJ,UAAU,aACVnC,OAAQ0Y,EACR9iB,OAAQ4iB,EACR1X,OAAQsX,EAAqBO,EAAmBD,IAE/CS,iBAAeC,cAA6C1B,GAA+B9f,IAAI3B,GAhEpFojB,EACxBzB,EACA9gB,EACA4B,EACAyf,KAEA,MAAMmB,EAA4B5B,EAA8BE,GAEhE,OACIziB,IAAAzC,cAAA,UAAQgG,UAAW,GAAGA,YAAoB4gB,IAA6B/gB,QAAS2f,EAAeC,EAAmBP,IAC7GD,EAA0CC,EAAW9gB,KAuDvCuiB,CAAoBpjB,EAAOX,EAAMwB,UAAWxB,EAAMoD,UAAWqgB,OChGjF,MAAMQ,UAAoBpkB,gBAK7BE,YAAmBC,GACfC,MAAMD,GAsEO,KAAAkkB,kBAAoB,KACjCxjB,KAAKG,SAAS,CAAEsjB,gBAAgB,KAMnB,KAAAC,iBAAmB,KAChC1jB,KAAKG,SAAS,CAAEsjB,gBAAgB,KAOnB,KAAAE,6BAAgCC,IAGrC,IAADC,EAFHD,IAAalC,EAA8BG,KAC3C7hB,KAAK8jB,cAAc9jB,KAAKV,MAAMykB,eAE9B/jB,KAAKG,SAAS,CAAEihB,kBAActiB,IACR,QAAtB+kB,EAAA7jB,KAAKgkB,UAAUne,eAAO,IAAAge,GAAtBA,EAAwBI,UAQf,KAAAH,cAAiBI,IAC9BlkB,KAAKG,SAAS,CAAEihB,aAAc8C,IAE1BlkB,KAAKV,MAAM6kB,cACXnkB,KAAKV,MAAM6kB,aAAaD,IAQf,KAAA/C,cAAiBxoB,IAC9B,IAAIyoB,EAAe7lB,OAAO6jB,WAAWzmB,EAAMiH,OAAOmE,OAE9CxI,OAAOwc,MAAMqJ,GACbphB,KAAKG,SAAS,CAAEihB,kBAActiB,KAIlCsiB,GAAgBA,EAAagD,QAAQb,EAAYc,aAE5C5jB,mBAAiB6jB,kBAAkBtkB,KAAKV,MAAMilB,eAAiBnD,EAAephB,KAAKV,MAAMilB,aAC1FvkB,KAAK8jB,cAAc9jB,KAAKV,MAAMilB,eACtB9jB,mBAAiB6jB,kBAAkBtkB,KAAKV,MAAMykB,eAAiB3C,EAAephB,KAAKV,MAAMykB,aACjG/jB,KAAK8jB,cAAc9jB,KAAKV,MAAMykB,cAE9B/jB,KAAK8jB,cAAc1C,KA3HvBphB,KAAKgkB,UAAY7kB,cAEjB,IAAIqlB,EAAellB,EAAMmlB,eAEpBhkB,mBAAiB6jB,kBAAkBtkB,KAAKV,MAAMilB,eAAiBC,EAAexkB,KAAKV,MAAMilB,aAC1FC,EAAexkB,KAAKV,MAAMilB,cAClB9jB,mBAAiB6jB,kBAAkBtkB,KAAKV,MAAMykB,eAAiBS,EAAexkB,KAAKV,MAAMykB,eACjGS,EAAexkB,KAAKV,MAAMykB,cAG9B/jB,KAAKC,MAAQ,CACTmhB,aAAcoD,EACdf,gBAAgB,GAIjBpb,SAAM,IAAAqc,EAAAC,EAAAC,EACT,MAEMC,GAAoBpkB,mBAAiB6jB,kBAAkBtkB,KAAKV,MAAMykB,cAExE,IAAIe,EAAOpD,EAA8BK,QAEpCthB,mBAAiB6jB,kBAAkBtkB,KAAKV,MAAMykB,eAAiB/jB,KAAKC,MAAMmhB,eAAiBphB,KAAKV,MAAMykB,eACvGe,EAAOpD,EAA8BG,MAGzC,MAAMkD,EAAyE,QAA3DL,EAA0B,QAA1BC,EAAG3kB,KAAKC,MAAMmhB,oBAAY,IAAAuD,OAAA,EAAvBA,EAAyBP,QAAQb,EAAYc,mBAAW,IAAAK,IAAI,GAC7EM,EAAqC,QAA1BJ,EAAG5kB,KAAKC,MAAMmhB,oBAAY,IAAAwD,IAAI,GAE/C,OACIzlB,gBAAA,OAAKuD,UAAWC,IAAW3C,KAAKV,MAAMoD,UAdf,qBAenBvD,gBAAA,SACIuD,UAAWC,IAAc3C,KAAKV,MAAMoD,UAAd,UAAkC,2BACxDvG,KAAK,SACLpC,IAAKiG,KAAKV,MAAMilB,aAChBvqB,IAAKgG,KAAKV,MAAMykB,aAChB1C,QAAQ,yBACRtd,MAAO/D,KAAKC,MAAMwjB,eAAiBuB,EAAcD,EACjD5hB,SAAUnD,KAAKmhB,cAAa,YAClB,SAAQ,aACN,GAAGnhB,KAAKV,MAAMwB,UAAUmkB,0BACpCniB,KAAK,aAAY,gBACF9C,KAAKV,MAAMilB,aAAY,gBACvBvkB,KAAKV,MAAMykB,aAAY,gBACvB/jB,KAAKC,MAAMmhB,aAC1BtV,QAAS9L,KAAKwjB,kBACdxX,OAAQhM,KAAK0jB,iBACbtY,IAAKpL,KAAKgkB,YAEba,GACG1lB,gBAAA,OAAKuD,UAAWC,IAAc3C,KAAKV,MAAMoD,UAAd,YAAoC,8BAC3DvD,gBAACojB,EAAiC,CAC9B3f,IAAKkiB,EACLpiB,UAAc1C,KAAKV,MAAMoD,UAAd,yCACXogB,aAAcgC,EACdhkB,UAAWd,KAAKV,MAAMwB,UACtBmiB,eAAgBjjB,KAAK2jB,kCAhErBJ,EAAAc,WAAa,G,iPCnC1B,MAAMa,UAAuB/lB,gBAQxCE,YAAYC,GACRC,MAAMD,GACNU,KAAKmlB,QAAUC,YAAiB,QAASplB,KAAKV,MAAM+lB,iBAAmB,IAGpEhd,SAEH,IAAAyN,EAAoG9V,KAAKV,OAArG,UAAEoD,EAAS,UAAEiW,EAAS,KAAE2M,EAAI,SAAEC,EAAUhQ,IAAKC,EAAG,SAAEiF,EAAQ,iBAAE4K,GAA4BvP,EAAPxW,EAAKqW,YAAAG,EAAAF,GACtF4P,EAAgB/K,EACpB,MAAMgL,EAAwBrM,YAAgBC,IAAW3W,EAAW,iBAAkBiW,GAEtF,IAAI+M,EACAH,GACAG,EAAe,IACfF,EAAQ,YACDF,IACPI,EAAe,IACfF,EAAQ,QAGR/K,GAAYtiB,MAAMwtB,QAAQlL,IAAiC,IAApBA,EAAS5b,SAChD4b,EAAW,MAEVnb,EAAMid,MAAgB,MAAR/G,IACfA,EAAM,SAGN+P,GAAYD,KACZ7K,EAAW,CAACtb,gBAAA,QAAMyD,IAAI,SAAS6X,GAAYiL,KAG/C1lB,KAAKmlB,QAAQS,cAAcJ,MAAQA,EACnC,MAAMK,EAAYC,YAAuBT,EAAkBrlB,KAAKmlB,SAEhE,OACIhmB,gBAACqW,EAAG7K,OAAAC,OAAA,GAAKtL,EAAK,CAAEoD,UAAW+iB,GAA2BI,GACjDpL,IA3CCyK,EAAApb,aAA8C,CACxDyL,IAAK,IACLzS,KAAM,S,kCClBd,4FAiBO,MAAMijB,EAA4CzmB,IACrD,MAAMtH,EACFmH,IAAAzC,cAACwJ,OAAI,CAACqP,IAAK4H,YAAWza,UAAU,2BAC3BpD,EAAM0mB,iBAITC,EACF9mB,IAAAzC,cAACsgB,QAAK,CACFkJ,WAAS,EACTC,gBAAgB,aAChBnc,OAAQ1K,EAAM8mB,YACdtb,OAAQxL,EAAM+mB,SACd3jB,UAAW2W,IAAW,qBAAsB/Z,EAAM+Z,YAClDiN,OAAQ,OAIVC,EAAcpnB,IAAAzC,cAACwgB,cAAW,CAACpS,OAAQxL,EAAM+mB,WAE/C,OAAOlnB,IAAMqnB,aAAaP,EAAa,GAAIM,EAAavuB,K,kOCrB7C,MAAMyuB,UAAgBtnB,gBAGjCE,YAAYC,GACRC,MAAMD,GACNU,KAAKmlB,QAAUC,2BAAiB,QAASplB,KAAKV,MAAM+lB,iBAAmBrlB,KAAKV,MAAMonB,gBAG/Ere,SACH,MAAAyN,EAA8G9V,KAAKV,OAA7G,UAAEoD,EAAS,WAAEikB,EAAU,KAAEvtB,EAAI,eAAEwtB,EAAc,SAAEnO,EAAQ,iBAAE4M,EAAgB,eAAEqB,GAA0B5Q,EAAPxW,EAAKqW,YAAAG,EAAAF,GACnGiR,EAAqB,UAATztB,EAAmB,qBAAgC,UAATA,EAAmB,qBAAuB,GAChGigB,EAAa3W,EAAY,eAAemkB,KAAankB,IAAc,eAAemkB,EAClFhB,EAAYC,iCAAuBT,EAAmBrlB,KAAKmlB,SAKjE,OAFAwB,EAAWjkB,UAAeikB,EAAWjkB,UAAd,4BAGnBvD,2BAAA,KACIA,gBAAA,SAAAwL,OAAAC,OAAA,CAAQ6N,SAAUA,EAAU/V,UAAW2W,GAAgB/Z,EAAWumB,GAC9D1mB,gBAAA,IAAAwL,OAAAC,OAAA,GAAO+b,EAAU,sBAEpBC,IAAmBnO,GAChBtZ,gBAAC4K,sBAAmB,CAACqO,QAAQ,cAAcxY,OAAQN,EAAM6E,IACpD,IACA7E,EAAM,mB,oCCzC/B,+D,kCCAA,8DAaO,MAAMqO,EAAYrO,IAAuB,IAAAwnB,EAC5C,MAAM,QAAElZ,EAAO,QAAEG,GAAYzO,EAC7B,OAAQsO,GACJ,KAAKC,IAAYC,QACb,GAAI0E,IAASC,WAAajY,OAAOusB,WAAY,CACzC,MAAM/Y,EAAeD,aAAO,EAAPA,EAASC,aAC9B,GAAIA,EACA,OAAIA,EAAaC,IAAMzT,OAAOusB,YAAc/Y,EAAaC,GAAGC,EACjD,KACAF,EAAaG,IAAM3T,OAAOusB,YAAc/Y,EAAaG,GAAGD,EACxD,KACAF,EAAaI,IAAM5T,OAAOusB,YAAc/Y,EAAaI,GAAGF,EACxD,KACAF,EAAaK,IAAM7T,OAAOusB,YAAc/Y,EAAaK,GAAGH,EACxD,KAEJ,KAIf,MAAO,KACX,KAAKL,IAAYmZ,SAEb,MAD2C,YAA1BjZ,SAAe,QAAR+Y,EAAP/Y,EAASkZ,cAAM,IAAAH,OAAA,EAAfA,EAAiBI,MAAoB,KAAO,KAEjE,QACI,MAAO,Q,6YCZnB,IAAqBC,EAAmBC,EAAxC,cAAiDjoB,gBA8B7CE,YAAYC,GAAgC,IAAAuhB,EAAAwG,EACxC9nB,MAAMD,GAtBO,KAAAwhB,SAA8C3hB,cAoH9C,KAAAoP,aAAe,KAE5B,MAUMb,EAAgBC,mBAAS,CAAEC,QAASC,cAAYC,QAASC,QAV/C,CACZC,aAAc,CACVC,GAAI,CAAEC,EAAG,KACTC,GAAI,CAAED,EAAG,KACTE,GAAI,CAAEF,EAAG,MACTG,GAAI,CAAEH,EAAG,MACTI,GAAI,CAAEJ,EAAG,UAKjB,MAAyB,OAAlBR,GAA4C,OAAlBA,GAmEpB,KAAAqT,aAAe,KAC5B,GAAIxlB,OAAOwc,MAAM/X,KAAKC,MAAMghB,cACxBjhB,KAAKG,SAAS,CAAE8gB,aAAcjhB,KAAKsnB,gBAChC,CACH,MAAMlG,EAAetnB,KAAKC,IAAIiG,KAAKV,MAAMtF,IAAKF,KAAKE,IAAIgG,KAAKsnB,UAAWtnB,KAAKC,MAAMghB,eAC9EG,IAAiBphB,KAAKC,MAAMghB,cAC5BjhB,KAAKG,SAAS,CAAE8gB,aAAcG,MAnLtCphB,KAAKC,MAAQ,CAAEghB,aAAgC,QAApBJ,EAAEvhB,EAAM4hB,oBAAY,IAAAL,IAAI,EAAG0G,YAAY,GAClEvnB,KAAKwnB,aAAexnB,KAAKwnB,aAAatd,KAAKlK,MAC3CA,KAAKynB,aAAeznB,KAAKynB,aAAavd,KAAKlK,MAC3CA,KAAKmhB,cAAgBnhB,KAAKmhB,cAAcjX,KAAKlK,MAC7CA,KAAKmlB,QAAUC,YAAiB,QAASplB,KAAKV,MAAM+lB,iBAAmB,IACvErlB,KAAKsnB,UAA0B,QAAjBD,EAAGrnB,KAAKV,MAAMvF,WAAG,IAAAstB,IAAID,EAAoBtd,aAAa/P,IAxBjE,gCACHuF,EACAW,GAEA,MAAM0S,E,yWAASrB,CAAA,GAAQrR,GAMmB,IAADynB,GAJrCpoB,EAAMmZ,WAAaxY,EAAMsnB,aACzB5U,EAAU4U,YAAa,IAGtBjoB,EAAMmZ,UAAYxY,EAAMsnB,cACzB5U,EAAUsO,aAAiC,QAArByG,EAAGpoB,EAAM4hB,oBAAY,IAAAwG,IAAI,EAC/C/U,EAAU4U,YAAa,GAE3B,OAAO5U,EAaJtK,SAAM,IAAAsf,EAAAC,EACT,MAAM,IAAE7tB,EAAG,IAAEC,GAAQgG,KAAKV,MAEpBuoB,EAAiC7nB,KAAKV,MAAMwoB,oBAAd,4BAC9BC,EAAgC/nB,KAAKV,MAAM0oB,oBAAd,4BAC7BC,EAAoBjoB,KAAKC,MAAMghB,eAAiBlnB,UAAO,IAAMiG,KAAKV,MAAM4oB,WACxEC,EAAoBnoB,KAAKC,MAAMghB,cAAgBjnB,GAAOgG,KAAKV,MAAM4oB,WACjE9G,EAAephB,KAAKC,MAAMghB,aAChCjhB,KAAKmlB,QAAQS,cAAcJ,MAAQ4C,IAAkBC,kBACrD,MAAMC,EAAsBxC,YAAuB9lB,KAAKV,MAAM+lB,iBAAmBrlB,KAAKmlB,SACtFnlB,KAAKmlB,QAAQS,cAAcJ,MAAQ4C,IAAkBG,kBACrD,MAAMC,EAAsB1C,YAAuB9lB,KAAKV,MAAM+lB,iBAAmBrlB,KAAKmlB,SAChFsD,EAAiB,GAAoC,QAApCd,EAAG3nB,KAAKV,MAAMgiB,8BAAsB,IAAAqG,IAAI,MAAM3nB,KAAKC,MAAMghB,eAEhF,IAAIyH,EAAsB,GACtBT,EAEAS,EAAsB,WACf1oB,KAAKV,MAAMmZ,WAElBiQ,EAAsB,cAE1B,IAAIC,EAAsB,GAS1B,OARIR,EAEAQ,EAAsB,WACf3oB,KAAKV,MAAMmZ,WAElBkQ,EAAsB,cAItBxpB,2BAAA,KACIA,gBAAA,OAAKuD,UAAU,WAAWyB,GAAInE,KAAKV,MAAM6E,IACrChF,gBAAA,SAAAwL,OAAAC,OAAA,CACI6N,SAAUzY,KAAKV,MAAMmZ,UAAYwP,EACjC5hB,MAAO4hB,EAAoB,GAAKjoB,KAAKV,MAAMspB,yBAC3ClmB,UAAW,gCAAgCgmB,EAC3CnmB,QAASvC,KAAKynB,aAAY,gBACXQ,EAAiB,aACpB,GAAGjoB,KAAKV,MAAMspB,yBAC1BvM,MAAM,aACFiM,GAEJnpB,gBAAA,QAAMuD,UAAWmlB,KAErB1oB,gBAAA,SACIhD,KAAK,SACLuG,UAAU,iBACV2e,QAAQ,SACRtd,MAAO/D,KAAKC,MAAMghB,aAClB9d,SAAUnD,KAAKmhB,cACfnV,OAAQhM,KAAK+gB,aAAY,YACf,SAAQ,aACN/gB,KAAKuO,eAAiBka,EAAiB,IAAoC,QAApCb,EAAG5nB,KAAKV,MAAMgiB,8BAAsB,IAAAsG,IAAI,IAC3F9kB,KAAK,aAAY,gBACF9C,KAAKsnB,UAAS,gBACdttB,EAAG,gBACHonB,EACfhW,IAAKpL,KAAK8gB,SACVrI,SAAUzY,KAAKV,MAAMmZ,SACrB1e,IAAKiG,KAAKsnB,UACVttB,IAAKgG,KAAKV,MAAMtF,MAEpBmF,gBAAA,SAAAwL,OAAAC,OAAA,CACI6N,SAAUzY,KAAKV,MAAMmZ,UAAY0P,EACjC9hB,MAAO8hB,EAAoB,GAAKnoB,KAAKV,MAAMupB,yBAC3CnmB,UAAW,gCAAgCimB,EAC3CpmB,QAASvC,KAAKwnB,aAAY,gBACXW,EAAiB,aACpB,GAAGnoB,KAAKV,MAAMupB,yBAC1BxM,MAAM,aACFmM,GAEJrpB,gBAAA,QAAMuD,UAAWqlB,OA2B7BP,eACJ,IAAIsB,GAAiB,EACrB,MAAMC,EAAe/oB,KAAKC,MAAMghB,aAChC,IAAI+H,EAEAD,EAAe/oB,KAAKV,MAAMtF,KAC1B8uB,GAAiB,EACjBE,EAAkBD,EAAe,IAEjCD,GAAiB,EACjBE,EAAkBhpB,KAAKV,MAAMtF,KAG7B8uB,GAAkB9oB,KAAKV,MAAM6D,UACzBnD,KAAKV,MAAM6D,SAAS6lB,IACpBhpB,KAAKG,SAAS,CAAE8gB,aAAc+H,IAKlCvB,eACJ,IAAIqB,GAAiB,EACrB,MAAMC,EAAe/oB,KAAKC,MAAMghB,aAChC,IAAI+H,EAEAD,GAAgB/oB,KAAKsnB,WACrBwB,GAAiB,EACjBE,EAAkBD,EAAe,IAEjCD,GAAiB,EACjBE,EAAkBhpB,KAAKsnB,WAGvBwB,GAAkB9oB,KAAKV,MAAM6D,UACzBnD,KAAKV,MAAM6D,SAAS6lB,IACpBhpB,KAAKG,SAAS,CAAE8gB,aAAc+H,IAKlC7H,cAAczR,GAClB,IAAI0R,EAAe7lB,OAAOsZ,SAASnF,EAAE9P,OAAOmE,MAAO,IAC/CxI,OAAOwc,MAAMqJ,GACbphB,KAAKG,SAAS,CAAE8gB,aAAcG,KAGlCA,EAAetnB,KAAKC,IAAIiG,KAAKV,MAAMtF,IAAKF,KAAKE,IAAIgG,KAAKsnB,UAAWlG,IACjEphB,KAAKG,SAAS,CAAE8gB,aAAcG,IAC9B6H,IAAS,KAELjpB,KAAKV,MAAM6D,UAAYnD,KAAKV,MAAM6D,SAASnD,KAAKC,MAAMghB,cAEtD,MAAMM,EACFvhB,KAAK8gB,UAAY9gB,KAAK8gB,SAASjb,SAAW7F,KAAK8gB,SAASjb,mBAAmB2b,kBAAoBxhB,KAAK8gB,SAASjb,QAC7G0b,IACAA,EAAa5kB,aAAa,gBAAiBqD,KAAKC,MAAMghB,aAAajd,YACnEud,EAAa5kB,aAAa,QAASqD,KAAKC,MAAMghB,aAAajd,cAEhE,IAVHilB,MA5LU9B,EAAArd,aAAmD,CAC7D/P,IAAK,EACL+tB,oBAAqB,eACrBE,oBAAqB,eAJRb,EAAmBC,EAAA8B,YAAA,CADvCC,KACoBhC,U,iYCKN,MAAMiC,UAAejqB,gBAWhCE,YAAYC,GAAmB,IAAA+pB,EAAAC,EAC3B/pB,MAAMD,GACNU,KAAKiK,QAAUjK,KAAKiK,QAAQC,KAAKlK,MACjCA,KAAKupB,mBAAoB,EACzBvpB,KAAKC,MAAQ,CAAE+J,OAAmC,QAA7Bqf,EAAqB,QAArBC,EAAEhqB,EAAMkqB,qBAAa,IAAAF,OAAA,EAAnBA,EAAqBtf,cAAM,IAAAqf,KAAWI,WAAY,IACzEzpB,KAAK0pB,iBAAmB/mB,IACpB,gBAEA3C,KAAKV,MAAMqqB,qBAAuB3pB,KAAKV,MAAMqqB,qBAAuB,IAGpE3pB,KAAKV,MAAMsqB,cACX5pB,KAAK6pB,gBAAkBlnB,IACnB3C,KAAK0pB,iBAEL1pB,KAAKV,MAAMwqB,UAAY9pB,KAAKV,MAAMwqB,UAAY9pB,KAAKV,MAAMyqB,WAAa/pB,KAAKV,MAAMyqB,WAAa,IAElG/pB,KAAKgqB,iBAAmBhqB,KAAK6pB,kBAE7B7pB,KAAK6pB,gBAAkBlnB,IACnB3C,KAAK0pB,iBAEL1pB,KAAKV,MAAMwqB,UAAY9pB,KAAKV,MAAMwqB,UAAY,IAElD9pB,KAAKgqB,iBAAmBrnB,IACpB3C,KAAK0pB,iBAEL1pB,KAAKV,MAAMyqB,WAAa/pB,KAAKV,MAAMyqB,WAAa,KAKrD1hB,SACH,MAAMmhB,E,yWAAalY,CAAA,GAAQtR,KAAKV,MAAMkqB,oBAGT1qB,IAAzB0qB,EAAcxf,QAAwBhK,KAAKupB,kBAC3CC,EAAcxf,OAAShK,KAAKC,MAAM+J,OAElChK,KAAKG,SAAS,CACV6J,OAAQwf,EAAcxf,SAG9Bwf,EAAc/O,SAAWza,KAAKV,MAAMmb,SACpC,MAAMwP,EAActnB,IAChB,SAEA3C,KAAKV,MAAMoD,UAAY1C,KAAKV,MAAMoD,UAAY,IAGlD,OADA1C,KAAKupB,mBAAoB,EAErBpqB,gBAAA,OAAKuD,UAAWunB,EAAannB,KAAM9C,KAAKV,MAAMwD,MAC1C3D,gBAACgH,SAAMwE,OAAAC,OAAA,GACC5K,KAAKV,MAAM4qB,kBAAiB,CAChC3nB,QAASvC,KAAKiK,QAAO,gBACNuf,EAAcxf,OAC7BoS,OAAK,eACOpc,KAAKV,MAAM8C,UACvBqW,SAAUzY,KAAKV,MAAMmZ,SACrB/V,UAAU,iBACV2Z,MAAM,cAELrc,KAAKmqB,iCAAiCX,EAAcxf,SAEzD7K,gBAACwa,IAAQhP,OAAAC,OAAA,GAAK4e,KAUlBW,iCAAiCC,GACrC,MAAMC,EAAwB1nB,IAC1B,qBAEA3C,KAAKV,MAAMgrB,sBAAwBtqB,KAAKV,MAAMgrB,sBAAwB,IAE1E,MAAkC,QAA9BtqB,KAAKV,MAAMirB,eAEPprB,2BAAA,KACIA,gBAAA,QAAMuD,UAAWC,IAAW0nB,EAAuB,YAAarqB,KAAKV,MAAMkrB,kBAC1ExqB,KAAKyqB,qBAAqB,qBAAsBL,IAK3B,UAA9BpqB,KAAKV,MAAMirB,eAEPprB,2BAAA,KACKa,KAAKyqB,qBAAqB,uBAAwBL,GACnDjrB,gBAAA,QAAMuD,UAAWC,IAAW0nB,EAAuB,UAAWrqB,KAAKV,MAAMkrB,mBAI9ErrB,gBAAA,QAAMuD,UAAWC,IAAW0nB,EAAuB,YAAarqB,KAAKV,MAAMkrB,kBAS9EC,qBAAqBjgB,EAAkB4f,GAC3C,IAAIM,EAAaN,EAAgBpqB,KAAK6pB,gBAAkB7pB,KAAKgqB,iBAE7D,OADAU,EAAa,GAAGA,KAAclgB,IACvBrL,gBAAA,QAAMuD,UAAWgoB,IAOpBzgB,QAAQyF,GACZA,EAAEgJ,iBACF1Y,KAAKupB,mBAAoB,EAErBvpB,KAAKV,MAAMqrB,SACX3qB,KAAKG,SACD,CAAE6J,QAAShK,KAAKC,MAAM+J,OAAQyf,WAAY/Z,EAAE7W,cAAc+xB,WAC1D,IAAM5qB,KAAKV,MAAMqrB,UAAY3qB,KAAKV,MAAMqrB,SAAS3qB,KAAKC,QAG1DD,KAAKG,SAAS,CAAE6J,QAAShK,KAAKC,MAAM+J,Y,0IC/BjC6gB,IArGOpO,IAA2B,IAAAqO,EAC7C,MAAM,cACFnO,EAAa,UACbja,EAAS,cACTqoB,EAAa,aACb/c,EACAnM,MAAM,QAAEmpB,EAAO,MAAEC,GAAO,gBACxBC,EAAe,eACfC,EAAc,cACdC,EAAa,UACbvO,EAAS,iBACTwI,EAAgB,aAChBvI,EAAY,QACZ/O,GACA0O,EACEM,EAAa5d,cAAkB,KACjC2d,GAAa,IACd,CAACA,IACJ,IAAKH,IAAkBqO,EACnB,OAAO,KAEX,MAAM7F,EAAUC,2BAAiB,QAASC,EAAmB+C,oBAAkBiD,kBACzEC,EAA4BxF,iCAAuBT,EAAmBF,GAC5EA,EAAQS,cAAcJ,MAAQ4C,oBAAkBmD,mBAChD,MAAMC,EAAmB1F,iCAAuBT,EAAmBF,GAE7DsG,EAAmBC,8BAAoBV,EAAQW,OAAQ5d,EAAQ6d,cAAcC,eAAeC,aAC9Ff,IACAA,EAAcgB,iBAAkB,GAEpC,MAAMC,OAA+BltB,IAApBosB,EAAgCA,EAAkB,EAC7De,EACW,IAAbD,EAAiBrP,EAAcuP,kBAAoBvP,EAAcwP,qBAAqBla,QAAQ,MAAO+Z,EAAShoB,YAE5GooB,GACgB,QAAlBtB,EAAA/c,EAAQse,IAAIC,cAAM,IAAAxB,OAAA,EAAlBA,EAAoByB,2BAA4E,SAAhDxe,EAAQse,IAAIC,OAAOC,yBAEjEC,EAA4BxB,EAAQyB,WACpCzB,EAAQyB,WAAWC,OAAe,CAACC,EAAKC,IAChCA,EAAiBC,gBAAkBD,EAAiBC,eAAeC,MAC/DH,EACO,GAAGA,MAAQC,EAAiBC,eAAeC,QAG/C,GAAGF,EAAiBC,eAAeC,MAGvCH,EACR,IACH,GAEN,OACIxtB,gBAAC6d,IAAK,CAAChT,OAAQ6S,EAAWI,SAAUF,EAAYra,UAAcA,EAAH,WAAwBoI,OAAQiS,GACvF5d,gBAAC+d,IAAW,CAACpS,OAAQiS,EAAYra,UAAcA,EAAH,oBACxCvD,gBAAA,YAAO8sB,GACP9sB,gBAAA,YAAOwd,EAAcoQ,oBAEzB5tB,gBAACge,IAAS,CAACza,UAAcA,EAAH,kBAClBvD,gBAAC6tB,IAAK,CACFnB,eAAgB9d,EAAQ6d,cAAcC,eACtCnpB,UAAcA,EAAH,kBACXuqB,IAAKjC,EAAQkC,iBAAmB,GAChCC,YAAa1B,EACb2B,QAASpC,EAAQqC,KACjBrf,aAAcA,GAAgB,GAC9B+c,cAAeA,EACfuC,oBAAoB,UAExBnuB,gBAAA,QAAMuD,UAAcA,EAAH,2BAAwCsoB,EAAQqC,MAC1C,KAAtBb,EAA2BrtB,gBAAA,OAAKuD,UAAcA,EAAH,8BAA2C8pB,GAA2B,GACjHvB,EAAQ9rB,gBAAA,OAAKuD,UAAcA,EAAH,2BAAwCyoB,GAAwB,GACxFH,EAAQuC,sBAAwBnB,EAC7BjtB,gBAAA,OAAKuD,UAAcA,EAAH,mCACZvD,gBAAA,YAAO6rB,EAAQuC,uBAGnB,IAGRpuB,gBAACquB,IAAW,CAAC9qB,UAAcA,EAAH,oBACpBvD,gBAACgH,SAAMwE,OAAAC,OAAA,CACHlI,UAAcA,EAAH,uBACX6Z,KAAM6O,EAAa,aACPzO,EAAc8Q,cACtBjC,GAEH7O,EAAc8Q,cAEnBtuB,gBAACgH,SAAMwE,OAAAC,OAAA,CACHlI,UAAcA,EAAH,6BACXH,QAASwa,EAAU,aACPJ,EAAc+Q,sBACtBpC,GAEH3O,EAAc+Q,0B,kCClInC,qCAkBeC,IAHCxY,IAAA,IAAGyY,WAAYC,EAAO,KAAMtY,IAAKC,EAAG,UAAE9S,EAAS,KAAEka,GAAqBzH,EAAA,OAClFK,EAAMrW,gBAACqW,EAAG,CAAC9S,UAAWC,IAAWD,IAAaka,GAAczd,gBAAC0uB,EAAI,CAACnrB,UAAWC,IAAWD,IAAaka,K,glBCK1F,MAAMrD,UAAsBpa,YAavCE,YAAYC,GACRC,MAAMD,GAENU,KAAK8tB,uBAAyB9tB,KAAK8tB,uBAAuB5jB,KAAKlK,MAC/DA,KAAKC,MAAQ,CAAE+J,OAAQ1K,EAAM0K,QAG1B4I,oBACH5S,KAAK+tB,eAGFlb,mBAAmBmb,GAClBhuB,KAAKV,MAAM0K,SAAWgkB,EAAUhkB,QAChChK,KAAK+tB,eAINjb,sBAAsBC,EAAgCJ,GACzD,OAAI3S,KAAKC,QAAU0S,GAAa3S,KAAKV,QAAUyT,EAM5C1K,SACH,OAAOrI,KAAKV,MAAM0K,OAAShK,KAAKiuB,kBAAoB,KAGhDH,uBAAuBjsB,GAK3B,OAJI7B,KAAKC,MAAMkM,YAActK,EAAKsK,WAC9BnM,KAAKG,SAAS,CAAEgM,UAAWtK,EAAKsK,YAG7BtK,EAGHksB,eACyB,WAAzB/tB,KAAKV,MAAM4uB,YACPluB,KAAKV,MAAM0K,OACXhK,KAAKmuB,QAELnuB,KAAKouB,SAKTA,QACJpuB,KAAKG,SAAS,CAAE6J,QAAQ,IAGpBmkB,QACJnuB,KAAKG,SAAS,CAAE6J,QAAQ,IAGpBikB,kBACJ,MAAAnY,EAiBI9V,KAAKV,OAjBH,UACFqZ,EAAS,SACT8B,EAAQ,OACRzQ,EAAM,KACNqkB,EAAI,OACJvyB,EAAM,OACN8D,EAAM,kBACN0uB,EAAiB,SACjBC,EAAQ,gBACR3V,EACAM,eAAgBsV,EAAyB,UACzC3V,EAAS,UACTnW,EAAS,IACT6S,EAAG,UACHyD,EAAS,kBACTC,GAEHnD,EADM2Y,EAAK9Y,YAAAG,EAAAF,GAGNsD,EAAiBE,YAAgBC,IAAW,YAAamV,GAA4B7V,GAErFxM,GAAanM,KAAKC,MAAMkM,WAAasiB,EAAMtiB,WAAa,QAAQmM,MAAM,KAAK,GAC3EoW,EAAkBtV,YACpBC,IAAW3W,EAAWkW,EAAkB,GAAGA,KAAmBzM,IAAcA,GAC5EnM,KAAKV,MAAMqZ,WAGTgW,E,yWAAiBrd,CAAA,CACnBxV,OAAQ,CAAEA,UACVuyB,KAAM,CAAEO,QAASP,EAAMQ,SAAUP,GACjCQ,gBAAiB,CAAE7V,qBACnB8V,OAAQ,CACJH,SAAS,EACTI,MAAO,IACPC,GAAIjvB,KAAK8tB,yBAEV9U,GAGDkW,EAAgBpY,YAAiBlX,GACvC,OAAsB,OAAlBsvB,EACO,KAIP/vB,gBAACgwB,IAAWxkB,OAAAC,OAAA,GACJ6jB,EAAK,CACTzV,UAAW2V,EACX/uB,OAAQsvB,EACRE,UAAW7Z,EACXvJ,OAAQuiB,EACR7rB,UAAWgsB,EAAe,cACb1uB,KAAKC,MAAMkM,WAAasiB,EAAMtiB,UAC3C7T,MAAO,CAAE+2B,QAASrvB,KAAKC,MAAM+J,OAAS,QAAU,UAE/CyQ,GACC5B,GAAa1Z,gBAACmwB,IAAK,CAAC5sB,UAAWwW,MA3H/BK,EAAAzP,aAA6C,CACvDmP,kBAAmB,eACnB9M,UAAW,OACX0M,WAAW,EACX7O,QAAQ,EACRlO,OAAQ,EACRwyB,kBAAmB,OACnBD,MAAM,EACNH,UAAW,OACXlV,UAAW,K,2ZCVJ,MAAMuW,UAAapwB,YAYvB2T,sBAAsBC,GACzB,SAAIA,EAAU4H,IAAM3a,KAAKV,MAAMqb,KAAO5H,EAAU4H,IAM7CtS,SACH,MAAAyN,EAwBI9V,KAAKV,OAxBH,IACFiW,EAAG,UACH7S,EAAS,UACTiW,EAAS,UACT6W,EAAS,gBACTC,EAAe,OAEf1U,EAAM,MACNC,EAAK,KACLC,EACAN,GAAI+U,EAAM,aACV7U,EAAY,cACZC,EACAI,QAASyU,EAAkB,eAC3BC,EAAc,QACdzU,EAAO,WACPC,EAAU,UACVC,EAAS,OACTC,EAAM,UACNC,EAAS,SACTC,EAAQ,SACRf,GAGH3E,EADM2F,EAAU9F,YAAAG,EAAAF,GAIX8F,EAAkB,CACpBX,SACAC,QACAC,OACAN,GAAI+U,EACJ7U,eACAC,gBACAI,aATmCpc,IAAvB6wB,EAAmCA,EAAqB/T,IAAmB2T,KAUvFK,iBACAzU,UACAC,aACAC,YACAC,SACAC,YACAC,WACAf,YAGEjF,EAAMxV,KAAKV,MAAMiW,IAAMvV,KAAKV,MAAMiW,IAAM,MACxCsa,EAAkBL,GAAa,OAC/BM,EAAwBL,GAAmB,OAEjD,OACItwB,gBAACwc,IAAUhR,OAAAC,OAAA,GAAK8Q,GACVG,IACE,MAAMkU,EAAsB,YAAXlU,EACX1C,EAAUC,YAAgBC,IAAW,CAAC3W,EAAWmtB,EAAiBE,GAAYD,IAAyBnX,GAE7G,OACIxZ,gBAACqW,EAAG7K,OAAAC,OAAA,CAAClI,UAAWyW,GAAasC,GACxBhB,MA5EX8U,EAAAzlB,aAAoC,CAC9CyL,IAAK,MACLia,UAAW,OACXC,gBAAiB,OACjBvU,QAASU,IAAmB2T,KAC5B5U,IAAI,EACJI,QAAQ,EACRC,OAAO,EACPC,MAAM,I,kCC9Bd,8KA2BYmN,EA3BZ,YAkGO,SAAS4H,EAAmBC,EAAkBC,EAAoBC,GAErE,MAD4C,CAAEF,WAAUC,aAAYC,aAcjE,SAAS/K,EAAiBxV,EAAmByV,EAAqCG,EAAe4K,GAapG,MAV0B,CACtBC,gBAAiBzgB,EACjBgW,cAAe,CACX0K,OALSjL,GAAoBA,EAAiB4K,SAAW5K,EAAiB4K,SAAW,GAMrFM,MALWlL,GAAoBA,EAAiB6K,WAAa7K,EAAiB6K,WAAa,GAM3F1K,QACA4K,QACAI,MAAO5gB,IAYZ,SAASkW,EAAuBT,EAAqCF,GACxE,MAAMsL,EAActL,EAAQS,cAAcwK,MAAQjL,EAAQS,cAAcwK,MAAQjL,EAAQS,cAAcJ,MAMtG,OAJIH,GACAA,EAAiB8K,WACjB9K,EAAiB8K,UAAUO,uBAC3BrL,EAAiB8K,UAAUO,sBAAsBD,EAActL,EAAQS,gBAlH/E,SAAYwC,GACRA,EAAA,sCACAA,EAAA,kDACAA,EAAA,iCACAA,EAAA,wCACAA,EAAA,8CACAA,EAAA,uCACAA,EAAA,uCACAA,EAAA,oBACAA,EAAA,+BACAA,EAAA,kCACAA,EAAA,kCACAA,EAAA,qBACAA,EAAA,6BACAA,EAAA,mCACAA,EAAA,iCACAA,EAAA,mBACAA,EAAA,0BACAA,EAAA,8BACAA,EAAA,wBACAA,EAAA,YACAA,EAAA,iCACAA,EAAA,gBACAA,EAAA,mCACAA,EAAA,2DACAA,EAAA,uBACAA,EAAA,2BACAA,EAAA,gBACAA,EAAA,oBACAA,EAAA,iBACAA,EAAA,iBACAA,EAAA,mBACAA,EAAA,iCACAA,EAAA,uCACAA,EAAA,sCACAA,EAAA,0CACAA,EAAA,0CACAA,EAAA,wCACAA,EAAA,kCACAA,EAAA,qBACAA,EAAA,wBACAA,EAAA,YACAA,EAAA,0BACAA,EAAA,2CACAA,EAAA,qCACAA,EAAA,oDACAA,EAAA,sCACAA,EAAA,2BACAA,EAAA,YACAA,EAAA,oBACAA,EAAA,6BACAA,EAAA,wBACAA,EAAA,2BACAA,EAAA,8BACAA,EAAA,gCACAA,EAAA,+BACAA,EAAA,oCACAA,EAAA,uBACAA,EAAA,yBA1DJ,CAAYA,MAAiB,KA4HtB,MAAMuI,EAAmBA,CAACtL,EAAqCF,EAAmByL,IAAqB,KAC1GzL,EAAQS,cAAcJ,MAAQoL,EAC1BvL,GAAoBA,EAAiB8K,WACrC9K,EAAiB8K,UAAUU,SAASC,IAAeC,OAAQ5L,K,kCC1JnE,2DAOO,SAAS6L,EAASC,GACrB,MAAMC,EAAYjoB,IAAIkoB,MAAMF,GAAS,GACrC,SAAIC,EAAUE,WAAYF,EAAUG,Q,+wBCOzB,MAAMC,UAAcnyB,gBAexBkJ,SACH,MAAM,GACFlE,EAAE,UACFzB,EAAS,eACT6uB,EAAc,UACd5Y,EAAS,IACTpD,EAAG,OACHzK,EAAM,MACNuR,EAAK,OACLrS,EAAM,SACNyQ,EAAQ,WACR+W,EAAU,KACVC,EAAI,UACJC,EAAS,kBACTC,EACA,aAAcvvB,GACdpC,KAAKV,MAEH6Z,EAAUwY,EACVvY,YAAgBC,IAAW3W,EAAW,YAAa,aAAa2Z,GAAU1D,GAC1EjW,EAEAkvB,EAAexY,YAAgBC,IAAW,QAASkY,GAAiB5Y,GAEpEkZ,EAAevgB,MAAA,GACdie,IAAKzlB,cACL0nB,GAAU,IACbhC,UAAWiC,EAAO,OAAS,GAC3BvW,QAASuW,GAAQD,EAAaA,EAAWtW,QAAe,EACxDH,SAAU0W,EACVzW,QAASyW,EACTxW,OAAQwW,IAGNjc,EAAMD,GAAO,MACbuc,EAAWL,EAAO,gBAAkB,iBAEpCM,EACF5yB,2BAAA,KACK2L,EACG3L,gBAAA,WACIA,gBAAA,UACIhD,KAAK,SACLgI,GAAI2tB,EACJpvB,UAAWkvB,EAAY,aACX5xB,KAAKV,MAAM0yB,eACvBzvB,QAASuI,IAEb3L,gBAAC4K,IAAmB,CAAC5F,GAAG,eAAevE,OAAQ,IAAIkyB,EAAY3lB,UAAU,OAAK,UAIlF,KACHsO,GAIHniB,EAAQ0R,OAASlL,EAAY,CAAEuwB,QAAS,QAQ9C,OAAIoC,GAAQC,EAEJvyB,gBAACqW,EAAG,CAACld,MAAOA,EAAO6L,GAAIA,EAAIzB,UAAWyW,EAASrW,KAAK,QAAO,YAAW,YAAW,aAAaV,GAC1FjD,gBAACowB,IAAI5kB,OAAAC,OAAA,GAAKinB,EAAe,CAAEtc,IAAKC,EAAKmF,GAAI3Q,IACpC+nB,IAINN,EAEHtyB,gBAACowB,IAAI5kB,OAAAC,OAAA,CAACzG,GAAIA,GAAQ0tB,EAAe,CAAEtc,IAAKC,EAAK9S,UAAWyW,EAASrW,KAAK,QAAQ6X,GAAI3Q,IAC7E+nB,GAKT5yB,gBAACqW,EAAG,CACAld,MAAOA,EACP6L,GAAIA,EACJzB,UAAWyW,EACXrW,KAAK,QAAO,YACD4uB,EAAY,iBAAc5yB,EAAS,aAClCsD,GAEX2vB,IAvGCT,EAAAxnB,aAAqC,CAC/CuS,MAAO,UACPrS,QAAQ,EACRuL,IAAK,MACLyc,eAAgB,QAChBP,MAAM,EACNC,WAAW,EACXC,mBAAmB,EACnBH,WAAUlgB,IAAA,GACHie,IAAKzlB,cAAY,IACpBgR,eAAe,M,mMCJZ,MAAMmX,UAAkB9yB,gBASnCE,YAAYC,GACRC,MAAMD,GAkDO,KAAA4yB,eAAkBtV,GACxBzd,gBAACgzB,IAAa,CAACzvB,UAAU,uCAAuCka,KAAMA,EAAMwV,UAAWpyB,KAAKV,MAAM8yB,YAlDzGpyB,KAAKC,MAAQ,CAAEgX,WAAY,CAAE,eAAe,EAAMlU,UAAW,IAC7D/C,KAAKqyB,oBAAsBryB,KAAKqyB,oBAAoBnoB,KAAKlK,MACzDA,KAAKsyB,aAAetyB,KAAKsyB,aAAapoB,KAAKlK,MAC3C,MAAMmlB,EAAUC,2BAAiB,QAAS9lB,EAAM+lB,iBAAmB+C,oBAAkB6J,WACrFjyB,KAAKiX,WAAa6O,iCAAuBxmB,EAAM+lB,iBAAmBF,GAG/DvS,oBACHpY,OAAOqV,iBAAiB,SAAU7P,KAAKqyB,qBACvC73B,OAAOqV,iBAAiB,SAAU7P,KAAKqyB,qBACvCryB,KAAKqyB,sBAGFjf,uBACH5Y,OAAO6Y,oBAAoB,SAAUrT,KAAKqyB,qBAC1C73B,OAAO6Y,oBAAoB,SAAUrT,KAAKqyB,qBAGvChqB,SACH,MAAAyN,EAAsE9V,KAAKV,OAArE,UAAEoD,EAAS,UAAE6vB,EAAS,UAAEC,EAAS,eAAEC,GAA0B3c,EAAPxW,EAAKqW,YAAAG,EAAAF,GAC3D6E,EAAWza,KAAKV,MAAMmb,UAAYtb,gBAAA,KAAGuD,UAAU,mBACrD,OAAI1C,KAAKV,MAAMsd,KAEPzd,gBAAA,IAAAwL,OAAAC,OAAA,CACIlI,UAAW,eAAeA,GACtBpD,EACAU,KAAKC,MAAMgX,WAAU,CACzBnU,KAAK,OACLP,QAASvC,KAAKsyB,cACVtyB,KAAKiX,YAERjX,KAAKkyB,eAAelyB,KAAKV,MAAMsd,OAKxCzd,gBAAA,IAAAwL,OAAAC,OAAA,CACIlI,UAAW,eAAeA,GACtBpD,EACAU,KAAKC,MAAMgX,WAAU,CACzBnU,KAAK,OACLP,QAASvC,KAAKsyB,cACVtyB,KAAKiX,YAERwD,GASLiY,cACoE,KAAnE36B,SAAS46B,gBAAgBC,WAAa76B,SAASC,KAAK46B,aACrDC,cAAc7yB,KAAKC,MAAM6yB,YACzB9yB,KAAKG,SAAS,CAAE2yB,WAAY,IAC5B9yB,KAAKqyB,uBAGqB,IAA1BryB,KAAKC,MAAM6yB,aACXt4B,OAAOu4B,SAAS,EAAGh7B,SAASC,KAAK46B,UAAY5yB,KAAKV,MAAMmzB,gBACxD16B,SAASC,KAAK46B,UAAY76B,SAASC,KAAK46B,UAAY,EAAI76B,SAASC,KAAK46B,UAAY5yB,KAAKV,MAAMmzB,eAAiB,GAK9GH,aAAa5iB,GACjBA,EAAEgJ,iBACF,MAAMoa,EAAaE,YAAYhzB,KAAK0yB,YAAYxoB,KAAKlK,MAAOA,KAAKV,MAAMkzB,WACvExyB,KAAKG,SAAS,CAAE2yB,eAGZT,sBAKJ,MAAMO,EAAYp4B,OAAOI,aAAe7C,SAASC,KAAK46B,UAChDp6B,EAASsB,KAAKC,IAAIS,OAAOy4B,YAAal7B,SAAS46B,gBAAgBO,cAC/DX,EAAYz4B,KAAKC,SAA6B+E,IAAzBkB,KAAKV,MAAMizB,UAA0BvyB,KAAKV,MAAMizB,WAAa,EAAG,KACrFrc,EACF0c,EAAY,GAAKL,GAAa,EACxBK,GAAc76B,SAAS46B,gBAAgBzW,aAAe1jB,GAAU+5B,EAAa,IAC7EK,EAAqB,EAATp6B,EAChB26B,EAAgBjd,GAAQ,EAAI,EAClClW,KAAKG,SAAS,CAAE8W,WAAY,CAAE,cAAef,EAAMnT,SAAUowB,MAhGnDlB,EAAAnoB,aAAyC,CACnDpH,UAAW,2BACX8vB,UAAW,EACXC,eAAgB,K,gICPT,MAAMW,UAA4Bj0B,gBAqC7CE,YAAYC,GACRC,MAAMD,GAzBF,KAAA+zB,aAAuB,EAEvB,KAAAC,UAAoB,EAEpB,KAAAC,SAAmB,EAgBV,KAAAC,iBAA2B,OAE3B,KAAAC,iBAA2B,OAkS3B,KAAAC,WAAa,KAC1B1zB,KAAK2zB,sBA/RL3zB,KAAK4zB,WAAa5zB,KAAK4zB,WAAW1pB,KAAKlK,MACvCA,KAAK6zB,eAAiB7zB,KAAK6zB,eAAe3pB,KAAKlK,MAC/CA,KAAK8zB,kBAAoB9zB,KAAK8zB,kBAAkB5pB,KAAKlK,MACrDA,KAAK+zB,gBAAkB/zB,KAAK+zB,gBAAgB7pB,KAAKlK,MACjDA,KAAKg0B,SAAWh0B,KAAKg0B,SAAS9pB,KAAKlK,MACnCA,KAAK0zB,WAAa1zB,KAAK0zB,WAAWxpB,KAAKlK,MACvCA,KAAKC,MAAQ,CAAEg0B,cAAc,EAAOC,UAAU,EAAOp4B,OAAQ,GAC7DkE,KAAKoL,IAAMjM,cACXa,KAAKm0B,SAAWh1B,cAChBa,KAAKo0B,QAAUj1B,cACfa,KAAK0M,UAAY,OACjB1M,KAAKmE,GAAK7E,EAAM+0B,UAAY,GAC5Br0B,KAAKs0B,qBAAsDx1B,IAApCkB,KAAKV,MAAMi1B,qBAAqCv0B,KAAKV,MAAMi1B,qBAAuB,IAGtG1hB,qBACH7S,KAAKw0B,SAAWx0B,KAAKoL,IAAIvF,QACzB7F,KAAKy0B,MAAQz0B,KAAKm0B,SAAStuB,QAC3B7F,KAAK3H,KAAO2H,KAAKo0B,QAAQvuB,QACzB7F,KAAK00B,YACL10B,KAAK20B,gBAAgB30B,KAAKC,MAAMnE,QAG7B8W,oBACH5S,KAAK0M,UAAY1M,KAAKV,MAAMsN,SAAW,MAAQ,OAC/C5M,KAAKw0B,SAAWx0B,KAAKoL,IAAIvF,QACzB7F,KAAKy0B,MAAQz0B,KAAKm0B,SAAStuB,QAC3B7F,KAAK3H,KAAO2H,KAAKo0B,QAAQvuB,QACzB7F,KAAK00B,YACL10B,KAAK40B,4BAA8Bp6B,QAAUq6B,YAAkBr6B,OAAQ,SAAUwF,KAAK0zB,YACtF1zB,KAAK20B,gBAAgB,GAGlBvhB,uBACH5Y,QAAUA,OAAO6Y,oBAAoB,SAAUrT,KAAK40B,6BAA8B,GAG/EvsB,SACH,MAAMysB,GAA0C,IAAxB90B,KAAKV,MAAMsN,SAC7BmoB,EAAqB,GACrBC,EAAmBh1B,KAAKi1B,mBAAmBH,GACjDC,EAAmB/0B,KAAK0M,WAAgB1M,KAAKC,MAAMnE,OAAd,KACrC,MAAMo5B,EAAgBJ,EAAS,uBAAyB,kBAClDK,EAAqBL,EAAS,6BAA+B,wBAC7DM,EAAgBN,EAAS,6BAA+B,wBACxDO,EAAuBP,EAAS,iBAAmB,mBACnDQ,EAAmBR,EAAS,mBAAqB,oBACjDS,EAA2BT,EAAS,gCAAkC,2BACtEU,EAAuBV,EACvB,oEACA,0DACAW,EAAoBz1B,KAAKC,MAAMg0B,cAAiBj0B,KAAKC,MAAMi0B,SAAwB,KAAb,WAC5E,OACI/0B,gBAAA,OAAKuD,UAAWwyB,EAAeQ,aAAc11B,KAAK8zB,kBAAmBnoB,WAAY3L,KAAK+zB,iBAClF50B,gBAACsnB,IAAO,CACJtiB,GAAI,yBAAyBnE,KAAKmE,GAClCwiB,WAAY,CAAEjkB,UAAW2yB,GACzB9yB,QAASvC,KAAK6zB,eACdnxB,UAAY1C,KAAKC,MAAMg0B,aAAmE,GAAGsB,EAAvD,GAAGA,KAA4BE,IAAkD,eACzGz1B,KAAKC,MAAMg0B,aAAY,aACzBj0B,KAAKV,MAAMm0B,iBACvBhb,UAAWzY,KAAKC,MAAMg0B,aACtBrN,kBAAmB5mB,KAAKV,MAAMm0B,kBAAoBzzB,KAAKV,MAAMm0B,iBAAiB50B,OAAS,GACvFwmB,iBAAkBrlB,KAAKV,MAAM+lB,iBAC7BqB,eAAgB1mB,KAAKyzB,mBAEzBt0B,gBAACsnB,IAAO,CACJtiB,GAAI,qBAAqBnE,KAAKmE,GAC9BwiB,WAAY,CAAEjkB,UAAW4yB,GACzB/yB,QAASvC,KAAK4zB,WACdlxB,UAAY1C,KAAKC,MAAMi0B,SAA2D,GAAGsB,EAAnD,GAAGA,KAAwBC,IAA8C,eAC7Fz1B,KAAKC,MAAMi0B,SAAQ,aACrBl0B,KAAKV,MAAMk0B,iBACvB/a,UAAWzY,KAAKC,MAAMi0B,SACtBtN,kBAAmB5mB,KAAKV,MAAMk0B,kBAAoBxzB,KAAKV,MAAMk0B,iBAAiB30B,OAAS,GACvFwmB,iBAAkBrlB,KAAKV,MAAM+lB,iBAC7BqB,eAAgB1mB,KAAKwzB,mBAEzBr0B,gBAAA,OAAKiM,IAAKpL,KAAKoL,IAAK1I,UAAW,GAAG0yB,GAC9Bj2B,gBAAA,MACIuD,UAAWyyB,EACX78B,MAAOy8B,EACP3pB,IAAKpL,KAAKm0B,SACVrxB,KAAM9C,KAAKV,MAAMq2B,WAAa,UAAY,QAEzCX,KAObC,mBAAmBH,GACvB,OAAO31B,WAAeyC,IAAI5B,KAAKV,MAAMmb,SAAU,CAACmb,EAAwBp1B,KACpE,MAAMq1B,EAAaD,EACnB,OAAc,IAAVp1B,EACOrB,eAAmB02B,EAAW,CACjCnzB,UAAW,GAAGoyB,EAAS1B,EAAoB0C,sBAAwB1C,EAAoB2C,iBACnFF,EAAUv2B,MAAMoD,YAIpB0I,IAAKpL,KAAKo0B,QACVtoB,QAAS9L,KAAKg0B,WAGf70B,eAAmB02B,EAAW,CACjCnzB,UAAW,GAAGoyB,EAAS1B,EAAoB0C,sBAAwB1C,EAAoB2C,iBACnFF,EAAUv2B,MAAMoD,YAIpBoJ,QAAS9L,KAAKg0B,aAKlBJ,aACJ5zB,KAAKg2B,kBAAiB,GAGlBnC,iBACJ7zB,KAAKg2B,kBAAiB,GAGlBlC,kBAAkBmC,GACK,IAAvBA,EAAIxlB,QAAQ5R,OACZmB,KAAKk2B,iBAAcp3B,EAEnBkB,KAAKk2B,aAAsC,IAAxBl2B,KAAKV,MAAMsN,SAAoBqpB,EAAIxlB,QAAQ,GAAG0lB,QAAUF,EAAIxlB,QAAQ,GAAG2lB,QAI1FrC,gBAAgBkC,GACpB,GAAIA,EAAII,eAAex3B,OAAS,QAA0BC,IAArBkB,KAAKk2B,YAA2B,CACjE,MAEMI,IAF4C,IAAxBt2B,KAAKV,MAAMsN,SAAoBqpB,EAAII,eAAe,GAAGF,QAAUF,EAAII,eAAe,GAAGD,SAErFp2B,KAAKk2B,YAE3BI,EAAQt2B,KAAKs0B,iBACbt0B,KAAK6zB,iBAGLyC,GAASt2B,KAAKs0B,iBACdt0B,KAAK4zB,aAIb5zB,KAAKk2B,iBAAcp3B,EAKfk3B,iBAAiB1Q,GACrB,IAAIiR,EAAgBh7B,OAAOsZ,SAAS2hB,YAAOx2B,KAAKy0B,MAAQz0B,KAAK0M,WAAY,IACzE,MAAM2mB,EAAerzB,KAAKqzB,aAC1B,IAAIoD,EAAiB38B,KAAK48B,MAAMrD,EAAerzB,KAAKuzB,UACpD,MAAMoD,EAAoBrR,GAAQ,EAAI,EACtCiR,EAAiBxe,MAAMwe,IAA2C,iBAAlBA,EAA6C,EAAhBA,EAEtD,IAAnBE,IACAA,EAAiB,GAGrBA,EAAiBpD,EAAerzB,KAAKuzB,UAAa,EAAIkD,EAAiB,EAAIA,EAC3EA,EAAiB38B,KAAKE,IAAIy8B,EAAgB,GAC1C,MAAMG,EAAoBH,EAAiBz2B,KAAKuzB,SAChD,IAAIsD,EAAiBvR,EAAOtlB,KAAKszB,UAAYD,EAAekD,EAAgBz8B,KAAKg9B,IAAIP,GACrFM,EAAiB/8B,KAAKE,IAAI,EAAG68B,GAE7B,MAAM/6B,EACF86B,GAAqBC,EACfD,EAAoBD,EAAoBJ,EACxCM,EAAiBF,EAAoBJ,EAE/Cv2B,KAAK20B,gBAAgB74B,GAGjB44B,YACJ,MAAMr8B,EAAO2H,KAAK3H,KAEd2H,KAAKuzB,SADLl7B,EACgB2H,KAAKV,MAAMsN,SAAWvU,EAAK6jB,aAAe7jB,EAAK0+B,YAE/C,EAGpB/2B,KAAKqzB,aAAerzB,KAAKg3B,yBACzBh3B,KAAKszB,UAAYtzB,KAAKy0B,MAASz0B,KAAKV,MAAMsN,SAAW5M,KAAKy0B,MAAMvY,aAAelc,KAAKy0B,MAAMsC,YAAe,EAGrGC,yBACJ,IAAKh3B,KAAKw0B,SACN,OAAO,EAGX,MAAMyC,EAAgBC,iBAAiBl3B,KAAKw0B,UAEtC2C,EAAUn3B,KAAKV,MAAMsN,SACrBrR,OAAO6jB,WAAW6X,EAAcG,YAAc,IAAM77B,OAAO6jB,WAAW6X,EAAcI,eAAiB,IACrG97B,OAAO6jB,WAAW6X,EAAcK,aAAe,IAAM/7B,OAAO6jB,WAAW6X,EAAcM,cAAgB,IAE3G,OAAOv3B,KAAKV,MAAMsN,SAAW5M,KAAKw0B,SAAStB,aAAeiE,EAAUn3B,KAAKw0B,SAASgD,YAAcL,EAG5FM,mBAAmB37B,GACvB,OAAQic,MAAMjc,IAAsB,IAAXA,EAGrB47B,eAAe57B,GACnB,QAAIkE,KAAKqzB,aAAev5B,KAAKg9B,IAAIh7B,IAAWkE,KAAKszB,WAO7CqB,gBAAgB74B,GACpBkE,KAAKG,SAAS,CACV8zB,aAAcj0B,KAAKy3B,mBAAmB37B,GACtCo4B,SAAUl0B,KAAK03B,eAAe57B,GAC9BA,WAIA67B,oBAAoBt/B,GACxB,MAAMg7B,EAAerzB,KAAKqzB,aAC1B,IAAIv3B,EAASkE,KAAKV,MAAMsN,SAAWvU,EAAKu/B,UAAYv/B,EAAKw/B,WACrDC,GAAe,EAEnB,MAAMv9B,EAAOgB,OAAOsZ,SAAS2hB,YAAOx2B,KAAKy0B,MAAQ,QAAS,KAAO,EAC3D95B,EAAMY,OAAOsZ,SAAS2hB,YAAOx2B,KAAKy0B,MAAQ,OAAQ,KAAO,EAE3Dz0B,KAAKV,MAAMsN,SACPjS,EAAM,IAAMA,EAAMmB,GACH,IAAXA,IACAA,EAAmB,EAATA,GAEdg8B,GAAe,GACRn9B,EAAMmB,EAASu3B,EAAerzB,KAAKuzB,WAC1Cz3B,EAASu3B,EAAerzB,KAAKuzB,SAAWz3B,EAAS,EACjDg8B,GAAe,GAEO,SAAnB93B,KAAK0M,YACRnS,EAAO,IAAMA,EAAOuB,GACL,IAAXA,IACAA,EAAmB,EAATA,GAEdg8B,GAAe,GACRv9B,EAAOuB,EAASu3B,EAAerzB,KAAKuzB,WAC3Cz3B,EAASu3B,EAAerzB,KAAKuzB,SAAWz3B,EAAS,GACjDg8B,GAAe,IAInBA,IACA93B,KAAK20B,gBAAgB74B,GAEjBkE,KAAKV,MAAMsN,SACX4K,WAAW,KACNxX,KAAKy0B,MAAer5B,cAAew3B,UAAY,GACjD,GAEHpb,WAAW,KACNxX,KAAKy0B,MAAer5B,cAAe28B,WAAa,GAClD,IAKP/D,SAASr7B,GACb,MAAMiH,EAASjH,EAAME,cACrBmH,KAAK23B,oBAAoB/3B,GAGrB+zB,qBACJ3zB,KAAK00B,YACL,IAAI54B,EAASP,OAAOsZ,SAAS2hB,YAAOx2B,KAAKy0B,MAAQz0B,KAAK0M,WAAY,KAG7DqL,MAAMjc,IAAWA,EAAS,GAAKkE,KAAKszB,UAAYx3B,EAASkE,KAAKqzB,eAC/Dv3B,EAAShC,KAAKC,IAAI,EAAGiG,KAAKqzB,aAAerzB,KAAKszB,YAGlDtzB,KAAK20B,gBAAgB74B,IAjUDs3B,EAAA2C,cAAwB,uBAExB3C,EAAA0C,sBAAgC,6B,kCCvB5D,0V,uZCyBe,MAAMkC,UAAyB74B,gBAa1CE,YAAYC,GACRC,MAAMD,GACN,MAAM,UAAEwqB,EAAS,WAAEC,GAAe/pB,KAAKV,MACvCU,KAAKiK,QAAUjK,KAAKiK,QAAQC,KAAKlK,MACjCA,KAAKupB,mBAAoB,EACzBvpB,KAAKC,MAAQ,CAAE+J,OAAS1K,EAAMkqB,eAAiBlqB,EAAMkqB,cAAcxf,SAAW,GAC9EhK,KAAKi4B,WAAaj4B,KAAKC,MAAM+J,OAC7BhK,KAAK0pB,iBAAmB/mB,IAAW,gBAAiB3C,KAAKV,MAAMqqB,sBAAwB,IACvF3pB,KAAKmlB,QAAUC,2BAAiB,QAAS9lB,EAAM+lB,iBAAmB,IAE9DrlB,KAAKV,MAAMsqB,cACX5pB,KAAK6pB,gBAAkBlnB,IAAW,CAAC3C,KAAK0pB,iBAAkBI,GAAaC,GAAc,KACrF/pB,KAAKgqB,iBAAmBhqB,KAAK6pB,kBAE7B7pB,KAAK6pB,gBAAkBlnB,IAAW,CAAC3C,KAAK0pB,iBAAkBI,GAAa,KACvE9pB,KAAKgqB,iBAAmBrnB,IAAW,CAAC3C,KAAK0pB,iBAAkBK,GAAc,MAI1E1hB,SACH,MAAMmhB,E,yWAAalY,CAAA,GAAQtR,KAAKV,MAAMkqB,eACtCA,EAAcxf,OAAShK,KAAKupB,kBAAoBvpB,KAAKC,MAAM+J,OAASwf,EAAcxf,SAAU,EAC5Fwf,EAAc/O,SAAWza,KAAKV,MAAMmb,SACpC,MAAMwP,EAActnB,IAAW,SAAU3C,KAAKV,MAAMoD,WAAa,IACjE1C,KAAKupB,mBAAoB,EACzBvpB,KAAKi4B,WAAazO,EAAcxf,OAChChK,KAAKG,SAAS,CAAE6J,OAAQwf,EAAcxf,SACtChK,KAAKmlB,QAAQS,cAAcJ,MAAQgE,EAAcxf,OAASoe,oBAAkBzO,SAAWyO,oBAAkB8P,OACzG,MAAMjhB,EAAa6O,iCAAuB9lB,KAAKV,MAAM+lB,iBAAmBrlB,KAAKmlB,SAC7E,OACIhmB,gBAAA,OAAKuD,UAAWunB,GACZ9qB,gBAACgH,SAAMwE,OAAAC,OAAA,GACC5K,KAAKV,MAAM4qB,kBAAiB,CAChC3nB,QAASvC,KAAKiK,QAAO,gBACNuf,EAAcxf,OAC7BoS,OAAK,EACL3D,SAAUzY,KAAKV,MAAMmZ,SACrB/V,UAAU,kBACNuU,GAEHjX,KAAKmqB,iCAAiCX,EAAcxf,SAEzD7K,gBAACwa,IAAQhP,OAAAC,OAAA,GAAK4e,KAKlBW,iCAAiCC,GACrC,MAAM,iBAAEI,GAAqBxqB,KAAKV,MAC5B+qB,EAAwB1nB,IAAW,qBAAsB3C,KAAKV,MAAMgrB,uBAAyB,IACnG,GAAkC,QAA9BtqB,KAAKV,MAAMirB,eACX,OACIprB,2BAAA,KACKa,KAAKm4B,eAAex1B,IAAW0nB,EAAuB,WAAYG,EAAiBxmB,YACnFhE,KAAKyqB,qBAAqB,qBAAsBL,IAK7D,MAAMgO,EAAwC,UAA9Bp4B,KAAKV,MAAMirB,eACrB8N,EAAsB,MAAKD,EAAU,MAAQ,SACnD,OACIj5B,2BAAA,KACKi5B,GAAWp4B,KAAKyqB,qBAAqB,uBAAwBL,GAC7DpqB,KAAKm4B,eAAex1B,IAAW0nB,EAAuBgO,GAAsBr4B,KAAKV,MAAMkrB,iBAAiBxmB,aAK7Gm0B,eAAeG,EAAyBjyB,GAC5C,OAAIrG,KAAKV,MAAMi5B,cAAgBv4B,KAAKV,MAAMusB,eAElC1sB,gBAACgzB,IAAa,CACV5c,IAAI,OACJqH,KAAMvW,EACN3D,UAAW41B,EACXlG,UAAW,CAAE7sB,OAAQvF,KAAKV,MAAMi5B,aAAc1M,eAAgB7rB,KAAKV,MAAMusB,kBAI9E1sB,gBAAA,QAAMuD,UAAW41B,GAAkBjyB,GAGtCokB,qBAAqBjgB,EAAkB4f,GAC3C,MAAMM,EAAa,GAAGN,EAAgBpqB,KAAK6pB,gBAAkB7pB,KAAKgqB,oBAAoBxf,IACtF,OAAOrL,gBAAA,QAAMuD,UAAWgoB,IAGpBzgB,QAAQyF,GACZA,EAAEgJ,iBACF1Y,KAAKi4B,YAAcj4B,KAAKi4B,WACxBj4B,KAAKG,SAAS,CAAE6J,OAAQhK,KAAKi4B,aAC7Bj4B,KAAKupB,mBAAoB,EACrBvpB,KAAKV,MAAMqrB,UACX3qB,KAAKV,MAAMqrB,SAAS3qB,KAAKC,U,0YCpG9B,SAAS8Q,EAAMhN,EAAehK,EAAaC,GAC9C,OAAID,GAAOC,EACAF,KAAKC,IAAID,KAAKE,IAAI+J,EAAOhK,GAAMC,GAEnC,EAQJ,SAASqV,EAAqBtL,GACjC,OAAIA,EAAMlF,OAAS,EACRkF,EAAMub,OAAO,GAAGkZ,cAAgBz0B,EAAM00B,OAAO,GAEnC,IAAjB10B,EAAMlF,OACCkF,EAAMub,OAAO,GAAGkZ,cAEpB,GAOJ,SAAShC,EAAOr8B,EAAsBu+B,GACzC,IAAIpgC,EAAQ6B,EAAQ7B,MAAMogC,GAM1B,OAJKpgC,IACDA,EAAQ4+B,iBAAiB/8B,GAASu+B,IAG/BpgC,EAGJ,SAASqgC,EAAqBC,EAAyBrG,GAE1D,IAAIsG,EACAC,EAAO,EAEX,OAAQngC,IACJ,MAAMogC,EAAMC,KAAKD,MAEbF,IACA1gB,aAAa0gB,GACbA,OAAQ/5B,GAGRg6B,GAAQC,EAAMD,EAAOvG,EACrBsG,EAAQrhB,WAAW,KACfshB,EAAOE,KAAKD,MACZH,EAASjgC,IACV45B,GAAawG,EAAMD,KAEtBA,EAAOC,EACPH,EAASjgC,KAKd,SAASk8B,EACZj1B,EACAqC,EACA22B,GACuB,IAAvBrG,EAAA3zB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAoB,IAEpB,MAAMq6B,EAAwBN,EAAqBC,EAAUrG,GAG7D,OAFA3yB,EAAOiQ,iBAAiB5N,EAAMg3B,GAAuB,GAE9CA,EAMJ,SAAS7f,IAAsD,IAAtC1W,EAAA9D,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAoB,GAAI+Z,EAAc/Z,UAAAC,OAAA,EAAAD,UAAA,QAAAE,EAClE,OAAK6Z,EAIEjW,EACF4V,MAAM,KACN1W,IAAKs3B,GAAcvgB,EAAUugB,IAAMA,GACnCC,KAAK,KANCz2B,EAkDR,MAAM02B,IAAiC,oBAAX5+B,SAA0BA,OAAOzC,WAAYyC,OAAOzC,SAAS2E,eAwBzF,SAAS28B,EAAUz5B,GACtB,MAAM05B,EAvBH,SAAyB15B,GAC5B,IACI,GAAsB,iBAAXA,GAAuBw5B,EAAW,CACzC,IAAIE,EAAYvhC,SAASwhC,iBAAiB35B,GAM1C,GAJyB,IAArB05B,EAAUz6B,SACVy6B,EAAYvhC,SAASwhC,iBAAiB,IAAI35B,IAGrB,IAArB05B,EAAUz6B,OACV,MAAM,IAAIojB,MAEd,OAAOqX,EAGX,OAAO15B,EACT,MAAA45B,GAEE,OADAC,QAAQC,MAAM,eAAe95B,8DACtB,MAKO+5B,CAAwB/5B,GAC1C,OAAI05B,GAAaA,EAAUz6B,OAAS,EACZy6B,EAAU,GAG3B15B,EAGJ,SAASkX,EAAiBlX,GAC7B,MAAMsvB,EAAgBmK,EAAUz5B,GAChC,OA3EG,SAAeA,GAClB,QAAKA,QAIqDd,IAApBc,EAAQiG,QAsE1C+zB,CAAM1K,GACgCA,EAAerpB,QAnEtD,SAAmBjG,GACtB,QAAKA,QAI6Cd,IAA7Bc,EAAQiQ,iBAgEzBgqB,CAAU3K,GACUA,EAGjB,KAGJ,MAAMtT,EAAqB,CAC9B2T,KAAM,IACN5V,SAAU,IACVqD,MAAO,IACP8c,SAAU,KAKDC,EAAoB,CAC7B,UACA,aACA,2CACA,yBACA,2BACA,yBACA,SACA,SACA,QACA,yBACA,kBACA,kBACA,oDA0GG,SAASC,EAAiCC,GAK7C,OAF0CA,GAFf,K,yMChUhB,MAAMC,UAAuB/6B,gBAKjCkJ,SAEH,MAAAyN,EAA4E9V,KAAKV,OAA3E,OAAE0Q,EAAM,UAAEtN,EAAS,UAAEiW,EAAS,SAAEF,EAAUlD,IAAKC,GAAeM,EAAPxW,EAAKqW,YAAAG,EAAAF,GAE5DukB,EAAwB/gB,YAC1BC,IAAW3W,EAAW,gBAAiB,CACnCsN,SACAyI,aAEJE,GAGJ,OAAOxZ,gBAACqW,EAAG7K,OAAAC,OAAA,GAAKtL,EAAK,CAAEoD,UAAWy3B,MAhBxBD,EAAApwB,aAA8C,CACxDyL,IAAK,O,0IC2DN,MAAM6kB,EAA8DjlB,IAAqB,IAApB,aAAEklB,GAAcllB,EACxF,OAAKklB,EAKDl7B,gBAAA,QAAMuD,UAAU,gCACZvD,gBAAA,YAAOk7B,IALJ,MAaR,MAAMC,UAAoBn7B,YAG7BE,YAAmBC,GACfC,MAAMD,GA+HO,KAAAi7B,UAAYC,UACzB7hC,EAAM+f,iBACN,MAAM+hB,EAAwDz6B,KAAKV,MAAMme,KAAK7b,IAAI,CAAC84B,EAAwBl6B,KACvG,MAAM4gB,EAAuBphB,KAAKC,MAAM06B,OAAOp/B,OAAOiF,IACtD,MAAO,CACHk6B,QAAS,CAAEE,WAAYF,EAAQE,WAAaC,cAAeH,EAAQG,eACnE92B,MAAOqd,WAGTphB,KAAKV,MAAMw7B,SAASL,GAC1Bz6B,KAAKG,SAAU4K,IACJ,CAAE4vB,OAAQ5vB,EAAc4vB,OAAQI,aAAa,MAS3C,KAAAC,eAAiBR,UAAoE,IAAAS,EAClGtiC,EAAM+f,iBACN,MAAMwiB,EAA4B3/B,OAAOsZ,SAAgD,QAAxComB,EAACtiC,EAAMiH,OAAO/C,aAAa,qBAAa,IAAAo+B,IAAI,GAAI,IACjG,GAAIx6B,mBAAiB6jB,kBAAkB4W,GACnC,OAAOC,QAAQC,OAAO,IAAInZ,MAAM,uCAEpC,MAAM2B,EAAW,CACb+W,OAAQ36B,KAAKC,MAAM06B,OAAO/4B,IAAI,CAACmC,EAAevD,KAC1C,MAAM66B,EAA4Br7B,KAAKV,MAAMme,KAAKliB,OAAOiF,IACE,IAAD86B,EAA1D,OAAI96B,IAAU06B,GAAqBG,EAAWT,YAC1C56B,KAAKu7B,qBAAqBC,SACtBH,EAAWT,WACW,QAAtBU,EAACD,EAAWI,kBAAU,IAAAH,MAAqC,KAAvB3iC,EAAMiH,OAAOmE,OAE9CpL,EAAMiH,OAAOmE,OAEjBA,KAIf,OADA/D,KAAKG,SAASyjB,GACPuX,QAAQO,WAtKf17B,KAAKC,MAAQ,CAAE06B,OAAQ36B,KAAKV,MAAMme,KAAK7b,IAAI,IAAM,IAAKm5B,aAAa,GAGnE/6B,KAAKu7B,qBAAuB,IAAII,aAChC,IAAK,MAAMjB,KAAW16B,KAAKV,MAAMme,KAAM,CACV,IAADme,EAAxB,GAAIlB,EAAQE,WACR56B,KAAKu7B,qBAAqBC,SAASd,EAAQE,WAA8B,QAApBgB,EAAElB,EAAQe,kBAAU,IAAAG,OAK9E9oB,sBAAsBC,EAA8BJ,GACvD,OACI3S,KAAKV,MAAM0C,UAAY+Q,EAAU/Q,SACjChC,KAAKV,MAAMu8B,wBAA0B9oB,EAAU8oB,uBAC/C77B,KAAKV,MAAMw8B,mBAAqB/oB,EAAU+oB,kBAC1C97B,KAAKV,MAAMy8B,mCAAqChpB,EAAUgpB,oCAOzD/7B,KAAKV,MAAMme,KAAKue,MAAM,CAACtB,EAAwBl6B,IAExCuS,EAAU0K,KAAKliB,OAAOiF,IAAQi7B,aAAef,EAAQe,YACrD1oB,EAAU0K,KAAKliB,OAAOiF,IAAQo6B,aAAeF,EAAQE,YACrD7nB,EAAU0K,KAAKliB,OAAOiF,IAAQq6B,gBAAkBH,EAAQG,iBAShE76B,KAAKC,MAAM86B,cAAgBpoB,EAAUooB,cACpC/6B,KAAKC,MAAM06B,OAAOqB,MAAM,CAACj4B,EAAevD,IAC9BuD,IAAU4O,EAAUpX,OAAOiF,OASvC6H,SACH,OACIlJ,2BAAA,MACMa,KAAKC,MAAM86B,aAAekB,kBAAgBC,YAAYl8B,KAAKV,MAAMme,OAC/Dte,gBAAA,OAAKuD,UAAU,4DACXvD,gBAAA,MAAIuD,UAAU,6BAA6B1C,KAAKV,MAAM0C,SACtD7C,gBAAA,OAAKuD,UAAU,oCACXvD,gBAAA,QACI27B,SAAU96B,KAAKu6B,UACf73B,UAAU,yBAAwB,aACtB1C,KAAKV,MAAMw8B,iBACvBK,aAAa,MAEZn8B,KAAKV,MAAMme,KACP1I,OAAQ2lB,IAEAj6B,mBAAiB6jB,kBAAkBoW,EAAQE,cAC3Cn6B,mBAAiB6jB,kBAAkBoW,EAAQG,gBAGnDj5B,IAAI,CAAC84B,EAAwBl6B,KAAiB,IAAA47B,EAAAC,EAC3C,MAAMjb,EAAuBphB,KAAKC,MAAM06B,OAAOp/B,OAAOiF,IACtD,OACIrB,gBAAA,OAAKyD,IAAK83B,EAAQE,WAAYl4B,UAAU,yBACpCvD,gBAAA,SACIgF,GAAOu2B,EAAQE,WAAX,SACJxc,QAASsc,EAAQE,WACjBl4B,UAAU,2BAET,GAAGg4B,EAAQG,gBAAiBH,EAAQe,WAAa,KAAO,KACxDz7B,KAAKu7B,qBAAqBe,SAAS5B,EAAQE,aACxCz7B,gBAACi7B,EAAyB,CACtBC,aAAcr6B,KAAKV,MAAMy8B,mCAGjC58B,gBAAA,SACIhD,KAAK,OACLgI,GAAOu2B,EAAQE,WAAX,SACJl4B,UAAU,0BACVE,IAAK83B,EAAQE,WAAU,aACXp6B,EACZ2C,SAAUnD,KAAKg7B,eACfj3B,MAAOqd,EAAY,aACPsZ,EAAQG,cAAa,gBACA,QADAuB,EAClB1B,EAAQe,kBAAU,IAAAW,KACjCG,SAA4B,QAApBF,EAAE3B,EAAQe,kBAAU,IAAAY,WAMpDl9B,gBAAA,OAAKuD,UAAU,yBACXvD,gBAACgH,IAAM,cACSnG,KAAKV,MAAMw8B,iBACvBp5B,UAAU,mCACV+V,SAAUzY,KAAKw8B,2BAEdx8B,KAAKV,MAAMw8B,sBAOnC97B,KAAKC,MAAM86B,aAAe/6B,KAAKV,MAAMu8B,uBAKlD,gCAEI,OAD0B,IACnB77B,KAAKu7B,qBAAqBkB,YAAYC,UAAWC,GAAuBA,M,8IC/MhF,SAASt6B,EAAOu6B,GAA6C,QAAAC,EAAAj+B,UAAAC,OAAjBi+B,EAAiB,IAAA3kC,MAAA0kC,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAjBD,EAAiBC,EAAA,GAAAn+B,UAAAm+B,GAChE,OAAKH,EAIEA,EAAgB3qB,QAAQ,WAAY,CAAC+qB,EAAex8B,KACvD,GAAIA,GAASs8B,EAAWj+B,OACpB,OAAOm+B,EAGX,MAAMj5B,EAAQ+4B,EAAWt8B,GAEzB,MAAqB,iBAAVuD,GAAuBA,EAIb,iBAAVA,EACAA,EAGJA,EAAMC,WAPF,KAXJ,GA8BR,SAASi5B,EAAmBl5B,GAC/B,OAAQA,GAA0B,iBAAVA,IAWrB,SAAcA,GAEjB,IAAKA,GAA0B,iBAAVA,EACjB,OAAOA,EAGX,GAAIA,EAAMf,KACN,OAAOe,EAAMf,OAGjB,OAAOe,EAAMkO,QAAQ,aAAc,IArBYjP,CAAKe,K,iaCtBzC,MAAMmF,UAA+B/J,gBAsBhDE,YAAYC,GACRC,MAAMD,GATF,KAAA49B,WAAqB,EAUzBl9B,KAAKm9B,SAAWn9B,KAAKV,MAAM8J,MAAQtP,KAAKsjC,KAAKp9B,KAAKV,MAAM8J,MAAQpJ,KAAKV,MAAM+J,cAAiB,EAC5FrJ,KAAKk9B,WAAapjC,KAAK48B,OAAO12B,KAAKV,MAAMgK,cAAgB,GAAKtJ,KAAKV,MAAM+J,cACzErJ,KAAKq9B,KAAO,GACZ,MAAMC,EAAWt9B,KAAKV,MAAM2J,IAAIqP,MAAM,KAEtC,GAAIglB,EAAS,GAAI,CACbt9B,KAAKiJ,IAAMq0B,EAAS,GACpB,MAAMC,EAAcD,EAAS,GAAGhlB,MAAM,KACtCtY,KAAKw9B,KAAOD,EAAY,GAAK,IAAIA,EAAY,GAAO,GACpD,MAAME,EAAaF,EAAY,GAAGjlB,MAAM,KAExC,IAAK,MAAMnP,KAAOs0B,EAAY,CAC1B,MAAMC,EAAUv0B,EAAImP,MAAM,KAEtBtY,KAAKV,MAAM6J,MAAQu0B,EAAQ,KAC3B19B,KAAKq9B,KAAKK,EAAQ,IAAMA,EAAQ,SAGrC,CACH,MAAMH,EAAcD,EAAS,GAAGhlB,MAAM,KACtCtY,KAAKiJ,IAAMs0B,EAAY,GACvBv9B,KAAKw9B,KAAOD,EAAY,GAAK,IAAIA,EAAY,GAAO,IAIrDl1B,SAEH,MAAAyN,EAoBS9V,KAAKV,OApBR,UACFoD,EAAS,QACTi7B,EAAO,IACPx0B,EAAG,MACHC,EAAK,aACLC,EAAY,aACZC,EAAY,aACZC,EAAY,SACZT,EAAQ,kBACRU,EAAiB,cACjBC,EAAa,cACbm0B,EAAa,UACbjlB,EAAS,SACT8B,EAAQ,KACRrhB,EACAmc,IAAKC,EACLqoB,QAASC,EACT,aAAc1wB,EAAK,KACnBtK,GAEHgT,EADMxW,EAAKqW,YAAAG,EAAAF,GAGZ5V,KAAKm9B,SAAWn9B,KAAKV,MAAM8J,MAAQtP,KAAKsjC,KAAKp9B,KAAKV,MAAM8J,MAAQpJ,KAAKV,MAAM+J,cAAiB,EAC5FrJ,KAAKk9B,WAAapjC,KAAK48B,OAAO12B,KAAKV,MAAMgK,cAAgB,GAAKtJ,KAAKV,MAAM+J,cACzErJ,KAAKq9B,KAAO,GACZ,MAAMC,EAAWt9B,KAAKV,MAAM2J,IAAIqP,MAAM,KAEtC,GAAIglB,EAAS,GAAI,CACbt9B,KAAKiJ,IAAMq0B,EAAS,GACpB,MAAMC,EAAcD,EAAS,GAAGhlB,MAAM,KACtCtY,KAAKw9B,KAAOD,EAAY,GAAK,IAAIA,EAAY,GAAO,GACpD,MAAME,EAAaF,EAAY,GAAGjlB,MAAM,KAExC,IAAK,MAAMylB,KAAaN,EAAY,CAChC,MAAMC,EAAUK,EAAUzlB,MAAM,KAE5BtY,KAAKV,MAAM6J,MAAQu0B,EAAQ,KAC3B19B,KAAKq9B,KAAKK,EAAQ,IAAMA,EAAQ,SAGrC,CACH,MAAMH,EAAcD,EAAS,GAAGhlB,MAAM,KACtCtY,KAAKiJ,IAAMs0B,EAAY,GACvBv9B,KAAKw9B,KAAOD,EAAY,GAAK,IAAIA,EAAY,GAAO,GAGxD,MAAMS,EAAoB5kB,YAAgBC,IAAW3W,GAAYiW,GAE3DslB,EAAwB7kB,YAC1BC,IAAWukB,EAAe,iBAAkB,CACxC,CAAC,kBAAkBxkC,KAAWA,IAElCuf,GAGJ,OACIxZ,gBAACqW,EAAG,CAAC9S,UAAWs7B,EAAmBl7B,KAAK,aAAY,aAAasK,GAC7DjO,gBAAC2+B,EAAOnzB,OAAAC,OAAA,GAAKtL,EAAK,CAAEoD,UAAWu7B,IAC1Bj+B,KAAKk+B,uBAMdC,aAAaC,GACjB,MAAMh1B,EAAQpJ,KAAKV,MAAM+J,aAAgB+0B,EACnC3gB,EAAO9S,OAAO8S,KAAKzd,KAAKq9B,MAC9B,IAAIgB,EAASD,EAAO,EAAI,IAAIp+B,KAAKV,MAAM6J,OAAOC,IAAU,GAMxD,OAJAqU,EAAKlF,QAAS3V,IACVy7B,EAASA,EAAS,GAAGA,KAAUz7B,KAAO5C,KAAKq9B,KAAKz6B,KAAS,IAAIA,KAAO5C,KAAKq9B,KAAKz6B,OAG3E5C,KAAKiJ,IAAMo1B,EAASr+B,KAAKw9B,KAG5Bc,yBAAyBhZ,EAAeiZ,EAAkB77B,GAC9D,MAAMuG,EAAMs1B,OAAUz/B,EAAYkB,KAAKm+B,aAAan+B,KAAKk9B,YAAc5X,EAAO,GAAK,IAC7EkZ,EAAYlZ,EAAOtlB,KAAKV,MAAMm/B,OAASz+B,KAAKV,MAAMo/B,OAClDC,EAAkBrZ,EAAOtlB,KAAKV,MAAMs/B,kBAAoB5+B,KAAKV,MAAMu/B,kBACnE1yB,EAAYmZ,EAAO,QAAU,OAC7B/P,EAAMgpB,EAAU,OAAS,IAE/B,OACIp/B,gBAAC+6B,IAAc,CAACzhB,SAAU8lB,EAAS77B,UAAWA,GAC1CvD,gBAAC+lB,IAAc,CACX/gB,GAAIq6B,EACJjiB,KAAMtT,EACNqc,KAAMA,EACNC,UAAWD,EAAI,mBACGqZ,EAClBppB,IAAKA,EAAG,aACI+P,EAAOtlB,KAAKV,MAAMmK,cAAgBzJ,KAAKV,MAAMkK,kBAAiB,gBAC3D+0B,EACflZ,iBAAkBrlB,KAAKV,MAAM+lB,kBAE5BC,EAAOtlB,KAAKV,MAAMwJ,SAAW9I,KAAKV,MAAMiK,cAE5Ci1B,GACGr/B,gBAAC4K,sBAAmB,CAACoC,UAAWA,EAAWhI,GAAIw6B,EAAiB/+B,OAAQ4+B,GACnElZ,EAAO,OAAS,aAO7BwZ,wBAAwBV,GAC5B,MAAMpuB,EAAShQ,KAAKk9B,aAAekB,EAC7Bn1B,EAAMjJ,KAAKm+B,aAAaC,GAG9B,OAFAA,GAAQ,EAGJj/B,gBAAC+6B,IAAc,CAAClqB,OAAQA,GACpB7Q,gBAAC+lB,IAAc,CAAC3I,KAAMvM,OAASlR,EAAYmK,EAAKoc,iBAAkBrlB,KAAKV,MAAM+lB,kBACxE+Y,IAMTW,mBACJ,OACI5/B,gBAAC+6B,IAAc,KACX/6B,gBAAC+lB,IAAc,CAAC3P,IAAI,QAAM,QAK9B2oB,qBAEJ,IAAIc,EAAeh/B,KAAKk9B,WACpB+B,EAAgBj/B,KAAKm9B,SAAWn9B,KAAKk9B,WAAa,EACtD,MAAMgC,EAAcl/B,KAAKm9B,SAAWj0B,EAAuBi2B,gBAAkBH,EAAe,EACtFI,EAAep/B,KAAKm9B,SAAWj0B,EAAuBi2B,gBAAkBF,EAAgB,EAE9FD,EAAellC,KAAKC,IAAIilC,EANC,GAOzBC,EAAgBnlC,KAAKC,IAAIklC,EAPA,GAQzB,MAAMI,EAAQ,GAERC,EAAuBN,GAVJ,EAUuCC,IAD1CC,GAAe,EAAI,GAEnCK,EAAgBzlC,KAAKE,IAAIgG,KAAKk9B,WAAaoC,EAAsB,GACjEE,EAAW1lC,KAAKC,IAClBwlC,EAAgB,GAAKH,EAAe,EAAI,IAAMF,EAAc,EAAI,GAChEE,EAAep/B,KAAKm9B,SAAW,EAAIn9B,KAAKm9B,UAGxC+B,IACAG,EAAM33B,KAAK1H,KAAK8+B,wBAAwB,IACxCO,EAAM33B,KAAK1H,KAAK++B,qBAGpB,IAAK,IAAIt3B,EAAI83B,EAAe93B,EAAI+3B,EAAU/3B,IACtC43B,EAAM33B,KAAK1H,KAAK8+B,wBAAwBr3B,IAQ5C,OALI23B,IACAC,EAAM33B,KAAK1H,KAAK++B,oBAChBM,EAAM33B,KAAK1H,KAAK8+B,wBAAwB9+B,KAAKm9B,SAAW,KAIxDh+B,2BAAA,KACKa,KAAKs+B,0BAAyB,EAA2B,IAApBt+B,KAAKk9B,WAAkB,YAC5DmC,EACAr/B,KAAKs+B,0BAAyB,EAAMt+B,KAAKk9B,aAAel9B,KAAKm9B,SAAW,EAAG,UAvN1Ej0B,EAAAY,aAAsD,CAChEyL,IAAK,MACLsoB,QAAS,KACT,aAAc,aACdz0B,MAAO,EACPC,aAAc,GACdC,aAAc,GAGMJ,EAAAi2B,eAAyB,G,wMCbtC,MAAMM,UAAmBtgC,gBAO7BkJ,SAEH,MAAAyN,EAUS9V,KAAKV,OAVR,UACFoD,EAAS,cACTk7B,EAAa,UACbjlB,EAAS,KACTvf,EACAmc,IAAKC,EACLqoB,QAASC,EACT,aAAc1wB,EAAK,KACnBtK,GAEHgT,EADMxW,EAAKqW,YAAAG,EAAAF,GAGNooB,EAAoB5kB,YAAgBC,IAAW3W,GAAYiW,GAE3DslB,EAAwB7kB,YAC1BC,IAAWukB,EAAe,iBAAkB,CACxC,CAAC,kBAAkBxkC,KAAWA,IAElCuf,GAGJ,OACIxZ,gBAACqW,EAAG,CAAC9S,UAAWs7B,EAAmBl7B,KAAK,aAAY,aAAasK,GAC7DjO,gBAAC2+B,EAAOnzB,OAAAC,OAAA,GAAKtL,EAAK,CAAEoD,UAAWu7B,OA/B7BwB,EAAA31B,aAA0C,CACpDyL,IAAK,MACLsoB,QAAS,KACT,aAAc,e,6UCHP,MAAM3a,UAAgB/jB,gBAiBjCE,YAAYC,GACRC,MAAMD,GAHF,KAAAuX,YAAsB,EAI1B7W,KAAKV,MAAQA,EAEbU,KAAK0/B,QAAU,KACf1/B,KAAK2/B,iBAAmB3/B,KAAK2/B,iBAAiBz1B,KAAKlK,MACnDA,KAAK4/B,qBAAuB5/B,KAAK4/B,qBAAqB11B,KAAKlK,MAC3DA,KAAK6/B,oBAAsB7/B,KAAK6/B,oBAAoB31B,KAAKlK,MACzDA,KAAK8/B,OAAS9/B,KAAK8/B,OAAO51B,KAAKlK,MAC/BA,KAAKiK,QAAUjK,KAAKiK,QAAQC,KAAKlK,MACjCA,KAAK+/B,gBAAkB//B,KAAK+/B,gBAAgB71B,KAAKlK,MACjDA,KAAKggC,iBAAmBhgC,KAAKggC,iBAAiB91B,KAAKlK,MACnDA,KAAKigC,SAAWjgC,KAAKigC,SAAS/1B,KAAKlK,MACnCA,KAAKmuB,MAAQnuB,KAAKmuB,MAAMjkB,KAAKlK,MAC7BA,KAAKouB,MAAQpuB,KAAKouB,MAAMlkB,KAAKlK,MAC7BA,KAAKJ,OAAS,KAGXgT,oBACH5S,KAAKJ,OAASkX,YAAiB9W,KAAKV,MAAMM,QAC1CI,KAAK+tB,eAGFlb,qBACH7S,KAAK+tB,eAGF3a,uBACHpT,KAAK6/B,sBAGFC,OAAO10B,GACVpL,KAAK0/B,QAAUt0B,EAGZ/C,SACH,IAAKrI,KAAKV,MAAM0K,OACZ,OAAO,KAGX,MAAA8L,EAgBI9V,KAAKV,OAhBH,UACFqZ,EAAS,OACT3O,EAAM,OACNpK,EAAM,gBACNgZ,EAAe,UACfC,EAAS,UACTnW,EAAS,eACTqW,EAAc,UACdC,EAAS,UACT7M,EAAS,UACT+hB,EAAS,OACTpyB,EAAM,OACNgP,EAAM,kBACNmO,EAAiB,KACjBnW,GAEHgT,EADMmB,EAAUtB,YAAAG,EAAAF,GAGXuD,EAAUC,YAAgBC,IAAW,oBAAqBrZ,KAAKV,MAAMyZ,gBAAiB/Y,KAAKV,MAAMqZ,WAEjGW,EAAgBF,YAAgBC,IAAW,cAAe,OAAQrZ,KAAKV,MAAMoD,WAAY1C,KAAKV,MAAMqZ,WAE1G,OACIxZ,gBAACoa,IAAa,CACV7W,UAAW4W,EACX1Z,OAAQA,EACRoK,OAAQA,EACR6O,UAAWA,EACX1M,UAAWA,EACXyM,gBAAiBA,EACjBsV,UAAWA,EACXlV,UAAWA,EACXuV,SAAUvuB,KAAKggC,iBACflkC,OAAQA,EACRmd,kBAAmBA,GAEnB9Z,gBAAA,MAAAwL,OAAAC,OAAA,GAASqM,EAAU,CAAEnU,KAAMA,EAAMJ,UAAWyW,EAAS/N,IAAKpL,KAAK8/B,WAKnE/R,eACA/tB,KAAKV,MAAM0K,OACXhK,KAAKmuB,QAELnuB,KAAKouB,QAILD,QACJnuB,KAAK6W,YAAa,EAClB7W,KAAK2/B,mBACA3/B,KAAKV,MAAM0K,QACZhK,KAAKiK,UAILmkB,QACJpuB,KAAK6/B,sBACD7/B,KAAKV,MAAM0K,QACXhK,KAAKiK,UAIL21B,qBAAqBlwB,GACzB,IAAK1P,KAAKJ,OACN,OAGJ,MAAMA,EAAS8P,EAAE9P,OAGb8P,EAAE9P,SAAWI,KAAKJ,QACjBI,KAAKJ,OAAOiY,SAASjY,IACtB8P,EAAE9P,SAAWI,KAAK0/B,SAChB1/B,KAAK0/B,SAAW1/B,KAAK0/B,QAAQ7nB,SAASjY,IAEpCI,KAAKV,MAAM0K,QACXhK,KAAKiK,UAKT01B,mBACC3/B,KAAKJ,QAGNw5B,MACA,CAAC,QAAS,cAAc7gB,QAAS5f,IAC7BZ,SAAS8X,iBAAiBlX,EAAOqH,KAAK4/B,sBAAsB,KAEhE5/B,KAAKJ,OAAOiQ,iBAAiB,WAAY7P,KAAK+/B,iBAAiB,GAC/D//B,KAAKJ,OAAOiQ,iBAAiB,UAAW7P,KAAKigC,UAAU,IAIvDJ,sBACC7/B,KAAKJ,QAGNw5B,MACA,CAAC,QAAS,cAAc7gB,QAAS5f,IAC7BZ,SAASsb,oBAAoB1a,EAAOqH,KAAK4/B,sBAAsB,KAEnE5/B,KAAKJ,OAAOyT,oBAAoB,WAAYrT,KAAK+/B,iBAAiB,GAClE//B,KAAKJ,OAAOyT,oBAAoB,UAAWrT,KAAKigC,UAAU,IAI1DD,mBACJxoB,WAAW,KACP,MAAMG,EAAY5f,SAAS6f,cACvB5X,KAAK0/B,UAAY1/B,KAAK0/B,QAAQ7nB,SAASF,IACvC3X,KAAKouB,SAEV,GAGC2R,kBACA//B,KAAK6W,aACL7W,KAAK6W,YAAa,EAClBW,WAAW,KACP,MAAMG,EAAY5f,SAAS6f,cACvB5X,KAAK0/B,UAAY1/B,KAAK0/B,QAAQ7nB,SAASF,IACvC3X,KAAKouB,SAEV,IAIH6R,SAASvwB,GACK,IAAdA,EAAE1H,QACFhI,KAAK6W,YAAa,EACX7W,KAAKV,MAAM0K,QAAwB,KAAd0F,EAAE1H,SAAkBhI,KAAKV,MAAMwL,QAC3D9K,KAAKV,MAAMwL,SAIXb,UACAjK,KAAKV,MAAMmZ,UAIXzY,KAAKV,MAAMwL,QACX9K,KAAKV,MAAMwL,UAxMLoY,EAAApZ,aAAuC,CACjDE,QAAQ,EACRmC,UAAW,QACXrB,OAAQA,S,mVCDD,MAAMo1B,UAAe/gC,gBAChCE,YAAYC,GACRC,MAAMD,GAENU,KAAKC,MAAQ,CACTkgC,YAAa,MAId/sB,uBACCpT,KAAKC,MAAMkgC,aACXngC,KAAKC,MAAMkgC,YAAYnnC,SAIxBqP,SACH,IAAIgI,EAAO,KACX,OAAK+oB,KAIAp5B,KAAKV,MAAM+Q,MAASrQ,KAAKC,MAAMkgC,cAChC9vB,EAAOtY,SAAS2E,cAAc,OAC9B3E,SAASC,KAAK4E,YAAYyT,GAC1BrQ,KAAKG,SAAS,CAAEggC,YAAa9vB,KAE1B+vB,uBAAapgC,KAAKV,MAAMmb,SAAUza,KAAKV,MAAM+Q,MAAQA,IARjD,M,o7BCXJ,MAAM2M,UAAc7d,gBAkC/BE,YAAYC,GACRC,MAAMD,GACNU,KAAK7F,QAAU,KACf6F,KAAKoL,IAAMjM,cACXa,KAAKqgC,SAAU,EAEfrgC,KAAKsgC,sBAAwBtgC,KAAKsgC,sBAAsBp2B,KAAKlK,MAC7DA,KAAKugC,qBAAuBvgC,KAAKugC,qBAAqBr2B,KAAKlK,MAC3DA,KAAKwgC,yBAA2BxgC,KAAKwgC,yBAAyBt2B,KAAKlK,MACnEA,KAAKygC,cAAgBzgC,KAAKygC,cAAcv2B,KAAKlK,MAC7CA,KAAK0gC,WAAa1gC,KAAK0gC,WAAWx2B,KAAKlK,MACvCA,KAAK2gC,UAAY3gC,KAAK2gC,UAAUz2B,KAAKlK,MACrCA,KAAK4gC,UAAY5gC,KAAK4gC,UAAU12B,KAAKlK,MAErCA,KAAKC,MAAQ,CACT4gC,SAAS,EACT72B,OAAQ1K,EAAM0K,SAAU,EACxB82B,iBAAkB,MAGlBxhC,EAAM0K,QACNhK,KAAK+gC,QAINnuB,oBACC5S,KAAKV,MAAM6b,SACXnb,KAAKV,MAAM6b,UAEfnb,KAAKqgC,SAAU,EAEf,MAAMlmC,EAAUpC,SAAS2E,cAAc,OACvCvC,EAAQwC,aAAa,WAAY,MACjCxC,EAAQ7B,MAAMQ,WAAa,SAC3BqB,EAAQ7B,MAAMsB,SAAW,WACzBoG,KAAK7F,QAAUA,EACfpC,SAASC,KAAK4E,YAAYzC,GAE1B6F,KAAKmmB,gBACDnmB,KAAKV,MAAM6mB,2BAA2B6a,YAChChhC,KAAKV,MAAM6mB,gBACXpuB,SAASmB,cAAc,IAAI8G,KAAKV,MAAM6mB,iBAE5CnmB,KAAKC,MAAM+J,SAAWhK,KAAKC,MAAM4gC,SACjC7gC,KAAK+gC,QAIN3tB,uBACCpT,KAAKV,MAAMgc,QACXtb,KAAKV,MAAMgc,SAEXtb,KAAKC,MAAM+J,QACXhK,KAAKihC,SAETjhC,KAAKqgC,SAAU,EAEXrgC,KAAK7F,SACL6F,KAAK7F,QAAQnB,SAId6Z,mBAAmBquB,EAAyBC,IAE1CnhC,KAAKC,MAAM+J,SAAWm3B,EAAUn3B,QAChChK,KAAKV,MAAM8hC,kCAAoCF,EAAWE,kCAE3D5pB,WAAW,KACP,MAAM6pB,EAAsBrhC,KAAKsgC,wBACjC,GAAIe,GAAuBA,EAAoBxiC,OAAS,GAAKwiC,EAAoB,GAAI,CACnDA,EAAoB,GAC5Bpd,UAE3B,KAIJqd,0BAA0BvuB,GACzBA,EAAU/I,SAAWhK,KAAKV,MAAM0K,QAChChK,KAAKG,SAAS,CAAE6J,OAAQ+I,EAAU/I,SAInC3B,SAIH,GAHIrI,KAAKC,MAAM+J,SAAWhK,KAAKC,MAAM4gC,SACjC7gC,KAAK+gC,QAEY,OAAjB/gC,KAAK7F,QAAkB,CACvB,MAAA2b,EA4BI9V,KAAKV,OA5BH,cACFiiC,EAAa,eACbC,EAAc,kBACdC,EAAiB,iBACjBC,EAAgB,UAChBh/B,EAAS,UACTiW,EAAS,gBACTgpB,EAAe,mBACfC,EAAkB,SAClBC,EAAQ,OACR73B,EAAM,SACN83B,EAAQ,SACR7kB,EAAQ,KACRna,EAAI,KACJ1J,EAAI,SACJ2J,EAAQ,SACRg/B,EAAQ,iBACRC,EAAgB,mBAChBC,EAAkB,SAClBC,EAAQ,OACR5b,EAAM,KACNmL,EAAI,OACJ3mB,EAAM,SACN2P,EAAQ,gBACR0L,EAAe,eACfgc,EACA,kBAAmBC,GAEtBtsB,EADMusB,EAAgB1sB,YAAAG,EAAAF,GAGjB0sB,EAAkB,CACpB//B,QAASvC,KAAKugC,qBACdl1B,YAAarL,KAAKwgC,yBAClBh+B,QAASxC,KAAKygC,cACd70B,UAAW5L,KAAK0gC,WAChBpoC,MAAO,CAAE+2B,QAAS,UAGhBkT,EAAgBjxB,MAAA,GACfie,IAAKzlB,cACL63B,GAAe,IAClBnS,UAAWiC,GAAQkQ,EAAkBA,EAAgBnS,UAAY,GACjEtU,QAASuW,GAAQkQ,EAAkBA,EAAgBzmB,QAAU,IAE3DsnB,EAAmBlxB,MAAA,GAClBie,IAAKzlB,cACL83B,GAAkB,IACrBpS,UAAWiC,GAAQmQ,EAAqBA,EAAmBpS,UAAY,GACvEtU,QAASuW,GAAQmQ,EAAqBA,EAAmB1mB,QAAU,IAGjEunB,EAAWhR,EACbtyB,gBAACowB,IAAI5kB,OAAAC,OAAA,GACG43B,EAAmB,CACvB7nB,GAAI3a,KAAKC,MAAM+J,UAAY63B,EAC3BlpB,UAAWA,EACXjW,UAAW2W,IAAW,sBAAuBooB,MAGjDtiC,gBAAA,OAAKuD,UAAW2W,IAAW,sBAAuB,OAAQooB,KAGxDiB,EAAkB,oBAClBC,EAAgBtpB,IAAW,CAACqpB,EAAiBhgC,EAAWtJ,EAAO,cAAcA,EAAS,OAEtFwpC,EACFzjC,gBAAA,MAAAwL,OAAAC,OAAA,CACIQ,IAAKpL,KAAKoL,KACNi3B,EAAgB,CACpB3/B,UAAWigC,EACX7/B,KAAMA,EAAI,aACE9C,KAAKC,MAAM+J,OAAM,kBACZhK,KAAKV,MAAM,mBAC5ByD,SAAUA,IAEV5D,gBAAA,OAAKuD,UAAW2W,IAAW,qBAAsBqoB,GAAmB5+B,KAAK,YACpE2X,IAKb,OACItb,gBAAC+gC,EAAM,CAAC7vB,KAAMrQ,KAAK7F,SACfgF,gBAAA,OAAKuD,UAAW6+B,GACZpiC,gBAACowB,IAAI5kB,OAAAC,OAAA,GACG03B,EACAC,EAAgB,CACpB5nB,GAAI3Q,EACJqR,UAAWrb,KAAK2gC,UAChBnlB,SAAUxb,KAAK4gC,UACfjoB,UAAWA,EACXoC,OAAQ0W,EACR/uB,UAAW2W,IAAW,YAAamoB,KAElCO,EACAa,GAEJH,IAMjB,OAAO,KAGH1B,QACJ,GAAI/gC,KAAK7F,QAAS,CAAC,IAAD0oC,EAId,GAHA7iC,KAAK7F,QAAQ7B,MAAMguB,OAAS,IAAGtmB,KAAKV,MAAMgnB,QAAU,KACpDtmB,KAAK7F,QAAQ7B,MAAM+2B,QAAU,QAC7BrvB,KAAK7F,QAAQ7B,MAAMQ,WAAa,UACR,IAApBkkB,EAAM8lB,UAAiB,CACvB,GAAItoC,OAAQ,CACR,MAAMuoC,EAAUvoC,OAAOuoC,QACjBC,EAAiBxoC,OAAOusB,WAAahvB,SAASC,KAAKw/B,YACzDz/B,SAASC,KAAKM,MAAMsB,SAAW,QAC/B7B,SAASC,KAAKM,MAAMqC,IAAM,IAAIooC,MAC9BhrC,SAASC,KAAKM,MAAM2qC,MAAWD,EAAH,KAC5BjrC,SAASC,KAAKM,MAAMiC,KAAO,MAG/BxC,SAASC,KAAK0K,UAAY2W,IAAWthB,SAASC,KAAK0K,UAAW,cAElEsa,EAAM8lB,WAAa,EACY,QAA/BD,EAAA9qC,SAASC,KAAKikB,yBAAiB,IAAA4mB,GAA/BA,EAAiClmC,aAAa,cAAe,QACzDqD,KAAKmmB,iBACLnmB,KAAKmmB,gBAAgBxpB,aAAa,cAAe,QAGrDqD,KAAKG,SAAQmR,IAAC,GAAKtR,KAAKC,OAAK,IAAE4gC,SAAS,MAIxCI,SACJ,GAAKjhC,KAAKC,MAAM+J,OAAhB,CAcA,GAVIhK,KAAK7F,UACL6F,KAAK7F,QAAQ7B,MAAM+2B,QAAU,OAC7B7X,WAAW,KACHxX,KAAK7F,UACL6F,KAAK7F,QAAQ7B,MAAMQ,WAAa,SAChCkH,KAAK7F,QAAQ7B,MAAM4qC,eAAe,aAEvC,IAGHlmB,EAAM8lB,WAAa,EAAG,CAAC,IAADK,EACtB,MAAMC,EAAqB,aACI,QAA/BD,EAAAprC,SAASC,KAAKikB,yBAAiB,IAAAknB,GAA/BA,EAAiCxmC,aAAa,cAAe,SAG7D,MAAM0mC,EAA0B,IAAIC,OAAO,QAAQF,UAGnD,GAFArrC,SAASC,KAAK0K,UAAY3K,SAASC,KAAK0K,UAAUuP,QAAQoxB,EAAyB,KAAKrgC,OAEpFxI,OAAQ,CACR,MAAMuoC,EAAUhrC,SAASC,KAAKM,MAAMqC,IACpC5C,SAASC,KAAKM,MAAMsB,SAAW,GAC/B7B,SAASC,KAAKM,MAAMqC,IAAM,GAC1B5C,SAASC,KAAKM,MAAM2qC,MAAQ,GAC5BlrC,SAASC,KAAKM,MAAMiC,KAAO,GAC3BC,OAAOu4B,SAAS,GAAIx3B,OAAOsZ,SAASkuB,GAAW,IAAK,MAG5D/lB,EAAM8lB,WAAa,EAEf9iC,KAAKmmB,iBACLnmB,KAAKmmB,gBAAgBxpB,aAAa,cAAe,SAGjDqD,KAAKV,MAAM6iC,gBAAkBniC,KAAKV,MAAM6iC,eAAet8B,SACvD7F,KAAKV,MAAM6iC,eAAet8B,QAAQoe,QAGtCjkB,KAAKG,SAAQmR,IAAC,GAAKtR,KAAKC,OAAK,IAAE4gC,SAAS,MAGpCP,wBACJ,OAAqB,OAAjBtgC,KAAK7F,QACE,KAGJ6F,KAAK7F,QAAQo/B,iBAAiBQ,IAAkBZ,KAAK,OAGxDoK,mBACJ,MAAMC,EAAoBxjC,KAAKsgC,wBAE/B,IACI,OAAOvoC,SAAS6f,cAClB,MAAA4hB,GACE,OAA6B,OAAtBgK,EAA6B,KAAOA,EAAkB,IAI7DjD,qBAAqB7wB,GACzB,GAAIA,EAAE9P,SAAWI,KAAKC,MAAM6gC,iBAAkB,CAE1C,GADApxB,EAAEC,mBACG3P,KAAKV,MAAM0K,SAAkC,IAAxBhK,KAAKV,MAAMuiC,SACjC,OAGJ,MAAM3T,EAAYluB,KAAKoL,IAAIvF,QAEvB6J,EAAE9P,QAAUsuB,IAAcA,EAAUrW,SAASnI,EAAE9P,SAAmBI,KAAKV,MAAMwL,QAC7E9K,KAAKV,MAAMwL,UAKf41B,WAAWhxB,GACf,GAAgB,IAAZA,EAAE+zB,MACF,OAGJ,MAAMD,EAAoBxjC,KAAKsgC,wBAC/B,GAA0B,OAAtBkD,EACA,OAGJ,MAAME,EAAiBF,EAAkB3kC,OACnC8kC,EAAe3jC,KAAKujC,mBAE1B,IAAIK,EAAe,EAEnB,IAAK,IAAIn8B,EAAI,EAAGA,EAAIi8B,EAAgBj8B,GAAK,EACrC,GAAI+7B,EAAkB/7B,KAAOk8B,EAAc,CACvCC,EAAen8B,EACf,MAIR,IAAIo8B,EAAyB,KACzBn0B,EAAEo0B,UAA6B,IAAjBF,GACdl0B,EAAEgJ,iBACFmrB,EAAKL,EAAkBE,EAAiB,IAChCh0B,EAAEo0B,UAAYF,IAAiBF,EAAiB,IACxDh0B,EAAEgJ,iBACFmrB,EAAKL,EAAkB,IAEvBK,GACAA,EAAG5f,QAIHuc,yBAAyB9wB,GAC7B1P,KAAKG,SAAS,CACV2gC,iBAAkBpxB,EAAE9P,SAIpB6gC,cAAc/wB,GACd1P,KAAKV,MAAM0K,QAAUhK,KAAKV,MAAM4iC,UAA0B,KAAdxyB,EAAE1H,SAAkBhI,KAAKV,MAAMwL,QAC3E9K,KAAKV,MAAMwL,SAIX61B,UAAUtwB,EAAmB8L,QACLrd,IAAxBkB,KAAKV,MAAMwiC,UACX9hC,KAAKV,MAAMwiC,gBAEoBhjC,IAA/BkB,KAAKV,MAAMqiC,sBAA0E7iC,IAAzCkB,KAAKV,MAAMqiC,gBAAgBtmB,WACvErb,KAAKV,MAAMqiC,gBAAgBtmB,UAAUhL,EAAM8L,GAI3CykB,UAAUvwB,QACcvR,IAAxBkB,KAAKV,MAAM2d,UACXjd,KAAKV,MAAM2d,WAEfjd,KAAKihC,cAC8BniC,IAA/BkB,KAAKV,MAAMqiC,sBAAyE7iC,IAAxCkB,KAAKV,MAAMqiC,gBAAgBnmB,UACvExb,KAAKV,MAAMqiC,gBAAgBnmB,SAASnL,GAEpCrQ,KAAKqgC,SACLrgC,KAAKG,SAAS,CAAE6J,QAAQ,KA7YlBgT,EAAAlT,aAAqC,CAC/CE,QAAQ,EACRkc,WAAW,EACX8b,iBAAkB,MAClBC,mBAAoB,SACpBn/B,KAAM,SACN++B,UAAU,EACVK,UAAU,EACV5b,OAAQ,IACRvjB,SAAU,EACV0uB,MAAM,EACNkQ,gBAAiB,CACbzmB,QAASU,IAAmBoB,OAEhC4kB,mBAAoB,CAChB/mB,cAAc,EACdK,QAASU,IAAmB2T,OAIrBvS,EAAA8lB,UAAoB,E,6CChCxB,MAAM3lB,UAAkBhe,gBAK5BkJ,SACH,MAAAyN,EAAyD9V,KAAKV,OAAxD,UAAEoD,EAAS,UAAEiW,EAAS,IAAEpD,EAAG,GAAEpR,GAAmB2R,EAAZmB,EAAUtB,YAAAG,EAAAF,GAC9CJ,EAAMD,GAAO,MACb4D,EAAUC,YAAgBC,IAAW3W,EAAW,mBAAoBiW,GAC1E,OAAOxZ,gBAACqW,EAAG7K,OAAAC,OAAA,GAAKqM,EAAU,CAAEvU,UAAWyW,MAR7BgE,EAAArT,aAAyC,CACnDyL,IAAK,O,wCCFE,MAAMiY,UAAoBruB,gBAK9BkJ,SACH,MAAAyN,EAAqD9V,KAAKV,OAApD,UAAEoD,EAAS,UAAEiW,EAAS,IAAEpD,GAAoBO,EAAZmB,EAAUtB,YAAAG,EAAAF,GAC1CJ,EAAMD,GAAO,MACb4D,EAAUC,YAAgBC,IAAW3W,EAAW,qBAAsBiW,GAC5E,OAAOxZ,gBAACqW,EAAG7K,OAAAC,OAAA,GAAKqM,EAAU,CAAEvU,UAAWyW,MAR7BqU,EAAA1jB,aAA2C,CACrDyL,IAAK,O,+GCFE,MAAM2H,UAAoB/d,gBAC9BkJ,SACH,IAAI07B,EACJ,MAAAjuB,EAAsH9V,KAAKV,OAArH,UAAEoD,EAAS,UAAEiW,EAAS,SAAE8B,EAAQ,OAAE3P,EAAM,IAAEyK,EAAG,QAAEyuB,EAAO,eAAEhS,EAAc,iBAAEiS,EAAgB,GAAE9/B,GAAmB2R,EAAZmB,EAAUtB,YAAAG,EAAAF,GAE3GJ,EAAMD,GAAO,KACb2uB,EAAUF,GAAW,MACrB7qB,EAAUC,YAAgBC,IAAW3W,EAAW,qBAAsBiW,GAc5E,OAZI7N,IACAi5B,EACI5kC,gBAAA,UACIhD,KAAK,SACLoG,QAASuI,EACTpI,UAAW0W,YAAgB,0BAA2BT,GAAU,aACpDqZ,GAAkB,QAC9BjvB,SAAU/C,KAAKV,MAAM6kC,uBAM7BhlC,gBAAC+kC,EAAOv5B,OAAAC,OAAA,GAAKqM,EAAU,CAAEvU,UAAWyW,IAC/BsB,GAAYtb,gBAACqW,EAAG,CAAC9S,UAAW0W,YAAgB,mBAAoBT,IAAa8B,GAC7EspB","file":"static/js/6.3afbfc21ed795d2c12e6.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport function removeInlineZoomStyle(): void {\n const zoomedImages: HTMLCollectionOf = document.body.getElementsByClassName('ms-inline-zoom__zoomedImg');\n\n const zoomedImagesArray = Array.from(zoomedImages) as HTMLImageElement[];\n for (const item of zoomedImagesArray) {\n item.style.width = '0';\n item.style.height = '0';\n }\n}\n\n/**\n * Represents default data scale value which should be used in case improper value specified in module config.\n */\nexport const defaultDataScale = 2;\n\n/**\n * Clears zooming state and reverts to initial image.\n * @param event - Event of moving the mouse out of the image.\n */\nexport function onMouseOutLensContainer(event: React.MouseEvent): void {\n const zoomLens = event.currentTarget;\n zoomLens.style.visibility = 'hidden';\n zoomLens.classList.remove('ms-containerZoom__zoom-lens__opacity');\n\n const zoomedImageContainer = document.body.querySelector('.ms-containerZoom__result');\n if (zoomedImageContainer) {\n zoomedImageContainer.style.visibility = 'hidden';\n }\n}\n\n/**\n * Represents size dimensions.\n */\ninterface ISize {\n width: number;\n height: number;\n}\n\n/**\n * Represents two-dimensional position.\n */\ninterface ILocation {\n /**\n * Left offset.\n */\n x: number; // eslint-disable-line @typescript-eslint/naming-convention -- To align with html standards.\n\n /**\n * Top offset.\n */\n y: number; // eslint-disable-line @typescript-eslint/naming-convention -- To align with html standards.\n}\n\n/**\n * Retrieves the displayed image size preserving image proportions.\n * @param imageElement - The html image element which is displayed.\n * @returns The dimensions of the displayed image ignoring all the offsets and paddings.\n */\nfunction getDisplayedImageSize(imageElement: HTMLImageElement): ISize {\n const imageInitialHeight = imageElement.naturalHeight;\n const imageInitialWidth = imageElement.naturalWidth;\n const imageContainerHeight = imageElement.height;\n const imageContainerWidth = imageElement.width;\n\n const widthScaleRatio = imageContainerWidth / imageInitialWidth;\n const heightScaleRatio = imageContainerHeight / imageInitialHeight;\n\n const scaleRatio = Math.min(widthScaleRatio, heightScaleRatio);\n\n return {\n width: imageInitialWidth * scaleRatio,\n height: imageInitialHeight * scaleRatio\n };\n}\n\n/**\n * Retrieves the center point based on the given dimensions.\n * @param size - Dimensions of an element.\n * @returns The point of the center.\n */\nfunction getCenter(size: ISize): ILocation {\n const centerDivider = 2;\n return {\n x: size.width / centerDivider,\n y: size.height / centerDivider\n };\n}\n\n/**\n * Retrieves the position where the lens must be placed based by the mouse position, lens size, and container size.\n * @param cursorPosition - The location of the mouse.\n * @param lensSize - The size of the lens.\n * @param originalSize - The container in which the lens should be placed.\n * @returns The location where the lens must be placed.\n */\nfunction getLensPosition(cursorPosition: ILocation, lensSize: ISize, originalSize: ISize) {\n const lensCenter = getCenter(lensSize);\n\n const position: ILocation = {\n x: cursorPosition.x - lensCenter.x,\n y: cursorPosition.y - lensCenter.y\n };\n\n // Limit lens to be inside the image element.\n const minPositionX = 0;\n const maxPositionX = originalSize.width - lensSize.width;\n position.x = Math.min(Math.max(position.x, minPositionX), maxPositionX);\n\n const minPositionY = 0;\n const maxPositionY = originalSize.height - lensSize.height;\n position.y = Math.min(Math.max(position.y, minPositionY), maxPositionY);\n\n return position;\n}\n\n/**\n * Retrieves mouse position.\n * @param event - Mouse event.\n * @param element - Element in which the event happened.\n * @returns Mouse position inside the given element.\n */\nfunction getCursorPosition(event: React.MouseEvent, element: HTMLElement): ILocation {\n const containerBoundingRect = element.getBoundingClientRect();\n return {\n x: event.pageX - containerBoundingRect.left - window.pageXOffset,\n y: event.pageY - containerBoundingRect.top - window.pageYOffset\n };\n}\n\n/**\n * Formats number to represent pixels, e.g. 42px.\n * @param numericValue - The numeric value of pixels.\n * @returns String in pixel format.\n */\nfunction formatPixelsValue(numericValue: number): string {\n return `${numericValue}px`;\n}\n\n/**\n * Formats the given url to be a background image style value.\n * @param sourceUrl - The image source.\n * @returns Background image style value.\n */\nfunction formatBackgroundImageUrl(sourceUrl: string): string {\n return `url('${sourceUrl}')`;\n}\n\n/**\n * Get the cursor position on image click.\n * @param zoomedImage - The target image.\n * @param dataScaleText - Zoom factor for image.\n * @param event - Mouse event action.\n */\nfunction handleInlineStyles(\n zoomedImage: EventTarget & HTMLImageElement,\n dataScaleText: string,\n event: React.MouseEvent\n): void {\n zoomedImage.removeAttribute('style');\n const imageElement = zoomedImage.parentElement!.previousElementSibling!.querySelector('img')!;\n\n const dataScale = Number(dataScaleText);\n\n const imageContainerSize: ISize = {\n width: imageElement.offsetWidth,\n height: imageElement.offsetHeight\n };\n\n const zoomedImageSize: ISize = {\n width: imageContainerSize.width * dataScale,\n height: imageContainerSize.height * dataScale\n };\n\n zoomedImage.style.width = formatPixelsValue(zoomedImageSize.width);\n zoomedImage.style.height = formatPixelsValue(zoomedImageSize.height);\n zoomedImage.style.opacity = '1';\n\n const cursorPosition = getCursorPosition(event, imageElement);\n const imageCenter = getCenter(imageContainerSize);\n const offset: ILocation = {\n x: cursorPosition.x - imageCenter.x,\n y: cursorPosition.y - imageCenter.y\n };\n\n const scaledCursorPosition: ILocation = {\n x: cursorPosition.x * dataScale,\n y: cursorPosition.y * dataScale\n };\n scaledCursorPosition.x -= offset.x;\n scaledCursorPosition.y -= offset.y;\n\n const zoomedImagePosition = getLensPosition(scaledCursorPosition, imageContainerSize, zoomedImageSize);\n\n zoomedImage.style.left = formatPixelsValue(-zoomedImagePosition.x);\n zoomedImage.style.top = formatPixelsValue(-zoomedImagePosition.y);\n}\n\n/**\n * ZoomIn functionality on image click.\n * @param event -The mouse event.\n * @param dataScale -The zoom factor.\n */\nexport function inlineZoomInitClick(event: React.MouseEvent, dataScale?: string): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const zoomImg = event.currentTarget.parentElement?.nextElementSibling?.querySelector('img');\n if (!zoomImg) {\n return;\n }\n\n handleInlineStyles(zoomImg, dataScale ?? '2', event);\n}\n\n/**\n * Updates lens and zoomed image positions on the page.\n * @param event - Mouse movement event.\n * @param imageElement - Original image element.\n * @param lens - The element which shows the part of the image which is zoomed.\n */\nfunction handleMouseMovementInContainerZoom(\n event: React.MouseEvent,\n imageElement: HTMLImageElement,\n lens: EventTarget & HTMLDivElement\n): void {\n let zoomedContainer = document.body.querySelector('.ms-containerZoom__result');\n if (!zoomedContainer) {\n zoomedContainer = document.createElement('div');\n zoomedContainer.setAttribute('class', 'ms-containerZoom__result');\n document.body.appendChild(zoomedContainer);\n }\n\n const lensSize: ISize = {\n width: lens.offsetWidth,\n height: lens.offsetHeight\n };\n\n const dataScale = Number(lens.getAttribute('data-scale') ?? defaultDataScale);\n\n const cursorPosition = getCursorPosition(event, imageElement);\n const displayedImageSize = getDisplayedImageSize(imageElement);\n const imageContainerSize: ISize = {\n width: imageElement.offsetWidth,\n height: imageElement.offsetHeight\n };\n\n const lensPosition = getLensPosition(cursorPosition, lensSize, imageContainerSize);\n lens.style.visibility = 'unset';\n lens.style.left = formatPixelsValue(lensPosition.x);\n lens.style.top = formatPixelsValue(lensPosition.y);\n\n const mainImageSource = imageElement.getAttribute('src')!;\n\n zoomedContainer.style.visibility = 'unset';\n zoomedContainer.style.backgroundImage = formatBackgroundImageUrl(mainImageSource);\n zoomedContainer.style.width = formatPixelsValue(lensSize.width * dataScale);\n zoomedContainer.style.height = formatPixelsValue(lensSize.width * dataScale);\n\n const offsetSize: ISize = {\n width: imageContainerSize.width - displayedImageSize.width,\n height: imageContainerSize.height - displayedImageSize.height\n };\n const offsetCenter = getCenter(offsetSize);\n const lensScaledPositionX = (offsetCenter.x - lensPosition.x) * dataScale;\n const lensScaledPositionY = (offsetCenter.y - lensPosition.y) * dataScale;\n\n zoomedContainer.style.backgroundPositionX = formatPixelsValue(lensScaledPositionX);\n zoomedContainer.style.backgroundPositionY = formatPixelsValue(lensScaledPositionY);\n\n zoomedContainer.style.backgroundSize = `${formatPixelsValue(displayedImageSize.width * dataScale)} ${formatPixelsValue(\n displayedImageSize.height * dataScale\n )}`;\n\n const topPosition = imageElement.getBoundingClientRect().top;\n zoomedContainer.style.top = formatPixelsValue(topPosition);\n}\n\nexport function onMouseOverImageContainer(event: React.MouseEvent): void {\n const lens = event.currentTarget.parentElement!.previousElementSibling! as HTMLDivElement;\n lens.classList.add('ms-containerZoom__zoom-lens__opacity');\n\n const imageElement = event.currentTarget as HTMLImageElement;\n\n handleMouseMovementInContainerZoom(event, imageElement, lens);\n}\n\nexport function onMouseMoveLensContainer(event: React.MouseEvent): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const imageElement = event.currentTarget.nextElementSibling!.querySelector('img')!;\n const lens = event.currentTarget;\n\n handleMouseMovementInContainerZoom(event, imageElement, lens);\n}\n\nexport function onContainerZoomInit(event: React.MouseEvent): void {\n if (!document.body.querySelector('.ms-containerZoom__result')) {\n const containerDiv = document.createElement('div');\n containerDiv.setAttribute('class', 'ms-containerZoom__result');\n document.body.appendChild(containerDiv);\n }\n\n onMouseOverImageContainer(event);\n}\n\nexport function inlineZoomImageOnMouseMove(event: React.MouseEvent): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const parentElement = event.currentTarget.parentElement!.parentElement!;\n const zoomImg = event.currentTarget;\n\n const dataScale = parentElement.getAttribute('data-scale') ?? `${defaultDataScale}`;\n handleInlineStyles(zoomImg, dataScale, event);\n}\n\nexport function inlineZoomImageOnMouseOut(event: React.MouseEvent): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n event.currentTarget.style.height = '0';\n event.currentTarget.style.width = '0';\n}\n\nexport function inlineZoomInit(event: React.MouseEvent, dataScale: string = '2'): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const zoomedImage = event.currentTarget.parentElement?.nextElementSibling?.querySelector('img');\n if (!zoomedImage) {\n return;\n }\n\n handleInlineStyles(zoomedImage, dataScale, event);\n}\n\nexport function inlineZoomImageOnHover(event: React.MouseEvent, scale: string = '2'): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const zoomedImg = event.currentTarget.parentElement!.nextElementSibling!.querySelector('img')!;\n handleInlineStyles(zoomedImg, scale, event);\n}\n\n/**\n * Remove container zoomed image.\n */\nexport function removeContainerZoomStyle(): void {\n const zoomLens = document.body.querySelector('.ms-containerZoom__zoom-lens');\n if (zoomLens) {\n zoomLens.style.visibility = 'hidden';\n zoomLens.classList.remove('ms-containerZoom__zoom-lens__opacity');\n }\n\n const zoomedImageContainer = document.body.querySelector('.ms-containerZoom__result');\n if (zoomedImageContainer) {\n zoomedImageContainer.style.visibility = 'hidden';\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { Button, format, KeyCodes, Node, UncontrolledPagination } from '..';\nimport CheckBoxButton from './checkbox';\n\n/**\n * Table Resources.\n */\nexport interface ITableResources {}\n\n/**\n * Table props.\n */\nexport interface IDataTableProps {\n resources: ITableResources;\n headings: (IHeadingsProperty | undefined)[];\n rows: ITableRowProps[];\n className?: string;\n editLinkText?: string;\n actionLinkText?: string;\n deleteLinkText?: string;\n viewLinkText?: string;\n editLinkTooltip?: string;\n actionLinkTooltip?: string;\n deleteLinkTooltip?: string;\n viewLinkTooltip?: string;\n enableToModify: boolean;\n showCheckBoxes?: boolean;\n isSortable?: boolean;\n showPagination?: boolean;\n paginationProperty: IPaginationProperty;\n minifyActions?: boolean;\n minifiedButtonText?: string;\n excludedColumns?: string[]; // Filled with ITableItemProps.id of columns not to show\n isSingleSelectOnly: boolean;\n businessUserSelectCheckBoxAriaLabelText?: string;\n sortByAscending?: string;\n sortByDescending?: string;\n resourcePrefix?: string;\n actions: {\n onDelete?(userData: ITableItemProps[], referenceBack?: HTMLButtonElement | null): void | undefined;\n onEdit?(userData: ITableItemProps[], referenceBack?: HTMLButtonElement | null): void | undefined;\n onView?(userData: ITableItemProps[]): void | undefined;\n };\n checkBoxCallback?(records: ITableRowProps[]): void;\n formatPrice?(price: number): string;\n tableAriaLabel?: string;\n tableTabIndex?: number;\n}\n\n/**\n * Table IPaginationProperty props.\n */\nexport interface IPaginationProperty {\n itemPerPage: number;\n skipCount: number;\n prevText: string;\n nextText: string;\n paginationText: string;\n url: string;\n}\n\n/**\n * Table ITableItemProps props.\n */\nexport interface ITableItemProps {\n id: string;\n type: TableDataType;\n value: boolean | number | string;\n className?: string;\n}\n\n/**\n * Table IButtonReferences props.\n */\nexport interface IButtonReferences {\n edit?: React.RefObject;\n delete?: React.RefObject;\n}\n\n/**\n * Table ITableRowProps props.\n */\nexport interface ITableRowProps {\n row: ITableItemProps[];\n isSelected: boolean;\n buttonReferences?: IButtonReferences;\n}\n\n/**\n * Table IDataTableCells props.\n */\ninterface IDataTableCells {\n header: boolean;\n className: string;\n content: string | number | React.ReactNode;\n cellIndex: number;\n scope: 'col' | 'row';\n colSpan?: number;\n records?: ITableRowProps;\n}\n\n/**\n * Table IHeadingsProperty props.\n */\nexport interface IHeadingsProperty {\n name: string;\n sortable: boolean;\n ariaLabel?: string;\n}\n\n/**\n * Table ITableState props.\n */\nexport interface ITableState {\n sortingKey: string;\n ascendingOrder: boolean;\n showActions: boolean;\n selectedIndex: string;\n}\n\n/**\n * Table TableDataType props.\n */\nexport enum TableDataType {\n Number = 'Number',\n Text = 'Text',\n Price = 'Price'\n}\n\nexport default class Table extends React.PureComponent {\n public componentClassName: string = 'ms-table';\n\n private readonly headingPrefix: string = 'table';\n\n private readonly capitalizeHeadingPrefix: string = 'Table';\n\n constructor(props: IDataTableProps) {\n super(props);\n this.state = {\n ascendingOrder: true,\n sortingKey: (props.headings[0] && props.headings[0].name) || '',\n showActions: props.minifyActions !== undefined ? !props.minifyActions : true,\n selectedIndex: ''\n };\n }\n\n public render(): JSX.Element {\n const { className, headings, rows, isSortable, showPagination, paginationProperty, tableAriaLabel, tableTabIndex } = this.props;\n const { sortingKey, ascendingOrder } = this.state;\n\n const classname = classnames(this.componentClassName, className);\n let tableRows = isSortable && sortingKey ? this._sortTableRow(rows, sortingKey, ascendingOrder) : rows;\n let paginationLinks = null;\n\n if (showPagination) {\n const { skipCount, itemPerPage, nextText, prevText, paginationText, url } = paginationProperty;\n\n paginationLinks = (\n \n );\n\n tableRows = this._getCurrentPageData(tableRows, skipCount, skipCount + itemPerPage);\n }\n\n const tableBody = this._renderRow(tableRows);\n const tableHead = this._renderHeadingRow(headings);\n\n return (\n
\n \n {tableHead}\n {tableBody}\n
\n {paginationLinks}\n
\n );\n }\n\n /**\n * Set sorting key.\n * @param event -The mouse event.\n */\n private readonly _selectSortingKey = (event: React.MouseEvent | React.KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const columnName = target.getAttribute('data-sort-name') ? (target.getAttribute('data-sort-name') as string) : '';\n const { sortingKey, ascendingOrder } = this.state;\n let newOrder = true;\n\n if (sortingKey === columnName) {\n newOrder = !ascendingOrder;\n }\n\n this.setState({\n sortingKey: columnName,\n ascendingOrder: newOrder,\n showActions: false\n });\n };\n\n /**\n * Checkbox change.\n * @param rows -Table rows.\n * @param checkBoxCallback -Checkboxcallback function.\n * @param index -Index value for row.\n * @returns Checkbox rows.\n */\n private readonly _onCheckBoxChangeHandler = (\n rows: ITableRowProps[],\n checkBoxCallback: (records: ITableRowProps[]) => void,\n index?: number\n ) => () => {\n if (ObjectExtensions.isNumber(index)) {\n rows[index].isSelected = !rows[index].isSelected;\n }\n checkBoxCallback(rows);\n };\n\n private readonly _renderHeadingRow = (columnData: (IHeadingsProperty | undefined)[]) => {\n const {\n resources,\n showCheckBoxes,\n enableToModify,\n minifyActions,\n rows,\n actionLinkText,\n isSortable,\n checkBoxCallback,\n resourcePrefix,\n isSingleSelectOnly,\n businessUserSelectCheckBoxAriaLabelText,\n sortByAscending,\n sortByDescending\n } = this.props;\n const { sortingKey, ascendingOrder } = this.state;\n\n const sortingClassName = ascendingOrder ? 'asc' : 'dsc';\n\n const sortingValue = ascendingOrder ? sortByAscending : sortByDescending;\n\n const columns = columnData.map((data, cellIndex) => {\n if (!data) {\n return;\n }\n const counterAddition = 1;\n const updatedCellIndex = cellIndex + counterAddition;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- unsafe assignment.\n const heading =\n resources[`${this.headingPrefix}${data.name}HeadingText`] ||\n resources[`${resourcePrefix!}${this.capitalizeHeadingPrefix}${data.name}HeadingText`] ||\n resources[`${data.name}HeadingText`] ||\n data.name;\n\n const columnSortValue = sortingKey === data.name && sortingValue !== undefined ? sortingValue : '';\n\n const columnAriaLabel = data.ariaLabel ? `${format(data.ariaLabel, heading)} ${columnSortValue}` : '';\n\n const content = (isSortable && data.sortable && (\n \n \n {heading}\n \n \n )) || (\n \n {heading}\n \n );\n\n return content;\n });\n\n const radioCheckBox = showCheckBoxes && checkBoxCallback && !isSingleSelectOnly && (\n \n );\n\n const actionContent = (\n \n {minifyActions ? '' : actionLinkText}\n \n );\n\n return (\n \n {showCheckBoxes &&\n this.tableCell({\n header: true,\n className: `${this.componentClassName}__heading-row-data__checkbox checkbox`,\n content: radioCheckBox,\n cellIndex: -1,\n scope: 'col'\n })}\n {columns}\n {enableToModify &&\n this.tableCell({\n header: true,\n className: `${this.componentClassName}__heading-row-data action-links`,\n content: actionContent,\n cellIndex: 1,\n scope: 'col'\n })}\n \n );\n };\n\n private readonly _renderRow = (rows: ITableRowProps[]) => {\n const {\n enableToModify,\n showCheckBoxes,\n excludedColumns,\n actions,\n checkBoxCallback,\n formatPrice,\n isSingleSelectOnly,\n businessUserSelectCheckBoxAriaLabelText\n } = this.props;\n\n const tableRows = rows.map((rowsData, index) => {\n let className = index % 2 ? `${this.componentClassName}__row even-row` : `${this.componentClassName}__row odd-row`;\n let showActions = false;\n\n const additionalNameAriaLabel = rowsData.row[0].value.toString();\n const columnData = rowsData.row.map(cell => {\n if (excludedColumns && excludedColumns.includes(cell.id)) {\n return;\n }\n\n // Numbers/price data types will always be right-aligned per design standards\n const extraClass = cell.type === TableDataType.Number || cell.type === TableDataType.Price ? 'num-type' : '';\n const cellContent = cell.type === TableDataType.Price && formatPrice ? formatPrice(cell.value as number) : cell.value;\n const columnSpecificClass = cell.className || '';\n return this.tableCell({\n header: false,\n className: classnames(`${this.componentClassName}__row-data`, extraClass, columnSpecificClass),\n content: cellContent,\n cellIndex: index,\n scope: 'row'\n });\n });\n\n const radioCheckBox = showCheckBoxes && checkBoxCallback && (\n \n );\n const rowKey = `row-${index}`;\n\n if (rowKey === this.state.selectedIndex && this.state.showActions) {\n className += ' selected';\n showActions = true;\n }\n\n const actionButtons = actions && this._renderActions(rowsData.row, showActions, rowKey, rowsData.buttonReferences);\n\n return (\n \n {showCheckBoxes &&\n this.tableCell({\n header: false,\n className: `${this.componentClassName}__row-data`,\n content: radioCheckBox,\n cellIndex: index,\n scope: 'row',\n records: rowsData\n })}\n {columnData}\n {enableToModify &&\n this.tableCell({\n header: false,\n className: `${this.componentClassName}__row-data`,\n content: actionButtons,\n cellIndex: index,\n scope: 'row',\n records: rowsData\n })}\n \n );\n });\n\n return tableRows;\n };\n\n private readonly _renderActions = (\n data: ITableItemProps[],\n showActions: boolean,\n key: string,\n buttonReference?: IButtonReferences\n ): React.ReactNode => {\n const {\n editLinkText,\n deleteLinkText,\n viewLinkText,\n editLinkTooltip,\n deleteLinkTooltip,\n viewLinkTooltip,\n actionLinkTooltip,\n minifyActions,\n minifiedButtonText,\n actionLinkText,\n actions: { onEdit, onDelete, onView }\n } = this.props;\n const handleClickEdit =\n onEdit !== undefined\n ? () => {\n onEdit(data, buttonReference?.edit?.current);\n }\n : undefined;\n const handleClickDelete =\n onDelete !== undefined\n ? () => {\n onDelete(data, buttonReference?.delete?.current);\n }\n : undefined;\n const handleClickView =\n onView !== undefined\n ? () => {\n onView(data);\n }\n : undefined;\n\n const actionButtons = (\n \n {handleClickView && (\n \n )}\n {handleClickEdit && (\n \n {editLinkText}\n \n )}\n {handleClickDelete && (\n \n {deleteLinkText}\n \n )}\n \n );\n\n if (minifyActions) {\n return (\n \n \n {minifiedButtonText ? minifiedButtonText : ''}\n \n {showActions && actionButtons}\n \n );\n }\n return actionButtons;\n };\n\n private readonly _toggleActions = (event: React.MouseEvent) => {\n const target = event && (event.target as HTMLElement);\n const newKey = target && target.getAttribute('data-type') ? (target.getAttribute('data-type') as string) : '';\n this.setState({\n showActions: !this.state.showActions,\n selectedIndex: newKey\n });\n };\n\n private readonly _sortTableRow = (table: ITableRowProps[], sortingkey: string, ascendingOrder: boolean): ITableRowProps[] => {\n return table.sort((userOne: ITableRowProps, userTwo: ITableRowProps) => {\n const userOneData = userOne.row.find(cell => {\n return cell.id === sortingkey;\n });\n const userTwoData = userTwo.row.find(cell => {\n return cell.id === sortingkey;\n });\n\n if (!userOneData || !userTwoData) {\n return -1;\n }\n\n if (typeof userOneData.value === 'number' && typeof userTwoData.value === 'number') {\n return ascendingOrder ? userOneData.value - userTwoData.value : userTwoData.value - userOneData.value;\n }\n\n const cleanFirst =\n (userOneData.value as string) &&\n userOneData.value\n .toString()\n .toLowerCase()\n .trim();\n const cleanSecond =\n (userOneData.value as string) &&\n userTwoData.value\n .toString()\n .toLowerCase()\n .trim();\n\n if (!cleanFirst || !cleanSecond) {\n return -1;\n }\n if (ascendingOrder) {\n return cleanFirst < cleanSecond ? -1 : 1;\n }\n return cleanFirst > cleanSecond ? -1 : 1;\n });\n };\n\n private readonly _getCurrentPageData = (tableRows: ITableRowProps[], start: number, end: number): ITableRowProps[] => {\n if (start >= end) {\n return tableRows;\n }\n\n const result = [];\n for (let i = start; i < end; i++) {\n tableRows[i] && result.push(tableRows[i]);\n }\n\n return result;\n };\n\n private readonly tableCell = (props: IDataTableCells) => {\n const { className, header, cellIndex, scope, colSpan, content } = props;\n const hiddenTabIndex = -1;\n const initialTabIndex = 0;\n return header ? (\n initialTabIndex ? initialTabIndex : hiddenTabIndex}\n >\n {content}\n \n ) : (\n \n {content}\n \n );\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
\n \n {paginationPreviousText}\n
\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
\n {paginationNextText}\n \n
\n );\n };\n\n /**\n * Calls method display result.\n * @param event - Keyboard event.\n */\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\n this._selectSortingKey(event);\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 classname from 'classnames';\nimport * as React from 'react';\n\nexport interface IProgressProps {\n id?: string;\n className?: string;\n max: number;\n min?: number;\n value: number;\n ariaLabel?: string;\n}\n\nexport const Progress: React.FC = (props: IProgressProps) => {\n const { id, className, max, min, value, ariaLabel } = props;\n const percent = Math.max(0, Math.min((value * 100) / max, 100));\n const style = { width: `${percent}%` };\n\n return (\n
\n \n
\n );\n};\n\n// Set default props\nProgress.defaultProps = {\n 'aria-valuemax': 100,\n 'aria-valuenow': 0\n} as Partial;\n\nexport default Progress;\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 * as React from 'react';\n\nimport Tooltip from './Tooltip';\nimport { IUncontrolledTooltipProps } from './Tooltip.props';\n\nexport interface IUncontrolledTooltipState {\n isOpen: boolean;\n}\n\n/**\n * UncontrolledTooltip examples.\n */\nexport default class UncontrolledTooltip extends React.PureComponent {\n private _isAutoDisplayTriggered: boolean;\n\n constructor(props: IUncontrolledTooltipProps) {\n super(props);\n this.state = { isOpen: false };\n this._toggle = this._toggle.bind(this);\n this._isAutoDisplayTriggered = false;\n }\n\n public render(): JSX.Element {\n const isCartPage =\n !StringExtensions.isNullOrWhitespace(this.props.cartPageUrl) && window.location.toString().includes(this.props.cartPageUrl!);\n\n if (this.props.shouldShowMiniCart && !isCartPage) {\n if (!this._isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isOpen: true });\n this._isAutoDisplayTriggered = true;\n } else if (!this.state.isOpen) {\n // If tooptip is closed, reset the flag.\n this._isAutoDisplayTriggered = false;\n }\n }\n\n return (\n {\n this.props._toggle ? this.props._toggle() : this._toggle();\n }}\n {...this.props}\n />\n );\n }\n\n private _toggle(): void {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\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\nimport { UncontrolledTooltip } from '..';\nimport { ISliderThumbProps } from './SliderThumb.props';\n\n/**\n * Sliderthumb - This is a sliderthumb component this component which is\n * used to control the slider thumb.\n */\nexport default class SliderThumb extends React.PureComponent {\n public static defaultProps: Partial = {\n showTooltip: true,\n showToolTipOnTab: false,\n tooltip: {\n placement: 'top'\n }\n };\n\n public sliderButtonRef: React.RefObject = React.createRef();\n\n public render(): JSX.Element {\n const sliderThumbBaseClass = 'slider__thumb ';\n const sliderThumbClass = this.props.trackThumbClass\n ? `${sliderThumbBaseClass} ${this.props.trackThumbClass}`\n : sliderThumbBaseClass;\n\n return (\n <>\n \n {this.props.showTooltip && (\n \n {this.props.handleTooltipText\n ? this.props.handleTooltipText(this.props.sliderValue!)\n : this.props.sliderValue!.toString()}\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 MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { format, isMobile, Progress, VariantType } from '..';\nimport { clamp, toUpperCaseFirstChar } from '../common/utilities';\nimport { ISliderChangeNotification, ISliderLabel, ISliderProps, ISliderThumbProps } from './Slider.props';\nimport SliderThumb from './SliderThumb';\n\n// This maintains the min and max values for the 2 thumbs\nexport interface ISliderState {\n sliderThumbs: ISliderThumbProps[];\n limit: number;\n grab: number;\n active: boolean;\n id: string;\n showToolTipOnTab?: boolean;\n}\n\nconst orientations = {\n horizontal: {\n dimension: 'width',\n direction: 'left',\n coordinate: 'x'\n },\n vertical: {\n dimension: 'height',\n direction: 'top',\n coordinate: 'y'\n }\n};\n\ninterface IFillCoordinates {\n fill: number;\n handle: number;\n label: number;\n}\n\nenum EventType {\n Start,\n End,\n Change\n}\n\nconst rangeDefaultChkValue = 0;\n\n/**\n * Slider - This is a slider component this component morphs into a range slider\n * based on flags.\n */\n\nexport default class Slider extends React.Component {\n public static defaultProps: Partial = {\n showTooltip: true,\n inForm: false,\n orientation: 'horizontal',\n min: 0,\n max: 100,\n step: 1,\n sliderThumbs: [{ id: 'slider_thumb_id', value: 50 }]\n };\n\n private static readonly sliderBaseClass: string = 'slider';\n\n public isRangeSlider: boolean;\n\n private readonly ref: React.RefObject = React.createRef();\n\n private readonly thumb1Ref: React.RefObject = React.createRef();\n\n private readonly thumb2Ref: React.RefObject = React.createRef();\n\n public static getDerivedStateFromProps(props: ISliderProps, state: ISliderState): ISliderState | null {\n if (\n (props.sliderThumbs.length > 0 && props.sliderThumbs[0].value !== state.sliderThumbs[0].value) ||\n (props.sliderThumbs.length > 1 && props.sliderThumbs[1].value !== state.sliderThumbs[1].value)\n ) {\n const nextState = { ...state };\n nextState.sliderThumbs[0].value = props.sliderThumbs[0].value;\n if (props.sliderThumbs.length > 1) {\n nextState.sliderThumbs[1].value = props.sliderThumbs[1].value;\n }\n return nextState;\n }\n return null;\n }\n\n constructor(props: ISliderProps) {\n super(props);\n this.isRangeSlider = this.props.sliderThumbs.length === 2;\n this.state = {\n sliderThumbs: this.props.sliderThumbs,\n grab: 0,\n limit: 0,\n active: false,\n id: '',\n showToolTipOnTab: false\n };\n this._handleUpdate = this._handleUpdate.bind(this);\n this._handleDrag = this._handleDrag.bind(this);\n this._handleEnd = this._handleEnd.bind(this);\n this._handleStart = this._handleStart.bind(this);\n this.toggle = this.toggle.bind(this);\n this._handleOnChange = this._handleOnChange.bind(this);\n this._setSliderValue = this._setSliderValue.bind(this);\n this._getThumbFromProps = this._getThumbFromProps.bind(this);\n this._publishNotification = this._publishNotification.bind(this);\n this._getThumbAndPublishEvent = this._getThumbAndPublishEvent.bind(this);\n this._willThumbsCrossOver = this._willThumbsCrossOver.bind(this);\n this._handleOnClick = this._handleOnClick.bind(this);\n if (\n MsDyn365.isBrowser &&\n document.body.parentElement &&\n document.body.parentElement.getAttribute('dir') === 'rtl' &&\n (this.props.shouldSliderAdjustToRTL === undefined || this.props.shouldSliderAdjustToRTL)\n ) {\n orientations.horizontal.direction = 'right';\n }\n }\n\n public componentDidMount(): void {\n this._handleUpdate();\n MsDyn365.isBrowser && window.addEventListener('resize', this._handleUpdate);\n }\n\n public componentDidUpdate(): void {\n if (this.ref.current && this.ref.current.offsetWidth > rangeDefaultChkValue && this.state.limit === rangeDefaultChkValue) {\n this._handleUpdate();\n }\n }\n\n public toggle = (): void => {\n this.setState((_prevState: ISliderState) => {\n return { showToolTipOnTab: !_prevState.showToolTipOnTab };\n });\n };\n\n public shouldComponentUpdate(nextProps: ISliderProps, _nextState: ISliderState): boolean {\n let shouldRender = true;\n if (this.isRangeSlider) {\n const thumb1Position = this._getPositionFromValue(nextProps.sliderThumbs[0].value);\n const thumb2Position = this._getPositionFromValue(nextProps.sliderThumbs[1].value);\n\n /**\n * During first render the second thumb isn't positioned since handleUpdate positions it after it's mounted\n * in the componentDidMount method. This check is to make sure that the first render happens correctly and then\n * for all subsequent renders and updates, the thumb2 position cannot be 0 thanks to this condition.\n */\n shouldRender = thumb2Position > 0 ? thumb2Position >= thumb1Position + nextProps.step : true;\n }\n return shouldRender;\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this._handleUpdate);\n }\n\n public render(): JSX.Element {\n const { orientation } = this.props;\n const sliderClass = this.props.className\n ? `${Slider.sliderBaseClass} slider-${orientation} ${this.props.className}`\n : `${Slider.sliderBaseClass} slider-${orientation}`;\n\n const sliderId = this.props.id;\n const dimension = orientations[orientation].dimension;\n const direction = orientations[orientation].direction;\n const camelCasedDirection = toUpperCaseFirstChar(direction);\n const positionThumb1 = this._getPositionFromValue(this.props.sliderThumbs[0].value);\n const coordsThumb1 = this._coordinates(positionThumb1);\n let fillStyle = { [dimension]: `${coordsThumb1.fill}px` };\n const handleStyle: React.CSSProperties[] = [];\n handleStyle.push({ [direction]: `${coordsThumb1.handle}px` });\n const trackProgressClass = classnames('progress-bar', this.props.trackProgressClass ? this.props.trackProgressClass : '');\n const sliderKey = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n\n if (this.isRangeSlider) {\n const positionThumb2 = this._getPositionFromValue(this.props.sliderThumbs[1].value);\n const coordsThumb2 = this._coordinates(positionThumb2);\n handleStyle.push({ [direction]: `${coordsThumb2.handle}px` });\n if (orientation === 'vertical') {\n fillStyle = {\n marginBottom: `${coordsThumb1.fill}px`,\n [dimension]: `${coordsThumb2.fill - coordsThumb1.fill}px`\n };\n } else {\n fillStyle = {\n [`margin${camelCasedDirection}`]: `${\n orientations.horizontal.direction === 'right' ? coordsThumb1.fill - this.state.grab : coordsThumb1.fill\n }px`,\n [dimension]: `${coordsThumb2.handle - coordsThumb1.handle}px`\n };\n }\n }\n\n return (\n
\n
\n {this.props.showProgressBar && (\n \n )}\n
\n {this._renderSliderThumbs(handleStyle)}\n
\n {this.props.showLabels ? this._renderLabels(this.props.labels!) : null}\n
\n );\n }\n\n private readonly _renderLabels = (labels: ISliderLabel[]): JSX.Element => {\n return (\n
\n {labels.map((label: ISliderLabel) => {\n return (\n
\n {label.labelString}\n
\n );\n })}\n
\n );\n };\n\n private readonly _renderSliderThumbs = (thumbStyles: React.CSSProperties[]): React.ReactFragment | JSX.Element | null => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Added gridsetting values.\n const context = {\n gridSettings: {\n xs: { w: 767 },\n sm: { w: 991 },\n md: { w: 1199 },\n lg: { w: 1599 },\n xl: { w: 1600 }\n }\n } as IRequestContext;\n\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\n const isMobileView = isMobileCheck === 'xs' || isMobileCheck === 'sm';\n\n const sliderAriaLabelMin = format('{0} {1}', this.props.sliderThumbs[0].ariaLabel, this.state.sliderThumbs[0].value);\n\n const sliderAriaLabelMax = this.isRangeSlider\n ? format('{0} {1}', this.props.sliderThumbs[1].ariaLabel, this.state.sliderThumbs[1].value)\n : '';\n return (\n <>\n {\n this.setState({\n showToolTipOnTab: false\n });\n this.props.onBlur && this.props.onBlur();\n }}\n onKeyDown={() => {\n this.setState({\n showToolTipOnTab: true\n });\n }}\n onFocus={() => {\n this.setState({\n showToolTipOnTab: true\n });\n }}\n tabIndex={0}\n style={thumbStyles[0]}\n aria-valuenow={isMobileView ? undefined : this.state.sliderThumbs[0].value}\n />\n {' '}\n {this.isRangeSlider && (\n <>\n \n \n \n )}\n \n );\n };\n\n private readonly _handleUpdate = (): void => {\n const { orientation } = this.props;\n const dimensionStr = toUpperCaseFirstChar(orientations[orientation].dimension);\n\n // To get the offsetWidth and offsetHeight of the slider element\n const sliderPos = this.ref.current![`offset${dimensionStr}`];\n const handlePos = this.thumb1Ref.current!.sliderButtonRef.current![`offset${dimensionStr}`];\n\n if (handlePos !== 0) {\n this.setState({\n limit: sliderPos - handlePos,\n grab: orientations.horizontal.direction === 'right' ? -handlePos / 2 : handlePos / 2\n });\n }\n };\n\n private readonly _handleStart = (e: React.TouchEvent | React.KeyboardEvent | React.MouseEvent): void => {\n e.stopPropagation();\n const eventType = e.type;\n document.addEventListener('mousemove', (this._handleDrag as unknown) as EventListener);\n document.addEventListener('mouseup', (this._handleEnd as unknown) as EventListener);\n const castTarget = e.target as HTMLElement;\n const thumbid = castTarget && castTarget.id;\n this.setState(\n (_prevState: ISliderState) => {\n return { active: true, id: thumbid };\n },\n () => {\n this._getThumbAndPublishEvent(castTarget, EventType.Start, eventType);\n }\n );\n };\n\n private _handleEnd(e: React.KeyboardEvent | React.MouseEvent | React.TouchEvent): void {\n e.stopPropagation();\n const eventType = e.type;\n const castTarget = e.target as HTMLElement;\n this.setState(\n (_prevState: ISliderState) => {\n return { active: false, id: '' };\n },\n () => {\n this._getThumbAndPublishEvent(castTarget, EventType.End, eventType);\n }\n );\n document.removeEventListener('mousemove', (this._handleDrag as unknown) as EventListener);\n document.removeEventListener('mouseup', (this._handleEnd as unknown) as EventListener);\n }\n\n private _handleDrag(e: React.MouseEvent | React.TouchEvent): void {\n e.stopPropagation();\n const value = this._position(e);\n const eventType = e.type;\n const castThumb = e.target as HTMLElement;\n const thumbId = this.state.id || (castThumb && castThumb.id);\n const thumbPressed = this._getThumbFromProps(thumbId);\n\n if (thumbPressed && !this._willThumbsCrossOver(thumbPressed[0], e)) {\n thumbPressed[0].value = value;\n this._setSliderValue(thumbPressed, castThumb, eventType);\n }\n }\n\n private _handleOnClick(e: React.MouseEvent | React.TouchEvent): void {\n e.stopPropagation();\n const position = this._position(e);\n const castThumb = e.target as HTMLElement;\n const eventType = e.type;\n const thumb1 = this._getThumbFromProps(this.props.sliderThumbs[0].id);\n\n if (this.isRangeSlider) {\n const thumb2 = this._getThumbFromProps(this.props.sliderThumbs[1].id);\n\n if (thumb1 && thumb2) {\n const currentMinValue = thumb1[0].value;\n const currentMaxValue = thumb2[0].value;\n const lengthToMinValue = position - currentMinValue;\n const lengthToMaxValue = currentMaxValue - position;\n\n if (lengthToMinValue < lengthToMaxValue) {\n thumb1[0].value = position;\n } else {\n thumb2[0].value = position;\n }\n\n this.setState(\n (_prevState: ISliderState) => {\n return { sliderThumbs: [thumb1[0], thumb2[0]] };\n },\n () => {\n this._getThumbAndPublishEvent(castThumb, EventType.Change, eventType);\n }\n );\n }\n } else if (thumb1) {\n thumb1[0].value = position;\n this.setState(\n (_prevState: ISliderState) => {\n return { sliderThumbs: thumb1 };\n },\n () => {\n this._getThumbAndPublishEvent(castThumb, EventType.Change, eventType);\n }\n );\n }\n }\n\n private readonly _position = (e: React.KeyboardEvent | React.MouseEvent | React.TouchEvent): number => {\n const { grab } = this.state;\n const { orientation } = this.props;\n const castEvent = (e as unknown) as TouchEvent;\n const node = this.ref;\n const coordinateStyle = toUpperCaseFirstChar(orientations[orientation].coordinate);\n const directionStyle = orientations[orientation].direction;\n\n // String conversion to the right property value\n const clientCoordinateStyle = `client${coordinateStyle}`;\n const coordinate = !castEvent.touches ? e[clientCoordinateStyle] : castEvent.touches[0][clientCoordinateStyle];\n const direction = node.current!.getBoundingClientRect()[directionStyle];\n const pos = orientations.horizontal.direction === 'right' ? direction - coordinate - grab : coordinate - direction - grab;\n return this._getValueFromPosition(pos);\n };\n\n private readonly _getPositionFromValue = (value: number): number => {\n const { limit } = this.state;\n const { min, max } = this.props;\n const diffMaxMin = max - min;\n const diffValMin = value - min;\n const percentage = diffValMin / diffMaxMin;\n return Math.round(percentage * limit);\n };\n\n /**\n * Translate position of slider to slider value.\n * @param {number} pos - Current position/coordinates of slider.\n * @returns {number} Value - Slider value.\n */\n private readonly _getValueFromPosition = (pos: number): number => {\n const { limit } = this.state;\n const { orientation, min, max, step } = this.props;\n\n const percentage = clamp(pos, 0, limit) / (limit || 1);\n const baseVal = step * Math.round((percentage * (max - min)) / step);\n const value = orientation === 'horizontal' ? baseVal + min : max - baseVal;\n\n return clamp(value, min, max);\n };\n\n /**\n * Grab coordinates of slider.\n * @param {Object} pos - Position object.\n * @returns {Object} - Slider fill/handle coordinates.\n */\n private readonly _coordinates = (pos: number): IFillCoordinates => {\n const { limit, grab } = this.state;\n const { orientation } = this.props;\n const value = this._getValueFromPosition(pos);\n const position = this._getPositionFromValue(value);\n const handlePos = orientation === 'horizontal' ? position + grab : position;\n const fillPos = orientation === 'horizontal' ? handlePos : limit - handlePos;\n\n return {\n fill: fillPos,\n handle: handlePos,\n label: handlePos\n };\n };\n\n private _handleOnChange(e: React.ChangeEvent): void {\n e.stopPropagation();\n const castTarget = e.target as HTMLInputElement;\n const thumbInteractedWith = castTarget && this._getThumbFromProps(castTarget.id.replace('range', ''));\n const eventType = e.type;\n thumbInteractedWith![0].value = Number.parseInt(e.target.value, 10);\n this._setSliderValue(thumbInteractedWith!, castTarget, eventType);\n }\n\n private readonly _setSliderValue = (sliderThumb: ISliderThumbProps[], castTarget: HTMLElement, eventType: string): void => {\n if (this.isRangeSlider) {\n if (this.props.sliderThumbs[0].value > this.props.sliderThumbs[1].value) {\n this.props.sliderThumbs[0].value = this.props.sliderThumbs[1].value;\n }\n this.setState(\n (_prevState: ISliderState) => {\n return {\n sliderThumbs: { ...this.props.sliderThumbs }\n };\n },\n () => {\n this._getThumbAndPublishEvent(castTarget, EventType.Change, eventType);\n }\n );\n } else {\n this.setState(\n (_prevState: ISliderState) => {\n return {\n sliderThumbs: sliderThumb\n };\n },\n () => {\n this._getThumbAndPublishEvent(castTarget, EventType.Change, eventType);\n }\n );\n }\n };\n\n private _getThumbFromProps(thumbId: string): ISliderThumbProps[] | null {\n let thumbFound;\n\n thumbFound = this.props.sliderThumbs.filter((thumb: ISliderThumbProps) => {\n return thumb.id === thumbId;\n });\n\n return thumbFound.length > 0 ? thumbFound : null;\n }\n\n private readonly _publishNotification = (\n thumb: ISliderThumbProps | null,\n delegate: (sliderNotification: Readonly) => void,\n eventType: string\n ): void => {\n delegate({\n id: (thumb && thumb.id) || '',\n slider: this,\n firstThumbValue: this.state.sliderThumbs[0].value,\n secondThumbValue: (this.state.sliderThumbs[1] && this.state.sliderThumbs[1].value) || Number.NaN,\n eventType\n });\n };\n\n private readonly _getThumbAndPublishEvent = (element: HTMLElement, eventType: EventType, nativeEventType: string): void => {\n let elmenentId = '';\n if (element && element.id && eventType === EventType.Change) {\n elmenentId = element.id.replace('range', '');\n }\n const thumb = element && this._getThumbFromProps(elmenentId);\n\n if (eventType === EventType.End) {\n if (this.props.onChangeEnd) {\n this._publishNotification(thumb && thumb[0], this.props.onChangeEnd, nativeEventType);\n }\n }\n if (eventType === EventType.Start) {\n if (this.props.onChangeStart) {\n this._publishNotification(thumb && thumb[0], this.props.onChangeStart, nativeEventType);\n }\n }\n if (eventType === EventType.Change) {\n if (this.props.onChange) {\n this._publishNotification(thumb && thumb[0], this.props.onChange, nativeEventType);\n }\n }\n };\n\n private _willThumbsCrossOver(\n thumbPressed: ISliderThumbProps,\n event: React.KeyboardEvent | React.MouseEvent | React.TouchEvent\n ): boolean {\n if (!this.isRangeSlider) {\n return false;\n }\n let keycode = 0;\n let checkCondition = false;\n\n if (event.type === 'keydown') {\n const castEvent = (event as unknown) as KeyboardEvent;\n keycode = castEvent.keyCode;\n if (\n (thumbPressed === this.props.sliderThumbs[1] && (keycode === 38 || keycode === 39)) ||\n (thumbPressed === this.props.sliderThumbs[0] && (keycode === 37 || keycode === 40))\n ) {\n return false;\n }\n checkCondition = true;\n }\n if (event.type === 'touchmove' || event.type === 'mousemove' || event.type === 'click') {\n const value = this._position(event);\n if (\n (this.state.sliderThumbs[1].value < value && thumbPressed.id === this.props.sliderThumbs[1].id) ||\n (this.state.sliderThumbs[0].value > value && thumbPressed.id === this.props.sliderThumbs[0].id)\n ) {\n return false;\n }\n checkCondition = true;\n }\n\n return !(checkCondition && this.props.sliderThumbs[1].value - this.props.step * 2 >= this.props.sliderThumbs[0].value);\n }\n}\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 IRadioButtonProps {\n isChecked?: boolean;\n value?: string;\n ariaSetSize?: number;\n ariaPosInSet?: number;\n ariaLabel?: string;\n name: string;\n className?: string;\n isSingleSelectOnly?: boolean;\n onChange(reacords: object): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaLabel\n * @param root0.name\n * @param root0.className\n * @param root0.onChange\n * @param root0.isSingleSelectOnly\n * @extends {React.FC}\n */\nconst CheckBoxButton: React.FC = ({ isChecked, value, ariaLabel, name, className, onChange, isSingleSelectOnly }) => {\n const cssClass = classnames('ms-input-radio', className ? className : '');\n return (\n \n );\n};\n\nexport default CheckBoxButton;\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 type NodeTag = React.ReactType;\n\nexport interface INodeProps {\n /* Wrapper class */\n className: string;\n\n /* Children node */\n children?: React.ReactNode;\n\n /* Wrapper Tag */\n tag?: NodeTag;\n\n /* Other attrributes */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any;\n}\n\nexport type IComponentNodeProps = INodeProps &\n T & {\n /* Wrapper Tag */\n tag?: React.ReactType;\n };\n\nexport const Node: React.FC = React.forwardRef(\n ({ className = '', tag: Tag = 'div', element: Element, ...restAttribute }, ref) => {\n return ;\n }\n);\n\nexport default Node;\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\nimport { IWaitingProps } from './Waiting.props';\n\n/**\n * Waiting - this component is a visual indication of a pre-loader.\n */\nexport default class Waiting extends React.PureComponent {\n public static defaultProps: Partial = {\n className: 'msc-waiting-circular'\n };\n\n public render(): JSX.Element {\n const { className, ...props } = this.props;\n const watingClassName = `msc-waiting ${className}`;\n\n return
;\n }\n}\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\nimport { getTargetElement, mapToCssModules } from '../common/utilities';\nimport PopperContent from '../popper-content/PopperContent';\nimport { ITooltipProps } from './Tooltip.props';\n\nconst DEFAULT_DELAYS = {\n show: 0,\n hide: 250\n};\n\n/**\n * Tooltip component.\n */\nexport default class Tooltip extends React.PureComponent {\n public static defaultProps: Partial = {\n isOpen: false,\n shouldShowMiniCart: false,\n shouldShowCloseButton: false,\n hideArrow: false,\n hideAriaHidden: false,\n placement: 'top',\n placementPrefix: 'msc-bs-tooltip',\n delay: DEFAULT_DELAYS,\n toggle: () => {\n return;\n }\n };\n\n public ref: React.RefObject;\n\n public hideTimeout?: number;\n\n public showTimeout?: number;\n\n public target: HTMLElement | null;\n\n public isMobile: boolean;\n\n public tabPressed: boolean;\n\n constructor(props: ITooltipProps) {\n super(props);\n\n this.ref = React.createRef();\n this.addTargetEvents = this.addTargetEvents.bind(this);\n this.handleDocumentClick = this.handleDocumentClick.bind(this);\n this.removeTargetEvents = this.removeTargetEvents.bind(this);\n this.toggle = this.toggle.bind(this);\n this.onMouseOverTooltip = this.onMouseOverTooltip.bind(this);\n this.onMouseLeaveTooltip = this.onMouseLeaveTooltip.bind(this);\n this.onMouseOverTooltipContent = this.onMouseOverTooltipContent.bind(this);\n this.onMouseLeaveTooltipContent = this.onMouseLeaveTooltipContent.bind(this);\n this.show = this.show.bind(this);\n this.hide = this.hide.bind(this);\n this.onFocusOutTarget = this.onFocusOutTarget.bind(this);\n this.onEscKeyDown = this.onEscKeyDown.bind(this);\n this.onEscKeyDownNative = this.onEscKeyDownNative.bind(this);\n this.target = null;\n this.isMobile = false;\n this.tabPressed = false;\n }\n\n public componentDidMount(): void {\n this.target = getTargetElement(this.props.target);\n this.addTargetEvents();\n\n // Remove the attr from parent obj when tooltip is hidden\n\n const body = document.getElementsByTagName('body').item(0);\n if (body) {\n const bodyClasses = body.getAttribute('class');\n if (bodyClasses && bodyClasses.includes('mobile')) {\n this.isMobile = true;\n }\n }\n\n if (this.target !== null && this.target.attributes.getNamedItem('aria-describedby') !== null) {\n this.target.attributes.removeNamedItem('aria-describedby');\n }\n }\n\n public componentWillUnmount(): void {\n this.clearHideTimeout();\n this.clearShowTimeout();\n this.removeTargetEvents();\n }\n\n public onMouseOverTooltip(e: MouseEvent): void {\n if (this.hideTimeout) {\n this.clearHideTimeout();\n }\n this.showTimeout = window.setTimeout(this.show.bind(this, e), this.getDelay('show'));\n }\n\n public onMouseLeaveTooltip(e: MouseEvent): void {\n if (this.showTimeout) {\n this.clearShowTimeout();\n }\n this.hideTimeout = window.setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n\n public onMouseOverTooltipContent(): void {\n if (this.hideTimeout) {\n this.clearHideTimeout();\n }\n }\n\n public onMouseLeaveTooltipContent(e: React.MouseEvent): void {\n if (this.showTimeout) {\n this.clearShowTimeout();\n }\n this.hideTimeout = window.setTimeout(this.hide.bind(this, e.nativeEvent), this.getDelay('hide'));\n }\n\n public onFocusOutTarget(e: Event): void {\n if (!this.props.isOpen) {\n return;\n }\n\n if (this.tabPressed) {\n this.tabPressed = false;\n setTimeout(() => {\n const nextFocus = document.activeElement;\n\n if (!this.ref || !this.ref.current || !this.ref.current.contains(nextFocus)) {\n this.hide(e);\n }\n }, 1);\n } else {\n this.hide(e);\n }\n }\n\n public onEscKeyDown(e: React.KeyboardEvent): void {\n if (e.keyCode === 9) {\n this.tabPressed = true;\n } else if (e.key === 'Escape') {\n this.hide(e.nativeEvent);\n }\n }\n\n public onEscKeyDownNative(e: KeyboardEvent): void {\n if (e.keyCode === 9) {\n this.tabPressed = true;\n } else if (e.key === 'Escape') {\n this.hide(e);\n }\n }\n\n public getDelay(key: 'show' | 'hide'): number {\n const { delay } = this.props;\n if (typeof delay === 'object') {\n return isNaN(delay[key]) ? DEFAULT_DELAYS[key] : delay[key];\n }\n\n return delay || 0;\n }\n\n public show(e: Event): void {\n if (!this.props.isOpen) {\n this.clearShowTimeout();\n this.toggle(e);\n\n // Create a new attr for parent obj when tooltip shown\n if (this.target !== null) {\n const ariaAttr = document.createAttribute('aria-describedby');\n ariaAttr.value = this.props.id as string;\n this.target.attributes.setNamedItem(ariaAttr);\n }\n }\n }\n\n public hide(e: Event): void {\n if (this.props.isOpen) {\n this.clearHideTimeout();\n this.toggle(e);\n\n // Remove the attr from parent obj when tooltip is hidden\n if (this.target !== null && this.target.attributes.getNamedItem('aria-describedby') !== null) {\n this.target.attributes.removeNamedItem('aria-describedby');\n }\n }\n }\n\n public clearShowTimeout(): void {\n clearTimeout(this.showTimeout);\n this.showTimeout = undefined;\n }\n\n public clearHideTimeout(): void {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = undefined;\n }\n\n public handleDocumentClick(e: Event): void {\n if (!this.target) {\n return;\n }\n\n const target = e.target as HTMLElement;\n if (e.target === this.target || this.target.contains(target)) {\n if (this.hideTimeout) {\n this.clearHideTimeout();\n }\n\n if (!this.props.isOpen) {\n this.toggle(e);\n }\n } else if (this.props.isOpen && target.getAttribute('role') !== 'tooltip') {\n if (this.showTimeout) {\n this.clearShowTimeout();\n }\n this.hideTimeout = window.setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }\n\n public addTargetEvents(): void {\n if (!this.target) {\n return;\n }\n\n if (this.props.trigger) {\n const triggers = this.props.trigger.split(' ');\n if (!triggers.includes('manual')) {\n if (triggers.includes('click')) {\n ['click', 'touchstart'].forEach((event: string) => {\n document.addEventListener(event, this.handleDocumentClick, true);\n });\n }\n if (triggers.includes('hover')) {\n this.target.addEventListener('mouseover', this.onMouseOverTooltip, true);\n this.target.addEventListener('mouseout', this.onMouseLeaveTooltip, true);\n }\n if (triggers.includes('focus')) {\n this.target.addEventListener('focusin', this.show, true);\n if (this.props.displayMode === 'FLYOUT') {\n this.target.addEventListener('focusout', this.onFocusOutTarget, true);\n } else {\n this.target.addEventListener('focusout', this.hide, true);\n }\n }\n this.target.addEventListener('keydown', this.onEscKeyDownNative, true);\n }\n } else {\n this.target.addEventListener('mouseover', this.onMouseOverTooltip, true);\n this.target.addEventListener('mouseout', this.onMouseLeaveTooltip, true);\n this.target.addEventListener('keydown', this.onEscKeyDownNative, true);\n this.target.addEventListener('focusin', this.show, true);\n if (this.props.displayMode === 'FLYOUT') {\n this.target.addEventListener('focusout', this.onFocusOutTarget, true);\n } else {\n this.target.addEventListener('focusout', this.hide, true);\n }\n\n ['click', 'touchstart'].forEach((event: string) => {\n document.addEventListener(event, this.handleDocumentClick, true);\n });\n }\n }\n\n public removeTargetEvents(): void {\n if (!this.target) {\n return;\n }\n\n this.target.removeEventListener('mouseover', this.onMouseOverTooltip, true);\n this.target.removeEventListener('mouseout', this.onMouseLeaveTooltip, true);\n this.target.removeEventListener('keydown', this.onEscKeyDownNative, true);\n this.target.removeEventListener('focusin', this.show, true);\n this.target.removeEventListener('focusout', this.onFocusOutTarget, true);\n this.target.removeEventListener('focusout', this.hide, true);\n\n ['click', 'touchstart'].forEach((event: string) => {\n document.removeEventListener(event, this.handleDocumentClick, true);\n });\n }\n\n public toggle(e?: Event): void {\n if (e && this.props.disabled) {\n e.preventDefault();\n }\n\n if (this.props.toggle) {\n this.props.toggle();\n }\n }\n\n public render(): JSX.Element | null {\n if (!this.props.isOpen || this.isMobile) {\n return null;\n }\n\n const {\n cssModule,\n isOpen,\n target,\n placementPrefix,\n hideArrow,\n hideAriaHidden,\n className,\n innerClassName,\n innerRef,\n modifiers,\n toggle,\n delay,\n placement,\n disabled,\n trigger,\n boundariesElement,\n offset,\n arrowClassName,\n displayMode,\n id,\n ...attributes\n } = this.props;\n\n const classes = mapToCssModules(\n classNames(displayMode === 'FLYOUT' ? 'msc-flyout-inner' : 'msc-tooltip-inner', this.props.innerClassName),\n this.props.cssModule\n );\n\n const popperClasses = mapToCssModules(\n classNames(displayMode === 'FLYOUT' ? 'msc-flyout' : 'msc-tooltip', 'show', this.props.className),\n this.props.cssModule\n );\n\n return (\n
\n \n {this.props.toggle && this.props.shouldShowCloseButton ? (\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 Popover from './Popover';\n\nexport * from './Popover.props';\n\nexport { Popover };\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';\nimport Transition from 'react-transition-group/Transition';\n\nimport { mapToCssModules, TransitionStatuses, TransitionTimeouts } from '../common/utilities';\nimport { ICollapseProps } from './Collapse.props';\n\nexport interface ICollapseState {\n height: number | null;\n}\n\ntype IHash = {\n [key in TransitionStatuses]: string;\n};\n\n/**\n * This is the controlled version of a Collapse component, and as such the toggle behavior is expected to be handled in a parent component.\n * @see See [Uncontrolled Components - React](https://reactjs.org/docs/uncontrolled-components.html) to learn more.\n * @visibleName Collapse (controlled)\n */\nexport default class Collapse extends React.Component {\n public static defaultProps: Partial = {\n isOpen: false,\n tag: 'div',\n timeout: TransitionTimeouts.Collapse\n };\n\n public props: ICollapseProps;\n\n public state: ICollapseState;\n\n private readonly _transitionStatusToClassHash: IHash = {\n entering: 'collapsing',\n entered: 'collapse show',\n exiting: 'collapsing',\n exited: 'collapse'\n };\n\n private readonly _tagRef: React.RefObject = React.createRef();\n\n constructor(props: ICollapseProps) {\n super(props);\n this.props = props;\n\n this.state = {\n height: 0\n };\n\n this._onEntering = this._onEntering.bind(this);\n this._onExit = this._onExit.bind(this);\n this._onExited = this._onExited.bind(this);\n this._onExiting = this._onExiting.bind(this);\n this._reevaluateHeight = this._reevaluateHeight.bind(this);\n }\n\n public componentDidMount(): void {\n window && window.addEventListener('resize', this._reevaluateHeight);\n }\n\n public componentDidUpdate(nextProps: ICollapseProps): void {\n if (nextProps.children !== this.props.children) {\n this._reevaluateHeight();\n }\n }\n\n public componentWillUnmount(): void {\n window && window.removeEventListener('resize', this._reevaluateHeight);\n }\n\n public shouldComponentUpdate(nextProps: ICollapseProps, nextState: ICollapseState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n tag,\n isOpen,\n className,\n children,\n navbar,\n cssModule,\n\n in: collapseIn,\n mountOnEnter,\n unmountOnExit,\n appear,\n enter,\n exit,\n timeout,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n\n ...otherProps\n } = this.props;\n\n const Tag = tag || 'div';\n const transitionProps = {\n in: collapseIn,\n mountOnEnter,\n unmountOnExit,\n appear,\n enter,\n exit,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited\n };\n\n const { height } = this.state;\n const style = height === null || height === 0 ? null : { minHeight: height };\n\n return (\n \n {(status: TransitionStatuses) => {\n const collapseClass = this._getTransitionClass(status);\n const classes = mapToCssModules(classNames(className, collapseClass, navbar && 'navbar-collapse'), cssModule);\n\n return (\n \n {children}\n \n );\n }}\n \n );\n }\n\n public reEvaluateHeight(): void {\n this._reevaluateHeight();\n }\n\n private _reevaluateHeight(): void {\n const node = this._tagRef.current;\n if (node !== null && node.firstElementChild && node.firstElementChild.scrollHeight > 0) {\n this.setState({ height: node.firstElementChild.scrollHeight });\n }\n }\n\n private _getTransitionClass(status: TransitionStatuses): string {\n return this._transitionStatusToClassHash[status] || 'collapse';\n }\n\n private _onEntering(node: HTMLElement, isAppearing: boolean): void {\n this.setState({ height: node.scrollHeight });\n\n if (this.props.onEntering) {\n this.props.onEntering(node, isAppearing);\n }\n }\n\n private _onExit(node: HTMLElement): void {\n this.setState({ height: node.scrollHeight });\n\n if (this.props.onExit) {\n this.props.onExit(node);\n }\n }\n\n private _onExiting(node: HTMLElement): void {\n this.setState({ height: 0 });\n\n if (this.props.onExiting) {\n this.props.onExiting(node);\n }\n }\n\n /**\n * Get Parent element.\n * @param node - HTML Element.\n */\n private readonly _updateParentElement = (node: HTMLElement): void => {\n const parentElement = node.parentElement;\n if (parentElement) {\n if (parentElement.classList.contains('collapse') && parentElement.classList.contains('show')) {\n parentElement.style.minHeight = 'auto';\n }\n this._updateParentElement(parentElement);\n }\n };\n\n private _onExited(node: HTMLElement): void {\n this.setState({ height: null });\n this._updateParentElement(node);\n\n if (this.props.onExited) {\n this.props.onExited(node);\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 classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport { IButtonProps } from './Button.props';\n\n/**\n * Button component.\n */\nexport default class Button extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'button',\n outline: false\n };\n\n public props: IButtonProps;\n\n constructor(props: IButtonProps) {\n super(props);\n this.props = props;\n this.onClick = this.onClick.bind(this); // Put this in componentDidMount\n }\n\n public render(): JSX.Element {\n const { active, block, className, cssModule, color, outline, size, tag, innerRef, ...attributes } = this.props;\n const classes = mapToCssModules(\n classNames(\n className,\n 'msc-btn',\n outline && color\n ? `btn-outline-${color}`\n : color && outline === false\n ? `btn-${color}`\n : color === undefined && outline === true\n ? 'btn-outline'\n : '',\n size ? `btn-${size}` : false,\n block ? 'btn-block' : false,\n { active, disabled: this.props.disabled }\n ),\n cssModule\n );\n\n let Tag = tag || 'button';\n\n if (attributes.href && Tag === 'button') {\n Tag = 'a';\n }\n\n return (\n \n );\n }\n\n private readonly onClick = (e: React.MouseEvent) => {\n if (this.props.disabled) {\n e.preventDefault();\n\n return;\n }\n\n if (this.props.onClick) {\n this.props.onClick(e);\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 Alert from './alert/Alert';\nimport { IAlertProps } from './alert/Alert.props';\nimport BackToTop from './back-to-top/BackToTop';\nimport Button from './button/Button';\nimport { IButtonProps } from './button/Button.props';\nimport Collapse from './collapse/Collapse';\nimport { ICollapseProps } from './collapse/Collapse.props';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IContentAction,\n IPayLoad,\n ITelemetryContent,\n onTelemetryClick,\n TelemetryConstant\n} from './common/telemetryHelper';\nimport ControlledDrawer from './drawer/ControlledDrawer';\nimport Drawer, { IDrawerState } from './drawer/Drawer';\nimport Fade, { IFadeState } from './fade/Fade';\nimport { IFadeProps } from './fade/Fade.props';\nimport Flipper from './flipper/Flipper';\nimport { FormBuilder } from './form-builder/form-builder';\nimport Heading from './heading/Heading';\nimport { HeadingTag, IHeadingProps } from './heading/Heading.props';\nimport { IncrementalQuantity } from './incremental-quantity';\nimport { isMobile } from './isMobile/isMobile';\nimport { VariantType } from './isMobile/isMobile.props';\nimport LabeledDropdown from './labeled-dropdown/LabeledDropdown';\nimport { ILabeledDropdownOnChangeNotification, ILabeledDropdownOption } from './labeled-dropdown/LabeledDropdown.props';\nimport Pagination from './pagination/Pagination';\nimport PaginationItem from './pagination/PaginationItem';\nimport PaginationLink from './pagination/PaginationLink';\nimport UncontrolledPagination from './pagination/UncontrolledPagination';\nimport PopperContent from './popper-content/PopperContent';\nimport Popup, { IPopupProps } from './popup/Popup';\nimport PopupProducts, { IPopupProductsProps } from './popup-products/Popup-products';\nimport Progress from './progress/Progress';\nimport SingleSlideCarousel from './single-slide-carousel/SingleSlideCarousel';\nimport { ISingleSlideCarouselProps } from './single-slide-carousel/SingleSlideCarousel.props';\nimport Slider from './slider/Slider';\nimport { ISliderChangeNotification, ISliderLabel, ISliderProps, ISliderThumbProps } from './slider/Slider.props';\nimport Table, { IDataTableProps, ITableItemProps } from './table/Table';\nimport Tooltip from './tooltip/Tooltip';\nimport UncontrolledTooltip from './tooltip/UncontrolledTooltip';\nimport Waiting from './waiting/Waiting';\nimport { ImagefullView, IModalViewProps } from './zoom-image/ImagefullView';\nimport {\n defaultDataScale,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInit,\n inlineZoomInitClick,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle\n} from './zoom-image/ZoomImage';\n\nexport * from './common/KeyCodes';\nexport * from './common/stringExtensions';\nexport * from './common/localeBasedPrice';\nexport * from './common/utilities';\nexport * from './common/urlCheck';\nexport * from './modal';\nexport * from './popover';\nexport * from './price';\nexport * from './quantity';\nexport * from './table';\nexport * from './wrapper/module';\nexport * from './wrapper/node';\nexport {\n Alert,\n BackToTop,\n Button,\n Collapse,\n ControlledDrawer,\n defaultDataScale,\n Drawer,\n Fade,\n Flipper,\n FormBuilder,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n Heading,\n HeadingTag,\n IAlertProps,\n IButtonProps,\n ICollapseProps,\n IContentAction,\n IDataTableProps,\n IDrawerState,\n IFadeProps,\n IFadeState,\n IHeadingProps,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n ImagefullView,\n IModalViewProps,\n IncrementalQuantity,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInit,\n inlineZoomInitClick,\n IPayLoad,\n IPopupProductsProps,\n IPopupProps,\n ISingleSlideCarouselProps,\n ISliderChangeNotification,\n ISliderLabel,\n ISliderProps,\n ISliderThumbProps,\n isMobile,\n ITableItemProps,\n ITelemetryContent,\n LabeledDropdown,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n onTelemetryClick,\n Pagination,\n PaginationItem,\n PaginationLink,\n PopperContent,\n Popup,\n PopupProducts,\n Progress,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n Slider,\n Table,\n TelemetryConstant,\n Tooltip,\n UncontrolledPagination,\n UncontrolledTooltip,\n VariantType,\n Waiting\n};\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\nimport { Button } from '..';\nimport { Modal, ModalBody, ModalHeader } from '../modal';\n\nexport interface IPopupProductsProps {\n dialogStrings?: {\n closeWindowButtonText: string;\n };\n\n className: string;\n processStatusClass: string;\n text: string;\n\n modalOpen: boolean | undefined;\n setModalOpen(newValue: boolean): void;\n}\n\nexport const PopupProducts = (popupProps: IPopupProductsProps) => {\n const { processStatusClass, dialogStrings, className, text, modalOpen, setModalOpen } = popupProps;\n\n const closeModal = React.useCallback(() => {\n setModalOpen(false);\n }, [setModalOpen]);\n\n if (!dialogStrings || !text) {\n return null;\n }\n\n return (\n \n \n \n
\n
{text}
\n \n {dialogStrings.closeWindowButtonText}\n \n \n \n );\n};\n\nexport default PopupProducts;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum KeyCodes {\n Back = 8,\n Tab = 9,\n Enter = 13,\n Shift = 16,\n Ctrl = 17,\n Alt = 18,\n Break = 19,\n CapsLock = 20,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40,\n Print = 44,\n Insert = 45,\n Delete = 46,\n Colon2 = 59, // Opera and Firefox\n Equals2 = 61, // Opera\n Equals3 = 107, // Firefox\n Minus2 = 109, // Opera and Firefox\n Period = 190,\n WindowsLeft = 91,\n WindowsRight = 92,\n WindowsOpera = 219, // Opera\n Menu = 93,\n NumPad0 = 96,\n NumPad1 = 97,\n NumPad2 = 98,\n NumPad3 = 99,\n NumPad4 = 100,\n NumPad5 = 101,\n NumPad6 = 102,\n NumPad7 = 103,\n NumPad8 = 104,\n NumPad9 = 105,\n NumPadMultiply = 106,\n NumPadPlus = 107,\n NumPadMinus = 109,\n NumPadDot = 110,\n NumPadDivide = 111,\n Function1 = 112,\n Function2 = 113,\n Function3 = 114,\n Function4 = 115,\n Function5 = 116,\n Function6 = 117,\n Function7 = 118,\n Function8 = 119,\n Function9 = 120,\n Function10 = 121,\n Function11 = 122,\n Function12 = 123,\n NavigationUp = 138,\n NavigationDown = 139,\n NavigationLeft = 140,\n NavigationRight = 141,\n NavigationAccept = 142,\n NumLock = 144,\n ScrollLock = 145,\n Colon = 186,\n Equals = 187,\n Comma = 188,\n Minus = 189,\n ForwardSlash = 191,\n Tilde = 192,\n GamepadA = 195,\n GamepadB = 196,\n GamepadX = 197,\n GamepadY = 198,\n GamepadRightButton = 199,\n GamepadLeftButton = 200,\n GamepadLeftTrigger = 201,\n GamepadRightTrigger = 202,\n GamepadDPadUp = 203,\n GamepadDPadDown = 204,\n GamepadDPadLeft = 205,\n GamepadDPadRight = 206,\n GamepadSelect = 207,\n GamepadStart = 208,\n GamepadLeftThumbstick = 209,\n GamepadRightThumbstick = 210,\n GamepadLeftThumbstickUp = 211,\n GamepadLeftThumbstickDown = 212,\n GamepadLeftThumbstickRight = 213,\n GamepadLeftThumbstickLeft = 214,\n GamepadRightThumbstickUp = 215,\n GamepadRightThumbstickDown = 216,\n GamepadRightThumbstickRight = 217,\n GamepadRightThumbstickLeft = 218,\n OpenBracket = 219,\n BackSlash = 220,\n CloseBracket = 221,\n Quote = 222\n}\n\n/**\n * Here for test coverage.\n */\nexport class KeycodesClass {\n public testCoverage(): string {\n return ':(';\n }\n}\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\nimport { ILabeledDropdownProps } from './LabeledDropdown.props';\n\nexport interface ILabeledDropdownState {\n selectedIndex: number;\n}\n\n/**\n * Labeled Dropdown component.\n */\nexport default class LabeledDropdown extends React.PureComponent {\n public static defaultProps: Partial = {\n toggleColor: 'link'\n };\n\n constructor(props: ILabeledDropdownProps) {\n super(props);\n this._onSelectOption = this._onSelectOption.bind(this);\n const selectedKey = this.props.selectedOption.key;\n const keys = this.props.dropdownOptions.map(option => option.key);\n this.state = { selectedIndex: keys.indexOf(selectedKey) };\n }\n\n public render(): JSX.Element {\n const { labelText, labelClassname, dropdownId, dropdownOptions, dropdownClassname } = this.props;\n\n const labelClassNames = classNames('msc-l-dropdown__label', labelClassname);\n const dropdownClassNames = classNames('msc-l-dropdown', dropdownClassname);\n const selectedIndex = this._getSelectedIndex();\n\n return (\n <>\n \n \n \n );\n }\n\n private _getSelectedIndex(): number {\n if (this.props.controlledByParent) {\n let selectedIndex = -1;\n const selectedKey = this.props.selectedOption.key;\n for (let i = 0; i < this.props.dropdownOptions.length; i++) {\n if (this.props.dropdownOptions[i].key === selectedKey) {\n selectedIndex = i;\n break;\n }\n }\n\n return selectedIndex;\n }\n\n return this.state.selectedIndex;\n }\n\n private _onSelectOption(event: React.ChangeEvent): void {\n const { dropdownOptions, onSelectOption } = this.props;\n const index = event.currentTarget.selectedOptions[0].index;\n const selectedOption = dropdownOptions[index];\n this.setState({ selectedIndex: index });\n onSelectOption({ selectedOption });\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 { EMPTY } from '@msdyn365-commerce/retail-proxy';\nimport { KeyCodes } from './KeyCodes';\n\nexport interface ILocalizedPrice {\n customizedAmount?: string;\n amountVariable?: string;\n paymentAmount?: number;\n}\n\n/**\n * Get Locale Based Customized Price function.\n * @param customPrice - customPrice.\n * @param state - state.\n * @param locale - locale.\n * @param keyCode - keyCode\n * @returns modified state.\n */\nexport function getLocaleBasedCustomizedPrice(\n customPrice: string,\n state: ILocalizedPrice,\n locale: string,\n keyCode: number\n): ILocalizedPrice {\n // Checking if the backspace is being pressed then remove the particular digit from string. so added char 'B' to identify backspace event.\n const returnState: ILocalizedPrice = state;\n if (keyCode === KeyCodes.Back) {\n // Checking if the all value is being deleted by CTRL+ A+ BACKSPACE, then set value as 0.\n const amountData = (state.amountVariable as string).slice(0, -1);\n if (StringExtensions.isNullOrEmpty(customPrice)) {\n returnState.paymentAmount = parseFloat(customPrice);\n setLocaleBasedAmount('0', locale, returnState, state, keyCode);\n } else {\n // Otherwise remove the particular digit from string and send data to format.\n returnState.paymentAmount = parseFloat(amountData);\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n }\n } else if (StringExtensions.isNullOrWhitespace(customPrice) || customPrice.length === 1) {\n // Checking if the last entered digit is space only or contains only one digit then assign value accordingly without appending prefix value.\n returnState.paymentAmount = parseFloat(customPrice);\n if (customPrice.length === 1) {\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n } else {\n // If no value found then set value as 0.\n setLocaleBasedAmount('0', locale, returnState, state, keyCode);\n }\n // this._updatePrice(state.productPrice, parseFloat(customPrice));\n } else if (customPrice.charAt(customPrice.length - 1) === '.' && (state.amountVariable as string).split('.').length - 1 === 1) {\n // Checking if the last entered value is dot and existing value is containing dot or not.\n // checking for first char after dot should not contain any other dots.\n if (state.amountVariable?.includes('.') && customPrice.charAt(customPrice.length - 1) === '.') {\n return state;\n }\n let stringAmount = customPrice.replace(/[^0-9]/g, EMPTY);\n stringAmount = `${stringAmount}.`;\n returnState.paymentAmount = parseFloat(stringAmount);\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n } else if (customPrice.charAt(customPrice.length - 2) === '.' && (state.amountVariable as string).split('.').length - 1 === 1) {\n // checking for second char after dot should not contain any other dots.\n if (state.amountVariable?.includes('.') && customPrice.charAt(customPrice.length - 1) === '.') {\n return state;\n }\n returnState.paymentAmount = parseFloat(customPrice);\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n } else if ((state.amountVariable as string).includes('.') && (state.amountVariable as string).split('.').length - 1 === 1) {\n // checking if pre existing amount doesn't contain any dot then append last entered value and then send for customize the amount.\n const lastDigit = customPrice.charAt(customPrice.length - 1);\n returnState.paymentAmount = parseFloat((state.amountVariable as string) + lastDigit);\n setLocaleBasedAmount((state.amountVariable as string) + lastDigit, locale, returnState, state, keyCode);\n } else {\n // Generally without backspace and dot value comes under this section and get appended into existing string for further amount customization.\n const stringAmount = customPrice.replace(/[^0-9]/g, EMPTY && customPrice.split('.').length - 1 === 1);\n returnState.paymentAmount = parseFloat(stringAmount);\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n }\n\n return returnState;\n}\n\n/**\n * Set customizedAmount and amountVariable in state as per Locale Based function.\n * @param inputTextValue - inputTextValue.\n * @param locale - locale.\n * @param returnState - returnState.\n * @param state - state.\n * @param keyCode - keyCode.\n * @returns void.\n */\nconst setLocaleBasedAmount = (\n inputTextValue: string,\n locale: string,\n returnState: ILocalizedPrice,\n state: ILocalizedPrice,\n keyCode: number\n): void => {\n let amountForUI: string = EMPTY;\n let newVar: string = (state.paymentAmount as number).toString();\n const usedVar = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];\n\n // Check if the Input is one or less than one characters the initialize the value in input box.\n if (StringExtensions.isNullOrWhitespace(inputTextValue) || inputTextValue.length === 1) {\n const recentInputNumber = inputTextValue.charAt(inputTextValue.length - 1);\n if (usedVar.includes(recentInputNumber)) {\n returnState.amountVariable = inputTextValue;\n } else {\n return;\n }\n amountForUI = new Intl.NumberFormat(locale).format(Number(inputTextValue));\n returnState.customizedAmount = amountForUI;\n } else {\n const recentInputNumber = inputTextValue.charAt(inputTextValue.length - 1);\n\n // Append last input amount digit and append with previous input amount and then send to format the value.\n if (usedVar.includes(recentInputNumber)) {\n if (state.amountVariable?.includes('.')) {\n if (state.amountVariable?.substring(state.amountVariable?.indexOf('.') + 1).length <= 3) {\n newVar = newVar.slice(0, -1);\n returnState.amountVariable = newVar + recentInputNumber;\n amountForUI = new Intl.NumberFormat(locale).format(Number(newVar + recentInputNumber));\n returnState.customizedAmount = amountForUI;\n }\n } else {\n returnState.amountVariable = newVar;\n amountForUI = new Intl.NumberFormat(locale).format(Number(newVar));\n returnState.customizedAmount = amountForUI;\n }\n } else if (recentInputNumber === '.' && newVar.replace(/[^.]/g, EMPTY).length === 0 && newVar.split('.').length - 1 === 0) {\n // Append dot (.) in Amount string.\n const inputWithDot = newVar + recentInputNumber;\n returnState.amountVariable = inputWithDot;\n returnState.customizedAmount = inputWithDot;\n } else if (keyCode === KeyCodes.Back) {\n returnState.amountVariable = newVar;\n amountForUI = new Intl.NumberFormat(locale).format(Number(newVar));\n returnState.customizedAmount = amountForUI;\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 Msdyn365 from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { INodeProps } from './node';\n\nexport interface IModuleProps extends INodeProps {\n moduleProps: Msdyn365.IModule;\n}\n\nexport const Module: React.FC = React.forwardRef(\n ({ className = '', id = '', tag: Tag = 'div', moduleProps, ...restAttribute }, ref) => {\n return ;\n }\n);\n\nexport default Module;\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';\n\nexport enum VariantType {\n Browser,\n Viewport\n}\n\n/**\n * IsMobile properties.\n */\nexport interface IMobileProps {\n /**\n * Contains variant i.e browser | viewport.\n */\n variant?: VariantType;\n context?: Msdyn365.IRequestContext;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport debounce from 'lodash/debounce';\nimport * as React from 'react';\n\nimport { IQuantityProps } from './Quantity.props';\n\ninterface IQuantityState {\n currentInput: number;\n}\n\n/**\n * Quantity Component - This component is used to allow input of quantity between a\n * range of values.\n */\n\nexport default class Quantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n constructor(props: IQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount ?? 1 };\n this._handleChange = this._handleChange.bind(this);\n }\n\n public render(): JSX.Element {\n const currentValue = this.state.currentInput;\n\n return (\n \n );\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt(e.target.value, 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max }, () => {\n debounce(() => {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n }, 200)();\n });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n\n if (inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }\n }, 200)();\n });\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\n this.setState({ currentInput: minValue }, () => {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n });\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\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 IncrementalQuantity from './IncrementalQuantity';\n\nexport * from './IncrementalQuantity.props';\n\nexport { IncrementalQuantity };\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { EnumExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\nimport Button from '../button/Button';\nimport { Popover } from '../popover';\n\n/**\n * Resources for the price editor mode selection.\n */\nexport interface IPriceEditorModeSelectionResources {\n specifyAmountButtonText: string;\n payFullAmountButtonText: string;\n}\n\n/**\n * Props for the price editor mode selection.\n */\nexport interface IPriceEditorModeSelectionProps {\n className: string;\n\n resources: IPriceEditorModeSelectionResources;\n\n currentState: PriceEditorModeSelectionState;\n onStateChanged(state: PriceEditorModeSelectionState): void;\n}\n\n/**\n * Defines editor modes for the amount.\n */\nexport enum PriceEditorModeSelectionState {\n full = 0,\n partial = 1\n}\n\n/**\n * Retrieves resource value based by the given mode state.\n * @param modeState - Given state.\n * @param resources - All resources.\n * @returns Resource value for the given state.\n */\nconst getPriceEditorModeSelectionStateResources = (\n modeState: PriceEditorModeSelectionState,\n resources: IPriceEditorModeSelectionResources\n): string => {\n switch (modeState) {\n case PriceEditorModeSelectionState.full:\n return resources.payFullAmountButtonText;\n case PriceEditorModeSelectionState.partial:\n return resources.specifyAmountButtonText;\n default:\n throw new Error('Failed to retrieve resource description for unknown price editor selection state.');\n }\n};\n\n/**\n * On click functionality.\n * @param handleStateChange - Handle change state function.\n * @param modeState - New state.\n * @returns Event handler.\n */\nconst onClickHandler = (\n handleStateChange: (modeState: PriceEditorModeSelectionState) => void,\n modeState: PriceEditorModeSelectionState\n) => () => {\n handleStateChange(modeState);\n};\n\n/**\n * Renders a button that allows to update the mode to the given state.\n * @param modeState - The state to render.\n * @param resources - Resource values.\n * @param className - Element class name.\n * @param handleStateChange - Event handler to update the state.\n * @returns React node.\n */\nconst renderModeStateItem = (\n modeState: PriceEditorModeSelectionState,\n resources: IPriceEditorModeSelectionResources,\n className: string,\n handleStateChange: (modeState: PriceEditorModeSelectionState) => void\n): React.ReactNode => {\n const stateStringRepresentation = PriceEditorModeSelectionState[modeState];\n\n return (\n \n );\n};\n\n/**\n * On Toggle Popover functionality.\n * @param setPopoverState -Set popover state function.\n * @param isPopoverState -Boolean value.\n * @returns Set toggle popover state functionality.\n */\nconst togglePopoverHandler = (setPopoverState: React.Dispatch>, isPopoverState: boolean) => () => {\n setPopoverState(!isPopoverState);\n};\n\n/**\n * Price editor component which handles selection modes (for instance, full or partial amount).\n * @param props - Configuration of the component.\n * @returns React element.\n */\nexport const PriceEditorModeSelectionComponent: React.FC = (props: IPriceEditorModeSelectionProps) => {\n const popoverReference = React.createRef();\n const [isPopoverShown, setIsPopoverShown] = React.useState(false);\n\n const [modeState, setModeState] = React.useState(props.currentState);\n\n /**\n * Updates component state when a selection is changed.\n * @param clickedState - New mode state.\n */\n const onChangeMode = (clickedState: PriceEditorModeSelectionState) => {\n setModeState(clickedState);\n setIsPopoverShown(false);\n props.onStateChanged(clickedState);\n };\n\n return (\n
\n \n {getPriceEditorModeSelectionStateResources(modeState, props.resources)}\n \n \n {EnumExtensions.getEnumValues(PriceEditorModeSelectionState).map(state => {\n return renderModeStateItem(state, props.resources, props.className, onChangeMode);\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 { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n IPriceEditorModeSelectionResources,\n PriceEditorModeSelectionComponent,\n PriceEditorModeSelectionState\n} from './price-editor-mode-selection';\n\n/**\n * Resources for price editor.\n */\nexport interface IPriceEditorResources extends IPriceEditorModeSelectionResources {\n priceEditorInputAriaLabel: string;\n}\n\n/**\n * The props required to render the component.\n */\nexport interface IPriceEditorProps {\n className: string;\n\n defaultAmount: number;\n\n resources: IPriceEditorResources;\n\n minimumValue?: number;\n maximumValue?: number;\n\n handleChange?(newValue: number): void;\n}\n\n/**\n * The state of the component.\n */\nexport interface IPriceEditorState {\n currentValue?: number;\n isInputFocused: boolean;\n}\n\n/**\n * Provides an input field which allows entering a price amount.\n */\nexport class PriceEditor extends React.PureComponent {\n private static readonly _precision = 2;\n\n private readonly _inputRef: React.RefObject;\n\n public constructor(props: IPriceEditorProps) {\n super(props);\n\n this._inputRef = React.createRef();\n\n let defaultValue = props.defaultAmount;\n\n if (!ObjectExtensions.isNullOrUndefined(this.props.minimumValue) && defaultValue < this.props.minimumValue) {\n defaultValue = this.props.minimumValue;\n } else if (!ObjectExtensions.isNullOrUndefined(this.props.maximumValue) && defaultValue > this.props.maximumValue) {\n defaultValue = this.props.maximumValue;\n }\n\n this.state = {\n currentValue: defaultValue,\n isInputFocused: false\n };\n }\n\n public render(): JSX.Element {\n const containerClassName = 'msc-price-editor';\n\n const hasMultipleModes = !ObjectExtensions.isNullOrUndefined(this.props.maximumValue);\n\n let mode = PriceEditorModeSelectionState.partial;\n\n if (!ObjectExtensions.isNullOrUndefined(this.props.maximumValue) && this.state.currentValue === this.props.maximumValue) {\n mode = PriceEditorModeSelectionState.full;\n }\n\n const formattedValue = this.state.currentValue?.toFixed(PriceEditor._precision) ?? '';\n const editedValue = this.state.currentValue ?? '';\n\n return (\n
\n \n {hasMultipleModes && (\n
\n \n
\n )}\n
\n );\n }\n\n /**\n * Handles input focus.\n */\n private readonly _handleInputFocus = () => {\n this.setState({ isInputFocused: true });\n };\n\n /**\n * Handles input blur.\n */\n private readonly _handleInputBlur = () => {\n this.setState({ isInputFocused: false });\n };\n\n /**\n * Handles editor mode state change.\n * @param newState - New selection mode state.\n */\n private readonly _handleEditorModeStateChange = (newState: PriceEditorModeSelectionState) => {\n if (newState === PriceEditorModeSelectionState.full) {\n this._updateAmount(this.props.maximumValue!);\n } else {\n this.setState({ currentValue: undefined });\n this._inputRef.current?.focus();\n }\n };\n\n /**\n * Update the price and calls corresponding callbacks.\n * @param newAmount - New price amount.\n */\n private readonly _updateAmount = (newAmount: number) => {\n this.setState({ currentValue: newAmount });\n\n if (this.props.handleChange) {\n this.props.handleChange(newAmount);\n }\n };\n\n /**\n * Handles value change.\n * @param event - React change event.\n */\n private readonly _handleChange = (event: React.ChangeEvent) => {\n let currentValue = Number.parseFloat(event.target.value);\n\n if (Number.isNaN(currentValue)) {\n this.setState({ currentValue: undefined });\n return;\n }\n\n currentValue = +currentValue.toFixed(PriceEditor._precision);\n\n if (!ObjectExtensions.isNullOrUndefined(this.props.minimumValue) && currentValue < this.props.minimumValue) {\n this._updateAmount(this.props.minimumValue);\n } else if (!ObjectExtensions.isNullOrUndefined(this.props.maximumValue) && currentValue > this.props.maximumValue) {\n this._updateAmount(this.props.maximumValue);\n } else {\n this._updateAmount(currentValue);\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 classNames from 'classnames';\nimport * as React from 'react';\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '../common/telemetryHelper';\nimport { mapToCssModules } from '../common/utilities';\nimport { IPaginationLinkProps } from './PaginationLink.props';\n\n/**\n * PaginationLink component.\n */\nexport default class PaginationLink extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'a',\n role: 'link'\n };\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: IPaginationLinkProps) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let { className, cssModule, next, previous, tag: Tag, children, telemetryContent, ...props }: any = this.props;\n let etext: string = children;\n const paginationLinkclasses = mapToCssModules(classNames(className, 'msc-page-link'), cssModule);\n\n let defaultCaret;\n if (previous) {\n defaultCaret = '\\u00AB';\n etext = 'previous';\n } else if (next) {\n defaultCaret = '\\u00BB';\n etext = 'next';\n }\n\n if (children && Array.isArray(children) && children.length === 0) {\n children = null;\n }\n if (!props.href && Tag === 'a') {\n Tag = 'span';\n }\n\n if (previous || next) {\n children = [{children || defaultCaret}];\n }\n\n this.payLoad.contentAction.etext = etext;\n const attribute = getTelemetryAttributes(telemetryContent, this.payLoad);\n\n return (\n \n {children}\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 classNames from 'classnames';\nimport React from 'react';\n\nimport { Modal, ModalBody, ModalHeader, Node } from '..';\n\nexport interface IModalViewProps {\n classNames?: string;\n galleryCarousel: React.ReactElement;\n modalIsOpen: boolean;\n ontoggle(): void;\n}\n\nexport const ImagefullView: React.FC = (props: IModalViewProps): React.ReactElement => {\n const body = (\n \n {props.galleryCarousel}\n \n );\n\n const modalWindow = (\n \n );\n\n const modalHeader = ;\n\n return React.cloneElement(modalWindow, {}, modalHeader, body);\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\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, UncontrolledTooltip } from '..';\nimport { IFlipperProps } from './Flipper.props';\n\nexport type FlipperSize = 'small' | 'medium' | 'large';\n\n/**\n * Flipper Component - This component is used to add\n * flippers to a carousel/jumbotron.\n */\nexport default class Flipper extends React.PureComponent {\n private readonly payLoad: IPayLoad;\n\n constructor(props: IFlipperProps) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, this.props.telemetryLabel!);\n }\n\n public render(): JSX.Element {\n const { className, glyphProps, size, displayTooltip, disabled, telemetryContent, telemetryLabel, ...props } = this.props;\n const sizeClass = size === 'small' ? 'msc-flipper__small' : size === 'large' ? 'msc-flipper__large' : '';\n const classNames = className ? `msc-flipper ${sizeClass} ${className}` : `msc-flipper ${sizeClass}`;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n\n // Do not flip next/previous glyphs in RTL (commonly chevron-left and chevron-right)\n glyphProps.className = `${glyphProps.className} msc-no-rtl-flip-required`;\n\n return (\n <>\n \n {displayTooltip && !disabled && (\n \n {' '}\n {props['aria-label']}\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\nexport * from './checkbox';\nexport * from './Table';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\n\nimport { IMobileProps, VariantType } from './isMobile.props';\n\n/**\n * IsMobile component.\n * @param props\n */\nexport const isMobile = (props: IMobileProps) => {\n const { variant, context } = props;\n switch (variant) {\n case VariantType.Browser:\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context?.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'lg';\n case VariantType.Viewport:\n const viewport = context?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n return viewport;\n default:\n return 'lg';\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContext } from '@msdyn365-commerce/core';\nimport { debounce } from 'lodash';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isMobile, VariantType } from '..';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from '../common/telemetryHelper';\nimport { IIncrementalQuantityProps } from './IncrementalQuantity.props';\n\n/**\n * IIncrementalQuantityState interface.\n */\ninterface IIncrementalQuantityState {\n currentInput: number;\n isUpdating: boolean;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class IncrementalQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly _minValue: number;\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n public static getDerivedStateFromProps(\n props: Readonly,\n state: IIncrementalQuantityState\n ): IIncrementalQuantityState {\n const nextState = { ...state };\n\n if (props.disabled && !state.isUpdating) {\n nextState.isUpdating = true;\n }\n\n if (!props.disabled && state.isUpdating) {\n nextState.currentInput = props.currentCount ?? 1;\n nextState.isUpdating = false;\n }\n return nextState;\n }\n\n constructor(props: IIncrementalQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount ?? 1, isUpdating: false };\n this._onIncrement = this._onIncrement.bind(this);\n this._onDecrement = this._onDecrement.bind(this);\n this._handleChange = this._handleChange.bind(this);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n this._minValue = this.props.min ?? IncrementalQuantity.defaultProps.min!;\n }\n\n public render(): JSX.Element {\n const { min, max } = this.props;\n\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const decrementDisabled = this.state.currentInput <= (min ?? 1) || this.props.isGiftCard;\n const incrementDisabled = this.state.currentInput >= max || this.props.isGiftCard;\n const currentValue = this.state.currentInput;\n this.payLoad.contentAction.etext = TelemetryConstant.DecrementQuantity;\n const decrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.IncrementQuantity;\n const incrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n const ariaLablelText = `${this.props.inputQuantityAriaLabel ?? ''} ${this.state.currentInput}`;\n\n let extraClassDecrement = '';\n if (decrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassDecrement = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClassDecrement = 'transition';\n }\n let extraClassIncrement = '';\n if (incrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassIncrement = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClassIncrement = 'transition';\n }\n\n return (\n <>\n
\n \n \n \n \n \n \n \n
\n \n );\n }\n\n /**\n * It checks if its in mobile view or not.\n * @returns Boolean.\n */\n private readonly isMobileView = (): boolean => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Added gridsetting values.\n const context = {\n gridSettings: {\n xs: { w: 767 },\n sm: { w: 991 },\n md: { w: 1199 },\n lg: { w: 1599 },\n xl: { w: 1600 }\n }\n } as IRequestContext;\n\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\n return isMobileCheck === 'xs' || isMobileCheck === 'sm';\n };\n\n private _onIncrement(): void {\n let invokeCallback = false;\n const currQuantity = this.state.currentInput;\n let updatedQuantity: number;\n\n if (currQuantity < this.props.max) {\n invokeCallback = true;\n updatedQuantity = currQuantity + 1;\n } else {\n invokeCallback = false;\n updatedQuantity = this.props.max;\n }\n\n if (invokeCallback && this.props.onChange) {\n if (this.props.onChange(updatedQuantity)) {\n this.setState({ currentInput: updatedQuantity });\n }\n }\n }\n\n private _onDecrement(): void {\n let invokeCallback = false;\n const currQuantity = this.state.currentInput;\n let updatedQuantity: number;\n\n if (currQuantity >= this._minValue) {\n invokeCallback = true;\n updatedQuantity = currQuantity - 1;\n } else {\n invokeCallback = false;\n updatedQuantity = this._minValue;\n }\n\n if (invokeCallback && this.props.onChange) {\n if (this.props.onChange(updatedQuantity)) {\n this.setState({ currentInput: updatedQuantity });\n }\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n let currentValue = Number.parseInt(e.target.value, 10);\n if (Number.isNaN(currentValue)) {\n this.setState({ currentInput: currentValue });\n return;\n }\n currentValue = Math.min(this.props.max, Math.max(this._minValue, currentValue));\n this.setState({ currentInput: currentValue });\n debounce(() => {\n // Due of usage debouncer, we may ignore onChange return value\n this.props.onChange && this.props.onChange(this.state.currentInput);\n\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n if (inputElement) {\n inputElement.setAttribute('aria-valuenow', this.state.currentInput.toString());\n inputElement.setAttribute('value', this.state.currentInput.toString());\n }\n }, 1000)();\n }\n\n /**\n * Validates min and updates.\n */\n private readonly _validateMin = (): void => {\n if (Number.isNaN(this.state.currentInput)) {\n this.setState({ currentInput: this._minValue });\n } else {\n const currentValue = Math.min(this.props.max, Math.max(this._minValue, this.state.currentInput));\n if (currentValue !== this.state.currentInput) {\n this.setState({ currentInput: currentValue });\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { Button } from '..';\nimport Collapse from '../collapse/Collapse';\nimport { ICollapseProps } from '../collapse/Collapse.props';\nimport { IDrawerProps } from './Drawer.props';\n\n/**\n * Drawer State Interface\n */\nexport interface IDrawerState {\n isOpen: boolean;\n buttonText?: string;\n}\n\n/**\n * Glyph placement type.\n */\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\n\nexport default class Drawer extends React.PureComponent {\n public state: IDrawerState;\n\n private readonly drawerOpenGlyph: string;\n\n private readonly drawerCloseGlyph: string;\n\n private readonly drawerGlyphClass: string;\n\n private isManuallyToggled: boolean;\n\n constructor(props: IDrawerProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this.isManuallyToggled = false;\n this.state = { isOpen: props.collapseProps?.isOpen ?? false, buttonText: '' };\n this.drawerGlyphClass = classnames(\n 'drawer__glyph',\n\n this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : ''\n );\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames(\n this.drawerGlyphClass,\n\n this.props.openGlyph ? this.props.openGlyph : this.props.closeGlyph ? this.props.closeGlyph : ''\n );\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames(\n this.drawerGlyphClass,\n\n this.props.openGlyph ? this.props.openGlyph : ''\n );\n this.drawerCloseGlyph = classnames(\n this.drawerGlyphClass,\n\n this.props.closeGlyph ? this.props.closeGlyph : ''\n );\n }\n }\n\n public render(): JSX.Element {\n const collapseProps = { ...this.props.collapseProps } as ICollapseProps;\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this.isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n } else {\n this.setState({\n isOpen: collapseProps.isOpen\n });\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames(\n 'drawer',\n\n this.props.className ? this.props.className : ''\n );\n this.isManuallyToggled = false;\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen)}\n \n \n
\n );\n }\n\n /**\n * Method generate drawer inner markup.\n * @param collapseState -Drawer button collapse state.\n * @returns Jsx element.\n */\n private _generateDrawerButtonInnerMarkup(collapseState: boolean): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n if (this.props.glyphPlacement === 'end') {\n return (\n <>\n {this.props.toggleButtonText}\n {this._generateGlyphMarkup('drawer__glyph__end', collapseState)}\n \n );\n }\n\n if (this.props.glyphPlacement === 'start') {\n return (\n <>\n {this._generateGlyphMarkup('drawer__glyph__start', collapseState)}\n {this.props.toggleButtonText}\n \n );\n }\n return {this.props.toggleButtonText};\n }\n\n /**\n * Method generate glyph markup.\n * @param location -Glyph icon location.\n * @param collapseState -Drawer button collapse state.\n * @returns Jsx element.\n */\n private _generateGlyphMarkup(location: string, collapseState: boolean): JSX.Element {\n let glyphClass = collapseState ? this.drawerOpenGlyph : this.drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return ;\n }\n\n /**\n * Method on click of drawer button.\n * @param e -Mouse event for drawer button.\n */\n private _toggle(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n this.isManuallyToggled = true;\n\n if (this.props.onToggle) {\n this.setState(\n { isOpen: !this.state.isOpen, buttonText: e.currentTarget.innerText },\n () => this.props.onToggle && this.props.onToggle(this.state)\n );\n } else {\n this.setState({ isOpen: !this.state.isOpen });\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 { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '..';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from '../modal';\n\nexport interface IPopupProps extends IComponentProps<{ product: SimpleProduct | undefined; price: ProductPrice | undefined }> {\n dialogStrings?: {\n goToCartText: string;\n continueShoppingText: string;\n headerItemOneText: string;\n headerItemFormatText: string;\n headerMessageText: string;\n freePriceText: string;\n originalPriceText: string;\n currentPriceText: string;\n };\n\n className: string;\n imageSettings?: IImageSettings;\n gridSettings: IGridSettings | undefined;\n productQuantity: number;\n priceComponent: React.ReactNode;\n navigationUrl?: string;\n modalOpen: boolean | undefined;\n telemetryContent?: ITelemetryContent;\n setModalOpen(newValue: boolean): void;\n}\n\nexport const Popup = (popupProps: IPopupProps) => {\n const {\n dialogStrings,\n className,\n imageSettings,\n gridSettings,\n data: { product, price },\n productQuantity,\n priceComponent,\n navigationUrl,\n modalOpen,\n telemetryContent,\n setModalOpen,\n context\n } = popupProps;\n const closeModal = React.useCallback(() => {\n setModalOpen(false);\n }, [setModalOpen]);\n if (!dialogStrings || !product) {\n return null;\n }\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.ContinueShopping);\n const continueShoppingAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ViewBagAndCheckout;\n const viewBagAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n const fallbackImageUrl = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const quantity = productQuantity !== undefined ? productQuantity : 1;\n const itemsString =\n quantity === 1 ? dialogStrings.headerItemOneText : dialogStrings.headerItemFormatText.replace('{0}', quantity.toString());\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const shouldDisplayUnitOfMeasure =\n context.app.config?.unitOfMeasureDisplayType && context.app.config.unitOfMeasureDisplayType !== 'none';\n\n const reducedDimensions: string = product.Dimensions\n ? product.Dimensions.reduce((str, productDimension) => {\n if (productDimension.DimensionValue && productDimension.DimensionValue.Value) {\n if (str) {\n return `${str}, ${productDimension.DimensionValue.Value}`;\n }\n\n return `${productDimension.DimensionValue.Value}`;\n }\n\n return str;\n }, '')\n : '';\n\n return (\n \n \n {itemsString}\n {dialogStrings.headerMessageText}\n \n \n \n {product.Name}\n {reducedDimensions !== '' ?
{reducedDimensions}
: ''}\n {price ?
{priceComponent}
: ''}\n {product.DefaultUnitOfMeasure && shouldDisplayUnitOfMeasure ? (\n
\n {product.DefaultUnitOfMeasure}\n
\n ) : (\n ''\n )}\n
\n \n \n {dialogStrings.goToCartText}\n \n \n {dialogStrings.continueShoppingText}\n \n \n
\n );\n};\n\nexport default Popup;\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\nimport { IHeadingProps } from './Heading.props';\n\n/**\n * Heading component.\n * @extends {React.PureComponent}\n */\n\nconst Heading = ({ headingTag: HTag = 'h1', tag: Tag, className, text }: IHeadingProps) =>\n Tag ? {text} : {text};\n\nexport default Heading;\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 { Data } from 'popper.js';\nimport * as React from 'react';\nimport { Arrow, Popper as ReactPopper } from 'react-popper';\n\nimport { getTargetElement, mapToCssModules } from '../common/utilities';\nimport { IPopperContentProps } from './PopperContent.props';\n\nexport interface IPopperContentState {\n placement?: string;\n isOpen: boolean;\n}\n\n/**\n * Renders popper content. This is an internal helper class shared between components.\n */\nexport default class PopperContent extends React.Component {\n public static defaultProps: Partial = {\n boundariesElement: 'scrollParent',\n placement: 'auto',\n hideArrow: false,\n isOpen: false,\n offset: 0,\n fallbackPlacement: 'flip',\n flip: true,\n container: 'body',\n modifiers: {}\n };\n\n constructor(props: IPopperContentProps) {\n super(props);\n\n this._handlePlacementChange = this._handlePlacementChange.bind(this);\n this.state = { isOpen: props.isOpen };\n }\n\n public componentDidMount(): void {\n this._handleProps();\n }\n\n public componentDidUpdate(prevProps: IPopperContentProps): void {\n if (this.props.isOpen !== prevProps.isOpen) {\n this._handleProps();\n }\n }\n\n public shouldComponentUpdate(nextProps: IPopperContentProps, nextState: IPopperContentState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n return this.props.isOpen ? this._renderChildren() : null;\n }\n\n private _handlePlacementChange(data: Data): Data {\n if (this.state.placement !== data.placement) {\n this.setState({ placement: data.placement });\n }\n\n return data;\n }\n\n private _handleProps(): void {\n if (this.props.container !== 'inline') {\n if (this.props.isOpen) {\n this._show();\n } else {\n this._hide();\n }\n }\n }\n\n private _hide(): void {\n this.setState({ isOpen: false });\n }\n\n private _show(): void {\n this.setState({ isOpen: true });\n }\n\n private _renderChildren(): JSX.Element | null {\n const {\n cssModule,\n children,\n isOpen,\n flip,\n offset,\n target,\n fallbackPlacement,\n focusOut,\n placementPrefix,\n arrowClassName: arrowClassNameOrUndefined,\n hideArrow,\n className,\n tag,\n modifiers,\n boundariesElement,\n ...attrs\n } = this.props;\n\n const arrowClassName = mapToCssModules(classNames('msc-arrow', arrowClassNameOrUndefined), cssModule);\n\n const placement = (this.state.placement || attrs.placement || 'auto').split('-')[0];\n const popperClassName = mapToCssModules(\n classNames(className, placementPrefix ? `${placementPrefix}-${placement}` : placement),\n this.props.cssModule\n );\n\n const extendedModifiers = {\n offset: { offset },\n flip: { enabled: flip, behavior: fallbackPlacement },\n preventOverflow: { boundariesElement },\n update: {\n enabled: true,\n order: 950,\n fn: this._handlePlacementChange\n },\n ...modifiers\n };\n\n const targetElement = getTargetElement(target);\n if (targetElement === null) {\n return null;\n }\n\n return (\n \n {children}\n {!hideArrow && }\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 classNames from 'classnames';\nimport * as React from 'react';\nimport Transition, { ENTERED, ENTERING, EXITED, EXITING, UNMOUNTED } from 'react-transition-group/Transition';\n\nimport { mapToCssModules, TransitionTimeouts } from '../common/utilities';\nimport { IFadeProps } from './Fade.props';\n\nexport interface IFadeState {\n fadeIn: boolean;\n}\n\ntype TransitionStatus = typeof ENTERING | typeof ENTERED | typeof EXITING | typeof EXITED | typeof UNMOUNTED;\n\n/**\n * Fade component.\n */\nexport default class Fade extends React.Component {\n public static defaultProps: Partial = {\n tag: 'div',\n baseClass: 'fade',\n baseClassActive: 'show',\n timeout: TransitionTimeouts.Fade,\n in: true,\n appear: true,\n enter: true,\n exit: true\n };\n\n public shouldComponentUpdate(nextProps: IFadeProps): boolean {\n if (nextProps.in || this.props.in !== nextProps.in) {\n return true;\n }\n return false;\n }\n\n public render(): JSX.Element | null {\n const {\n tag,\n className,\n cssModule,\n baseClass,\n baseClassActive,\n\n appear,\n enter,\n exit,\n in: fadeIn,\n mountOnEnter,\n unmountOnExit,\n timeout: timeoutOrUndefined,\n addEndListener,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n children,\n\n ...otherProps\n } = this.props;\n const timeout = timeoutOrUndefined !== undefined ? timeoutOrUndefined : TransitionTimeouts.Fade;\n\n const transitionProps = {\n appear,\n enter,\n exit,\n in: fadeIn,\n mountOnEnter,\n unmountOnExit,\n timeout,\n addEndListener,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n children\n };\n\n const Tag = this.props.tag ? this.props.tag : 'div';\n const baseClassAlways = baseClass || 'fade';\n const baseClassActiveAlways = baseClassActive || 'show';\n\n return (\n \n {(status: TransitionStatus) => {\n const isActive = status === 'entered';\n const classes = mapToCssModules(classNames([className, baseClassAlways, isActive && baseClassActiveAlways]), cssModule);\n\n return (\n \n {children}\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 { IDictionary, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\n\nexport interface IContentAction {\n pgname: string;\n mname: string;\n etext?: string;\n recid?: string;\n etype?: string;\n}\n\nexport interface IPayLoad {\n contentCategory: string;\n contentAction: IContentAction;\n}\n\nexport interface ITelemetryContent {\n pageName: string;\n moduleName: string;\n telemetry?: ITelemetry;\n}\n\nexport enum TelemetryConstant {\n ShopSimliarLooks = 'shop similar looks',\n ShopSimliarDescription = 'shop similar description',\n PickupInStore = 'pick up in store',\n PreferredStore = 'set as preferred store',\n RemovePreferredStore = 'remove preferred store',\n IncrementQuantity = 'Increment quantity',\n DecrementQuantity = 'Decrement quantity',\n Checkout = 'Checkout',\n GuestCheckout = 'Guest checkout',\n BackToShopping = 'Back to shopping',\n ApplyPromoCode = 'Apply promo code',\n ViewMore = 'View more',\n OrderDetails = 'Order details',\n AvailablePoints = 'Available points',\n ExpiringPoints = 'Expiring points',\n AddUser = 'Add user',\n BuyItAgain = 'Buy it again',\n ContactNumber = 'ContactNumber',\n CheckoutChange = 'Change',\n Save = 'Save',\n SaveContinue = 'Save and Continue',\n Cancel = 'Cancel',\n DeliveryOptions = 'Delivery options',\n CheckoutTermsAndConditions = 'Checkout terms and conditions',\n ExpandAll = 'Expand all',\n CollapseAll = 'Collapse all',\n Expand = 'Expand',\n Collapse = 'Collapse',\n SignIn = 'Sign in',\n SignUp = 'Sign up',\n SignOut = 'Sign out',\n SwitchCustomer = 'Switch Customer',\n LoyaltyDetailLink = 'Loyalty detail ink',\n LoyaltyTermsLink = 'Loyalty terms link',\n LoyaltyTermsCancel = 'Loyalty terms cancel',\n LoyaltyTermsSubmit = 'Loyalty terms submit',\n LoyaltyTermsAgree = 'Loyalty terms agree',\n RemoveCartItem = 'Remove cart item',\n EditCart = 'Edit cart',\n BackToTop = 'Back to top',\n Logo = 'Logo',\n NavIcon = 'Navigation icon',\n ViewBagAndCheckout = 'View bag and checkout',\n ContinueShopping = 'Continue shopping',\n AddOrderTemplateToCart = 'Add order template to cart',\n PromoBannerClose = 'Close promo banner',\n WriteReview = 'Write Review',\n Next = 'Next',\n Previous = 'Previous',\n SubmitReview = 'Submit review',\n SuccessButton = 'Success',\n SearchStore = 'Search store',\n ShowAllStore = 'Show all store',\n ToggleMapView = 'Toggle map view',\n PrivacyPolicy = 'Privacy policy',\n ViewShoppingBag = 'View shopping bag',\n MyProfile = 'My profile',\n seeDetails = 'See Details'\n}\n\n/**\n * Returns the payload Object.\n * @param {string} contentCategory - Content Category.\n * @param {IModule} props - Module props.\n * @param pageName\n * @param {string} moduleName - Module Name.\n * @param {string} etext - Etext Name.\n * @param {string} recid - Recid Name.\n * @param telemetry\n */\nexport function getTelemetryObject(pageName: string, moduleName: string, telemetry: ITelemetry): ITelemetryContent {\n const telemetryContent: ITelemetryContent = { pageName, moduleName, telemetry };\n return telemetryContent;\n}\n\n/**\n * Returns the payload Object.\n * @param {string} contentCategory - Content Category.\n * @param {IModule} props - Module props.\n * @param {string} moduleName - Module Name.\n * @param eventType\n * @param telemetryContent\n * @param {string} etext - Etext Name.\n * @param {string} recid - Recid Name.\n */\nexport function getPayloadObject(eventType: string, telemetryContent: ITelemetryContent, etext: string, recid?: string): IPayLoad {\n const pageName = telemetryContent && telemetryContent.pageName ? telemetryContent.pageName : '';\n const moduleName = telemetryContent && telemetryContent.moduleName ? telemetryContent.moduleName : '';\n const payload: IPayLoad = {\n contentCategory: eventType,\n contentAction: {\n pgname: pageName,\n mname: moduleName,\n etext,\n recid,\n etype: eventType\n }\n };\n return payload;\n}\n\n/**\n * Returns the telemetry Attributes.\n * @param {IModule} props - Module Props.\n * @param telemetryContent\n * @param {IPayLoad} payLoad - Pay Load.\n */\nexport function getTelemetryAttributes(telemetryContent: ITelemetryContent, payLoad: IPayLoad): IDictionary | undefined {\n const contentData = payLoad.contentAction.recid ? payLoad.contentAction.recid : payLoad.contentAction.etext;\n const attributes: IDictionary | undefined =\n telemetryContent &&\n telemetryContent.telemetry &&\n telemetryContent.telemetry.setTelemetryAttribute &&\n telemetryContent.telemetry.setTelemetryAttribute(contentData!, payLoad.contentAction);\n return attributes;\n}\n\n/**\n * Returns the telemetry Attributes.\n * @param {IModule} props - Module Props.\n * @param {IPayLoad} payLoad - Pay Load.\n */\n\nexport const onTelemetryClick = (telemetryContent: ITelemetryContent, payLoad: IPayLoad, linkText: string) => () => {\n payLoad.contentAction.etext = linkText;\n if (telemetryContent && telemetryContent.telemetry) {\n telemetryContent.telemetry.logEvent(TelemetryEvent.Custom, payLoad);\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport url from 'url';\n\nexport function urlCheck(testUrl: string): boolean {\n const parsedUrl = url.parse(testUrl, true);\n if (parsedUrl.protocol && parsedUrl.host) {\n return true;\n } else {\n return false;\n }\n}\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\nimport { mapToCssModules } from '../common/utilities';\nimport Fade from '../fade/Fade';\nimport UncontrolledTooltip from '../tooltip/UncontrolledTooltip';\nimport { IAlertProps } from './Alert.props';\n\n/**\n * Alert component.\n */\nexport default class Alert extends React.PureComponent {\n public static defaultProps: Partial = {\n color: 'success',\n isOpen: true,\n tag: 'div',\n closeAriaLabel: 'Close',\n fade: true,\n assertive: false,\n includeAlertClass: true,\n transition: {\n ...Fade.defaultProps,\n unmountOnExit: true\n }\n };\n\n public render(): JSX.Element {\n const {\n id,\n className,\n closeClassName,\n cssModule,\n tag,\n toggle,\n color,\n isOpen,\n children,\n transition,\n fade,\n assertive,\n includeAlertClass,\n 'aria-label': ariaLabel\n } = this.props;\n\n const classes = includeAlertClass\n ? mapToCssModules(classNames(className, 'msc-alert', `msc-alert-${color}`), cssModule)\n : className;\n\n const closeClasses = mapToCssModules(classNames('close', closeClassName), cssModule);\n\n const alertTransition = {\n ...Fade.defaultProps,\n ...transition,\n baseClass: fade ? 'fade' : '',\n timeout: fade ? (transition ? transition.timeout : 0) : 0,\n appear: !!fade,\n enter: !!fade,\n exit: !!fade\n };\n\n const Tag = tag || 'div';\n const buttonId = fade ? 'buttonDismiss' : 'buttonFadeless';\n\n const innerContent = (\n <>\n {toggle ? (\n
\n \n \n close\n \n
\n ) : null}\n {children}\n \n );\n\n const style = isOpen ? undefined : { display: 'none' };\n\n // When using assertive alerts, you need to have the assertive region rendered on the page from\n // the start. When using fade, the entire fade region doesn't render. So you gotta first wrap the\n // fade region in a tag, keep that tag hidden if the alert is closed.\n //\n // Note that this current approach will have some issues if tag is something like li. But that is a bridge\n // that can be crossed when/if we need to cross it this works for divs/spans so it should be good enough for now\n if (fade && assertive) {\n return (\n \n \n {innerContent}\n \n \n );\n } else if (fade) {\n return (\n \n {innerContent}\n \n );\n }\n return (\n \n {innerContent}\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 Msdyn365 from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { getPayloadObject, getTelemetryAttributes, TelemetryConstant } from '..';\nimport { IBackToTopProps } from './BackToTop.props';\n\nexport interface IBackToTopStateAttributes {\n 'aria-hidden': boolean;\n tabIndex: number;\n}\n\nexport interface IBackToTopState extends React.ComponentState {\n attributes: IBackToTopStateAttributes;\n}\n\n/**\n * Back To Top - This component is used to scroll to the top of the page.\n */\nexport default class BackToTop extends React.PureComponent {\n public static defaultProps: Partial = {\n className: 'btn btn-lg btn-secondary',\n delayInMs: 0,\n scrollStepInPx: 25\n };\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: IBackToTopProps) {\n super(props);\n this.state = { attributes: { 'aria-hidden': true, tabIndex: -1 } };\n this._reevaluatePosition = this._reevaluatePosition.bind(this);\n this._scrollToTop = this._scrollToTop.bind(this);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.BackToTop);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public componentDidMount(): void {\n window.addEventListener('resize', this._reevaluatePosition);\n window.addEventListener('scroll', this._reevaluatePosition);\n this._reevaluatePosition();\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this._reevaluatePosition);\n window.removeEventListener('scroll', this._reevaluatePosition);\n }\n\n public render(): JSX.Element {\n const { className, threshold, delayInMs, scrollStepInPx, ...props } = this.props;\n const children = this.props.children || ;\n if (this.props.text) {\n return (\n \n {this._renderHeading(this.props.text)}\n \n );\n }\n return (\n \n {children}\n \n );\n }\n\n private readonly _renderHeading = (text: string): JSX.Element | undefined => {\n return ;\n };\n\n private _scrollStep(): void {\n if ((document.documentElement.scrollTop || document.body.scrollTop) === 0) {\n clearInterval(this.state.intervalId);\n this.setState({ intervalId: 0 });\n this._reevaluatePosition();\n }\n\n if (this.state.intervalId !== 0) {\n window.scrollTo(0, document.body.scrollTop - this.props.scrollStepInPx);\n document.body.scrollTop = document.body.scrollTop > 0 ? document.body.scrollTop - this.props.scrollStepInPx : 0;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _scrollToTop(e: any): void {\n e.preventDefault();\n const intervalId = setInterval(this._scrollStep.bind(this), this.props.delayInMs);\n this.setState({ intervalId });\n }\n\n private _reevaluatePosition(): void {\n // TODO:\n // change the threshold minimum to zero\n // add a prop for specifying multiplier of page height instead of absolute threshold\n // add clientWidth check to hide at < 768\n const scrollTop = window.pageYOffset || document.body.scrollTop;\n const height = Math.min(window.innerHeight, document.documentElement.clientHeight);\n const threshold = Math.min(this.props.threshold !== undefined ? this.props.threshold : -1, 100);\n const hide =\n scrollTop > 0 && threshold >= 0\n ? scrollTop < ((document.documentElement.scrollHeight - height) * threshold) / 100\n : scrollTop < height * 2;\n const tabIndexValue = hide ? -1 : 0;\n this.setState({ attributes: { 'aria-hidden': hide, tabIndex: tabIndexValue } });\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\nimport { addThrottledEvent, getCSS } from '../common/utilities';\nimport Flipper from '../flipper/Flipper';\nimport { ISingleSlideCarouselProps } from './SingleSlideCarousel.props';\n\ninterface ISingleSlideCarouselState {\n showPrevious: boolean;\n showNext: boolean;\n offset: number;\n}\n\n/**\n * SingleSlideCarousel - yup.\n */\nexport default class SingleSlideCarousel extends React.PureComponent {\n private static readonly itemsSelector: string = 'msc-ss-carousel-item';\n\n private static readonly verticalItemsSelector: string = 'msc-ss-carousel-vert-item';\n\n private direction: string;\n\n private item: HTMLElement | undefined;\n\n private slide: HTMLElement | undefined;\n\n private carousel: HTMLElement | undefined;\n\n private carouselSize: number = 0;\n\n private slideSize: number = 0;\n\n private itemSize: number = 0;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private readonly ref: React.RefObject;\n\n private readonly slideRef: React.RefObject;\n\n private readonly itemRef: React.RefObject;\n\n private readonly id: string;\n\n private scrollStart: number | undefined;\n\n private readonly scrollThreshold: number;\n\n private readonly flipperNextLabel: string = 'next';\n\n private readonly flipperPrevLabel: string = 'prev';\n\n constructor(props: ISingleSlideCarouselProps) {\n super(props);\n this._nextSlide = this._nextSlide.bind(this);\n this._previousSlide = this._previousSlide.bind(this);\n this._handleTouchStart = this._handleTouchStart.bind(this);\n this._handleTouchEnd = this._handleTouchEnd.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onResized = this._onResized.bind(this);\n this.state = { showPrevious: false, showNext: false, offset: 0 };\n this.ref = React.createRef();\n this.slideRef = React.createRef();\n this.itemRef = React.createRef();\n this.direction = 'left';\n this.id = props.parentId || '';\n this.scrollThreshold = this.props.touchScrollThreshold !== undefined ? this.props.touchScrollThreshold : 100;\n }\n\n public componentDidUpdate(): void {\n this.carousel = this.ref.current!;\n this.slide = this.slideRef.current!;\n this.item = this.itemRef.current!;\n this._setSizes();\n this._updateFlippers(this.state.offset);\n }\n\n public componentDidMount(): void {\n this.direction = this.props.vertical ? 'top' : 'left';\n this.carousel = this.ref.current!;\n this.slide = this.slideRef.current!;\n this.item = this.itemRef.current!;\n this._setSizes();\n this.resizeThrottledEventHandler = window && addThrottledEvent(window, 'resize', this._onResized as EventListener);\n this._updateFlippers(0);\n }\n\n public componentWillUnmount(): void {\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n\n public render(): JSX.Element {\n const isVert: boolean = this.props.vertical === true;\n const slidePositionStyle = {} as React.CSSProperties;\n const modifiedChildren = this._getClonedChildren(isVert);\n slidePositionStyle[this.direction] = `${this.state.offset}px`;\n const carouselClass = isVert ? 'msc-ss-carousel-vert' : 'msc-ss-carousel';\n const carouselSlideClass = isVert ? 'msc-ss-carousel-vert-slide' : 'msc-ss-carousel-slide';\n const overflowClass = isVert ? 'msc-ss-carousel-vert-strip' : 'msc-ss-carousel-strip';\n const previousFlipperGlyph = isVert ? 'msi-chevron-up' : 'msi-chevron-left';\n const nextFlipperGlyph = isVert ? 'msi-chevron-down' : 'msi-chevron-right';\n const previousFlipperClassName = isVert ? 'msc-ss-carousel-vert__flipper' : 'msc-ss-carousel__flipper';\n const nextFlipperClassName = isVert\n ? 'msc-ss-carousel-vert__flipper msc-ss-carousel-vert__flipper--next'\n : 'msc-ss-carousel__flipper msc-ss-carousel__flipper--next';\n const disableClassName = !this.state.showPrevious || !this.state.showNext ? 'disabled' : null;\n return (\n
\n 0)}\n telemetryContent={this.props.telemetryContent}\n telemetryLabel={this.flipperPrevLabel}\n />\n 0)}\n telemetryContent={this.props.telemetryContent}\n telemetryLabel={this.flipperNextLabel}\n />\n
\n \n {modifiedChildren}\n \n
\n
\n );\n }\n\n private _getClonedChildren(isVert: boolean): React.DetailedReactHTMLElement, HTMLElement>[] {\n return React.Children.map(this.props.children, (child: React.ReactNode, index: number) => {\n const castChild = (child as React.ReactChild) as React.ReactElement;\n if (index === 1) {\n return React.cloneElement(castChild, {\n className: `${isVert ? SingleSlideCarousel.verticalItemsSelector : SingleSlideCarousel.itemsSelector} ${\n castChild.props.className\n }`,\n\n // @ts-expect-error\n ref: this.itemRef,\n onFocus: this._onFocus\n });\n }\n return React.cloneElement(castChild, {\n className: `${isVert ? SingleSlideCarousel.verticalItemsSelector : SingleSlideCarousel.itemsSelector} ${\n castChild.props.className\n }`,\n\n // @ts-expect-error\n onFocus: this._onFocus\n });\n });\n }\n\n private _nextSlide(): void {\n this._moveSingleSlide(true);\n }\n\n private _previousSlide(): void {\n this._moveSingleSlide(false);\n }\n\n private _handleTouchStart(evt: React.TouchEvent): void {\n if (evt.touches.length === 0) {\n this.scrollStart = undefined;\n } else {\n this.scrollStart = this.props.vertical === true ? evt.touches[0].screenY : evt.touches[0].screenX;\n }\n }\n\n private _handleTouchEnd(evt: React.TouchEvent): void {\n if (evt.changedTouches.length > 0 && this.scrollStart !== undefined) {\n const newTarget: number = this.props.vertical === true ? evt.changedTouches[0].screenY : evt.changedTouches[0].screenX;\n\n const delta = newTarget - this.scrollStart;\n\n if (delta > this.scrollThreshold) {\n this._previousSlide();\n }\n\n if (delta < -this.scrollThreshold) {\n this._nextSlide();\n }\n }\n\n this.scrollStart = undefined;\n\n return;\n }\n\n private _moveSingleSlide(next: boolean): void {\n let currentOffset = Number.parseInt(getCSS(this.slide!, this.direction), 10);\n const carouselSize = this.carouselSize;\n let maxScrollCount = Math.floor(carouselSize / this.itemSize);\n const directionModifier = next ? -1 : 1;\n currentOffset = !isNaN(currentOffset) && typeof currentOffset === 'number' ? currentOffset : 0;\n\n if (maxScrollCount === 0) {\n maxScrollCount = 1;\n }\n\n maxScrollCount = carouselSize % this.itemSize === 0 ? maxScrollCount - 1 : maxScrollCount;\n maxScrollCount = Math.max(maxScrollCount, 1);\n const maxScrollDistance = maxScrollCount * this.itemSize;\n let distanceToEdge = next ? this.slideSize - carouselSize + currentOffset : Math.abs(currentOffset);\n distanceToEdge = Math.max(0, distanceToEdge);\n\n const offset =\n maxScrollDistance <= distanceToEdge\n ? maxScrollDistance * directionModifier + currentOffset\n : distanceToEdge * directionModifier + currentOffset;\n\n this._updateFlippers(offset);\n }\n\n private _setSizes(): void {\n const item = this.item;\n if (item) {\n this.itemSize = this.props.vertical ? item.scrollHeight : item.scrollWidth;\n } else {\n this.itemSize = 0;\n }\n\n this.carouselSize = this._calculateCarouselSize();\n this.slideSize = this.slide ? (this.props.vertical ? this.slide.scrollHeight : this.slide.scrollWidth) : 0;\n }\n\n private _calculateCarouselSize(): number {\n if (!this.carousel) {\n return 0;\n }\n\n const carouselStyle = getComputedStyle(this.carousel);\n\n const padding = this.props.vertical\n ? Number.parseFloat(carouselStyle.paddingTop || '') + Number.parseFloat(carouselStyle.paddingBottom || '')\n : Number.parseFloat(carouselStyle.paddingLeft || '') + Number.parseFloat(carouselStyle.paddingRight || '');\n\n return this.props.vertical ? this.carousel.clientHeight - padding : this.carousel.clientWidth - padding;\n }\n\n private _canScrollPrevious(offset: number): boolean {\n return !isNaN(offset) && offset !== 0;\n }\n\n private _canScrollNext(offset: number): boolean {\n if (this.carouselSize + Math.abs(offset) >= this.slideSize) {\n return false;\n }\n\n return true;\n }\n\n private _updateFlippers(offset: number): void {\n this.setState({\n showPrevious: this._canScrollPrevious(offset),\n showNext: this._canScrollNext(offset),\n offset\n });\n }\n\n private _scrollItemIntoView(item: HTMLElement): void {\n const carouselSize = this.carouselSize;\n let offset = this.props.vertical ? item.offsetTop : item.offsetLeft;\n let updateOffset = false;\n\n const left = Number.parseInt(getCSS(this.slide!, 'left'), 10) || 0;\n const top = Number.parseInt(getCSS(this.slide!, 'top'), 10) || 0;\n\n if (this.props.vertical) {\n if (top < 0 && -top > offset) {\n if (offset !== 0) {\n offset = -offset + 1;\n }\n updateOffset = true;\n } else if (top + offset > carouselSize - this.itemSize) {\n offset = carouselSize - this.itemSize - offset - 1;\n updateOffset = true;\n }\n } else if (this.direction === 'left') {\n if (left < 0 && -left > offset) {\n if (offset !== 0) {\n offset = -offset + 1;\n }\n updateOffset = true;\n } else if (left + offset > carouselSize - this.itemSize) {\n offset = carouselSize - this.itemSize - offset + 19;\n updateOffset = true;\n }\n }\n\n if (updateOffset) {\n this._updateFlippers(offset);\n\n if (this.props.vertical) {\n setTimeout(() => {\n (this.slide as Node).parentElement!.scrollTop = 0;\n }, 0);\n } else {\n setTimeout(() => {\n (this.slide as Node).parentElement!.scrollLeft = 0;\n }, 0);\n }\n }\n }\n\n private _onFocus(event: React.FocusEvent): void {\n const target = event.currentTarget as HTMLElement;\n this._scrollItemIntoView(target);\n }\n\n private _onCarouselResized(): void {\n this._setSizes();\n let offset = Number.parseInt(getCSS(this.slide!, this.direction), 10);\n\n // Ensure the carousel slide fits across the entire alotted space\n if (!isNaN(offset) && offset < 0 && this.slideSize + offset < this.carouselSize) {\n offset = Math.min(0, this.carouselSize - this.slideSize);\n }\n\n this._updateFlippers(offset);\n }\n\n private readonly _onResized = (): void => {\n this._onCarouselResized();\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport Quantity from './Quantity';\n\nexport * from './Quantity.props';\n\nexport { Quantity };\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { Button, getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from '..';\nimport Collapse from '../collapse/Collapse';\nimport { ICollapseProps } from '../collapse/Collapse.props';\nimport { IDrawerProps } from './Drawer.props';\n\nexport interface IControlledDrawerState {\n isOpen: boolean;\n}\n\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * ControlledDrawer - This is a full width controlled collapse where the button glyph changes\n * when the drawer is open and closed. The toggle function can be managed by the parent.\n */\n\nexport default class ControlledDrawer extends React.PureComponent {\n private readonly drawerOpenGlyph: string;\n\n private readonly drawerCloseGlyph: string;\n\n private readonly drawerGlyphClass: string;\n\n private isManuallyToggled: boolean;\n\n private isExpanded: boolean;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: IDrawerProps) {\n super(props);\n const { openGlyph, closeGlyph } = this.props;\n this._toggle = this._toggle.bind(this);\n this.isManuallyToggled = false;\n this.state = { isOpen: (props.collapseProps && props.collapseProps.isOpen) || false };\n this.isExpanded = this.state.isOpen;\n this.drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName || '');\n this.payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames([this.drawerGlyphClass, openGlyph || closeGlyph || '']);\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames([this.drawerGlyphClass, openGlyph || '']);\n this.drawerCloseGlyph = classnames([this.drawerGlyphClass, closeGlyph || '']);\n }\n }\n\n public render(): JSX.Element {\n const collapseProps = { ...this.props.collapseProps } as ICollapseProps;\n collapseProps.isOpen = this.isManuallyToggled ? this.state.isOpen : collapseProps.isOpen || false;\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className || '');\n this.isManuallyToggled = false;\n this.isExpanded = collapseProps.isOpen;\n this.setState({ isOpen: collapseProps.isOpen });\n this.payLoad.contentAction.etext = collapseProps.isOpen ? TelemetryConstant.Collapse : TelemetryConstant.Expand;\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen)}\n \n \n
\n );\n }\n\n private _generateDrawerButtonInnerMarkup(collapseState: boolean): JSX.Element {\n const { toggleButtonText } = this.props;\n const drawerButtonTextClass = classnames('drawer__buttontext', this.props.toggleButtonClassName || '');\n if (this.props.glyphPlacement === 'end') {\n return (\n <>\n {this._generateTitle(classnames(drawerButtonTextClass, '__start'), toggleButtonText.toString())}\n {this._generateGlyphMarkup('drawer__glyph__end', collapseState)}\n \n );\n }\n\n const isStart = this.props.glyphPlacement === 'start';\n const additionalClassName = `__${isStart ? 'end' : 'start'}`;\n return (\n <>\n {isStart && this._generateGlyphMarkup('drawer__glyph__start', collapseState)}\n {this._generateTitle(classnames(drawerButtonTextClass, additionalClassName), this.props.toggleButtonText.toString())}\n \n );\n }\n\n private _generateTitle(titleLClassName: string, title: string): JSX.Element {\n if (this.props.onTextChange && this.props.requestContext) {\n return (\n \n );\n }\n return {title};\n }\n\n private _generateGlyphMarkup(location: string, collapseState: boolean): JSX.Element {\n const glyphClass = `${collapseState ? this.drawerOpenGlyph : this.drawerCloseGlyph} ${location}`;\n return ;\n }\n\n private _toggle(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n this.isExpanded = !this.isExpanded;\n this.setState({ isOpen: this.isExpanded });\n this.isManuallyToggled = true;\n if (this.props.onToggle) {\n this.props.onToggle(this.state);\n }\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport interface IClientDimension {\n width: number;\n height: number;\n}\n\n/* A type safe Dictionary */\nexport interface IDictionaryStringString {\n [key: string]: string;\n}\n\n/**\n * @interface IGrid\n * @classdesc - The IGrid interface contract.\n * @export\n */\nexport interface IGrid {\n rows: number;\n columns: number;\n}\n\n/**\n * Clamp position between a range.\n * @param {number} value - Value to be clamped.\n * @param {number} min - Minimum value in range.\n * @param {number} max - Maximum value in range.\n * @returns The clap value if min passed is less than max else returns 0.\n */\nexport function clamp(value: number, min: number, max: number): number {\n if (min <= max) {\n return Math.min(Math.max(value, min), max);\n }\n return 0;\n}\n\n/**\n * Upper case the first letter of the string, if only one char exists on the string, uppercase it.\n * @param {string} value - Value to be upper cased.\n * @returns The upper cased string of the passed value, if it has just one char uppercase it.\n */\nexport function toUpperCaseFirstChar(value: string): string {\n if (value.length > 1) {\n return value.charAt(0).toUpperCase() + value.substr(1);\n }\n if (value.length === 1) {\n return value.charAt(0).toUpperCase();\n }\n return '';\n}\n\nexport function htmlCollectionToArray(nodeList: HTMLCollection): HTMLElement[] {\n return Array.prototype.slice.call(nodeList);\n}\n\nexport function getCSS(element: HTMLElement, property: string): string {\n let style = element.style[property];\n\n if (!style) {\n style = getComputedStyle(element)[property];\n }\n\n return style;\n}\n\nexport function createThrottledEvent(listener: EventListener, threshold: number): (event: Event) => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let timer: any;\n let last = 0;\n\n return (event: Event) => {\n const now = Date.now();\n\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n\n if (last && now < last + threshold) {\n timer = setTimeout(() => {\n last = Date.now();\n listener(event);\n }, threshold - (now - last));\n } else {\n last = now;\n listener(event);\n }\n };\n}\n\nexport function addThrottledEvent(\n target: EventTarget,\n name: string,\n listener: EventListener,\n threshold: number = 150\n): (event: Event) => void {\n const throttledEventHandler = createThrottledEvent(listener, threshold);\n target.addEventListener(name, throttledEventHandler, false);\n\n return throttledEventHandler;\n}\n\n/* RTS utilities */\n/* TODO: Using any here for now, need to convert cssmodules into a dictionary in all modules */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mapToCssModules(className: string = '', cssModule: any): string {\n if (!cssModule) {\n return className;\n }\n\n return className\n .split(' ')\n .map((c: string) => cssModule[c] || c)\n .join(' ');\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isRef(target: any): boolean {\n if (!target) {\n return false;\n }\n\n return (>target).current !== undefined;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isElement(target: any): boolean {\n if (!target) {\n return false;\n }\n\n return (target).addEventListener !== undefined;\n}\n\nexport const keyCodes = {\n esc: 27,\n space: 32,\n tab: 9,\n up: 38,\n down: 40,\n enter: 13\n};\n\ninterface IMap {\n [key: string]: T;\n}\nconst warned: IMap = {};\n\nexport function warnOnce(message: string): void {\n if (!warned[message]) {\n if (typeof console !== 'undefined') {\n throw new Error(message);\n }\n warned[message] = true;\n }\n}\n\nexport const canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nexport function findDOMElements(target: string): NodeListOf | string | null {\n try {\n if (typeof target === 'string' && canUseDOM) {\n let selection = document.querySelectorAll(target);\n\n if (selection.length === 0) {\n selection = document.querySelectorAll(`#${target}`);\n }\n\n if (selection.length === 0) {\n throw new Error();\n }\n return selection;\n }\n\n return target;\n } catch {\n console.error(`The target '${target}' could not be identified in the dom, tip: check spelling`);\n return null;\n }\n}\n\nexport function getTarget(target: string | HTMLElement | React.Ref): HTMLElement | React.Ref | null | string {\n const selection = findDOMElements(target);\n if (selection && selection.length > 0) {\n return selection[0];\n }\n\n return target;\n}\n\nexport function getTargetElement(target: string | HTMLElement | React.Ref): HTMLElement | null {\n const targetElement = getTarget(target);\n if (isRef(targetElement)) {\n return (>targetElement).current;\n }\n if (isElement(targetElement)) {\n return targetElement;\n }\n\n return null;\n}\n\nexport const TransitionTimeouts = {\n Fade: 150,\n Collapse: 350,\n Modal: 300,\n Carousel: 600\n};\n\nexport type TransitionStatuses = 'entering' | 'entered' | 'exiting' | 'exited';\n\nexport const focusableElements = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled]):not([type=hidden])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[tabindex]:not(.modal)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])'\n];\n\n/**\n * @name - extend\n * @description - extends an object with properties/values from one or more others.\n * @export\n * @public\n * @param {any[]} parameters - The objects to merge together.\n * @returns {any} - The extended object.\n */\n\n// eslint-disable-next-line complexity, @typescript-eslint/no-explicit-any\nexport function extend(...parameters: any[]): any {\n if (!parameters || parameters.length === 0) {\n return null;\n }\n\n const recursive = typeof parameters[0] === 'boolean' && parameters[0];\n\n if (parameters.length < 2) {\n return recursive ? null : parameters[0];\n }\n\n if (recursive && parameters.length < 3) {\n return parameters[1];\n }\n\n const target = recursive ? parameters[1] : parameters[0];\n\n for (let paramIndex = recursive ? 2 : 1; paramIndex < parameters.length; paramIndex++) {\n if (parameters[paramIndex] !== undefined) {\n for (const key of Object.keys(parameters[paramIndex])) {\n if (parameters[paramIndex].hasOwnProperty(key)) {\n const source = parameters[paramIndex][key];\n\n if (recursive) {\n let isSourceArray = Array.isArray ? Array.isArray(source) : {}.toString.call(source) === '[object Array]';\n let isTargetArray =\n !!target[key] &&\n (Array.isArray ? Array.isArray(target[key]) : {}.toString.call(target[key]) === '[object Array]');\n let isSourceObject = !isSourceArray && typeof source === 'object';\n let isTargetObject = !isTargetArray && !!target[key] && typeof target[key] === 'object';\n\n if (isSourceArray && isTargetArray) {\n for (const [arrayIndex, element] of source.entries()) {\n isSourceArray = Array.isArray ? Array.isArray(element) : {}.toString.call(element) === '[object Array]';\n isTargetArray =\n !!target[key][arrayIndex] &&\n (Array.isArray\n ? Array.isArray(target[key][arrayIndex])\n : {}.toString.call(target[key][arrayIndex]) === '[object Array]');\n isSourceObject = !isSourceArray && typeof element === 'object';\n isTargetObject = !isTargetArray && !!target[key][arrayIndex] && typeof target[key][arrayIndex] === 'object';\n\n if (isSourceArray) {\n target[key][arrayIndex] = extend(true, isTargetArray ? target[key][arrayIndex] : [], element);\n } else if (isSourceObject) {\n target[key][arrayIndex] = extend(true, isTargetObject ? target[key][arrayIndex] : {}, element);\n } else {\n target[key][arrayIndex] = element;\n }\n }\n continue;\n } else if (isSourceArray) {\n target[key] = extend(true, [], source);\n continue;\n } else if (isSourceObject) {\n target[key] = extend(true, isTargetObject ? target[key] : {}, source);\n continue;\n }\n }\n\n target[key] = source;\n }\n }\n }\n }\n\n return target;\n}\n\n/**\n * @name - getDimensions\n * @description - Gets the dimension of an element.\n * @export\n * @param {HTMLElement} containerElement - The container element.\n * @returns {IClientDimension} - The client dimension.\n * {IClientDimension.width} - The client width\n * {IClientDimension.height} - The client height.\n */\nexport function getDimensions(containerElement: HTMLElement): IClientDimension | null {\n if (containerElement === null) {\n return null;\n }\n return {\n width: containerElement.clientWidth,\n height: containerElement.clientHeight\n };\n}\n\n/**\n * Updates the max quantity for cart line item to default if not configured.\n * @param currentMaxQuantityForCartLineItem - The current max quantity for cart line item.\n * @returns The updated max quantity for cart line item.\n */\nexport function updateMaxQuantityForCartLineItem(currentMaxQuantityForCartLineItem: number | undefined): number {\n const defaultMaxQuantity = 10;\n\n const updatedMaxQuantityForCartLineItem = currentMaxQuantityForCartLineItem || defaultMaxQuantity;\n\n return updatedMaxQuantityForCartLineItem;\n}\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\nimport { mapToCssModules } from '../common/utilities';\nimport { IPaginationItemProps } from './PaginationItem.props';\n\n/**\n * PaginationItem component.\n */\nexport default class PaginationItem extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'li'\n };\n\n public render(): JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { active, className, cssModule, disabled, tag: Tag, ...props }: any = this.props;\n\n const paginationItemClasses = mapToCssModules(\n classNames(className, 'msc-page-item', {\n active,\n disabled\n }),\n cssModule\n );\n\n return ;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions, Dictionary, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport Button from '../button/Button';\nimport { IFormKeyProps } from './form-builder.props';\n\n/**\n * The state of the form builder.\n */\nexport interface IFormBuilderState {\n /**\n * The captured values.\n */\n values: string[];\n\n /**\n * If the form has been submitted.\n */\n isSubmitted: boolean;\n}\n\n/**\n * The properties of the form builder.\n */\nexport interface IFormBuilderProps {\n /**\n * The component showing confirmation after form submitted successfully.\n */\n confirmationComponent: React.ReactNode;\n\n /**\n * The heading for the component shown above the input boxes.\n */\n heading: string;\n\n /**\n * The text shown on the submit button.\n */\n submitButtonText: string;\n\n /**\n * The keys of the form values to capture, which will be shown as labels for the inputs.\n */\n keys: IFormKeyProps[];\n\n /**\n * The error message shown when submitting the form and required value is missing.\n */\n requiredValueMissingErrorMessage: string;\n\n /**\n * The action to perform when the form is submitted.\n * @param { formKey: IFormKeyProps, value: string[] } entry - The form data as key-value pairs to submit.\n */\n onSubmit(entry?: { formKey: IFormKeyProps; value: string }[]): Promise;\n}\n\n/**\n * The interface for properties of form builder error.\n */\nexport interface IFormBuilderErrorProps {\n errorMessage?: string;\n}\n\n/**\n * The error component in form builder.\n * @param errorProperties - The error properties.\n * @param errorProperties.errorMessage - The error message to show.\n * @returns The error component.\n */\nexport const FormBuilderErrorComponent: React.FC = ({ errorMessage }) => {\n if (!errorMessage) {\n return null;\n }\n\n return (\n \n {errorMessage}\n \n );\n};\n\n/**\n * The component to capture form data.\n */\nexport class FormBuilder extends React.Component {\n private readonly requiredValueMissing: Dictionary;\n\n public constructor(props: IFormBuilderProps) {\n super(props);\n this.state = { values: this.props.keys.map(() => ''), isSubmitted: false };\n\n // Setup a boolean dictionary to keep track if required value is missing for every field to submit.\n this.requiredValueMissing = new Dictionary();\n for (const formKey of this.props.keys) {\n if (formKey.resourceId) {\n this.requiredValueMissing.setValue(formKey.resourceId, formKey.isRequired ?? false);\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: IFormBuilderProps, nextState: IFormBuilderState): boolean {\n if (\n this.props.heading !== nextProps.heading ||\n this.props.confirmationComponent !== nextProps.confirmationComponent ||\n this.props.submitButtonText !== nextProps.submitButtonText ||\n this.props.requiredValueMissingErrorMessage !== nextProps.requiredValueMissingErrorMessage\n ) {\n return true;\n }\n\n // If any form key has changed, the component should update.\n if (\n !this.props.keys.every((formKey: IFormKeyProps, index: number) => {\n return (\n nextProps.keys[Number(index)].isRequired === formKey.isRequired &&\n nextProps.keys[Number(index)].resourceId === formKey.resourceId &&\n nextProps.keys[Number(index)].resourceValue === formKey.resourceValue\n );\n })\n ) {\n return true;\n }\n\n // If any value has changed, the component should update.\n if (\n this.state.isSubmitted !== nextState.isSubmitted ||\n !this.state.values.every((value: string, index: number) => {\n return value === nextState[Number(index)];\n })\n ) {\n return true;\n }\n\n return false;\n }\n\n public render(): JSX.Element {\n return (\n <>\n {!this.state.isSubmitted && ArrayExtensions.hasElements(this.props.keys) && (\n
\n

{this.props.heading}

\n
\n \n {this.props.keys\n .filter((formKey: IFormKeyProps) => {\n return (\n !ObjectExtensions.isNullOrUndefined(formKey.resourceId) &&\n !ObjectExtensions.isNullOrUndefined(formKey.resourceValue)\n );\n })\n .map((formKey: IFormKeyProps, index: number) => {\n const currentValue: string = this.state.values[Number(index)];\n return (\n
\n \n {`${formKey.resourceValue!}${formKey.isRequired ? ' *' : ''}`}\n {this.requiredValueMissing.getValue(formKey.resourceId!) && (\n \n )}\n \n \n
\n );\n })}\n
\n \n {this.props.submitButtonText}\n \n
\n \n
\n
\n )}\n {this.state.isSubmitted && this.props.confirmationComponent}\n \n );\n }\n\n private get isAnyRequiredValueMissing(): boolean {\n const notFound: number = -1;\n return this.requiredValueMissing.getValues().findIndex((isMissing: boolean) => isMissing) !== notFound;\n }\n\n /**\n * The action to perform when the submit button is clicked.\n * @param event - The click event.\n * @returns The async result.\n */\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\n event.preventDefault(); // Prevents form submission\n const formData: { formKey: IFormKeyProps; value: string }[] = this.props.keys.map((formKey: IFormKeyProps, index: number) => {\n const currentValue: string = this.state.values[Number(index)];\n return {\n formKey: { resourceId: formKey.resourceId!, resourceValue: formKey.resourceValue },\n value: currentValue\n };\n });\n await this.props.onSubmit(formData);\n this.setState((previousState: Readonly) => {\n return { values: previousState.values, isSubmitted: true };\n });\n };\n\n /**\n * The action to perform when any input in the form has changed.\n * @param event - The input change event.\n * @returns The async result.\n */\n private readonly _onInputChange = async (event: React.ChangeEvent): Promise => {\n event.preventDefault();\n const changedValueIndex: number = Number.parseInt(event.target.getAttribute('data-index') ?? '', 10);\n if (ObjectExtensions.isNullOrUndefined(changedValueIndex)) {\n return Promise.reject(new Error('form-builder: invalid value index.'));\n }\n const newState = {\n values: this.state.values.map((value: string, index: number) => {\n const currentKey: IFormKeyProps = this.props.keys[Number(index)];\n if (index === changedValueIndex && currentKey.resourceId) {\n this.requiredValueMissing.setValue(\n currentKey.resourceId,\n (currentKey.isRequired ?? false) && event.target.value === ''\n );\n return event.target.value;\n }\n return value;\n })\n };\n this.setState(newState);\n return Promise.resolve();\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function format(formatSpecifier: string, ...parameters: any[]): string {\n if (!formatSpecifier) {\n return '';\n }\n\n return formatSpecifier.replace(/{(\\d+)}/g, (match: string, index: number) => {\n if (index >= parameters.length) {\n return match;\n }\n\n const value = parameters[index];\n\n if (typeof value !== 'number' && !value) {\n return '';\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return value.toString();\n });\n}\n\n/**\n * @name - isNullOrWhiteSpace\n * @description - Determines if the specified string is undefined, null, empty, or whitespace.\n * @export\n * @public\n * @param {string} value - The string to examine.\n * @returns {boolean} - True if the value is undefined, null, empty, or whitespace, otherwise false.\n */\nexport function isNullOrWhiteSpace(value: string): boolean {\n return !value || typeof value !== 'string' || !trim(value);\n}\n\n/**\n * @name - trim\n * @description - Trims leading and trailing whitespace from the string.\n * @export\n * @public\n * @param {string} value - The string to examine.\n * @returns {string} - The trimmed string.\n */\nexport function trim(value: string): string {\n // Any flavor of !value (ie. null/undefined/'') should return itself.\n if (!value || typeof value !== 'string') {\n return value;\n }\n\n if (value.trim) {\n return value.trim();\n }\n\n return value.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * @name - startsWith\n * @description - Determines if the specified string starts with the specified value.\n * @param ignoreCase\n * @export\n * @public\n * @param {string} value - The string to look in.\n * @param {string} prefix - The prefix to look for.\n * @returns {boolean} - True if the string starts with the prefix, otherwise false.\n */\nexport function startsWith(value: string, prefix: string, ignoreCase: boolean = true): boolean {\n if (!value || !prefix) {\n return false;\n }\n\n if (ignoreCase) {\n value = value.toLocaleLowerCase();\n prefix = prefix.toLocaleLowerCase();\n }\n\n if (value.startsWith) {\n return value.startsWith(prefix);\n }\n\n return value.startsWith(prefix);\n}\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\nimport { UncontrolledTooltip } from '..';\nimport { mapToCssModules } from '../common/utilities';\nimport PaginationItem from './PaginationItem';\nimport PaginationLink from './PaginationLink';\nimport { IUncontrolledPaginationProps } from './UncontrolledPagination.props';\n\n/**\n * Uncontrolled Pagination component.\n */\nexport default class UncontrolledPagination extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'nav',\n listTag: 'ul',\n 'aria-label': 'pagination',\n items: 0,\n itemsPerPage: 25,\n startingItem: 0\n };\n\n private static readonly pagesDisplayed: number = 7;\n\n private maxPages: number;\n\n private activePage: number = 0;\n\n private qsps: { [param: string]: string };\n\n private url: string;\n\n private hash: string;\n\n constructor(props: IUncontrolledPaginationProps) {\n super(props);\n this.maxPages = this.props.items ? Math.ceil(this.props.items / this.props.itemsPerPage!) : 0;\n this.activePage = Math.floor((this.props.startingItem || 0) / this.props.itemsPerPage!);\n this.qsps = {};\n const splitUrl = this.props.url.split('?');\n\n if (splitUrl[1]) {\n this.url = splitUrl[0];\n const secondSplit = splitUrl[1].split('#');\n this.hash = secondSplit[1] ? `#${secondSplit[1]}` : '';\n const parsedQsps = secondSplit[0].split('&');\n\n for (const qsp of parsedQsps) {\n const qspPair = qsp.split('=');\n\n if (this.props.qsp !== qspPair[0]) {\n this.qsps[qspPair[0]] = qspPair[1];\n }\n }\n } else {\n const secondSplit = splitUrl[0].split('#');\n this.url = secondSplit[0];\n this.hash = secondSplit[1] ? `#${secondSplit[1]}` : '';\n }\n }\n\n public render(): JSX.Element {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const {\n className,\n baseUrl,\n qsp,\n items,\n itemsPerPage,\n startingItem,\n previousText,\n nextText,\n previousAriaLabel,\n nextAriaLabel,\n listClassName,\n cssModule,\n children,\n size,\n tag: Tag,\n listTag: ListTag,\n 'aria-label': label,\n role,\n ...props\n }: any = this.props;\n\n this.maxPages = this.props.items ? Math.ceil(this.props.items / this.props.itemsPerPage!) : 0;\n this.activePage = Math.floor((this.props.startingItem || 0) / this.props.itemsPerPage!);\n this.qsps = {};\n const splitUrl = this.props.url.split('?');\n\n if (splitUrl[1]) {\n this.url = splitUrl[0];\n const secondSplit = splitUrl[1].split('#');\n this.hash = secondSplit[1] ? `#${secondSplit[1]}` : '';\n const parsedQsps = secondSplit[0].split('&');\n\n for (const activeQsp of parsedQsps) {\n const qspPair = activeQsp.split('=');\n\n if (this.props.qsp !== qspPair[0]) {\n this.qsps[qspPair[0]] = qspPair[1];\n }\n }\n } else {\n const secondSplit = splitUrl[0].split('#');\n this.url = secondSplit[0];\n this.hash = secondSplit[1] ? `#${secondSplit[1]}` : '';\n }\n\n const paginationClasses = mapToCssModules(classNames(className), cssModule);\n\n const listpaginationClasses = mapToCssModules(\n classNames(listClassName, 'msc-pagination', {\n [`msc-pagination-${size}`]: !!size\n }),\n cssModule\n );\n\n return (\n \n \n {this._generatePageLinks()}\n \n \n );\n }\n\n private _generateUrl(page: number): string {\n const items = this.props.itemsPerPage! * page;\n const keys = Object.keys(this.qsps);\n let qspUrl = page > 0 ? `?${this.props.qsp}=${items}` : '';\n\n keys.forEach((key: string) => {\n qspUrl = qspUrl ? `${qspUrl}&${key}=${this.qsps[key]}` : `?${key}=${this.qsps[key]}`;\n });\n\n return this.url + qspUrl + this.hash;\n }\n\n private _generatePaginationArrow(next: boolean, disable: boolean, className: string): React.ReactElement {\n const url = disable ? undefined : this._generateUrl(this.activePage + (next ? 1 : -1));\n const tooltipId = next ? this.props.nextId : this.props.prevId;\n const ariaDescribedBy = next ? this.props.nextAreaDescribed : this.props.prevAreaDescribed;\n const placement = next ? 'right' : 'left';\n const tag = disable ? 'span' : 'a';\n\n return (\n \n \n {next ? this.props.nextText : this.props.previousText}\n \n {tooltipId && (\n \n {next ? 'next' : 'previous'}\n \n )}\n \n );\n }\n\n private _generatePaginationItem(page: number): React.ReactElement {\n const active = this.activePage === page;\n const url = this._generateUrl(page);\n page += 1;\n\n return (\n \n \n {page}\n \n \n );\n }\n\n private _generateEllipse(): React.ReactElement {\n return (\n \n ...\n \n );\n }\n\n private _generatePageLinks(): React.ReactFragment {\n const displayCountSide = 3;\n let leftDistance = this.activePage;\n let rightDistance = this.maxPages - this.activePage - 1;\n const leftEllipse = this.maxPages > UncontrolledPagination.pagesDisplayed && leftDistance > 3;\n const rightEllipse = this.maxPages > UncontrolledPagination.pagesDisplayed && rightDistance > 3;\n\n leftDistance = Math.min(leftDistance, displayCountSide);\n rightDistance = Math.min(rightDistance, displayCountSide);\n const pages = [];\n const ellipseOffset = leftEllipse ? -1 : 0;\n const displayedPagesOnLeft = leftDistance + (displayCountSide - rightDistance) + ellipseOffset;\n const startingIndex = Math.max(this.activePage - displayedPagesOnLeft, 0);\n const endIndex = Math.min(\n startingIndex + 5 + (rightEllipse ? 0 : 1) + (leftEllipse ? 0 : 1),\n rightEllipse ? this.maxPages - 1 : this.maxPages\n );\n\n if (leftEllipse) {\n pages.push(this._generatePaginationItem(0));\n pages.push(this._generateEllipse());\n }\n\n for (let i = startingIndex; i < endIndex; i++) {\n pages.push(this._generatePaginationItem(i));\n }\n\n if (rightEllipse) {\n pages.push(this._generateEllipse());\n pages.push(this._generatePaginationItem(this.maxPages - 1));\n }\n\n return (\n <>\n {this._generatePaginationArrow(false, this.activePage === 0, 'previous')}\n {pages}\n {this._generatePaginationArrow(true, this.activePage === this.maxPages - 1, 'next')}\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 classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport { IPaginationProps } from './Pagination.props';\n\n/**\n * Pagination component.\n */\nexport default class Pagination extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'nav',\n listTag: 'ul',\n 'aria-label': 'pagination'\n };\n\n public render(): JSX.Element {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const {\n className,\n listClassName,\n cssModule,\n size,\n tag: Tag,\n listTag: ListTag,\n 'aria-label': label,\n role,\n ...props\n }: any = this.props;\n\n const paginationClasses = mapToCssModules(classNames(className), cssModule);\n\n const listpaginationClasses = mapToCssModules(\n classNames(listClassName, 'msc-pagination', {\n [`msc-pagination-${size}`]: !!size\n }),\n cssModule\n );\n\n return (\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 classNames from 'classnames';\nimport * as React from 'react';\n\nimport { canUseDOM, getTargetElement, mapToCssModules } from '../common/utilities';\nimport PopperContent from '../popper-content/PopperContent';\nimport { IPopoverProps } from './Popover.props';\n\n/**\n * Popover component.\n */\nexport default class Popover extends React.PureComponent {\n public static defaultProps: Partial = {\n isOpen: false,\n placement: 'right',\n toggle: () => {\n return;\n }\n };\n\n public props: IPopoverProps;\n\n private target: HTMLElement | null;\n\n private popover: HTMLDivElement | null;\n\n private tabPressed: boolean = false;\n\n constructor(props: IPopoverProps) {\n super(props);\n this.props = props;\n\n this.popover = null;\n this._addTargetEvents = this._addTargetEvents.bind(this);\n this._handleDocumentClick = this._handleDocumentClick.bind(this);\n this._removeTargetEvents = this._removeTargetEvents.bind(this);\n this.getRef = this.getRef.bind(this);\n this._toggle = this._toggle.bind(this);\n this._focusOutTarget = this._focusOutTarget.bind(this);\n this._focusOutPopover = this._focusOutPopover.bind(this);\n this._keyDown = this._keyDown.bind(this);\n this._show = this._show.bind(this);\n this._hide = this._hide.bind(this);\n this.target = null;\n }\n\n public componentDidMount(): void {\n this.target = getTargetElement(this.props.target);\n this._handleProps();\n }\n\n public componentDidUpdate(): void {\n this._handleProps();\n }\n\n public componentWillUnmount(): void {\n this._removeTargetEvents();\n }\n\n public getRef(ref: HTMLDivElement | null): void {\n this.popover = ref;\n }\n\n public render(): JSX.Element | null {\n if (!this.props.isOpen) {\n return null;\n }\n\n const {\n cssModule,\n isOpen,\n target,\n placementPrefix,\n hideArrow,\n className,\n innerClassName,\n modifiers,\n placement,\n container,\n offset,\n toggle,\n boundariesElement,\n role,\n ...attributes\n } = this.props;\n\n const classes = mapToCssModules(classNames('msc-popover-inner', this.props.innerClassName), this.props.cssModule);\n\n const popperClasses = mapToCssModules(classNames('msc-popover', 'show', this.props.className), this.props.cssModule);\n\n return (\n \n
\n \n );\n }\n\n private _handleProps(): void {\n if (this.props.isOpen) {\n this._show();\n } else {\n this._hide();\n }\n }\n\n private _show(): void {\n this.tabPressed = false;\n this._addTargetEvents();\n if (!this.props.isOpen) {\n this._toggle();\n }\n }\n\n private _hide(): void {\n this._removeTargetEvents();\n if (this.props.isOpen) {\n this._toggle();\n }\n }\n\n private _handleDocumentClick(e: Event): void {\n if (!this.target) {\n return;\n }\n\n const target = e.target as HTMLElement;\n\n if (\n e.target !== this.target &&\n !this.target.contains(target) &&\n e.target !== this.popover &&\n !(this.popover && this.popover.contains(target))\n ) {\n if (this.props.isOpen) {\n this._toggle();\n }\n }\n }\n\n private _addTargetEvents(): void {\n if (!this.target) {\n return;\n }\n if (canUseDOM) {\n ['click', 'touchstart'].forEach((event: string) => {\n document.addEventListener(event, this._handleDocumentClick, true);\n });\n this.target.addEventListener('focusout', this._focusOutTarget, true);\n this.target.addEventListener('keydown', this._keyDown, true);\n }\n }\n\n private _removeTargetEvents(): void {\n if (!this.target) {\n return;\n }\n if (canUseDOM) {\n ['click', 'touchstart'].forEach((event: string) => {\n document.removeEventListener(event, this._handleDocumentClick, true);\n });\n this.target.removeEventListener('focusout', this._focusOutTarget, true);\n this.target.removeEventListener('keydown', this._keyDown, true);\n }\n }\n\n private _focusOutPopover(): void {\n setTimeout(() => {\n const nextFocus = document.activeElement;\n if (this.popover && !this.popover.contains(nextFocus)) {\n this._hide();\n }\n }, 1);\n }\n\n private _focusOutTarget(): void {\n if (this.tabPressed) {\n this.tabPressed = false;\n setTimeout(() => {\n const nextFocus = document.activeElement;\n if (this.popover && !this.popover.contains(nextFocus)) {\n this._hide();\n }\n }, 1);\n }\n }\n\n private _keyDown(e: KeyboardEvent): void {\n if (e.keyCode === 9) {\n this.tabPressed = true;\n } else if (this.props.isOpen && e.keyCode === 27 && this.props.toggle) {\n this.props.toggle();\n }\n }\n\n private _toggle(): void {\n if (this.props.disabled) {\n return;\n }\n\n if (this.props.toggle) {\n this.props.toggle();\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';\nimport { createPortal } from 'react-dom';\n\nimport { canUseDOM } from '../common/utilities';\nimport { IPortalProps } from './Portal.props';\n\nexport interface IPortalState {\n defaultNode: Element | null;\n}\n\n/**\n * Portal component.\n */\nexport default class Portal extends React.PureComponent {\n constructor(props: IPortalProps) {\n super(props);\n\n this.state = {\n defaultNode: null\n };\n }\n\n public componentWillUnmount(): void {\n if (this.state.defaultNode) {\n this.state.defaultNode.remove();\n }\n }\n\n public render(): React.ReactPortal | null {\n let node = null;\n if (!canUseDOM) {\n return null;\n }\n\n if (!this.props.node && !this.state.defaultNode) {\n node = document.createElement('div');\n document.body.appendChild(node);\n this.setState({ defaultNode: node });\n }\n return createPortal(this.props.children, this.props.node || node);\n }\n}\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\nimport { focusableElements, TransitionTimeouts } from '../common/utilities';\nimport Fade from '../fade/Fade';\nimport IModalProps from './Modal.props';\nimport Portal from './Portal';\n\nexport interface IModalState {\n wasOpen: boolean;\n isOpen: boolean;\n mouseDownElement: EventTarget | null;\n}\n\nexport type ModalVerticalPosition = 'top' | 'center' | 'bottom';\nexport type ModalHorizontalPosition = 'left' | 'center' | 'right';\n\n/**\n * Modal component.\n */\nexport default class Modal extends React.PureComponent {\n public static defaultProps: Partial = {\n isOpen: false,\n autoFocus: true,\n verticalPosition: 'top', // Needs to be non-null since we use non-null assertion in getVerticalPositionClass\n horizontalPosition: 'center', // Needs to be non-null since we use non-null assertion in getHorizontalPositionClass\n role: 'dialog',\n backdrop: true,\n keyboard: true,\n zIndex: 1000,\n tabIndex: 0,\n fade: true,\n modalTransition: {\n timeout: TransitionTimeouts.Modal\n },\n backdropTransition: {\n mountOnEnter: true,\n timeout: TransitionTimeouts.Fade // Uses standard fade transition\n }\n };\n\n private static openCount: number = 0;\n\n private element: HTMLElement | null;\n\n private mounted: boolean;\n\n private readonly ref: React.RefObject;\n\n /**\n * This property is initialized in componentDidMount rather than constructor in case the dialog needs to be pre-rendered.\n */\n private applicationNode!: HTMLElement | null;\n\n constructor(props: IModalProps) {\n super(props);\n this.element = null;\n this.ref = React.createRef();\n this.mounted = false;\n\n this._getFocusableChildren = this._getFocusableChildren.bind(this);\n this._handleBackdropClick = this._handleBackdropClick.bind(this);\n this._handleBackdropMouseDown = this._handleBackdropMouseDown.bind(this);\n this._handleEscape = this._handleEscape.bind(this);\n this._handleTab = this._handleTab.bind(this);\n this._onOpened = this._onOpened.bind(this);\n this._onClosed = this._onClosed.bind(this);\n\n this.state = {\n wasOpen: false,\n isOpen: props.isOpen || false,\n mouseDownElement: null\n };\n\n if (props.isOpen) {\n this._open();\n }\n }\n\n public componentDidMount(): void {\n if (this.props.onEnter) {\n this.props.onEnter();\n }\n this.mounted = true;\n\n const element = document.createElement('div');\n element.setAttribute('tabindex', '-1');\n element.style.visibility = 'hidden';\n element.style.position = 'position';\n this.element = element;\n document.body.appendChild(element);\n\n this.applicationNode =\n this.props.applicationNode instanceof HTMLElement\n ? this.props.applicationNode\n : document.querySelector(`#${this.props.applicationNode}`);\n\n if (this.state.isOpen && !this.state.wasOpen) {\n this._open();\n }\n }\n\n public componentWillUnmount(): void {\n if (this.props.onExit) {\n this.props.onExit();\n }\n if (this.state.isOpen) {\n this._close();\n }\n this.mounted = false;\n\n if (this.element) {\n this.element.remove();\n }\n }\n\n public componentDidUpdate(_prevProps: IModalProps, prevState: IModalState): void {\n if (\n (this.state.isOpen && !prevState.isOpen) ||\n (this.props.shouldUpdateFocusToFirstElement && !_prevProps.shouldUpdateFocusToFirstElement)\n ) {\n setTimeout(() => {\n const focusableElementArr = this._getFocusableChildren();\n if (focusableElementArr && focusableElementArr.length > 0 && focusableElementArr[0]) {\n const firstFocusableElement = focusableElementArr[0] as HTMLElement;\n firstFocusableElement.focus();\n }\n }, 100);\n }\n }\n // eslint-disable-next-line react/no-deprecated\n public componentWillReceiveProps(nextProps: IModalProps): void {\n if (nextProps.isOpen && !this.props.isOpen) {\n this.setState({ isOpen: nextProps.isOpen });\n }\n }\n\n public render(): JSX.Element | null {\n if (this.state.isOpen && !this.state.wasOpen) {\n this._open();\n }\n if (this.element !== null) {\n const {\n wrapClassName,\n modalClassName,\n backdropClassName,\n contentClassName,\n className,\n cssModule,\n modalTransition,\n backdropTransition,\n backdrop,\n isOpen,\n onOpened,\n onClosed,\n role,\n size,\n tabIndex,\n external,\n verticalPosition,\n horizontalPosition,\n keyboard,\n zIndex,\n fade,\n toggle,\n children,\n applicationNode,\n returnFocusRef,\n 'aria-labelledby': ariaLabelledbyId,\n ...dialogAttributes\n } = this.props;\n\n const modalAttributes = {\n onClick: this._handleBackdropClick,\n onMouseDown: this._handleBackdropMouseDown,\n onKeyUp: this._handleEscape,\n onKeyDown: this._handleTab,\n style: { display: 'block' }\n };\n\n const modalTransitions = {\n ...Fade.defaultProps,\n ...modalTransition,\n baseClass: fade && modalTransition ? modalTransition.baseClass : '',\n timeout: fade && modalTransition ? modalTransition.timeout : 0\n };\n const backdropTransitions = {\n ...Fade.defaultProps,\n ...backdropTransition,\n baseClass: fade && backdropTransition ? backdropTransition.baseClass : '',\n timeout: fade && backdropTransition ? backdropTransition.timeout : 0\n };\n\n const Backdrop = fade ? (\n \n ) : (\n
\n );\n\n const dialogBaseClass = 'msc-modal__dialog';\n const dialogClasses = classNames([dialogBaseClass, className, size ? `msc-modal__${size}` : null]);\n\n const dialog = (\n \n
\n {children}\n
\n
\n );\n\n return (\n \n
\n \n {external}\n {dialog}\n \n {Backdrop}\n
\n
\n );\n }\n\n return null;\n }\n\n private _open(): void {\n if (this.element) {\n this.element.style.zIndex = `${this.props.zIndex || 1000}`;\n this.element.style.display = 'block';\n this.element.style.visibility = 'visible';\n if (Modal.openCount === 0) {\n if (window) {\n const scrollY = window.scrollY;\n const scrollbarWidth = window.innerWidth - document.body.clientWidth;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${scrollY}px`;\n document.body.style.right = `${scrollbarWidth}px`;\n document.body.style.left = '0px';\n }\n\n document.body.className = classNames(document.body.className, 'modal-open');\n }\n Modal.openCount += 1;\n document.body.firstElementChild?.setAttribute('aria-hidden', 'true');\n if (this.applicationNode) {\n this.applicationNode.setAttribute('aria-hidden', 'true');\n }\n\n this.setState({ ...this.state, wasOpen: true });\n }\n }\n\n private _close(): void {\n if (!this.state.isOpen) {\n return;\n }\n\n if (this.element) {\n this.element.style.display = 'none';\n setTimeout(() => {\n if (this.element) {\n this.element.style.visibility = 'hidden';\n this.element.style.removeProperty('display');\n }\n }, 0);\n }\n\n if (Modal.openCount <= 1) {\n const modalOpenClassName = 'modal-open';\n document.body.firstElementChild?.setAttribute('aria-hidden', 'false');\n\n // Use regex to prevent matching `modal-open` as part of a different class, e.g. `my-modal-opened`\n const modalOpenClassNameRegex = new RegExp(`(^| )${modalOpenClassName}( |$)`);\n document.body.className = document.body.className.replace(modalOpenClassNameRegex, ' ').trim();\n\n if (window) {\n const scrollY = document.body.style.top;\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.right = '';\n document.body.style.left = '';\n window.scrollTo(0, -Number.parseInt(scrollY || '0', 10));\n }\n }\n Modal.openCount -= 1;\n\n if (this.applicationNode) {\n this.applicationNode.setAttribute('aria-hidden', 'false');\n }\n\n if (this.props.returnFocusRef && this.props.returnFocusRef.current) {\n this.props.returnFocusRef.current.focus();\n }\n\n this.setState({ ...this.state, wasOpen: false });\n }\n\n private _getFocusableChildren(): NodeListOf | null {\n if (this.element === null) {\n return null;\n }\n\n return this.element.querySelectorAll(focusableElements.join(', '));\n }\n\n private _getFocusedChild(): Element | null {\n const focusableChildren = this._getFocusableChildren();\n\n try {\n return document.activeElement;\n } catch {\n return focusableChildren === null ? null : focusableChildren[0];\n }\n }\n\n private _handleBackdropClick(e: React.MouseEvent): void {\n if (e.target === this.state.mouseDownElement) {\n e.stopPropagation();\n if (!this.props.isOpen || this.props.backdrop !== true) {\n return;\n }\n\n const container = this.ref.current;\n\n if (e.target && container && !container.contains(e.target as Node) && this.props.toggle) {\n this.props.toggle();\n }\n }\n }\n\n private _handleTab(e: React.KeyboardEvent): void {\n if (e.which !== 9) {\n return;\n }\n\n const focusableChildren = this._getFocusableChildren();\n if (focusableChildren === null) {\n return;\n }\n\n const totalFocusable = focusableChildren.length;\n const currentFocus = this._getFocusedChild();\n\n let focusedIndex = 0;\n\n for (let i = 0; i < totalFocusable; i += 1) {\n if (focusableChildren[i] === currentFocus) {\n focusedIndex = i;\n break;\n }\n }\n\n let el: HTMLElement | null = null;\n if (e.shiftKey && focusedIndex === 0) {\n e.preventDefault();\n el = focusableChildren[totalFocusable - 1] as HTMLElement;\n } else if (!e.shiftKey && focusedIndex === totalFocusable - 1) {\n e.preventDefault();\n el = focusableChildren[0] as HTMLElement;\n }\n if (el) {\n el.focus();\n }\n }\n\n private _handleBackdropMouseDown(e: React.MouseEvent): void {\n this.setState({\n mouseDownElement: e.target\n });\n }\n\n private _handleEscape(e: React.KeyboardEvent): void {\n if (this.props.isOpen && this.props.keyboard && e.keyCode === 27 && this.props.toggle) {\n this.props.toggle();\n }\n }\n\n private _onOpened(node: HTMLElement, isAppearing: boolean): void {\n if (this.props.onOpened !== undefined) {\n this.props.onOpened();\n }\n if (this.props.modalTransition !== undefined && this.props.modalTransition.onEntered !== undefined) {\n this.props.modalTransition.onEntered(node, isAppearing);\n }\n }\n\n private _onClosed(node: HTMLElement): void {\n if (this.props.onClosed !== undefined) {\n this.props.onClosed();\n }\n this._close();\n if (this.props.modalTransition !== undefined && this.props.modalTransition.onExited !== undefined) {\n this.props.modalTransition.onExited(node);\n }\n if (this.mounted) {\n this.setState({ isOpen: false });\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 classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport IModalBodyProps from './ModalBody.props';\n\n/**\n * ModalBody component.\n */\nexport default class ModalBody extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'div'\n };\n\n public render(): JSX.Element {\n const { className, cssModule, tag, id, ...attributes } = this.props;\n const Tag = tag || 'div';\n const classes = mapToCssModules(classNames(className, 'msc-modal__body'), cssModule);\n return ;\n }\n}\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\nimport { mapToCssModules } from '../common/utilities';\nimport IModalFooterProps from './ModalFooter.props';\n\n/**\n * ModalFooter component.\n */\nexport default class ModalFooter extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'div'\n };\n\n public render(): JSX.Element {\n const { className, cssModule, tag, ...attributes } = this.props;\n const Tag = tag || 'div';\n const classes = mapToCssModules(classNames(className, 'msc-modal__footer'), cssModule);\n return ;\n }\n}\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\nimport { mapToCssModules } from '../common/utilities';\nimport IModalHeaderProps from './ModalHeader.props';\n\n/**\n * ModalHeader component.\n */\nexport default class ModalHeader extends React.PureComponent {\n public render(): JSX.Element {\n let closeButton;\n const { className, cssModule, children, toggle, tag, wrapTag, closeAriaLabel, closeButtonLabel, id, ...attributes } = this.props;\n\n const Tag = tag || 'h5';\n const WrapTag = wrapTag || 'div';\n const classes = mapToCssModules(classNames(className, 'msc-modal__header'), cssModule);\n\n if (toggle) {\n closeButton = (\n \n );\n }\n\n return (\n \n {children && {children}}\n {closeButton}\n \n );\n }\n}\n"],"sourceRoot":""}