blob: 580e42e678f24dc2a3bf9efbb76f8b1fb7f962d7 [file] [log] [blame]
{"version":3,"sources":["ng://@covalent/core/paging/paging-bar.component.ts","ng://@covalent/core/paging/paging.module.ts","node_modules/tslib/tslib.es6.js","ng://@covalent/core/virtual-scroll/virtual-scroll-row.directive.ts","ng://@covalent/core/virtual-scroll/virtual-scroll-container.component.ts","ng://@covalent/core/virtual-scroll/virtual-scroll.module.ts","ng://@covalent/core/notifications/notification-count.component.ts","ng://@covalent/core/notifications/notifications.module.ts","ng://@covalent/core/common/forms/auto-trim/auto-trim.directive.ts","ng://@covalent/core/common/directives/fullscreen/fullscreen.directive.ts","ng://@covalent/core/common/pipes/time-ago/time-ago.pipe.ts","ng://@covalent/core/common/pipes/time-difference/time-difference.pipe.ts","ng://@covalent/core/common/pipes/time-until/time-until.pipe.ts","ng://@covalent/core/common/pipes/bytes/bytes.pipe.ts","ng://@covalent/core/common/pipes/decimal-bytes/decimal-bytes.pipe.ts","ng://@covalent/core/common/pipes/digits/digits.pipe.ts","ng://@covalent/core/common/pipes/truncate/truncate.pipe.ts","ng://@covalent/core/common/services/router-path.service.ts","ng://@covalent/core/common/services/icon.service.ts","ng://@covalent/core/common/common.module.ts","ng://@covalent/core/common/behaviors/control-value-accesor.mixin.ts","ng://@covalent/core/common/animations/rotate/rotate.animation.ts","ng://@covalent/core/common/animations/collapse/collapse.animation.ts","ng://@covalent/core/common/animations/fade/fadeInOut.animation.ts","ng://@covalent/core/common/animations/bounce/bounce.animation.ts","ng://@covalent/core/common/animations/flash/flash.animation.ts","ng://@covalent/core/common/animations/headshake/headshake.animation.ts","ng://@covalent/core/common/animations/jello/jello.animation.ts","ng://@covalent/core/common/animations/pulse/pulse.animation.ts","ng://@covalent/core/common/forms/validators/validators.ts","ng://@covalent/core/message/message.component.ts","ng://@covalent/core/message/message.module.ts","ng://@covalent/core/chips/chips.component.ts","ng://@covalent/core/chips/chips.module.ts","ng://@covalent/core/data-table/data-table-row/data-table-row.component.ts","ng://@covalent/core/data-table/directives/data-table-template.directive.ts","ng://@covalent/core/data-table/data-table.component.ts","ng://@covalent/core/data-table/data-table-column/data-table-column.component.ts","ng://@covalent/core/data-table/data-table-cell/data-table-cell.component.ts","ng://@covalent/core/data-table/data-table-table/data-table-table.component.ts","ng://@covalent/core/data-table/services/data-table.service.ts","ng://@covalent/core/data-table/data-table.module.ts","ng://@covalent/core/dialogs/dialog.component.ts","ng://@covalent/core/dialogs/alert-dialog/alert-dialog.component.ts","ng://@covalent/core/dialogs/confirm-dialog/confirm-dialog.component.ts","ng://@covalent/core/dialogs/prompt-dialog/prompt-dialog.component.ts","ng://@covalent/core/dialogs/services/dialog.service.ts","ng://@covalent/core/dialogs/dialogs.module.ts","ng://@covalent/core/expansion-panel/expansion-panel.component.ts","ng://@covalent/core/expansion-panel/expansion-panel-group.component.ts","ng://@covalent/core/expansion-panel/expansion-panel.module.ts","ng://@covalent/core/file/directives/file-select.directive.ts","ng://@covalent/core/file/directives/file-drop.directive.ts","ng://@covalent/core/file/file-input/file-input.component.ts","ng://@covalent/core/file/file-upload/file-upload.component.ts","ng://@covalent/core/file/services/file.service.ts","ng://@covalent/core/file/file.module.ts","ng://@covalent/core/json-formatter/json-formatter.component.ts","ng://@covalent/core/json-formatter/json-formatter.module.ts","ng://@covalent/core/layout/layout.component.ts","ng://@covalent/core/layout/layout-toggle.class.ts","ng://@covalent/core/layout/layout.directives.ts","ng://@covalent/core/layout/layout-nav/layout-nav.component.ts","ng://@covalent/core/layout/layout-nav-list/layout-nav-list.component.ts","ng://@covalent/core/layout/layout-nav-list/layout-nav-list.directives.ts","ng://@covalent/core/layout/layout-card-over/layout-card-over.component.ts","ng://@covalent/core/layout/layout-manage-list/layout-manage-list.component.ts","ng://@covalent/core/layout/layout-manage-list/layout-manage-list.directives.ts","ng://@covalent/core/layout/layout-footer/layout-footer.component.ts","ng://@covalent/core/layout/navigation-drawer/navigation-drawer.component.ts","ng://@covalent/core/layout/layout.module.ts","ng://@covalent/core/loading/loading.component.ts","ng://@covalent/core/loading/services/loading.factory.ts","ng://@covalent/core/loading/services/loading.service.ts","ng://@covalent/core/loading/directives/loading.directive.ts","ng://@covalent/core/loading/loading.module.ts","ng://@covalent/core/media/services/media.service.ts","ng://@covalent/core/media/directives/media-toggle.directive.ts","ng://@covalent/core/media/media.module.ts","ng://@covalent/core/menu/menu.component.ts","ng://@covalent/core/menu/menu.module.ts","ng://@covalent/core/search/search-input/search-input.component.ts","ng://@covalent/core/search/search-box/search-box.component.ts","ng://@covalent/core/search/search.module.ts","ng://@covalent/core/breadcrumbs/breadcrumb/breadcrumb.component.ts","ng://@covalent/core/breadcrumbs/breadcrumbs.component.ts","ng://@covalent/core/breadcrumbs/breadcrumbs.module.ts","ng://@covalent/core/steps/step.component.ts","ng://@covalent/core/steps/steps.component.ts","ng://@covalent/core/steps/step-header/step-header.component.ts","ng://@covalent/core/steps/step-body/step-body.component.ts","ng://@covalent/core/steps/nav/nav-step-link/nav-step-link.component.ts","ng://@covalent/core/steps/nav/nav-steps-horizontal/nav-steps-horizontal.component.ts","ng://@covalent/core/steps/nav/nav-steps-vertical/nav-steps-vertical.component.ts","ng://@covalent/core/steps/steps.module.ts","ng://@covalent/core/tab-select/tab-option.component.ts","ng://@covalent/core/tab-select/tab-select.component.ts","ng://@covalent/core/tab-select/tab-select.module.ts","ng://@covalent/core/common/behaviors/disabled.mixin.ts","ng://@covalent/core/common/behaviors/disable-ripple.mixin.ts"],"names":["TdPagingBarComponent","Object","defineProperty","prototype","this","_pageLinkCount","pageLinkCount","coerceNumberProperty","_calculatePageLinks","_changeDetectorRef","markForCheck","_pageSize","pageSize","_page","_initialized","_handleOnChange","_total","total","_calculateRows","_pageLinks","_toRow","_fromRow","Math","ceil","_dir","dir","ngOnInit","initialPage","navigateToPage","page","maxPage","floor","firstPage","prevPage","nextPage","lastPage","isMinPage","isMaxPage","top","_hitEnd","_hitStart","actualPageLinkCount","middlePageLinks","x","event","fromRow","toRow","onChange","emit","Component","args","changeDetection","ChangeDetectionStrategy","OnPush","selector","template","Dir","decorators","type","Optional","ChangeDetectorRef","Input","Output","firstLast","EventEmitter","CovalentPagingModule","NgModule","imports","CommonModule","MatIconModule","MatButtonModule","declarations","exports","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","constructor","create","__values","o","m","Symbol","iterator","i","call","next","length","value","done","__read","n","r","e","ar","push","error","__spread","arguments","concat","tslib_1.__extends","TemplatePortalDirective","Directive","TemplateRef","ViewContainerRef","TdVirtualScrollRowDirective","templateRef","viewContainerRef","_super","TdVirtualScrollContainerComponent","_data","data","_calculateVirtualRows","_virtualData","_rows","toArray","nativeElement","getBoundingClientRect","height","_totalHeight","_offsetTransform","ngAfterViewInit","_this","_subs","changes","subscribe","_bottom","pipe","debounceTime","bottom","lastRow","lastIndex","ngAfterViewChecked","newHostHeight","_elementRef","_hostHeight","ngOnDestroy","forEach","sub","unsubscribe","handleScroll","element","verticalScroll","scrollTop","_scrollVerticalOffset","rowHeight","refresh","scrollTo","row","scrollToStart","scrollToEnd","totalHeight","isFinite","offset","_domSanitizer","bypassSecurityTrustStyle","slice","Promise","resolve","then","ElementRef","DomSanitizer","Renderer2","ViewChildren","ContentChild","HostListener","_renderer","Subject","trackBy","index","item","TD_VIRTUAL_SCROLL","CovalentVirtualScrollModule","Top","Bottom","Center","Before","After","TdNotificationCountComponent","_positionX","positionX","_positionY","positionY","notifications","_notifications","limit","_limit","show","_hasContent","toString","isNaN","ngAfterContentInit","TdNotificationCountPositionX","TdNotificationCountPositionY","content","contentElement","children","textContent","trim","ViewChild","HostBinding","color","TD_NOTIFICATIONS","CovalentNotificationsModule","TdAutoTrimDirective","onBlur","_model","update","NgModel","Host","TdFullscreenDirective","fsChangeHandler","fullScreenIsActive","srcElement","_getFullScreenElement","toggleFullScreen","_el","exitFullScreen","enterFullScreen","enterFullScreenMap","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","_b","tslib_1.__values","keys","_c","handler","_document","exitFullScreenMap","exitFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","_d","tdFullScreenElementMap","fullscreenElement","webkitFullscreenElement","mozFullscreenElement","msFullscreenElement","props","exportAs","Inject","DOCUMENT","TdTimeAgoPipe","transform","time","reference","Date","ref","getTime","startTime","now","diff","Pipe","name","TdTimeDifferencePipe","start","end","endTime","undefined","days","hours","minutes","seconds","pad","daysFormatted","substring","TdTimeUntilPipe","TdBytesPipe","bytes","precision","parseInt","log","parseFloat","pow","toFixed","TdDecimalBytesPipe","TdDigitsPipe","digits","_decimalPipe","size","LOCALE_ID","_locale","DecimalPipe","TdTruncatePipe","text","truncated","substr","lastIndexOf","RouterPathService","getPreviousRoute","_previousRoute","Injectable","Router","_router","events","filter","RoutesRecognized","pairwise","urlAfterRedirects","IconService","_icons","query","icons","el","toLowerCase","indexOf","TD_DIRECTIVES","TD_VALIDATORS","TD_PIPES","FormsModule","providers","CovalentCommonModule","noop","tdRotateAnimation","trigger","state","style","params","degressStart","degreesEnd","transition","group","animateChild","optional","animate","duration","delay","ease","tdCollapseAnimation","overflow","AUTO_STYLE","tdFadeInOutAnimation","opacity","visibility","easeOnIn","easeOnOut","tdBounceAnimation","keyframes","animationTimingFunction","tdFlashAnimation","tdHeadshakeAnimation","tdJelloAnimation","tdPulseAnimation","CovalentValidators","min","minValue","c","Validators","required","v","actualValue","max","maxValue","numberRequired","Number","TdMessageContainerDirective","viewContainer","TdMessageComponent","_opened","_hidden","_color","removeClass","addClass","opened","open","close","animationDoneListener","_detach","_animating","_attach","_startAnimationState","toggle","_childElement","createEmbeddedView","_template","clear","animations","icon","TD_MESSAGE","CovalentMessageModule","TdChipDirective","TdAutocompleteOptionDirective","_TdChipsMixinBase","mixinControlValueAccessor","mixinDisabled","TdChipsBase","TdChipsComponent","_focused","_items","items","_setFirstOptionActive","_stacked","stacked","coerceBooleanProperty","_inputPosition","inputPosition","_requireMatch","requireMatch","_required","_chipAddition","chipAddition","_toggleInput","disabled","_chipRemoval","chipRemoval","canAddChip","placeholder","_tabIndex","focusListener","_isMousedown","focus","preventDefault","mousedownListener","timer","toPromise","clickListener","clickTarget","className","stopPropagation","keydownListener","keyCode","TAB","removeFocusedState","ESCAPE","_inputChild","focused","_nativeInput","blur","_closeAutocomplete","_inputValueChangesSubs","inputControl","valueChanges","debounce","onInputChange","_watchOutsideClick","ngDoCheck","_length","_outsideClickSubs","_setInternalClick","_internalClick","onDisabledChange","_handleAddChip","selectedOptions","_options","option","active","setInactiveStyles","_autocompleteTrigger","activeOption","addChip","setFocusedState","_openAutocomplete","setValue","findIndex","compareWith","onAdd","removeChip","removedValues","splice","_totalChips","_focusChip","onRemove","_handleChipBlur","onChipBlur","_handleChipFocus","onChipFocus","_handleFocus","_focusFirstChip","_inputKeydown","UP_ARROW","_internalActivateOption","LEFT_ARROW","DELETE","BACKSPACE","_focusLastChip","RIGHT_ARROW","_chipKeydown","canRemoveChip","DOWN_ARROW","_removeInputDisplay","panelOpen","openPanel","closePanel","_chipsChildren","enable","disable","setActiveStyles","merge","fromEvent","_touchendDebounce","setTimeout","contains","onTouched","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","inputs","MatInput","MatAutocompleteTrigger","MatChip","MatOption","Subscription","EMPTY","FormControl","o1","o2","CovalentChipsModule","ReactiveFormsModule","MatInputModule","MatChipsModule","MatAutocompleteModule","TdDataTableColumnRowComponent","TdDataTableRowComponent","_selected","selected","TdDataTableTemplateDirective","TdDataTableBase","Ascending","Descending","_TdDataTableMixinBase","TdDataTableComponent","_resizingColumn","selectable","_hostWidth","_scrollHorizontalOffset","_allSelected","_indeterminate","_rowHeightCache","_scrollableDiv","_columns","hasData","k","find","label","cols","_resizableColumns","resizableColumns","_selectable","_clickable","clickable","_multiple","multiple","_sortable","sortable","columnName","column","columns","Error","_sortBy","order","sortOrder","toUpperCase","_sortOrder","TdDataTableSortingOrder","_resizeSubs","_onResize","asObservable","_calculateWidths","_columnResizeSubs","_onColumnResize","clientX","_columnClientX","_horizontalScrollSubs","_onHorizontalScroll","horizontalScroll","_verticalScrollSubs","_onVerticalScroll","_valueChangesSubs","_templates","_templateMap","set","tdDataTableTemplate","ngAfterContentChecked","newHostWidth_1","width","_rowsChangedSubs","scrollLeft","getColumnWidth","_widths","getCellValue","nested","_getNestedValue","getTemplateRef","get","clearModel","_calculateCheckboxState","selectAll","checked","toggledRows","isRowSelected","modelRow","val","onSelectAll","rows","select","currentSelected","blockEvent","mouseEvent","shiftKey","_lastSelectedIndex","firstIndex","_firstSelectedIndex","_doSelection","rowSelected","_firstCheckboxValue","_shiftPreviouslyPressed","disableTextSelection","onselectstart","enableTextSelection","handleRowClick","currentTarget","getAttribute","tagName","onRowClick","handleSort","onSortChange","_rowKeyup","ENTER","SPACE","_handleStartColumnDrag","_handleColumnDrag","xPosition","proposedManualWidth","_colElements","projectedWidth","_handleEndColumnDrag","splitName","split","rowIndex","wasSelected","onRowSelect","col","_adjustColumnWidth","_calculateWidth","_adjustColumnWidhts","fixedTotalWidth","flexibleWidths","hidden","recalculateHostWidth","hostWidth","newValue_1","adjustedNumber_1","colWidth","newFlexibleWidths","skipMinWidthProjection","widthOpts","renderedColumns","scrolledRows","rowHeightSum_1","hostHeight","ContentChildren","Map","model","TdDataTableColumnComponent","_columnContent","numeric","handleClick","isAscending","isDescending","read","TdDataTableCellComponent","_align","align","TdDataTableTableComponent","TdDataTableService","filterData","searchTerm","ignoreCase","excludedColumns","key","preItemValue","sortData","sortBy","from","sort","a","compA","compB","direction","pageData","DATA_TABLE_PROVIDER_FACTORY","parent","DATA_TABLE_PROVIDER","deps","SkipSelf","useFactory","TD_DATA_TABLE","CovalentDataTableModule","MatCheckboxModule","MatTooltipModule","MatPseudoCheckboxModule","TdDialogTitleDirective","TdDialogContentDirective","TdDialogActionsDirective","TdDialogComponent","dialogTitle","dialogContent","dialogActions","TdAlertDialogComponent","_dialogRef","MatDialogRef","closeButton","TdConfirmDialogComponent","cancel","accept","cancelButton","acceptButton","TdPromptDialogComponent","_input","handleInputFocus","TdDialogService","component","config","_dialogService","closeAll","openAlert","dialogConfig","_createConfig","dialogRef","alertDialogComponent","componentInstance","title","message","openConfirm","confirmDialogComponent","openPrompt","promptDialogComponent","MatDialogConfig","assign","MatDialog","TD_DIALOGS","TD_DIALOGS_ENTRY_COMPONENTS","CovalentDialogsModule","MatDialogModule","entryComponents","TdExpansionPanelHeaderDirective","TdExpansionPanelLabelDirective","TdExpansionPanelSublabelDirective","TdExpansionPanelSummaryComponent","_TdExpansionPanelMixinBase","mixinDisableRipple","TdExpansionPanelBase","TdExpansionPanelComponent","_expand","expand","_setExpand","clickEvent","_onCollapsed","newExpand","_onExpanded","expanded","collapsed","TdExpansionPanelGroupComponent","_multi","_lastOpenedPanels","_closeAllExcept","_destroyed","_stopWatchingPanels","openedPanels","expansionPanels","expansionPanel","numOpenedPanels","_attachListeners","takeUntil","openAll","indexOfPanel","panel","TD_EXPANSION_PANEL","CovalentExpansionPanelModule","MatRippleModule","PortalModule","TdFileSelectDirective","target","HTMLInputElement","files","onFileSelect","_TdFileDropMixinBase","TdFileDropBase","TdFileDropDirective","onDrop","dataTransfer","onFileDrop","_element","_stopEvent","onDragOver","transfer","dropEffect","_typeCheck","types","mozItemCount","onDragEnter","onDragLeave","TdFileInputLabelDirective","_TdFileInputMixinBase","TdFileInputBase","TdFileInputComponent","_inputElement","handleSelect","writeValue","onSelect","setProperty","inputElement","setDisabledState","isDisabled","_TdFileUploadMixinBase","TdFileUploadBase","TdFileUploadComponent","uploadPressed","onUpload","onCancel","fileInput","defaultColor","activeColor","cancelColor","TdFileService","_progressObservable","upload","options","Observable","subscriber","xhr","XMLHttpRequest","formData","FormData","file","append","onprogress","progress","lengthComputable","round","loaded","_progressSubject","onreadystatechange","readyState","status","response","complete","method","url","setRequestHeader","headers","send","TD_FILE","CovalentFileModule","TdJsonFormatterComponent","_levelsOpen","levelsOpen","isInteger","_open","elipsis","_key","KEY_MAX_LENGTH","parseChildren","_children","isObject","getType","isArray","hasChildren","getValue","replace","getObjectName","object","date","results","exec","getPreview","previewData","startChar","endChar","PREVIEW_LIMIT","map","obj","previewString","join","ellipsis","PREVIEW_STRING_MAX_LENGTH","CovalentJsonFormatterModule","TdLayoutComponent","mode","sidenav","MatSidenav","sidenavWidth","containerAutosize","_TdLayoutToggleMixinBase","LayoutToggleBase","LayoutToggle","hideWhenOpened","_hideWhenOpened","_toggleVisibility","_layout","_toggleSubs","_animationStarted","onClick","_noLayoutMessage","setStyle","console","warn","TdLayoutToggleDirective","tdLayoutToggle","layout","renderer","elementRef","TdLayoutCloseDirective","tdLayoutClose","TdLayoutOpenDirective","tdLayoutOpen","TdLayoutNavComponent","navigationRoute","handleNavigationClick","routerEnabled","navigateByUrl","TdLayoutNavListComponent","TdLayoutNavListToggleDirective","tdLayoutNavListToggle","TdLayoutNavListCloseDirective","tdLayoutNavListClose","TdLayoutNavListOpenDirective","tdLayoutNavListOpen","TdLayoutCardOverComponent","cardWidth","TdLayoutManageListComponent","TdLayoutManageListToggleDirective","tdLayoutManageListToggle","TdLayoutManageListCloseDirective","tdLayoutManageListClose","TdLayoutManageListOpenDirective","tdLayoutManageListOpen","TdLayoutFooterComponent","TdNavigationDrawerMenuDirective","TdNavigationDrawerToolbarDirective","TdNavigationDrawerComponent","_menuToggled","_drawerMenu","_toolbar","_backgroundImage","backgroundUrl","sanitizedUrl","_sanitize","sanitize","SecurityContext","RESOURCE_URL","STYLE","_closeSubscription","openedChange","toggleMenu","isMenuAvailable","TD_LAYOUTS","CovalentLayoutModule","ScrollDispatchModule","MatSidenavModule","MatToolbarModule","MatCardModule","MatDividerModule","Circular","Linear","Determinate","Indeterminate","Overlay","Replace","FullScreen","None","TdLoadingComponent","_mode","_defaultMode","_value","isOverlay","animation","_setCircleDiameter","getHeight","isFullScreen","getCircleDiameter","_circleDiameter","getCircleStrokeWidth","strokeWidth","abs","isCircular","LoadingType","isLinear","LoadingStyle","animationComplete","fromState","outAnimationCompleted","inAnimationCompleted","_animationIn","_animationOut","startInAnimation","startOutAnimation","LoadingMode","diameter","TdLoadingFactory","createFullScreenComponent","overlayRef","loadingRef","_initializeContext","loading","observable","distinctUntilChanged","registered","_createOverlay","componentRef","attach","ComponentPortal","_mapOptions","instance","changeDetectorRef","detectChanges","subs_1","destroy","detach","dispose","createOverlayComponent","_createComponent","TemplatePortal","insert","hostView","createReplaceComponent","context","nextElementSibling","scrollHeight","contentRef","subs_2","OverlayConfig","hasBackdrop","positionStrategy","_overlay","position","global","centerHorizontally","centerVertically","compRef","_componentFactoryResolver","resolveComponentFactory","_injector","subject","times","ComponentFactoryResolver","Injector","LOADING_FACTORY_PROVIDER_FACTORY","componentFactoryResolver","overlay","injector","LOADING_FACTORY_PROVIDER","TdLoadingConfig","TdLoadingDirectiveConfig","strategy","LoadingStrategy","TdLoadingService","createComponent","directiveConfig","_context","_loadingFactory","fullscreenConfig","removeComponent","register","registers","_timeouts","_clearTimeout","resolves","resolveAll","clearTimeout","LOADING_PROVIDER_FACTORY","loadingFactory","LOADING_PROVIDER","TdLoadingContext","$implicit","tdLoading","TD_LOADING_NEXT_ID","TdLoadingDirective","_name","until","_loadingService","_type","stategy","_strategy","_registerComponent","_loadingRef","_viewContainerRef","_templateRef","TD_LOADING","TD_LOADING_ENTRY_COMPONENTS","CovalentLoadingModule","MatProgressBarModule","MatProgressSpinnerModule","OverlayModule","TdMediaService","deregisterQuery","_queryMap","_querySources","_queryObservables","_ngZone","run","matchMedia","matches","registerQuery","BehaviorSubject","broadcast","this_1","_matchMediaTrigger","NgZone","_resizing","_globalSubscription","runOutsideAngular","window","MEDIA_PROVIDER_FACTORY","ngZone","MEDIA_PROVIDER","TdMediaToggleDirective","_query","attributes","_attributes","classes","_classes","styles","_styles","_mediaChange","_mediaService","_subscription","_matches","_changeAttributes","_changeClasses","_changeStyles","attr","setAttribute","removeAttribute","removeStyle","TD_MEDIA","CovalentMediaModule","TdMenuComponent","TD_MENU","CovalentMenuModule","MatMenuModule","_TdSearchInputMixinBase","TdSearchInputBase","TdSearchInputComponent","ngControl","skip","_searchTermChanged","handleBlur","handleSearch","onSearch","clearSearch","onClear","onSearchDebounce","display","showUnderline","clearIcon","_TdSearchBoxMixinBase","TdSearchBoxBase","TdSearchBoxComponent","_searchVisible","searchClicked","alwaysVisible","handleClear","_searchInput","toggleVisibility","handleSearchDebounce","margin","backIcon","searchIcon","CovalentSearchModule","TdBreadcrumbComponent","_displayCrumb","shouldDisplay","_width","_handleIconClick","host","class","separatorIcon","_displayIcon","TdBreadcrumbsComponent","_resizeSubscription","_widthSubject","_calculateVisibility","nativeElementWidth","setCrumbIcons","getComputedStyle","borderLeft","borderRight","marginLeft","marginRight","paddingLeft","paddingRight","_breadcrumbs","breadcrumbArray","breadcrumb","crumbsArray","crumbWidthSum","hiddenCrumbs","displayCrumb","hiddenBreadcrumbs","CovalentBreadcrumbsModule","Required","Complete","TdStepLabelDirective","TdStepActionsDirective","TdStepSummaryDirective","_TdStepMixinBase","TdStepBase","TdStepComponent","_contentPortal","_active","_setActive","_state","StepState","_content","isComplete","_onDeactivated","newActive","_onActivated","onActivated","onDeactivated","Vertical","Horizontal","TdStepsComponent","steps","_steps","_registerSteps","StepMode","_deregisterSteps","isHorizontal","isVertical","areStepsActive","step","_onStepSelection","prevStep","event_1","newStep","_deactivateAllBut","onStepChange","activeStep","_subcriptions","subscription","subs","_TdStepHeaderMixinBase","TdStepHeaderBase","TdStepHeaderComponent","isRequired","apply","TdStepBodyComponent","actionsRef","summaryRef","TdNavStepLinkComponent","_handleClick","click","stopImmediatePropagation","[class.td-step-link]","[attr.tabindex]","[attr.disabled]","[class.mat-disabled]","(click)","TdNavStepsHorizontalComponent","_viewportRuler","change","of","_configureSteps","updatePagination","_scrollDistanceChanged","_updateStepScrollPosition","_handleKeydown","_scrollHeader","_checkPaginationEnabled","_checkScrollingControls","_getLayoutDirection","translateX","scrollDistance","_stepList","_stepListContainer","_getMaxScrollDistance","_scrollDistance","scrollDir","offsetWidth","isEnabled","scrollWidth","_showPaginationControls","_disableScrollBefore","_disableScrollAfter","_separators","separator","removeChild","stepsArray","createElement","insertBefore","number","[class.td-step-header-pagination-controls-enabled]","[class.td-step-header-rtl]","ViewportRuler","Directionality","TdNavStepsVerticalComponent","separatorChild","appendChild","TD_STEPS","CovalentStepsModule","_TdTabOptionMixinBase","TdTabOptionBase","TdTabOptionComponent","_TdTabSelectMixinBase","TdTabSelectBase","TdTabSelectComponent","_selectedIndex","_tabOptions","_stretchTabs","stretchTabs","_setValue","_refreshValues","selectedIndexChange","selectedIndex","_values","valueChange","tabOptions","tabOption","CovalentTabSelectModule","MatTabsModule","base","initialValue","class_1","_subjectValueChanges","registerOnChange","fn","registerOnTouched","_i","_","_disabled","newValue","_disableRipple","onDisableRippleChange"],"mappings":"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A,EAAGC,cAAcC,QAAQJ,EAAQA,EAAMG,cAAgB,4BAnxBnEb,EAAAA,aAsxBDQ,IAtxBA,SAAAA,KAGUhT,KAAAiT,OAAmB,CACzB,eACA,gBACA,cACA,gBACA,kBACA,yBACA,cACA,iBACA,MACA,YACA,UACA,aACA,qBACA,oBACA,gBACA,SACA,QACA,YACA,YACA,WACA,QACA,UACA,eACA,OACA,UACA,aACA,kBACA,yBACA,gBACA,gBACA,eACA,aACA,aACA,iBACA,kBACA,oBACA,sBACA,uBACA,kBACA,cACA,eACA,aACA,aACA,YACA,WACA,YACA,SACA,gBACA,wBACA,eACA,cACA,kBACA,WACA,QACA,YACA,kBACA,sBACA,qBACA,sBACA,gBACA,cACA,WACA,UACA,OACA,WACA,kBACA,aACA,gBACA,eACA,eACA,oBACA,eACA,cACA,eACA,eACA,eACA,aACA,kBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,kBACA,kBACA,iBACA,oBACA,eACA,QACA,aACA,QACA,WACA,SACA,OACA,OACA,WACA,YACA,aACA,cACA,gBACA,aACA,SACA,aACA,eACA,cACA,cACA,SACA,OACA,iBACA,sBACA,oBACA,OACA,QACA,YACA,0BACA,eACA,eACA,gBACA,QACA,QACA,YACA,QACA,iBACA,QACA,eACA,aACA,iBACA,YACA,cACA,eACA,cACA,uBACA,aACA,WACA,UACA,UACA,WACA,sBACA,gBACA,WACA,eACA,cACA,gBACA,gBACA,0BACA,SACA,cACA,OACA,YACA,WACA,WACA,WACA,WACA,YACA,iBACA,gBACA,gBACA,cACA,YACA,aACA,SACA,SACA,cACA,cACA,kBACA,UACA,kBACA,iBACA,aACA,UACA,aACA,UACA,aACA,kBACA,kBACA,iBACA,iBACA,qBACA,iBACA,oBACA,qBACA,kBACA,YACA,MACA,iBACA,qBACA,OACA,SACA,OACA,WACA,SACA,YACA,MACA,OACA,QACA,QACA,YACA,QACA,gBACA,QACA,kBACA,aACA,aACA,aACA,cACA,cACA,cACA,WACA,UACA,WACA,iBACA,iBACA,kBACA,kBACA,gBACA,YACA,OACA,eACA,cACA,WACA,kBACA,WACA,gBACA,cACA,SACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,gBACA,iBACA,sBACA,eACA,gBACA,aACA,cACA,cACA,oBACA,iBACA,eACA,eACA,OACA,QACA,aACA,YACA,WACA,SACA,cACA,iBACA,OACA,eACA,gBACA,SACA,cACA,gBACA,iBACA,gBACA,sBACA,uBACA,oBACA,qBACA,cACA,eACA,oBACA,qBACA,oBACA,yBACA,yBACA,gBACA,sBACA,uBACA,uBACA,eACA,eACA,cACA,uBACA,8BACA,8BACA,oBACA,QACA,UACA,aACA,aACA,YACA,aACA,kBACA,YACA,UACA,QACA,UACA,UACA,MACA,YACA,gBACA,UACA,QACA,WACA,QACA,aACA,WACA,UACA,QACA,YACA,aACA,KACA,UACA,SACA,aACA,WACA,UACA,cACA,UACA,UACA,OACA,eACA,eACA,gBACA,UACA,OACA,QACA,kBACA,iBACA,OACA,QACA,QACA,qBACA,gBACA,QACA,0BACA,OACA,eACA,QACA,eACA,iBACA,oBACA,kBACA,oBACA,cACA,eACA,gBACA,oBACA,MACA,WACA,sBACA,sBACA,uBACA,oBACA,qBACA,oBACA,gBACA,kBACA,eACA,iBACA,QACA,gBACA,YACA,WACA,SACA,oBACA,aACA,iBACA,SACA,SACA,eACA,WACA,cACA,OACA,cACA,gBACA,gBACA,OACA,OACA,YACA,UACA,iBACA,gBACA,YACA,YACA,aACA,iBACA,0BACA,eACA,cACA,gBACA,oBACA,sBACA,iBACA,cACA,wBACA,gBACA,aACA,eACA,cACA,gBACA,iBACA,cACA,cACA,aACA,oBACA,kBACA,YACA,iBACA,aACA,gBACA,oBACA,eACA,cACA,qBACA,OACA,YACA,eACA,QACA,UACA,UACA,UACA,UACA,YACA,YACA,OACA,QACA,UACA,OACA,MACA,aACA,qBACA,SACA,OACA,aACA,UACA,MACA,WACA,UACA,MACA,eACA,YACA,YACA,oBACA,OACA,WACA,OACA,aACA,YACA,QACA,QACA,iBACA,aACA,iBACA,mBACA,mBACA,cACA,SACA,gBACA,kBACA,gBACA,aACA,eACA,iBACA,eACA,eACA,MACA,SACA,iBACA,WACA,gBACA,uBACA,qBACA,oBACA,uBACA,cACA,iBACA,kBACA,cACA,YACA,QACA,WACA,UACA,WACA,oBACA,sBACA,oBACA,sBACA,aACA,QACA,sBACA,uBACA,UACA,SACA,iBACA,kBACA,wBACA,oBACA,0BACA,gBACA,aACA,iBACA,iBACA,SACA,aACA,iBACA,aACA,iBACA,QACA,gBACA,0BACA,kBACA,gBACA,eACA,eACA,eACA,eACA,YACA,kBACA,iBACA,gBACA,iBACA,kBACA,QACA,cACA,eACA,gBACA,2BACA,0BACA,0BACA,iBACA,qBACA,WACA,QACA,aACA,qBACA,sBACA,gBACA,oBACA,eACA,WACA,OACA,UACA,oBACA,WACA,QACA,cACA,qBACA,iBACA,QACA,SACA,UACA,gBACA,kBACA,QACA,cACA,QACA,uBACA,yBACA,cACA,UACA,gBACA,SACA,OACA,UACA,SACA,gBACA,wBACA,iBACA,UACA,SACA,aACA,SACA,YACA,YACA,WACA,QACA,YACA,SACA,iBACA,kBACA,UACA,cACA,OACA,wBACA,cACA,eACA,SACA,YACA,OACA,UACA,WACA,SACA,wBACA,uBACA,uBACA,kBACA,UACA,aACA,SACA,WACA,aACA,OACA,WACA,wBACA,0BACA,qBACA,sBACA,gBACA,oBACA,yBACA,2BACA,2BACA,sBACA,wBACA,oBACA,iBACA,iBACA,kBACA,2BACA,iBACA,QACA,OACA,WACA,kBACA,gBACA,UACA,wBACA,8CACA,yBACA,uBACA,sBACA,oBACA,yBACA,kBACA,WACA,iBACA,YACA,gBACA,YACA,aACA,MACA,aACA,SACA,OACA,gBACA,YACA,UACA,gBACA,gBACA,gBACA,aACA,OACA,cACA,YACA,QACA,yBACA,wBACA,yBACA,wBACA,OACA,UACA,QACA,uBACA,aACA,kBACA,QACA,UACA,YACA,qBACA,iBACA,aACA,aACA,YACA,uBACA,gBACA,eACA,OACA,gBACA,eACA,gBACA,oBACA,MACA,iBACA,SACA,iBACA,aACA,YACA,eACA,UACA,cACA,UACA,UACA,WACA,aACA,WACA,iBACA,gBACA,YACA,QACA,WACA,UACA,YACA,MACA,QACA,OACA,WACA,OACA,gBACA,UACA,YACA,YACA,gBACA,gBACA,cACA,OACA,YACA,gBACA,KACA,OACA,cACA,cACA,MACA,gBACA,wBACA,wBACA,qBACA,YACA,gBACA,WACA,eACA,cACA,aACA,gBACA,cACA,aACA,eACA,WACA,gBACA,YACA,cACA,aACA,cACA,YACA,WACA,aACA,iBACA,aACA,YACA,cACA,cACA,aACA,YACA,UACA,WACA,YACA,UACA,QACA,UACA,YACA,kBACA,gBACA,WACA,KACA,MACA,WACA,UACA,OACA,YACA,iBACA,OACA,YACA,uBACA,UACA,gBCrwBEM,GAA6B,CAACzG,GAAqBM,IAGnDoG,GAA6B,GAa7BC,GAAwB,CAC5BlE,GACAY,GACAY,GACAC,GACAQ,GACAC,GACAO,6BAUDlO,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CAAC2P,EAAAA,YAAa1P,EAAAA,cACvBG,aAAc,CAACoP,GAAeE,GAAUD,IACxCpP,QAAS,CAACsP,EAAAA,YAAa1P,EAAAA,aAAcuP,GAAeE,GAAUD,IAC9DG,UAAW,CAACtB,GAAmBW,QAEEY,IANnC,SAAAA,MCtCkB,SAAZC,MCoBN,IAAaC,GAA8CC,EAAAA,QAAQ,WAAY,CAC7EC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfzE,UAAW,kCACT,CAAE0E,OAAQ,CAAEC,aAAc,KAC9BH,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBzE,UAAW,gCACT,CAAE0E,OAAQ,CAAEE,WAAY,OAC5BC,EAAAA,WAAW,UAAW,CACpBC,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,gDAET,CAAEP,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKC,KAAM,eCjBrCC,GAAgDd,EAAAA,QAAQ,aAAc,CACjFC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfzM,OAAQ,IACRsN,SAAU,YAEZd,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBzM,OAAQuN,EAAAA,WACRD,SAAUC,EAAAA,cAEZV,EAAAA,WAAW,SAAU,CACnBJ,EAAAA,MAAM,CACJa,SAAU,SACVtN,OAAQuN,EAAAA,aAEVT,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,4CAA6CR,EAAAA,MAAM,CACzDzM,OAAQ,IACRsN,SAAU,eAGb,CAAEZ,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKC,KAAM,aAChDP,EAAAA,WAAW,SAAU,CACnBJ,EAAAA,MAAM,CACJzM,OAAQ,IACRsN,SAAU,WAEZR,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,4CAA6CR,EAAAA,MAAM,CACzDa,SAAU,SACVtN,OAAQuN,EAAAA,iBAGX,CAAEb,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKC,KAAM,gBClCrCI,GAAiDjB,EAAAA,QAAQ,cAAe,CACjFC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfgB,QAAS,IACTC,WAAY,YAEdlB,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBgB,QAASF,EAAAA,WACTG,WAAYH,EAAAA,cAEdV,EAAAA,WAAW,SAAU,CACnBC,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,oDAET,CAAEP,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKQ,SAAU,aACpDd,EAAAA,WAAW,SAAU,CACnBC,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,qDAEX,CAAEP,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKS,UAAW,gBCzB1CC,GAA8CtB,EAAAA,QAAQ,WAAY,CAC7EC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfzE,UAAW,0BAEbwE,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBzE,UAAW,0BAEb6E,EAAAA,WAAW,UAAW,CACpBC,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,4CACRa,EAAAA,UAAU,CACRrB,EAAAA,MAAM,CAACsB,wBAAyB,2CAA4C/F,UAAW,uBAAwB7F,OAAQ,IACvHsK,EAAAA,MAAM,CAACsB,wBAAyB,2CAA4C/F,UAAW,uBAAwB7F,OAAQ,KACvHsK,EAAAA,MAAM,CAACsB,wBAAyB,2CAA4C/F,UAAW,2BAA4B7F,OAAQ,KAC3HsK,EAAAA,MAAM,CAACsB,wBAAyB,2CAA4C/F,UAAW,2BAA4B7F,OAAQ,MAC3HsK,EAAAA,MAAM,CAACsB,wBAAyB,2CAA4C/F,UAAW,uBAAwB7F,OAAQ,MACvHsK,EAAAA,MAAM,CAACsB,wBAAyB,2CAA4C/F,UAAW,2BAA4B7F,OAAQ,KAC3HsK,EAAAA,MAAM,CAACsB,wBAAyB,2CAA4C/F,UAAW,uBAAwB7F,OAAQ,KACvHsK,EAAAA,MAAM,CAACzE,UAAW,0BAA2B7F,OAAQ,KACrDsK,EAAAA,MAAM,CAACsB,wBAAyB,2CAA4C/F,UAAW,uBAAwB7F,OAAQ,UAG1H,CAAEuK,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKC,KAAM,gBCvBrCY,GAA6CzB,EAAAA,QAAQ,UAAW,CAC3EC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfgB,QAAS,KAEXjB,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBgB,QAAS,KAEXZ,EAAAA,WAAW,UAAW,CACpBC,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,4CACRa,EAAAA,UAAU,CACRrB,EAAAA,MAAM,CAACgB,QAAS,EAAGtL,OAAQ,IAC3BsK,EAAAA,MAAM,CAACgB,QAAS,EAAGtL,OAAQ,MAC3BsK,EAAAA,MAAM,CAACgB,QAAS,EAAGtL,OAAQ,KAC3BsK,EAAAA,MAAM,CAACgB,QAAS,EAAGtL,OAAQ,MAC3BsK,EAAAA,MAAM,CAACgB,QAAS,EAAGtL,OAAQ,UAG9B,CAAEuK,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKC,KAAM,gBCnBrCa,GAAiD1B,EAAAA,QAAQ,cAAe,CACnFC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfzE,UAAW,mBAEbwE,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBzE,UAAW,mBAEb6E,EAAAA,WAAW,UAAW,CACpBC,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,4CACRa,EAAAA,UAAU,CACRrB,EAAAA,MAAM,CAACzE,UAAW,gBAAiB7F,OAAQ,IAC3CsK,EAAAA,MAAM,CAACzE,UAAW,kCAAmC7F,OAAQ,OAC7DsK,EAAAA,MAAM,CAACzE,UAAW,gCAAiC7F,OAAQ,OAC3DsK,EAAAA,MAAM,CAACzE,UAAW,kCAAmC7F,OAAQ,OAC7DsK,EAAAA,MAAM,CAACzE,UAAW,gCAAiC7F,OAAQ,OAC3DsK,EAAAA,MAAM,CAACzE,UAAW,gBAAiB7F,OAAQ,WAG9C,CAAEuK,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKC,KAAM,gBCpBrCc,GAA6C3B,EAAAA,QAAQ,UAAW,CAC3EC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfzE,UAAW,UAEbwE,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBzE,UAAW,UAEb6E,EAAAA,WAAW,UAAW,CACpBC,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,4CACRa,EAAAA,UAAU,CACRrB,EAAAA,MAAM,CAACzE,UAAW,OAAQ7F,OAAQ,IAClCsK,EAAAA,MAAM,CAACzE,UAAW,OAAQ7F,OAAQ,OAClCsK,EAAAA,MAAM,CAACzE,UAAW,kCAAmC7F,OAAQ,OAC7DsK,EAAAA,MAAM,CAACzE,UAAW,gCAAiC7F,OAAQ,OAC3DsK,EAAAA,MAAM,CAACzE,UAAW,oCAAqC7F,OAAQ,OAC/DsK,EAAAA,MAAM,CAACzE,UAAW,oCAAqC7F,OAAQ,OAC/DsK,EAAAA,MAAM,CAACzE,UAAW,wCAAyC7F,OAAQ,OACnEsK,EAAAA,MAAM,CAACzE,UAAW,wCAAyC7F,OAAQ,OACnEsK,EAAAA,MAAM,CAACzE,UAAW,4CAA6C7F,OAAQ,aAG1E,CAAEuK,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKC,KAAM,gBCvBrCe,GAA6C5B,EAAAA,QAAQ,UAAW,CAC3EC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfzE,UAAW,sBAEbwE,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBzE,UAAW,sBAEb6E,EAAAA,WAAW,UAAW,CACpBC,EAAAA,MAAM,CACJpB,EAAAA,MAAM,KAAMqB,EAAAA,eAAgB,CAAEC,UAAU,IACxCC,EAAAA,QAAQ,4CACRa,EAAAA,UAAU,CACNrB,EAAAA,MAAM,CAAEzE,UAAW,mBAAoB7F,OAAQ,IAC/CsK,EAAAA,MAAM,CAAEzE,UAAW,4BAA6B7F,OAAQ,KACxDsK,EAAAA,MAAM,CAAEzE,UAAW,mBAAoB7F,OAAQ,UAIpD,CAAEuK,OAAQ,CAAEQ,SAAU,IAAKC,MAAO,IAAKC,KAAM,gBCnClD,IAAAgB,IAGSA,GAAAC,IAAP,SAAWC,GAUT,OATwB,SAACC,GACvB,GAAMC,EAAAA,WAAWC,SAASF,KAAQD,GAAyB,IAAbA,EAC5C,OAAOvF,cAEL2F,EAAYH,EAAErQ,MAClB,OAAOwQ,EAAIJ,EACT,CAAED,IAAK,CAACC,SAAUA,EAAUK,YAAaD,IACzC3F,YAKCqF,GAAAQ,IAAP,SAAWC,GAUT,OATwB,SAACN,GACvB,GAAMC,EAAAA,WAAWC,SAASF,KAAQM,GAAyB,IAAbA,EAC5C,OAAO9F,cAEL2F,EAAYH,EAAErQ,MAClB,OAAW2Q,EAAJH,EACL,CAAEE,IAAK,CAACC,SAAUA,EAAUF,YAAaD,IACzC3F,YAKCqF,GAAAU,eAAP,SAAsBP,GACpB,OAAQQ,OAAOvK,MAAM+J,EAAErQ,OACnB,CAAEuQ,UAAU,GACZ1F,WAGRqF,IAjCA,SAAAA,MCFA,IAAAY,yBAKChQ,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,qEANgEwD,EAAAA,oBAU5E8P,IADE,SAAAA,GAAmBC,GAAAzW,KAAAyW,cAAAA,UAyBnB5W,OAAAC,eACI4W,GAAA3W,UAAA,qBAAkB,KADtB,WAEE,MAAO,CAAE2F,OAAQ1F,KAAK2W,QAASjC,SAAU,sCAM3C7U,OAAAC,eACI4W,GAAA3W,UAAA,SAAM,KADV,WAEE,OAAOC,KAAK4W,QAAU,OAASrG,2CA+BjC1Q,OAAAC,eACI4W,GAAA3W,UAAA,QAAK,KAaT,WACE,OAAOC,KAAK6W,YAfd,SACUlK,GACR3M,KAAKwK,UAAUsM,YAAY9W,KAAKwI,YAAYlB,cAAe,OAAStH,KAAK6W,QACzE7W,KAAKwK,UAAUsM,YAAY9W,KAAKwI,YAAYlB,cAAe,OAAStH,KAAK6W,OAAS,QAClF7W,KAAKwK,UAAUsM,YAAY9W,KAAKwI,YAAYlB,cAAe,MAAQtH,KAAK6W,OAAS,QACnE,YAAVlK,GAAiC,WAAVA,GAAgC,SAAVA,EAC/C3M,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,OAASqF,IAEjE3M,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,OAASqF,EAAQ,QACzE3M,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,MAAQqF,EAAQ,SAE1E3M,KAAK6W,OAASlK,EACd3M,KAAKK,mBAAmBC,gDAY1BT,OAAAC,eACI4W,GAAA3W,UAAA,SAAM,KAWV,WACE,OAAOC,KAAK2W,aAbd,SACWK,GACLhX,KAAKU,aACHsW,EACFhX,KAAKiX,OAELjX,KAAKkX,QAGPlX,KAAK2W,QAAUK,mCAkBnBN,GAAA3W,UAAAoX,sBADA,WAEOnX,KAAK2W,UACR3W,KAAK4W,SAAU,EACf5W,KAAKoX,WAEPpX,KAAKqX,YAAa,EAClBrX,KAAKK,mBAAmBC,gBAM1BoW,GAAA3W,UAAA4H,gBAAA,WAAA,IAAAC,EAAA5H,KACE+J,QAAQC,QAAQuG,WAAWtG,KAAK,WAC1BrC,EAAK+O,SACP/O,EAAK0P,UAEP1P,EAAKlH,cAAe,KAQxBgW,GAAA3W,UAAAkX,KAAA,WACOjX,KAAK2W,SAAY3W,KAAKqX,aACzBrX,KAAK2W,SAAU,EACf3W,KAAKsX,UACLtX,KAAKuX,yBAQTb,GAAA3W,UAAAmX,MAAA,WACMlX,KAAK2W,UAAY3W,KAAKqX,aACxBrX,KAAK2W,SAAU,EACf3W,KAAKuX,yBAOTb,GAAA3W,UAAAyX,OAAA,WACMxX,KAAK2W,QACP3W,KAAKkX,QAELlX,KAAKiX,QAODP,GAAA3W,UAAAwX,qBAAR,WACEvX,KAAKqX,YAAa,EAClBrX,KAAK4W,SAAU,EACf5W,KAAKK,mBAAmBC,gBAMlBoW,GAAA3W,UAAAuX,QAAR,WACEtX,KAAKyX,cAAchB,cAAciB,mBAAmB1X,KAAK2X,WACzD3X,KAAKK,mBAAmBC,gBAMlBoW,GAAA3W,UAAAqX,QAAR,WACEpX,KAAKyX,cAAchB,cAAcmB,QACjC5X,KAAKK,mBAAmBC,qCA/L3BuC,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,aACVC,SAAA,saAEA0U,WAAY,CACVhD,EAAAA,4uBAjBkCzK,EAAAA,iBACF5G,EAAAA,yBADa0G,EAAAA,sDA4B9CuC,EAAAA,UAAS3J,KAAA,CAAC0T,uBACV/J,EAAAA,UAAS3J,KAAA,CAAC2D,EAAAA,yCAKViG,EAAAA,YAAW5J,KAAA,CAAC,+BAQZ4J,EAAAA,YAAW5J,KAAA,CAAC,gCAUZW,EAAAA,MAAKX,KAAA,CAAC,2BAONW,EAAAA,MAAKX,KAAA,CAAC,0BAQNW,EAAAA,MAAKX,KAAA,CAAC,uBAQNW,EAAAA,MAAKX,KAAA,CAAC,yBAwBNW,EAAAA,MAAKX,KAAA,CAAC,yCA0BNyH,EAAAA,aAAYzH,KAAA,CAAC,uBAgFhB4T,IA1FE,SAAAA,GAAoBlM,EACAnK,EACAmI,GAFAxI,KAAAwK,UAAAA,EACAxK,KAAAK,mBAAAA,EACAL,KAAAwI,YAAAA,EA9FZxI,KAAA2W,SAAmB,EACnB3W,KAAA4W,SAAmB,EACnB5W,KAAAqX,YAAsB,EACtBrX,KAAAU,cAAwB,EAyCjBV,KAAA8X,KAAe,eAmD5B9X,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,kBC9GtDyQ,GAA0B,CAC9BrB,GACAF,IAGFwB,yBAAClU,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACAC,EAAAA,eAEFE,aAAc,CACZ4T,IAEF3T,QAAS,CACP2T,QAKJC,IAdA,SAAAA,iBCUqC1R,EAAAA,MAAAC,EAAAA,8CAHpCC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,qEApB+BuD,EAAAA,mBAAaC,EAAAA,oBA0BxDuR,IAHE,SAAAA,GAAYrR,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,gBAOWsG,EAAAA,MAAAC,EAAAA,8CAHlDC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,oFA7B+BuD,EAAAA,mBAAaC,EAAAA,oBAmCxDwR,IAHE,SAAAA,GAAYtR,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,KAKtC,YAAmBK,GAAAL,KAAAK,mBAAAA,MAMrByG,GAFaqR,GAAoBC,EAAAA,0BAA0BC,EAAAA,cAAcC,IAAc,IAEvFC,IAYsCjS,EAAAA,GAZtCQ,GAYsCqR,IAmCpCtY,OAAAC,eAAIyY,GAAAxY,UAAA,UAAO,KAAX,WACE,OAAOC,KAAKwY,0CAYd3Y,OAAAC,eACIyY,GAAAxY,UAAA,QAAK,KAKT,WACE,OAAOC,KAAKyY,YAPd,SACUC,GACR1Y,KAAKyY,OAASC,EACd1Y,KAAK2Y,wBACL3Y,KAAKK,mBAAmBC,gDAW1BT,OAAAC,eACIyY,GAAAxY,UAAA,UAAO,KAGX,WACE,OAAOC,KAAK4Y,cALd,SACYC,GACV7Y,KAAK4Y,SAAWE,EAAAA,sBAAsBD,oCAWxChZ,OAAAC,eACIyY,GAAAxY,UAAA,gBAAa,KAGjB,WACE,OAAOC,KAAK+Y,oBALd,SACkBC,GAChBhZ,KAAK+Y,eAAiBC,mCAUxBnZ,OAAAC,eACIyY,GAAAxY,UAAA,eAAY,KAGhB,WACE,OAAOC,KAAKiZ,mBALd,SACiBC,GACflZ,KAAKiZ,cAAgBH,EAAAA,sBAAsBI,oCAW7CrZ,OAAAC,eACIyY,GAAAxY,UAAA,WAAQ,KAGZ,WACE,OAAOC,KAAKmZ,eALd,SACalD,GACXjW,KAAKmZ,UAAYL,EAAAA,sBAAsB7C,oCAWzCpW,OAAAC,eACIyY,GAAAxY,UAAA,eAAY,KAIhB,WACE,OAAOC,KAAKoZ,mBANd,SACiBC,GACfrZ,KAAKoZ,cAAgBC,EACrBrZ,KAAKsZ,gDAUPzZ,OAAAC,eAAIyY,GAAAxY,UAAA,aAAU,KAAd,WACE,OAAOC,KAAKqZ,eAAiBrZ,KAAKuZ,0CAQpC1Z,OAAAC,eACIyY,GAAAxY,UAAA,cAAW,KAGf,WACE,OAAOC,KAAKwZ,kBALd,SACgBC,GACdzZ,KAAKwZ,aAAeC,mCAUtB5Z,OAAAC,eAAIyY,GAAAxY,UAAA,gBAAa,KAAjB,WACE,OAAOC,KAAKyZ,cAAgBzZ,KAAKuZ,0CAMnC1Z,OAAAC,eAAIyY,GAAAxY,UAAA,qBAAkB,KAAtB,WACE,OAAKC,KAAK0Z,WAGF1Z,KAAc,UAAOA,KAAK2Z,YAAW,KAAQ3Z,KAAK2Z,YAFjD,oCAsBX9Z,OAAAC,eACIyY,GAAAxY,UAAA,QAAK,KAOT,WACE,OAAOC,KAAK6W,YATd,SACUlK,GACJA,IACF3M,KAAKwK,UAAUsM,YAAY9W,KAAKwI,YAAYlB,cAAe,OAAStH,KAAK6W,QACzE7W,KAAK6W,OAASlK,EACd3M,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,OAAStH,KAAK6W,0CA6C1EhX,OAAAC,eACIyY,GAAAxY,UAAA,WAAQ,KADZ,WAEE,OAAOC,KAAKuZ,UAAY,EAAIvZ,KAAK4Z,2CAwBnCrB,GAAAxY,UAAA8Z,cADA,SACcrX,GAEPxC,KAAK8Z,cACR9Z,KAAK+Z,QAEPvX,EAAMwX,kBAORzB,GAAAxY,UAAAka,kBADA,SACkBzX,GADlB,IAAAoF,EAAA5H,KAGEA,KAAK8Z,cAAe,EACpBI,EAAAA,QAAQC,YAAYlQ,KAAK,WACvBrC,EAAKkS,cAAe,KASxBvB,GAAAxY,UAAAqa,cADA,SACc5X,OACN6X,EAAwC7X,EAAY,QACtD6X,IAAgBra,KAAKwI,YAAYlB,gBACoB,EAArD+S,EAAYC,UAAUhH,QAAQ,uBAChCtT,KAAK+Z,QACLvX,EAAMwX,iBACNxX,EAAM+X,oBAQVhC,GAAAxY,UAAAya,gBADA,SACgBhY,GADhB,IAAAoF,EAAA5H,KAEE,OAAQwC,EAAMiY,SACZ,KAAKC,EAAAA,IAEHR,EAAAA,QAAQC,YAAYlQ,KAAK,WACvBrC,EAAK+S,uBAEP,MACF,KAAKC,EAAAA,OACC5a,KAAK6a,YAAYC,SACnB9a,KAAK+a,aAAazT,cAAc0T,OAChChb,KAAK2a,qBACL3a,KAAKib,sBAELjb,KAAK+Z,UAQbxB,GAAAxY,UAAAuB,SAAA,WAAA,IAAAsG,EAAA5H,KACEA,KAAKkb,uBAAyBlb,KAAKmb,aAAaC,aAAanT,KAC3DC,EAAAA,aAAalI,KAAKqb,WAClBtT,UAAU,SAACrC,GACXkC,EAAK0T,cAAc1Y,KAAK8C,GAAgB,MAE1C1F,KAAKK,mBAAmBC,gBAG1BiY,GAAAxY,UAAA4H,gBAAA,WACE3H,KAAKub,qBACLvb,KAAKK,mBAAmBC,gBAG1BiY,GAAAxY,UAAAyb,UAAA,WAEMxb,KAAK0F,OAAS1F,KAAK0F,MAAMD,SAAWzF,KAAKyb,UAC3Czb,KAAKyb,QAAUzb,KAAK0F,MAAMD,OAC1BzF,KAAK2C,SAAS3C,KAAK0F,SAIvB6S,GAAAxY,UAAA2I,YAAA,WACI1I,KAAK0b,kBAAkB7S,cACvB7I,KAAKkb,uBAAuBrS,eAGhC0P,GAAAxY,UAAA4b,kBAAA,WACE3b,KAAK4b,gBAAiB,GAIxBrD,GAAAxY,UAAA8b,iBAAA,SAAiB3F,GACflW,KAAKsZ,gBASPf,GAAAxY,UAAA+b,eAAA,eACMpW,EACJ,GAAI1F,KAAKkZ,aAAc,KACjB6C,EAA+B/b,KAAKgc,SAAS3U,UAAUuL,OAAO,SAACqJ,GACjE,OAAOA,EAAOC,SAMhB,GAJ6B,EAAzBH,EAAgBtW,SAClBC,EAAQqW,EAAgB,GAAGrW,MAC3BqW,EAAgB,GAAGI,sBAEhBzW,EACH,OAAO,OAKT,GAAI1F,KAAKoc,qBAAqBC,aAC5B3W,EAAQ1F,KAAKoc,qBAAqBC,aAAa3W,MAC/C1F,KAAKoc,qBAAqBC,aAAaF,yBAGvC,GAAqB,MADrBzW,EAAQ1F,KAAK6a,YAAYnV,OACf8G,OACR,OAAO,EAIb,OAAOxM,KAAKsc,QAAQ5W,IAOtB6S,GAAAxY,UAAAuc,QAAA,SAAQ5W,GAAR,IAAAkC,EAAA5H,KAeE,OATAA,KAAKib,qBACLf,EAAAA,MAAMla,KAAKqb,UAAUlB,YAAYlQ,KAAK,WACpCrC,EAAK2U,kBACL3U,EAAK+Q,wBACL/Q,EAAK4U,sBAGPxc,KAAKmb,aAAasB,SAAS,OAE+C,EAAtEzc,KAAK0F,MAAMgX,UAAU,SAAC9R,GAAc,OAAAhD,EAAK+U,YAAY/R,EAAMlF,OAI/D1F,KAAK0F,MAAMO,KAAKP,GAChB1F,KAAK4c,MAAMha,KAAK8C,GAChB1F,KAAK2C,SAAS3C,KAAK0F,OACnB1F,KAAKK,mBAAmBC,eACjB,KAOTiY,GAAAxY,UAAA8c,WAAA,SAAWlS,OACLmS,EAAuB9c,KAAK0F,MAAMqX,OAAOpS,EAAO,GACpD,OAA6B,IAAzBmS,EAAcrX,SAQdkF,IAAW3K,KAAKgd,YAAc,GAAgB,IAAVrS,EACtC3K,KAAK6a,YAAYd,QACRpP,EAAS3K,KAAKgd,YAAc,EACrChd,KAAKid,WAAWtS,EAAQ,GACP,EAARA,GACT3K,KAAKid,WAAWtS,EAAQ,GAG1B3K,KAAKkd,SAASta,KAAKka,EAAc,IACjC9c,KAAK2C,SAAS3C,KAAK0F,OACnB1F,KAAKmb,aAAasB,SAAS,IAC3Bzc,KAAKK,mBAAmBC,gBACjB,IAMTiY,GAAAxY,UAAAod,gBAAA,SAAgB3a,EAAmBkD,GACjC1F,KAAKod,WAAWxa,KAAK8C,IAMvB6S,GAAAxY,UAAAsd,iBAAA,SAAiB7a,EAAmBkD,GAClC1F,KAAKuc,kBACLvc,KAAKsd,YAAY1a,KAAK8C,IAGxB6S,GAAAxY,UAAAwd,aAAA,WAGE,OAFAvd,KAAKuc,kBACLvc,KAAK2Y,yBACE,GAMTJ,GAAAxY,UAAAwc,gBAAA,WACOvc,KAAKuZ,WACRvZ,KAAKwY,UAAW,EAChBxY,KAAK4Z,WAAa,EAClB5Z,KAAKK,mBAAmBC,iBAO5BiY,GAAAxY,UAAA4a,mBAAA,WACE3a,KAAKwY,UAAW,EAChBxY,KAAK4Z,UAAY,EACjB5Z,KAAKK,mBAAmBC,gBAO1BiY,GAAAxY,UAAAga,MAAA,WACM/Z,KAAK0Z,WACP1Z,KAAK6a,YAAYd,QACP/Z,KAAKuZ,UACfvZ,KAAKwd,mBAOTjF,GAAAxY,UAAA0d,cAAA,SAAcjb,GACZ,OAAQA,EAAMiY,SACZ,KAAKiD,EAAAA,SAKC1d,KAAKkZ,cAEM,EADQlZ,KAAKgc,SAASvW,QACjBzF,KAAKgc,SAAS3U,UAAU,GAAG6U,QAAUlc,KAAK2d,0BAC1D3d,KAAKgc,SAAS3U,UAAU,GAAG8U,oBAC3Bnc,KAAK2d,yBAA0B,EAE/Bnb,EAAMwX,kBAGV,MACF,KAAK4D,EAAAA,WACL,KAAKC,EAAAA,OACL,KAAKC,EAAAA,UACH9d,KAAKib,qBAEAjb,KAAK6a,YAAYnV,QACpB1F,KAAK+d,iBAELvb,EAAMwX,kBAER,MACF,KAAKgE,EAAAA,YACHhe,KAAKib,qBAEAjb,KAAK6a,YAAYnV,QACpB1F,KAAKwd,kBAELhb,EAAMwX,oBAWdzB,GAAAxY,UAAAke,aAAA,SAAazb,EAAsBmI,GACjC,OAAQnI,EAAMiY,SACZ,KAAKoD,EAAAA,OACL,KAAKC,EAAAA,UAEC9d,KAAKke,eACRle,KAAK6c,WAAWlS,GAEjB,MACF,KAAK+S,EAAAA,SACL,KAAKE,EAAAA,WAKW,IAAVjT,EAEE3K,KAAK0Z,YAAclX,EAAMiY,UAAYmD,EAAAA,WACvC5d,KAAK6a,YAAYd,QAEjB/Z,KAAK+d,iBAEU,EAARpT,GACT3K,KAAKid,WAAWtS,EAAQ,GAG1BnI,EAAMwX,iBACN,MACF,KAAKmE,EAAAA,WACL,KAAKH,EAAAA,YAKCrT,IAAW3K,KAAKgd,YAAc,EAE5Bhd,KAAK0Z,YAAclX,EAAMiY,UAAYuD,EAAAA,YACvChe,KAAK6a,YAAYd,QAEjB/Z,KAAKwd,kBAEE7S,EAAS3K,KAAKgd,YAAc,GACrChd,KAAKid,WAAWtS,EAAQ,GAG1BnI,EAAMwX,mBAUZzB,GAAAxY,UAAAqe,oBAAA,WACE,MAAO,IAMT7F,GAAAxY,UAAAyc,kBAAA,WACOxc,KAAKoc,qBAAqBiC,YAC7Bre,KAAKoc,qBAAqBkC,YAC1Bte,KAAKK,mBAAmBC,iBAO5BiY,GAAAxY,UAAAkb,mBAAA,WACMjb,KAAKoc,qBAAqBiC,YAC5Bre,KAAKoc,qBAAqBmC,aAC1Bve,KAAKK,mBAAmBC,iBAO5BT,OAAAC,eAAIyY,GAAAxY,UAAA,cAAW,KAAf,WAEE,OADuBC,KAAKwe,eAAenX,UAC9B5B,wCAMP8S,GAAAxY,UAAAkd,WAAR,SAAmBtS,IAEJ,EAATA,GAAc3K,KAAKgd,YAAcrS,GACnC3K,KAAKwe,eAAenX,UAAUsD,GAAOoP,SAKjCxB,GAAAxY,UAAAyd,gBAAR,WACExd,KAAKid,WAAW,IAIV1E,GAAAxY,UAAAge,eAAR,WACE/d,KAAKid,WAAWjd,KAAKgd,YAAc,IAO7BzE,GAAAxY,UAAAuZ,aAAR,WACMtZ,KAAK0Z,WACP1Z,KAAKmb,aAAasD,SAElBze,KAAKmb,aAAauD,UAEpB1e,KAAKK,mBAAmBC,gBAOlBiY,GAAAxY,UAAA4Y,sBAAR,WAAA,IAAA/Q,EAAA5H,KACMA,KAAKkZ,cAEPgB,EAAAA,QAAQC,YAAYlQ,KAAK,WACnBrC,EAAKkT,SAAWlT,EAAKoU,UAAmC,EAAvBpU,EAAKoU,SAASvW,SAEjDmC,EAAKoU,SAAS3U,UAAUsB,QAAQ,SAACsT,GAC/BA,EAAOE,sBAGTvU,EAAKoU,SAAS3U,UAAU,GAAGsX,kBAC3B/W,EAAK+V,yBAA0B,EAC/B/V,EAAKvH,mBAAmBC,mBAWxBiY,GAAAxY,UAAAwb,mBAAR,WAAA,IAAA3T,EAAA5H,KA2BE,OA1BIA,KAAKuO,YACPvO,KAAK0b,kBAAoBkD,EAAAA,MACvBC,EAAAA,UAAU7e,KAAKuO,UAAW,SAC1BsQ,EAAAA,UAAU7e,KAAKuO,UAAW,aAC1BtG,KACAC,EAAAA,aAAalI,KAAK8e,mBAClBlM,EAAAA,OACE,SAACpQ,OACO6X,EAAwC7X,EAAY,OAI1D,OAHAuc,WAAW,WACTnX,EAAKgU,gBAAiB,IAEjBhU,EAAKkT,SACLT,IAAgBzS,EAAKY,YAAYlB,gBACjCM,EAAKY,YAAYlB,cAAc0X,SAAS3E,KAAiBzS,EAAKgU,kBAGzE7T,UAAU,WACNH,EAAKkT,UACPlT,EAAKwU,qBAAqBmC,aAC1B3W,EAAK+S,qBACL/S,EAAKqX,YACLrX,EAAKvH,mBAAmBC,mBAIvBiQ,gCA7tBV1N,EAAAA,UAASC,KAAA,CAAC,CACT6Q,UAAW,CAAC,CACVuL,QAASC,EAAAA,kBACTC,YAAaC,EAAAA,WAAW,WAAM,OAAA9G,KAC9B+G,OAAO,IAETpc,SAAU,WACVqc,OAAQ,CAAC,WAAY,SAErBpc,SAAA,8rFACAJ,gBAAiBC,EAAAA,wBAAwBC,6zLAtDzCiH,EAAAA,kBAC0DE,EAAAA,6CAmS7C7G,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACwM,EAAAA,mBAnShC9L,EAAAA,4DA6ECiJ,EAAAA,UAAS3J,KAAA,CAAC,8BACV2J,EAAAA,UAAS3J,KAAA,CAAC0c,EAAAA,wCACV/S,EAAAA,UAAS3J,KAAA,CAAC2c,EAAAA,gDACVpV,EAAAA,aAAYvH,KAAA,CAAC4c,EAAAA,gCAEbpV,EAAAA,aAAYxH,KAAA,CAACmV,yCACb3N,EAAAA,aAAYxH,KAAA,CAACoV,sBAEb7N,EAAAA,aAAYvH,KAAA,CAAC6c,EAAAA,0BAkBblc,EAAAA,MAAKX,KAAA,CAAC,0BAeNW,EAAAA,MAAKX,KAAA,CAAC,kCAaNW,EAAAA,MAAKX,KAAA,CAAC,uCAYNW,EAAAA,MAAKX,KAAA,CAAC,kCAaNW,EAAAA,MAAKX,KAAA,CAAC,kCAaNW,EAAAA,MAAKX,KAAA,CAAC,qCAsBNW,EAAAA,MAAKX,KAAA,CAAC,oCA8BNW,EAAAA,MAAKX,KAAA,CAAC,iCAMNW,EAAAA,MAAKX,KAAA,CAAC,2BAONW,EAAAA,MAAKX,KAAA,CAAC,wBAiBNY,EAAAA,OAAMZ,KAAA,CAAC,yBAOPY,EAAAA,OAAMZ,KAAA,CAAC,iCAOPY,EAAAA,OAAMZ,KAAA,CAAC,oCAOPY,EAAAA,OAAMZ,KAAA,CAAC,iCAOPY,EAAAA,OAAMZ,KAAA,CAAC,8BAKP4J,EAAAA,YAAW5J,KAAA,CAAC,sCAkBZW,EAAAA,MAAKX,KAAA,CAAC,sCAONyH,EAAAA,aAAYzH,KAAA,CAAC,QAAS,CAAC,sCAYvByH,EAAAA,aAAYzH,KAAA,CAAC,YAAa,CAAC,kCAa3ByH,EAAAA,aAAYzH,KAAA,CAAC,QAAS,CAAC,oCAcvByH,EAAAA,aAAYzH,KAAA,CAAC,UAAW,CAAC,cA8a5ByV,IAzeE,SAAAA,GAAoB/P,EACAgC,EAC8B+D,EACtClO,GAHZ,IAAAuH,EAIEd,GAAAvB,KAAAvF,KAAMK,IAAmBL,YAJP4H,EAAAY,YAAAA,EACAZ,EAAA4C,UAAAA,EAC8B5C,EAAA2G,UAAAA,EA1O1C3G,EAAA8T,kBAAkCkE,EAAAA,aAAaC,MAC/CjY,EAAAsT,uBAAuC0E,EAAAA,aAAaC,MACpDjY,EAAAkS,cAAwB,EAGxBlS,EAAA6T,QAAkB,EAClB7T,EAAAgR,UAAoB,EACpBhR,EAAAqR,eAAyB,EACzBrR,EAAAiP,OAAwC,UACxCjP,EAAAmR,eAAqC,QACrCnR,EAAAwR,eAAyB,EACzBxR,EAAA4R,cAAwB,EACxB5R,EAAA4Q,UAAoB,EACpB5Q,EAAAuR,WAAqB,EACrBvR,EAAAgS,UAAoB,EACpBhS,EAAAkX,kBAA4B,IAEpClX,EAAAgU,gBAA0B,EAC1BhU,EAAA+V,yBAAmC,EAsBnC/V,EAAAuT,aAA4B,IAAI2E,EAAAA,YAkIblY,EAAAyT,SAAmB,IAwBvBzT,EAAAgV,MAA2B,IAAIhZ,EAAAA,aAO5BgE,EAAAsV,SAA8B,IAAItZ,EAAAA,aAO7BgE,EAAA0T,cAAsC,IAAI1X,EAAAA,aAO5CgE,EAAA0V,YAAiC,IAAI1Z,EAAAA,aAOtCgE,EAAAwV,WAAgC,IAAIxZ,EAAAA,aAuBlCgE,EAAA+U,YAA6C,SAACoD,EAASC,GAC3E,OAAOD,IAAOC,GATdpY,EAAK4C,UAAUuM,SAASnP,EAAKY,YAAYlB,cAAe,OAASM,EAAKiP,UCxS1E,IAAAoJ,yBAYCnc,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPmc,EAAAA,oBACAlc,EAAAA,aACAmc,EAAAA,eACAlc,EAAAA,cACAmc,EAAAA,eACAC,EAAAA,uBAEFlc,aAAc,CACZoU,GACAN,GACAC,IAEF9T,QAAS,CACPmU,GACAN,GACAC,QAKJ+H,IAtBA,SAAAA,MCZA,IAAAK,yBAKCzd,EAAAA,UAASC,KAAA,CAAC,CAETI,SAAU,+BAEVC,SAAA,6NAT4C+G,EAAAA,kBAAXE,EAAAA,aAiBnCkW,IAJE,SAAAA,GAAsB9X,EAAmCgC,GAAnCxK,KAAAwI,YAAAA,EAAmCxI,KAAAwK,UAAAA,EACvDxK,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,oCAe1DzH,OAAAC,eACIygB,GAAAxgB,UAAA,WAAQ,KAQZ,WACE,OAAOC,KAAKwgB,eAVd,SACaC,GACPA,EACFzgB,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,eAExDtH,KAAKwK,UAAUsM,YAAY9W,KAAKwI,YAAYlB,cAAe,eAE7DtH,KAAKwgB,UAAYC,mCAMnB5gB,OAAAC,eAAIygB,GAAAxgB,UAAA,SAAM,KAAV,eACMyH,EAAiB,GAIrB,OAHIxH,KAAKwI,YAAYlB,gBACnBE,EAAuBxH,KAAKwI,YAAyB,cAAEjB,wBAAwBC,QAE1EA,mCAWT+Y,GAAAxgB,UAAAqa,cADA,WAEEpa,KAAK+Z,SAGPwG,GAAAxgB,UAAAga,MAAA,WACE/Z,KAAKwI,YAAYlB,cAAcyS,8BA5ClClX,EAAAA,UAASC,KAAA,CAAC,CAETI,SAAU,wBAEVC,SAAA,6NAvB4C+G,EAAAA,kBAAXE,EAAAA,gDA6BhC3G,EAAAA,MAAKX,KAAA,CAAC,mCA4BNyH,EAAAA,aAAYzH,KAAA,CAAC,YAShByd,IAhBE,SAAAA,GAAoB/X,EAAiCgC,GAAjCxK,KAAAwI,YAAAA,EAAiCxI,KAAAwK,UAAAA,EAvB7CxK,KAAAwgB,WAAqB,EAwB3BxgB,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,gCC/CVhB,EAAAA,MAAAC,EAAAA,8CADjDC,EAAAA,UAAS1D,KAAA,CAAC,CAACI,SAAU,iFAHKuD,EAAAA,mBAAaC,EAAAA,kEAMrCjD,EAAAA,SAIHid,IAHE,SAAAA,GAAY9Z,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,KCsEtC,SADF2gB,GACqBtgB,GAAAL,KAAAK,mBAAAA,MAMrByG,OA/DE8Z,UAAY,MACZC,WAAa,QA4DFC,GAAwB1I,EAAAA,0BAA0BuI,GAAiB,IAEhFI,IAY0Cza,EAAAA,GAZ1CQ,GAY0Cga,IAexCjhB,OAAAC,eAAIihB,GAAAhhB,UAAA,iBAAc,KAAlB,WACE,OAAOC,KAAKghB,iDAGdnhB,OAAAC,eAAIihB,GAAAhhB,UAAA,YAAS,KAAb,WAGE,OAAIC,KAAKihB,WACAjhB,KAAKkhB,WAAa,GAEpBlhB,KAAKkhB,4CAiCdrhB,OAAAC,eAAIihB,GAAAhhB,UAAA,kBAAe,KAAnB,WACE,OAAOC,KAAK0H,kDAMd7H,OAAAC,eAAIihB,GAAAhhB,UAAA,cAAW,KAAf,WACE,OAAOC,KAAKyH,8CAMd5H,OAAAC,eAAIihB,GAAAhhB,UAAA,UAAO,KAAX,WACE,OAAOC,KAAKiB,0CAMdpB,OAAAC,eAAIihB,GAAAhhB,UAAA,QAAK,KAAT,WACE,OAAOC,KAAKgB,wCAuCdnB,OAAAC,eAAIihB,GAAAhhB,UAAA,oBAAiB,KAArB,WACE,OAAuC,EAAhCC,KAAKmhB,yDAMdthB,OAAAC,eAAIihB,GAAAhhB,UAAA,cAAW,KAAf,WACE,OAAOC,KAAKohB,8CAOdvhB,OAAAC,eAAIihB,GAAAhhB,UAAA,gBAAa,KAAjB,WACE,OAAOC,KAAKqhB,gDAOdxhB,OAAAC,eACIihB,GAAAhhB,UAAA,OAAI,KASR,WACE,OAAOC,KAAKgH,WAXd,SACSC,GADT,IAAAW,EAAA5H,KAEEA,KAAKgH,MAAQC,EACbjH,KAAKshB,gBAAkB,GACvBvX,QAAQC,UAAUC,KAAK,WACrBrC,EAAKwB,UAELxB,EAAK2Z,eAAeja,cAAc2B,UAAY,qCAOlDpJ,OAAAC,eAAIihB,GAAAhhB,UAAA,cAAW,KAAf,WACE,OAAOC,KAAKmH,8CAQdtH,OAAAC,eACIihB,GAAAhhB,UAAA,UAAO,KAGX,WAAA,IAAA6H,EAAA5H,KACE,GAAIA,KAAKwhB,SACP,OAAOxhB,KAAKwhB,SAGd,GAAIxhB,KAAKyhB,QAAS,CAChBzhB,KAAKwhB,SAAW,OAEZlY,EAAWtJ,KAAKgH,MAAM,GAM1B,OALAnH,OAAOuO,KAAK9E,GAAKX,QAAQ,SAAC+Y,GACnB9Z,EAAK4Z,SAASG,KAAK,SAAC5L,GAAW,OAAAA,EAAE7F,OAASwR,KAC7C9Z,EAAK4Z,SAASvb,KAAK,CAAEiK,KAAMwR,EAAGE,MAAOF,MAGlC1hB,KAAKwhB,SAEZ,MAAO,QApBX,SACYK,GACV7hB,KAAKwhB,SAAWK,mCA2BlBhiB,OAAAC,eACIihB,GAAAhhB,UAAA,mBAAgB,KAGpB,WACE,OAAOC,KAAK8hB,uBALd,SACqBC,GACnB/hB,KAAK8hB,kBAAoBhJ,EAAAA,sBAAsBiJ,oCAWjDliB,OAAAC,eACIihB,GAAAhhB,UAAA,aAAU,KAGd,WACE,OAAOC,KAAKgiB,iBALd,SACef,GACbjhB,KAAKgiB,YAAclJ,EAAAA,sBAAsBmI,oCAW3CphB,OAAAC,eACIihB,GAAAhhB,UAAA,YAAS,KAGb,WACE,OAAOC,KAAKiiB,gBALd,SACcC,GACZliB,KAAKiiB,WAAanJ,EAAAA,sBAAsBoJ,oCAW1CriB,OAAAC,eACIihB,GAAAhhB,UAAA,WAAQ,KAGZ,WACE,OAAOC,KAAKmiB,eALd,SACaC,GACXpiB,KAAKmiB,UAAYrJ,EAAAA,sBAAsBsJ,oCAWzCviB,OAAAC,eACIihB,GAAAhhB,UAAA,WAAQ,KAGZ,WACE,OAAOC,KAAKqiB,eALd,SACaC,GACXtiB,KAAKqiB,UAAYvJ,EAAAA,sBAAsBwJ,oCAUzCziB,OAAAC,eACIihB,GAAAhhB,UAAA,SAAM,KADV,SACWwiB,GACT,GAAKA,EAAL,KAGMC,EAA6BxiB,KAAKyiB,QAAQd,KAAK,SAAC5L,GAAW,OAAAA,EAAE7F,OAASqS,IAC5E,IAAKC,EACH,MAAM,IAAIE,MAAM,wCAGlB1iB,KAAK2iB,QAAUH,oCAEjB3iB,OAAAC,eAAIihB,GAAAhhB,UAAA,eAAY,KAAhB,WACE,OAAOC,KAAK2iB,yCAQd9iB,OAAAC,eACIihB,GAAAhhB,UAAA,YAAS,KADb,SACc6iB,OACRC,EAAoBD,EAAQA,EAAME,cAAgB,MACtD,GAAkB,SAAdD,GAAsC,QAAdA,EAC1B,MAAM,IAAIH,MAAM,0CAGlB1iB,KAAK+iB,WAA2B,QAAdF,EAChBG,GAAwBpC,UAAYoC,GAAwBnC,4CAEhEhhB,OAAAC,eAAIihB,GAAAhhB,UAAA,gBAAa,KAAjB,WACE,OAAOC,KAAK+iB,4CAGdljB,OAAAC,eAAIihB,GAAAhhB,UAAA,UAAO,KAAX,WACE,OAAOC,KAAKgH,OAA6B,EAApBhH,KAAKgH,MAAMvB,wCAoDlCsb,GAAAhhB,UAAAuB,SAAA,WAAA,IAAAsG,EAAA5H,KAEEA,KAAKijB,YAAcjjB,KAAKkjB,UAAUC,eAAepb,UAAU,WACrDH,EAAKR,OACPQ,EAAKR,MAAMC,UAAUsB,QAAQ,SAACW,EAA8BqB,GAC1D/C,EAAK0Z,gBAAgB1Z,EAAKnF,QAAUkI,GAASrB,EAAI9B,OAAS,IAG9DI,EAAKwb,mBACLxb,EAAKV,0BAIPlH,KAAKqjB,kBAAoBrjB,KAAKsjB,gBAAgBH,eAAelb,KAC3DC,EAAAA,aAAa,IACbH,UAAU,SAACwb,GACX3b,EAAK4b,eAAiBD,EACtB3b,EAAKwb,mBACLxb,EAAKvH,mBAAmBC,iBAG1BN,KAAKyjB,sBAAwBzjB,KAAK0jB,oBAAoBP,eACnDpb,UAAU,SAAC4b,GACZ/b,EAAKuZ,wBAA0BwC,EAC/B/b,EAAKvH,mBAAmBC,iBAG1BN,KAAK4jB,oBAAsB5jB,KAAK6jB,kBAAkBV,eAC/Cpb,UAAU,SAACiB,GACZpB,EAAKsB,sBAAwBF,EAC7BpB,EAAKV,wBACLU,EAAKvH,mBAAmBC,iBAE1BN,KAAK8jB,kBAAoB9jB,KAAKob,aAAarT,UAAU,SAACrC,GACpDkC,EAAKwB,aAOT2X,GAAAhhB,UAAAkM,mBAAA,WACE,IAAK,IAAI3G,EAAY,EAAGA,EAAItF,KAAK+jB,WAAW1c,UAAU5B,OAAQH,IAC5DtF,KAAKgkB,aAAaC,IAChBjkB,KAAK+jB,WAAW1c,UAAU/B,GAAG4e,oBAC7BlkB,KAAK+jB,WAAW1c,UAAU/B,GAAGsB,cAQnCma,GAAAhhB,UAAAokB,sBAAA,WAAA,IAAAvc,EAAA5H,KAME,GAJ+E,EAA3EA,KAAKkJ,sBAAwBlJ,KAAKuhB,eAAeja,cAAc2B,WAEjEjJ,KAAK6jB,kBAAkBre,KAAK,GAE1BxF,KAAKwI,YAAYlB,cAAe,KAC9B8c,EAAuBpkB,KAAKwI,YAAYlB,cAAcC,wBAAwB8c,MAE9ErkB,KAAKkhB,aAAekD,GACtBrF,WAAW,WACTnX,EAAKsZ,WAAakD,EAClBxc,EAAKsb,UAAU1d,QACd,GAGP,GAAIxF,KAAKuhB,eAAeja,cAAe,KACjCiB,EAAwBvI,KAAKuhB,eAAeja,cAAcC,wBAAwBC,OAElFxH,KAAKyI,cAAgBF,IACvBvI,KAAKyI,YAAcF,EACnBvI,KAAKkH,wBACLlH,KAAKK,mBAAmBC,kBAS9BygB,GAAAhhB,UAAA4H,gBAAA,WAAA,IAAAC,EAAA5H,KACEA,KAAKskB,iBAAmBtkB,KAAKoH,MAAMU,QAAQG,KACzCC,EAAAA,aAAa,IACbH,UAAU,WACVH,EAAKsb,UAAU1d,SAEjBxF,KAAKkH,yBAMP6Z,GAAAhhB,UAAA2I,YAAA,WACM1I,KAAKijB,aACPjjB,KAAKijB,YAAYpa,cAEf7I,KAAKqjB,mBACPrjB,KAAKqjB,kBAAkBxa,cAErB7I,KAAKyjB,uBACPzjB,KAAKyjB,sBAAsB5a,cAEzB7I,KAAK4jB,qBACP5jB,KAAK4jB,oBAAoB/a,cAEvB7I,KAAKskB,kBACPtkB,KAAKskB,iBAAiBzb,cAEpB7I,KAAK8jB,mBACP9jB,KAAK8jB,kBAAkBjb,eAQ3BkY,GAAAhhB,UAAA+I,aAAA,SAAatG,OACPuG,EAAqCvG,EAAY,OACrD,GAAIuG,EAAS,KACP4a,EAA2B5a,EAAQwb,WACnCvkB,KAAKmhB,0BAA4BwC,GACnC3jB,KAAK0jB,oBAAoBle,KAAKme,OAE5B3a,EAAyBD,EAAQE,UACjCjJ,KAAKkJ,wBAA0BF,GACjChJ,KAAK6jB,kBAAkBre,KAAKwD,KAQlC+X,GAAAhhB,UAAAykB,eAAA,SAAe7Z,GACb,OAAI3K,KAAKykB,QAAQ9Z,GACR3K,KAAKykB,QAAQ9Z,GAAOjF,MAEtB6K,WAGTwQ,GAAAhhB,UAAA2kB,aAAA,SAAalC,EAA4B9c,GACvC,OAAI8c,EAAOmC,SAAWpU,WAAaiS,EAAOmC,OACjC3kB,KAAK4kB,gBAAgBpC,EAAOtS,KAAMxK,GAEpCA,EAAM8c,EAAOtS,OAMrB6Q,GAAAhhB,UAAA8kB,eAAA,SAAe3U,GACb,OAAOlQ,KAAKgkB,aAAac,IAAI5U,IAMhC6Q,GAAAhhB,UAAAglB,WAAA,WACE/kB,KAAK0F,MAAMqX,OAAO,EAAG/c,KAAK0F,MAAMD,SAMlCsb,GAAAhhB,UAAAqJ,QAAA,WACEpJ,KAAKkH,wBACLlH,KAAKojB,mBACLpjB,KAAKglB,0BACLhlB,KAAKK,mBAAmBC,gBAM1BygB,GAAAhhB,UAAAklB,UAAA,SAAUC,GAAV,IAAAtd,EAAA5H,KACMmlB,EAAqB,GACrBD,GACFllB,KAAKgH,MAAM2B,QAAQ,SAACW,GAEb1B,EAAKwd,cAAc9b,KACtB1B,EAAKlC,MAAMO,KAAKqD,GAEhB6b,EAAYlf,KAAKqD,MAGrBtJ,KAAKohB,cAAe,EACpBphB,KAAKqhB,gBAAiB,IAEtBrhB,KAAKgH,MAAM2B,QAAQ,SAACW,GAElB,GAAI1B,EAAKwd,cAAc9b,GAAM,CAC3B6b,EAAYlf,KAAKqD,OACb+b,EAAgBzd,EAAKlC,MAAMkN,OAAO,SAAC0S,GACrC,OAAO1d,EAAK+U,YAAYrT,EAAKgc,KAC5B,GACC3a,EAAgB/C,EAAKlC,MAAM4N,QAAQ+R,IAC1B,EAAT1a,GACF/C,EAAKlC,MAAMqX,OAAOpS,EAAO,MAI/B3K,KAAKohB,cAAe,EACpBphB,KAAKqhB,gBAAiB,GAExBrhB,KAAKulB,YAAY3iB,KAAK,CAAC4iB,KAAML,EAAa1E,SAAUyE,IACpDllB,KAAK2C,SAAS3C,KAAK0F,QAMrBqb,GAAAhhB,UAAAqlB,cAAA,SAAc9b,GAAd,IAAA1B,EAAA5H,KAEE,QAAOA,KAAK0F,OAEA,EAFQ1F,KAAK0F,MAAMkN,OAAO,SAAC0S,GACrC,OAAO1d,EAAK+U,YAAYrT,EAAKgc,KAC5B7f,QAOLsb,GAAAhhB,UAAA0lB,OAAA,SAAOnc,EAAU9G,EAAckjB,GAC7B,GAAI1lB,KAAKihB,WAAY,CACnBjhB,KAAK2lB,WAAWnjB,OAEZojB,EAAU,EACd,GAAI5lB,KAAKoiB,UAAYwD,GAAcA,EAAWC,WAAuC,EAA3B7lB,KAAK8lB,mBAAyB,KAClFC,EAAqBL,EACrBrd,EAAoBrI,KAAK8lB,mBAO7B,GANIJ,EAAkB1lB,KAAK8lB,qBACzBC,EAAa/lB,KAAK8lB,mBAClBzd,EAAYqd,GAIT1lB,KAAKgmB,qBAAuBN,GAAmB1lB,KAAK8lB,mBAAqB9lB,KAAKgmB,qBAC/EhmB,KAAKgmB,qBAAuBN,GAAmB1lB,KAAK8lB,mBAAqB9lB,KAAKgmB,oBAChF,IAAK,IAAI1gB,EAAYygB,EAAYzgB,GAAK+C,EAAW/C,IAC3CtF,KAAKgmB,sBAAwB1gB,GAC/BtF,KAAKimB,aAAajmB,KAAKgH,MAAM1B,GAAIA,QAGhC,GAAKtF,KAAKgmB,oBAAsBN,GAAqB1lB,KAAKgmB,oBAAsBN,EAOrF,IALI1lB,KAAKgmB,oBAAsBN,EAC7Brd,IACSrI,KAAKgmB,oBAAsBN,GACpCK,IAEOzgB,EAAYygB,EAAYzgB,GAAK+C,EAAW/C,IAAK,KAChD4gB,EAAuBlmB,KAAKolB,cAAcplB,KAAKgH,MAAM1B,IAIpDtF,KAAKmmB,sBAAwBD,IAC5BlmB,KAAKmmB,qBAAuBD,EAChClmB,KAAKimB,aAAajmB,KAAKgH,MAAM1B,GAAIA,GACxBtF,KAAKomB,0BAGTV,GAAmB1lB,KAAKgmB,qBAAuBN,GAAmB1lB,KAAK8lB,oBACvEJ,GAAmB1lB,KAAKgmB,qBAAuBN,GAAmB1lB,KAAK8lB,qBAC1E9lB,KAAKimB,aAAajmB,KAAKgH,MAAM1B,GAAIA,GAKzCtF,KAAKomB,yBAA0B,OAGtBR,IAAeA,EAAWC,WACnC7lB,KAAKmmB,oBAAsBnmB,KAAKimB,aAAa3c,EAAKoc,GAClD1lB,KAAKomB,yBAA0B,EAC/BpmB,KAAKgmB,oBAAsBN,GAE7B1lB,KAAK8lB,mBAAqBJ,IAQ9B3E,GAAAhhB,UAAAsmB,qBAAA,WACMrmB,KAAKuO,YACPvO,KAAKuO,UAAU+X,cAAgB,WAC7B,OAAO,KAQbvF,GAAAhhB,UAAAwmB,oBAAA,WACMvmB,KAAKuO,YACPvO,KAAKuO,UAAU+X,cAAgB/V,YAQnCwQ,GAAAhhB,UAAAymB,eAAA,SAAeld,EAAUqB,EAAenI,GACtC,GAAIxC,KAAKkiB,UAAW,KAGZ3U,EAAkB/K,EAAM+K,YAAc/K,EAAMikB,cAC9C1d,EAAuBvG,EAAY,OAES,OAA5C+K,EAAWmZ,aAAa,iBAA8D,wBAAlC3d,EAAQ4d,QAAQtT,eACtErT,KAAK4mB,WAAWhkB,KAAK,CACnB0G,IAAKA,EACLqB,MAAOA,MASfoW,GAAAhhB,UAAA8mB,WAAA,SAAWrE,GACLxiB,KAAK2iB,UAAYH,EACnBxiB,KAAK+iB,WAAa/iB,KAAK+iB,aAAeC,GAAwBpC,UAC5DoC,GAAwBnC,WAAamC,GAAwBpC,WAE/D5gB,KAAK2iB,QAAUH,EACfxiB,KAAK+iB,WAAaC,GAAwBpC,WAE5C5gB,KAAK8mB,aAAathB,KAAK,CAAE0K,KAAMlQ,KAAK2iB,QAAQzS,KAAM0S,MAAO5iB,KAAK+iB,cAMhEhC,GAAAhhB,UAAAgnB,UAAA,SAAUvkB,EAAsB8G,EAAUqB,GACxC,OAAQnI,EAAMiY,SACZ,KAAKuM,EAAAA,MACL,KAAKC,EAAAA,MAECjnB,KAAKihB,YACPjhB,KAAKimB,aAAajmB,KAAKgH,MAAMhH,KAAKyC,QAAUkI,GAAQ3K,KAAKyC,QAAUkI,GAErE,MACF,KAAK+S,EAAAA,SAKS,EAAR/S,GACF3K,KAAKoH,MAAMC,UAAUsD,EAAQ,GAAGoP,QAElC/Z,KAAK2lB,WAAWnjB,GACZxC,KAAKihB,YAAcjhB,KAAKoiB,UAAY5f,EAAMqjB,UAAoC,GAAxB7lB,KAAKyC,QAAUkI,GACvE3K,KAAKimB,aAAajmB,KAAKgH,MAAMhH,KAAKyC,QAAUkI,GAAQ3K,KAAKyC,QAAUkI,GAErE,MACF,KAAKwT,EAAAA,WAKCxT,EAAS3K,KAAKoH,MAAMC,UAAU5B,OAAS,GACzCzF,KAAKoH,MAAMC,UAAUsD,EAAQ,GAAGoP,QAElC/Z,KAAK2lB,WAAWnjB,GACZxC,KAAKihB,YAAcjhB,KAAKoiB,UAAY5f,EAAMqjB,UAAY7lB,KAAKyC,QAAUkI,EAAQ3K,KAAKgH,MAAMvB,QAC1FzF,KAAKimB,aAAajmB,KAAKgH,MAAMhH,KAAKyC,QAAUkI,GAAQ3K,KAAKyC,QAAUkI,KAW3EoW,GAAAhhB,UAAAmnB,uBAAA,SAAuBvc,EAAenI,GACpCxC,KAAKwjB,eAAiBhhB,EAAM+gB,QAC5BvjB,KAAKghB,gBAAkBrW,GAMzBoW,GAAAhhB,UAAAonB,kBAAA,SAAkB3kB,GAEhB,GAAIxC,KAAKghB,kBAAoBzQ,WAA6B,EAAhB/N,EAAM+gB,QAAa,KACvD6D,EAAoB5kB,EAAM+gB,QAE9B,GAAgB,EAAZ6D,GAAuC,EAAtBpnB,KAAKwjB,gBAAuB4D,EAAYpnB,KAAKwjB,gBAAoB,EAAG,KAEnF6D,EAA8BrnB,KAAKykB,QAAQzkB,KAAKghB,iBAAiBtb,OAAS0hB,EAAYpnB,KAAKwjB,gBAE3F6D,EAAsBrnB,KAAKsnB,aAAajgB,UAAUrH,KAAKghB,iBAAiBuG,iBAC1EF,EAAsBrnB,KAAKsnB,aAAajgB,UAAUrH,KAAKghB,iBAAiBuG,gBAE1EvnB,KAAKyiB,QAAQziB,KAAKghB,iBAAiBqD,MAAQgD,EAE3CrnB,KAAKsjB,gBAAgB9d,KAAK4hB,MAQhCrG,GAAAhhB,UAAAynB,qBAAA,WACExnB,KAAKwjB,eAAiBjT,UACtBvQ,KAAKghB,gBAAkBzQ,WAMzBwQ,GAAAhhB,UAAA4lB,WAAA,SAAWnjB,GACTA,EAAMwX,kBAGA+G,GAAAhhB,UAAA6kB,gBAAR,SAAwB1U,EAAcxK,GACpC,KAAMA,aAAiB7F,QAAYqQ,GACjC,OAAOxK,EAET,IAAyB,EAArBwK,EAAKoD,QAAQ,KAAW,KACtBmU,EAAsBvX,EAAKwX,MAAM,SAAU,GAC/C,OAAO1nB,KAAK4kB,gBAAgB6C,EAAU,GAAI/hB,EAAM+hB,EAAU,KAE1D,OAAO/hB,EAAMwK,IAOT6Q,GAAAhhB,UAAAkmB,aAAR,SAAqB3c,EAAUqe,GAA/B,IAAA/f,EAAA5H,KACM4nB,EAAuB5nB,KAAKolB,cAAc9b,GAC9C,GAAKse,EAKE,CAELte,EAAMtJ,KAAK0F,MAAMkN,OAAO,SAAC0S,GACvB,OAAO1d,EAAK+U,YAAYrT,EAAKgc,KAC5B,OACC3a,EAAgB3K,KAAK0F,MAAM4N,QAAQhK,IAC1B,EAATqB,GACF3K,KAAK0F,MAAMqX,OAAOpS,EAAO,QAXtB3K,KAAKmiB,WACRniB,KAAK+kB,aAEP/kB,KAAK0F,MAAMO,KAAKqD,GAclB,OAHAtJ,KAAKglB,0BACLhlB,KAAK6nB,YAAYjlB,KAAK,CAAC0G,IAAKA,EAAKqB,MAAOgd,EAAUlH,UAAWmH,IAC7D5nB,KAAK2C,SAAS3C,KAAK0F,QACXkiB,GAMF7G,GAAAhhB,UAAAilB,wBAAR,WAAA,QAAApd,EAAA5H,KACE,GAAIA,KAAKgH,MAAO,CACdhH,KAAKohB,kBAA8E,IAAxDphB,KAAKgH,MAAM2a,KAAK,SAACrd,GAAW,OAACsD,EAAKwd,cAAc9gB,KAC3EtE,KAAKqhB,gBAAiB,MACtB,IAAgB,IAAAnT,EAAAC,EAAAnO,KAAKgH,OAAKqH,EAAAH,EAAA1I,QAAA6I,EAAA1I,KAAA0I,EAAAH,EAAA1I,OAAE,CAAvB,IAAI8D,EAAG+E,EAAA3I,MACV,GAAK1F,KAAKolB,cAAc9b,GAAxB,CAGAtJ,KAAKqhB,gBAAiB,EACtB,+GAQEN,GAAAhhB,UAAAqjB,iBAAR,WAAA,IAAAxb,EAAA5H,KACMA,KAAKsnB,cAAgBtnB,KAAKsnB,aAAa7hB,SACzCzF,KAAKykB,QAAU,GACfzkB,KAAKsnB,aAAa3e,QAAQ,SAACmf,EAAiCnd,GAC1D/C,EAAKmgB,mBAAmBpd,EAAO/C,EAAKogB,qBAEtChoB,KAAKioB,sBACLjoB,KAAKK,mBAAmBC,iBAOpBygB,GAAAhhB,UAAAkoB,oBAAR,WAAA,IAAArgB,EAAA5H,KACMkoB,EAA0B,EAE1BC,EAAyBnoB,KAAKykB,QAAQ7R,OAAO,SAACyR,EAA6B1Z,GAC7E,QAAI/C,EAAK6a,QAAQ9X,GAAOyd,UAGpB/D,EAAM1Y,OAAS0Y,EAAMjO,KAAOiO,EAAMxO,OACpCqS,GAAmB7D,EAAM3e,OAEnB2e,EAAM1Y,OAAU0Y,EAAMjO,KAAQiO,EAAMxO,QAC3CpQ,OAGC4iB,EAA+B,EAMnC,GALIH,EAAkBloB,KAAKsoB,YACzBD,EAAuBroB,KAAKsoB,UAAYJ,GAItCC,GAAkBE,EAAsB,KACtCE,EAAmBrnB,KAAKS,MAAM0mB,EAAuBF,GACrDK,EAAyB,EAE7BxoB,KAAKykB,QAAQ9b,QAAQ,SAAC8f,IAChB7gB,EAAK6c,QAAQgE,EAAS9d,OAAOyL,KAAOxO,EAAK6c,QAAQgE,EAAS9d,OAAOjF,MAAQ6iB,GACzE3gB,EAAK6c,QAAQgE,EAAS9d,OAAOkL,KAAOjO,EAAK6c,QAAQgE,EAAS9d,OAAOjF,MAAQ6iB,IACxE3gB,EAAK6c,QAAQgE,EAAS9d,OAAOgB,SAChC/D,EAAKmgB,mBAAmBU,EAAS9d,MAAO4d,GACxCC,WAIAE,EAA4B1oB,KAAKykB,QAAQ7R,OAAO,SAACyR,GACnD,OAAQA,EAAM1Y,QAAU0Y,EAAMjO,MAC7B3Q,OACCijB,IAAsBF,GAAkBE,IAAsBP,GAChEnoB,KAAKioB,wBAQHlH,GAAAhhB,UAAAgoB,mBAAR,SAA2Bpd,EAAejF,OAUpCijB,IATJ3oB,KAAKykB,QAAQ9Z,GAAS,CACpBjF,MAAOA,EACPiF,MAAOA,EACPgB,OAAO,EACPkK,KAAK,EACLO,KAAK,IAKP,GAAIpW,KAAKyiB,QAAQ9X,GAEf,GAAyC,iBAA9B3K,KAAKyiB,QAAQ9X,GAAO0Z,MAAoB,KAC7CuE,EAA8D5oB,KAAKyiB,QAAQ9X,GAAY,MAE3Fge,EAA0BC,KAAeA,EAAU/S,IAC/C+S,GAAaA,EAAU/S,KAAO7V,KAAKykB,QAAQ9Z,GAAOjF,OACpD1F,KAAKykB,QAAQ9Z,GAAOjF,MAAQkjB,EAAU/S,IACtC7V,KAAKykB,QAAQ9Z,GAAOkL,KAAM,GAEjB+S,GAAaA,EAAUxS,KAAOpW,KAAKykB,QAAQ9Z,GAAOjF,QAC3D1F,KAAKykB,QAAQ9Z,GAAOjF,MAAQkjB,EAAUxS,IACtCpW,KAAKykB,QAAQ9Z,GAAOyL,KAAM,OAGkB,iBAA9BpW,KAAKyiB,QAAQ9X,GAAO0Z,QACpCrkB,KAAKykB,QAAQ9Z,GAAOjF,MAAgB1F,KAAKyiB,QAAQ9X,GAAY,MAC7Dge,EAAyB3oB,KAAKykB,QAAQ9Z,GAAOgB,OAAQ,IAIpDgd,GACD3oB,KAAKykB,QAAQ9Z,GAAOjF,MAAQ1F,KAAKsnB,aAAajgB,UAAUsD,GAAO4c,iBACjEvnB,KAAKykB,QAAQ9Z,GAAOjF,MAAQ1F,KAAKsnB,aAAajgB,UAAUsD,GAAO4c,eAC/DvnB,KAAKykB,QAAQ9Z,GAAOkL,KAAM,EAC1B7V,KAAKykB,QAAQ9Z,GAAOgB,OAAQ,IAOxBoV,GAAAhhB,UAAAioB,gBAAR,eACMa,EAAwC7oB,KAAKyiB,QAAQ7P,OAAO,SAACkV,GAA4B,OAACA,EAAIM,SAClG,OAAOlnB,KAAKS,MAAM3B,KAAKsoB,UAAYO,EAAgBpjB,SAM7Csb,GAAAhhB,UAAAmH,sBAAR,WAAA,IAAAU,EAAA5H,KACM8oB,EAAuB,EAC3B,GAAI9oB,KAAKgH,MAAO,KAEV+hB,EADJ/oB,KAAKyH,aAAe,EAIpBzH,KAAKgH,MAAM2B,QAAQ,SAACrE,EAAQgB,GAGrBsC,EAAK0Z,gBAAgBhc,KACxBsC,EAAK0Z,gBAAgBhc,GAAKsC,EAAK0Z,gBAAgB,IA98BX,IAg9BtCyH,GAAgBnhB,EAAK0Z,gBAAgBhc,GAEW,EAA5CsC,EAAKsB,sBAAwB6f,GAC/BD,MAGJ9oB,KAAKyH,aAAeshB,MAEhBtmB,EAAkBqmB,EA79BM,EA89B5B9oB,KAAKiB,SAAqB,EAAVwB,EAAcA,EAAU,EAKxC,QAHIumB,EAAqBhpB,KAAKyI,YAC1BkC,EAAgB,EAEA,EAAbqe,GACLA,GAAchpB,KAAKshB,gBAAgBthB,KAAKyC,QAAUkI,GAClDA,QAIEjI,EADiBiI,EAAQ,EAAC,EACF3K,KAAKyC,QAE7BiH,SAAShH,IAAUA,EAAQ1C,KAAKgH,MAAMvB,OACxC/C,EAAQ1C,KAAKgH,MAAMvB,OACTiE,SAAShH,KACnBA,EA9+B0B,GAg/B5B1C,KAAKgB,OAAS0B,OAEd1C,KAAKyH,aAAe,EACpBzH,KAAKiB,SAAW,EAChBjB,KAAKgB,OAAS,MAGZ2I,EAAiB,EAErB,GAz/B8B,EAy/B1Bmf,EACF,IAASne,EAAgB,EAAGA,EAAQ3K,KAAKyC,QAASkI,IAChDhB,GAAU3J,KAAKshB,gBAAgB3W,GAInC3K,KAAK0H,iBAAmB1H,KAAK4J,cAAcC,yBAAyB,eAAiBF,EAAS3J,KAAKyJ,aAAe,OAC9GzJ,KAAKgH,QACPhH,KAAKmH,aAAenH,KAAKiH,KAAK6C,MAAM9J,KAAKyC,QAASzC,KAAK0C,QAIzDqH,QAAQC,UAAUC,KAAK,WACrBrC,EAAKvH,mBAAmBC,uCAx/B7BuC,EAAAA,UAASC,KAAA,CAAC,CACT6Q,UAAW,CAAC,CACVuL,QAASC,EAAAA,kBACTC,YAAaC,EAAAA,WAAW,WAAM,OAAA0B,KAC9BzB,OAAO,IAETpc,SAAU,gBAEVC,SAAA,wqIACAoc,OAAQ,CAAC,SACTxc,gBAAiBC,EAAAA,wBAAwBC,ghFAyU5BM,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACwM,EAAAA,mBApaDpF,EAAAA,kBAExBC,EAAAA,oBAJA3G,EAAAA,0DA2MNylB,EAAAA,gBAAenmB,KAAA,CAAC4d,4BAEhBjU,EAAAA,UAAS3J,KAAA,CAAC,uCAEVuH,EAAAA,aAAYvH,KAAA,CAAC,gCAEbuH,EAAAA,aAAYvH,KAAA,CAACyd,kBA4Bb9c,EAAAA,MAAKX,KAAA,CAAC,yBAuBNW,EAAAA,MAAKX,KAAA,CAAC,qCA6BNW,EAAAA,MAAKX,KAAA,CAAC,wCAaNW,EAAAA,MAAKX,KAAA,CAAC,iCAaNW,EAAAA,MAAKX,KAAA,CAAC,+BAaNW,EAAAA,MAAKX,KAAA,CAAC,8BAaNW,EAAAA,MAAKX,KAAA,CAAC,4BAYNW,EAAAA,MAAKX,KAAA,CAAC,6BAqBNW,EAAAA,MAAKX,KAAA,CAAC,mCAuBNY,EAAAA,OAAMZ,KAAA,CAAC,mCAQPY,EAAAA,OAAMZ,KAAA,CAAC,iCAOPY,EAAAA,OAAMZ,KAAA,CAAC,iCAOPY,EAAAA,OAAMZ,KAAA,CAAC,kCAePW,EAAAA,MAAKX,KAAA,CAAC,kBA4pBTie,IAxqBE,SAAAA,GAAkDxS,EAC9B/F,EACAoB,EACRvJ,GAHZ,IAAAuH,EAIEd,GAAAvB,KAAAvF,KAAMK,IAAmBL,YAJuB4H,EAAA2G,UAAAA,EAC9B3G,EAAAY,YAAAA,EACAZ,EAAAgC,cAAAA,EAnUZhC,EAAAsZ,WAAqB,EAGrBtZ,EAAAka,mBAA6B,EAC7Bla,EAAA4b,eAAyB,EAGzB5b,EAAA0b,gBAAmC,IAAI7Y,EAAAA,QAevC7C,EAAA6c,QAAkC,GAClC7c,EAAAsb,UAA2B,IAAIzY,EAAAA,QAK/B7C,EAAAuZ,wBAAkC,EAElCvZ,EAAA8b,oBAAuC,IAAIjZ,EAAAA,QAC3C7C,EAAAic,kBAAqC,IAAIpZ,EAAAA,QAGzC7C,EAAA0Z,gBAA4B,GAE5B1Z,EAAAH,aAAuB,EAEvBG,EAAAa,YAAsB,EAEtBb,EAAAsB,sBAAgC,EAKhCtB,EAAA3G,SAAmB,EACnB2G,EAAA5G,OAAiB,EAqCjB4G,EAAAoa,aAAuB,EACvBpa,EAAAqa,YAAsB,EACtBra,EAAAua,WAAqB,EACrBva,EAAAwZ,cAAwB,EACxBxZ,EAAAyZ,gBAA0B,EAG1BzZ,EAAAya,WAAqB,EAErBza,EAAAmb,WAAsCC,GAAwBpC,UAG9DhZ,EAAAwe,yBAAmC,EACnCxe,EAAAke,oBAA8B,EAC9Ble,EAAAoe,qBAA+B,EAC/Bpe,EAAAue,qBAA+B,EAG/Bve,EAAAoc,aAA8C,IAAIkF,IAmMpCthB,EAAAkf,aACc,IAAIljB,EAAAA,aAOnBgE,EAAAigB,YAAqD,IAAIjkB,EAAAA,aAO1DgE,EAAAgf,WAAsD,IAAIhjB,EAAAA,aAOzDgE,EAAA2d,YACa,IAAI3hB,EAAAA,aAchBgE,EAAA+U,YAAiD,SAACrT,EAAU6f,GAChF,OAAO7f,IAAQ6f,KCpbnB,IAAAC,IAqBEvpB,OAAAC,eAAIspB,GAAArpB,UAAA,iBAAc,KAAlB,WACE,OAAIC,KAAKqpB,gBAAkBrpB,KAAKqpB,eAAe/hB,cACxBtH,KAAKqpB,eAA4B,cAAE9hB,wBAAwB8c,MAE3E,qCAmCTxkB,OAAAC,eACIspB,GAAArpB,UAAA,YAAS,KADb,SACc6iB,OACRC,EAAoBD,EAAQA,EAAME,cAAgB,MACtD,GAAkB,SAAdD,GAAsC,QAAdA,EAC1B,MAAM,IAAIH,MAAM,0CAGlB1iB,KAAK+iB,WAA2B,QAAdF,EAChBG,GAAwBpC,UAAYoC,GAAwBnC,4CAWhEhhB,OAAAC,eACIspB,GAAArpB,UAAA,gBAAa,KADjB,WAEE,OAAOC,KAAKsiB,0CAGdziB,OAAAC,eACIspB,GAAArpB,UAAA,eAAY,KADhB,WAEE,OAAOC,KAAKsiB,0CAGdziB,OAAAC,eACIspB,GAAArpB,UAAA,aAAU,KADd,WAEE,OAAOC,KAAKkc,wCAGdrc,OAAAC,eACIspB,GAAArpB,UAAA,cAAW,KADf,WAEE,OAAOC,KAAKspB,yCAWdF,GAAArpB,UAAAwpB,YADA,WAEMvpB,KAAKsiB,UACPtiB,KAAK8mB,aAAalkB,KAAK,CAACsN,KAAMlQ,KAAKkQ,KAAM0S,MAAO5iB,KAAK+iB,cAIzDqG,GAAArpB,UAAAypB,YAAA,WACE,OAAOxpB,KAAK+iB,aAAeC,GAAwBpC,WAGrDwI,GAAArpB,UAAA0pB,aAAA,WACE,OAAOzpB,KAAK+iB,aAAeC,GAAwBnC,iCA7GtDhe,EAAAA,UAASC,KAAA,CAAC,CAETI,SAAU,2BAEVC,SAAA,66JAb0D+G,EAAAA,kBAAXE,EAAAA,sDAmB9CqC,EAAAA,UAAS3J,KAAA,CAAC,gBAAiB,CAAC4mB,KAAMxf,EAAAA,2BAalCzG,EAAAA,MAAKX,KAAA,CAAC,0BAONW,EAAAA,MAAKX,KAAA,CAAC,4BAONW,EAAAA,MAAKX,KAAA,CAAC,2BAONW,EAAAA,MAAKX,KAAA,CAAC,8BAONW,EAAAA,MAAKX,KAAA,CAAC,mCAgBNY,EAAAA,OAAMZ,KAAA,CAAC,qCAGP4J,EAAAA,YAAW5J,KAAA,CAAC,6CAKZ4J,EAAAA,YAAW5J,KAAA,CAAC,0CAKZ4J,EAAAA,YAAW5J,KAAA,CAAC,yCAKZ4J,EAAAA,YAAW5J,KAAA,CAAC,0CAYZyH,EAAAA,aAAYzH,KAAA,CAAC,YAehBsmB,IAtBE,SAAAA,GAAoB5gB,EAAiCgC,GAAjCxK,KAAAwI,YAAAA,EAAiCxI,KAAAwK,UAAAA,EAlF7CxK,KAAA+iB,WAAsCC,GAAwBpC,UAevD5gB,KAAAkQ,KAAe,GAOXlQ,KAAAsiB,UAAoB,EAOtBtiB,KAAAkc,QAAkB,EAOjBlc,KAAAspB,SAAmB,EAuBftpB,KAAA8mB,aACA,IAAIljB,EAAAA,aAuBxB5D,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,wBCpG5D,IAAAqiB,IA0BE9pB,OAAAC,eACI6pB,GAAA5pB,UAAA,QAAK,KAGT,WACE,OAAOC,KAAK4pB,YALd,SACUC,GACR7pB,KAAK4pB,OAASC,mCAMhBhqB,OAAAC,eACI6pB,GAAA5pB,UAAA,cAAW,KADf,WAEE,OAAOC,KAAKspB,8DAhCfzmB,EAAAA,UAASC,KAAA,CAAC,CAETI,SAAU,yBAEVC,SAAA,snHARoC+G,EAAAA,kBAAXE,EAAAA,+CAmBxB3G,EAAAA,MAAKX,KAAA,CAAC,0BAONW,EAAAA,2BAQAiJ,EAAAA,YAAW5J,KAAA,CAAC,wBASf6mB,IAJE,SAAAA,GAAoBnhB,EAAiCgC,GAAjCxK,KAAAwI,YAAAA,EAAiCxI,KAAAwK,UAAAA,EApBnCxK,KAAAspB,SAAmB,EAqBnCtpB,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,sBCxC5D,IAAAwiB,yBAECjnB,EAAAA,UAASC,KAAA,CAAC,CAETI,SAAU,uBAEVC,SAAA,mLAN6B+G,EAAAA,kBAAXE,EAAAA,aAcpB0f,IAJE,SAAAA,GAAoBthB,EAAiCgC,GAAjCxK,KAAAwI,YAAAA,EAAiCxI,KAAAwK,UAAAA,EACnDxK,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,iBCX5D,IAAAyiB,IAgBEA,GAAAhqB,UAAAiqB,WAAA,SAAW/iB,EAAagjB,EAAoBC,EAA6BC,QAA7B,IAAAD,IAAAA,GAAA,OACtCtX,EAAiBqX,EAAcC,EAAaD,EAAW5W,cAAgB4W,EAAc,GAazF,OAZIrX,IACF3L,EAAOA,EAAK2L,OAAO,SAAChI,GAQlB,aAAwB,IAPP/K,OAAOuO,KAAKxD,GAAM+W,KAAK,SAACyI,GACvC,IAAKD,IAAqD,IAAlCA,EAAgB7W,QAAQ8W,GAAa,KACrDC,EAAwB,GAAKzf,EAAKwf,GAExC,OAAoC,GADVF,EAAaG,EAAahX,cAAgBgX,GACnD/W,QAAQV,UAM1B3L,GAWT8iB,GAAAhqB,UAAAuqB,SAAA,SAASrjB,EAAasjB,EAAgB1H,GAmBpC,YAnBoC,IAAAA,IAAAA,EAAqCG,GAAwBpC,WAC7F2J,IACFtjB,EAAOvC,MAAM8lB,KAAKvjB,IACbwjB,KAAK,SAACC,EAAQnmB,OACbomB,EAAaD,EAAEH,GACfK,EAAarmB,EAAEgmB,GACfM,EAAoB,EAUxB,OATKtU,OAAOvK,MAAMuK,OAAOlF,WAAWsZ,KAAYpU,OAAOvK,MAAMuK,OAAOlF,WAAWuZ,IAGzED,EAAQC,EACVC,GAAa,EACID,EAARD,IACTE,EAAY,GALdA,EAAYtU,OAAOlF,WAAWsZ,GAASpU,OAAOlF,WAAWuZ,GAQpDC,GAAahI,IAAcG,GAAwBnC,YAAc,EAAI,KAGzE5Z,GAWT8iB,GAAAhqB,UAAA+qB,SAAA,SAAS7jB,EAAaxE,EAAiBC,GAIrC,OAHe,GAAXD,IACFwE,EAAOA,EAAK6C,MAAMrH,EAAU,EAAGC,IAE1BuE,wBAvEVuL,EAAAA,aAyEDuX,IAzEA,SAAAA,MA2EA,SAAgBgB,GACZC,GACF,OAAOA,GAAU,IAAIjB,GAGvB,IAAakB,GAAgC,CAE3C/L,QAAS6K,GACTmB,KAAM,CAAC,CAAC,IAAI3nB,EAAAA,SAAY,IAAI4nB,EAAAA,SAAYpB,KACxCqB,WAAYL,ICxERM,GAA6B,CACjCtK,GACAL,GAEA0I,GACAO,GACApJ,GACAD,GACAwJ,IAGFwB,yBAACxnB,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACAunB,EAAAA,kBACAC,EAAAA,iBACAvnB,EAAAA,cACAwnB,EAAAA,yBAEFtnB,aAAc,CACZknB,IAEFjnB,QAAS,CACPinB,IAEF1X,UAAW,CACTsX,QAKJK,IApBA,SAAAA,MC3BA,IAAAI,yBAECllB,EAAAA,UAAS1D,KAAA,CAAC,CAACI,SAAU,sBACewoB,IADrC,SAAAA,mCAGCllB,EAAAA,UAAS1D,KAAA,CAAC,CAACI,SAAU,wBACiByoB,IADvC,SAAAA,mCAGCnlB,EAAAA,UAAS1D,KAAA,CAAC,CAACI,SAAU,wBACiB0oB,IADvC,SAAAA,cAcEC,GAAA9rB,UAAAkM,mBAAA,WACE,GAA8B,EAA1BjM,KAAK8rB,YAAYrmB,OACnB,MAAM,IAAIid,MAAM,wDAElB,GAAgC,EAA5B1iB,KAAK+rB,cAActmB,OACrB,MAAM,IAAIid,MAAM,0DAElB,GAAgC,EAA5B1iB,KAAKgsB,cAAcvmB,OACrB,MAAM,IAAIid,MAAM,gFAnBrB7f,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,YACVC,SAAA,gxCAKC8lB,EAAAA,gBAAenmB,KAAA,CAAC4oB,2BAChBzC,EAAAA,gBAAenmB,KAAA,CAAC6oB,2BAChB1C,EAAAA,gBAAenmB,KAAA,CAAC8oB,OAcnBC,IAvBA,SAAAA,MCXA,IAAAI,IAeEA,GAAAlsB,UAAAmX,MAAA,WACElX,KAAKksB,WAAWhV,8BAbnBrU,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,kBACVC,SAAA,+aAJOgpB,EAAAA,gBAiBTF,IALE,SAAAA,GAAoBC,GAAAlsB,KAAAksB,WAAAA,EAFpBlsB,KAAAosB,YAAsB,QCXxB,IAAAC,IAgBEA,GAAAtsB,UAAAusB,OAAA,WACEtsB,KAAKksB,WAAWhV,OAAM,IAGxBmV,GAAAtsB,UAAAwsB,OAAA,WACEvsB,KAAKksB,WAAWhV,OAAM,yBAlBzBrU,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,oBACVC,SAAA,urBAJOgpB,EAAAA,gBAsBTE,IATE,SAAAA,GAAoBH,GAAAlsB,KAAAksB,WAAAA,EAHpBlsB,KAAAwsB,aAAuB,SACvBxsB,KAAAysB,aAAuB,SCZzB,IAAAC,IAmBEA,GAAA3sB,UAAA4H,gBAAA,WAAA,IAAAC,EAAA5H,KAEE+J,QAAQC,UAAUC,KAAK,WACFrC,EAAK+kB,OAAoB,cAAE5S,WAQlD2S,GAAA3sB,UAAA6sB,iBAAA,WACqB5sB,KAAK2sB,OAAoB,cAAElH,UAGhDiH,GAAA3sB,UAAAusB,OAAA,WACEtsB,KAAKksB,WAAWhV,MAAM3G,YAGxBmc,GAAA3sB,UAAAwsB,OAAA,WACEvsB,KAAKksB,WAAWhV,MAAMlX,KAAK0F,6BApC9B7C,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,mBACVC,SAAA,qhDAJOgpB,EAAAA,iDAcN1f,EAAAA,UAAS3J,KAAA,CAAC,YA0Bb4pB,IAxBE,SAAAA,GAAoBR,GAAAlsB,KAAAksB,WAAAA,EALpBlsB,KAAAwsB,aAAuB,SACvBxsB,KAAAysB,aAAuB,SCbzB,IAAAI,IAsCSA,GAAA9sB,UAAAkX,KAAP,SAAe6V,EAA6BC,GAC1C,OAAO/sB,KAAKgtB,eAAe/V,KAAK6V,EAAWC,IAOtCF,GAAA9sB,UAAAktB,SAAP,WACEjtB,KAAKgtB,eAAeC,YAefJ,GAAA9sB,UAAAmtB,UAAP,SAAiBH,OACXI,EAAgCntB,KAAKotB,cAAcL,GACnDM,EACFrtB,KAAKgtB,eAAe/V,KAAKgV,GAAwBkB,GAC/CG,EAA+CD,EAAUE,kBAM7D,OALAD,EAAqBE,MAAQT,EAAOS,MACpCF,EAAqBG,QAAUV,EAAOU,QAClCV,EAAOX,cACTkB,EAAqBlB,YAAcW,EAAOX,aAErCiB,GAgBFR,GAAA9sB,UAAA2tB,YAAP,SAAmBX,OACbI,EAAgCntB,KAAKotB,cAAcL,GACnDM,EACFrtB,KAAKgtB,eAAe/V,KAAKoV,GAA0Bc,GACjDQ,EAAmDN,EAAUE,kBASjE,OARAI,EAAuBH,MAAQT,EAAOS,MACtCG,EAAuBF,QAAUV,EAAOU,QACpCV,EAAON,eACTkB,EAAuBlB,aAAeM,EAAON,cAE3CM,EAAOP,eACTmB,EAAuBnB,aAAeO,EAAOP,cAExCa,GAiBFR,GAAA9sB,UAAA6tB,WAAP,SAAkBb,OACZI,EAAgCntB,KAAKotB,cAAcL,GACnDM,EACFrtB,KAAKgtB,eAAe/V,KAAKyV,GAAyBS,GAChDU,EAAiDR,EAAUE,kBAU/D,OATAM,EAAsBL,MAAQT,EAAOS,MACrCK,EAAsBJ,QAAUV,EAAOU,QACvCI,EAAsBnoB,MAAQqnB,EAAOrnB,MACjCqnB,EAAON,eACToB,EAAsBpB,aAAeM,EAAON,cAE1CM,EAAOP,eACTqB,EAAsBrB,aAAeO,EAAOP,cAEvCa,GAGDR,GAAA9sB,UAAAqtB,cAAR,SAAsBL,OAChBI,EAAgC,IAAIW,EAAAA,gBAGxC,OAFAX,EAAa9I,MAAQ,QACrBxkB,OAAOkuB,OAAOZ,EAAcJ,GACrBI,wBAjHV3a,EAAAA,uDAzBQwb,EAAAA,aA6ITnB,IAjHE,SAAAA,GAAoBG,GAAAhtB,KAAAgtB,eAAAA,MCbhBiB,GAA0B,CAC9BhC,GACAI,GACAK,GACAb,GACAH,GACAE,GACAD,IAGIuC,GAA2C,CAC/CjC,GACAI,GACAK,IAGFyB,yBAACrqB,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACP2P,EAAAA,YACA1P,EAAAA,aACAoqB,EAAAA,gBACAjO,EAAAA,eACAjc,EAAAA,iBAEFC,aAAc,CACZ8pB,IAEF7pB,QAAS,CACP6pB,IAEFta,UAAW,CACTkZ,IAEFwB,gBAAiB,CACfH,QAKJC,IAvBA,SAAAA,iBCdqD7nB,EAAAA,MAAAC,EAAAA,8CAHpDC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,uFAhBkCuD,EAAAA,mBAAaC,EAAAA,oBAsB3D4nB,IAHE,SAAAA,GAAY1nB,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,gBAOYsG,EAAAA,MAAAC,EAAAA,8CAHnDC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,sFAzBkCuD,EAAAA,mBAAaC,EAAAA,oBA+B3D6nB,IAHE,SAAAA,GAAY3nB,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,gBAOesG,EAAAA,MAAAC,EAAAA,8CAHtDC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,yFAlCkCuD,EAAAA,mBAAaC,EAAAA,oBAwC3D8nB,IAHE,SAAAA,GAAY5nB,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,kCAIvC6C,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,uBACVC,SAAU,gCAEmCsrB,IAJ/C,SAAAA,MAMA,mBAKA3nB,GAFa4nB,GAA6BC,EAAAA,mBAAmBtW,EAAAA,cAAcuW,KAE3EC,IAU+CvoB,EAAAA,GAV/CQ,GAU+C4nB,IAyB7C7uB,OAAAC,eACI+uB,GAAA9uB,UAAA,SAAM,KAGV,WACE,OAAOC,KAAK8uB,aALd,SACWC,GACT/uB,KAAKgvB,WAAWlW,EAAAA,sBAAsBiW,qCA2BxCF,GAAA9uB,UAAAkvB,WAAA,WACEjvB,KAAKgvB,YAAYhvB,KAAK8uB,UAOxBD,GAAA9uB,UAAAyX,OAAA,WACE,OAAOxX,KAAKgvB,YAAYhvB,KAAK8uB,UAO/BD,GAAA9uB,UAAAkX,KAAA,WACE,OAAOjX,KAAKgvB,YAAW,IAOzBH,GAAA9uB,UAAAmX,MAAA,WACE,OAAOlX,KAAKgvB,YAAW,IAIzBH,GAAA9uB,UAAA8b,iBAAA,SAAiB3F,GACXA,GAAKlW,KAAK8uB,UACZ9uB,KAAK8uB,SAAU,EACf9uB,KAAKkvB,iBAQDL,GAAA9uB,UAAAivB,WAAR,SAAmBG,GACjB,OAAInvB,KAAKuZ,UAGLvZ,KAAK8uB,UAAYK,KACnBnvB,KAAK8uB,QAAUK,IAEbnvB,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,eACxDtH,KAAKovB,gBAELpvB,KAAKwK,UAAUsM,YAAY9W,KAAKwI,YAAYlB,cAAe,eAC3DtH,KAAKkvB,iBAEA,IAKHL,GAAA9uB,UAAAqvB,YAAR,WACEpvB,KAAKqvB,SAASzsB,KAAK2N,YAGbse,GAAA9uB,UAAAmvB,aAAR,WACElvB,KAAKsvB,UAAU1sB,KAAK2N,iCA/HvB1N,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,qBAEVC,SAAA,oyCACAoc,OAAQ,CAAC,WAAY,iBACrB1H,WAAY,CACVhD,EAAAA,oBACAf,EAAAA,m2CA3DiB1J,EAAAA,iBAAZF,EAAAA,6DAkENI,EAAAA,aAAYxH,KAAA,CAACwrB,iCACbhkB,EAAAA,aAAYxH,KAAA,CAACyrB,oCACbjkB,EAAAA,aAAYxH,KAAA,CAAC0rB,mBAOb/qB,EAAAA,wBAMAA,EAAAA,sBAMAA,EAAAA,MAAKX,KAAA,CAAC,4BAYNY,EAAAA,0BAMAA,EAAAA,UA4EHmrB,IA1EE,SAAAA,GAAoBrkB,EACAhC,GADpB,IAAAZ,EAEEd,GAAAvB,KAAAvF,OAAOA,YAFW4H,EAAA4C,UAAAA,EACA5C,EAAAY,YAAAA,EA5CZZ,EAAAknB,SAAmB,EAmCjBlnB,EAAAynB,SAA+B,IAAIzrB,EAAAA,aAMnCgE,EAAA0nB,UAAgC,IAAI1rB,EAAAA,aAK5CgE,EAAK4C,UAAUuM,SAASnP,EAAKY,YAAYlB,cAAe,wBC/G5D,IAAAioB,IAmCE1vB,OAAAC,eACIyvB,GAAAxvB,UAAA,QAAK,KADT,SACUuf,GACRtf,KAAKwvB,OAAS1W,EAAAA,sBAAsBwG,IAChB,IAAhBtf,KAAKwvB,QAAoD,EAAhCxvB,KAAKyvB,kBAAkBhqB,QAClDzF,KAAK0vB,gBACH1vB,KAAKyvB,kBAAkBzvB,KAAKyvB,kBAAkBhqB,OAAS,qCAgB7D8pB,GAAAxvB,UAAA2I,YAAA,WACE1I,KAAK2vB,WAAWnqB,MAAK,GACrBxF,KAAK2vB,WAAW9mB,cAChB7I,KAAK4vB,oBAAoBpqB,MAAK,GAC9BxF,KAAK4vB,oBAAoB/mB,eAGpB0mB,GAAAxvB,UAAAkM,mBAAP,WAAA,IAAArE,EAAA5H,KACE,IAAKA,KAAKwvB,OAAQ,KACVK,EAA4C7vB,KAAK8vB,gBAAgBld,OACrE,SAACmd,GAA8C,OAAAA,EAAehB,SAE1DiB,EAA0BH,EAAapqB,OACvB,EAAlBuqB,GACFhwB,KAAK0vB,gBAAgBG,EAAaG,EAAkB,IAIxDhwB,KAAKiwB,iBAAiBjwB,KAAK8vB,iBAE3B9vB,KAAK8vB,gBAAgBhoB,QAClBG,KAAKioB,EAAAA,UAAUlwB,KAAK2vB,aACpB5nB,UAAU,SAAC+nB,GACVloB,EAAKgoB,oBAAoBpqB,MAAK,GAC9BoC,EAAKgoB,oBAAoB/mB,cACzBjB,EAAKgoB,oBAAsB,IAAInlB,EAAAA,QAC/B7C,EAAKqoB,iBAAiBH,MAOrBP,GAAAxvB,UAAAowB,QAAP,WACMnwB,KAAKwvB,QACPxvB,KAAK8vB,gBAAgBnnB,QACnB,SAAConB,GACCA,EAAe9Y,UAShBsY,GAAAxvB,UAAAktB,SAAP,WACEjtB,KAAK8vB,gBAAgBnnB,QACnB,SAAConB,GACCA,EAAe7Y,WAKbqY,GAAAxvB,UAAAkwB,iBAAR,SACEH,GADF,IAAAloB,EAAA5H,KAGEA,KAAKyvB,kBAAoB,GACzBK,EAAgBnnB,QAAQ,SAAConB,GACvBA,EAAeV,SACZpnB,KAAKioB,EAAAA,UAAUtoB,EAAKgoB,sBACpB7nB,UAAU,eACHqoB,EAAuBxoB,EAAK6nB,kBAAkBnc,QAClDyc,IAEoB,IAAlBK,GACFxoB,EAAK6nB,kBAAkB1S,OAAOqT,EAAc,GAE9CxoB,EAAK6nB,kBAAkBxpB,KAAK8pB,GAEvBnoB,EAAK4nB,QACR5nB,EAAK8nB,gBAAgBK,KAI3BA,EAAeT,UACZrnB,KAAKioB,EAAAA,UAAUtoB,EAAKgoB,sBACpB7nB,UAAU,eACHqoB,EAAuBxoB,EAAK6nB,kBAAkBnc,QAClDyc,IAEoB,IAAlBK,GACFxoB,EAAK6nB,kBAAkB1S,OAAOqT,EAAc,QAM9Cb,GAAAxvB,UAAA2vB,gBAAR,SAAwBK,GACtB/vB,KAAK8vB,gBAAgBnnB,QAAQ,SAAC0nB,GACxBA,IAAUN,GACZM,EAAMnZ,gCApIbrU,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,2BAEVC,SAAA,sFAhBAiH,EAAAA,iBACAF,EAAAA,8CAgCCzG,EAAAA,MAAKX,KAAA,CAAC,kCAUNmmB,EAAAA,gBAAenmB,KAAA,CAAC+rB,OA0GnBU,IAtGE,SAAAA,GAAoB/kB,EAA8BhC,GAA9BxI,KAAAwK,UAAAA,EAA8BxK,KAAAwI,YAAAA,EA3B1CxI,KAAAwvB,QAAkB,EAElBxvB,KAAAyvB,kBAAiD,GAEjDzvB,KAAA2vB,WAA+B,IAAIllB,EAAAA,QACnCzK,KAAA4vB,oBAAwC,IAAInlB,EAAAA,QAuBlDzK,KAAKwK,UAAUuM,SACb/W,KAAKwI,YAAYlB,cACjB,gCCxCAgpB,GAAkC,CACtCf,GACAV,GACAP,GACAC,GACAC,GACAC,IAGF8B,yBAACzsB,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACAwsB,EAAAA,gBACAvsB,EAAAA,cACAwsB,EAAAA,cAEFtsB,aAAc,CACZmsB,IAEFlsB,QAAS,CACPksB,QAKJC,IAhBA,SAAAA,MCrBA,IAAAG,IAiBE7wB,OAAAC,eACI4wB,GAAA3wB,UAAA,WAAQ,KADZ,SACaqiB,GACXpiB,KAAKmiB,UAAYrJ,EAAAA,sBAAsBsJ,oCAczCviB,OAAAC,eACI4wB,GAAA3wB,UAAA,kBAAe,KADnB,WAEE,OAAOC,KAAKmiB,UAAY,GAAK5R,2CAY/BmgB,GAAA3wB,UAAA4C,SADA,SACSH,GACP,GAAIA,EAAMmuB,kBAAkBC,iBAAkB,KAExCC,EADmDruB,EAAY,OACjCquB,MAClC,GAAIA,EAAMprB,OAAQ,KACZC,EAAyB1F,KAAKmiB,WAA4B,EAAf0O,EAAMprB,OAAaorB,EAAoBA,EAAM,GAC5F7wB,KAAKmpB,MAAQnpB,KAAKmpB,MAAMlc,OAAOrK,KAAK8C,GAAS1F,KAAK8wB,aAAaluB,KAAK8C,2BAhD3Ec,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,+DAHHgK,EAAAA,QAAO7J,WAAA,CAAA,CAAAC,KAmCDC,EAAAA,UAAQ,CAAAD,KAAI6J,EAAAA,6CArBxB1J,EAAAA,MAAKX,KAAA,CAAC,kCAWNY,EAAAA,OAAMZ,KAAA,CAAC,uCAKP4J,EAAAA,YAAW5J,KAAA,CAAC,mCAaZyH,EAAAA,aAAYzH,KAAA,CAAC,SAAU,CAAC,cAW3B4tB,IAnBE,SAAAA,GAAwCvH,GAAAnpB,KAAAmpB,MAAAA,EA5BhCnpB,KAAAmiB,WAAqB,EAkBPniB,KAAA8wB,aAA8C,IAAIltB,EAAAA,aCtB1E,mBAKAkD,GAFaiqB,GAAuB1Y,EAAAA,cAAc2Y,IAElDC,IAIyC3qB,EAAAA,GAJzCQ,GAIyCiqB,IASvClxB,OAAAC,eACImxB,GAAAlxB,UAAA,WAAQ,KADZ,SACaqiB,GACXpiB,KAAKmiB,UAAYrJ,EAAAA,sBAAsBsJ,oCAazCviB,OAAAC,eACImxB,GAAAlxB,UAAA,kBAAe,KADnB,WAEE,OAAOC,KAAKmiB,UAAY,GAAK5R,2CAM/B1Q,OAAAC,eACImxB,GAAAlxB,UAAA,kBAAe,KADnB,WAEE,OAAOC,KAAKuZ,SAAW,GAAKhJ,2CAa9B0gB,GAAAlxB,UAAAmxB,OADA,SACO1uB,GACL,IAAKxC,KAAKuZ,SAAU,KAEdsX,EADyB,EAAmBM,aACjBN,MAC/B,GAAIA,EAAMprB,OAAQ,KACZC,EAAyB1F,KAAKmiB,WAA4B,EAAf0O,EAAMprB,OAAaorB,EAAoBA,EAAM,GAC5F7wB,KAAKoxB,WAAWxuB,KAAK8C,IAGzB1F,KAAKwK,UAAUsM,YAAY9W,KAAKqxB,SAAS/pB,cAAe,aACxDtH,KAAKsxB,WAAW9uB,IASlByuB,GAAAlxB,UAAAwxB,WADA,SACW/uB,OACLgvB,EAAyB,EAAmBL,aAChDK,EAASC,WAAazxB,KAAK0xB,WAAWF,EAASG,OAC3C3xB,KAAKuZ,WAAcvZ,KAAKmiB,YACxBqP,EAAS9Y,OAAiC,EAAxB8Y,EAAS9Y,MAAMjT,QAA8C,EAA/B,EAAgBmsB,cAClEJ,EAASC,WAAa,OAEtBD,EAASC,WAAa,OAExBzxB,KAAKsxB,WAAW9uB,IAQlByuB,GAAAlxB,UAAA8xB,YADA,SACYrvB,GACLxC,KAAKuZ,UACRvZ,KAAKwK,UAAUuM,SAAS/W,KAAKqxB,SAAS/pB,cAAe,aAEvDtH,KAAKsxB,WAAW9uB,IAQlByuB,GAAAlxB,UAAA+xB,YADA,SACYtvB,GACVxC,KAAKwK,UAAUsM,YAAY9W,KAAKqxB,SAAS/pB,cAAe,aACxDtH,KAAKsxB,WAAW9uB,IAMVyuB,GAAAlxB,UAAA2xB,WAAR,SAAmBC,OACbF,EAAqB,OAOzB,OANIE,IACG,EAAa3S,UAAY,EAAaA,SAAS,UAChD,EAAa1L,UAA8C,IAAnC,EAAaA,QAAQ,YAC/Cme,EAAa,QAGVA,GAGDR,GAAAlxB,UAAAuxB,WAAR,SAAmB9uB,GACjBA,EAAMwX,iBACNxX,EAAM+X,wCAxHT/T,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,eACVqc,OAAQ,CAAC,0DAZqCnV,EAAAA,iBAAZF,EAAAA,iDAuBjCzG,EAAAA,MAAKX,KAAA,CAAC,gCAUNY,EAAAA,OAAMZ,KAAA,CAAC,qCAKP4J,EAAAA,YAAW5J,KAAA,CAAC,0CAQZ4J,EAAAA,YAAW5J,KAAA,CAAC,iCAcZyH,EAAAA,aAAYzH,KAAA,CAAC,OAAQ,CAAC,+BAmBtByH,EAAAA,aAAYzH,KAAA,CAAC,WAAY,CAAC,gCAiB1ByH,EAAAA,aAAYzH,KAAA,CAAC,YAAa,CAAC,gCAY3ByH,EAAAA,aAAYzH,KAAA,CAAC,YAAa,CAAC,cAwB9BmuB,IAjFE,SAAAA,GAAoBzmB,EAA8B6mB,GAAlD,IAAAzpB,EACEd,GAAAvB,KAAAvF,OAAOA,YADW4H,EAAA4C,UAAAA,EAA8B5C,EAAAypB,SAAAA,EAnC1CzpB,EAAAua,WAAqB,EAiBTva,EAAAwpB,WAA4C,IAAIxtB,EAAAA,0BCvBvB0C,EAAAA,MAAAC,EAAAA,8CAH9CC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,iFARoBuD,EAAAA,mBAAaC,EAAAA,oBAc7CqrB,IAHE,SAAAA,GAAYnrB,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,KAKtC,YAAmBK,GAAAL,KAAAK,mBAAAA,MAMrByG,GAFakrB,GAAwB5Z,EAAAA,0BAA0BC,EAAAA,cAAc4Z,KAE7EC,IAY0C5rB,EAAAA,GAZ1CQ,GAY0CkrB,IAMxCnyB,OAAAC,eAAIoyB,GAAAnyB,UAAA,eAAY,KAAhB,WACE,OAAOC,KAAKmyB,cAAc7qB,+CAa5BzH,OAAAC,eACIoyB,GAAAnyB,UAAA,WAAQ,KAGZ,WACE,OAAOC,KAAKmiB,eALd,SACaC,GACXpiB,KAAKmiB,UAAYrJ,EAAAA,sBAAsBsJ,oCA2BzC8P,GAAAnyB,UAAAqyB,aAAA,SAAavB,GACX7wB,KAAKqyB,WAAWxB,GAChB7wB,KAAKsyB,SAAS1vB,KAAKiuB,IAMrBqB,GAAAnyB,UAAA6X,MAAA,WACE5X,KAAKqyB,WAAW9hB,WAChBvQ,KAAKwK,UAAU+nB,YAAYvyB,KAAKwyB,aAAc,QAAS,KAIzDN,GAAAnyB,UAAA8b,iBAAA,SAAiB3F,GACXA,GACFlW,KAAK4X,SAMTsa,GAAAnyB,UAAA0yB,iBAAA,SAAiBC,GACf1yB,KAAKuZ,SAAWmZ,wBApFnB7vB,EAAAA,UAASC,KAAA,CAAC,CACTC,gBAAiBC,EAAAA,wBAAwBC,OACzC0Q,UAAW,CAAC,CACVuL,QAASC,EAAAA,kBACTC,YAAaC,EAAAA,WAAW,WAAM,OAAA6S,KAC9B5S,OAAO,IAETpc,SAAU,gBACVqc,OAAQ,CAAC,WAAY,SAErBpc,SAAA,u4BAjCmBiH,EAAAA,iBAA0C5G,EAAAA,6DAwC5DiJ,EAAAA,UAAS3J,KAAA,CAAC,4BASVW,EAAAA,MAAKX,KAAA,CAAC,2BAMNW,EAAAA,MAAKX,KAAA,CAAC,4BAaNW,EAAAA,MAAKX,KAAA,CAAC,4BAONY,EAAAA,OAAMZ,KAAA,CAAC,aAkCVovB,IAhCE,SAAAA,GAAoB1nB,EAAsBnK,GAA1C,IAAAuH,EACEd,GAAAvB,KAAAvF,KAAMK,IAAmBL,YADP4H,EAAA4C,UAAAA,EAxCZ5C,EAAAua,WAAqB,EAsCXva,EAAA0qB,SAA0C,IAAI1uB,EAAAA,eCpEhE,YAAmBvD,GAAAL,KAAAK,mBAAAA,MAMrByG,GAFa6rB,GAAyBva,EAAAA,0BAA0BC,EAAAA,cAAcua,KAE9EC,IAY2CvsB,EAAAA,GAZ3CQ,GAY2C6rB,IA+BzC9yB,OAAAC,eACI+yB,GAAA9yB,UAAA,WAAQ,KAGZ,WACE,OAAOC,KAAKmiB,eALd,SACaC,GACXpiB,KAAKmiB,UAAYrJ,EAAAA,sBAAsBsJ,oCAWzCviB,OAAAC,eACI+yB,GAAA9yB,UAAA,WAAQ,KAGZ,WACE,OAAOC,KAAKmZ,eALd,SACalD,GACXjW,KAAKmZ,UAAYL,EAAAA,sBAAsB7C,oCAwCzC4c,GAAA9yB,UAAA+yB,cAAA,WACM9yB,KAAK0F,OACP1F,KAAK+yB,SAASnwB,KAAK5C,KAAK0F,QAO5BmtB,GAAA9yB,UAAAqyB,aAAA,SAAa1sB,GACX1F,KAAK0F,MAAQA,EACb1F,KAAKsyB,SAAS1vB,KAAK8C,IAOrBmtB,GAAA9yB,UAAAusB,OAAA,WACEtsB,KAAK0F,MAAQ6K,UACbvQ,KAAKgzB,SAASpwB,KAAK2N,WAEfvQ,KAAKizB,WACPjzB,KAAKizB,UAAUrb,SAKnBib,GAAA9yB,UAAA8b,iBAAA,SAAiB3F,GACXA,GACFlW,KAAKssB,+BAhIVzpB,EAAAA,UAASC,KAAA,CAAC,CACTC,gBAAiBC,EAAAA,wBAAwBC,OACzC0Q,UAAW,CAAC,CACVuL,QAASC,EAAAA,kBACTC,YAAaC,EAAAA,WAAW,WAAM,OAAAwT,KAC9BvT,OAAO,IAETpc,SAAU,iBACVqc,OAAQ,CAAC,WAAY,SAErBpc,SAAA,yzCAxBiGK,EAAAA,yDA+BhGiJ,EAAAA,UAAS3J,KAAA,CAACovB,wBAEV5nB,EAAAA,aAAYxH,KAAA,CAACivB,0BAMbtuB,EAAAA,MAAKX,KAAA,CAAC,qCAMNW,EAAAA,MAAKX,KAAA,CAAC,oCAMNW,EAAAA,MAAKX,KAAA,CAAC,iCAMNW,EAAAA,MAAKX,KAAA,CAAC,8BAaNW,EAAAA,MAAKX,KAAA,CAAC,4BAaNW,EAAAA,MAAKX,KAAA,CAAC,4BAONY,EAAAA,OAAMZ,KAAA,CAAC,4BAOPY,EAAAA,OAAMZ,KAAA,CAAC,4BAMPY,EAAAA,OAAMZ,KAAA,CAAC,aA0CV+vB,IAxCE,SAAAA,GAAYxyB,GAAZ,IAAAuH,EACEd,GAAAvB,KAAAvF,KAAMK,IAAmBL,YA9EnB4H,EAAAua,WAAqB,EACrBva,EAAAuR,WAAqB,EAUNvR,EAAAsrB,aAAuB,UAMxBtrB,EAAAurB,YAAsB,SAMtBvrB,EAAAwrB,YAAsB,OAuC1BxrB,EAAA0qB,SAA0C,IAAI1uB,EAAAA,aAO9CgE,EAAAmrB,SAA0C,IAAInvB,EAAAA,aAM9CgE,EAAAorB,SAA+B,IAAIpvB,EAAAA,eCvGvD,IAAAyvB,IAqBExzB,OAAAC,eAAIuzB,GAAAtzB,UAAA,WAAQ,KAAZ,WACE,OAAOC,KAAKszB,qDAoBdD,GAAAtzB,UAAAwzB,OAAA,SAAOC,GAAP,IAAA5rB,EAAA5H,KACE,OAAO,IAAIyzB,EAAAA,WAAgB,SAACC,OACtBC,EAAsB,IAAIC,eAC1BC,EAAqB,IAAIC,SAE7B,GAAIN,EAAQO,OAASxjB,UACnBsjB,EAASG,OAAO,OAAQR,EAAQO,UAC3B,CAAA,GAAIP,EAAQK,WAAatjB,UAG9B,OAAOmjB,EAAWxtB,MAAM,sFAFxB2tB,EAAWL,EAAQK,SA0BrB,GArBAF,EAAIJ,OAAOU,WAAa,SAACzxB,OACnB0xB,EAAmB,EACnB1xB,EAAM2xB,mBACRD,EAAWhzB,KAAKkzB,MAAM5xB,EAAM6xB,OAAS7xB,EAAM3B,MAAQ,MAErD+G,EAAK0sB,iBAAiB9uB,KAAK0uB,IAG7BP,EAAIY,mBAAqB,WACA,IAAnBZ,EAAIa,aACY,KAAdb,EAAIc,QAAiBd,EAAIc,OAAS,KACpCf,EAAWluB,KAAKmuB,EAAIe,UACpBhB,EAAWiB,YAEXjB,EAAWxtB,MAAMytB,EAAIe,YAK3Bf,EAAI1c,KAAKuc,EAAQoB,OAAQpB,EAAQqB,KAAK,GACtClB,EAAImB,iBAAiB,mBAAoB,kBACrCtB,EAAQuB,QACV,IAAK,IAAI3K,KAAOoJ,EAAQuB,QACtBpB,EAAImB,iBAAiB1K,EAAKoJ,EAAQuB,QAAQ3K,IAI9CuJ,EAAIqB,KAAKnB,2BAvEdrhB,EAAAA,oDA0ED6gB,IA5DE,SAAAA,KAXQrzB,KAAAs0B,iBAAoC,IAAI7pB,EAAAA,QAY9CzK,KAAKszB,oBAAsBtzB,KAAKs0B,iBAAiBnR,mBCV/C8R,GAAuB,CAC3BvE,GACAO,GACA4B,GACAX,GACAH,IAGFmD,yBAACpxB,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACP2P,EAAAA,YACA1P,EAAAA,aACAC,EAAAA,cACAC,EAAAA,gBACAusB,EAAAA,cAEFtsB,aAAc,CACZ8wB,IAEF7wB,QAAS,CACP6wB,IAEFthB,UAAW,CACT0f,QAKJ6B,IApBA,SAAAA,MCxBA,IAAAC,IAwCEt1B,OAAAC,eACIq1B,GAAAp1B,UAAA,aAAU,KAOd,WACE,OAAOC,KAAKo1B,iBATd,SACeC,GACb,IAAK9e,OAAO+e,UAAUD,GACpB,MAAM,IAAI3S,MAAM,wCAElB1iB,KAAKo1B,YAAcC,EACnBr1B,KAAKu1B,MAAqB,EAAbF,mCAMfx1B,OAAAC,eAAIq1B,GAAAp1B,UAAA,OAAI,KAAR,WACE,OAAOC,KAAKu1B,uCAOd11B,OAAAC,eACIq1B,GAAAp1B,UAAA,MAAG,KAGP,eACMy1B,EAAkBx1B,KAAKy1B,MAAQz1B,KAAKy1B,KAAKhwB,OAAS0vB,GAAyBO,eAAiB,IAAM,GACtG,OAAO11B,KAAKy1B,KAAOz1B,KAAKy1B,KAAK3kB,UAAU,EAAGqkB,GAAyBO,gBAAkBF,EAAUx1B,KAAKy1B,UANtG,SACQrL,GACNpqB,KAAKy1B,KAAOrL,mCAWdvqB,OAAAC,eACIq1B,GAAAp1B,UAAA,OAAI,KAIR,WACE,OAAOC,KAAKgH,WANd,SACSC,GACPjH,KAAKgH,MAAQC,EACbjH,KAAK21B,iDAMP91B,OAAAC,eAAIq1B,GAAAp1B,UAAA,WAAQ,KAAZ,WACE,OAAOC,KAAK41B,2CAGd/1B,OAAAC,eAAIq1B,GAAAp1B,UAAA,QAAK,KAAT,WACE,QAAIC,KAAKoB,MACkB,QAAlBpB,KAAKoB,KAAKC,qCAYrB8zB,GAAAp1B,UAAAqJ,QAAA,WACEpJ,KAAKK,mBAAmBC,gBAM1B60B,GAAAp1B,UAAAyX,OAAA,WACExX,KAAKu1B,OAASv1B,KAAKu1B,OAGrBJ,GAAAp1B,UAAA81B,SAAA,WACE,MAAoC,WAA7B71B,KAAK81B,QAAQ91B,KAAKgH,QAG3BmuB,GAAAp1B,UAAAg2B,QAAA,WACE,OAAOrxB,MAAMqxB,QAAQ/1B,KAAKgH,QAG5BmuB,GAAAp1B,UAAAi2B,YAAA,WACE,OAAOh2B,KAAK41B,WAAqC,EAAxB51B,KAAK41B,UAAUnwB,QAM1C0vB,GAAAp1B,UAAAk2B,SAAA,SAASvwB,OACHpC,EAAetD,KAAK81B,QAAQpwB,GAChC,GAAa,cAATpC,GAAkC,SAATA,EAC3B,OAAOA,EACF,GAAa,SAATA,EACToC,EAAQ,IAAIiK,KAAKjK,GAAOqG,gBACnB,GAAa,WAATzI,EACToC,EAAQ,IAAMA,EAAQ,QACjB,CAAA,GAAa,aAATpC,EAET,OAAOoC,EAAMqG,WACRmqB,QAAQ,UAAW,IACnBA,QAAQ,SAAU,IAAM,MACxB,GAAIxxB,MAAMqxB,QAAQrwB,GACvB,OAAO1F,KAAKm2B,gBAAkB,KAAOzwB,EAAMD,OAAS,IAEtD,OAAOC,GAOTyvB,GAAAp1B,UAAA+1B,QAAA,SAAQM,GACN,GAAsB,iBAAXA,EAAqB,CAC9B,IAAKA,EACH,MAAO,OAET,GAAI1xB,MAAMqxB,QAAQK,GAChB,MAAO,aAELC,EAAa,IAAI1mB,KAAKymB,GAC1B,GAA6C,kBAAzCv2B,OAAOE,UAAUgM,SAASxG,KAAK8wB,KAC5B9f,OAAOvK,MAAMqqB,EAAKxmB,WACrB,MAAO,OAIb,cAAcumB,GAOhBjB,GAAAp1B,UAAAo2B,cAAA,eACMC,EAAcp2B,KAAKgH,MACvB,GAAIhH,KAAK61B,aAAeO,EAAOrxB,YAC3B,MAAO,aAGPuxB,EADwB,qBACmBC,KAAK,EAASxxB,YAAYgH,YACzE,OAAIuqB,GAA4B,EAAjBA,EAAQ7wB,OACd6wB,EAAQ,GAER,IAOXnB,GAAAp1B,UAAAy2B,WAAA,WAAA,IACMC,EADN7uB,EAAA5H,KAEM02B,EAAoB,KACpBC,EAAkB,KAClB32B,KAAK+1B,WAEPU,EAD0Bz2B,KAAKgH,MAAM8C,MAAM,EAAGqrB,GAAyByB,eAC5CC,IAAI,SAACC,GAC9B,OAAOlvB,EAAKquB,SAASa,KAEvBJ,EAAY,IACZC,EAAU,KAGVF,EAD4Bz2B,KAAK41B,UAAU9rB,MAAM,EAAGqrB,GAAyByB,eACnDC,IAAI,SAACzM,GAC7B,OAAOA,EAAM,KAAOxiB,EAAKquB,SAASruB,EAAKZ,MAAMojB,UAG7C2M,EAAyBN,EAAYO,KAAK,MAC1CC,EAAmBR,EAAYhxB,QAAU0vB,GAAyByB,eAC/CG,EAActxB,OAAS0vB,GAAyB+B,0BAA4B,IAAM,GACzG,OAAOR,EAAYK,EAAcjmB,UAAU,EAAGqkB,GAAyB+B,2BAChED,EAAWN,GAGZxB,GAAAp1B,UAAA41B,cAAR,WACE,GAAI31B,KAAK61B,WAEP,IAAK,IAAIzL,KADTpqB,KAAK41B,UAAY,GACD51B,KAAKgH,MACnBhH,KAAK41B,UAAU3vB,KAAKmkB,IAtMX+K,GAAAO,eAAyB,GAKzBP,GAAA+B,0BAAoC,GAKpC/B,GAAAyB,cAAwB,uBAxBxC/zB,EAAAA,UAASC,KAAA,CAAC,CACTC,gBAAiBC,EAAAA,wBAAwBC,OACzCC,SAAU,oBAEVC,SAAA,ioCACA0U,WAAY,CACVhD,EAAAA,+vDAVgDrR,EAAAA,yBAC3CJ,EAAAA,IAAGC,WAAA,CAAA,CAAAC,KA6FGC,EAAAA,mDAtDZE,EAAAA,MAAKX,KAAA,CAAC,2BAoBNW,EAAAA,MAAKX,KAAA,CAAC,qBAaNW,EAAAA,MAAKX,KAAA,CAAC,WAoJTqyB,IAhIE,SAAAA,GAAoB90B,EACYe,GADZpB,KAAAK,mBAAAA,EACYL,KAAAoB,KAAAA,EA7DxBpB,KAAAu1B,OAAiB,EACjBv1B,KAAAo1B,YAAsB,EClChC,IAAA+B,yBAQCrzB,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACAwnB,EAAAA,iBACAvnB,EAAAA,eAEFE,aAAc,CACZgxB,IAEF/wB,QAAS,CACP+wB,QAKJgC,IAfA,SAAAA,MCRA,IAAAC,IAgEEv3B,OAAAC,eAAIs3B,GAAAr3B,UAAA,eAAY,KAAhB,WACE,MAAqB,SAAdC,KAAKq3B,sCAMPD,GAAAr3B,UAAAyX,OAAP,WACE,OAAOxX,KAAKs3B,QAAQ9f,QAAQxX,KAAKs3B,QAAQtgB,SAMpCogB,GAAAr3B,UAAAkX,KAAP,WACE,OAAOjX,KAAKs3B,QAAQrgB,QAMfmgB,GAAAr3B,UAAAmX,MAAP,WACE,OAAOlX,KAAKs3B,QAAQpgB,8BAhFvBrU,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,YAEVC,SAAA,g7BAICsJ,EAAAA,UAAS3J,KAAA,CAACy0B,EAAAA,0BAWV9zB,EAAAA,MAAKX,KAAA,CAAC,wBAYNW,EAAAA,MAAKX,KAAA,CAAC,gCAUNW,EAAAA,MAAKX,KAAA,CAAC,2CAYNW,EAAAA,MAAKX,KAAA,CAAC,wBA+BTs0B,IAnFA,SAAAA,KAkBiBp3B,KAAAq3B,KAAiC,OAY/Br3B,KAAAgX,QAAkB,EAUZhX,KAAAw3B,aAAuB,QAYlBx3B,KAAAy3B,mBAA6B,EC1C3D,mBAKA3wB,GAFa4wB,GAA2Brf,EAAAA,cAAcsf,IAEtDC,IAA2CtxB,EAAAA,GAA3CQ,GAA2C4wB,IAYzC73B,OAAAC,eACI83B,GAAA73B,UAAA,iBAAc,KADlB,SACmB83B,GACjB73B,KAAK83B,gBAAkBD,EACnB73B,KAAKU,cACPV,KAAK+3B,qDAgBTH,GAAA73B,UAAA4H,gBAAA,WAAA,IAAAC,EAAA5H,KACEA,KAAKU,cAAe,EAChBV,KAAKg4B,SAAWh4B,KAAKg4B,QAAQV,UAC/Bt3B,KAAKi4B,YAAcj4B,KAAKg4B,QAAQV,QAAQY,kBAAkBnwB,UAAU,WAClEH,EAAKmwB,uBAKT/3B,KAAK+3B,qBAGPH,GAAA73B,UAAA2I,YAAA,WACM1I,KAAKi4B,cACPj4B,KAAKi4B,YAAYpvB,cACjB7I,KAAKi4B,YAAc1nB,YAQvBqnB,GAAA73B,UAAAqa,cADA,SACc5X,GACZA,EAAMwX,iBACDha,KAAKuZ,WAGJvZ,KAAKg4B,SAAWh4B,KAAKg4B,QAAQ/gB,KAC/BjX,KAAKm4B,UAELn4B,KAAKo4B,qBAOHR,GAAA73B,UAAAg4B,kBAAR,WACM/3B,KAAKg4B,UACHh4B,KAAKg4B,QAAQV,QAAQtgB,QAAUhX,KAAK83B,gBACtC93B,KAAKwK,UAAU6tB,SAASr4B,KAAKwI,YAAYlB,cAAe,UAAW,QAEnEtH,KAAKwK,UAAU6tB,SAASr4B,KAAKwI,YAAYlB,cAAe,UAAW,MAKjEswB,GAAA73B,UAAAq4B,iBAAR,WAEEE,QAAQC,KAAK,2GAtEd90B,EAAAA,MAAKX,KAAA,CAAC,yCA0CNyH,EAAAA,aAAYzH,KAAA,CAAC,QAAS,CAAC,cA+B1B80B,IAjEE,SAAAA,GAAsBI,EACFxtB,EACAhC,GAFpB,IAAAZ,EAGEd,GAAAvB,KAAAvF,OAAOA,YAHa4H,EAAAowB,QAAAA,EACFpwB,EAAA4C,UAAAA,EACA5C,EAAAY,YAAAA,EAlBZZ,EAAAlH,cAAwB,EACxBkH,EAAAkwB,iBAA2B,EAqB5BlwB,EAAKowB,SACRpwB,EAAKwwB,mBAEPxwB,EAAK4C,UAAUuM,SAASnP,EAAKY,YAAYlB,cAAe,sCC3CfhB,EAAAA,MAAAsxB,IAE3C/3B,OAAAC,eACI04B,GAAAz4B,UAAA,iBAAc,KADlB,SACmB04B,GACjBz4B,KAAKuZ,WAAqC,KAAxB,GAA8Bkf,oCASlDD,GAAAz4B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQxgB,+BAjBhBhR,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,iEAJHk0B,GAAiB/zB,WAAA,CAAA,CAAAC,KAaXC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAA+X,eAddhtB,EAAAA,iBAAWF,EAAAA,uDAS7CzG,EAAAA,MAAKX,KAAA,CAAC,qBAcT01B,IATE,SAAAA,GAAqEE,EACzDC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,gBAWKsG,EAAAA,MAAAsxB,IAE1C/3B,OAAAC,eACI+4B,GAAA94B,UAAA,gBAAa,KADjB,SACkB+4B,GAChB94B,KAAKuZ,WAAoC,KAAvB,GAA6Buf,oCASjDD,GAAA94B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQ9gB,8BAjBhB1Q,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,gEAzBHk0B,GAAiB/zB,WAAA,CAAA,CAAAC,KAkCXC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAA+X,eAnCdhtB,EAAAA,iBAAWF,EAAAA,sDA8B7CzG,EAAAA,MAAKX,KAAA,CAAC,oBAcT+1B,IATE,SAAAA,GAAqEH,EACzDC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,gBAWIsG,EAAAA,MAAAsxB,IAEzC/3B,OAAAC,eACIi5B,GAAAh5B,UAAA,gBAAa,KADjB,SACkBi5B,GAChBh5B,KAAKuZ,WAAmC,KAAtB,GAA4Byf,oCAShDD,GAAAh5B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQ/gB,6BAjBhBzQ,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,+DA9CHk0B,GAAiB/zB,WAAA,CAAA,CAAAC,KAuDXC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAA+X,eAxDdhtB,EAAAA,iBAAWF,EAAAA,sDAmD7CzG,EAAAA,MAAKX,KAAA,CAAC,mBAcTi2B,IATE,SAAAA,GAAqEL,EACzDC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,KC3DvC,IAAAi5B,IAmDEp5B,OAAAC,eAAIm5B,GAAAl5B,UAAA,gBAAa,KAAjB,WACE,QAASC,KAAK0S,WAAa1S,KAAKk5B,iDAKlCD,GAAAl5B,UAAAo5B,sBAAA,WACMn5B,KAAKo5B,eACPp5B,KAAK0S,QAAQ2mB,cAAcr5B,KAAKk5B,uCAvDrCr2B,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,gBAEVC,SAAA,mnEANOsP,EAAAA,OAAMpP,WAAA,CAAA,CAAAC,KAsDAC,EAAAA,qDAvCZE,EAAAA,MAAKX,KAAA,CAAC,8BAONW,EAAAA,MAAKX,KAAA,CAAC,sBAQNW,EAAAA,MAAKX,KAAA,CAAC,uBAQNW,EAAAA,MAAKX,KAAA,CAAC,kCAONW,EAAAA,MAAKX,KAAA,CAAC,sBAgBTm2B,IAPE,SAAAA,GAAgCvmB,GAAA1S,KAAA0S,QAAAA,EAhBhB1S,KAAA2M,MAAgB,UCvClC,IAAA2sB,IAoGEz5B,OAAAC,eAAIw5B,GAAAv5B,UAAA,eAAY,KAAhB,WACE,MAAqB,SAAdC,KAAKq3B,sCAMdx3B,OAAAC,eAAIw5B,GAAAv5B,UAAA,gBAAa,KAAjB,WACE,QAASC,KAAK0S,WAAa1S,KAAKk5B,iDAKlCI,GAAAv5B,UAAAo5B,sBAAA,WACMn5B,KAAKo5B,eACPp5B,KAAK0S,QAAQ2mB,cAAcr5B,KAAKk5B,kBAO7BI,GAAAv5B,UAAAyX,OAAP,WACE,OAAOxX,KAAKs3B,QAAQ9f,QAAQxX,KAAKs3B,QAAQtgB,SAMpCsiB,GAAAv5B,UAAAkX,KAAP,WACE,OAAOjX,KAAKs3B,QAAQrgB,QAMfqiB,GAAAv5B,UAAAmX,MAAP,WACE,OAAOlX,KAAKs3B,QAAQpgB,8BAlIvBrU,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,qBAEVC,SAAA,u5JATOsP,EAAAA,OAAMpP,WAAA,CAAA,CAAAC,KA8GAC,EAAAA,gDAjGZkJ,EAAAA,UAAS3J,KAAA,CAACy0B,EAAAA,kCAOV9zB,EAAAA,MAAKX,KAAA,CAAC,8BAMNW,EAAAA,MAAKX,KAAA,CAAC,sBAQNW,EAAAA,MAAKX,KAAA,CAAC,uBAQNW,EAAAA,MAAKX,KAAA,CAAC,uBAWNW,EAAAA,MAAKX,KAAA,CAAC,wBAWNW,EAAAA,MAAKX,KAAA,CAAC,gCAUNW,EAAAA,MAAKX,KAAA,CAAC,2CAYNW,EAAAA,MAAKX,KAAA,CAAC,8CAONW,EAAAA,MAAKX,KAAA,CAAC,sBA8CTw2B,IA7BE,SAAAA,GAAgC5mB,GAAA1S,KAAA0S,QAAAA,EApEhB1S,KAAA2M,MAAgB,UAWjB3M,KAAAq3B,KAAiC,OAW/Br3B,KAAAgX,QAAkB,EAUZhX,KAAAw3B,aAAuB,QAYlBx3B,KAAAy3B,mBAA6B,aChFPnxB,EAAAA,MAAAsxB,IAElD/3B,OAAAC,eACIy5B,GAAAx5B,UAAA,wBAAqB,KADzB,SAC0By5B,GACxBx5B,KAAKuZ,WAA4C,KAA/B,GAAqCigB,oCASzDD,GAAAx5B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQxgB,+BAjBhBhR,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,wEAJHo2B,GAAwBj2B,WAAA,CAAA,CAAAC,KAalBC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAAia,eAddlvB,EAAAA,iBAAWF,EAAAA,8DAS7CzG,EAAAA,MAAKX,KAAA,CAAC,4BAcTy2B,IATE,SAAAA,GAA4Eb,EAChEC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,gBAWYsG,EAAAA,MAAAsxB,IAEjD/3B,OAAAC,eACI25B,GAAA15B,UAAA,uBAAoB,KADxB,SACyB25B,GACvB15B,KAAKuZ,WAA2C,KAA9B,GAAoCmgB,oCASxDD,GAAA15B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQ9gB,8BAjBhB1Q,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,uEAzBHo2B,GAAwBj2B,WAAA,CAAA,CAAAC,KAkClBC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAAia,eAnCdlvB,EAAAA,iBAAWF,EAAAA,6DA8B7CzG,EAAAA,MAAKX,KAAA,CAAC,2BAcT22B,IATE,SAAAA,GAA4Ef,EAChEC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,gBAWWsG,EAAAA,MAAAsxB,IAEhD/3B,OAAAC,eACI65B,GAAA55B,UAAA,sBAAmB,KADvB,SACwB65B,GACtB55B,KAAKuZ,WAA0C,KAA7B,GAAmCqgB,oCASvDD,GAAA55B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQ/gB,6BAjBhBzQ,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,sEA9CHo2B,GAAwBj2B,WAAA,CAAA,CAAAC,KAuDlBC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAAia,eAxDdlvB,EAAAA,iBAAWF,EAAAA,4DAmD7CzG,EAAAA,MAAKX,KAAA,CAAC,0BAcT62B,IATE,SAAAA,GAA4EjB,EAChEC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,KC3DvC,IAAA65B,yBAGCh3B,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,sBAEVC,SAAA,wkDASCM,EAAAA,MAAKX,KAAA,CAAC,mCAONW,EAAAA,MAAKX,KAAA,CAAC,mCAQNW,EAAAA,MAAKX,KAAA,CAAC,4BAQNW,EAAAA,MAAKX,KAAA,CAAC,YAET+2B,IArCA,SAAAA,KA2BsB75B,KAAA85B,UAAoB,GAQxB95B,KAAA2M,MAAgB,UCtClC,IAAAotB,IAgEEl6B,OAAAC,eAAIi6B,GAAAh6B,UAAA,eAAY,KAAhB,WACE,MAAqB,SAAdC,KAAKq3B,sCAMP0C,GAAAh6B,UAAAyX,OAAP,WACE,OAAOxX,KAAKs3B,QAAQ9f,QAAQxX,KAAKs3B,QAAQtgB,SAMpC+iB,GAAAh6B,UAAAkX,KAAP,WACE,OAAOjX,KAAKs3B,QAAQrgB,QAMf8iB,GAAAh6B,UAAAmX,MAAP,WACE,OAAOlX,KAAKs3B,QAAQpgB,8BAhFvBrU,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,wBAEVC,SAAA,6iGAICsJ,EAAAA,UAAS3J,KAAA,CAACy0B,EAAAA,0BAWV9zB,EAAAA,MAAKX,KAAA,CAAC,wBAYNW,EAAAA,MAAKX,KAAA,CAAC,gCAUNW,EAAAA,MAAKX,KAAA,CAAC,2CAYNW,EAAAA,MAAKX,KAAA,CAAC,wBA+BTi3B,IAnFA,SAAAA,KAkBiB/5B,KAAAq3B,KAAiC,OAY/Br3B,KAAAgX,QAAkB,EAUZhX,KAAAw3B,aAAuB,QAYlBx3B,KAAAy3B,mBAA6B,aCnDJnxB,EAAAA,MAAAsxB,IAErD/3B,OAAAC,eACIk6B,GAAAj6B,UAAA,2BAAwB,KAD5B,SAC6Bk6B,GAC3Bj6B,KAAKuZ,WAA+C,KAAlC,GAAwC0gB,oCAS5DD,GAAAj6B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQxgB,+BAjBhBhR,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,2EAJH62B,GAA2B12B,WAAA,CAAA,CAAAC,KAarBC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAA0a,eAdd3vB,EAAAA,iBAAWF,EAAAA,iEAS7CzG,EAAAA,MAAKX,KAAA,CAAC,+BAcTk3B,IATE,SAAAA,GAA+EtB,EACnEC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,gBAWesG,EAAAA,MAAAsxB,IAEpD/3B,OAAAC,eACIo6B,GAAAn6B,UAAA,0BAAuB,KAD3B,SAC4Bo6B,GAC1Bn6B,KAAKuZ,WAA8C,KAAjC,GAAuC4gB,oCAS3DD,GAAAn6B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQ9gB,8BAjBhB1Q,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,0EAzBH62B,GAA2B12B,WAAA,CAAA,CAAAC,KAkCrBC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAA0a,eAnCd3vB,EAAAA,iBAAWF,EAAAA,gEA8B7CzG,EAAAA,MAAKX,KAAA,CAAC,8BAcTo3B,IATE,SAAAA,GAA+ExB,EACnEC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,gBAWcsG,EAAAA,MAAAsxB,IAEnD/3B,OAAAC,eACIs6B,GAAAr6B,UAAA,yBAAsB,KAD1B,SAC2Bs6B,GACzBr6B,KAAKuZ,WAA6C,KAAhC,GAAsC8gB,oCAS1DD,GAAAr6B,UAAAo4B,QAAA,WACEn4B,KAAKg4B,QAAQ/gB,6BAjBhBzQ,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,yEA9CH62B,GAA2B12B,WAAA,CAAA,CAAAC,KAuDrBC,EAAAA,UAAQ,CAAAD,KAAI+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAA0a,eAxDd3vB,EAAAA,iBAAWF,EAAAA,+DAmD7CzG,EAAAA,MAAKX,KAAA,CAAC,6BAcTs3B,IATE,SAAAA,GAA+E1B,EACnEC,EACAC,UACV9xB,GAAAvB,KAAAvF,KAAM04B,EAAQC,EAAUC,IAAW54B,KC3DvC,IAAAs6B,IAiBEz6B,OAAAC,eACIw6B,GAAAv6B,UAAA,QAAK,KAOT,WACE,OAAOC,KAAK6W,YATd,SACUlK,GACJA,IACF3M,KAAKwK,UAAUsM,YAAY9W,KAAKwI,YAAYlB,cAAe,OAAStH,KAAK6W,QACzE7W,KAAK6W,OAASlK,EACd3M,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,OAAStH,KAAK6W,+DApB3EhU,EAAAA,UAASC,KAAA,CAAC,CAETI,SAAU,0CAEVC,SAAA,8HANyBiH,EAAAA,iBAAWF,EAAAA,8CAiBnCzG,EAAAA,MAAKX,KAAA,CAAC,YAiBTw3B,IALE,SAAAA,GAAoB9vB,EACAhC,GADAxI,KAAAwK,UAAAA,EACAxK,KAAAwI,YAAAA,EAClBxI,KAAKwK,UAAUuM,SAAS/W,KAAKwI,YAAYlB,cAAe,oBC/B5D,IAAAizB,yBAYC/zB,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,kCAIZq3B,IALA,SAAAA,mCAOC/zB,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,qCAIZs3B,IALA,SAAAA,cAmBE36B,OAAAC,eAAI26B,GAAA16B,UAAA,cAAW,KAAf,WACE,OAAOC,KAAK06B,8CAUd76B,OAAAC,eAAI26B,GAAA16B,UAAA,kBAAe,KAAnB,WACE,QAAOC,KAAK26B,aAAwC,EAA1B36B,KAAK26B,YAAYl1B,wCAM7C5F,OAAAC,eAAI26B,GAAA16B,UAAA,kBAAe,KAAnB,WACE,QAAOC,KAAK46B,UAAkC,EAAvB56B,KAAK46B,SAASn1B,wCAMvC5F,OAAAC,eAAI26B,GAAA16B,UAAA,wBAAqB,KAAzB,WACE,QAASC,KAAK66B,kDAqDhBh7B,OAAAC,eAGI26B,GAAA16B,UAAA,gBAAa,KAHjB,SAGkB+6B,GAChB,GAAIA,EAAe,KACbC,EAAuB/6B,KAAKg7B,UAAUC,SAASC,EAAAA,gBAAgBC,aAAcL,GACjF96B,KAAK66B,iBAAmB76B,KAAKg7B,UAAUC,SAASC,EAAAA,gBAAgBE,MAAO,OAASL,EAAe,uCAGnGl7B,OAAAC,eAAI26B,GAAA16B,UAAA,kBAAe,KAAnB,WACE,OAAOC,KAAK66B,kDAsBdh7B,OAAAC,eAAI26B,GAAA16B,UAAA,gBAAa,KAAjB,WACE,QAASC,KAAK0S,WAAa1S,KAAKk5B,iDAOlCuB,GAAA16B,UAAAuB,SAAA,WAAA,IAAAsG,EAAA5H,KACEA,KAAKq7B,mBAAqBr7B,KAAKg4B,QAAQV,QAAQgE,aAAavzB,UAAU,SAACiP,GAChEA,IACHpP,EAAK8yB,cAAe,MAK1BD,GAAA16B,UAAA2I,YAAA,WACM1I,KAAKq7B,qBACPr7B,KAAKq7B,mBAAmBxyB,cACxB7I,KAAKq7B,mBAAqB9qB,YAI9BkqB,GAAA16B,UAAAw7B,WAAA,WACMv7B,KAAKw7B,kBACPx7B,KAAK06B,cAAgB16B,KAAK06B,eAI9BD,GAAA16B,UAAAo5B,sBAAA,WACMn5B,KAAKo5B,gBACPp5B,KAAK0S,QAAQ2mB,cAAcr5B,KAAKk5B,iBAChCl5B,KAAKkX,UAOFujB,GAAA16B,UAAAyX,OAAP,WACE,OAAOxX,KAAKg4B,QAAQxgB,UAMfijB,GAAA16B,UAAAkX,KAAP,WACE,OAAOjX,KAAKg4B,QAAQ/gB,QAMfwjB,GAAA16B,UAAAmX,MAAP,WACE,OAAOlX,KAAKg4B,QAAQ9gB,8BAjLvBrU,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,uBAEVC,SAAA,8rDACA0U,WAAY,CAAEhD,EAAAA,4oDAtBPuiB,GAAiB/zB,WAAA,CAAA,CAAAC,KAiJX+L,EAAAA,OAAMvM,KAAA,CAACuc,EAAAA,WAAW,WAAM,OAAA+X,eAvJ9B3kB,EAAAA,OAAMpP,WAAA,CAAA,CAAAC,KAwJAC,EAAAA,kBAvJsB4G,EAAAA,sDAuClC8e,EAAAA,gBAAenmB,KAAA,CAACy3B,sBAEhBtR,EAAAA,gBAAenmB,KAAA,CAAC03B,0BA2BhB/2B,EAAAA,MAAKX,KAAA,CAAC,8BAONW,EAAAA,MAAKX,KAAA,CAAC,sBAQNW,EAAAA,MAAKX,KAAA,CAAC,wBAQNW,EAAAA,MAAKX,KAAA,CAAC,yBAQNW,EAAAA,MAAKX,KAAA,CAAC,kCAONW,EAAAA,MAAKX,KAAA,CAAC,0CAQNW,EAAAA,MAAKX,KAAA,CAAC,+BAmBNW,EAAAA,MAAKX,KAAA,CAAC,uBAQNW,EAAAA,MAAKX,KAAA,CAAC,YA6DT23B,IApDE,SAAAA,GAAiEzC,EACjCtlB,EACZsoB,GAF6Ch7B,KAAAg4B,QAAAA,EACjCh4B,KAAA0S,QAAAA,EACZ1S,KAAAg7B,UAAAA,EAxHZh7B,KAAA06B,cAAwB,MCL5Be,GAA0B,CAC9BrE,GACAoB,GACAK,GACAE,GAEAE,GAEAK,GACAC,GACAE,GACAE,GAEAE,GAEAE,GACAC,GACAE,GACAE,GAEAE,GAEAG,GACAF,GACAC,IAGFkB,yBAAC53B,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACA23B,EAAAA,qBACAC,EAAAA,iBACAC,EAAAA,iBACA33B,EAAAA,gBACAD,EAAAA,cACA63B,EAAAA,cACAC,EAAAA,kBAEF53B,aAAc,CACZs3B,IAEFr3B,QAAS,CACPq3B,QAKJC,IApBA,SAAAA,cCnDEM,SAAW,WACXC,OAAS,cAITC,YAAc,cACdC,cAAgB,qBAIhBC,QAAU,UACVC,QAAU,eAIVC,WAAa,aACbF,QAAU,UACVG,KAAO,QAOTC,IA8BE38B,OAAAC,eAAI08B,GAAAz8B,UAAA,OAAI,KAGR,WACE,OAAOC,KAAKy8B,WAJd,SAASpF,GACPr3B,KAAK08B,aAAerF,mCAStBx3B,OAAAC,eAAI08B,GAAAz8B,UAAA,QAAK,KAKT,WACE,OAAOC,KAAK28B,YANd,SAAUj3B,GACR1F,KAAK28B,OAASj3B,EAEd1F,KAAKK,mBAAmBC,gDA6B1Bk8B,GAAAz8B,UAAAyb,UAAA,WAGMxb,KAAK48B,aAAoC,EAArB58B,KAAKyI,eACvBzI,KAAK68B,YACP78B,KAAK88B,qBACL98B,KAAKK,mBAAmBC,iBAK9Bk8B,GAAAz8B,UAAAg9B,UAAA,WAGE,OAAI/8B,KAAK48B,aAAe58B,KAAKg9B,eACpBzsB,UAEAvQ,KAAKwH,OAAYxH,KAAKwH,OAAM,KAAO,SAI9Cg1B,GAAAz8B,UAAAk9B,kBAAA,WACE,OAAOj9B,KAAKk9B,iBAGdV,GAAAz8B,UAAAo9B,qBAAA,eAEMC,EAAsBp9B,KAAKi9B,oBAAsB,GACrD,OAAO/7B,KAAKm8B,IAAID,IAGlBZ,GAAAz8B,UAAAu9B,WAAA,WACE,OAAOt9B,KAAKsD,OAASi6B,GAAYvB,UAGnCQ,GAAAz8B,UAAAy9B,SAAA,WACE,OAAOx9B,KAAKsD,OAASi6B,GAAYtB,QAGnCO,GAAAz8B,UAAAi9B,aAAA,WACE,OAAOh9B,KAAKiU,QAAUwpB,GAAanB,YAGrCE,GAAAz8B,UAAA68B,UAAA,WACE,OAAO58B,KAAKiU,QAAUwpB,GAAarB,SAGrCI,GAAAz8B,UAAA29B,kBAAA,SAAkBl7B,GAEXA,EAAMm7B,UAGT39B,KAAK49B,wBAFL59B,KAAK69B,wBAMTrB,GAAAz8B,UAAA89B,qBAAA,WACE79B,KAAK89B,aAAat4B,KAAK+K,YAGzBisB,GAAAz8B,UAAA69B,sBAAA,WAKE59B,KAAK0F,MAAQ,EAEb1F,KAAKK,mBAAmBC,eACxBN,KAAK+9B,cAAcv4B,KAAK+K,YAM1BisB,GAAAz8B,UAAAi+B,iBAAA,WAUE,OANAh+B,KAAKy8B,MAAQz8B,KAAK08B,aAElB18B,KAAK88B,qBAEL98B,KAAK68B,WAAY,EACjB78B,KAAKK,mBAAmBC,eACjBN,KAAK89B,aAAa3a,gBAM3BqZ,GAAAz8B,UAAAk+B,kBAAA,WAQE,OAPAj+B,KAAK68B,WAAY,EAIjB78B,KAAKy8B,MAAQyB,GAAYhC,YAEzBl8B,KAAKK,mBAAmBC,eACjBN,KAAK+9B,cAAc5a,gBAMpBqZ,GAAAz8B,UAAA+8B,mBAAR,eAEMqB,EApLkC,IAsLlCn+B,KAAKwH,OACP22B,EAAWn+B,KAAKwH,OAEPxH,KAAKwH,SAAW+I,YACzB4tB,EAAWn+B,KAAKyI,eAIhBzI,KAAKk9B,gBADDiB,GAAYA,GA7LoB,IA8Lbj9B,KAAKS,MAAMw8B,GA9LE,KAuMhC3B,GAAAz8B,UAAA0I,YAAR,WACE,OAAiBzI,KAAKwI,YAAyB,cACxBxI,KAAKwI,YAAyB,cAAEjB,wBAAwBC,OAExE,wBAzMV3E,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,aAEVC,SAAA,g+BACA0U,WAAY,CACV7C,EAAAA,s5BAnCoF9K,EAAAA,kBAA5C1G,EAAAA,qBAyO5Cg5B,IAtIE,SAAAA,GAAoBh0B,EACAnI,GADAL,KAAAwI,YAAAA,EACAxI,KAAAK,mBAAAA,EA5DZL,KAAA89B,aAA6B,IAAIrzB,EAAAA,QACjCzK,KAAA+9B,cAA8B,IAAItzB,EAAAA,QAClCzK,KAAAy8B,MAAqByB,GAAY/B,cACjCn8B,KAAA08B,aAA4BwB,GAAY/B,cACxCn8B,KAAA28B,OAAiB,EACjB38B,KAAAk9B,gBAjBgC,IAsBxCl9B,KAAA68B,WAAqB,EA6BrB78B,KAAAiU,MAAsBwpB,GAAalB,KAYnCv8B,KAAAsD,KAAoBi6B,GAAYvB,SAMhCh8B,KAAA2M,MAAuC,UCtEzC,IAAAyxB,IAcSA,GAAAr+B,UAAAs+B,0BAAP,SAAiC7K,GAAjC,IAAA5rB,EAAA5H,KACE,EAAmCwH,OAAS+I,UAC5C,EAAmC0D,MAAQwpB,GAAanB,eAGpDgC,EAFAC,EAA0Bv+B,KAAKw+B,qBAC/BC,GAAmB,EAsBvB,OApBAF,EAAWG,WAAWz2B,KACpB02B,EAAAA,wBACA52B,UAAU,SAAC62B,GACX,GAAiB,EAAbA,IAAmBH,EACrBA,GAAU,EACVH,EAAa12B,EAAKi3B,iBAClBN,EAAWO,aAAeR,EAAWS,OAAO,IAAIC,EAAAA,gBAAgBxC,KAChE50B,EAAKq3B,YAAYzL,EAAS+K,EAAWO,aAAaI,UAClDX,EAAWO,aAAaI,SAASlB,mBACjCO,EAAWO,aAAaK,kBAAkBC,qBACrC,GAAIR,GAAc,GAAKH,EAAS,CACrCA,GAAU,MACNY,EAAqBd,EAAWO,aAAaI,SAASjB,oBAAoBl2B,UAAU,WACtFs3B,EAAKx2B,cACL01B,EAAWO,aAAaQ,UACxBhB,EAAWiB,SACXjB,EAAWkB,eAIVjB,GAUFH,GAAAr+B,UAAA0/B,uBAAP,SAA8BjM,EAA2B3sB,EAC3BD,GAC5B,EAAmCY,OAAS+I,UAC5C,EAAmC0D,MAAQwpB,GAAarB,YACpDmC,EAA0Bv+B,KAAK0/B,iBAAiBlM,GAChDiL,GAAmB,EAevB,OAdAF,EAAWO,aAAaI,SAAS9yB,QAAU,IAAIuzB,EAAAA,eAAe/4B,EAAaC,GAC3EA,EAAiB+Q,QACjB/Q,EAAiB+4B,OAAOrB,EAAWO,aAAae,SAAU,GAC1DtB,EAAWG,WAAWz2B,KACpB02B,EAAAA,wBACA52B,UAAU,SAAC62B,GACM,EAAbA,IAAmBH,GACrBA,GAAU,EACVF,EAAWO,aAAaI,SAASlB,oBACxBY,GAAc,GAAKH,IAC5BA,GAAU,EACVF,EAAWO,aAAaI,SAASjB,uBAG9BM,GASFH,GAAAr+B,UAAA+/B,uBAAP,SAA8BtM,EAA2B3sB,EAC3BD,EAAkCm5B,OAC1Dz4B,EAA0CV,EAAYgyB,WAAwB,cAClF,EAAmCpxB,OAASF,EAAc04B,mBACxD14B,EAAc04B,mBAAmBC,aAAe1vB,UAClD,EAAmC0D,MAAQwpB,GAAalB,SACpDgC,EAA0Bv+B,KAAK0/B,iBAAiBlM,GAChDiL,GAAmB,EAEnByB,EAAsCr5B,EAAiB6Q,mBAAmB9Q,EAAam5B,GAgC3F,OA/BAxB,EAAWG,WAAWz2B,KACpB02B,EAAAA,wBACA52B,UAAU,SAAC62B,GACX,GAAiB,EAAbA,IAAmBH,EACrBA,GAAU,EAEU53B,EAAiByM,QAAQirB,EAAWO,aAAae,UACzD,IACVh5B,EAAiB04B,OAAO14B,EAAiByM,QAAQ4sB,IACjDr5B,EAAiB+4B,OAAOrB,EAAWO,aAAae,SAAU,IAE5DtB,EAAWO,aAAaI,SAASlB,wBAC5B,GAAIY,GAAc,GAAKH,EAAS,CACrCA,GAAU,MACN0B,EAAqB5B,EAAWO,aAAaI,SAASjB,oBAAoBl2B,UAAU,WACtFo4B,EAAKt3B,cAEehC,EAAiByM,QAAQ4sB,GACjC,IACVr5B,EAAiB04B,OAAO14B,EAAiByM,QAAQirB,EAAWO,aAAae,WACzEh5B,EAAiB+4B,OAAOM,EAAY,IAMtCA,EAAWd,gBACXc,EAAW5/B,oBAIVi+B,GAMDH,GAAAr+B,UAAA8+B,eAAR,eACM7qB,EAAuB,IAAIosB,EAAAA,cAG/B,OAFApsB,EAAMqsB,aAAc,EACpBrsB,EAAMssB,iBAAmBtgC,KAAKugC,SAASC,WAAWC,SAASC,qBAAqBC,mBACzE3gC,KAAKugC,SAASv7B,OAAOgP,IAMtBoqB,GAAAr+B,UAAA2/B,iBAAR,SAAyBlM,OACnBoN,EAAuB5gC,KAAKw+B,qBAIhC,OAHAoC,EAAQ9B,aAAe9+B,KAAK6gC,0BAC3BC,wBAAwBtE,IAAoBx3B,OAAOhF,KAAK+gC,WACzD/gC,KAAKi/B,YAAYzL,EAASoN,EAAQ9B,aAAaI,UACxC0B,GAMDxC,GAAAr+B,UAAAy+B,mBAAR,eACMwC,EAAwB,IAAIv2B,EAAAA,QAChC,MAAO,CACLi0B,WAAYsC,EAAQ7d,eACpB6d,QAASA,EACTlC,aAAcvuB,UACd0wB,MAAO,IAOH7C,GAAAr+B,UAAAk/B,YAAR,SAAoBzL,EAAkC0L,GACpDA,EAASjrB,MAAQuf,EAAQvf,MACrBuf,EAAQlwB,OAASiN,YACnB2uB,EAAS57B,KAAOkwB,EAAQlwB,MAEtBkwB,EAAQhsB,SAAW+I,YACrB2uB,EAAS13B,OAASgsB,EAAQhsB,QAExBgsB,EAAQ6D,OAAS9mB,YACnB2uB,EAAS7H,KAAO7D,EAAQ6D,MAEtB7D,EAAQ7mB,QAAU4D,YACpB2uB,EAASvyB,MAAQ6mB,EAAQ7mB,6BA5K9B6F,EAAAA,uDA3BoB0uB,EAAAA,gCAGZ9E,EAAAA,eAFA+E,EAAAA,YAyMT/C,IA5KE,SAAAA,GAAoByC,EACAN,EACAQ,GAFA/gC,KAAA6gC,0BAAAA,EACA7gC,KAAAugC,SAAAA,EACAvgC,KAAA+gC,UAAAA,EA4KtB,SAAgBK,GACZpW,EAA0BqW,EAAoDC,EAAkBC,GAClG,OAAOvW,GAAU,IAAIoT,GAAiBiD,EAA0BC,EAASC,GAG3E,OAAaC,GAAqC,CAEhDtiB,QAASkf,GACTlT,KAAM,CAAC,CAAC,IAAI3nB,EAAAA,SAAY,IAAI4nB,EAAAA,SAAYiT,IAAmB8C,EAAAA,yBAA0B9E,EAAAA,QAAS+E,EAAAA,UAC9F/V,WAAYgW,OChMZ,SAAAK,GAAY1U,GAEV,GADA/sB,KAAKkQ,KAAO6c,EAAO7c,MACdlQ,KAAKkQ,KACR,MAAMwS,MAAM,mDAEd1iB,KAAKq3B,KAAOtK,EAAOsK,KAAOtK,EAAOsK,KAAO6G,GAAY/B,cACpDn8B,KAAKsD,KAAOypB,EAAOzpB,KAAOypB,EAAOzpB,KAAOi6B,GAAYvB,SACpDh8B,KAAK2M,MAAQogB,EAAOpgB,MAAQogB,EAAOpgB,MAAQ,eAQDrG,EAAAA,MAAAm7B,IAU9CC,IAJE,SAAAA,GAAY3U,GAAZ,IAAAnlB,EACEd,GAAAvB,KAAAvF,KAAM+sB,IAAO/sB,YACb4H,EAAK+5B,SAAW5U,EAAO4U,SAAW5U,EAAO4U,SAAWC,GAAgBvF,kBA2BtEwF,GAAA9hC,UAAA+hC,gBAAA,SAAgB/U,EAAmClmB,EACnCD,EAAkCm5B,OAC5CgC,EAA4C,IAAIL,GAAyB3U,GAC7E,GAAI/sB,KAAKgiC,SAASD,EAAgB7xB,MAChC,MAAMwS,MAAM,oEAAoEqf,EAAgB7xB,KAAI,KAOtG,OALI6xB,EAAgBJ,WAAaC,GAAgBxF,QAC/Cp8B,KAAKgiC,SAASD,EAAgB7xB,MAAQlQ,KAAKiiC,gBAAgBxC,uBAAuBsC,EAAiBl7B,EAAkBD,GAErH5G,KAAKgiC,SAASD,EAAgB7xB,MAAQlQ,KAAKiiC,gBAAgBnC,uBAAuBiC,EAAiBl7B,EAAkBD,EAAam5B,GAE7H//B,KAAKgiC,SAASD,EAAgB7xB,OAUhC2xB,GAAA9hC,UAAAiF,OAAP,SAAc+nB,OACRmV,EAAoC,IAAIT,GAAgB1U,GAC5D/sB,KAAKmiC,gBAAgBD,EAAiBhyB,MACtClQ,KAAKgiC,SAASE,EAAiBhyB,MAAQlQ,KAAKiiC,gBAAgB5D,0BAA0B6D,IASjFL,GAAA9hC,UAAAoiC,gBAAP,SAAuBjyB,GACjBlQ,KAAKgiC,SAAS9xB,KAChBlQ,KAAKgiC,SAAS9xB,GAAM8wB,QAAQn4B,cACxB7I,KAAKgiC,SAAS9xB,GAAM4uB,cACtB9+B,KAAKgiC,SAAS9xB,GAAM4uB,aAAaQ,UAEnCt/B,KAAKgiC,SAAS9xB,GAAQK,iBACfvQ,KAAKgiC,SAAS9xB,KAiBlB2xB,GAAA9hC,UAAAqiC,SAAP,SAAgBlyB,EAAkCmyB,GAAlD,IAAAz6B,EAAA5H,KAEE,YAFc,IAAAkQ,IAAAA,EAAA,wBAAkC,IAAAmyB,IAAAA,EAAA,GAE5CriC,KAAKgiC,SAAS9xB,IAChBmyB,EAAYA,EAAY,EAAI,EAAIA,EAChCriC,KAAKgiC,SAAS9xB,GAAM+wB,OAASoB,EAC7BriC,KAAKgiC,SAAS9xB,GAAM8wB,QAAQx7B,KAAKxF,KAAKgiC,SAAS9xB,GAAM+wB,QAC9C,IAIFjhC,KAAKsiC,UAAUpyB,GAMlBlQ,KAAKuiC,cAAcryB,GALnBlQ,KAAKsiC,UAAUpyB,GAAQ6O,WAAW,WAChCnX,EAAKw6B,SAASlyB,EAAMmyB,MAOnB,IAgBFR,GAAA9hC,UAAAiK,QAAP,SAAekG,EAAkCsyB,GAG/C,QAHa,IAAAtyB,IAAAA,EAAA,wBAAkC,IAAAsyB,IAAAA,EAAA,GAE/CxiC,KAAKuiC,cAAcryB,GACflQ,KAAKgiC,SAAS9xB,GAAO,CAEvB,GADAsyB,EAAWA,EAAW,EAAI,EAAIA,EACE,EAA5BxiC,KAAKgiC,SAAS9xB,GAAM+wB,MAAW,KAC7BA,EAAgBjhC,KAAKgiC,SAAS9xB,GAAM+wB,MACxCA,GAASuB,EACTxiC,KAAKgiC,SAAS9xB,GAAM+wB,MAAQA,EAAQ,EAAI,EAAIA,EAG9C,OADAjhC,KAAKgiC,SAAS9xB,GAAM8wB,QAAQx7B,KAAKxF,KAAKgiC,SAAS9xB,GAAM+wB,QAC9C,EAET,OAAO,GAcFY,GAAA9hC,UAAA0iC,WAAP,SAAkBvyB,GAGhB,YAHgB,IAAAA,IAAAA,EAAA,mBAEhBlQ,KAAKuiC,cAAcryB,KACflQ,KAAKgiC,SAAS9xB,KAChBlQ,KAAKgiC,SAAS9xB,GAAM+wB,MAAQ,EAC5BjhC,KAAKgiC,SAAS9xB,GAAM8wB,QAAQx7B,KAAKxF,KAAKgiC,SAAS9xB,GAAM+wB,QAC9C,IAcJY,GAAA9hC,UAAA0c,SAAP,SAAgBvM,EAAcxK,GAC5B,GAAI1F,KAAKgiC,SAAS9xB,GAAO,KACnBgvB,EAA+Bl/B,KAAKgiC,SAAS9xB,GAAM4uB,aAAaI,SACpE,GAAIA,EAAS7H,OAAS6G,GAAYhC,aAAegD,EAASrC,UAExD,OADAqC,EAASx5B,MAAQA,GACV,EAGX,OAAO,GAODm8B,GAAA9hC,UAAAwiC,cAAR,SAAsBryB,GACpBwyB,aAAa1iC,KAAKsiC,UAAUpyB,WACrBlQ,KAAKsiC,UAAUpyB,yBAnLzBsC,EAAAA,uDA1CQ4rB,MA+NTyD,IA/KE,SAAAA,GAAoBI,GAAAjiC,KAAAiiC,gBAAAA,EAHZjiC,KAAAgiC,SAAyC,GACzChiC,KAAAsiC,UAAkC,GAGxCtiC,KAAKgF,OAAO,CACVkL,KAAM,oBA+KZ,SAAgByyB,GACZ3X,EAA0B4X,GAC5B,OAAO5X,GAAU,IAAI6W,GAAiBe,GAGxC,IAAaC,GAA6B,CAExC3jB,QAAS2iB,GACT3W,KAAM,CAAC,CAAC,IAAI3nB,EAAAA,SAAY,IAAI4nB,EAAAA,SAAY0W,IAAmBzD,IAC3DhT,WAAYuX,OCtOd,SAAAG,KACS9iC,KAAA+iC,UAAiBxyB,UACjBvQ,KAAAgjC,UAAiBzyB,WAItB0yB,GAA6B,EAEjCC,IAgBErjC,OAAAC,eACIojC,GAAAnjC,UAAA,OAAI,KADR,SACSmQ,GACFlQ,KAAKmjC,OACJjzB,IACFlQ,KAAKmjC,MAAQjzB,oCAWnBrQ,OAAAC,eACIojC,GAAAnjC,UAAA,QAAK,KADT,SACUqjC,GACHpjC,KAAKmjC,QACRnjC,KAAKmjC,MAAQ,oBAAsBF,MAErCjjC,KAAKgiC,SAASe,UAAY/iC,KAAKgiC,SAASgB,UAAYI,EAC/CA,EAGHpjC,KAAKqjC,gBAAgBZ,WAAWziC,KAAKmjC,OAFrCnjC,KAAKqjC,gBAAgBjB,SAASpiC,KAAKmjC,wCAWvCtjC,OAAAC,eACIojC,GAAAnjC,UAAA,OAAI,KADR,SACSuD,GACP,OAAQA,GACN,KAAKi6B,GAAYtB,OACfj8B,KAAKsjC,MAAQ/F,GAAYtB,OACzB,MACF,QACEj8B,KAAKsjC,MAAQ/F,GAAYvB,2CAU/Bn8B,OAAAC,eACIojC,GAAAnjC,UAAA,OAAI,KADR,SACSs3B,GACP,OAAQA,GACN,KAAK6G,GAAYhC,YACfl8B,KAAKy8B,MAAQyB,GAAYhC,YACzB,MACF,QACEl8B,KAAKy8B,MAAQyB,GAAY/B,gDAU/Bt8B,OAAAC,eACIojC,GAAAnjC,UAAA,WAAQ,KADZ,SACawjC,GACX,OAAQA,GACN,KAAK3B,GAAgBxF,QACnBp8B,KAAKwjC,UAAY5B,GAAgBxF,QACjC,MACF,QACEp8B,KAAKwjC,UAAY5B,GAAgBvF,0CAkBvC6G,GAAAnjC,UAAAuB,SAAA,WACEtB,KAAKyjC,sBAMPP,GAAAnjC,UAAA2I,YAAA,WACE1I,KAAKqjC,gBAAgBlB,gBAAgBniC,KAAKmjC,OAC1CnjC,KAAK0jC,YAAcnzB,WAOb2yB,GAAAnjC,UAAA0jC,mBAAR,WACE,IAAKzjC,KAAKmjC,MACR,MAAM,IAAIzgB,MAAM,gDAIb1iB,KAAK0jC,cACR1jC,KAAK0jC,YAAc1jC,KAAKqjC,gBAAgBvB,gBAAgB,CACtD5xB,KAAMlQ,KAAKmjC,MACX7/B,KAAMtD,KAAKsjC,MACXjM,KAAMr3B,KAAKy8B,MACX9vB,MAAO3M,KAAK2M,MACZg1B,SAAU3hC,KAAKwjC,WACdxjC,KAAK2jC,kBAAmB3jC,KAAK4jC,aAAc5jC,KAAKgiC,iCAzIxDx7B,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,4DAlBHwD,EAAAA,wBAAkBD,EAAAA,mBAGlBo7B,qCA8BNp+B,EAAAA,MAAKX,KAAA,CAAC,4BAeNW,EAAAA,MAAKX,KAAA,CAAC,gCAkBNW,EAAAA,MAAKX,KAAA,CAAC,+BAiBNW,EAAAA,MAAKX,KAAA,CAAC,mCAiBNW,EAAAA,MAAKX,KAAA,CAAC,oCAgBNW,EAAAA,MAAKX,KAAA,CAAC,qBAyCTogC,IAvCE,SAAAA,GAAoBS,EACAC,EACAP,GAFArjC,KAAA2jC,kBAAAA,EACA3jC,KAAA4jC,aAAAA,EACA5jC,KAAAqjC,gBAAAA,EAlGZrjC,KAAAgiC,SAA6B,IAAIc,GA8FhB9iC,KAAA2M,MAAuC,cCvG5Dk3B,GAA0B,CAC9BrH,GACA0G,IAGIY,GAA2C,CAC/CtH,IAGFuH,yBAACjgC,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACAggC,EAAAA,qBACAC,EAAAA,yBACAC,EAAAA,cACAzT,EAAAA,cAEFtsB,aAAc,CACZ0/B,IAEFz/B,QAAS,CACPy/B,IAEFlwB,UAAW,CACT6tB,GACAqB,IAEFxU,gBAAiB,CACfyV,QAKJC,IAxBA,SAAAA,MCvBA,IAAAI,IA6CEA,GAAApkC,UAAAqkC,gBAAA,SAAgBlxB,GACVlT,KAAKqkC,UAAUvf,IAAI5R,EAAMG,iBAC3BH,EAAQlT,KAAKqkC,UAAUvf,IAAI5R,EAAMG,gBAEnCrT,KAAKskC,cAAcpxB,GAAOrK,qBACnB7I,KAAKskC,cAAcpxB,UACnBlT,KAAKukC,kBAAkBrxB,IAMzBixB,GAAApkC,UAAAmT,MAAP,SAAaA,GAIX,OAHIlT,KAAKqkC,UAAUvf,IAAI5R,EAAMG,iBAC3BH,EAAQlT,KAAKqkC,UAAUvf,IAAI5R,EAAMG,gBAE5BrT,KAAKwkC,QAAQC,IAAI,WACtB,OAAOC,WAAWxxB,GAAOyxB,WAStBR,GAAApkC,UAAA6kC,cAAP,SAAqB1xB,GAQnB,OAPIlT,KAAKqkC,UAAUvf,IAAI5R,EAAMG,iBAC3BH,EAAQlT,KAAKqkC,UAAUvf,IAAI5R,EAAMG,gBAE9BrT,KAAKskC,cAAcpxB,KACtBlT,KAAKskC,cAAcpxB,GAAS,IAAI2xB,EAAAA,gBAAyBH,WAAWxxB,GAAOyxB,SAC3E3kC,KAAKukC,kBAAkBrxB,GAASlT,KAAKskC,cAAcpxB,GAAOiQ,gBAErDnjB,KAAKukC,kBAAkBrxB,IAMzBixB,GAAApkC,UAAA+kC,UAAP,WACE9kC,KAAKkjB,aAGCihB,GAAApkC,UAAAmjB,UAAR,sBACWhQ,GACP6xB,EAAKP,QAAQC,IAAI,WACf78B,EAAKo9B,mBAAmB9xB,KAH9B,IAAAtL,EAAA5H,YACE,IAAK,IAAIkT,KAASlT,KAAKskC,gBAAdpxB,IAOHixB,GAAApkC,UAAAilC,mBAAR,SAA2B9xB,GACzBlT,KAAKskC,cAAcpxB,GAAO1N,KAAKk/B,WAAWxxB,GAAOyxB,+BA/FpDnyB,EAAAA,uDAHoByyB,EAAAA,UAoGrBd,IAxFE,SAAAA,GAAoBK,GAApB,IAAA58B,EAAA5H,KAAoBA,KAAAwkC,QAAAA,EANZxkC,KAAAklC,WAAqB,EAErBllC,KAAAqkC,UAAiC,IAAInb,IACrClpB,KAAAskC,cAA4D,GAC5DtkC,KAAAukC,kBAA0D,GAGhEvkC,KAAKqkC,UAAUpgB,IAAI,KAAM,sBACzBjkB,KAAKqkC,UAAUpgB,IAAI,QAAS,sBAC5BjkB,KAAKqkC,UAAUpgB,IAAI,KAAM,6CACzBjkB,KAAKqkC,UAAUpgB,IAAI,QAAS,sBAC5BjkB,KAAKqkC,UAAUpgB,IAAI,KAAM,8CACzBjkB,KAAKqkC,UAAUpgB,IAAI,QAAS,uBAC5BjkB,KAAKqkC,UAAUpgB,IAAI,KAAM,+CACzBjkB,KAAKqkC,UAAUpgB,IAAI,QAAS,uBAC5BjkB,KAAKqkC,UAAUpgB,IAAI,KAAM,uBACzBjkB,KAAKqkC,UAAUpgB,IAAI,YAAa,4BAChCjkB,KAAKqkC,UAAUpgB,IAAI,WAAY,2BAC/BjkB,KAAKqkC,UAAUpgB,IAAI,QAAS,SAE5BjkB,KAAKklC,WAAY,EAEjBllC,KAAKmlC,oBAAsBnlC,KAAKwkC,QAAQY,kBAAkB,WACxD,OAAOvmB,EAAAA,UAAUwmB,OAAQ,UAAUt9B,UAAU,WAEtCH,EAAKs9B,YACRt9B,EAAKs9B,WAAY,EACjBnmB,WAAW,WACTnX,EAAKsb,YACLtb,EAAKs9B,WAAY,GAChB,UAkEb,SAAgBI,GACZta,EAAwBua,GAC1B,OAAOva,GAAU,IAAImZ,GAAeoB,GAGtC,IAAaC,GAA2B,CAEtCtmB,QAASilB,GACTjZ,KAAM,CAAC,CAAC,IAAI3nB,EAAAA,SAAY,IAAI4nB,EAAAA,SAAYgZ,IAAiBc,EAAAA,QACzD7Z,WAAYka,IC/GdG,IAwBE5lC,OAAAC,eACI2lC,GAAA1lC,UAAA,QAAK,KADT,SACUmT,GACR,IAAKA,EACH,MAAM,IAAIwP,MAAM,+CAElB1iB,KAAK0lC,OAASxyB,mCAOhBrT,OAAAC,eACI2lC,GAAA1lC,UAAA,aAAU,KADd,SACe4lC,GACb3lC,KAAK4lC,YAAcD,mCAOrB9lC,OAAAC,eACI2lC,GAAA1lC,UAAA,UAAO,KADX,SACY8lC,GACV7lC,KAAK8lC,SAAWD,mCAOlBhmC,OAAAC,eACI2lC,GAAA1lC,UAAA,SAAM,KADV,SACWgmC,GACT/lC,KAAKgmC,QAAUD,mCAKjBN,GAAA1lC,UAAAuB,SAAA,WAAA,IAAAsG,EAAA5H,KACEA,KAAKimC,aAAajmC,KAAKkmC,cAAchzB,MAAMlT,KAAK0lC,SAChD1lC,KAAKmmC,cAAgBnmC,KAAKkmC,cAActB,cAAc5kC,KAAK0lC,QAAQ39B,UAAU,SAAC48B,GAC5E/8B,EAAKq+B,aAAatB,MAItBc,GAAA1lC,UAAA2I,YAAA,WACM1I,KAAKmmC,eACPnmC,KAAKmmC,cAAct9B,eAIf48B,GAAA1lC,UAAAkmC,aAAR,SAAqBtB,GACnB3kC,KAAKomC,SAAWzB,EAChB3kC,KAAKqmC,oBACLrmC,KAAKsmC,iBACLtmC,KAAKumC,iBAGCd,GAAA1lC,UAAAsmC,kBAAR,WACE,IAAK,IAAIG,KAAQxmC,KAAK4lC,YAChB5lC,KAAKomC,SACPpmC,KAAKwK,UAAUi8B,aAAazmC,KAAKwI,YAAYlB,cAAek/B,EAAMxmC,KAAK4lC,YAAYY,IAEnFxmC,KAAKwK,UAAUk8B,gBAAgB1mC,KAAKwI,YAAYlB,cAAek/B,IAK7Df,GAAA1lC,UAAAumC,eAAR,WAAA,IAAA1+B,EAAA5H,KACEA,KAAK8lC,SAASn9B,QAAQ,SAAC2R,GACjB1S,EAAKw+B,SACPx+B,EAAK4C,UAAUuM,SAASnP,EAAKY,YAAYlB,cAAegT,GAExD1S,EAAK4C,UAAUsM,YAAYlP,EAAKY,YAAYlB,cAAegT,MAKzDmrB,GAAA1lC,UAAAwmC,cAAR,WACE,IAAK,IAAItyB,KAASjU,KAAKgmC,QACjBhmC,KAAKomC,SACPpmC,KAAKwK,UAAU6tB,SAASr4B,KAAKwI,YAAYlB,cAAe2M,EAAOjU,KAAKgmC,QAAQ/xB,IAE5EjU,KAAKwK,UAAUm8B,YAAY3mC,KAAKwI,YAAYlB,cAAe2M,yBApGlEzN,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,gEANHkH,EAAAA,iBADWF,EAAAA,kBAIXi6B,sCAoBN1gC,EAAAA,MAAKX,KAAA,CAAC,qCAYNW,EAAAA,MAAKX,KAAA,CAAC,oCASNW,EAAAA,MAAKX,KAAA,CAAC,gCASNW,EAAAA,MAAKX,KAAA,CAAC,kBAyDT2iC,IApDE,SAAAA,GAAoBj7B,EAA8BhC,EAAiC09B,GAA/DlmC,KAAAwK,UAAAA,EAA8BxK,KAAAwI,YAAAA,EAAiCxI,KAAAkmC,cAAAA,EA7C3ElmC,KAAAomC,UAAoB,EACpBpmC,KAAA4lC,YAAuC,GACvC5lC,KAAAgmC,QAAmC,GACnChmC,KAAA8lC,SAAqB,OCTzBc,GAAwB,CAC5BnB,IAGFoB,yBAAC/iC,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,cAEFG,aAAc,CACZyiC,IAEFxiC,QAAS,CACPwiC,IAEFjzB,UAAW,CACT6xB,QAKJqB,IAhBA,SAAAA,MCZA,IAAAC,yBAECjkC,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,UACVC,SAAA,unIAKF2jC,IAPA,SAAAA,UCOMC,GAAuB,CAC3BD,IAGFE,yBAACljC,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACAijC,EAAAA,cACAlL,EAAAA,kBAEF53B,aAAc,CACZ4iC,IAEF3iC,QAAS,CACP2iC,QAKJC,IAfA,SAAAA,MCAE,YAAmB3mC,GAAAL,KAAAK,mBAAAA,MAMrByG,GAFaogC,GAA0B9uB,EAAAA,0BAA0B+uB,IAEjEC,IA8B4C9gC,EAAAA,GA9B5CQ,GA8B4CogC,IA2D1CrnC,OAAAC,eAAIsnC,GAAArnC,UAAA,QAAK,KAAT,WACE,QAAIC,KAAKoB,MACkB,QAAlBpB,KAAKoB,KAAKC,qCAUrB+lC,GAAArnC,UAAAuB,SAAA,WAAA,IAAAsG,EAAA5H,KACEA,KAAK2sB,OAAO0a,UAAUjsB,aAAanT,KACjCC,EAAAA,aAAalI,KAAKqb,UAClBisB,EAAAA,KAAK,IACLv/B,UAAU,SAACrC,GACXkC,EAAK2/B,mBAAmB7hC,MAO5B0hC,GAAArnC,UAAAga,MAAA,WACE/Z,KAAK2sB,OAAO5S,SAGdqtB,GAAArnC,UAAAynC,WAAA,WACExnC,KAAK+M,OAAOnK,KAAK2N,YAGnB62B,GAAArnC,UAAAwa,gBAAA,SAAgB/X,GACdA,EAAM+X,mBAGR6sB,GAAArnC,UAAA0nC,aAAA,SAAajlC,GACXxC,KAAKua,gBAAgB/X,GACrBxC,KAAK0nC,SAAS9kC,KAAK5C,KAAK0F,QAM1B0hC,GAAArnC,UAAA4nC,YAAA,WACE3nC,KAAK0F,MAAQ,GACb1F,KAAKK,mBAAmBC,eACxBN,KAAK4nC,QAAQhlC,KAAK2N,YAGZ62B,GAAArnC,UAAAwnC,mBAAR,SAA2B7hC,GACzB1F,KAAK6nC,iBAAiBjlC,KAAK8C,yBA5I9B7C,EAAAA,UAASC,KAAA,CAAC,CACT6Q,UAAW,CAAC,CACVuL,QAASC,EAAAA,kBACTC,YAAaC,EAAAA,WAAW,WAAM,OAAA+nB,KAC9B9nB,OAAO,IAETpc,SAAU,kBACVC,SAAA,+rCAEAJ,gBAAiBC,EAAAA,wBAAwBC,OACzCsc,OAAQ,CAAC,SACT1H,WAAY,CACV9D,EAAAA,QAAQ,cAAe,CACrBC,EAAAA,MAAM,YAAaC,EAAAA,MAAM,CACvBzE,UAAW,oBACXs4B,QAAS,UAEX9zB,EAAAA,MAAM,aAAcC,EAAAA,MAAM,CACxBzE,UAAW,mBACXs4B,QAAS,UAEX9zB,EAAAA,MAAM,OAASC,EAAAA,MAAM,CACnBzE,UAAW,iBACXs4B,QAAS,WAEXzzB,EAAAA,WAAW,YAAaI,EAAAA,QAAQ,kBAChCJ,EAAAA,WAAW,YAAaI,EAAAA,QAAQ,whEAzC7BrR,EAAAA,IAAGC,WAAA,CAAA,CAAAC,KA+GGC,EAAAA,kBAlHmBC,EAAAA,sDAkD/BiJ,EAAAA,UAAS3J,KAAA,CAAC0c,EAAAA,8BAMV/b,EAAAA,MAAKX,KAAA,CAAC,qCAMNW,EAAAA,MAAKX,KAAA,CAAC,mCAMNW,EAAAA,MAAKX,KAAA,CAAC,iCAMNW,EAAAA,MAAKX,KAAA,CAAC,kCAONW,EAAAA,MAAKX,KAAA,CAAC,uCAMNY,EAAAA,OAAMZ,KAAA,CAAC,oCAMPY,EAAAA,OAAMZ,KAAA,CAAC,2BAMPY,EAAAA,OAAMZ,KAAA,CAAC,yBAMPY,EAAAA,OAAMZ,KAAA,CAAC,WAwDVskC,IA/CE,SAAAA,GAAgChmC,EACpBf,GADZ,IAAAuH,EAEEd,GAAAvB,KAAAvF,KAAMK,IAAmBL,YAFK4H,EAAAxG,KAAAA,EApDRwG,EAAAmgC,eAAyB,EAM9BngC,EAAAyT,SAAmB,IAalBzT,EAAAogC,UAAoB,SAMdpgC,EAAAigC,iBAAyC,IAAIjkC,EAAAA,aAMrDgE,EAAA8/B,SAAiC,IAAI9jC,EAAAA,aAMtCgE,EAAAggC,QAA8B,IAAIhkC,EAAAA,aAMnCgE,EAAAmF,OAA6B,IAAInJ,EAAAA,eClGjD,YAAmBvD,GAAAL,KAAAK,mBAAAA,MAMrByG,GAFamhC,GAAwB7vB,EAAAA,0BAA0B8vB,IAE/DC,IA0B0C7hC,EAAAA,GA1B1CQ,GA0B0CmhC,IAKxCpoC,OAAAC,eAAIqoC,GAAApoC,UAAA,gBAAa,KAAjB,WACE,OAAOC,KAAKooC,gDA+EdD,GAAApoC,UAAAsoC,cAAA,YACOroC,KAAKsoC,eAAiBtoC,KAAKooC,gBAC9BpoC,KAAK0F,MAAQ,GACb1F,KAAKuoC,gBACIvoC,KAAKsoC,eAAkBtoC,KAAKooC,gBACrCpoC,KAAKwoC,aAAazuB,QAEpB/Z,KAAKyoC,oBAGPN,GAAApoC,UAAA0oC,iBAAA,WACEzoC,KAAKooC,gBAAkBpoC,KAAKooC,eAC5BpoC,KAAKK,mBAAmBC,gBAG1B6nC,GAAApoC,UAAA2oC,qBAAA,SAAqBhjC,GACnB1F,KAAK6nC,iBAAiBjlC,KAAK8C,IAG7ByiC,GAAApoC,UAAA0nC,aAAA,SAAa/hC,GACX1F,KAAK0nC,SAAS9kC,KAAK8C,IAGrByiC,GAAApoC,UAAAwoC,YAAA,WACEvoC,KAAK4nC,QAAQhlC,KAAK2N,YAGpB43B,GAAApoC,UAAAynC,WAAA,WACExnC,KAAK+M,OAAOnK,KAAK2N,iCA3IpB1N,EAAAA,UAASC,KAAA,CAAC,CACT6Q,UAAW,CAAC,CACVuL,QAASC,EAAAA,kBACTC,YAAaC,EAAAA,WAAW,WAAM,OAAA8oB,KAC9B7oB,OAAO,IAETpc,SAAU,gBACVC,SAAA,+2BAEAJ,gBAAiBC,EAAAA,wBAAwBC,OACzCsc,OAAQ,CAAC,SACT1H,WAAY,CACV9D,EAAAA,QAAQ,aAAc,CACpBC,EAAAA,MAAM,IAAKC,EAAAA,MAAM,CACfoQ,MAAO,KACPskB,OAAQ,SAEV30B,EAAAA,MAAM,IAAMC,EAAAA,MAAM,CAChBoQ,MAAO,OACPskB,OAAQ5zB,EAAAA,cAEVV,EAAAA,WAAW,SAAUI,EAAAA,QAAQ,kBAC7BJ,EAAAA,WAAW,SAAUI,EAAAA,QAAQ,k7BApCkDjR,EAAAA,4DA2ClFiJ,EAAAA,UAAS3J,KAAA,CAACskC,sBAWV3jC,EAAAA,MAAKX,KAAA,CAAC,gCAONW,EAAAA,MAAKX,KAAA,CAAC,iCAONW,EAAAA,MAAKX,KAAA,CAAC,oCAMNW,EAAAA,MAAKX,KAAA,CAAC,mCAMNW,EAAAA,MAAKX,KAAA,CAAC,mCAMNW,EAAAA,MAAKX,KAAA,CAAC,sCAMNW,EAAAA,MAAKX,KAAA,CAAC,yCAMNY,EAAAA,OAAMZ,KAAA,CAAC,oCAMPY,EAAAA,OAAMZ,KAAA,CAAC,2BAMPY,EAAAA,OAAMZ,KAAA,CAAC,yBAMPY,EAAAA,OAAMZ,KAAA,CAAC,WAuCVqlC,IArCE,SAAAA,GAAY9nC,GAAZ,IAAAuH,EACEd,GAAAvB,KAAAvF,KAAMK,IAAmBL,YA7EnB4H,EAAAwgC,gBAA0B,EAYfxgC,EAAAghC,SAAmB,SAOjBhhC,EAAAihC,WAAqB,SAOtBjhC,EAAAogC,UAAoB,SAMhBpgC,EAAAmgC,eAAyB,EAM9BngC,EAAAyT,SAAmB,IAMdzT,EAAA0gC,eAAyB,EAYvB1gC,EAAAigC,iBAAyC,IAAIjkC,EAAAA,aAMrDgE,EAAA8/B,SAAiC,IAAI9jC,EAAAA,aAMtCgE,EAAAggC,QAA8B,IAAIhkC,EAAAA,aAMnCgE,EAAAmF,OAA6B,IAAInJ,EAAAA,eCpHnD,IAAAklC,yBAYChlC,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACP2P,EAAAA,YACA1P,EAAAA,aACAmc,EAAAA,eACAlc,EAAAA,cACAC,EAAAA,iBAEFC,aAAc,CACZijC,GACAe,IAEF/jC,QAAS,CACPgjC,GACAe,QAKJW,IAnBA,SAAAA,MCZA,IAAAC,IA4BElpC,OAAAC,eAAIipC,GAAAhpC,UAAA,eAAY,KAAhB,WACE,OAAOC,KAAKgpC,mBAMd,SAAiBC,GACfjpC,KAAKgpC,cAAgBC,EACrBjpC,KAAKK,mBAAmBC,gDAM1BT,OAAAC,eAAIipC,GAAAhpC,UAAA,QAAK,KAAT,WACE,OAAOC,KAAKkpC,wCAMdrpC,OAAAC,eACIipC,GAAAhpC,UAAA,iBAAc,KADlB,WAIE,OAAOC,KAAKgpC,cAAgBz4B,UAAY,wCAO1Cw4B,GAAAhpC,UAAA4H,gBAAA,WAAA,IAAAC,EAAA5H,KAEE+e,WAAW,WACTnX,EAAKshC,OAAuBthC,EAAKY,YAAyB,cAAEjB,wBAAwB8c,MACpFzc,EAAKvH,mBAAmBC,kBAO5ByoC,GAAAhpC,UAAAopC,iBAAA,SAAiB3mC,GACfA,EAAM+X,kBACN/X,EAAMwX,uCAjETnX,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,kCAEVC,SAAA,uOAEAimC,KAAM,CACJC,QAAO,4BAETtmC,gBAAiBC,EAAAA,wBAAwBC,4pBAfzCiH,EAAAA,kBAIA1G,EAAAA,8DA4CCkJ,EAAAA,YAAW5J,KAAA,CAAC,oBA2BfimC,IApBE,SAAAA,GAAoBvgC,EACAnI,GADAL,KAAAwI,YAAAA,EACAxI,KAAAK,mBAAAA,EArCZL,KAAAgpC,eAAyB,EACzBhpC,KAAAkpC,OAAiB,EAEzBlpC,KAAAspC,cAAwB,gBAExBtpC,KAAAupC,cAAwB,EC1B1B,IAAAC,IAyDEA,GAAAzpC,UAAAuB,SAAA,WAAA,IAAAsG,EAAA5H,KACEA,KAAKypC,oBAAsB7qB,EAAAA,MACzBC,EAAAA,UAAUwmB,OAAQ,UAAUp9B,KAC1BC,EAAAA,aAAa,KAEflI,KAAK0pC,cAAcvmB,eAAelb,KAChC02B,EAAAA,yBAEF52B,UAAU,WACLH,EAAKs9B,YACRt9B,EAAKs9B,WAAY,EACjBnmB,WAAW,WACTnX,EAAK+hC,uBACL/hC,EAAKs9B,WAAY,EACjBt9B,EAAKvH,mBAAmBC,gBACvB,SAKTkpC,GAAAzpC,UAAAyb,UAAA,WACMxb,KAAKwI,aAAexI,KAAKwI,YAAYlB,eACvCtH,KAAK0pC,cAAclkC,KAAKxF,KAAK4pC,qBAIjCJ,GAAAzpC,UAAAkM,mBAAA,WACEjM,KAAK6pC,gBACL7pC,KAAKK,mBAAmBC,gBAG1BkpC,GAAAzpC,UAAA2I,YAAA,WACE1I,KAAKypC,oBAAoB5gC,eAM3BhJ,OAAAC,eAAI0pC,GAAAzpC,UAAA,qBAAkB,KAAtB,eACMgJ,EAAqC/I,KAAKwI,YAAyB,cAEnEyL,EAA6BoxB,OAAOyE,iBAAiB/gC,GACrDghC,EAAqB54B,SAAS8C,EAAM81B,WAAY,IAChDC,EAAsB74B,SAAS8C,EAAM+1B,YAAa,IAClDC,EAAqB94B,SAAS8C,EAAMg2B,WAAY,IAChDC,EAAsB/4B,SAAS8C,EAAMi2B,YAAa,IAClDC,EAAsBh5B,SAAS8C,EAAMk2B,YAAa,IAClDC,EAAuBj5B,SAAS8C,EAAMm2B,aAAc,IAExD,OAAOrhC,EAAQxB,wBAAwB8c,MAAQ0lB,EAAaC,EAAcC,EAAaC,EAAcC,EAAcC,mCAMrHvqC,OAAAC,eAAI0pC,GAAAzpC,UAAA,QAAK,KAAT,WACE,OAAOC,KAAKqqC,aAAerqC,KAAKqqC,aAAa5kC,OAAS,mCAMhD+jC,GAAAzpC,UAAA8pC,cAAR,WAAA,IAAAjiC,EAAA5H,KACMsqC,EAA2CtqC,KAAKqqC,aAAahjC,UACpC,EAAzBijC,EAAgB7kC,SAElB6kC,EAAgBA,EAAgB7kC,OAAS,GAAG8jC,cAAe,GAE7De,EAAgB3hC,QAAQ,SAAC4hC,GACvBA,EAAWjB,cAAgB1hC,EAAK0hC,iBAI5BE,GAAAzpC,UAAA4pC,qBAAR,WAKE,QAJIa,EAAuCxqC,KAAKqqC,aAAahjC,UACzDojC,EAAwB,EACxBC,EAAwC,GAEnCplC,EAAYklC,EAAY/kC,OAAS,EAAQ,GAALH,EAAQA,IAAK,KACpDilC,EAAoCC,EAAYllC,GAG/CmlC,EAAgBF,EAAWlmB,MAASrkB,KAAK4pC,oBAC5CW,EAAWI,cAAe,EAC1BD,EAAazkC,KAAKskC,IAGlBA,EAAWI,cAAe,EAE5BF,GAAiBF,EAAWlmB,MAE9BrkB,KAAK4qC,kBAAoBF,EACzB1qC,KAAKK,mBAAmBC,qCA1H3BuC,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,iBAEVC,SAAA,8BAEAimC,KAAM,CACJC,QAAO,kBAETtmC,gBAAiBC,EAAAA,wBAAwBC,wIAzBzCiH,EAAAA,kBADA1G,EAAAA,4DAmCCylB,EAAAA,gBAAenmB,KAAA,CAACimC,2BAOhBtlC,EAAAA,MAAKX,KAAA,CAAC,oBAqGT0mC,IAnGE,SAAAA,GAAoBhhC,EACAnI,GADAL,KAAAwI,YAAAA,EACAxI,KAAAK,mBAAAA,EAfZL,KAAAypC,oBAAoC7pB,EAAAA,aAAaC,MACjD7f,KAAA0pC,cAAiC,IAAIj/B,EAAAA,QACrCzK,KAAAklC,WAAqB,EAK7BllC,KAAA4qC,kBAA6C,GAKrB5qC,KAAAspC,cAAwB,gBCnDlD,IAAAuB,yBAOC/mC,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACAC,EAAAA,eAEFE,aAAc,CACZqlC,GACAT,IAEF3kC,QAAS,CACPolC,GACAT,QAKJ8B,IAhBA,SAAAA,iBCEEtO,KAAO,OACPuO,SAAW,WACXC,SAAW,gBAM6BzkC,EAAAA,MAAAC,EAAAA,8CAHzCC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,2EAfkCuD,EAAAA,mBACrCC,EAAAA,oBAoBTskC,IAHE,SAAAA,GAAYpkC,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,gBAOIsG,EAAAA,MAAAC,EAAAA,8CAH3CC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,6EAxBkCuD,EAAAA,mBACrCC,EAAAA,oBA6BTukC,IAHE,SAAAA,GAAYrkC,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,gBAOIsG,EAAAA,MAAAC,EAAAA,8CAH3CC,EAAAA,UAAS1D,KAAA,CAAC,CACTI,SAAU,6EAjCkCuD,EAAAA,mBACrCC,EAAAA,oBAsCTwkC,IAHE,SAAAA,GAAYtkC,EAA+BC,UACzCC,GAAAvB,KAAAvF,KAAM4G,EAAaC,IAAiB7G,KAIxC,mBAKA8G,GAFaqkC,GAAmBxc,EAAAA,mBAAmBtW,EAAAA,cAAc+yB,KAEjEC,IAKqC/kC,EAAAA,GALrCQ,GAKqCqkC,IAMnCtrC,OAAAC,eAAIurC,GAAAtrC,UAAA,cAAW,KAAf,WACE,OAAOC,KAAKsrC,gDAyBdzrC,OAAAC,eACIurC,GAAAtrC,UAAA,SAAM,KAGV,WACE,OAAOC,KAAKurC,aALd,SACWrvB,GACTlc,KAAKwrC,WAAW1yB,EAAAA,sBAAsBoD,qCAWxCrc,OAAAC,eACIurC,GAAAtrC,UAAA,QAAK,KAaT,WACE,OAAOC,KAAKyrC,YAfd,SACUz3B,GACR,OAAQA,GACN,KAAK03B,GAAUX,SACb/qC,KAAKyrC,OAASC,GAAUX,SACxB,MACF,KAAKW,GAAUZ,SACb9qC,KAAKyrC,OAASC,GAAUZ,SACxB,MACF,QACE9qC,KAAKyrC,OAASC,GAAUnP,uCAwB9B8O,GAAAtrC,UAAAuB,SAAA,WACEtB,KAAKsrC,eAAiB,IAAI3L,EAAAA,eAAe3/B,KAAK2rC,SAAU3rC,KAAK2jC,oBAO/D0H,GAAAtrC,UAAAyX,OAAA,WACE,OAAOxX,KAAKwrC,YAAYxrC,KAAKurC,UAO/BF,GAAAtrC,UAAAkX,KAAA,WACE,OAAOjX,KAAKwrC,YAAW,IAOzBH,GAAAtrC,UAAAmX,MAAA,WACE,OAAOlX,KAAKwrC,YAAW,IAMzBH,GAAAtrC,UAAA6rC,WAAA,WACE,OAAO5rC,KAAKyrC,SAAWC,GAAUX,UAInCM,GAAAtrC,UAAA8b,iBAAA,SAAiB3F,GACXA,GAAKlW,KAAKurC,UACZvrC,KAAKurC,SAAU,EACfvrC,KAAK6rC,mBASDR,GAAAtrC,UAAAyrC,WAAR,SAAmBM,GACjB,OAAI9rC,KAAKuZ,UAGLvZ,KAAKurC,UAAYO,KACnB9rC,KAAKurC,QAAUO,GAEb9rC,KAAK+rC,eAEL/rC,KAAK6rC,kBAEA,IAKHR,GAAAtrC,UAAAgsC,aAAR,WACE/rC,KAAKgsC,YAAYppC,KAAK2N,YAGhB86B,GAAAtrC,UAAA8rC,eAAR,WACE7rC,KAAKisC,cAAcrpC,KAAK2N,iCAzJ3B1N,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,UACVqc,OAAQ,CAAC,WAAY,iBACrBpc,SAAA,2GAhDOuD,EAAAA,uDA4DN+F,EAAAA,UAAS3J,KAAA,CAAC2D,EAAAA,gCACV6D,EAAAA,aAAYxH,KAAA,CAACkoC,yBACb1gC,EAAAA,aAAYxH,KAAA,CAACmoC,yBACb3gC,EAAAA,aAAYxH,KAAA,CAACooC,mBAObznC,EAAAA,MAAKX,KAAA,CAAC,2BAMNW,EAAAA,MAAKX,KAAA,CAAC,4BAMNW,EAAAA,MAAKX,KAAA,CAAC,yBAaNW,EAAAA,MAAKX,KAAA,CAAC,8BAsBNY,EAAAA,OAAMZ,KAAA,CAAC,oCAMPY,EAAAA,OAAMZ,KAAA,CAAC,kBA6EVuoC,IA3EE,SAAAA,GAAoB1H,GAApB,IAAA/7B,EACEd,GAAAvB,KAAAvF,OAAOA,YADW4H,EAAA+7B,kBAAAA,EAzEZ/7B,EAAA2jC,SAAmB,EACnB3jC,EAAA6jC,OAAoBC,GAAUnP,KAgEjB30B,EAAAokC,YAAkC,IAAIpoC,EAAAA,aAMpCgE,EAAAqkC,cAAoC,IAAIroC,EAAAA,uBC/G/DsoC,SAAW,WACXC,WAAa,kBAkBbtsC,OAAAC,eACIssC,GAAArsC,UAAA,eAAY,KADhB,SACiBssC,GACXA,IACFrsC,KAAKssC,OAASD,EACdrsC,KAAKusC,mDAIT1sC,OAAAC,eAAIssC,GAAArsC,UAAA,QAAK,KAAT,WACE,OAAOC,KAAKssC,OAAOjlC,2CAQrBxH,OAAAC,eACIssC,GAAArsC,UAAA,OAAI,KASR,WACE,OAAOC,KAAKy8B,WAXd,SACSpF,GACP,OAAQA,GACN,KAAKmV,GAASL,WACZnsC,KAAKy8B,MAAQ+P,GAASL,WACtB,MACF,QACEnsC,KAAKy8B,MAAQ+P,GAASN,2CAkB5BE,GAAArsC,UAAAkM,mBAAA,WACEjM,KAAKusC,kBAMPH,GAAArsC,UAAA2I,YAAA,WACE1I,KAAKysC,oBAMPL,GAAArsC,UAAA2sC,aAAA,WACE,OAAO1sC,KAAKy8B,QAAU+P,GAASL,YAMjCC,GAAArsC,UAAA4sC,WAAA,WACE,OAAO3sC,KAAKy8B,QAAU+P,GAASN,UAGjCE,GAAArsC,UAAA6sC,eAAA,WACE,OAEY,EAFL5sC,KAAKssC,OAAO15B,OAAO,SAACi6B,GACzB,OAAOA,EAAK3wB,SACXzW,QAOG2mC,GAAArsC,UAAA+sC,iBAAR,SAAyBD,GACvB,GAAI7sC,KAAK+sC,WAAaF,EAAM,KACtBE,EAA4B/sC,KAAK+sC,SAEjCC,EAA0B,CAC5BC,QAFFjtC,KAAK+sC,SAAWF,EAGdE,SAAUA,GAEZ/sC,KAAKktC,kBAAkBL,GACvB7sC,KAAKmtC,aAAavqC,KAAKoqC,KAOnBZ,GAAArsC,UAAAmtC,kBAAR,SAA0BE,GACxBptC,KAAKssC,OAAO15B,OAAO,SAACi6B,GAA0B,OAAAA,IAASO,IACtDzkC,QAAQ,SAACkkC,GACRA,EAAK3wB,QAAS,KAIVkwB,GAAArsC,UAAAwsC,eAAR,WAAA,IAAA3kC,EAAA5H,KACEA,KAAKqtC,cAAgB,GACrBrtC,KAAKssC,OAAOjlC,UAAUsB,QAAQ,SAACkkC,OACzBS,EAA6BT,EAAKb,YAAY7oB,eAAepb,UAAU,WACzEH,EAAKklC,iBAAiBD,KAExBjlC,EAAKylC,cAAcpnC,KAAKqnC,MAIpBlB,GAAArsC,UAAA0sC,iBAAR,WACMzsC,KAAKqtC,gBACPrtC,KAAKqtC,cAAc1kC,QAAQ,SAAC4kC,GAC1BA,EAAK1kC,gBAEP7I,KAAKqtC,cAAgB98B,iCAlI1B1N,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,WAEVC,SAAA,6xEAEAimC,KAAM,CACJC,QAAO,k7BASRpgB,EAAAA,gBAAenmB,KAAA,CAACuoC,kBAiBhB5nC,EAAAA,MAAKX,KAAA,CAAC,8BAmBNY,EAAAA,OAAMZ,KAAA,CAAC,iBAkFVspC,IArIA,SAAAA,KAYUpsC,KAAAy8B,MAAkB+P,GAASN,SAuCblsC,KAAAmtC,aAA+C,IAAIvpC,EAAAA,aC9D3E,mBAKAkD,GAFa0mC,GAAyB7e,EAAAA,mBAAmBtW,EAAAA,cAAco1B,KAEvEC,IAM2CpnC,EAAAA,GAN3CQ,GAM2C0mC,IA6BzCE,GAAA3tC,UAAA6rC,WAAA,WACE,OAAO5rC,KAAKgU,QAAU03B,GAAUX,UAMlC2C,GAAA3tC,UAAA4tC,WAAA,WACE,OAAO3tC,KAAKgU,QAAU03B,GAAUZ,+BA3CnCjoC,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,iBACVqc,OAAQ,CAAC,WAAY,iBAErBpc,SAAA,q/FAOCM,EAAAA,MAAKX,KAAA,CAAC,0BAMNW,EAAAA,MAAKX,KAAA,CAAC,yBAONW,EAAAA,MAAKX,KAAA,CAAC,2BAMNW,EAAAA,MAAKX,KAAA,CAAC,eAeT4qC,IA7CA,SAAAA,KAAA,IAAA9lC,EAAA,OAAAd,IAAAA,GAAA8mC,MAAA5tC,KAAAoG,YAAApG,YAwBkB4H,EAAAoM,MAAmB03B,GAAUnP,OCnC/C,IAAAsR,IAkBEhuC,OAAAC,eAAI+tC,GAAA9tC,UAAA,aAAU,KAAd,WACE,OAAOC,KAAKkgC,aAC2C,EAAhDlgC,KAAKkgC,WAAW54B,cAAcgF,SAAS7G,UAAgBzF,KAAKkgC,WAAW54B,cAAciF,YAAYC,yCAK1G3M,OAAAC,eAAI+tC,GAAA9tC,UAAA,aAAU,KAAd,WACE,OAAOC,KAAK8tC,aAC2C,EAAhD9tC,KAAK8tC,WAAWxmC,cAAcgF,SAAS7G,UAAgBzF,KAAK8tC,WAAWxmC,cAAciF,YAAYC,yCAK1G3M,OAAAC,eAAI+tC,GAAA9tC,UAAA,aAAU,KAAd,WACE,OAAOC,KAAK+tC,aAC2C,EAAhD/tC,KAAK+tC,WAAWzmC,cAAcgF,SAAS7G,UAAgBzF,KAAK+tC,WAAWzmC,cAAciF,YAAYC,yCAmB1GqhC,GAAA9tC,UAAA6rC,WAAA,WACE,OAAO5rC,KAAKgU,QAAU03B,GAAUX,+BAhDnCloC,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,eAEVC,SAAA,wnBACA0U,WAAY,CACVhD,EAAAA,i0BAKDpI,EAAAA,UAAS3J,KAAA,CAAC,aAAc,CAAE4mB,KAAMxf,EAAAA,iCAOhCuC,EAAAA,UAAS3J,KAAA,CAAC,aAAc,CAAE4mB,KAAMxf,EAAAA,iCAOhCuC,EAAAA,UAAS3J,KAAA,CAAC,aAAc,CAAE4mB,KAAMxf,EAAAA,6BAWhCzG,EAAAA,MAAKX,KAAA,CAAC,yBAONW,EAAAA,MAAKX,KAAA,CAAC,YAQT+qC,IAlDA,SAAAA,KA0CkB7tC,KAAAgU,MAAmB03B,GAAUnP,gBC1BHj2B,EAAAA,MAAA6kC,IAa1CtrC,OAAAC,eACIkuC,GAAAjuC,UAAA,QAAK,KAaT,WACE,OAAOC,KAAKyrC,YAfd,SACUz3B,GACR,OAAQA,GACN,KAAK03B,GAAUX,SACb/qC,KAAKyrC,OAASC,GAAUX,SACxB,MACF,KAAKW,GAAUZ,SACb9qC,KAAKyrC,OAASC,GAAUZ,SACxB,MACF,QACE9qC,KAAKyrC,OAASC,GAAUnP,uCA0B9B18B,OAAAC,eACIkuC,GAAAjuC,UAAA,SAAM,KAIV,WACE,OAAOC,KAAKurC,aANd,SACWrvB,GACTlc,KAAKurC,QAAUzyB,EAAAA,sBAAsBoD,GACrClc,KAAKK,mBAAmBC,gDAiB1B0tC,GAAAjuC,UAAAkuC,aAAA,SAAaC,GACPluC,KAAKuZ,WACP20B,EAAMl0B,iBACNk0B,EAAMC,kDAvFXtrC,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,8BAEVC,SAAA,yfACAoc,OAAQ,CAAC,WAAY,iBACrBxc,gBAAiBC,EAAAA,wBAAwBC,OAEzCmmC,KAAM,CACJgF,uBAAwB,OACxBC,kBAAmB,kCACnBC,kBAAmB,mBACnBC,uBAAwB,mBACxBC,UAAW,4jBAnB8BhrC,EAAAA,yBAA0B0G,EAAAA,8CAmCpEzG,EAAAA,MAAKX,KAAA,CAAC,wBAuBNW,EAAAA,MAAKX,KAAA,CAAC,2BAONW,EAAAA,MAAKX,KAAA,CAAC,4BAMNW,EAAAA,MAAKX,KAAA,CAAC,4BAaNW,EAAAA,MAAKX,KAAA,CAAC,eAcTkrC,IAZE,SAAAA,GAAoB3tC,EACDu4B,GADnB,IAAAhxB,EAEEd,GAAAvB,KAAAvF,OAAOA,YAFW4H,EAAAvH,mBAAAA,EACDuH,EAAAgxB,WAAAA,EA/DXhxB,EAAA2jC,SAAmB,EACnB3jC,EAAA6jC,OAAoBC,GAAUnP,OCzBxC,IAAAkS,IA6DE5uC,OAAAC,eAAI2uC,GAAA1uC,UAAA,qBAAkB,KAAtB,eACMgJ,EAAqC/I,KAAKwI,YAAyB,cAGnEyL,EAA6BoxB,OAAOyE,iBAAiB/gC,GACrDghC,EAAqB54B,SAAS8C,EAAM81B,WAAY,IAChDC,EAAsB74B,SAAS8C,EAAM+1B,YAAa,IAClDC,EAAqB94B,SAAS8C,EAAMg2B,WAAY,IAChDC,EAAsB/4B,SAAS8C,EAAMi2B,YAAa,IAClDC,EAAsBh5B,SAAS8C,EAAMk2B,YAAa,IAClDC,EAAuBj5B,SAAS8C,EAAMm2B,aAAc,IAExD,OAAOrhC,EAAQxB,wBAAwB8c,MAAQ0lB,EAAaC,EAAcC,EAAaC,EAAcC,EAAcC,mCASrHqE,GAAA1uC,UAAAkM,mBAAA,WAAA,IAAArE,EAAA5H,KACE4e,EAAAA,MACE5e,KAAK0pC,cAAcvmB,eAAelb,KAChC02B,EAAAA,wBAEF3+B,KAAK0uC,eAAeC,OAAO,KAC3B3uC,KAAKoB,KAAOpB,KAAKoB,KAAKutC,OAASC,EAAAA,GAAGr+B,WAClCvQ,KAAKssC,OAAOxkC,SACZG,KACAioB,EAAAA,UAAUlwB,KAAK2vB,aACf5nB,UAAU,WACVH,EAAKinC,kBACLjnC,EAAKknC,mBACLlnC,EAAKvH,mBAAmBC,iBAE1BN,KAAK6uC,kBACL7uC,KAAKK,mBAAmBC,gBAG1BmuC,GAAA1uC,UAAAokB,sBAAA,WACMnkB,KAAKwI,aAAexI,KAAKwI,YAAYlB,eACvCtH,KAAK0pC,cAAclkC,KAAKxF,KAAK4pC,oBAE3B5pC,KAAK+uC,yBACP/uC,KAAKgvC,4BACLhvC,KAAK+uC,wBAAyB,EAC9B/uC,KAAKK,mBAAmBC,iBAI5BmuC,GAAA1uC,UAAA2I,YAAA,WACE1I,KAAK2vB,WAAWnqB,OAChBxF,KAAK2vB,WAAWgF,YAMlB8Z,GAAA1uC,UAAAkvC,eAAA,SAAezsC,GACb,OAAQA,EAAMiY,SACZ,KAAKmD,EAAAA,WACH5d,KAAKkvC,cAAc,UACnB1sC,EAAMwX,iBACN,MACF,KAAKgE,EAAAA,YACHhe,KAAKkvC,cAAc,SACnB1sC,EAAMwX,mBAUZy0B,GAAA1uC,UAAA+uC,iBAAA,WACE9uC,KAAKmvC,0BACLnvC,KAAKovC,0BACLpvC,KAAKgvC,6BAIPP,GAAA1uC,UAAAsvC,oBAAA,WACE,OAAOrvC,KAAKoB,MAA4B,QAApBpB,KAAKoB,KAAKsE,MAAkB,MAAQ,OAI1D+oC,GAAA1uC,UAAAivC,0BAAA,eACQM,EAAoD,QAA/BtvC,KAAKqvC,uBAAmCrvC,KAAKuvC,eAAiBvvC,KAAKuvC,eAE9FvvC,KAAKwvC,UAAUloC,cAAc2M,MAAMzE,UAAY,cAActO,KAAKkzB,MAAMkb,GAAW,MAKhD,QAA/BtvC,KAAKqvC,sBACPrvC,KAAKyvC,mBAAmBnoC,cAAcid,WAAa,EAEnDvkB,KAAKyvC,mBAAmBnoC,cAAcid,WAAavkB,KAAK0vC,yBAK5D7vC,OAAAC,eAAI2uC,GAAA1uC,UAAA,iBAAc,KAAlB,WAA+B,OAAOC,KAAK2vC,qBAC3C,SAAmBz5B,GACjBlW,KAAK2vC,gBAAkBzuC,KAAKkV,IAAI,EAAGlV,KAAK2U,IAAI7V,KAAK0vC,wBAAyBx5B,IAI1ElW,KAAK+uC,wBAAyB,EAC9B/uC,KAAKovC,2DAOPX,GAAA1uC,UAAAmvC,cAAA,SAAcU,GAEZ5vC,KAAKuvC,iBAAiC,WAAdK,GAA0B,EAAI,GAAK5vC,KAAKyvC,mBAAmBnoC,cAAcuoC,YAAc,GAQjHpB,GAAA1uC,UAAAovC,wBAAA,eACQW,EACF9vC,KAAKwvC,UAAUloC,cAAcyoC,YAAc/vC,KAAKwI,YAAYlB,cAAcuoC,YAEzEC,IACH9vC,KAAKuvC,eAAiB,GAGpBO,IAAc9vC,KAAKgwC,yBACrBhwC,KAAKK,mBAAmBC,eAG1BN,KAAKgwC,wBAA0BF,GASjCrB,GAAA1uC,UAAAqvC,wBAAA,WAEEpvC,KAAKiwC,qBAA+C,IAAxBjwC,KAAKuvC,eACjCvvC,KAAKkwC,oBAAsBlwC,KAAKuvC,iBAAmBvvC,KAAK0vC,wBACxD1vC,KAAKK,mBAAmBC,gBAO1BmuC,GAAA1uC,UAAA2vC,sBAAA,WACE,OAAQ1vC,KAAKwvC,UAAUloC,cAAcyoC,YAAc/vC,KAAKyvC,mBAAmBnoC,cAAcuoC,aAAgB,GAMnGpB,GAAA1uC,UAAA8uC,gBAAR,WAAA,IAAAjnC,EAAA5H,KACEA,KAAKmwC,YAAYxnC,QAAQ,SAACynC,GACxBxoC,EAAK4C,UAAU6lC,YAAYzoC,EAAK4nC,UAAUloC,cAAe8oC,SAEvDE,EAAuCtwC,KAAKssC,OAAOjlC,UAEvDipC,EAAW3nC,QAAQ,SAACkkC,EAA8BliC,GAChD,GAAY,EAARA,GAAaA,EAAQ2lC,EAAW7qC,OAAQ,KACtC2qC,EAAiBxoC,EAAK4C,UAAU+lC,cAAc,OAClD3oC,EAAK4C,UAAUuM,SAASq5B,EAAW,sBACnCxoC,EAAKuoC,YAAYlqC,KAAKmqC,GACtBxoC,EAAK4C,UAAUgmC,aAAa5oC,EAAK4nC,UAAUloC,cAAe8oC,EAAWvD,EAAKjU,WAAWtxB,eAEvFulC,EAAK4D,OAAS9lC,EAAQ,0BA/N3B9H,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,4BAEVC,SAAA,09BACAJ,gBAAiBC,EAAAA,wBAAwBC,OAEzCmmC,KAAM,CACJC,QAAO,+BACPqH,qDAAsD,0BACtDC,6BAA8B,64EA3BiCzmC,EAAAA,kBAO1D0mC,EAAAA,qBAFWC,EAAAA,eAAcxtC,WAAA,CAAA,CAAAC,KAwEnBC,EAAAA,kBA7EgE6G,EAAAA,iBAA/B5G,EAAAA,sDAoD7CylB,EAAAA,gBAAenmB,KAAA,CAACkrC,gCAEhBvhC,EAAAA,UAAS3J,KAAA,CAAC,wCACV2J,EAAAA,UAAS3J,KAAA,CAAC,eA+Lb2rC,IA3KE,SAAAA,GAAoBjmC,EACAkmC,EACYttC,EACZoJ,EACAnK,GAJAL,KAAAwI,YAAAA,EACAxI,KAAA0uC,eAAAA,EACY1uC,KAAAoB,KAAAA,EACZpB,KAAAwK,UAAAA,EACAxK,KAAAK,mBAAAA,EA/CZL,KAAAmwC,YAA6B,GAGpBnwC,KAAA2vB,WAA4B,IAAIllB,EAAAA,QAEzCzK,KAAA0pC,cAAiC,IAAIj/B,EAAAA,QAErCzK,KAAA2vC,gBAA0B,EAC1B3vC,KAAA+uC,wBAAkC,EAG1C/uC,KAAAgwC,yBAAmC,EAGnChwC,KAAAkwC,qBAA+B,EAG/BlwC,KAAAiwC,sBAAgC,EClDlC,IAAAa,IAwCEA,GAAA/wC,UAAAkM,mBAAA,WAAA,IAAArE,EAAA5H,KACEA,KAAKssC,OAAOxkC,QAAQG,KAClBioB,EAAAA,UAAUlwB,KAAK2vB,aACf5nB,UAAU,WACVH,EAAKinC,kBACLjnC,EAAKvH,mBAAmBC,iBAE1BN,KAAK6uC,kBACL7uC,KAAKK,mBAAmBC,gBAG1BwwC,GAAA/wC,UAAA2I,YAAA,WACE1I,KAAK2vB,WAAWnqB,OAChBxF,KAAK2vB,WAAWgF,YAMVmc,GAAA/wC,UAAA8uC,gBAAR,WAAA,IAAAjnC,EAAA5H,KACEA,KAAKmwC,YAAYxnC,QAAQ,SAACynC,GACxBxoC,EAAK4C,UAAU6lC,YAAYzoC,EAAK4nC,UAAUloC,cAAe8oC,SAEvDE,EAAuCtwC,KAAKssC,OAAOjlC,UAEvDipC,EAAW3nC,QAAQ,SAACkkC,EAA8BliC,GAChD,GAAY,EAARA,GAAaA,EAAQ2lC,EAAW7qC,OAAQ,KACtC2qC,EAAiBxoC,EAAK4C,UAAU+lC,cAAc,OAClD3oC,EAAK4C,UAAUuM,SAASq5B,EAAW,gCAC/BW,EAAsBnpC,EAAK4C,UAAU+lC,cAAc,OACvD3oC,EAAK4C,UAAUuM,SAASg6B,EAAgB,oBACxCnpC,EAAK4C,UAAUwmC,YAAYZ,EAAWW,GACtCnpC,EAAKuoC,YAAYlqC,KAAKmqC,GACtBxoC,EAAK4C,UAAUgmC,aAAa5oC,EAAK4nC,UAAUloC,cAAe8oC,EAAWvD,EAAKjU,WAAWtxB,eAEvFulC,EAAK4D,OAAS9lC,EAAQ,0BA5D3B9H,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,0BAEVC,SAAA,gMACAJ,gBAAiBC,EAAAA,wBAAwBC,OAEzCmmC,KAAM,CACJC,QAAO,sbArBgBj/B,EAAAA,iBAAW5G,EAAAA,sDAgCnCylB,EAAAA,gBAAenmB,KAAA,CAACkrC,uBAEhBvhC,EAAAA,UAAS3J,KAAA,CAAC,eA6CbguC,IA3CE,SAAAA,GAAoBtmC,EACAnK,GADAL,KAAAwK,UAAAA,EACAxK,KAAAK,mBAAAA,EAXZL,KAAAmwC,YAA6B,GAGpBnwC,KAAA2vB,WAA4B,IAAIllB,EAAAA,YCN7CwmC,GAAwB,CAC5B7E,GACAf,GACAqC,GACAG,GACA7C,GACAC,GACAC,GACAuD,GACAqC,GACA9C,IAIFkD,yBAACptC,EAAAA,SAAQhB,KAAA,CAAC,CACRiB,QAAS,CACPC,EAAAA,aACAC,EAAAA,cACAusB,EAAAA,gBACAC,EAAAA,aACAkL,EAAAA,qBACA/nB,EAAAA,sBAEFzP,aAAc,CACZ8sC,IAEF7sC,QAAS,CACP6sC,QAKJC,IAlBA,SAAAA,MCvBE,YAAmBvN,EACAtjC,GADAL,KAAA2jC,kBAAAA,EACA3jC,KAAAK,mBAAAA,MAMrByG,GAFaqqC,GAAwB94B,EAAAA,cAAc+4B,IAEnDC,IAQ0C/qC,EAAAA,GAR1CQ,GAQ0CqqC,IAGxCtxC,OAAAC,eAAIuxC,GAAAtxC,UAAA,UAAO,KAAX,WACE,OAAOC,KAAKsrC,gDAed+F,GAAAtxC,UAAAuB,SAAA,WACEtB,KAAKsrC,eAAiB,IAAI3L,EAAAA,eAAe3/B,KAAK2rC,SAAU3rC,KAAK2jC,yCA5BhE9gC,EAAAA,UAASC,KAAA,CAAC,CACTI,SAAU,gBACVC,SAAA,+DAEAJ,gBAAiBC,EAAAA,wBAAwBC,OAEzCsc,OAAQ,CAAC,sEApBT7Y,EAAAA,wBAJAlD,EAAAA,wDAiCCiJ,EAAAA,UAAS3J,KAAA,CAAC2D,EAAAA,4BAKVhD,EAAAA,MAAKX,KAAA,CAAC,YAWTuuC,IATE,SAAAA,GAAY1N,EACAtjC,UACVyG,GAAAvB,KAAAvF,KAAM2jC,EAAmBtjC,IAAmBL,KCZ9C,YAAmBK,GAAAL,KAAAK,mBAAAA,MAMrByG,GAFawqC,GAAwBl5B,EAAAA,0BAA0BC,EAAAA,cAAcsW,EAAAA,mBAAmB4iB,MAEhGC,IAa0ClrC,EAAAA,GAb1CQ,GAa0CwqC,IASxCzxC,OAAAC,eAAI0xC,GAAAzxC,UAAA,gBAAa,KAAjB,WACE,OAAOC,KAAKyxC,gDAQd5xC,OAAAC,eAAI0xC,GAAAzxC,UAAA,aAAU,KAAd,WACE,OAAOC,KAAK0xC,YAAc1xC,KAAK0xC,YAAYrqC,UAAYkJ,2CAMzD1Q,OAAAC,eACI0xC,GAAAzxC,UAAA,cAAW,KAGf,WACE,OAAOC,KAAK2xC,kBALd,SACgBC,GACd5xC,KAAK2xC,aAAe74B,EAAAA,sBAAsB84B,oCA0B5CJ,GAAAzxC,UAAAuB,SAAA,WAAA,IAAAsG,EAAA5H,KAEEA,KAAK6H,MAAM5B,KACTjG,KAAKob,aAAarT,UAAU,SAACrC,GAC3BkC,EAAKiqC,UAAUnsC,OAKrB8rC,GAAAzxC,UAAAkM,mBAAA,WAAA,IAAArE,EAAA5H,KAEEA,KAAK8xC,iBACL9xC,KAAK6H,MAAM5B,KACTjG,KAAK0xC,YAAY5pC,QAAQC,UAAU,WACjCH,EAAKkqC,oBAIT/nC,QAAQC,UAAUC,KAAK,WACrBrC,EAAKiqC,UAAUjqC,EAAKlC,UAIxB8rC,GAAAzxC,UAAA2I,YAAA,WACM1I,KAAK6H,OAAS7H,KAAK6H,MAAMpC,QAC3BzF,KAAK6H,MAAMc,QAAQ,SAACC,GAClBA,EAAIC,iBASV2oC,GAAAzxC,UAAAgyC,oBAAA,SAAoBC,GAClBhyC,KAAKyxC,eAAiBO,MAClBtsC,EAAa1F,KAAKiyC,QAAQD,GAC9BhyC,KAAK0F,MAAQA,EACb1F,KAAKkyC,YAAYtvC,KAAK8C,GACtB1F,KAAK2C,SAAS+C,IAMR8rC,GAAAzxC,UAAA+xC,eAAR,WACE9xC,KAAKiyC,QAAUjyC,KAAKmyC,WAAWtb,IAAI,SAACub,GAClC,OAAOA,EAAU1sC,QAEnB1F,KAAKK,mBAAmBC,gBAOlBkxC,GAAAzxC,UAAA8xC,UAAR,SAAkBnsC,OACZiF,EAAgB3K,KAAKiyC,QAAQ3+B,QAAQ5N,IAC5B,EAATiF,EACF3K,KAAKyxC,eAAiB9mC,GAEtB3K,KAAK0F,MAAQ1F,KAAKiyC,QAAQxsC,OAASzF,KAAKiyC,QAAQ,GAAK1hC,UACrDvQ,KAAKyxC,eAAiB,GAExBzxC,KAAKK,mBAAmBC,qCAnI3BuC,EAAAA,UAASC,KAAA,CAAC,CACTC,gBAAiBC,EAAAA,wBAAwBC,OACzC0Q,UAAW,CAAC,CACVuL,QAASC,EAAAA,kBACTC,YAAaC,EAAAA,WAAW,WAAM,OAAAmyB,KAC9BlyB,OAAO,IAETpc,SAAU,gBACVC,SAAA,6rBAGAoc,OAAQ,CAAC,QAAS,WAAY,4IA/C9B/b,EAAAA,2DAiECylB,EAAAA,gBAAenmB,KAAA,CAACuuC,yBAShB5tC,EAAAA,MAAKX,KAAA,CAAC,8BAWNW,EAAAA,MAAKX,KAAA,CAAC,kCAKNW,EAAAA,MAAKX,KAAA,CAAC,wCAMNY,EAAAA,UA0EH8tC,IAxEE,SAAAA,GAAYnxC,GAAZ,IAAAuH,EACEd,GAAAvB,KAAAvF,KAAMK,IAAmBL,YA/CnB4H,EAAAC,MAAwB,GAExBD,EAAAqqC,QAAiB,GACjBrqC,EAAA6pC,eAAyB,EACzB7pC,EAAA+pC,cAAwB,EAwCb/pC,EAAAsqC,YAAiC,IAAItuC,EAAAA,eCpG1D,IAAAyuC,yBAWCvuC,EAAAA,SAAQhB,KAAA,CAAC,CACRqB,aAAc,CACZqtC,GACAH,IAEFttC,QAAS,CAEPC,EAAAA,aACA0P,EAAAA,YAEA+c,EAAAA,aACA6hB,EAAAA,eAEFluC,QAAS,CACPotC,GACAH,QAGkCgB,IAlBtC,SAAAA,8R3FIkD,uRcQlD,SAAgBj6B,GACCm6B,EAASC,GACxB,OAAqBlsC,EAAAA,EAArBQ,EAAqByrC,GAWnB1yC,OAAAC,eAAI2yC,EAAA1yC,UAAA,QAAK,KAQT,WACE,OAAOC,KAAK28B,YATd,SAAUzmB,GACJA,IAAMlW,KAAK28B,SACb38B,KAAK28B,OAASzmB,EACdlW,KAAK2C,SAASuT,GACdlW,KAAKK,mBAAmBC,eACxBN,KAAK0yC,qBAAqBltC,KAAK0Q,qCAOnCu8B,EAAA1yC,UAAAsyB,WAAA,SAAW3sB,GACT1F,KAAK0F,MAAQA,EACb1F,KAAKK,mBAAmBC,gBAG1BmyC,EAAA1yC,UAAA4yC,iBAAA,SAAiBC,GACf5yC,KAAK2C,SAAWiwC,GAGlBH,EAAA1yC,UAAA8yC,kBAAA,SAAkBD,GAChB5yC,KAAKif,UAAY2zB,GAMrBH,EAlCE,SAAAA,QAAY,IAAA3vC,EAAA,GAAAgwC,EAAA,EAAAA,EAAA1sC,UAAAX,OAAAqtC,IAAAhwC,EAAAgwC,GAAA1sC,UAAA0sC,GAAZ,IAAAlrC,EAAAd,EAAA8mC,MAAA5tC,KAAAmG,EACWrD,KAAI9C,YALP4H,EAAA+0B,OAAc6V,aAAwB9tC,MAAQ7E,OAAOkuB,OAAO,GAAIykB,GAAgBA,EAmCxF5qC,EAAAjF,SAAW,SAACowC,GAAW,OAAAl/B,IACvBjM,EAAAqX,UAAY,WAAM,OAAApL,IA9BhBjM,EAAK8qC,qBAAuB,IAAIjoC,EAAAA,QAChC7C,EAAKwT,aAAexT,EAAK8qC,qBAAqBvvB,iBARlD,IAAArc,mB8EdF,SAAgBuR,GAAyCk6B,GACvD,OAAqBjsC,EAAAA,EAArBQ,EAAqByrC,GAOnB1yC,OAAAC,eAAI2yC,EAAA1yC,UAAA,WAAQ,KAAZ,WACE,OAAOC,KAAKgzC,eAEd,SAAattC,OACPutC,EAAoBn6B,EAAAA,sBAAsBpT,GAC1C1F,KAAKgzC,YAAcC,IACrBjzC,KAAKgzC,UAAYC,EACjBjzC,KAAK6b,iBAAiB7b,KAAKgzC,6CAI/BP,EAAA1yC,UAAA8b,iBAAA,SAAiB3F,KAGnBu8B,EAlBE,SAAAA,QAAY,IAAA3vC,EAAA,GAAAgwC,EAAA,EAAAA,EAAA1sC,UAAAX,OAAAqtC,IAAAhwC,EAAAgwC,GAAA1sC,UAAA0sC,GAAZ,IAAAlrC,EAAAd,EAAA8mC,MAAA5tC,KAAAmG,EACWrD,KAAI9C,YAHP4H,EAAAorC,WAAqB,IAD/B,IAAAlsC,wBCDF,SAAgB6nB,GAA8C4jB,GAC5D,OAAqBjsC,EAAAA,EAArBQ,EAAqByrC,GAOnB1yC,OAAAC,eAAI2yC,EAAA1yC,UAAA,gBAAa,KAAjB,WACE,OAAOC,KAAKkzC,oBAEd,SAAkBxtC,OACZutC,EAAoBn6B,EAAAA,sBAAsBpT,GAC1C1F,KAAKkzC,iBAAmBD,IAC1BjzC,KAAKkzC,eAAiBD,EACtBjzC,KAAKmzC,sBAAsBnzC,KAAKkzC,kDAIpCT,EAAA1yC,UAAAozC,sBAAA,SAAsBj9B,KAGxBu8B,EAlBE,SAAAA,QAAY,IAAA3vC,EAAA,GAAAgwC,EAAA,EAAAA,EAAA1sC,UAAAX,OAAAqtC,IAAAhwC,EAAAgwC,GAAA1sC,UAAA0sC,GAAZ,IAAAlrC,EAAAd,EAAA8mC,MAAA5tC,KAAAmG,EACWrD,KAAI9C,YAHP4H,EAAAsrC,gBAA0B,IADpC,IAAApsC,u/E5BgBwC","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, Optional, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Dir } from '@angular/cdk/bidi';\n\nexport interface IPageChangeEvent {\n page: number;\n maxPage: number;\n pageSize: number;\n total: number;\n fromRow: number;\n toRow: number;\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'td-paging-bar',\n templateUrl: './paging-bar.component.html',\n styleUrls: ['./paging-bar.component.scss' ],\n})\nexport class TdPagingBarComponent implements OnInit {\n\n private _pageSize: number = 50;\n private _total: number = 0;\n private _page: number = 1;\n private _fromRow: number = 1;\n private _toRow: number = 1;\n private _initialized: boolean = false;\n private _pageLinks: number[] = [];\n private _pageLinkCount: number = 0;\n // special case when 2 pageLinks, detect when hit end of pages so can lead in correct direction\n private _hitEnd: boolean = false;\n // special case when 2 pageLinks, detect when hit start of pages so can lead in correct direction\n private _hitStart: boolean = false;\n\n /**\n * firstLast?: boolean\n * Shows or hides the first and last page buttons of the paging bar. Defaults to 'false'\n */\n @Input('firstLast') firstLast: boolean = true;\n\n /**\n * initialPage?: number\n * Sets starting page for the paging bar. Defaults to '1'\n */\n @Input('initialPage') initialPage: number = 1;\n\n /**\n * pageLinkCount?: number\n * Amount of page navigation links for the paging bar. Defaults to '0'\n */\n @Input('pageLinkCount')\n set pageLinkCount(pageLinkCount: number) {\n this._pageLinkCount = coerceNumberProperty(pageLinkCount);\n this._calculatePageLinks();\n this._changeDetectorRef.markForCheck();\n }\n get pageLinkCount(): number {\n return this._pageLinkCount;\n }\n\n /**\n * pageSize?: number\n * Selected page size for the pagination. Defaults 50.\n */\n @Input('pageSize')\n set pageSize(pageSize: number) {\n this._pageSize = coerceNumberProperty(pageSize);\n this._page = 1;\n if (this._initialized) {\n this._handleOnChange();\n }\n this._changeDetectorRef.markForCheck();\n }\n get pageSize(): number {\n return this._pageSize;\n }\n\n /**\n * total: number\n * Total rows for the pagination.\n */\n @Input('total')\n set total(total: number) {\n this._total = coerceNumberProperty(total);\n this._calculateRows();\n this._calculatePageLinks();\n this._changeDetectorRef.markForCheck();\n }\n get total(): number {\n return this._total;\n }\n\n /**\n * pageLinks: number[]\n * Returns the pageLinks in an array\n */\n get pageLinks(): number[] {\n return this._pageLinks;\n }\n\n /**\n * range: string\n * Returns the range of the rows.\n */\n get range(): string {\n return `${!this._toRow ? 0 : this._fromRow}-${this._toRow}`;\n }\n\n /**\n * page: number\n * Returns the current page.\n */\n get page(): number {\n return this._page;\n }\n\n /**\n * page: number\n * Returns the max page for the current pageSize and total.\n */\n get maxPage(): number {\n return Math.ceil(this._total / this._pageSize);\n }\n\n /**\n * change?: function\n * Method to be executed when page size changes or any button is clicked in the paging bar.\n * Emits an [IPageChangeEvent] implemented object.\n */\n @Output('change') onChange: EventEmitter<IPageChangeEvent> = new EventEmitter<IPageChangeEvent>();\n\n get isRTL(): boolean {\n if (this._dir) {\n return this._dir.dir === 'rtl';\n }\n return false;\n }\n\n constructor(@Optional() private _dir: Dir,\n private _changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this._page = coerceNumberProperty(this.initialPage);\n this._calculateRows();\n this._calculatePageLinks();\n this._initialized = true;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * navigateToPage?: function\n * Navigates to a specific valid page. Returns 'true' if page is valid, else 'false'.\n */\n navigateToPage(page: number): boolean {\n if (page === 1 || (page >= 1 && page <= this.maxPage)) {\n this._page = coerceNumberProperty(Math.floor(page));\n this._handleOnChange();\n return true;\n }\n return false;\n }\n\n /**\n * firstPage?: function\n * Navigates to the first page. Returns 'true' if page is valid, else 'false'.\n */\n firstPage(): boolean {\n return this.navigateToPage(1);\n }\n\n /**\n * prevPage?: function\n * Navigates to the previous page. Returns 'true' if page is valid, else 'false'.\n */\n prevPage(): boolean {\n return this.navigateToPage(this._page - 1);\n }\n\n /**\n * nextPage?: function\n * Navigates to the next page. Returns 'true' if page is valid, else 'false'.\n */\n nextPage(): boolean {\n return this.navigateToPage(this._page + 1);\n }\n\n /**\n * lastPage?: function\n * Navigates to the last page. Returns 'true' if page is valid, else 'false'.\n */\n lastPage(): boolean {\n return this.navigateToPage(this.maxPage);\n }\n\n isMinPage(): boolean {\n return this._page <= 1;\n }\n\n isMaxPage(): boolean {\n return this._page >= this.maxPage;\n }\n\n private _calculateRows(): void {\n let top: number = (this._pageSize * this._page);\n this._fromRow = (this._pageSize * (this._page - 1)) + 1;\n this._toRow = this._total > top ? top : this._total;\n }\n\n /**\n * _calculatePageLinks?: function\n * Calculates the page links that should be shown to the user based on the current state of the paginator\n */\n private _calculatePageLinks(): void {\n // special case when 2 pageLinks, detect when hit end of pages so can lead in correct direction\n if (this.isMaxPage()) {\n this._hitEnd = true;\n this._hitStart = false;\n }\n // special case when 2 pageLinks, detect when hit start of pages so can lead in correct direction\n if (this.isMinPage()) {\n this._hitEnd = false;\n this._hitStart = true;\n }\n // If the pageLinkCount goes above max possible pages based on perpage setting then reset it to maxPage\n let actualPageLinkCount: number = this.pageLinkCount;\n if (this.pageLinkCount > this.maxPage) {\n actualPageLinkCount = this.maxPage;\n }\n // reset the pageLinks array\n this._pageLinks = [];\n // fill in the array with the pageLinks based on the current selected page\n let middlePageLinks: number = Math.floor(actualPageLinkCount / 2);\n for (let x: number = 0; x < actualPageLinkCount; x++) {\n // don't go past the maxPage in the pageLinks\n // have to handle even and odd pageLinkCounts differently so can still lead to the next numbers\n if ((actualPageLinkCount % 2 === 0 && (this.page + middlePageLinks > this.maxPage)) ||\n (actualPageLinkCount % 2 !== 0 && (this.page + middlePageLinks >= this.maxPage))) {\n this._pageLinks[x] = this.maxPage - (actualPageLinkCount - (x + 1));\n // if the selected page is after the middle then set that page as middle and get the correct balance on left and right\n // special handling when there are only 2 pageLinks to just drop to next if block so can lead to next numbers when moving to right\n // when moving to the left then go into this block\n } else if ((actualPageLinkCount > 2 || actualPageLinkCount <= 2 && this._hitEnd) && (this.page - middlePageLinks) > 0) {\n this._pageLinks[x] = (this.page - middlePageLinks) + x;\n // if the selected page is before the middle then set the pages based on the x index leading up to and after selected page\n } else if ((this.page - middlePageLinks) <= 0) {\n this._pageLinks[x] = x + 1;\n // other wise just set the array in order starting from the selected page\n } else {\n this._pageLinks[x] = this.page + x;\n }\n }\n }\n\n private _handleOnChange(): void {\n this._calculateRows();\n this._calculatePageLinks();\n let event: IPageChangeEvent = {\n page: this._page,\n maxPage: this.maxPage,\n pageSize: this._pageSize,\n total: this._total,\n fromRow: this._fromRow,\n toRow: this._toRow,\n };\n this._changeDetectorRef.markForCheck();\n this.onChange.emit(event);\n }\n\n}\n","import { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { TdPagingBarComponent } from './paging-bar.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatButtonModule,\n ],\n declarations: [\n TdPagingBarComponent,\n ],\n exports: [\n TdPagingBarComponent,\n ],\n})\nexport class CovalentPagingModule {\n\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\n\n@Directive({selector: '[tdVirtualScrollRow]'})\nexport class TdVirtualScrollRowDirective extends TemplatePortalDirective {\n\n constructor(templateRef: TemplateRef<any>,\n viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n \n}\n","import { Component, Directive, Input, Output, EventEmitter, ContentChild, AfterViewInit, ViewChild,\n ChangeDetectionStrategy, ChangeDetectorRef, QueryList, ViewChildren, ElementRef, HostListener,\n Renderer2, AfterViewChecked, OnDestroy, TrackByFunction } from '@angular/core';\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\n\nimport { Subscription, Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { TdVirtualScrollRowDirective } from './virtual-scroll-row.directive';\n\nconst TD_VIRTUAL_OFFSET: number = 2;\nconst SCROLL_DEBOUNCE: number = 200;\n\nexport interface ITdVirtualScrollBottomEvent {\n lastRow: any;\n lastIndex: number;\n}\n\n@Component({\n selector: 'td-virtual-scroll-container',\n styleUrls: ['./virtual-scroll-container.component.scss' ],\n templateUrl: './virtual-scroll-container.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdVirtualScrollContainerComponent implements AfterViewInit, AfterViewChecked, OnDestroy {\n\n private _subs: Subscription[] = [];\n private _bottom: Subject<any> = new Subject();\n private _initialized: boolean = false;\n\n private _totalHeight: number = 0;\n private _hostHeight: number = 0;\n private _scrollVerticalOffset: number = 0;\n private _offsetTransform: SafeStyle;\n\n private _fromRow: number = 0;\n private _toRow: number = 0;\n\n private _data: any[];\n private _virtualData: any[];\n\n /**\n * data: any[]\n * List of items to virtually iterate on.\n */\n @Input('data')\n set data(data: any[]) {\n this._data = data;\n if (this._initialized) {\n this._calculateVirtualRows();\n }\n this._changeDetectorRef.markForCheck();\n }\n get data(): any[] {\n return this._data;\n }\n\n get virtualData(): any[] {\n return this._virtualData;\n }\n\n /**\n * bottom: function\n * Method to be executed when user scrolled to the last item of the list.\n * An [ITdVirtualScrollBottomEvent] event is emitted\n */\n @Output() bottom: EventEmitter<ITdVirtualScrollBottomEvent> = new EventEmitter<ITdVirtualScrollBottomEvent>();\n\n @ViewChildren('rowElement') _rows: QueryList<ElementRef>;\n\n @ContentChild(TdVirtualScrollRowDirective) _rowTemplate: TdVirtualScrollRowDirective;\n\n get rowHeight(): number {\n if (this._rows && this._rows.toArray()[0]) {\n return this._rows.toArray()[0].nativeElement.getBoundingClientRect().height;\n }\n return 0;\n }\n\n get totalHeight(): number {\n return this._totalHeight;\n }\n\n get fromRow(): number {\n return this._fromRow;\n }\n\n get toRow(): number {\n return this._toRow;\n }\n\n get offsetTransform(): SafeStyle {\n return this._offsetTransform;\n }\n\n constructor(private _elementRef: ElementRef,\n private _domSanitizer: DomSanitizer,\n private _renderer: Renderer2,\n private _changeDetectorRef: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n this._subs.push(this._rows.changes.subscribe(() => {\n this._calculateVirtualRows();\n }));\n this._initialized = true;\n this._calculateVirtualRows();\n\n this._subs.push(this._bottom.pipe(\n debounceTime(SCROLL_DEBOUNCE),\n ).subscribe(() => {\n this.bottom.emit({\n lastRow: this._data[this._data.length - 1],\n lastIndex: this.toRow,\n });\n }));\n }\n\n ngAfterViewChecked(): void {\n let newHostHeight: number = this._elementRef.nativeElement.getBoundingClientRect().height;\n if (this._hostHeight !== newHostHeight) {\n this._hostHeight = newHostHeight;\n if (this._initialized) {\n this._calculateVirtualRows();\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this._subs) {\n this._subs.forEach((sub: Subscription) => {\n sub.unsubscribe();\n });\n }\n }\n\n /**\n * trackBy?: TrackByFunction\n * This accepts the same trackBy function [ngFor] does.\n * https://angular.io/api/core/TrackByFunction\n */\n @Input('trackBy') trackBy: TrackByFunction<any> = (index: number, item: any) => {\n return item;\n }\n\n @HostListener('scroll', ['$event'])\n handleScroll(event: Event): void {\n let element: HTMLElement = (<HTMLElement>event.target);\n if (element) {\n let verticalScroll: number = element.scrollTop;\n if (this._scrollVerticalOffset !== verticalScroll) {\n this._scrollVerticalOffset = verticalScroll;\n if (this._initialized) {\n this._calculateVirtualRows();\n }\n }\n if (this._initialized) {\n // check to see if bottom was hit to throw the bottom event\n if ((this._data.length * this.rowHeight) - (verticalScroll + this._hostHeight) === 0) {\n this._bottom.next();\n }\n }\n }\n }\n\n /**\n * Method to refresh and recalculate the virtual rows\n * e.g. after changing the [data] content\n */\n refresh(): void {\n this._calculateVirtualRows();\n }\n\n /**\n * Method to scroll to a specific row of the list.\n */\n scrollTo(row: number): void {\n this._elementRef.nativeElement.scrollTop = row * this.rowHeight;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Method to scroll to the start of the list.\n */\n scrollToStart(): void {\n this.scrollTo(0);\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Method to scroll to the end of the list.\n */\n scrollToEnd(): void {\n this.scrollTo(this.totalHeight / this.rowHeight);\n this._changeDetectorRef.markForCheck();\n }\n\n private _calculateVirtualRows(): void {\n if (this._data) {\n this._totalHeight = this._data.length * this.rowHeight;\n let fromRow: number = Math.floor((this._scrollVerticalOffset / this.rowHeight)) - TD_VIRTUAL_OFFSET;\n this._fromRow = fromRow > 0 ? fromRow : 0;\n let range: number = Math.floor((this._hostHeight / this.rowHeight)) + (TD_VIRTUAL_OFFSET * 2);\n let toRow: number = range + this.fromRow;\n if (isFinite(toRow) && toRow > this._data.length) {\n toRow = this._data.length;\n } else if (!isFinite(toRow)) {\n toRow = TD_VIRTUAL_OFFSET;\n }\n this._toRow = toRow;\n } else {\n this._totalHeight = 0;\n this._fromRow = 0;\n this._toRow = 0;\n }\n\n let offset: number = 0;\n if (this._scrollVerticalOffset > (TD_VIRTUAL_OFFSET * this.rowHeight)) {\n offset = this.fromRow * this.rowHeight;\n }\n\n this._offsetTransform = this._domSanitizer.bypassSecurityTrustStyle('translateY(' + (offset - this.totalHeight) + 'px)');\n if (this._data) {\n this._virtualData = this.data.slice(this.fromRow, this.toRow);\n }\n\n // mark for check at the end of the queue so we are sure\n // that the changes will be marked\n Promise.resolve().then(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n","import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TdVirtualScrollRowDirective } from './virtual-scroll-row.directive';\nimport { TdVirtualScrollContainerComponent } from './virtual-scroll-container.component';\n\nconst TD_VIRTUAL_SCROLL: Type<any>[] = [\n TdVirtualScrollRowDirective,\n TdVirtualScrollContainerComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n TD_VIRTUAL_SCROLL,\n ],\n exports: [\n TD_VIRTUAL_SCROLL,\n ],\n})\nexport class CovalentVirtualScrollModule {\n\n}\n","import { Component, Input, HostBinding, ChangeDetectionStrategy,\n ViewChild, ElementRef, AfterContentInit } from '@angular/core';\n\nexport enum TdNotificationCountPositionY {\n Top = 'top',\n Bottom = 'bottom',\n Center = 'center',\n}\n\nexport enum TdNotificationCountPositionX {\n Before = 'before',\n After = 'after',\n Center = 'center',\n}\n\nexport const DEFAULT_NOTIFICATION_LIMIT: number = 99;\n\n@Component({\n selector: 'td-notification-count',\n styleUrls: ['./notification-count.component.scss' ],\n templateUrl: './notification-count.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdNotificationCountComponent implements AfterContentInit {\n\n private _notifications: number | boolean = 0;\n private _positionY: TdNotificationCountPositionY;\n private _positionX: TdNotificationCountPositionX;\n private _limit: number = DEFAULT_NOTIFICATION_LIMIT;\n\n /**\n * Div content wrapper of `ng-content`.\n */\n @ViewChild('content') content: ElementRef;\n\n /**\n * color?: \"primary\" | \"accent\" | \"warn\"\n * Sets the theme color of the notification tip. Defaults to \"warn\"\n */\n @Input() color: 'primary' | 'accent' | 'warn' = 'warn';\n\n /**\n * positionX?: TdNotificationCountPositionX or \"before\" | \"after\" | \"center\"\n * Sets the X position of the notification tip.\n * Defaults to \"after\" if it has content, else 'center'.\n */\n @Input()\n set positionX(positionX: TdNotificationCountPositionX) {\n this._positionX = positionX;\n }\n get positionX(): TdNotificationCountPositionX {\n return this._positionX;\n }\n\n /**\n * positionY?: TdNotificationCountPositionY or \"top\" | \"bottom\" | \"center\"\n * Sets the Y position of the notification tip.\n * Defaults to \"top\" if it has content, else 'center'.\n */\n @Input()\n set positionY(positionY: TdNotificationCountPositionY) {\n this._positionY = positionY;\n }\n get positionY(): TdNotificationCountPositionY {\n return this._positionY;\n }\n\n /**\n * notifications?: number | boolean\n * Number for the notification count. Shows component only if the input is a positive number or 'true'\n */\n @Input()\n set notifications(notifications: number | boolean) {\n this._notifications = notifications;\n }\n\n /**\n * limit?: number\n * Limit for notification count. If the number of notifications is greater than limit, then + will be added. Defaults to 99.\n */\n @Input()\n set limit(limit: number) {\n this._limit = limit;\n }\n\n @HostBinding('class.td-notification-hidden')\n get hideHost(): boolean {\n return !this.show && !this._hasContent();\n }\n\n /**\n * Sets the component in its 'noCount' state if [notifications] is a boolean 'true'.\n * Makes the notification tip show without a count.\n */\n get noCount(): string | boolean {\n return this._notifications === true;\n }\n\n /**\n * Notification display string when a count is available.\n * Anything over 99 gets set as 99+\n */\n get notificationsDisplay(): string {\n if (this._notifications > this._limit) {\n return `${this._limit}+`;\n }\n return this._notifications.toString();\n }\n\n /**\n * Shows notification tip only when [notifications] is true or a positive integer.\n */\n get show(): boolean {\n return this._notifications === true || (!isNaN(<any>this._notifications) && this._notifications > 0);\n }\n\n /**\n * Check if [positionX] and [positionY] have been set as inputs, else use defaults depending on component content.\n */\n ngAfterContentInit(): void {\n if (!this._positionX) {\n this.positionX = this._hasContent() ? TdNotificationCountPositionX.After : TdNotificationCountPositionX.Center;\n }\n if (!this._positionY) {\n this.positionY = this._hasContent() ? TdNotificationCountPositionY.Top : TdNotificationCountPositionY.Center;\n }\n }\n\n /**\n * Method to check if element has any kind of content (elements or text)\n */\n private _hasContent(): boolean {\n if (this.content) {\n let contentElement: HTMLElement = this.content.nativeElement;\n return contentElement && (contentElement.children.length > 0 || !!contentElement.textContent.trim());\n }\n return false;\n }\n\n}\n","import { Type } from '@angular/core';\nimport { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\n\nimport { TdNotificationCountComponent } from './notification-count.component';\n\nconst TD_NOTIFICATIONS: Type<any>[] = [\n TdNotificationCountComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n TD_NOTIFICATIONS,\n ],\n exports: [\n TD_NOTIFICATIONS,\n ],\n})\nexport class CovalentNotificationsModule {\n\n}\n","import { Directive } from '@angular/core';\nimport { HostListener, Host, Optional } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\n@Directive({\n selector: '[tdAutoTrim]',\n})\nexport class TdAutoTrimDirective {\n\n constructor(@Optional() @Host() private _model: NgModel) {}\n\n /**\n * Listens to host's (blur) event and trims value.\n */\n @HostListener('blur', ['$event'])\n onBlur(event: Event): void {\n if (this._model && this._model.value && typeof(this._model.value) === 'string') {\n this._model.update.emit(this._model.value.trim());\n }\n }\n}\n","import { Directive, HostListener, ElementRef, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\ninterface IFsDocument extends HTMLDocument {\n fullscreenElement: Element;\n webkitFullscreenElement: Element;\n mozFullscreenElement: Element;\n msFullscreenElement: Element;\n webkitExitFullscreen: () => void;\n mozCancelFullScreen: () => void;\n msExitFullscreen: () => void;\n}\n\n@Directive({\n selector: '[tdFullScreen]',\n exportAs: 'tdFullScreen',\n})\nexport class TdFullscreenDirective {\n fullScreenIsActive: boolean = false;\n constructor(@Inject(DOCUMENT) private _document: IFsDocument, private _el: ElementRef) {}\n\n @HostListener('document:fullscreenchange', ['$event'])\n @HostListener('document:webkitfullscreenchange', ['$event'])\n @HostListener('document:mozfullscreenchange', ['$event'])\n @HostListener('document:msfullscreenchange', ['$event'])\n public fsChangeHandler(event: Event): void {\n this.fullScreenIsActive = event.srcElement === this._getFullScreenElement();\n }\n\n public toggleFullScreen(): void {\n this._getFullScreenElement() === this._el.nativeElement ? this.exitFullScreen() : this.enterFullScreen();\n }\n\n public enterFullScreen(): void {\n const { _el: { nativeElement } }: TdFullscreenDirective = this;\n const enterFullScreenMap: object = {\n requestFullscreen: () => nativeElement.requestFullscreen(), // Chrome\n webkitRequestFullscreen: () => nativeElement.webkitRequestFullscreen(), // Safari \n mozRequestFullScreen: () => nativeElement.mozRequestFullScreen(), // Firefox\n msRequestFullscreen: () => nativeElement.msRequestFullscreen(), // IE\n };\n\n for (const handler of Object.keys(enterFullScreenMap)) {\n if (nativeElement[handler]) {\n enterFullScreenMap[handler]();\n }\n }\n }\n\n public exitFullScreen(): void {\n const { _document, _el: { nativeElement } }: TdFullscreenDirective = this;\n const exitFullScreenMap: object = {\n exitFullscreen: () => _document.exitFullscreen(), // Chrome\n webkitExitFullscreen: () => _document.webkitExitFullscreen(), // Safari\n mozCancelFullScreen: () => _document.mozCancelFullScreen(), // Firefox\n msExitFullscreen: () => _document.msExitFullscreen(), // IE\n };\n\n for (const handler of Object.keys(exitFullScreenMap)) {\n if (_document[handler] && this._getFullScreenElement() === nativeElement) {\n exitFullScreenMap[handler]();\n }\n }\n }\n\n private _getFullScreenElement(): Element {\n const { _document }: TdFullscreenDirective = this;\n const tdFullScreenElementMap: object = {\n fullscreenElement: () => _document.fullscreenElement, // Chrome, Opera\n webkitFullscreenElement: () => _document.webkitFullscreenElement, // Safari\n mozFullscreenElement: () => _document.mozFullscreenElement, // Firefox\n msFullscreenElement: () => _document.msFullscreenElement, // IE, Edge\n };\n for (const props of Object.keys(tdFullScreenElementMap)) {\n if (_document[props]) {\n return _document[props];\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'timeAgo',\n})\nexport class TdTimeAgoPipe implements PipeTransform {\n transform(time: any, reference?: any): string {\n // Convert time to date object if not already\n time = new Date(time);\n let ref: Date = new Date(reference);\n\n // If not a valid timestamp, return 'Invalid Date'\n if (!time.getTime()) {\n return 'Invalid Date';\n }\n\n // For unit testing, we need to be able to declare a static start time\n // for calculations, or else speed of tests can bork.\n let startTime: number = isNaN(ref.getTime()) ? Date.now() : ref.getTime();\n let diff: number = Math.floor((startTime - time.getTime()) / 1000);\n\n if (diff < 2) {\n return '1 second ago';\n }\n if (diff < 60) {\n return Math.floor(diff) + ' seconds ago';\n }\n // Minutes\n diff = diff / 60;\n if (diff < 2) {\n return '1 minute ago';\n }\n if (diff < 60) {\n return Math.floor(diff) + ' minutes ago';\n }\n // Hours\n diff = diff / 60;\n if (diff < 2) {\n return '1 hour ago';\n }\n if (diff < 24) {\n return Math.floor(diff) + ' hours ago';\n }\n // Days\n diff = diff / 24;\n if (diff < 2) {\n return '1 day ago';\n }\n if (diff < 30) {\n return Math.floor(diff) + ' days ago';\n }\n // Months\n diff = diff / 30;\n if (diff < 2) {\n return '1 month ago';\n }\n if (diff < 12) {\n return Math.floor(diff) + ' months ago';\n }\n // Years\n diff = diff / 12;\n if (diff < 2) {\n return '1 year ago';\n } else {\n return Math.floor(diff) + ' years ago';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'timeDifference',\n})\n\nexport class TdTimeDifferencePipe implements PipeTransform {\n transform(start: any, end?: any): string {\n let startTime: Date = new Date(start);\n let endTime: Date;\n\n if (end !== undefined) {\n endTime = new Date(end);\n } else {\n endTime = new Date();\n }\n\n if (!startTime.getTime() || !endTime.getTime()) {\n return 'Invalid Date';\n }\n\n let diff: number = Math.floor((endTime.getTime() - startTime.getTime()) / 1000);\n\n let days: number = Math.floor(diff / (60 * 60 * 24));\n diff = diff - (days * (60 * 60 * 24));\n\n let hours: number = Math.floor(diff / (60 * 60));\n diff = diff - (hours * (60 * 60));\n\n let minutes: number = Math.floor(diff / (60));\n diff -= minutes * (60);\n\n let seconds: number = diff;\n\n let pad: string = '00';\n\n let daysFormatted: string = '';\n\n if (days > 0 && days < 2) {\n daysFormatted = ' day - ';\n } else if (days > 1) {\n daysFormatted = ' days - ' ;\n }\n\n return (days > 0 ? days + daysFormatted : daysFormatted) +\n pad.substring(0, pad.length - (hours + '').length) + hours + ':' +\n pad.substring(0, pad.length - (minutes + '').length) + minutes + ':' +\n pad.substring(0, pad.length - (seconds + '').length) + seconds;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'timeUntil',\n})\nexport class TdTimeUntilPipe implements PipeTransform {\n transform(time: any, reference?: any): string {\n // Convert time to date object if not already\n time = new Date(time);\n let ref: Date = new Date(reference);\n\n // If not a valid timestamp, return 'Invalid Date'\n if (!time.getTime()) {\n return 'Invalid Date';\n }\n\n // For unit testing, we need to be able to declare a static start time\n // for calculations, or else speed of tests can bork.\n let startTime: number = isNaN(ref.getTime()) ? Date.now() : ref.getTime();\n let diff: number = Math.floor((time.getTime() - startTime) / 1000);\n\n if (diff < 2) {\n return 'in 1 second';\n }\n if (diff < 60) {\n return 'in ' + Math.floor(diff) + ' seconds';\n }\n // Minutes\n diff = diff / 60;\n if (diff < 2) {\n return 'in 1 minute';\n }\n if (diff < 60) {\n return 'in ' + Math.floor(diff) + ' minutes';\n }\n // Hours\n diff = diff / 60;\n if (diff < 2) {\n return 'in 1 hour';\n }\n if (diff < 24) {\n return 'in ' + Math.floor(diff) + ' hours';\n }\n // Days\n diff = diff / 24;\n if (diff < 2) {\n return 'in 1 day';\n }\n if (diff < 30) {\n return 'in ' + Math.floor(diff) + ' days';\n }\n // Months\n diff = diff / 30;\n if (diff < 2) {\n return 'in 1 month';\n }\n if (diff < 12) {\n return 'in ' + Math.floor(diff) + ' months';\n }\n // Years\n diff = diff / 12;\n if (diff < 2) {\n return 'in 1 year';\n } else {\n return 'in ' + Math.floor(diff) + ' years';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'bytes',\n})\n\nexport class TdBytesPipe implements PipeTransform {\n /* `bytes` needs to be `any` or TypeScript complains\n Tried both `number` and `number | string` */\n transform(bytes: any, precision: number = 2): string {\n if (bytes === 0) {\n return '0 B';\n } else if (isNaN(parseInt(bytes, 10))) {\n /* If not a valid number, return 'Invalid Number' */\n return 'Invalid Number';\n }\n let k: number = 1024;\n let sizes: string[] = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let i: number = Math.floor(Math.log(bytes) / Math.log(k));\n // if less than 1\n if (i < 0) {\n return 'Invalid Number';\n }\n return parseFloat((bytes / Math.pow(k, i)).toFixed(precision)) + ' ' + sizes[i];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'decimalBytes',\n})\n\nexport class TdDecimalBytesPipe implements PipeTransform {\n /* `bytes` needs to be `any` or TypeScript complains\n Tried both `number` and `number | string` */\n transform(bytes: any, precision: number = 2): string {\n if (bytes === 0) {\n return '0 B';\n } else if (isNaN(parseInt(bytes, 10))) {\n /* If not a valid number, return 'Invalid Number' */\n return 'Invalid Number';\n }\n let k: number = 1000;\n let sizes: string[] = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let i: number = Math.floor(Math.log(bytes) / Math.log(k));\n // if less than 1\n if (i < 0) {\n return 'Invalid Number';\n }\n return parseFloat((bytes / Math.pow(k, i)).toFixed(precision)) + ' ' + sizes[i];\n }\n}\n","import { Pipe, PipeTransform, Inject, LOCALE_ID } from '@angular/core';\nimport { DecimalPipe } from '@angular/common';\n\n@Pipe({\n name: 'digits',\n})\n\nexport class TdDigitsPipe implements PipeTransform {\n\n private _decimalPipe: DecimalPipe;\n\n constructor(@Inject(LOCALE_ID) private _locale: string = 'en') {\n this._decimalPipe = new DecimalPipe(this._locale);\n }\n\n /* `digits` needs to be type `digits: any` or TypeScript complains */\n transform(digits: any, precision: number = 1): string {\n if (digits === 0) {\n return '0';\n } else if (isNaN(parseInt(digits, 10))) {\n /* If not a valid number, return the value */\n return digits;\n } else if (digits < 1) {\n return this._decimalPipe.transform(digits.toFixed(precision));\n }\n let k: number = 1000;\n let sizes: string[] = ['', 'K', 'M', 'B', 'T', 'Q'];\n let i: number = Math.floor(Math.log(digits) / Math.log(k));\n let size: string = sizes[i];\n return this._decimalPipe.transform(parseFloat((digits / Math.pow(k, i)).toFixed(precision))) + (size ? ' ' + size : '');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'truncate',\n})\n\nexport class TdTruncatePipe implements PipeTransform {\n transform(text: any, length: number): string {\n if (typeof text !== 'string') {\n return '';\n }\n\n // Truncate\n let truncated: string = text.substr(0, length);\n\n if (text.length > length) {\n if (truncated.lastIndexOf(' ') > 0) {\n truncated = truncated.trim();\n }\n\n truncated += '…';\n }\n\n return truncated;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router, RoutesRecognized } from '@angular/router';\n\nimport { filter, pairwise } from 'rxjs/operators';\n\n@Injectable()\nexport class RouterPathService {\nprivate static _previousRoute: string = '/';\n constructor(private _router: Router) {\n this._router.events.pipe(\n filter((e: any) => e instanceof RoutesRecognized),\n pairwise(),\n ).subscribe((e: any[]) => {\n RouterPathService._previousRoute = e[0].urlAfterRedirects;\n });\n }\n\n /*\n * Utility function to get the route the user previously went to\n * good for use in a \"back button\"\n */\n getPreviousRoute(): string {\n return RouterPathService._previousRoute;\n }\n}\n","/*\n * Copyright (C) 2016-2017 by Teradata Corporation. All rights reserved.\n * TERADATA CORPORATION CONFIDENTIAL AND TRADE SECRET\n */\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class IconService {\n\n private _icons: string[] = [\n 'access_alarm',\n 'access_alarms',\n 'access_time',\n 'accessibility',\n 'account_balance',\n 'account_balance_wallet',\n 'account_box',\n 'account_circle',\n 'add',\n 'add_alarm',\n 'add_box',\n 'add_circle',\n 'add_circle_outline',\n 'add_shopping_cart',\n 'add_to_photos',\n 'adjust',\n 'alarm',\n 'alarm_add',\n 'alarm_off',\n 'alarm_on',\n 'album',\n 'android',\n 'announcement',\n 'apps',\n 'archive',\n 'arrow_back',\n 'arrow_drop_down',\n 'arrow_drop_down_circle',\n 'arrow_drop_up',\n 'arrow_forward',\n 'aspect_ratio',\n 'assessment',\n 'assignment',\n 'assignment_ind',\n 'assignment_late',\n 'assignment_return',\n 'assignment_returned',\n 'assignment_turned_in',\n 'assistant_photo',\n 'attach_file',\n 'attach_money',\n 'attachment',\n 'audiotrack',\n 'autorenew',\n 'av_timer',\n 'backspace',\n 'backup',\n 'battery_alert',\n 'battery_charging_full',\n 'battery_full',\n 'battery_std',\n 'battery_unknown',\n 'beenhere',\n 'block',\n 'bluetooth',\n 'bluetooth_audio',\n 'bluetooth_connected',\n 'bluetooth_disabled',\n 'bluetooth_searching',\n 'blur_circular',\n 'blur_linear',\n 'blur_off',\n 'blur_on',\n 'book',\n 'bookmark',\n 'bookmark_border',\n 'border_all',\n 'border_bottom',\n 'border_clear',\n 'border_color',\n 'border_horizontal',\n 'border_inner',\n 'border_left',\n 'border_outer',\n 'border_right',\n 'border_style',\n 'border_top',\n 'border_vertical',\n 'brightness_1',\n 'brightness_2',\n 'brightness_3',\n 'brightness_4',\n 'brightness_5',\n 'brightness_6',\n 'brightness_7',\n 'brightness_auto',\n 'brightness_high',\n 'brightness_low',\n 'brightness_medium',\n 'broken_image',\n 'brush',\n 'bug_report',\n 'build',\n 'business',\n 'cached',\n 'cake',\n 'call',\n 'call_end',\n 'call_made',\n 'call_merge',\n 'call_missed',\n 'call_received',\n 'call_split',\n 'camera',\n 'camera_alt',\n 'camera_front',\n 'camera_rear',\n 'camera_roll',\n 'cancel',\n 'cast',\n 'cast_connected',\n 'center_focus_strong',\n 'center_focus_weak',\n 'chat',\n 'check',\n 'check_box',\n 'check_box_outline_blank',\n 'check_circle',\n 'chevron_left',\n 'chevron_right',\n 'class',\n 'clear',\n 'clear_all',\n 'close',\n 'closed_caption',\n 'cloud',\n 'cloud_circle',\n 'cloud_done',\n 'cloud_download',\n 'cloud_off',\n 'cloud_queue',\n 'cloud_upload',\n 'collections',\n 'collections_bookmark',\n 'color_lens',\n 'colorize',\n 'comment',\n 'compare',\n 'computer',\n 'confirmation_number',\n 'contact_phone',\n 'contacts',\n 'content_copy',\n 'content_cut',\n 'content_paste',\n 'control_point',\n 'control_point_duplicate',\n 'create',\n 'credit_card',\n 'crop',\n 'crop_16_9',\n 'crop_3_2',\n 'crop_5_4',\n 'crop_7_5',\n 'crop_din',\n 'crop_free',\n 'crop_landscape',\n 'crop_original',\n 'crop_portrait',\n 'crop_square',\n 'dashboard',\n 'data_usage',\n 'dehaze',\n 'delete',\n 'description',\n 'desktop_mac',\n 'desktop_windows',\n 'details',\n 'developer_board',\n 'developer_mode',\n 'device_hub',\n 'devices',\n 'dialer_sip',\n 'dialpad',\n 'directions',\n 'directions_bike',\n 'directions_boat',\n 'directions_bus',\n 'directions_car',\n 'directions_railway',\n 'directions_run',\n 'directions_subway',\n 'directions_transit',\n 'directions_walk',\n 'disc_full',\n 'dns',\n 'do_not_disturb',\n 'do_not_disturb_alt',\n 'dock',\n 'domain',\n 'done',\n 'done_all',\n 'drafts',\n 'drive_eta',\n 'dvr',\n 'edit',\n 'eject',\n 'email',\n 'equalizer',\n 'error',\n 'error_outline',\n 'event',\n 'event_available',\n 'event_busy',\n 'event_note',\n 'event_seat',\n 'exit_to_app',\n 'expand_less',\n 'expand_more',\n 'explicit',\n 'explore',\n 'exposure',\n 'exposure_neg_1',\n 'exposure_neg_2',\n 'exposure_plus_1',\n 'exposure_plus_2',\n 'exposure_zero',\n 'extension',\n 'face',\n 'fast_forward',\n 'fast_rewind',\n 'favorite',\n 'favorite_border',\n 'feedback',\n 'file_download',\n 'file_upload',\n 'filter',\n 'filter_1',\n 'filter_2',\n 'filter_3',\n 'filter_4',\n 'filter_5',\n 'filter_6',\n 'filter_7',\n 'filter_8',\n 'filter_9',\n 'filter_9_plus',\n 'filter_b_and_w',\n 'filter_center_focus',\n 'filter_drama',\n 'filter_frames',\n 'filter_hdr',\n 'filter_list',\n 'filter_none',\n 'filter_tilt_shift',\n 'filter_vintage',\n 'find_in_page',\n 'find_replace',\n 'flag',\n 'flare',\n 'flash_auto',\n 'flash_off',\n 'flash_on',\n 'flight',\n 'flight_land',\n 'flight_takeoff',\n 'flip',\n 'flip_to_back',\n 'flip_to_front',\n 'folder',\n 'folder_open',\n 'folder_shared',\n 'folder_special',\n 'font_download',\n 'format_align_center',\n 'format_align_justify',\n 'format_align_left',\n 'format_align_right',\n 'format_bold',\n 'format_clear',\n 'format_color_fill',\n 'format_color_reset',\n 'format_color_text',\n 'format_indent_decrease',\n 'format_indent_increase',\n 'format_italic',\n 'format_line_spacing',\n 'format_list_bulleted',\n 'format_list_numbered',\n 'format_paint',\n 'format_quote',\n 'format_size',\n 'format_strikethrough',\n 'format_textdirection_l_to_r',\n 'format_textdirection_r_to_l',\n 'format_underlined',\n 'forum',\n 'forward',\n 'forward_10',\n 'forward_30',\n 'forward_5',\n 'fullscreen',\n 'fullscreen_exit',\n 'functions',\n 'gamepad',\n 'games',\n 'gesture',\n 'get_app',\n 'gif',\n 'gps_fixed',\n 'gps_not_fixed',\n 'gps_off',\n 'grade',\n 'gradient',\n 'grain',\n 'graphic_eq',\n 'grid_off',\n 'grid_on',\n 'group',\n 'group_add',\n 'group_work',\n 'hd',\n 'hdr_off',\n 'hdr_on',\n 'hdr_strong',\n 'hdr_weak',\n 'headset',\n 'headset_mic',\n 'healing',\n 'hearing',\n 'help',\n 'help_outline',\n 'high_quality',\n 'highlight_off',\n 'history',\n 'home',\n 'hotel',\n 'hourglass_empty',\n 'hourglass_full',\n 'http',\n 'https',\n 'image',\n 'image_aspect_ratio',\n 'import_export',\n 'inbox',\n 'indeterminate_check_box',\n 'info',\n 'info_outline',\n 'input',\n 'insert_chart',\n 'insert_comment',\n 'insert_drive_file',\n 'insert_emoticon',\n 'insert_invitation',\n 'insert_link',\n 'insert_photo',\n 'invert_colors',\n 'invert_colors_off',\n 'iso',\n 'keyboard',\n 'keyboard_arrow_down',\n 'keyboard_arrow_left',\n 'keyboard_arrow_right',\n 'keyboard_arrow_up',\n 'keyboard_backspace',\n 'keyboard_capslock',\n 'keyboard_hide',\n 'keyboard_return',\n 'keyboard_tab',\n 'keyboard_voice',\n 'label',\n 'label_outline',\n 'landscape',\n 'language',\n 'laptop',\n 'laptop_chromebook',\n 'laptop_mac',\n 'laptop_windows',\n 'launch',\n 'layers',\n 'layers_clear',\n 'leak_add',\n 'leak_remove',\n 'lens',\n 'library_add',\n 'library_books',\n 'library_music',\n 'link',\n 'list',\n 'live_help',\n 'live_tv',\n 'local_activity',\n 'local_airport',\n 'local_atm',\n 'local_bar',\n 'local_cafe',\n 'local_car_wash',\n 'local_convenience_store',\n 'local_dining',\n 'local_drink',\n 'local_florist',\n 'local_gas_station',\n 'local_grocery_store',\n 'local_hospital',\n 'local_hotel',\n 'local_laundry_service',\n 'local_library',\n 'local_mall',\n 'local_movies',\n 'local_offer',\n 'local_parking',\n 'local_pharmacy',\n 'local_phone',\n 'local_pizza',\n 'local_play',\n 'local_post_office',\n 'local_printshop',\n 'local_see',\n 'local_shipping',\n 'local_taxi',\n 'location_city',\n 'location_disabled',\n 'location_off',\n 'location_on',\n 'location_searching',\n 'lock',\n 'lock_open',\n 'lock_outline',\n 'looks',\n 'looks_3',\n 'looks_4',\n 'looks_5',\n 'looks_6',\n 'looks_one',\n 'looks_two',\n 'loop',\n 'loupe',\n 'loyalty',\n 'mail',\n 'map',\n 'markunread',\n 'markunread_mailbox',\n 'memory',\n 'menu',\n 'merge_type',\n 'message',\n 'mic',\n 'mic_none',\n 'mic_off',\n 'mms',\n 'mode_comment',\n 'mode_edit',\n 'money_off',\n 'monochrome_photos',\n 'mood',\n 'mood_bad',\n 'more',\n 'more_horiz',\n 'more_vert',\n 'mouse',\n 'movie',\n 'movie_creation',\n 'music_note',\n 'my_library_add',\n 'my_library_books',\n 'my_library_music',\n 'my_location',\n 'nature',\n 'nature_people',\n 'navigate_before',\n 'navigate_next',\n 'navigation',\n 'network_cell',\n 'network_locked',\n 'network_wifi',\n 'new_releases',\n 'nfc',\n 'no_sim',\n 'not_interested',\n 'note_add',\n 'notifications',\n 'notifications_active',\n 'notifications_none',\n 'notifications_off',\n 'notifications_paused',\n 'offline_pin',\n 'ondemand_video',\n 'open_in_browser',\n 'open_in_new',\n 'open_with',\n 'pages',\n 'pageview',\n 'palette',\n 'panorama',\n 'panorama_fish_eye',\n 'panorama_horizontal',\n 'panorama_vertical',\n 'panorama_wide_angle',\n 'party_mode',\n 'pause',\n 'pause_circle_filled',\n 'pause_circle_outline',\n 'payment',\n 'people',\n 'people_outline',\n 'perm_camera_mic',\n 'perm_contact_calendar',\n 'perm_data_setting',\n 'perm_device_information',\n 'perm_identity',\n 'perm_media',\n 'perm_phone_msg',\n 'perm_scan_wifi',\n 'person',\n 'person_add',\n 'person_outline',\n 'person_pin',\n 'personal_video',\n 'phone',\n 'phone_android',\n 'phone_bluetooth_speaker',\n 'phone_forwarded',\n 'phone_in_talk',\n 'phone_iphone',\n 'phone_locked',\n 'phone_missed',\n 'phone_paused',\n 'phonelink',\n 'phonelink_erase',\n 'phonelink_lock',\n 'phonelink_off',\n 'phonelink_ring',\n 'phonelink_setup',\n 'photo',\n 'photo_album',\n 'photo_camera',\n 'photo_library',\n 'photo_size_select_actual',\n 'photo_size_select_large',\n 'photo_size_select_small',\n 'picture_as_pdf',\n 'picture_in_picture',\n 'pin_drop',\n 'place',\n 'play_arrow',\n 'play_circle_filled',\n 'play_circle_outline',\n 'play_for_work',\n 'play_shopping_bag',\n 'playlist_add',\n 'plus_one',\n 'poll',\n 'polymer',\n 'portable_wifi_off',\n 'portrait',\n 'power',\n 'power_input',\n 'power_settings_new',\n 'present_to_all',\n 'print',\n 'public',\n 'publish',\n 'query_builder',\n 'question_answer',\n 'queue',\n 'queue_music',\n 'radio',\n 'radio_button_checked',\n 'radio_button_unchecked',\n 'rate_review',\n 'receipt',\n 'recent_actors',\n 'redeem',\n 'redo',\n 'refresh',\n 'remove',\n 'remove_circle',\n 'remove_circle_outline',\n 'remove_red_eye',\n 'reorder',\n 'repeat',\n 'repeat_one',\n 'replay',\n 'replay_10',\n 'replay_30',\n 'replay_5',\n 'reply',\n 'reply_all',\n 'report',\n 'report_problem',\n 'restaurant_menu',\n 'restore',\n 'ring_volume',\n 'room',\n 'rotate_90_degrees_ccw',\n 'rotate_left',\n 'rotate_right',\n 'router',\n 'satellite',\n 'save',\n 'scanner',\n 'schedule',\n 'school',\n 'screen_lock_landscape',\n 'screen_lock_portrait',\n 'screen_lock_rotation',\n 'screen_rotation',\n 'sd_card',\n 'sd_storage',\n 'search',\n 'security',\n 'select_all',\n 'send',\n 'settings',\n 'settings_applications',\n 'settings_backup_restore',\n 'settings_bluetooth',\n 'settings_brightness',\n 'settings_cell',\n 'settings_ethernet',\n 'settings_input_antenna',\n 'settings_input_component',\n 'settings_input_composite',\n 'settings_input_hdmi',\n 'settings_input_svideo',\n 'settings_overscan',\n 'settings_phone',\n 'settings_power',\n 'settings_remote',\n 'settings_system_daydream',\n 'settings_voice',\n 'share',\n 'shop',\n 'shop_two',\n 'shopping_basket',\n 'shopping_cart',\n 'shuffle',\n 'signal_cellular_4_bar',\n 'signal_cellular_connected_no_internet_4_bar',\n 'signal_cellular_no_sim',\n 'signal_cellular_null',\n 'signal_cellular_off',\n 'signal_wifi_4_bar',\n 'signal_wifi_4_bar_lock',\n 'signal_wifi_off',\n 'sim_card',\n 'sim_card_alert',\n 'skip_next',\n 'skip_previous',\n 'slideshow',\n 'smartphone',\n 'sms',\n 'sms_failed',\n 'snooze',\n 'sort',\n 'sort_by_alpha',\n 'space_bar',\n 'speaker',\n 'speaker_group',\n 'speaker_notes',\n 'speaker_phone',\n 'spellcheck',\n 'star',\n 'star_border',\n 'star_half',\n 'stars',\n 'stay_current_landscape',\n 'stay_current_portrait',\n 'stay_primary_landscape',\n 'stay_primary_portrait',\n 'stop',\n 'storage',\n 'store',\n 'store_mall_directory',\n 'straighten',\n 'strikethrough_s',\n 'style',\n 'subject',\n 'subtitles',\n 'supervisor_account',\n 'surround_sound',\n 'swap_calls',\n 'swap_horiz',\n 'swap_vert',\n 'swap_vertical_circle',\n 'switch_camera',\n 'switch_video',\n 'sync',\n 'sync_disabled',\n 'sync_problem',\n 'system_update',\n 'system_update_alt',\n 'tab',\n 'tab_unselected',\n 'tablet',\n 'tablet_android',\n 'tablet_mac',\n 'tag_faces',\n 'tap_and_play',\n 'terrain',\n 'text_format',\n 'textsms',\n 'texture',\n 'theaters',\n 'thumb_down',\n 'thumb_up',\n 'thumbs_up_down',\n 'time_to_leave',\n 'timelapse',\n 'timer',\n 'timer_10',\n 'timer_3',\n 'timer_off',\n 'toc',\n 'today',\n 'toll',\n 'tonality',\n 'toys',\n 'track_changes',\n 'traffic',\n 'transform',\n 'translate',\n 'trending_down',\n 'trending_flat',\n 'trending_up',\n 'tune',\n 'turned_in',\n 'turned_in_not',\n 'tv',\n 'undo',\n 'unfold_less',\n 'unfold_more',\n 'usb',\n 'verified_user',\n 'vertical_align_bottom',\n 'vertical_align_center',\n 'vertical_align_top',\n 'vibration',\n 'video_library',\n 'videocam',\n 'videocam_off',\n 'view_agenda',\n 'view_array',\n 'view_carousel',\n 'view_column',\n 'view_comfy',\n 'view_compact',\n 'view_day',\n 'view_headline',\n 'view_list',\n 'view_module',\n 'view_quilt',\n 'view_stream',\n 'view_week',\n 'vignette',\n 'visibility',\n 'visibility_off',\n 'voice_chat',\n 'voicemail',\n 'volume_down',\n 'volume_mute',\n 'volume_off',\n 'volume_up',\n 'vpn_key',\n 'vpn_lock',\n 'wallpaper',\n 'warning',\n 'watch',\n 'wb_auto',\n 'wb_cloudy',\n 'wb_incandescent',\n 'wb_iridescent',\n 'wb_sunny',\n 'wc',\n 'web',\n 'whatshot',\n 'widgets',\n 'wifi',\n 'wifi_lock',\n 'wifi_tethering',\n 'work',\n 'wrap_text',\n 'youtube_searched_for',\n 'zoom_in',\n 'zoom_out',\n ];\n\n get icons(): string[] {\n return this._icons;\n }\n\n filter(query: string): string[] {\n return this.icons.filter((el: string) => {\n return el.toLowerCase().indexOf(query ? query.toLowerCase() : '') > -1;\n });\n }\n}\n","import { Type } from '@angular/core';\nimport { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n/**\n * Directives\n */\nimport { TdAutoTrimDirective } from './forms/auto-trim/auto-trim.directive';\nimport { TdFullscreenDirective } from './directives/fullscreen/fullscreen.directive';\n\nconst TD_DIRECTIVES: Type<any>[] = [TdAutoTrimDirective, TdFullscreenDirective];\n\n// Validators\nconst TD_VALIDATORS: Type<any>[] = [];\n\n/**\n * PIPES\n */\nimport { TdTimeAgoPipe } from './pipes/time-ago/time-ago.pipe';\nimport { TdTimeDifferencePipe } from './pipes/time-difference/time-difference.pipe';\nimport { TdTimeUntilPipe } from './pipes/time-until/time-until.pipe';\nimport { TdBytesPipe } from './pipes/bytes/bytes.pipe';\nimport { TdDecimalBytesPipe } from './pipes/decimal-bytes/decimal-bytes.pipe';\nimport { TdDigitsPipe } from './pipes/digits/digits.pipe';\nimport { TdTruncatePipe } from './pipes/truncate/truncate.pipe';\n\nconst TD_PIPES: Type<any>[] = [\n TdTimeAgoPipe,\n TdTimeDifferencePipe,\n TdTimeUntilPipe,\n TdBytesPipe,\n TdDecimalBytesPipe,\n TdDigitsPipe,\n TdTruncatePipe,\n];\n\n/**\n * Services\n */\n\nimport { RouterPathService } from './services/router-path.service';\nimport { IconService } from './services/icon.service';\n\n@NgModule({\n imports: [FormsModule, CommonModule],\n declarations: [TD_DIRECTIVES, TD_PIPES, TD_VALIDATORS],\n exports: [FormsModule, CommonModule, TD_DIRECTIVES, TD_PIPES, TD_VALIDATORS],\n providers: [RouterPathService, IconService],\n})\nexport class CovalentCommonModule {}\n","import { ChangeDetectorRef } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\n\nimport { Observable, Subject } from 'rxjs';\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nconst noop: any = () => {\n // empty method\n};\n\nexport interface IControlValueAccessor extends ControlValueAccessor {\n value: any;\n valueChanges: Observable<any>;\n onChange: (_: any) => any;\n onTouched: () => any;\n}\n\nexport interface IHasChangeDetectorRef {\n _changeDetectorRef: ChangeDetectorRef;\n}\n\n/** Mixin to augment a component with ngModel support. */\nexport function mixinControlValueAccessor<T extends Constructor<IHasChangeDetectorRef>>\n (base: T, initialValue?: any): Constructor<IControlValueAccessor> & T {\n return class extends base {\n private _value: any = initialValue instanceof Array ? Object.assign([], initialValue) : initialValue;\n private _subjectValueChanges: Subject<any>;\n valueChanges: Observable<any>;\n\n constructor(...args: any[]) {\n super(...args); \n this._subjectValueChanges = new Subject<any>();\n this.valueChanges = this._subjectValueChanges.asObservable();\n }\n\n set value(v: any) {\n if (v !== this._value) {\n this._value = v;\n this.onChange(v);\n this._changeDetectorRef.markForCheck();\n this._subjectValueChanges.next(v);\n }\n }\n get value(): any {\n return this._value;\n }\n\n writeValue(value: any): void {\n this.value = value;\n this._changeDetectorRef.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n onChange = (_: any) => noop;\n onTouched = () => noop;\n\n };\n}\n","import {\n trigger, state, style, transition, animate, AnimationTriggerMetadata,\n query, animateChild, group,\n} from '@angular/animations';\n\nimport { IAnimationOptions } from '../common/interfaces';\n\nexport interface IRotateAnimation extends IAnimationOptions {\n degrees?: number;\n ease?: string;\n}\n\n/**\n * const tdRotateAnimation\n *\n * Parameter Options:\n * * degressStart: Degrees of rotation that the dom object will end up in during the \"false\" state\n * * degreesEnd: Degrees of rotation that the dom object will end up in during the \"true\" state\n * * duration: Duration the animation will run in milliseconds. Defaults to 150 ms.\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\n * * ease: Animation accelerates and decelerates. Defaults to ease-in.\n *\n * Returns an [AnimationTriggerMetadata] object with boolean states for a rotation animation.\n *\n * usage: [@tdRotate]=\"{ value: true | false, params: { degreesEnd: 90 }}\"\n */\n\nexport const tdRotateAnimation: AnimationTriggerMetadata = trigger('tdRotate', [\n state('0', style({\n transform: 'rotate({{ degressStart }}deg)',\n }), { params: { degressStart: 0 }}),\n state('1', style({\n transform: 'rotate({{ degreesEnd }}deg)',\n }), { params: { degreesEnd: 180 }}),\n transition('0 <=> 1', [\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ ease }}'),\n ]),\n ], { params: { duration: 250, delay: '0', ease: 'ease-in' }}),\n]);\n","import { trigger, state, style, transition, animate,\n AnimationTriggerMetadata, AUTO_STYLE, query, animateChild, group } from '@angular/animations';\nimport { IAnimationOptions } from '../common/interfaces';\n\nexport interface ICollapseAnimation extends IAnimationOptions {\n easeOnClose?: string;\n easeOnOpen?: string;\n}\n\n/**\n * const tdCollapseAnimation\n *\n * Parameter Options:\n * * duration: Duration the animation will run in milliseconds. Defaults to 150 ms.\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\n * * easeOnClose: Animation accelerates and decelerates when closing. Defaults to ease-in.\n * * easeOnOpen: Animation accelerates and decelerates when opening. Defaults to ease-out.\n *\n * Returns an [AnimationTriggerMetadata] object with boolean states for a collapse/expand animation.\n *\n * usage: [@tdCollapse]=\"{ value: true | false, params: { duration: 500 }}\"\n */\nexport const tdCollapseAnimation: AnimationTriggerMetadata = trigger('tdCollapse', [\n state('1', style({\n height: '0',\n overflow: 'hidden',\n })),\n state('0', style({\n height: AUTO_STYLE,\n overflow: AUTO_STYLE,\n })),\n transition('0 => 1', [\n style({\n overflow: 'hidden',\n height: AUTO_STYLE,\n }),\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ ease }}', style({\n height: '0',\n overflow: 'hidden',\n })),\n ]),\n ], { params: { duration: 150, delay: '0', ease: 'ease-in' }}),\n transition('1 => 0', [\n style({\n height: '0',\n overflow: 'hidden',\n }),\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ ease }}', style({\n overflow: 'hidden',\n height: AUTO_STYLE,\n })),\n ]),\n ], { params: { duration: 150, delay: '0', ease: 'ease-out' }}),\n]);\n","import { trigger, state, style, transition, animate,\n AnimationTriggerMetadata, AUTO_STYLE, query, animateChild, group } from '@angular/animations';\nimport { IAnimationOptions } from '../common/interfaces';\n\nexport interface IFadeInOutAnimation extends IAnimationOptions {\n easeOnIn?: string;\n easeOnOut?: string;\n}\n\n/**\n * const tdFadeInOutAnimation\n *\n * Parameter Options:\n * * duration: Duration the animation will run in milliseconds. Defaults to 150 ms.\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\n * * easeOnIn: Animation accelerates and decelerates when fading in. Defaults to ease-in.\n * * easeOnOut: Animation accelerates and decelerates when fading out. Defaults to ease-out.\n *\n * Returns an [AnimationTriggerMetadata] object with boolean states for a fade animation.\n *\n * usage: [@tdFadeInOut]=\"{ value: true | false, params: { duration: 200 }}\"\n */\nexport const tdFadeInOutAnimation: AnimationTriggerMetadata = trigger('tdFadeInOut', [\n state('0', style({\n opacity: '0',\n visibility: 'hidden',\n })),\n state('1', style({\n opacity: AUTO_STYLE,\n visibility: AUTO_STYLE,\n })),\n transition('0 => 1', [\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ easeOnIn }}'),\n ]),\n ], { params: { duration: 150, delay: '0', easeOnIn: 'ease-in' }}),\n transition('1 => 0', [\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ easeOnOut }}'),\n ]),\n ], { params: { duration: 150, delay: '0', easeOnOut: 'ease-out' }}),\n]);\n","\nimport { trigger, state, style, keyframes, transition, animate,\n AnimationTriggerMetadata, query, animateChild, group } from '@angular/animations';\nimport { IAnimationOptions } from '../common/interfaces';\n\n/**\n * const tdBounceAnimation\n *\n * Parameter Options:\n * * duration: Duration the animation will run in milliseconds. Defaults to 500 ms.\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\n * * ease: Animation accelerate and decelerate style. Defaults to ease-out.\n *\n * Returns an [AnimationTriggerMetadata] object with boolean states for a bounce animation.\n *\n * usage: [@tdBounce]=\"{ value: true | false, params: { duration: 200 }}\"\n */\nexport const tdBounceAnimation: AnimationTriggerMetadata = trigger('tdBounce', [\n state('0', style({\n transform: 'translate3d(0, 0, 0)',\n })),\n state('1', style({\n transform: 'translate3d(0, 0, 0)',\n })),\n transition('0 <=> 1', [\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ ease }}',\n keyframes([\n style({animationTimingFunction: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)', transform: 'translate3d(0, 0, 0)', offset: 0}),\n style({animationTimingFunction: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)', transform: 'translate3d(0, 0, 0)', offset: 0.2}),\n style({animationTimingFunction: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)', transform: 'translate3d(0, -30px, 0)', offset: 0.4}),\n style({animationTimingFunction: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)', transform: 'translate3d(0, -30px, 0)', offset: 0.43}),\n style({animationTimingFunction: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)', transform: 'translate3d(0, 0, 0)', offset: 0.53}),\n style({animationTimingFunction: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)', transform: 'translate3d(0, -15px, 0)', offset: .7}),\n style({animationTimingFunction: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)', transform: 'translate3d(0, 0, 0)', offset: 0.8}),\n style({transform: 'translate3d(0, -4px, 0)', offset: .9}),\n style({animationTimingFunction: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)', transform: 'translate3d(0, 0, 0)', offset: 1.0}),\n ])),\n ]),\n ], { params: { duration: 500, delay: '0', ease: 'ease-out' }}),\n]);\n","\nimport { trigger, state, style, keyframes, transition, animate,\n AnimationTriggerMetadata, AUTO_STYLE, query, animateChild, group } from '@angular/animations';\nimport { IAnimationOptions } from '../common/interfaces';\n\n/**\n * const tdFlashAnimation\n *\n * Parameter Options:\n * * duration: Duration the animation will run in milliseconds. Defaults to 500 ms.\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\n * * ease: Animation accelerate and decelerate style. Defaults to ease-out.\n *\n * Returns an [AnimationTriggerMetadata] object with boolean states for a flash animation.\n *\n * usage: [@tdFlash]=\"{ value: true | false, params: { duration: 200 }}\"\n */\nexport const tdFlashAnimation: AnimationTriggerMetadata = trigger('tdFlash', [\n state('0', style({\n opacity: 1,\n })),\n state('1', style({\n opacity: 1,\n })),\n transition('0 <=> 1', [\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ ease }}',\n keyframes([\n style({opacity: 1, offset: 0}),\n style({opacity: 0, offset: 0.25}),\n style({opacity: 1, offset: 0.5}),\n style({opacity: 0, offset: 0.75}),\n style({opacity: 1, offset: 1.0}),\n ])),\n ]),\n ], { params: { duration: 500, delay: '0', ease: 'ease-out' }}),\n]);\n","\nimport { trigger, state, style, keyframes, transition, animate,\n AnimationTriggerMetadata, AUTO_STYLE, query, animateChild, group } from '@angular/animations';\nimport { IAnimationOptions } from '../common/interfaces';\n\n/**\n * const tdHeadshakeAnimation\n *\n * Parameter Options:\n * * duration: Duration the animation will run in milliseconds. Defaults to 500 ms.\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\n * * ease: Animation accelerate and decelerate style. Defaults to ease-out.\n *\n * Returns an [AnimationTriggerMetadata] object with boolean states for a headshake animation.\n *\n * usage: [@tdHeadshake]=\"{ value: true | false, params: { duration: 200 }}\"\n */\nexport const tdHeadshakeAnimation: AnimationTriggerMetadata = trigger('tdHeadshake', [\n state('0', style({\n transform: 'translateX(0)',\n })),\n state('1', style({\n transform: 'translateX(0)',\n })),\n transition('0 <=> 1', [\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ ease }}',\n keyframes([\n style({transform: 'translateX(0)', offset: 0}),\n style({transform: 'translateX(-6px) rotateY(-9deg)', offset: 0.065}),\n style({transform: 'translateX(5px) rotateY(7deg)', offset: 0.185}),\n style({transform: 'translateX(-3px) rotateY(-5deg)', offset: 0.315}),\n style({transform: 'translateX(2px) rotateY(3deg)', offset: 0.435}),\n style({transform: 'translateX(0)', offset: 0.50}),\n ])),\n ]),\n ], { params: { duration: 500, delay: '0', ease: 'ease-out' }}),\n]);\n","\nimport { trigger, state, style, keyframes, transition, animate,\n AnimationTriggerMetadata, AUTO_STYLE, query, animateChild, group } from '@angular/animations';\nimport { IAnimationOptions } from '../common/interfaces';\n\n/**\n * const tdJelloAnimation\n *\n * Parameter Options:\n * * duration: Duration the animation will run in milliseconds. Defaults to 500 ms.\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\n * * ease: Animation accelerate and decelerate style. Defaults to ease-out.\n *\n * Returns an [AnimationTriggerMetadata] object with boolean states for a jello animation.\n *\n * usage: [@tdJello]=\"{ value: true | false, params: { duration: 200 }}\"\n */\nexport const tdJelloAnimation: AnimationTriggerMetadata = trigger('tdJello', [\n state('0', style({\n transform: 'none',\n })),\n state('1', style({\n transform: 'none',\n })),\n transition('0 <=> 1', [\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ ease }}',\n keyframes([\n style({transform: 'none', offset: 0}),\n style({transform: 'none', offset: 0.011}),\n style({transform: 'skewX(-12.5deg) skewY(-12.5deg)', offset: 0.222}),\n style({transform: 'skewX(6.25deg) skewY(6.25deg)', offset: 0.333}),\n style({transform: 'skewX(-3.125deg) skewY(-3.125deg)', offset: 0.444}),\n style({transform: 'skewX(1.5625deg) skewY(1.5625deg)', offset: 0.555}),\n style({transform: 'skewX(-0.78125deg) skewY(-0.78125deg)', offset: 0.666}),\n style({transform: 'skewX(0.390625deg) skewY(0.390625deg)', offset: 0.777}),\n style({transform: 'skewX(-0.1953125deg) skewY(-0.1953125deg)', offset: 0.888}),\n ])),\n ]),\n ], { params: { duration: 500, delay: '0', ease: 'ease-out' }}),\n]);\n","\nimport { trigger, state, style, keyframes, transition, animate,\n AnimationTriggerMetadata, AUTO_STYLE, query, animateChild, group } from '@angular/animations';\nimport { IAnimationOptions } from '../common/interfaces';\n\n/**\n * const tdPulseAnimation\n *\n * Parameter Options:\n * * duration: Duration the animation will run in milliseconds. Defaults to 500 ms.\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\n * * ease: Animation accelerate and decelerate style. Defaults to ease-out.\n *\n * Returns an [AnimationTriggerMetadata] object with boolean states for a pulse animation.\n *\n * usage: [@tdPulse]=\"{ value: true | false, params: { duration: 200 }}\"\n */\nexport const tdPulseAnimation: AnimationTriggerMetadata = trigger('tdPulse', [\n state('0', style({\n transform: 'scale3d(1, 1, 1)',\n })),\n state('1', style({\n transform: 'scale3d(1, 1, 1)',\n })),\n transition('0 <=> 1', [\n group([\n query('@*', animateChild(), { optional: true }),\n animate('{{ duration }}ms {{ delay }}ms {{ ease }}',\n keyframes([\n style({ transform: 'scale3d(1, 1, 1)', offset: 0 }),\n style({ transform: 'scale3d(1.05, 1.05, 1.05)', offset: 0.5 }),\n style({ transform: 'scale3d(1, 1, 1)', offset: 1.0 }),\n ]),\n ),\n ]),\n ], { params: { duration: 500, delay: '0', ease: 'ease-out' }}),\n]);\n","import { Validators, AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport class CovalentValidators {\n static min(minValue: any): ValidatorFn {\n let func: ValidatorFn = (c: AbstractControl): {[key: string]: any} => {\n if (!!Validators.required(c) || (!minValue && minValue !== 0)) {\n return undefined;\n }\n let v: number = c.value;\n return v < minValue ?\n { min: {minValue: minValue, actualValue: v} } :\n undefined;\n };\n return func;\n }\n\n static max(maxValue: any): ValidatorFn {\n let func: ValidatorFn = (c: AbstractControl): {[key: string]: any} => {\n if (!!Validators.required(c) || (!maxValue && maxValue !== 0)) {\n return undefined;\n }\n let v: number = c.value;\n return v > maxValue ?\n { max: {maxValue: maxValue, actualValue: v} } :\n undefined;\n };\n return func;\n }\n\n static numberRequired(c: AbstractControl): {[key: string]: any} {\n return (Number.isNaN(c.value)) ?\n { required: true } :\n undefined;\n }\n\n}\n","import { Component, Directive, Input, Renderer2, ElementRef, AfterViewInit, ViewContainerRef, TemplateRef, ViewChild,\n HostBinding, HostListener, ChangeDetectorRef } from '@angular/core';\n\nimport { tdCollapseAnimation } from '@covalent/core/common';\n\n@Directive({\n selector: '[tdMessageContainer]',\n})\nexport class TdMessageContainerDirective {\n constructor(public viewContainer: ViewContainerRef) { }\n}\n\n@Component({\n selector: 'td-message',\n templateUrl: './message.component.html',\n styleUrls: ['./message.component.scss'],\n animations: [\n tdCollapseAnimation,\n ],\n})\nexport class TdMessageComponent implements AfterViewInit {\n\n private _color: string;\n private _opened: boolean = true;\n private _hidden: boolean = false;\n private _animating: boolean = false;\n private _initialized: boolean = false;\n\n @ViewChild(TdMessageContainerDirective) _childElement: TdMessageContainerDirective;\n @ViewChild(TemplateRef) _template: TemplateRef<any>;\n\n /**\n * Binding host to tdCollapse animation\n */\n @HostBinding('@tdCollapse')\n get collapsedAnimation(): any {\n return { value: !this._opened, duration: 100 };\n }\n\n /**\n * Binding host to display style when hidden\n */\n @HostBinding('style.display')\n get hidden(): string {\n return this._hidden ? 'none' : undefined;\n }\n\n /**\n * label: string\n *\n * Sets the label of the message.\n */\n @Input('label') label: string;\n\n /**\n * sublabel?: string\n *\n * Sets the sublabel of the message.\n */\n @Input('sublabel') sublabel: string;\n\n /**\n * icon?: string\n *\n * The icon to be displayed before the title.\n * Defaults to `info_outline` icon\n */\n @Input('icon') icon: string = 'info_outline';\n\n /**\n * color?: primary | accent | warn\n *\n * Sets the color of the message.\n * Can also use any material color: purple | light-blue, etc.\n */\n @Input('color')\n set color(color: string) {\n this._renderer.removeClass(this._elementRef.nativeElement, 'mat-' + this._color);\n this._renderer.removeClass(this._elementRef.nativeElement, 'bgc-' + this._color + '-100');\n this._renderer.removeClass(this._elementRef.nativeElement, 'tc-' + this._color + '-700');\n if (color === 'primary' || color === 'accent' || color === 'warn') {\n this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + color);\n } else {\n this._renderer.addClass(this._elementRef.nativeElement, 'bgc-' + color + '-100');\n this._renderer.addClass(this._elementRef.nativeElement, 'tc-' + color + '-700');\n }\n this._color = color;\n this._changeDetectorRef.markForCheck();\n }\n get color(): string {\n return this._color;\n }\n\n /**\n * opened?: boolean\n *\n * Shows or hiddes the message depending on its value.\n * Defaults to 'true'.\n */\n @Input('opened')\n set opened(opened: boolean) {\n if (this._initialized) {\n if (opened) {\n this.open();\n } else {\n this.close();\n }\n } else {\n this._opened = opened;\n }\n }\n get opened(): boolean {\n return this._opened;\n }\n\n constructor(private _renderer: Renderer2,\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-message');\n }\n\n /**\n * Detach element when close animation is finished to set animating state to false\n * hidden state to true and detach element from DOM\n */\n @HostListener('@tdCollapse.done')\n animationDoneListener(): void {\n if (!this._opened) {\n this._hidden = true;\n this._detach();\n }\n this._animating = false;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Initializes the component and attaches the content.\n */\n ngAfterViewInit(): void {\n Promise.resolve(undefined).then(() => {\n if (this._opened) {\n this._attach();\n }\n this._initialized = true;\n });\n }\n\n /**\n * Renders the message on screen\n * Validates if there is an animation currently and if its already opened\n */\n open(): void {\n if (!this._opened && !this._animating) {\n this._opened = true;\n this._attach();\n this._startAnimationState();\n }\n }\n\n /**\n * Removes the message content from screen.\n * Validates if there is an animation currently and if its already closed\n */\n close(): void {\n if (this._opened && !this._animating) {\n this._opened = false;\n this._startAnimationState();\n }\n }\n\n /**\n * Toggles between open and close depending on state.\n */\n toggle(): void {\n if (this._opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Method to set the state before starting an animation\n */\n private _startAnimationState(): void {\n this._animating = true;\n this._hidden = false;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Method to attach template to DOM\n */\n private _attach(): void {\n this._childElement.viewContainer.createEmbeddedView(this._template);\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Method to detach template from DOM\n */\n private _detach(): void {\n this._childElement.viewContainer.clear();\n this._changeDetectorRef.markForCheck();\n }\n}\n","import { Type } from '@angular/core';\nimport { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { TdMessageComponent, TdMessageContainerDirective } from './message.component';\n\nconst TD_MESSAGE: Type<any>[] = [\n TdMessageComponent,\n TdMessageContainerDirective,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n ],\n declarations: [\n TD_MESSAGE,\n ],\n exports: [\n TD_MESSAGE,\n ],\n})\nexport class CovalentMessageModule {\n\n}\n","import { Component, Input, Output, forwardRef, DoCheck, ViewChild, ViewChildren, QueryList, OnInit, HostListener,\n ElementRef, Optional, Inject, Directive, TemplateRef, ViewContainerRef, ContentChild, ChangeDetectionStrategy,\n ChangeDetectorRef, AfterViewInit, OnDestroy, HostBinding, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { EventEmitter } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl } from '@angular/forms';\n\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { UP_ARROW, DOWN_ARROW, ESCAPE, LEFT_ARROW, RIGHT_ARROW, DELETE, BACKSPACE, ENTER, SPACE, TAB, HOME } from '@angular/cdk/keycodes';\nimport { MatChip } from '@angular/material/chips';\nimport { MatInput } from '@angular/material/input';\nimport { MatOption } from '@angular/material/core';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\nimport { Observable, Subscription, timer, merge, fromEvent } from 'rxjs';\nimport { filter, debounceTime } from 'rxjs/operators';\n\nimport { ICanDisable, mixinDisabled, IControlValueAccessor, mixinControlValueAccessor } from '@covalent/core/common';\n\n@Directive({\n selector: '[td-chip]ng-template',\n})\nexport class TdChipDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Directive({\n selector: '[td-autocomplete-option]ng-template',\n})\nexport class TdAutocompleteOptionDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\nexport class TdChipsBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdChipsMixinBase = mixinControlValueAccessor(mixinDisabled(TdChipsBase), []);\n\n@Component({\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdChipsComponent),\n multi: true,\n }],\n selector: 'td-chips',\n inputs: ['disabled', 'value'],\n styleUrls: ['./chips.component.scss' ],\n templateUrl: './chips.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdChipsComponent extends _TdChipsMixinBase implements IControlValueAccessor, DoCheck, OnInit, AfterViewInit, OnDestroy, ICanDisable {\n\n private _outsideClickSubs: Subscription = Subscription.EMPTY;\n private _inputValueChangesSubs: Subscription = Subscription.EMPTY;\n private _isMousedown: boolean = false;\n\n private _items: any[];\n private _length: number = 0;\n private _stacked: boolean = false;\n private _requireMatch: boolean = false;\n private _color: 'primary' | 'accent' | 'warn' = 'primary';\n private _inputPosition: 'before' | 'after' = 'after';\n private _chipAddition: boolean = true;\n private _chipRemoval: boolean = true;\n private _focused: boolean = false;\n private _required: boolean = false;\n private _tabIndex: number = 0;\n private _touchendDebounce: number = 100;\n\n _internalClick: boolean = false;\n _internalActivateOption: boolean = false;\n\n @ViewChild('input') _nativeInput: ElementRef;\n @ViewChild(MatInput) _inputChild: MatInput;\n @ViewChild(MatAutocompleteTrigger) _autocompleteTrigger: MatAutocompleteTrigger;\n @ViewChildren(MatChip) _chipsChildren: QueryList<MatChip>;\n\n @ContentChild(TdChipDirective) _chipTemplate: TdChipDirective;\n @ContentChild(TdAutocompleteOptionDirective) _autocompleteOptionTemplate: TdAutocompleteOptionDirective;\n\n @ViewChildren(MatOption) _options: QueryList<MatOption>;\n\n /**\n * Flag that is true when autocomplete is focused.\n */\n get focused(): boolean {\n return this._focused;\n }\n\n /**\n * FormControl for the matInput element.\n */\n inputControl: FormControl = new FormControl();\n\n /**\n * items?: any[]\n * Renders the `mat-autocomplete` with the provided list to display as options.\n */\n @Input('items')\n set items(items: any[]) {\n this._items = items;\n this._setFirstOptionActive();\n this._changeDetectorRef.markForCheck();\n }\n get items(): any[] {\n return this._items;\n }\n\n /**\n * stacked?: boolean\n * Set stacked or horizontal chips depending on value.\n * Defaults to false.\n */\n @Input('stacked')\n set stacked(stacked: boolean) {\n this._stacked = coerceBooleanProperty(stacked);\n }\n get stacked(): boolean {\n return this._stacked;\n }\n\n /**\n * inputPosition?: 'before' | 'after'\n * Set input position before or after the chips.\n * Defaults to 'after'.\n */\n @Input('inputPosition')\n set inputPosition(inputPosition: 'before' | 'after') {\n this._inputPosition = inputPosition;\n }\n get inputPosition(): 'before' | 'after' {\n return this._inputPosition;\n }\n\n /**\n * requireMatch?: boolean\n * Blocks custom inputs and only allows selections from the autocomplete list.\n */\n @Input('requireMatch')\n set requireMatch(requireMatch: boolean) {\n this._requireMatch = coerceBooleanProperty(requireMatch);\n }\n get requireMatch(): boolean {\n return this._requireMatch;\n }\n\n /**\n * required?: boolean\n * Value is set to true if at least one chip is needed\n * Defaults to false\n */\n @Input('required')\n set required(required: boolean) {\n this._required = coerceBooleanProperty(required);\n }\n get required(): boolean {\n return this._required;\n }\n\n /**\n * chipAddition?: boolean\n * Disables the ability to add chips. When setting disabled as true, this will be overriden.\n * Defaults to true.\n */\n @Input('chipAddition')\n set chipAddition(chipAddition: boolean) {\n this._chipAddition = chipAddition;\n this._toggleInput();\n }\n get chipAddition(): boolean {\n return this._chipAddition;\n }\n\n /**\n * Checks if not in disabled state and if chipAddition is set to 'true'\n * States if a chip can be added and if the input is available\n */\n get canAddChip(): boolean {\n return this.chipAddition && !this.disabled;\n }\n\n /**\n * chipRemoval?: boolean\n * Disables the ability to remove chips. If it doesn't exist chip remmoval defaults to true.\n * When setting disabled as true, this will be overriden to false.\n */\n @Input('chipRemoval')\n set chipRemoval(chipRemoval: boolean) {\n this._chipRemoval = chipRemoval;\n }\n get chipRemoval(): boolean {\n return this._chipRemoval;\n }\n\n /**\n * Checks if not in disabled state and if chipRemoval is set to 'true'\n * States if a chip can be removed\n */\n get canRemoveChip(): boolean {\n return this.chipRemoval && !this.disabled;\n }\n\n /**\n * returns the display placeholder\n */\n get displayPlaceHolder(): string {\n if (!this.canAddChip) {\n return '';\n }\n return (this._required) ? `${this.placeholder} *` : this.placeholder;\n }\n\n /**\n * placeholder?: string\n * Placeholder for the autocomplete input.\n */\n @Input('placeholder') placeholder: string;\n\n /**\n * debounce?: number\n * Debounce timeout between keypresses. Defaults to 200.\n */\n @Input('debounce') debounce: number = 200;\n\n /**\n * color?: 'primary' | 'accent' | 'warn'\n * Sets the color for the input and focus/selected state of the chips.\n * Defaults to 'primary'\n */\n @Input('color')\n set color(color: 'primary' | 'accent' | 'warn') {\n if (color) {\n this._renderer.removeClass(this._elementRef.nativeElement, 'mat-' + this._color);\n this._color = color;\n this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);\n }\n }\n get color(): 'primary' | 'accent' | 'warn' {\n return this._color;\n }\n\n /**\n * add?: function\n * Method to be executed when a chip is added.\n * Sends chip value as event.\n */\n @Output('add') onAdd: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * remove?: function\n * Method to be executed when a chip is removed.\n * Sends chip value as event.\n */\n @Output('remove') onRemove: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * inputChange?: function\n * Method to be executed when the value in the autocomplete input changes.\n * Sends string value as event.\n */\n @Output('inputChange') onInputChange: EventEmitter<string> = new EventEmitter<string>();\n\n /**\n * chipFocus?: function\n * Method to be executed when a chip is focused.\n * Sends chip value as event.\n */\n @Output('chipFocus') onChipFocus: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * blur?: function\n * Method to be executed when a chip is blurred.\n * Sends chip value as event.\n */\n @Output('chipBlur') onChipBlur: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Hostbinding to set the a11y of the TdChipsComponent depending on its state\n */\n @HostBinding('attr.tabindex')\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n constructor(private _elementRef: ElementRef,\n private _renderer: Renderer2,\n @Optional() @Inject(DOCUMENT) private _document: any,\n _changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);\n }\n\n /**\n * compareWith? function\n * Function used to check whether a chip value already exists.\n * Defaults to strict equality comparison ===\n */\n @Input('compareWith') compareWith: (o1: any, o2: any) => boolean = (o1: any, o2: any) => {\n return o1 === o2;\n }\n\n /**\n * Listens to host focus event to act on it\n */\n @HostListener('focus', ['$event'])\n focusListener(event: FocusEvent): void {\n // should only focus if its not via mousedown to prevent clashing with autocomplete\n if (!this._isMousedown) {\n this.focus();\n }\n event.preventDefault();\n }\n\n /**\n * Listens to host mousedown event to act on it\n */\n @HostListener('mousedown', ['$event'])\n mousedownListener(event: FocusEvent): void {\n // sets a flag to know if there was a mousedown and then it returns it back to false\n this._isMousedown = true;\n timer().toPromise().then(() => {\n this._isMousedown = false;\n });\n }\n\n /**\n * If clicking on :host or `td-chips-wrapper`, then we stop the click propagation so the autocomplete\n * doesnt close automatically.\n */\n @HostListener('click', ['$event'])\n clickListener(event: Event): void {\n const clickTarget: HTMLElement = <HTMLElement>event.target;\n if (clickTarget === this._elementRef.nativeElement ||\n clickTarget.className.indexOf('td-chips-wrapper') > -1) {\n this.focus();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * Listens to host keydown event to act on it depending on the keypress\n */\n @HostListener('keydown', ['$event'])\n keydownListener(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case TAB:\n // if tabing out, then unfocus the component\n timer().toPromise().then(() => {\n this.removeFocusedState();\n });\n break;\n case ESCAPE:\n if (this._inputChild.focused) {\n this._nativeInput.nativeElement.blur();\n this.removeFocusedState();\n this._closeAutocomplete();\n } else {\n this.focus();\n }\n break;\n default:\n // default\n }\n }\n\n ngOnInit(): void {\n this._inputValueChangesSubs = this.inputControl.valueChanges.pipe(\n debounceTime(this.debounce),\n ).subscribe((value: string) => {\n this.onInputChange.emit(value ? value : '');\n });\n this._changeDetectorRef.markForCheck();\n }\n\n ngAfterViewInit(): void {\n this._watchOutsideClick();\n this._changeDetectorRef.markForCheck();\n }\n\n ngDoCheck(): void {\n // Throw onChange event only if array changes size.\n if (this.value && this.value.length !== this._length) {\n this._length = this.value.length;\n this.onChange(this.value);\n }\n }\n\n ngOnDestroy(): void {\n this._outsideClickSubs.unsubscribe();\n this._inputValueChangesSubs.unsubscribe();\n }\n\n _setInternalClick(): void {\n this._internalClick = true;\n }\n\n /** Method executed when the disabled value changes */\n onDisabledChange(v: boolean): void {\n this._toggleInput();\n }\n\n /**\n * Method that is executed when trying to create a new chip from the autocomplete.\n * It check if [requireMatch] is enabled, and tries to add the first active option\n * else if just adds the value thats on the input\n * returns 'true' if successful, 'false' if it fails.\n */\n _handleAddChip(): boolean {\n let value: any;\n if (this.requireMatch) {\n let selectedOptions: MatOption[] = this._options.toArray().filter((option: MatOption) => {\n return option.active;\n });\n if (selectedOptions.length > 0) {\n value = selectedOptions[0].value;\n selectedOptions[0].setInactiveStyles();\n }\n if (!value) {\n return false;\n }\n } else {\n // if there is a selection, then use that\n // else use the input value as chip\n if (this._autocompleteTrigger.activeOption) {\n value = this._autocompleteTrigger.activeOption.value;\n this._autocompleteTrigger.activeOption.setInactiveStyles();\n } else {\n value = this._inputChild.value;\n if (value.trim() === '') {\n return false;\n }\n }\n }\n return this.addChip(value);\n }\n\n /**\n * Method thats exectuted when trying to add a value as chip\n * returns 'true' if successful, 'false' if it fails.\n */\n addChip(value: any): boolean {\n /**\n * add a debounce ms delay when reopening the autocomplete to give it time\n * to rerender the next list and at the correct spot\n */\n\n this._closeAutocomplete();\n timer(this.debounce).toPromise().then(() => {\n this.setFocusedState();\n this._setFirstOptionActive();\n this._openAutocomplete();\n });\n\n this.inputControl.setValue('');\n // check if value is already part of the model\n if (this.value.findIndex((item: any) => this.compareWith(item, value)) > -1) {\n return false;\n }\n\n this.value.push(value);\n this.onAdd.emit(value);\n this.onChange(this.value);\n this._changeDetectorRef.markForCheck();\n return true;\n }\n\n /**\n * Method that is executed when trying to remove a chip.\n * returns 'true' if successful, 'false' if it fails.\n */\n removeChip(index: number): boolean {\n let removedValues: any[] = this.value.splice(index, 1);\n if (removedValues.length === 0) {\n return false;\n }\n\n /**\n * Checks if deleting last single chip, to focus input afterwards\n * Else check if its not the last chip of the list to focus the next one.\n */\n if (index === (this._totalChips - 1) && index === 0) {\n this._inputChild.focus();\n } else if (index < (this._totalChips - 1)) {\n this._focusChip(index + 1);\n } else if (index > 0) {\n this._focusChip(index - 1);\n }\n\n this.onRemove.emit(removedValues[0]);\n this.onChange(this.value);\n this.inputControl.setValue('');\n this._changeDetectorRef.markForCheck();\n return true;\n }\n\n /**\n * Sets blur of chip and sends out event\n */\n _handleChipBlur(event: FocusEvent, value: any): void {\n this.onChipBlur.emit(value);\n }\n\n /**\n * Sets focus of chip and sends out event\n */\n _handleChipFocus(event: FocusEvent, value: any): void {\n this.setFocusedState();\n this.onChipFocus.emit(value);\n }\n\n _handleFocus(): boolean {\n this.setFocusedState();\n this._setFirstOptionActive();\n return true;\n }\n\n /**\n * Sets focus state of the component\n */\n setFocusedState(): void {\n if (!this.disabled) {\n this._focused = true;\n this._tabIndex = -1;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Removes focus state of the component\n */\n removeFocusedState(): void {\n this._focused = false;\n this._tabIndex = 0;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Programmatically focus the input or first chip. Since its the component entry point\n * depending if a user can add or remove chips\n */\n focus(): void {\n if (this.canAddChip) {\n this._inputChild.focus();\n } else if (!this.disabled) {\n this._focusFirstChip();\n }\n }\n\n /**\n * Passes relevant input key presses.\n */\n _inputKeydown(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case UP_ARROW:\n /**\n * Since the first item is highlighted on [requireMatch], we need to inactivate it\n * when pressing the up key\n */\n if (this.requireMatch) {\n let length: number = this._options.length;\n if (length > 1 && this._options.toArray()[0].active && this._internalActivateOption) {\n this._options.toArray()[0].setInactiveStyles();\n this._internalActivateOption = false;\n // prevent default window scrolling\n event.preventDefault();\n }\n }\n break;\n case LEFT_ARROW:\n case DELETE:\n case BACKSPACE:\n this._closeAutocomplete();\n /** Check to see if input is empty when pressing left arrow to move to the last chip */\n if (!this._inputChild.value) {\n this._focusLastChip();\n // prevent default window scrolling\n event.preventDefault();\n }\n break;\n case RIGHT_ARROW:\n this._closeAutocomplete();\n /** Check to see if input is empty when pressing right arrow to move to the first chip */\n if (!this._inputChild.value) {\n this._focusFirstChip();\n // prevent default window scrolling\n event.preventDefault();\n }\n break;\n default:\n // default\n }\n }\n\n /**\n * Passes relevant chip key presses.\n */\n _chipKeydown(event: KeyboardEvent, index: number): void {\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n /** Check to see if we can delete a chip */\n if (this.canRemoveChip) {\n this.removeChip(index);\n }\n break;\n case UP_ARROW:\n case LEFT_ARROW:\n /**\n * Check to see if left/down arrow was pressed while focusing the first chip to focus input next\n * Also check if input should be focused\n */\n if (index === 0) {\n // only try to target input if pressing left\n if (this.canAddChip && event.keyCode === LEFT_ARROW) {\n this._inputChild.focus();\n } else {\n this._focusLastChip();\n }\n } else if (index > 0) {\n this._focusChip(index - 1);\n }\n // prevent default window scrolling\n event.preventDefault();\n break;\n case DOWN_ARROW:\n case RIGHT_ARROW:\n /**\n * Check to see if right/up arrow was pressed while focusing the last chip to focus input next\n * Also check if input should be focused\n */\n if (index === (this._totalChips - 1)) {\n // only try to target input if pressing right\n if (this.canAddChip && event.keyCode === RIGHT_ARROW) {\n this._inputChild.focus();\n } else {\n this._focusFirstChip();\n }\n } else if (index < (this._totalChips - 1)) {\n this._focusChip(index + 1);\n }\n // prevent default window scrolling\n event.preventDefault();\n break;\n default:\n // default\n }\n }\n\n /**\n * Method to remove from display the value added from the autocomplete since it goes directly as chip.\n */\n _removeInputDisplay(): string {\n return '';\n }\n\n /**\n * Method to open the autocomplete manually if its not already opened\n */\n _openAutocomplete(): void {\n if (!this._autocompleteTrigger.panelOpen) {\n this._autocompleteTrigger.openPanel();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Method to close the autocomplete manually if its not already closed\n */\n _closeAutocomplete(): void {\n if (this._autocompleteTrigger.panelOpen) {\n this._autocompleteTrigger.closePanel();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Get total of chips\n */\n get _totalChips(): number {\n let chips: MatChip[] = this._chipsChildren.toArray();\n return chips.length;\n }\n\n /**\n * Method to focus a desired chip by index\n */\n private _focusChip(index: number): void {\n /** check to see if index exists in the array before focusing */\n if (index > -1 && this._totalChips > index) {\n this._chipsChildren.toArray()[index].focus();\n }\n }\n\n /** Method to focus first chip */\n private _focusFirstChip(): void {\n this._focusChip(0);\n }\n\n /** Method to focus last chip */\n private _focusLastChip(): void {\n this._focusChip(this._totalChips - 1);\n }\n\n /**\n * Method to toggle the disable state of input\n * Checks if not in disabled state and if chipAddition is set to 'true'\n */\n private _toggleInput(): void {\n if (this.canAddChip) {\n this.inputControl.enable();\n } else {\n this.inputControl.disable();\n }\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Sets first option as active to let the user know which one will be added when pressing enter\n * Only if [requireMatch] has been set\n */\n private _setFirstOptionActive(): void {\n if (this.requireMatch) {\n // need to use a timer here to wait until the autocomplete has been opened (end of queue)\n timer().toPromise().then(() => {\n if (this.focused && this._options && this._options.length > 0) {\n // clean up of previously active options\n this._options.toArray().forEach((option: MatOption) => {\n option.setInactiveStyles();\n });\n // set the first one as active\n this._options.toArray()[0].setActiveStyles();\n this._internalActivateOption = true;\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n }\n\n /**\n * Watches clicks outside of the component to remove the focus\n * The autocomplete panel is considered inside the component so we\n * need to use a flag to find out when its clicked.\n */\n private _watchOutsideClick(): void {\n if (this._document) {\n this._outsideClickSubs = merge(\n fromEvent(this._document, 'click'),\n fromEvent(this._document, 'touchend'),\n ).pipe(\n debounceTime(this._touchendDebounce),\n filter(\n (event: MouseEvent) => {\n const clickTarget: HTMLElement = <HTMLElement>event.target;\n setTimeout(() => {\n this._internalClick = false;\n });\n return this.focused &&\n (clickTarget !== this._elementRef.nativeElement) &&\n !this._elementRef.nativeElement.contains(clickTarget) && !this._internalClick;\n },\n ),\n ).subscribe(() => {\n if (this.focused) {\n this._autocompleteTrigger.closePanel();\n this.removeFocusedState();\n this.onTouched();\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n return undefined;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\n\nimport { TdChipsComponent, TdChipDirective, TdAutocompleteOptionDirective } from './chips.component';\n\n@NgModule({\n imports: [\n ReactiveFormsModule,\n CommonModule,\n MatInputModule,\n MatIconModule,\n MatChipsModule,\n MatAutocompleteModule,\n ],\n declarations: [\n TdChipsComponent,\n TdChipDirective,\n TdAutocompleteOptionDirective,\n ],\n exports: [\n TdChipsComponent,\n TdChipDirective,\n TdAutocompleteOptionDirective,\n ],\n})\nexport class CovalentChipsModule {\n\n}\n","import { Component, Input, Output, Renderer2, ElementRef, ContentChildren, QueryList, HostListener } from '@angular/core';\n\nimport { TdDataTableCellComponent } from '../data-table-cell/data-table-cell.component';\nimport { TdDataTableColumnComponent } from '../data-table-column/data-table-column.component';\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'tr[td-data-table-column-row]',\n styleUrls: ['./data-table-row.component.scss' ],\n templateUrl: './data-table-row.component.html',\n})\nexport class TdDataTableColumnRowComponent {\n\n constructor(protected _elementRef: ElementRef, protected _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table-column-row');\n }\n\n}\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'tr[td-data-table-row]',\n styleUrls: ['./data-table-row.component.scss' ],\n templateUrl: './data-table-row.component.html',\n})\nexport class TdDataTableRowComponent {\n\n private _selected: boolean = false;\n\n @Input('selected')\n set selected(selected: boolean) {\n if (selected) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-selected');\n } else {\n this._renderer.removeClass(this._elementRef.nativeElement, 'td-selected');\n }\n this._selected = selected;\n }\n get selected(): boolean {\n return this._selected;\n }\n\n get height(): number {\n let height: number = 48;\n if (this._elementRef.nativeElement) {\n height = (<HTMLElement>this._elementRef.nativeElement).getBoundingClientRect().height;\n }\n return height;\n }\n\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table-row');\n }\n\n /**\n * Listening to click event to explicitly focus the row element.\n */\n @HostListener('click')\n clickListener(): void {\n this.focus();\n }\n\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\n\n@Directive({selector: '[tdDataTableTemplate]ng-template'})\nexport class TdDataTableTemplateDirective extends TemplatePortalDirective {\n\n @Input() tdDataTableTemplate: string;\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n","import { Component, Input, Output, EventEmitter, forwardRef, ChangeDetectionStrategy,\n ChangeDetectorRef, ViewChild, OnDestroy, AfterViewInit,\n ContentChildren, TemplateRef, AfterContentInit, QueryList, Inject,\n Optional, ViewChildren, ElementRef, OnInit, AfterContentChecked } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ENTER, SPACE, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';\n\nimport { Observable, Subscription, Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { TdDataTableRowComponent } from './data-table-row/data-table-row.component';\nimport { ITdDataTableSortChangeEvent, TdDataTableColumnComponent } from './data-table-column/data-table-column.component';\nimport { TdDataTableTemplateDirective } from './directives/data-table-template.directive';\n\nimport { IControlValueAccessor, mixinControlValueAccessor } from '@covalent/core/common';\n\nexport enum TdDataTableSortingOrder {\n Ascending = 'ASC',\n Descending = 'DESC',\n}\n\nexport interface ITdDataTableColumnWidth {\n min?: number;\n max?: number;\n}\n\nexport interface ITdDataTableColumn {\n name: string;\n label: string;\n tooltip?: string;\n numeric?: boolean;\n format?: (value: any) => any;\n nested?: boolean;\n sortable?: boolean;\n hidden?: boolean;\n filter?: boolean;\n width?: ITdDataTableColumnWidth | number;\n}\n\nexport interface ITdDataTableSelectEvent {\n row: any;\n selected: boolean;\n index: number;\n}\n\nexport interface ITdDataTableSelectAllEvent {\n rows: any[];\n selected: boolean;\n}\n\nexport interface ITdDataTableRowClickEvent {\n row: any;\n index: number;\n}\n\nexport interface IInternalColumnWidth {\n value: number;\n limit: boolean;\n index: number;\n min?: boolean;\n max?: boolean;\n}\n\n/**\n * Constant to set the rows offset before and after the viewport\n */\nconst TD_VIRTUAL_OFFSET: number = 2;\n\n/**\n * Constant to set default row height if none is provided\n */\nconst TD_VIRTUAL_DEFAULT_ROW_HEIGHT: number = 48;\n\nexport class TdDataTableBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdDataTableMixinBase = mixinControlValueAccessor(TdDataTableBase, []);\n\n@Component({\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdDataTableComponent),\n multi: true,\n }],\n selector: 'td-data-table',\n styleUrls: ['./data-table.component.scss' ],\n templateUrl: './data-table.component.html',\n inputs: ['value'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDataTableComponent extends _TdDataTableMixinBase implements IControlValueAccessor, OnInit,\n AfterContentInit, AfterContentChecked, AfterViewInit, OnDestroy {\n\n /** responsive width calculations */\n private _resizeSubs: Subscription;\n private _rowsChangedSubs: Subscription;\n private _hostWidth: number = 0;\n\n /** manually resizable columns */\n private _resizableColumns: boolean = false;\n private _columnClientX: number = 0;\n private _columnResizeSubs: Subscription;\n private _resizingColumn: number;\n private _onColumnResize: Subject<number> = new Subject<number>();\n\n get resizingColumn(): number {\n return this._resizingColumn;\n }\n\n get hostWidth(): number {\n // if the checkboxes are rendered, we need to remove their width\n // from the total width to calculate properly\n if (this.selectable) {\n return this._hostWidth - 42;\n }\n return this._hostWidth;\n }\n\n private _widths: IInternalColumnWidth[] = [];\n private _onResize: Subject<void> = new Subject<void>();\n\n /** column header reposition and viewpoort */\n private _verticalScrollSubs: Subscription;\n private _horizontalScrollSubs: Subscription;\n private _scrollHorizontalOffset: number = 0;\n\n private _onHorizontalScroll: Subject<number> = new Subject<number>();\n private _onVerticalScroll: Subject<number> = new Subject<number>();\n\n // Array of cached row heights to allow dynamic row heights\n private _rowHeightCache: number[] = [];\n // Total pseudo height of all the elements\n private _totalHeight: number = 0;\n // Total host height for the viewport\n private _hostHeight: number = 0;\n // Scrolled vertical pixels\n private _scrollVerticalOffset: number = 0;\n // Style to move the content a certain offset depending on scrolled offset\n private _offsetTransform: SafeStyle;\n\n // Variables that set from and to which rows will be rendered\n private _fromRow: number = 0;\n private _toRow: number = 0;\n\n /**\n * Returns the offset style with a proper calculation on how much it should move\n * over the y axis of the total height\n */\n get offsetTransform(): SafeStyle {\n return this._offsetTransform;\n }\n\n /**\n * Returns the assumed total height of the rows\n */\n get totalHeight(): number {\n return this._totalHeight;\n }\n\n /**\n * Returns the initial row to render in the viewport\n */\n get fromRow(): number {\n return this._fromRow;\n }\n\n /**\n * Returns the last row to render in the viewport\n */\n get toRow(): number {\n return this._toRow;\n }\n\n private _valueChangesSubs: Subscription;\n /** internal attributes */\n private _data: any[];\n // data virtually iterated by component\n private _virtualData: any[];\n private _columns: ITdDataTableColumn[];\n private _selectable: boolean = false;\n private _clickable: boolean = false;\n private _multiple: boolean = true;\n private _allSelected: boolean = false;\n private _indeterminate: boolean = false;\n\n /** sorting */\n private _sortable: boolean = false;\n private _sortBy: ITdDataTableColumn;\n private _sortOrder: TdDataTableSortingOrder = TdDataTableSortingOrder.Ascending;\n\n /** shift select */\n private _shiftPreviouslyPressed: boolean = false;\n private _lastSelectedIndex: number = -1;\n private _firstSelectedIndex: number = -1;\n private _firstCheckboxValue: boolean = false;\n\n /** template fetching support */\n private _templateMap: Map<string, TemplateRef<any>> = new Map<string, TemplateRef<any>>();\n @ContentChildren(TdDataTableTemplateDirective) _templates: QueryList<TdDataTableTemplateDirective>;\n\n @ViewChild('scrollableDiv') _scrollableDiv: ElementRef;\n\n @ViewChildren('columnElement') _colElements: QueryList<TdDataTableColumnComponent>;\n\n @ViewChildren(TdDataTableRowComponent) _rows: QueryList<TdDataTableRowComponent>;\n\n /**\n * Returns scroll position to reposition column headers\n */\n get columnsLeftScroll(): number {\n return this._scrollHorizontalOffset * -1;\n }\n\n /**\n * Returns true if all values are selected.\n */\n get allSelected(): boolean {\n return this._allSelected;\n }\n\n /**\n * Returns true if all values are not deselected\n * and at least one is.\n */\n get indeterminate(): boolean {\n return this._indeterminate;\n }\n\n /**\n * data?: {[key: string]: any}[]\n * Sets the data to be rendered as rows.\n */\n @Input('data')\n set data(data: any[]) {\n this._data = data;\n this._rowHeightCache = [];\n Promise.resolve().then(() => {\n this.refresh();\n // scroll back to the top if the data has changed\n this._scrollableDiv.nativeElement.scrollTop = 0;\n });\n }\n get data(): any[] {\n return this._data;\n }\n\n get virtualData(): any[] {\n return this._virtualData;\n }\n\n /**\n * columns?: ITdDataTableColumn[]\n * Sets additional column configuration. [ITdDataTableColumn.name] has to exist in [data] as key.\n * Defaults to [data] keys.\n */\n @Input('columns')\n set columns(cols: ITdDataTableColumn[]) {\n this._columns = cols;\n }\n get columns(): ITdDataTableColumn[] {\n if (this._columns) {\n return this._columns;\n }\n\n if (this.hasData) {\n this._columns = [];\n // if columns is undefined, use key in [data] rows as name and label for column headers.\n let row: any = this._data[0];\n Object.keys(row).forEach((k: string) => {\n if (!this._columns.find((c: any) => c.name === k)) {\n this._columns.push({ name: k, label: k });\n }\n });\n return this._columns;\n } else {\n return [];\n }\n }\n\n /**\n * resizableColumns?: boolean\n * Enables manual column resize.\n * Defaults to 'false'\n */\n @Input('resizableColumns')\n set resizableColumns(resizableColumns: boolean) {\n this._resizableColumns = coerceBooleanProperty(resizableColumns);\n }\n get resizableColumns(): boolean {\n return this._resizableColumns;\n }\n\n /**\n * selectable?: boolean\n * Enables row selection events, hover and selected row states.\n * Defaults to 'false'\n */\n @Input('selectable')\n set selectable(selectable: boolean) {\n this._selectable = coerceBooleanProperty(selectable);\n }\n get selectable(): boolean {\n return this._selectable;\n }\n\n /**\n * clickable?: boolean\n * Enables row click events, hover.\n * Defaults to 'false'\n */\n @Input('clickable')\n set clickable(clickable: boolean) {\n this._clickable = coerceBooleanProperty(clickable);\n }\n get clickable(): boolean {\n return this._clickable;\n }\n\n /**\n * multiple?: boolean\n * Enables multiple row selection. [selectable] needs to be enabled.\n * Defaults to 'false'\n */\n @Input('multiple')\n set multiple(multiple: boolean) {\n this._multiple = coerceBooleanProperty(multiple);\n }\n get multiple(): boolean {\n return this._multiple;\n }\n\n /**\n * sortable?: boolean\n * Enables sorting events, sort icons and active column states.\n * Defaults to 'false'\n */\n @Input('sortable')\n set sortable(sortable: boolean) {\n this._sortable = coerceBooleanProperty(sortable);\n }\n get sortable(): boolean {\n return this._sortable;\n }\n\n /**\n * sortBy?: string\n * Sets the active sort column. [sortable] needs to be enabled.\n */\n @Input('sortBy')\n set sortBy(columnName: string) {\n if (!columnName) {\n return;\n }\n const column: ITdDataTableColumn = this.columns.find((c: any) => c.name === columnName);\n if (!column) {\n throw new Error('[sortBy] must be a valid column name');\n }\n\n this._sortBy = column;\n }\n get sortByColumn(): ITdDataTableColumn {\n return this._sortBy;\n }\n\n /**\n * sortOrder?: ['ASC' | 'DESC'] or TdDataTableSortingOrder\n * Sets the sort order of the [sortBy] column. [sortable] needs to be enabled.\n * Defaults to 'ASC' or TdDataTableSortingOrder.Ascending\n */\n @Input('sortOrder')\n set sortOrder(order: 'ASC' | 'DESC') {\n let sortOrder: string = order ? order.toUpperCase() : 'ASC';\n if (sortOrder !== 'DESC' && sortOrder !== 'ASC') {\n throw new Error('[sortOrder] must be empty, ASC or DESC');\n }\n\n this._sortOrder = sortOrder === 'ASC' ?\n TdDataTableSortingOrder.Ascending : TdDataTableSortingOrder.Descending;\n }\n get sortOrderEnum(): TdDataTableSortingOrder {\n return this._sortOrder;\n }\n\n get hasData(): boolean {\n return this._data && this._data.length > 0;\n }\n\n /**\n * sortChange?: function\n * Event emitted when the column headers are clicked. [sortable] needs to be enabled.\n * Emits an [ITdDataTableSortChangeEvent] implemented object.\n */\n @Output('sortChange') onSortChange: EventEmitter<ITdDataTableSortChangeEvent> =\n new EventEmitter<ITdDataTableSortChangeEvent>();\n\n /**\n * rowSelect?: function\n * Event emitted when a row is selected/deselected. [selectable] needs to be enabled.\n * Emits an [ITdDataTableSelectEvent] implemented object.\n */\n @Output('rowSelect') onRowSelect: EventEmitter<ITdDataTableSelectEvent> = new EventEmitter<ITdDataTableSelectEvent>();\n\n /**\n * rowClick?: function\n * Event emitted when a row is clicked.\n * Emits an [ITdDataTableRowClickEvent] implemented object.\n */\n @Output('rowClick') onRowClick: EventEmitter<ITdDataTableRowClickEvent> = new EventEmitter<ITdDataTableRowClickEvent>();\n\n /**\n * selectAll?: function\n * Event emitted when all rows are selected/deselected by the all checkbox. [selectable] needs to be enabled.\n * Emits an [ITdDataTableSelectAllEvent] implemented object.\n */\n @Output('selectAll') onSelectAll: EventEmitter<ITdDataTableSelectAllEvent> =\n new EventEmitter<ITdDataTableSelectAllEvent>();\n\n constructor(@Optional() @Inject(DOCUMENT) private _document: any,\n private _elementRef: ElementRef,\n private _domSanitizer: DomSanitizer,\n _changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n }\n\n /**\n * compareWith?: function(row, model): boolean\n * Allows custom comparison between row and model to see if row is selected or not\n * Default comparation is by reference\n */\n @Input('compareWith') compareWith: (row: any, model: any) => boolean = (row: any, model: any) => {\n return row === model;\n }\n\n /**\n * Initialize observable for resize and scroll events\n */\n ngOnInit(): void {\n // initialize observable for resize calculations\n this._resizeSubs = this._onResize.asObservable().subscribe(() => {\n if (this._rows) {\n this._rows.toArray().forEach((row: TdDataTableRowComponent, index: number) => {\n this._rowHeightCache[this.fromRow + index] = row.height + 1;\n });\n }\n this._calculateWidths();\n this._calculateVirtualRows();\n });\n\n // initialize observable for column resize calculations\n this._columnResizeSubs = this._onColumnResize.asObservable().pipe(\n debounceTime(0),\n ).subscribe((clientX: number) => {\n this._columnClientX = clientX;\n this._calculateWidths();\n this._changeDetectorRef.markForCheck();\n });\n // initialize observable for scroll column header reposition\n this._horizontalScrollSubs = this._onHorizontalScroll.asObservable()\n .subscribe((horizontalScroll: number) => {\n this._scrollHorizontalOffset = horizontalScroll;\n this._changeDetectorRef.markForCheck();\n });\n // initialize observable for virtual scroll rendering\n this._verticalScrollSubs = this._onVerticalScroll.asObservable()\n .subscribe((verticalScroll: number) => {\n this._scrollVerticalOffset = verticalScroll;\n this._calculateVirtualRows();\n this._changeDetectorRef.markForCheck();\n });\n this._valueChangesSubs = this.valueChanges.subscribe((value: any) => {\n this.refresh();\n });\n }\n\n /**\n * Loads templates and sets them in a map for faster access.\n */\n ngAfterContentInit(): void {\n for (let i: number = 0; i < this._templates.toArray().length; i++) {\n this._templateMap.set(\n this._templates.toArray()[i].tdDataTableTemplate,\n this._templates.toArray()[i].templateRef,\n );\n }\n }\n\n /**\n * Checks hosts native elements widths to see if it has changed (resize check)\n */\n ngAfterContentChecked(): void {\n // check if the scroll has been reset when element is hidden\n if (this._scrollVerticalOffset - this._scrollableDiv.nativeElement.scrollTop > 5) {\n // scroll back to the top if element has been reset\n this._onVerticalScroll.next(0);\n }\n if (this._elementRef.nativeElement) {\n let newHostWidth: number = this._elementRef.nativeElement.getBoundingClientRect().width;\n // if the width has changed then we throw a resize event.\n if (this._hostWidth !== newHostWidth) {\n setTimeout(() => {\n this._hostWidth = newHostWidth;\n this._onResize.next();\n }, 0);\n }\n }\n if (this._scrollableDiv.nativeElement) {\n let newHostHeight: number = this._scrollableDiv.nativeElement.getBoundingClientRect().height;\n // if the height of the viewport has changed, then we mark for check\n if (this._hostHeight !== newHostHeight) {\n this._hostHeight = newHostHeight;\n this._calculateVirtualRows();\n this._changeDetectorRef.markForCheck();\n }\n }\n }\n\n /**\n * Registers to an observable that checks if all rows have been rendered\n * so we can start calculating the widths\n */\n ngAfterViewInit(): void {\n this._rowsChangedSubs = this._rows.changes.pipe(\n debounceTime(0),\n ).subscribe(() => {\n this._onResize.next();\n });\n this._calculateVirtualRows();\n }\n\n /**\n * Unsubscribes observables when data table is destroyed\n */\n ngOnDestroy(): void {\n if (this._resizeSubs) {\n this._resizeSubs.unsubscribe();\n }\n if (this._columnResizeSubs) {\n this._columnResizeSubs.unsubscribe();\n }\n if (this._horizontalScrollSubs) {\n this._horizontalScrollSubs.unsubscribe();\n }\n if (this._verticalScrollSubs) {\n this._verticalScrollSubs.unsubscribe();\n }\n if (this._rowsChangedSubs) {\n this._rowsChangedSubs.unsubscribe();\n }\n if (this._valueChangesSubs) {\n this._valueChangesSubs.unsubscribe();\n }\n }\n\n /**\n * Method that gets executed every time there is a scroll event\n * Calls the scroll observable\n */\n handleScroll(event: Event): void {\n let element: HTMLElement = (<HTMLElement>event.target);\n if (element) {\n let horizontalScroll: number = element.scrollLeft;\n if (this._scrollHorizontalOffset !== horizontalScroll) {\n this._onHorizontalScroll.next(horizontalScroll);\n }\n let verticalScroll: number = element.scrollTop;\n if (this._scrollVerticalOffset !== verticalScroll) {\n this._onVerticalScroll.next(verticalScroll);\n }\n }\n }\n\n /**\n * Returns the width needed for the columns via index\n */\n getColumnWidth(index: number): number {\n if (this._widths[index]) {\n return this._widths[index].value;\n }\n return undefined;\n }\n\n getCellValue(column: ITdDataTableColumn, value: any): string {\n if (column.nested === undefined || column.nested) {\n return this._getNestedValue(column.name, value);\n }\n return value[column.name];\n }\n\n /**\n * Getter method for template references\n */\n getTemplateRef(name: string): TemplateRef<any> {\n return this._templateMap.get(name);\n }\n\n /**\n * Clears model (ngModel) of component by removing all values in array.\n */\n clearModel(): void {\n this.value.splice(0, this.value.length);\n }\n\n /**\n * Refreshes data table and rerenders [data] and [columns]\n */\n refresh(): void {\n this._calculateVirtualRows();\n this._calculateWidths();\n this._calculateCheckboxState();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Selects or clears all rows depending on 'checked' value.\n */\n selectAll(checked: boolean): void {\n let toggledRows: any[] = [];\n if (checked) {\n this._data.forEach((row: any) => {\n // skiping already selected rows\n if (!this.isRowSelected(row)) {\n this.value.push(row);\n // checking which ones are being toggled\n toggledRows.push(row);\n }\n });\n this._allSelected = true;\n this._indeterminate = true;\n } else {\n this._data.forEach((row: any) => {\n // checking which ones are being toggled\n if (this.isRowSelected(row)) {\n toggledRows.push(row);\n let modelRow: any = this.value.filter((val: any) => {\n return this.compareWith(row, val);\n })[0];\n let index: number = this.value.indexOf(modelRow);\n if (index > -1) {\n this.value.splice(index, 1);\n }\n }\n });\n this._allSelected = false;\n this._indeterminate = false;\n }\n this.onSelectAll.emit({rows: toggledRows, selected: checked});\n this.onChange(this.value);\n }\n\n /**\n * Checks if row is selected\n */\n isRowSelected(row: any): boolean {\n // compare items by [compareWith] function\n return this.value ? this.value.filter((val: any) => {\n return this.compareWith(row, val);\n }).length > 0 : false;\n }\n\n /**\n * Selects or clears a row depending on 'checked' value if the row 'isSelectable'\n * handles cntrl clicks and shift clicks for multi-select\n */\n select(row: any, event: Event, currentSelected: number): void {\n if (this.selectable) {\n this.blockEvent(event);\n // Check to see if Shift key is selected and need to select everything in between\n let mouseEvent: MouseEvent = event as MouseEvent;\n if (this.multiple && mouseEvent && mouseEvent.shiftKey && this._lastSelectedIndex > -1) {\n let firstIndex: number = currentSelected;\n let lastIndex: number = this._lastSelectedIndex;\n if (currentSelected > this._lastSelectedIndex) {\n firstIndex = this._lastSelectedIndex;\n lastIndex = currentSelected;\n }\n // if clicking a checkbox behind the initial check, then toggle all selections expect the initial checkbox\n // else the checkboxes clicked are all after the initial one\n if ((this._firstSelectedIndex >= currentSelected && this._lastSelectedIndex > this._firstSelectedIndex) ||\n (this._firstSelectedIndex <= currentSelected && this._lastSelectedIndex < this._firstSelectedIndex)) {\n for (let i: number = firstIndex; i <= lastIndex; i++) {\n if (this._firstSelectedIndex !== i) {\n this._doSelection(this._data[i], i);\n }\n }\n } else if ((this._firstSelectedIndex > currentSelected) || (this._firstSelectedIndex < currentSelected)) {\n // change indexes depending on where the next checkbox is selected (before or after)\n if (this._firstSelectedIndex > currentSelected) {\n lastIndex--;\n } else if (this._firstSelectedIndex < currentSelected) {\n firstIndex++;\n }\n for (let i: number = firstIndex; i <= lastIndex; i++) {\n let rowSelected: boolean = this.isRowSelected(this._data[i]);\n // if row is selected and first checkbox was selected\n // or if row was unselected and first checkbox was unselected\n // we ignore the toggle\n if ((this._firstCheckboxValue && !rowSelected) ||\n (!this._firstCheckboxValue && rowSelected)) {\n this._doSelection(this._data[i], i);\n } else if (this._shiftPreviouslyPressed) {\n // else if the checkbox selected was in the middle of the last selection and the first selection\n // then we undo the selections\n if ((currentSelected >= this._firstSelectedIndex && currentSelected <= this._lastSelectedIndex) ||\n (currentSelected <= this._firstSelectedIndex && currentSelected >= this._lastSelectedIndex)) {\n this._doSelection(this._data[i], i);\n }\n }\n }\n }\n this._shiftPreviouslyPressed = true;\n // if shift wasnt pressed, then we take the element checked as the first row\n // incase the next click uses shift\n } else if (mouseEvent && !mouseEvent.shiftKey) {\n this._firstCheckboxValue = this._doSelection(row, currentSelected);\n this._shiftPreviouslyPressed = false;\n this._firstSelectedIndex = currentSelected;\n }\n this._lastSelectedIndex = currentSelected;\n }\n }\n\n /**\n * Overrides the onselectstart method of the document so other text on the page\n * doesn't get selected when doing shift selections.\n */\n disableTextSelection(): void {\n if (this._document) {\n this._document.onselectstart = function(): boolean {\n return false;\n };\n }\n }\n\n /**\n * Resets the original onselectstart method.\n */\n enableTextSelection(): void {\n if (this._document) {\n this._document.onselectstart = undefined;\n }\n }\n\n /**\n * emits the onRowClickEvent when a row is clicked\n * if clickable is true and selectable is false then select the row\n */\n handleRowClick(row: any, index: number, event: Event): void {\n if (this.clickable) {\n // ignoring linting rules here because attribute it actually null or not there\n // can't check for undefined\n const srcElement: any = event.srcElement || event.currentTarget;\n let element: HTMLElement = event.target as HTMLElement;\n /* tslint:disable-next-line */\n if (srcElement.getAttribute('stopRowClick') === null && element.tagName.toLowerCase() !== 'mat-pseudo-checkbox') {\n this.onRowClick.emit({\n row: row,\n index: index,\n });\n }\n }\n }\n\n /**\n * Method handle for sort click event in column headers.\n */\n handleSort(column: ITdDataTableColumn): void {\n if (this._sortBy === column) {\n this._sortOrder = this._sortOrder === TdDataTableSortingOrder.Ascending ?\n TdDataTableSortingOrder.Descending : TdDataTableSortingOrder.Ascending;\n } else {\n this._sortBy = column;\n this._sortOrder = TdDataTableSortingOrder.Ascending;\n }\n this.onSortChange.next({ name: this._sortBy.name, order: this._sortOrder });\n }\n\n /**\n * Handle all keyup events when focusing a data table row\n */\n _rowKeyup(event: KeyboardEvent, row: any, index: number): void {\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n /** if user presses enter or space, the row should be selected */\n if (this.selectable) {\n this._doSelection(this._data[this.fromRow + index], this.fromRow + index);\n }\n break;\n case UP_ARROW:\n /**\n * if users presses the up arrow, we focus the prev row\n * unless its the first row\n */\n if (index > 0) {\n this._rows.toArray()[index - 1].focus();\n }\n this.blockEvent(event);\n if (this.selectable && this.multiple && event.shiftKey && this.fromRow + index >= 0) {\n this._doSelection(this._data[this.fromRow + index], this.fromRow + index);\n }\n break;\n case DOWN_ARROW:\n /**\n * if users presses the down arrow, we focus the next row\n * unless its the last row\n */\n if (index < (this._rows.toArray().length - 1)) {\n this._rows.toArray()[index + 1].focus();\n }\n this.blockEvent(event);\n if (this.selectable && this.multiple && event.shiftKey && this.fromRow + index < this._data.length) {\n this._doSelection(this._data[this.fromRow + index], this.fromRow + index);\n }\n break;\n default:\n // default\n }\n }\n\n /**\n * Sets column index of the dragged column and initial clientX of column\n */\n _handleStartColumnDrag(index: number, event: MouseEvent): void {\n this._columnClientX = event.clientX;\n this._resizingColumn = index;\n }\n\n /**\n * Calculates new width depending on new clientX of dragger column\n */\n _handleColumnDrag(event: MouseEvent | DragEvent): void {\n // check if there was been a separator clicked for resize\n if (this._resizingColumn !== undefined && event.clientX > 0) {\n let xPosition: number = event.clientX;\n // checks if the separator is being moved to try and resize the column, else dont do anything\n if (xPosition > 0 && this._columnClientX > 0 && (xPosition - this._columnClientX) !== 0) {\n // calculate the new width depending if making the column bigger or smaller\n let proposedManualWidth: number = this._widths[this._resizingColumn].value + (xPosition - this._columnClientX);\n // if the proposed new width is less than the projected min width of the column, use projected min width\n if (proposedManualWidth < this._colElements.toArray()[this._resizingColumn].projectedWidth) {\n proposedManualWidth = this._colElements.toArray()[this._resizingColumn].projectedWidth;\n }\n this.columns[this._resizingColumn].width = proposedManualWidth;\n // update new x position for the resized column\n this._onColumnResize.next(xPosition);\n }\n }\n }\n\n /**\n * Ends dragged flags\n */\n _handleEndColumnDrag(): void {\n this._columnClientX = undefined;\n this._resizingColumn = undefined;\n }\n\n /**\n * Method to prevent the default events\n */\n blockEvent(event: Event): void {\n event.preventDefault();\n }\n\n private _getNestedValue(name: string, value: any): string {\n if (!(value instanceof Object) || !name) {\n return value;\n }\n if (name.indexOf('.') > -1) {\n let splitName: string[] = name.split(/\\.(.+)/, 2);\n return this._getNestedValue(splitName[1], value[splitName[0]]);\n } else {\n return value[name];\n }\n }\n\n /**\n * Does the actual Row Selection\n */\n private _doSelection(row: any, rowIndex: number): boolean {\n let wasSelected: boolean = this.isRowSelected(row);\n if (!wasSelected) {\n if (!this._multiple) {\n this.clearModel();\n }\n this.value.push(row);\n } else {\n // compare items by [compareWith] function\n row = this.value.filter((val: any) => {\n return this.compareWith(row, val);\n })[0];\n let index: number = this.value.indexOf(row);\n if (index > -1) {\n this.value.splice(index, 1);\n }\n }\n this._calculateCheckboxState();\n this.onRowSelect.emit({row: row, index: rowIndex, selected: !wasSelected});\n this.onChange(this.value);\n return !wasSelected;\n }\n\n /**\n * Calculate all the state of all checkboxes\n */\n private _calculateCheckboxState(): void {\n if (this._data) {\n this._allSelected = typeof this._data.find((d: any) => !this.isRowSelected(d)) === 'undefined';\n this._indeterminate = false;\n for (let row of this._data) {\n if (!this.isRowSelected(row)) {\n continue;\n }\n this._indeterminate = true;\n break;\n }\n }\n }\n\n /**\n * Calculates the widths for columns and cells depending on content\n */\n private _calculateWidths(): void {\n if (this._colElements && this._colElements.length) {\n this._widths = [];\n this._colElements.forEach((col: TdDataTableColumnComponent, index: number) => {\n this._adjustColumnWidth(index, this._calculateWidth());\n });\n this._adjustColumnWidhts();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Adjusts columns after calculation to see if they need to be recalculated.\n */\n private _adjustColumnWidhts(): void {\n let fixedTotalWidth: number = 0;\n // get the number of total columns that have flexible widths (not fixed or hidden)\n let flexibleWidths: number = this._widths.filter((width: IInternalColumnWidth, index: number) => {\n if (this.columns[index].hidden) {\n return false;\n }\n if (width.limit || width.max || width.min) {\n fixedTotalWidth += width.value;\n }\n return !width.limit && !width.max && !width.min;\n }).length;\n // calculate how much pixes are left that could be spread across\n // the flexible columns\n let recalculateHostWidth: number = 0;\n if (fixedTotalWidth < this.hostWidth) {\n recalculateHostWidth = this.hostWidth - fixedTotalWidth;\n }\n // if we have flexible columns and pixels to spare on them\n // we try and spread the pixels across them\n if (flexibleWidths && recalculateHostWidth) {\n let newValue: number = Math.floor(recalculateHostWidth / flexibleWidths);\n let adjustedNumber: number = 0;\n // adjust the column widths with the spread pixels\n this._widths.forEach((colWidth: IInternalColumnWidth) => {\n if (this._widths[colWidth.index].max && this._widths[colWidth.index].value > newValue ||\n this._widths[colWidth.index].min && this._widths[colWidth.index].value < newValue ||\n !this._widths[colWidth.index].limit) {\n this._adjustColumnWidth(colWidth.index, newValue);\n adjustedNumber++;\n }\n });\n // if there are still columns that need to be recalculated, we start over\n let newFlexibleWidths: number = this._widths.filter((width: IInternalColumnWidth) => {\n return !width.limit && !width.max;\n }).length;\n if (newFlexibleWidths !== adjustedNumber && newFlexibleWidths !== flexibleWidths) {\n this._adjustColumnWidhts();\n }\n }\n }\n\n /**\n * Adjusts a single column to see if it can be recalculated\n */\n private _adjustColumnWidth(index: number, value: number): void {\n this._widths[index] = {\n value: value,\n index: index,\n limit: false,\n min: false,\n max: false,\n };\n // flag to see if we need to skip the min width projection\n // depending if a width or min width has been provided\n let skipMinWidthProjection: boolean = false;\n if (this.columns[index]) {\n // if the provided width has min/max, then we check to see if we need to set it\n if (typeof this.columns[index].width === 'object') {\n let widthOpts: ITdDataTableColumnWidth = <ITdDataTableColumnWidth>this.columns[index].width;\n // if the column width is less than the configured min, we override it\n skipMinWidthProjection = (widthOpts && !!widthOpts.min);\n if (widthOpts && widthOpts.min >= this._widths[index].value) {\n this._widths[index].value = widthOpts.min;\n this._widths[index].min = true;\n // if the column width is more than the configured max, we override it\n } else if (widthOpts && widthOpts.max <= this._widths[index].value) {\n this._widths[index].value = widthOpts.max;\n this._widths[index].max = true;\n }\n // if it has a fixed width, then we just set it\n } else if (typeof this.columns[index].width === 'number') {\n this._widths[index].value = <number>this.columns[index].width;\n skipMinWidthProjection = this._widths[index].limit = true;\n }\n }\n // if there wasn't any width or min width provided, we set a min to what the column width min should be\n if (!skipMinWidthProjection &&\n this._widths[index].value < this._colElements.toArray()[index].projectedWidth) {\n this._widths[index].value = this._colElements.toArray()[index].projectedWidth;\n this._widths[index].min = true;\n this._widths[index].limit = false;\n }\n }\n\n /**\n * Generic method to calculate column width\n */\n private _calculateWidth(): number {\n let renderedColumns: ITdDataTableColumn[] = this.columns.filter((col: ITdDataTableColumn) => !col.hidden);\n return Math.floor(this.hostWidth / renderedColumns.length);\n }\n\n /**\n * Method to calculate the rows to be rendered in the viewport\n */\n private _calculateVirtualRows(): void {\n let scrolledRows: number = 0;\n if (this._data) {\n this._totalHeight = 0;\n let rowHeightSum: number = 0;\n // loop through all rows to see if we have their height cached\n // and sum them all to calculate the total height\n this._data.forEach((d: any, i: number) => {\n // iterate through all rows at first and assume all\n // rows are the same height as the first one\n if (!this._rowHeightCache[i]) {\n this._rowHeightCache[i] = this._rowHeightCache[0] || TD_VIRTUAL_DEFAULT_ROW_HEIGHT;\n }\n rowHeightSum += this._rowHeightCache[i];\n // check how many rows have been scrolled\n if (this._scrollVerticalOffset - rowHeightSum > 0) {\n scrolledRows++;\n }\n });\n this._totalHeight = rowHeightSum;\n // set the initial row to be rendered taking into account the row offset\n let fromRow: number = scrolledRows - TD_VIRTUAL_OFFSET;\n this._fromRow = fromRow > 0 ? fromRow : 0;\n\n let hostHeight: number = this._hostHeight;\n let index: number = 0;\n // calculate how many rows can fit in the viewport\n while (hostHeight > 0) {\n hostHeight -= this._rowHeightCache[this.fromRow + index];\n index++;\n }\n // set the last row to be rendered taking into account the row offset\n let range: number = (index - 1) + (TD_VIRTUAL_OFFSET * 2);\n let toRow: number = range + this.fromRow;\n // if last row is greater than the total length, then we use the total length\n if (isFinite(toRow) && toRow > this._data.length) {\n toRow = this._data.length;\n } else if (!isFinite(toRow)) {\n toRow = TD_VIRTUAL_OFFSET;\n }\n this._toRow = toRow;\n } else {\n this._totalHeight = 0;\n this._fromRow = 0;\n this._toRow = 0;\n }\n\n let offset: number = 0;\n // calculate the proper offset depending on how many rows have been scrolled\n if (scrolledRows > TD_VIRTUAL_OFFSET) {\n for (let index: number = 0; index < this.fromRow; index++) {\n offset += this._rowHeightCache[index];\n }\n }\n\n this._offsetTransform = this._domSanitizer.bypassSecurityTrustStyle('translateY(' + (offset - this.totalHeight) + 'px)');\n if (this._data) {\n this._virtualData = this.data.slice(this.fromRow, this.toRow);\n }\n // mark for check at the end of the queue so we are sure\n // that the changes will be marked\n Promise.resolve().then(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n","import { Component, Input, Output, EventEmitter, Renderer2, ElementRef, HostBinding, HostListener, ViewChild } from '@angular/core';\n\nimport { TdDataTableSortingOrder } from '../data-table.component';\n\nexport interface ITdDataTableSortChangeEvent {\n order: TdDataTableSortingOrder;\n name: string;\n}\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'th[td-data-table-column]',\n styleUrls: ['./data-table-column.component.scss' ],\n templateUrl: './data-table-column.component.html',\n})\nexport class TdDataTableColumnComponent {\n\n private _sortOrder: TdDataTableSortingOrder = TdDataTableSortingOrder.Ascending;\n\n @ViewChild('columnContent', {read: ElementRef}) _columnContent: ElementRef;\n\n get projectedWidth(): number {\n if (this._columnContent && this._columnContent.nativeElement) {\n return (<HTMLElement>this._columnContent.nativeElement).getBoundingClientRect().width;\n }\n return 100;\n }\n\n /**\n * name?: string\n * Sets unique column [name] for [sortable] events.\n */\n @Input('name') name: string = '';\n\n /**\n * sortable?: boolean\n * Enables sorting events, sort icons and active column states.\n * Defaults to 'false'\n */\n @Input('sortable') sortable: boolean = false;\n\n /**\n * active?: boolean\n * Sets column to active state when 'true'.\n * Defaults to 'false'\n */\n @Input('active') active: boolean = false;\n\n /**\n * numeric?: boolean\n * Makes column follow the numeric data-table specs and sort icon.\n * Defaults to 'false'\n */\n @Input('numeric') numeric: boolean = false;\n\n /**\n * sortOrder?: ['ASC' | 'DESC'] or TdDataTableSortingOrder\n * Sets the sort order of column.\n * Defaults to 'ASC' or TdDataTableSortingOrder.Ascending\n */\n @Input('sortOrder')\n set sortOrder(order: 'ASC' | 'DESC') {\n let sortOrder: string = order ? order.toUpperCase() : 'ASC';\n if (sortOrder !== 'DESC' && sortOrder !== 'ASC') {\n throw new Error('[sortOrder] must be empty, ASC or DESC');\n }\n\n this._sortOrder = sortOrder === 'ASC' ?\n TdDataTableSortingOrder.Ascending : TdDataTableSortingOrder.Descending;\n }\n\n /**\n * sortChange?: function\n * Event emitted when the column headers are clicked. [sortable] needs to be enabled.\n * Emits an [ITdDataTableSortChangeEvent] implemented object.\n */\n @Output('sortChange') onSortChange: EventEmitter<ITdDataTableSortChangeEvent> =\n new EventEmitter<ITdDataTableSortChangeEvent>();\n\n @HostBinding('class.mat-clickable')\n get bindClickable(): boolean {\n return this.sortable;\n }\n\n @HostBinding('class.mat-sortable')\n get bingSortable(): boolean {\n return this.sortable;\n }\n\n @HostBinding('class.mat-active')\n get bindActive(): boolean {\n return this.active;\n }\n\n @HostBinding('class.mat-numeric')\n get bindNumeric(): boolean {\n return this.numeric;\n }\n\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table-column');\n }\n\n /**\n * Listening to click event on host to throw a sort event\n */\n @HostListener('click')\n handleClick(): void {\n if (this.sortable) {\n this.onSortChange.emit({name: this.name, order: this._sortOrder});\n }\n }\n\n isAscending(): boolean {\n return this._sortOrder === TdDataTableSortingOrder.Ascending;\n }\n\n isDescending(): boolean {\n return this._sortOrder === TdDataTableSortingOrder.Descending;\n }\n\n}\n","import { Component, Input, Renderer2, ElementRef, HostBinding } from '@angular/core';\n\nexport type TdDataTableCellAlign = 'start' | 'center' | 'end';\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'td[td-data-table-cell]',\n styleUrls: ['./data-table-cell.component.scss' ],\n templateUrl: './data-table-cell.component.html',\n})\nexport class TdDataTableCellComponent {\n\n private _align: TdDataTableCellAlign;\n\n /**\n * numeric?: boolean\n * Makes cell follow the numeric data-table specs.\n * Defaults to 'false'\n */\n @Input('numeric') numeric: boolean = false;\n\n /**\n * align?: 'start' | 'center' | 'end'\n * Makes cell content align on demand\n * Defaults to 'left', overrides numeric\n */\n @Input() \n set align(align: TdDataTableCellAlign) {\n this._align = align;\n }\n get align(): TdDataTableCellAlign {\n return this._align; \n }\n\n @HostBinding('class.mat-numeric')\n get bindNumeric(): boolean {\n return this.numeric;\n }\n\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table-cell');\n }\n\n}\n","import { Component, Renderer2, ElementRef } from '@angular/core';\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'table[td-data-table]',\n styleUrls: ['./data-table-table.component.scss' ],\n templateUrl: './data-table-table.component.html',\n})\nexport class TdDataTableTableComponent {\n\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table');\n }\n\n}\n","import { Injectable, Provider, SkipSelf, Optional } from '@angular/core';\n\nimport { TdDataTableSortingOrder, ITdDataTableColumn } from '../data-table.component';\n\n@Injectable()\nexport class TdDataTableService {\n\n /**\n * params:\n * - data: any[]\n * - searchTerm: string\n * - ignoreCase: boolean = false\n * - excludedColumns: string[] = []\n *\n * Searches [data] parameter for [searchTerm] matches and returns a new array with them.\n */\n filterData(data: any[], searchTerm: string, ignoreCase: boolean = false, excludedColumns?: string[]): any[] {\n let filter: string = searchTerm ? (ignoreCase ? searchTerm.toLowerCase() : searchTerm) : '';\n if (filter) {\n data = data.filter((item: any) => {\n const res: any = Object.keys(item).find((key: string) => {\n if (!excludedColumns || excludedColumns.indexOf(key) === -1) {\n const preItemValue: string = ('' + item[key]);\n const itemValue: string = ignoreCase ? preItemValue.toLowerCase() : preItemValue;\n return itemValue.indexOf(filter) > -1;\n }\n });\n return !(typeof res === 'undefined');\n });\n }\n return data;\n }\n\n /**\n * params:\n * - data: any[]\n * - sortBy: string\n * - sortOrder: TdDataTableSortingOrder = TdDataTableSortingOrder.Ascending\n *\n * Sorts [data] parameter by [sortBy] and [sortOrder] and returns the sorted data.\n */\n sortData(data: any[], sortBy: string, sortOrder: TdDataTableSortingOrder = TdDataTableSortingOrder.Ascending): any[] {\n if (sortBy) {\n data = Array.from(data); // Change the array reference to trigger OnPush and not mutate original array\n data.sort((a: any, b: any) => {\n let compA: any = a[sortBy];\n let compB: any = b[sortBy];\n let direction: number = 0;\n if (!Number.isNaN(Number.parseFloat(compA)) && !Number.isNaN(Number.parseFloat(compB))) {\n direction = Number.parseFloat(compA) - Number.parseFloat(compB);\n } else {\n if (compA < compB) {\n direction = -1;\n } else if (compA > compB) {\n direction = 1;\n }\n }\n return direction * (sortOrder === TdDataTableSortingOrder.Descending ? -1 : 1);\n });\n }\n return data;\n }\n\n /**\n * params:\n * - data: any[]\n * - fromRow: number\n * - toRow: : number\n *\n * Returns a section of the [data] parameter starting from [fromRow] and ending in [toRow].\n */\n pageData(data: any[], fromRow: number, toRow: number): any[] {\n if (fromRow >= 1) {\n data = data.slice(fromRow - 1, toRow);\n }\n return data;\n }\n}\n\nexport function DATA_TABLE_PROVIDER_FACTORY(\n parent: TdDataTableService): TdDataTableService {\n return parent || new TdDataTableService();\n}\n\nexport const DATA_TABLE_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdDataTableService,\n deps: [[new Optional(), new SkipSelf(), TdDataTableService]],\n useFactory: DATA_TABLE_PROVIDER_FACTORY,\n};\n","import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatPseudoCheckboxModule } from '@angular/material/core';\n\nimport { TdDataTableComponent } from './data-table.component';\nimport { TdDataTableColumnComponent } from './data-table-column/data-table-column.component';\nimport { TdDataTableCellComponent } from './data-table-cell/data-table-cell.component';\nimport { TdDataTableRowComponent, TdDataTableColumnRowComponent } from './data-table-row/data-table-row.component';\nimport { TdDataTableTableComponent } from './data-table-table/data-table-table.component';\nimport { TdDataTableTemplateDirective } from './directives/data-table-template.directive';\n\nimport { DATA_TABLE_PROVIDER } from './services/data-table.service';\n\nconst TD_DATA_TABLE: Type<any>[] = [\n TdDataTableComponent,\n TdDataTableTemplateDirective,\n\n TdDataTableColumnComponent,\n TdDataTableCellComponent,\n TdDataTableRowComponent,\n TdDataTableColumnRowComponent,\n TdDataTableTableComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatIconModule,\n MatPseudoCheckboxModule,\n ],\n declarations: [\n TD_DATA_TABLE,\n ],\n exports: [\n TD_DATA_TABLE,\n ],\n providers: [\n DATA_TABLE_PROVIDER,\n ],\n})\nexport class CovalentDataTableModule {\n\n}\n","import { Component, Directive, ContentChildren, QueryList, AfterContentInit } from '@angular/core';\n\n@Directive({selector: 'td-dialog-title'})\nexport class TdDialogTitleDirective {}\n\n@Directive({selector: 'td-dialog-content'})\nexport class TdDialogContentDirective {}\n\n@Directive({selector: 'td-dialog-actions'})\nexport class TdDialogActionsDirective {}\n\n@Component({\n selector: 'td-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.scss' ],\n})\nexport class TdDialogComponent implements AfterContentInit {\n\n @ContentChildren(TdDialogTitleDirective) dialogTitle: QueryList<TdDialogTitleDirective>;\n @ContentChildren(TdDialogContentDirective) dialogContent: QueryList<TdDialogContentDirective>;\n @ContentChildren(TdDialogActionsDirective) dialogActions: QueryList<TdDialogActionsDirective>;\n\n ngAfterContentInit(): void {\n if (this.dialogTitle.length > 1) {\n throw new Error('Duplicate td-dialog-title component at in td-dialog.');\n }\n if (this.dialogContent.length > 1) {\n throw new Error('Duplicate td-dialog-content component at in td-dialog.');\n }\n if (this.dialogActions.length > 1) {\n throw new Error('Duplicate td-dialog-actions component at in td-dialog.');\n }\n }\n\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'td-alert-dialog',\n templateUrl: './alert-dialog.component.html',\n styleUrls: ['./alert-dialog.component.scss' ],\n})\nexport class TdAlertDialogComponent {\n title: string;\n message: string;\n closeButton: string = 'CLOSE';\n\n constructor(private _dialogRef: MatDialogRef<TdAlertDialogComponent>) {}\n\n close(): void {\n this._dialogRef.close();\n }\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'td-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss' ],\n})\nexport class TdConfirmDialogComponent {\n title: string;\n message: string;\n cancelButton: string = 'CANCEL';\n acceptButton: string = 'ACCEPT';\n\n constructor(private _dialogRef: MatDialogRef<TdConfirmDialogComponent>) {}\n\n cancel(): void {\n this._dialogRef.close(false);\n }\n\n accept(): void {\n this._dialogRef.close(true);\n }\n}\n","import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'td-prompt-dialog',\n templateUrl: './prompt-dialog.component.html',\n styleUrls: ['./prompt-dialog.component.scss' ],\n})\nexport class TdPromptDialogComponent implements AfterViewInit {\n title: string;\n message: string;\n value: string;\n cancelButton: string = 'CANCEL';\n acceptButton: string = 'ACCEPT';\n\n @ViewChild('input') _input: ElementRef;\n\n constructor(private _dialogRef: MatDialogRef<TdPromptDialogComponent>) {}\n\n ngAfterViewInit(): void {\n // focus input once everything is rendered and good to go\n Promise.resolve().then(() => {\n (<HTMLInputElement>this._input.nativeElement).focus();\n });\n }\n\n /**\n * Method executed when input is focused\n * Selects all text\n */\n handleInputFocus(): void {\n (<HTMLInputElement>this._input.nativeElement).select();\n }\n\n cancel(): void {\n this._dialogRef.close(undefined);\n }\n\n accept(): void {\n this._dialogRef.close(this.value);\n }\n}\n","import { Injectable, ViewContainerRef, Provider, SkipSelf, Optional } from '@angular/core';\nimport { MatDialog, MatDialogRef, MatDialogConfig } from '@angular/material/dialog';\nimport { ComponentType } from '@angular/cdk/portal';\n\nimport { TdAlertDialogComponent } from '../alert-dialog/alert-dialog.component';\nimport { TdConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { TdPromptDialogComponent } from '../prompt-dialog/prompt-dialog.component';\n\nexport interface IDialogConfig extends MatDialogConfig {\n title?: string;\n message: string;\n}\n\nexport interface IAlertConfig extends IDialogConfig {\n closeButton?: string;\n}\n\nexport interface IConfirmConfig extends IDialogConfig {\n acceptButton?: string;\n cancelButton?: string;\n}\n\nexport interface IPromptConfig extends IConfirmConfig {\n value?: string;\n}\n\n@Injectable()\nexport class TdDialogService {\n\n constructor(private _dialogService: MatDialog) {}\n\n /**\n * params:\n * - component: ComponentType<T>\n * - config: MatDialogConfig\n * Wrapper function over the open() method in MatDialog.\n * Opens a modal dialog containing the given component.\n */\n public open<T>(component: ComponentType<T>, config?: MatDialogConfig): MatDialogRef<T> {\n return this._dialogService.open(component, config);\n }\n\n /**\n * Wrapper function over the closeAll() method in MatDialog.\n * Closes all of the currently-open dialogs.\n */\n public closeAll(): void {\n this._dialogService.closeAll();\n }\n\n /**\n * params:\n * - config: IAlertConfig {\n * message: string;\n * title?: string;\n * viewContainerRef?: ViewContainerRef;\n * closeButton?: string;\n * }\n *\n * Opens an alert dialog with the provided config.\n * Returns an MatDialogRef<TdAlertDialogComponent> object.\n */\n public openAlert(config: IAlertConfig): MatDialogRef<TdAlertDialogComponent> {\n let dialogConfig: MatDialogConfig = this._createConfig(config);\n let dialogRef: MatDialogRef<TdAlertDialogComponent> =\n this._dialogService.open(TdAlertDialogComponent, dialogConfig);\n let alertDialogComponent: TdAlertDialogComponent = dialogRef.componentInstance;\n alertDialogComponent.title = config.title;\n alertDialogComponent.message = config.message;\n if (config.closeButton) {\n alertDialogComponent.closeButton = config.closeButton;\n }\n return dialogRef;\n }\n\n /**\n * params:\n * - config: IConfirmConfig {\n * message: string;\n * title?: string;\n * viewContainerRef?: ViewContainerRef;\n * acceptButton?: string;\n * cancelButton?: string;\n * }\n *\n * Opens a confirm dialog with the provided config.\n * Returns an MatDialogRef<TdConfirmDialogComponent> object.\n */\n public openConfirm(config: IConfirmConfig): MatDialogRef<TdConfirmDialogComponent> {\n let dialogConfig: MatDialogConfig = this._createConfig(config);\n let dialogRef: MatDialogRef<TdConfirmDialogComponent> =\n this._dialogService.open(TdConfirmDialogComponent, dialogConfig);\n let confirmDialogComponent: TdConfirmDialogComponent = dialogRef.componentInstance;\n confirmDialogComponent.title = config.title;\n confirmDialogComponent.message = config.message;\n if (config.acceptButton) {\n confirmDialogComponent.acceptButton = config.acceptButton;\n }\n if (config.cancelButton) {\n confirmDialogComponent.cancelButton = config.cancelButton;\n }\n return dialogRef;\n }\n\n /**\n * params:\n * - config: IPromptConfig {\n * message: string;\n * title?: string;\n * value?: string;\n * viewContainerRef?: ViewContainerRef;\n * acceptButton?: string;\n * cancelButton?: string;\n * }\n *\n * Opens a prompt dialog with the provided config.\n * Returns an MatDialogRef<TdPromptDialogComponent> object.\n */\n public openPrompt(config: IPromptConfig): MatDialogRef<TdPromptDialogComponent> {\n let dialogConfig: MatDialogConfig = this._createConfig(config);\n let dialogRef: MatDialogRef<TdPromptDialogComponent> =\n this._dialogService.open(TdPromptDialogComponent, dialogConfig);\n let promptDialogComponent: TdPromptDialogComponent = dialogRef.componentInstance;\n promptDialogComponent.title = config.title;\n promptDialogComponent.message = config.message;\n promptDialogComponent.value = config.value;\n if (config.acceptButton) {\n promptDialogComponent.acceptButton = config.acceptButton;\n }\n if (config.cancelButton) {\n promptDialogComponent.cancelButton = config.cancelButton;\n }\n return dialogRef;\n }\n\n private _createConfig(config: IDialogConfig): MatDialogConfig {\n let dialogConfig: MatDialogConfig = new MatDialogConfig();\n dialogConfig.width = '400px';\n Object.assign(dialogConfig, config);\n return dialogConfig;\n }\n\n}\n","import { Type } from '@angular/core';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { TdDialogComponent, TdDialogTitleDirective,\n TdDialogActionsDirective, TdDialogContentDirective } from './dialog.component';\nimport { TdAlertDialogComponent } from './alert-dialog/alert-dialog.component';\nimport { TdConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\nimport { TdPromptDialogComponent } from './prompt-dialog/prompt-dialog.component';\nimport { TdDialogService } from './services/dialog.service';\n\nconst TD_DIALOGS: Type<any>[] = [\n TdAlertDialogComponent,\n TdConfirmDialogComponent,\n TdPromptDialogComponent,\n TdDialogComponent,\n TdDialogTitleDirective,\n TdDialogActionsDirective,\n TdDialogContentDirective,\n];\n\nconst TD_DIALOGS_ENTRY_COMPONENTS: Type<any>[] = [\n TdAlertDialogComponent,\n TdConfirmDialogComponent,\n TdPromptDialogComponent,\n];\n\n@NgModule({\n imports: [\n FormsModule,\n CommonModule,\n MatDialogModule,\n MatInputModule,\n MatButtonModule,\n ],\n declarations: [\n TD_DIALOGS,\n ],\n exports: [\n TD_DIALOGS,\n ],\n providers: [\n TdDialogService,\n ],\n entryComponents: [\n TD_DIALOGS_ENTRY_COMPONENTS,\n ],\n})\nexport class CovalentDialogsModule {\n\n}\n","import { Component, Directive, Input, Output, TemplateRef, ViewContainerRef, ContentChild,\n ElementRef, Renderer2 } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport {\n tdCollapseAnimation,\n ICanDisable,\n mixinDisabled,\n ICanDisableRipple,\n mixinDisableRipple,\n tdRotateAnimation,\n} from '@covalent/core/common';\n\n@Directive({\n selector: '[td-expansion-panel-header]ng-template',\n})\nexport class TdExpansionPanelHeaderDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Directive({\n selector: '[td-expansion-panel-label]ng-template',\n})\nexport class TdExpansionPanelLabelDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Directive({\n selector: '[td-expansion-panel-sublabel]ng-template',\n})\nexport class TdExpansionPanelSublabelDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Component({\n selector: 'td-expansion-summary',\n template: '<ng-content></ng-content>',\n})\nexport class TdExpansionPanelSummaryComponent {}\n\nexport class TdExpansionPanelBase {}\n\n/* tslint:disable-next-line */\nexport const _TdExpansionPanelMixinBase = mixinDisableRipple(mixinDisabled(TdExpansionPanelBase));\n\n@Component({\n selector: 'td-expansion-panel',\n styleUrls: ['./expansion-panel.component.scss' ],\n templateUrl: './expansion-panel.component.html',\n inputs: ['disabled', 'disableRipple'],\n animations: [\n tdCollapseAnimation,\n tdRotateAnimation,\n ],\n})\nexport class TdExpansionPanelComponent extends _TdExpansionPanelMixinBase implements ICanDisable, ICanDisableRipple {\n\n private _expand: boolean = false;\n\n @ContentChild(TdExpansionPanelHeaderDirective) expansionPanelHeader: TdExpansionPanelHeaderDirective;\n @ContentChild(TdExpansionPanelLabelDirective) expansionPanelLabel: TdExpansionPanelLabelDirective;\n @ContentChild(TdExpansionPanelSublabelDirective) expansionPanelSublabel: TdExpansionPanelSublabelDirective;\n\n /**\n * label?: string\n * Sets label of [TdExpansionPanelComponent] header.\n * Defaults to 'Click to expand'\n */\n @Input() label: string;\n\n /**\n * sublabel?: string\n * Sets sublabel of [TdExpansionPanelComponent] header.\n */\n @Input() sublabel: string;\n\n /**\n * expand?: boolean\n * Toggles [TdExpansionPanelComponent] between expand/collapse.\n */\n @Input('expand')\n set expand(expand: boolean) {\n this._setExpand(coerceBooleanProperty(expand));\n }\n get expand(): boolean {\n return this._expand;\n }\n\n /**\n * expanded?: function\n * Event emitted when [TdExpansionPanelComponent] is expanded.\n */\n @Output() expanded: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * collapsed?: function\n * Event emitted when [TdExpansionPanelComponent] is collapsed.\n */\n @Output() collapsed: EventEmitter<void> = new EventEmitter<void>();\n\n constructor(private _renderer: Renderer2,\n private _elementRef: ElementRef) {\n super();\n this._renderer.addClass(this._elementRef.nativeElement, 'td-expansion-panel');\n }\n\n /**\n * Method executed when [TdExpansionPanelComponent] is clicked.\n */\n clickEvent(): void {\n this._setExpand(!this._expand);\n }\n\n /**\n * Toggle expand state of [TdExpansionPanelComponent]\n * retuns 'true' if successful, else 'false'.\n */\n toggle(): boolean {\n return this._setExpand(!this._expand);\n }\n\n /**\n * Opens [TdExpansionPanelComponent]\n * retuns 'true' if successful, else 'false'.\n */\n open(): boolean {\n return this._setExpand(true);\n }\n\n /**\n * Closes [TdExpansionPanelComponent]\n * retuns 'true' if successful, else 'false'.\n */\n close(): boolean {\n return this._setExpand(false);\n }\n\n /** Method executed when the disabled value changes */\n onDisabledChange(v: boolean): void {\n if (v && this._expand) {\n this._expand = false;\n this._onCollapsed();\n }\n }\n\n /**\n * Method to change expand state internally and emit the [onExpanded] event if 'true' or [onCollapsed]\n * event if 'false'. (Blocked if [disabled] is 'true')\n */\n private _setExpand(newExpand: boolean): boolean {\n if (this.disabled) {\n return false;\n }\n if (this._expand !== newExpand) {\n this._expand = newExpand;\n if (newExpand) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-expanded');\n this._onExpanded();\n } else {\n this._renderer.removeClass(this._elementRef.nativeElement, 'td-expanded');\n this._onCollapsed();\n }\n return true;\n }\n return false;\n }\n\n private _onExpanded(): void {\n this.expanded.emit(undefined);\n }\n\n private _onCollapsed(): void {\n this.collapsed.emit(undefined);\n }\n}\n","import {\n Component,\n Renderer2,\n ElementRef,\n QueryList,\n ContentChildren,\n AfterContentInit,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport { TdExpansionPanelComponent } from './expansion-panel.component';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'td-expansion-panel-group',\n styleUrls: ['./expansion-panel-group.component.scss'],\n templateUrl: './expansion-panel-group.component.html',\n})\nexport class TdExpansionPanelGroupComponent\n implements AfterContentInit, OnDestroy {\n private _multi: boolean = false;\n\n private _lastOpenedPanels: TdExpansionPanelComponent[] = [];\n\n private _destroyed: Subject<boolean> = new Subject<boolean>();\n private _stopWatchingPanels: Subject<boolean> = new Subject<boolean>();\n\n /**\n * multi?: boolean\n * Sets whether multiple panels can be opened at a given time.\n * Set to false for accordion mode.\n * Defaults to false.\n */\n @Input('multi')\n set multi(multi: boolean) {\n this._multi = coerceBooleanProperty(multi);\n if (this._multi === false && this._lastOpenedPanels.length > 0) {\n this._closeAllExcept(\n this._lastOpenedPanels[this._lastOpenedPanels.length - 1],\n );\n }\n }\n\n @ContentChildren(TdExpansionPanelComponent) expansionPanels: QueryList<\n TdExpansionPanelComponent\n >;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {\n this._renderer.addClass(\n this._elementRef.nativeElement,\n 'td-expansion-panel-group',\n );\n }\n\n ngOnDestroy(): void {\n this._destroyed.next(true);\n this._destroyed.unsubscribe();\n this._stopWatchingPanels.next(true);\n this._stopWatchingPanels.unsubscribe();\n }\n\n public ngAfterContentInit(): void {\n if (!this._multi) {\n const openedPanels: TdExpansionPanelComponent[] = this.expansionPanels.filter(\n (expansionPanel: TdExpansionPanelComponent) => expansionPanel.expand,\n );\n const numOpenedPanels: number = openedPanels.length;\n if (numOpenedPanels > 1) {\n this._closeAllExcept(openedPanels[numOpenedPanels - 1]);\n }\n }\n\n this._attachListeners(this.expansionPanels);\n\n this.expansionPanels.changes\n .pipe(takeUntil(this._destroyed))\n .subscribe((expansionPanels: QueryList<TdExpansionPanelComponent>) => {\n this._stopWatchingPanels.next(true);\n this._stopWatchingPanels.unsubscribe();\n this._stopWatchingPanels = new Subject<boolean>();\n this._attachListeners(expansionPanels);\n });\n }\n\n /**\n * Opens all expansion panels, only if multi set set to true.\n */\n public openAll(): void {\n if (this._multi) {\n this.expansionPanels.forEach(\n (expansionPanel: TdExpansionPanelComponent) => {\n expansionPanel.open();\n },\n );\n }\n }\n\n /**\n * Closes all expansion panels\n */\n public closeAll(): void {\n this.expansionPanels.forEach(\n (expansionPanel: TdExpansionPanelComponent) => {\n expansionPanel.close();\n },\n );\n }\n\n private _attachListeners(\n expansionPanels: QueryList<TdExpansionPanelComponent>,\n ): void {\n this._lastOpenedPanels = [];\n expansionPanels.forEach((expansionPanel: TdExpansionPanelComponent) => {\n expansionPanel.expanded\n .pipe(takeUntil(this._stopWatchingPanels))\n .subscribe(() => {\n const indexOfPanel: number = this._lastOpenedPanels.indexOf(\n expansionPanel,\n );\n if (indexOfPanel !== -1) {\n this._lastOpenedPanels.splice(indexOfPanel, 1);\n }\n this._lastOpenedPanels.push(expansionPanel);\n\n if (!this._multi) {\n this._closeAllExcept(expansionPanel);\n }\n });\n\n expansionPanel.collapsed\n .pipe(takeUntil(this._stopWatchingPanels))\n .subscribe(() => {\n const indexOfPanel: number = this._lastOpenedPanels.indexOf(\n expansionPanel,\n );\n if (indexOfPanel !== -1) {\n this._lastOpenedPanels.splice(indexOfPanel, 1);\n }\n });\n });\n }\n\n private _closeAllExcept(expansionPanel: TdExpansionPanelComponent): void {\n this.expansionPanels.forEach((panel: TdExpansionPanelComponent) => {\n if (panel !== expansionPanel) {\n panel.close();\n }\n });\n }\n}\n","import { Type } from '@angular/core';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { TdExpansionPanelComponent, TdExpansionPanelHeaderDirective, TdExpansionPanelLabelDirective,\n TdExpansionPanelSublabelDirective, TdExpansionPanelSummaryComponent } from './expansion-panel.component';\nimport { TdExpansionPanelGroupComponent } from './expansion-panel-group.component';\n\nconst TD_EXPANSION_PANEL: Type<any>[] = [\n TdExpansionPanelGroupComponent,\n TdExpansionPanelComponent,\n TdExpansionPanelHeaderDirective,\n TdExpansionPanelLabelDirective,\n TdExpansionPanelSublabelDirective,\n TdExpansionPanelSummaryComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n MatRippleModule,\n MatIconModule,\n PortalModule,\n ],\n declarations: [\n TD_EXPANSION_PANEL,\n ],\n exports: [\n TD_EXPANSION_PANEL,\n ],\n})\nexport class CovalentExpansionPanelModule {\n\n}\n","import { Directive, Input, Output, EventEmitter } from '@angular/core';\nimport { HostListener, HostBinding, Host, Optional } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { NgModel } from '@angular/forms';\n\n@Directive({\n selector: '[tdFileSelect]',\n})\nexport class TdFileSelectDirective {\n\n private _multiple: boolean = false;\n\n /**\n * multiple?: boolean\n * Sets whether multiple files can be selected at once in host element, or just a single file.\n * Can also be 'multiple' native attribute.\n */\n @Input('multiple')\n set multiple(multiple: boolean) {\n this._multiple = coerceBooleanProperty(multiple);\n }\n\n /**\n * fileSelect?: function\n * Event emitted when a file or files are selected in host [HTMLInputElement].\n * Emits a [FileList | File] object.\n * Alternative to not use [(ngModel)].\n */\n @Output('fileSelect') onFileSelect: EventEmitter<FileList | File> = new EventEmitter<FileList | File>();\n\n /**\n * Binds native 'multiple' attribute if [multiple] property is 'true'.\n */\n @HostBinding('attr.multiple')\n get multipleBinding(): string {\n return this._multiple ? '' : undefined;\n }\n\n constructor(@Optional() @Host() private model: NgModel) {\n }\n\n /**\n * Listens to 'change' host event to get [HTMLInputElement] files.\n * Emits the 'onFileSelect' event with a [FileList] or [File] depending if 'multiple' attr exists in host.\n * Uses [(ngModel)] if declared, instead of emitting 'onFileSelect' event.\n */\n @HostListener('change', ['$event'])\n onChange(event: Event): void {\n if (event.target instanceof HTMLInputElement) {\n let fileInputEl: HTMLInputElement = (<HTMLInputElement>event.target);\n let files: FileList = fileInputEl.files;\n if (files.length) {\n let value: FileList | File = this._multiple ? (files.length > 1 ? files : files[0]) : files[0];\n this.model ? this.model.update.emit(value) : this.onFileSelect.emit(value);\n }\n }\n }\n}\n","import { Directive, Input, Output, EventEmitter } from '@angular/core';\nimport { HostListener, HostBinding, ElementRef, Renderer2 } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { ICanDisable, mixinDisabled } from '@covalent/core/common';\n\nexport class TdFileDropBase {}\n\n/* tslint:disable-next-line */\nexport const _TdFileDropMixinBase = mixinDisabled(TdFileDropBase);\n\n@Directive({\n selector: '[tdFileDrop]',\n inputs: ['disabled'],\n})\nexport class TdFileDropDirective extends _TdFileDropMixinBase implements ICanDisable {\n\n private _multiple: boolean = false;\n\n /**\n * multiple?: boolean\n * Sets whether multiple files can be dropped at once in host element, or just a single file.\n * Can also be 'multiple' native attribute.\n */\n @Input('multiple')\n set multiple(multiple: boolean) {\n this._multiple = coerceBooleanProperty(multiple);\n }\n\n /**\n * fileDrop?: function\n * Event emitted when a file or files are dropped in host element after being validated.\n * Emits a [FileList | File] object.\n */\n @Output('fileDrop') onFileDrop: EventEmitter<FileList | File> = new EventEmitter<FileList | File>();\n\n /**\n * Binds native 'multiple' attribute if [multiple] property is 'true'.\n */\n @HostBinding('attr.multiple')\n get multipleBinding(): string {\n return this._multiple ? '' : undefined;\n }\n\n /**\n * Binds native 'disabled' attribute if [disabled] property is 'true'.\n */\n @HostBinding('attr.disabled')\n get disabledBinding(): string {\n return this.disabled ? '' : undefined;\n }\n\n constructor(private _renderer: Renderer2, private _element: ElementRef) {\n super();\n }\n\n /**\n * Listens to 'drop' host event to get validated transfer items.\n * Emits the 'onFileDrop' event with a [FileList] or [File] depending if 'multiple' attr exists in host.\n * Stops event propagation and default action from browser for 'drop' event.\n */\n @HostListener('drop', ['$event'])\n onDrop(event: Event): void {\n if (!this.disabled) {\n let transfer: DataTransfer = (<DragEvent>event).dataTransfer;\n let files: FileList = transfer.files;\n if (files.length) {\n let value: FileList | File = this._multiple ? (files.length > 1 ? files : files[0]) : files[0];\n this.onFileDrop.emit(value);\n }\n }\n this._renderer.removeClass(this._element.nativeElement, 'drop-zone');\n this._stopEvent(event);\n }\n\n /**\n * Listens to 'dragover' host event to validate transfer items.\n * Checks if 'multiple' attr exists in host to allow multiple file drops.\n * Stops event propagation and default action from browser for 'dragover' event.\n */\n @HostListener('dragover', ['$event'])\n onDragOver(event: Event): void {\n let transfer: DataTransfer = (<DragEvent>event).dataTransfer;\n transfer.dropEffect = this._typeCheck(transfer.types);\n if (this.disabled || (!this._multiple &&\n ((transfer.items && transfer.items.length > 1) || (<any>transfer).mozItemCount > 1))) {\n transfer.dropEffect = 'none';\n } else {\n transfer.dropEffect = 'copy';\n }\n this._stopEvent(event);\n }\n\n /**\n * Listens to 'dragenter' host event to add animation class 'drop-zone' which can be overriden in host.\n * Stops event propagation and default action from browser for 'dragenter' event.\n */\n @HostListener('dragenter', ['$event'])\n onDragEnter(event: Event): void {\n if (!this.disabled) {\n this._renderer.addClass(this._element.nativeElement, 'drop-zone');\n }\n this._stopEvent(event);\n }\n\n /**\n * Listens to 'dragleave' host event to remove animation class 'drop-zone'.\n * Stops event propagation and default action from browser for 'dragleave' event.\n */\n @HostListener('dragleave', ['$event'])\n onDragLeave(event: Event): void {\n this._renderer.removeClass(this._element.nativeElement, 'drop-zone');\n this._stopEvent(event);\n }\n\n /**\n * Validates if the transfer item types are 'Files'.\n */\n private _typeCheck(types: ReadonlyArray<string> | DOMStringList): string {\n let dropEffect: string = 'none';\n if (types) {\n if (((<any>types).contains && (<any>types).contains('Files'))\n || ((<any>types).indexOf && (<any>types).indexOf('Files') !== -1)) {\n dropEffect = 'copy';\n }\n }\n return dropEffect;\n }\n\n private _stopEvent(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import { Component, Directive, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild,\n ElementRef, Renderer2, TemplateRef, ViewContainerRef, ChangeDetectorRef, forwardRef } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\nimport { ICanDisable, mixinDisabled, IControlValueAccessor, mixinControlValueAccessor } from '@covalent/core/common';\n\n@Directive({\n selector: '[td-file-input-label]ng-template',\n})\nexport class TdFileInputLabelDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\nexport class TdFileInputBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdFileInputMixinBase = mixinControlValueAccessor(mixinDisabled(TdFileInputBase));\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdFileInputComponent),\n multi: true,\n }],\n selector: 'td-file-input',\n inputs: ['disabled', 'value'],\n styleUrls: ['./file-input.component.scss'],\n templateUrl: './file-input.component.html',\n})\nexport class TdFileInputComponent extends _TdFileInputMixinBase implements IControlValueAccessor, ICanDisable {\n\n private _multiple: boolean = false;\n\n /** The native `<input type=\"file\"> element */\n @ViewChild('fileInput') _inputElement: ElementRef;\n get inputElement(): HTMLInputElement {\n return this._inputElement.nativeElement;\n }\n\n /**\n * color?: string\n * Sets button color. Uses same color palette accepted as [MatButton].\n */\n @Input('color') color: string;\n\n /**\n * multiple?: boolean\n * Sets if multiple files can be dropped/selected at once in [TdFileInputComponent].\n */\n @Input('multiple')\n set multiple(multiple: boolean) {\n this._multiple = coerceBooleanProperty(multiple);\n }\n get multiple(): boolean {\n return this._multiple;\n }\n\n /**\n * accept?: string\n * Sets files accepted when opening the file browser dialog.\n * Same as 'accept' attribute in <input/> element.\n */\n @Input('accept') accept: string;\n\n /**\n * select?: function\n * Event emitted a file is selected\n * Emits a [File | FileList] object.\n */\n @Output('select') onSelect: EventEmitter<File | FileList> = new EventEmitter<File | FileList>();\n\n constructor(private _renderer: Renderer2, _changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n }\n\n /**\n * Method executed when a file is selected.\n */\n handleSelect(files: File | FileList): void {\n this.writeValue(files);\n this.onSelect.emit(files);\n }\n\n /**\n * Used to clear the selected files from the [TdFileInputComponent].\n */\n clear(): void {\n this.writeValue(undefined);\n this._renderer.setProperty(this.inputElement, 'value', '');\n }\n\n /** Method executed when the disabled value changes */\n onDisabledChange(v: boolean): void {\n if (v) {\n this.clear();\n }\n }\n /**\n * Sets disable to the component. Implemented as part of ControlValueAccessor.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild, ContentChild, ChangeDetectorRef,\n forwardRef } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ICanDisable, mixinDisabled, IControlValueAccessor, mixinControlValueAccessor } from '@covalent/core/common';\nimport { TdFileInputComponent, TdFileInputLabelDirective } from '../file-input/file-input.component';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\nexport class TdFileUploadBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdFileUploadMixinBase = mixinControlValueAccessor(mixinDisabled(TdFileUploadBase));\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdFileUploadComponent),\n multi: true,\n }],\n selector: 'td-file-upload',\n inputs: ['disabled', 'value'],\n styleUrls: ['./file-upload.component.scss'],\n templateUrl: './file-upload.component.html',\n})\nexport class TdFileUploadComponent extends _TdFileUploadMixinBase implements IControlValueAccessor, ICanDisable {\n\n private _multiple: boolean = false;\n private _required: boolean = false;\n\n @ViewChild(TdFileInputComponent) fileInput: TdFileInputComponent;\n\n @ContentChild(TdFileInputLabelDirective) inputLabel: TdFileInputLabelDirective;\n\n /**\n * defaultColor?: string\n * Sets browse button color. Uses same color palette accepted as [MatButton] and defaults to 'primary'.\n */\n @Input('defaultColor') defaultColor: string = 'primary';\n\n /**\n * activeColor?: string\n * Sets upload button color. Uses same color palette accepted as [MatButton] and defaults to 'accent'.\n */\n @Input('activeColor') activeColor: string = 'accent';\n\n /**\n * cancelColor?: string\n * Sets cancel button color. Uses same color palette accepted as [MatButton] and defaults to 'warn'.\n */\n @Input('cancelColor') cancelColor: string = 'warn';\n\n /**\n * multiple?: boolean\n * Sets if multiple files can be dropped/selected at once in [TdFileUploadComponent].\n */\n @Input('multiple')\n set multiple(multiple: boolean) {\n this._multiple = coerceBooleanProperty(multiple);\n }\n get multiple(): boolean {\n return this._multiple;\n }\n\n /**\n * required?: boolean\n * Forces at least one file upload.\n * Defaults to 'false'\n */\n @Input('required')\n set required(required: boolean) {\n this._required = coerceBooleanProperty(required);\n }\n get required(): boolean {\n return this._required;\n }\n\n /**\n * accept?: string\n * Sets files accepted when opening the file browser dialog.\n * Same as 'accept' attribute in <input/> element.\n */\n @Input('accept') accept: string;\n\n /**\n * select?: function\n * Event emitted when a file is selected.\n * Emits a [File | FileList] object.\n */\n @Output('select') onSelect: EventEmitter<File | FileList> = new EventEmitter<File | FileList>();\n\n /**\n * upload?: function\n * Event emitted when upload button is clicked.\n * Emits a [File | FileList] object.\n */\n @Output('upload') onUpload: EventEmitter<File | FileList> = new EventEmitter<File | FileList>();\n\n /**\n * cancel?: function\n * Event emitted when cancel button is clicked.\n */\n @Output('cancel') onCancel: EventEmitter<void> = new EventEmitter<void>();\n\n constructor(_changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n }\n\n /**\n * Method executed when upload button is clicked.\n */\n uploadPressed(): void {\n if (this.value) {\n this.onUpload.emit(this.value);\n }\n }\n\n /**\n * Method executed when a file is selected.\n */\n handleSelect(value: File | FileList): void {\n this.value = value;\n this.onSelect.emit(value);\n }\n\n /**\n * Methods executed when cancel button is clicked.\n * Clears files.\n */\n cancel(): void {\n this.value = undefined;\n this.onCancel.emit(undefined);\n // check if the file input is rendered before clearing it\n if (this.fileInput) {\n this.fileInput.clear();\n }\n }\n\n /** Method executed when the disabled value changes */\n onDisabledChange(v: boolean): void {\n if (v) {\n this.cancel();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscriber } from 'rxjs';\n\nexport interface IUploadOptions {\n url: string;\n method: 'post' | 'put';\n file?: File;\n headers?: {[key: string]: string};\n formData?: FormData;\n}\n\n@Injectable()\nexport class TdFileService {\n\n private _progressSubject: Subject<number> = new Subject<number>();\n private _progressObservable: Observable<number>;\n\n /**\n * Gets progress observable to keep track of the files being uploaded.\n * Needs to be supported by backend.\n */\n get progress(): Observable<number> {\n return this._progressObservable;\n }\n\n constructor() {\n this._progressObservable = this._progressSubject.asObservable();\n }\n\n /**\n * params:\n * - options: IUploadOptions {\n * url: string,\n * method: 'post' | 'put',\n * file?: File,\n * headers?: {[key: string]: string},\n * formData?: FormData\n * }\n *\n * Uses underlying [XMLHttpRequest] to upload a file to a url.\n * Will be depricated when Angular fixes [Http] to allow [FormData] as body.\n */\n upload(options: IUploadOptions): Observable<any> {\n return new Observable<any>((subscriber: Subscriber<any>) => {\n let xhr: XMLHttpRequest = new XMLHttpRequest();\n let formData: FormData = new FormData();\n\n if (options.file !== undefined) {\n formData.append('file', options.file);\n } else if (options.formData !== undefined) {\n formData = options.formData;\n } else {\n return subscriber.error('For [IUploadOptions] you have to set either the [file] or the [formData] property.');\n }\n\n xhr.upload.onprogress = (event: ProgressEvent) => {\n let progress: number = 0;\n if (event.lengthComputable) {\n progress = Math.round(event.loaded / event.total * 100);\n }\n this._progressSubject.next(progress);\n };\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300) {\n subscriber.next(xhr.response);\n subscriber.complete();\n } else {\n subscriber.error(xhr.response);\n }\n }\n };\n\n xhr.open(options.method, options.url, true);\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n if (options.headers) {\n for (let key in options.headers) {\n xhr.setRequestHeader(key, options.headers[key]);\n }\n }\n\n xhr.send(formData);\n });\n }\n}\n","import { Type } from '@angular/core';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { PortalModule } from '@angular/cdk/portal';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { TdFileSelectDirective } from './directives/file-select.directive';\nimport { TdFileDropDirective } from './directives/file-drop.directive';\nimport { TdFileUploadComponent } from './file-upload/file-upload.component';\nimport { TdFileInputComponent, TdFileInputLabelDirective } from './file-input/file-input.component';\nimport { TdFileService } from './services/file.service';\n\nconst TD_FILE: Type<any>[] = [\n TdFileSelectDirective,\n TdFileDropDirective,\n TdFileUploadComponent,\n TdFileInputComponent,\n TdFileInputLabelDirective,\n];\n\n@NgModule({\n imports: [\n FormsModule,\n CommonModule,\n MatIconModule,\n MatButtonModule,\n PortalModule,\n ],\n declarations: [\n TD_FILE,\n ],\n exports: [\n TD_FILE,\n ],\n providers: [\n TdFileService,\n ],\n})\nexport class CovalentFileModule {\n\n}\n","import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, Optional } from '@angular/core';\nimport { Dir } from '@angular/cdk/bidi';\nimport { tdCollapseAnimation } from '@covalent/core/common';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'td-json-formatter',\n styleUrls: ['./json-formatter.component.scss' ],\n templateUrl: './json-formatter.component.html',\n animations: [\n tdCollapseAnimation,\n ],\n})\nexport class TdJsonFormatterComponent {\n\n /**\n * Max length for property names. Any names bigger than this get trunctated.\n */\n private static KEY_MAX_LENGTH: number = 30;\n\n /**\n * Max length for preview string. Any names bigger than this get trunctated.\n */\n private static PREVIEW_STRING_MAX_LENGTH: number = 80;\n\n /**\n * Max tooltip preview elements.\n */\n private static PREVIEW_LIMIT: number = 5;\n\n private _key: string;\n private _data: any;\n private _children: string[];\n private _open: boolean = false;\n private _levelsOpen: number = 0;\n\n /**\n * levelsOpen?: number\n * Levels opened by default when JS object is formatted and rendered.\n */\n @Input('levelsOpen')\n set levelsOpen(levelsOpen: number) {\n if (!Number.isInteger(levelsOpen)) {\n throw new Error('[levelsOpen] needs to be an integer.');\n }\n this._levelsOpen = levelsOpen;\n this._open = levelsOpen > 0;\n }\n get levelsOpen(): number {\n return this._levelsOpen;\n }\n\n get open(): boolean {\n return this._open;\n }\n\n /**\n * key?: string\n * Tag to be displayed next to formatted object.\n */\n @Input('key')\n set key(key: string) {\n this._key = key;\n }\n get key(): string {\n let elipsis: string = this._key && this._key.length > TdJsonFormatterComponent.KEY_MAX_LENGTH ? '…' : '';\n return this._key ? this._key.substring(0, TdJsonFormatterComponent.KEY_MAX_LENGTH) + elipsis : this._key;\n }\n\n /**\n * data: any\n * JS object to be formatted.\n */\n @Input('data')\n set data(data: any) {\n this._data = data;\n this.parseChildren();\n }\n get data(): any {\n return this._data;\n }\n\n get children(): string[] {\n return this._children;\n }\n\n get isRTL(): boolean {\n if (this._dir) {\n return this._dir.dir === 'rtl';\n }\n return false;\n }\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _dir: Dir) {\n }\n\n /**\n * Refreshes json-formatter and rerenders [data]\n */\n refresh(): void {\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Toggles collapse/expanded state of component.\n */\n toggle(): void {\n this._open = !this._open;\n }\n\n isObject(): boolean {\n return this.getType(this._data) === 'object';\n }\n\n isArray(): boolean {\n return Array.isArray(this._data);\n }\n\n hasChildren(): boolean {\n return this._children && this._children.length > 0;\n }\n\n /**\n * Gets parsed value depending on value type.\n */\n getValue(value: any): string {\n let type: string = this.getType(value);\n if (type === 'undefined' || (type === 'null')) {\n return type;\n } else if (type === 'date') {\n value = new Date(value).toString();\n } else if (type === 'string') {\n value = '\"' + value + '\"';\n } else if (type === 'function') {\n // Remove content of the function\n return value.toString()\n .replace(/[\\r\\n]/g, '')\n .replace(/\\{.*\\}/, '') + '{…}';\n } else if (Array.isArray(value)) {\n return this.getObjectName() + ' [' + value.length + ']';\n }\n return value;\n }\n\n /**\n * Gets type of object.\n * returns 'null' if object is null and 'date' if value is object and can be parsed to a date.\n */\n getType(object: any): string {\n if (typeof object === 'object') {\n if (!object) {\n return 'null';\n }\n if (Array.isArray(object)) {\n return 'object';\n }\n let date: Date = new Date(object);\n if (Object.prototype.toString.call(date) === '[object Date]') {\n if (!Number.isNaN(date.getTime())) {\n return 'date';\n }\n }\n }\n return typeof object;\n }\n\n /**\n * Generates string representation depending if its an object or function.\n * see: http://stackoverflow.com/a/332429\n */\n getObjectName(): string {\n let object: any = this._data;\n if (this.isObject() && !object.constructor) {\n return 'Object';\n }\n let funcNameRegex: RegExp = /function (.{1,})\\(/;\n let results: RegExpExecArray = (funcNameRegex).exec((object).constructor.toString());\n if (results && results.length > 1) {\n return results[1];\n } else {\n return '';\n }\n }\n\n /**\n * Creates preview of nodes children to render in tooltip depending if its an array or an object.\n */\n getPreview(): string {\n let previewData: string[];\n let startChar: string = '{ ';\n let endChar: string = ' }';\n if (this.isArray()) {\n let previewArray: any[] = this._data.slice(0, TdJsonFormatterComponent.PREVIEW_LIMIT);\n previewData = previewArray.map((obj: any) => {\n return this.getValue(obj);\n });\n startChar = '[';\n endChar = ']';\n } else {\n let previewKeys: string[] = this._children.slice(0, TdJsonFormatterComponent.PREVIEW_LIMIT);\n previewData = previewKeys.map((key: string) => {\n return key + ': ' + this.getValue(this._data[key]);\n });\n }\n let previewString: string = previewData.join(', ');\n let ellipsis: string = previewData.length >= TdJsonFormatterComponent.PREVIEW_LIMIT ||\n previewString.length > TdJsonFormatterComponent.PREVIEW_STRING_MAX_LENGTH ? '…' : '';\n return startChar + previewString.substring(0, TdJsonFormatterComponent.PREVIEW_STRING_MAX_LENGTH) +\n ellipsis + endChar;\n }\n\n private parseChildren(): void {\n if (this.isObject()) {\n this._children = [];\n for (let key in this._data) {\n this._children.push(key);\n }\n }\n }\n\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { TdJsonFormatterComponent } from './json-formatter.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatTooltipModule,\n MatIconModule,\n ],\n declarations: [\n TdJsonFormatterComponent,\n ],\n exports: [\n TdJsonFormatterComponent,\n ],\n})\nexport class CovalentJsonFormatterModule {\n\n}\n","import { Component, Input, ViewChild } from '@angular/core';\n\nimport { MatSidenav, MatDrawerToggleResult } from '@angular/material/sidenav';\n\nimport { ILayoutTogglable } from './layout-toggle.class';\n\n@Component({\n selector: 'td-layout',\n styleUrls: ['./layout.component.scss' ],\n templateUrl: './layout.component.html',\n})\nexport class TdLayoutComponent implements ILayoutTogglable {\n\n @ViewChild(MatSidenav) sidenav: MatSidenav;\n\n /**\n * mode?: 'side', 'push' or 'over'\n *\n * The mode or styling of the sidenav.\n * Defaults to \"over\".\n * See \"MatSidenav\" documentation for more info.\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('mode') mode: 'side' | 'push' | 'over' = 'over';\n\n /**\n * opened?: boolean\n *\n * Whether or not the sidenav is opened. Use this binding to open/close the sidenav.\n * Defaults to \"false\".\n *\n * See \"MatSidenav\" documentation for more info.\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('opened') opened: boolean = false;\n\n /**\n * sidenavWidth?: string\n *\n * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\n * Defaults to \"320px\".\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('sidenavWidth') sidenavWidth: string = '320px';\n\n /**\n * containerAutosize?: boolean\n *\n * Sets \"autosize\" of the sidenav-container.\n * Defaults to \"false\".\n *\n * See documentation for more info and potential performance risks.\n * \n * https://github.com/angular/material2/blob/master/src/lib/sidenav/sidenav.md#resizing-an-open-sidenav\n */\n @Input('containerAutosize') containerAutosize: boolean = false;\n\n /**\n * Checks if `ESC` should close the sidenav\n * Should only close it for `push` and `over` modes\n */\n get disableClose(): boolean {\n return this.mode === 'side';\n }\n\n /**\n * Proxy toggle method to access sidenav from outside (from td-layout template).\n */\n public toggle(): Promise<MatDrawerToggleResult> {\n return this.sidenav.toggle(!this.sidenav.opened);\n }\n\n /**\n * Proxy open method to access sidenav from outside (from td-layout template).\n */\n public open(): Promise<MatDrawerToggleResult> {\n return this.sidenav.open();\n }\n\n /**\n * Proxy close method to access sidenav from outside (from td-layout template).\n */\n public close(): Promise<MatDrawerToggleResult> {\n return this.sidenav.close();\n }\n\n}\n","import { Input, HostBinding, HostListener, Renderer2, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';\n\nimport { MatSidenav, MatDrawerToggleResult } from '@angular/material/sidenav';\n\nimport { ICanDisable, mixinDisabled } from '@covalent/core/common';\n\nimport { Subscription } from 'rxjs';\n\nexport interface ILayoutTogglable {\n opened: boolean;\n sidenav: MatSidenav;\n toggle(): Promise<MatDrawerToggleResult>;\n open(): Promise<MatDrawerToggleResult>;\n close(): Promise<MatDrawerToggleResult>;\n}\n\nexport class LayoutToggleBase { }\n\n/* tslint:disable-next-line */\nexport const _TdLayoutToggleMixinBase = mixinDisabled(LayoutToggleBase);\n\nexport abstract class LayoutToggle extends _TdLayoutToggleMixinBase implements AfterViewInit, OnDestroy, ICanDisable {\n\n private _toggleSubs: Subscription;\n\n private _initialized: boolean = false;\n private _hideWhenOpened: boolean = false;\n\n /**\n * hideWhenOpened?: boolean\n * When this is set to true, the host will be hidden when\n * the sidenav is opened.\n */\n @Input('hideWhenOpened')\n set hideWhenOpened(hideWhenOpened: boolean) {\n this._hideWhenOpened = hideWhenOpened;\n if (this._initialized) {\n this._toggleVisibility();\n }\n }\n\n constructor(protected _layout: ILayoutTogglable,\n private _renderer: Renderer2,\n private _elementRef: ElementRef) {\n super();\n // if layout has not been provided\n // show warn message\n if (!this._layout) {\n this._noLayoutMessage();\n }\n this._renderer.addClass(this._elementRef.nativeElement, 'td-layout-menu-button');\n }\n\n ngAfterViewInit(): void {\n this._initialized = true;\n if (this._layout && this._layout.sidenav) {\n this._toggleSubs = this._layout.sidenav._animationStarted.subscribe(() => {\n this._toggleVisibility();\n });\n }\n // execute toggleVisibility since the onOpenStart and onCloseStart\n // methods might not be executed always when the element is rendered\n this._toggleVisibility();\n }\n\n ngOnDestroy(): void {\n if (this._toggleSubs) {\n this._toggleSubs.unsubscribe();\n this._toggleSubs = undefined;\n }\n }\n\n /**\n * Listens to host click event to trigger the layout toggle\n */\n @HostListener('click', ['$event'])\n clickListener(event: Event): void {\n event.preventDefault();\n if (!this.disabled) {\n // if layout has been provided, try triggering the click on it\n // else show warn message\n if (this._layout && this._layout.open) {\n this.onClick();\n } else {\n this._noLayoutMessage();\n }\n }\n }\n\n abstract onClick(): void;\n\n private _toggleVisibility(): void {\n if (this._layout) {\n if (this._layout.sidenav.opened && this._hideWhenOpened) {\n this._renderer.setStyle(this._elementRef.nativeElement, 'display', 'none');\n } else {\n this._renderer.setStyle(this._elementRef.nativeElement, 'display', '');\n }\n }\n }\n\n private _noLayoutMessage(): void {\n /* tslint:disable-next-line */\n console.warn('Covalent: Parent layout not found for layout toggle directive');\n }\n\n}\n","import { Optional, Directive, Input, Renderer2, ElementRef, Inject, forwardRef } from '@angular/core';\nimport { TdLayoutComponent } from './layout.component';\nimport { LayoutToggle } from './layout-toggle.class';\n\n@Directive({\n selector: '[tdLayoutToggle]',\n})\nexport class TdLayoutToggleDirective extends LayoutToggle {\n\n @Input('tdLayoutToggle') \n set tdLayoutToggle(tdLayoutToggle: boolean) {\n this.disabled = !(<any>tdLayoutToggle === '' || tdLayoutToggle);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutComponent)) layout: TdLayoutComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.toggle();\n }\n}\n\n@Directive({\n selector: '[tdLayoutClose]',\n})\nexport class TdLayoutCloseDirective extends LayoutToggle {\n \n @Input('tdLayoutClose') \n set tdLayoutClose(tdLayoutClose: boolean) {\n this.disabled = !(<any>tdLayoutClose === '' || tdLayoutClose);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutComponent)) layout: TdLayoutComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.close();\n }\n}\n\n@Directive({\n selector: '[tdLayoutOpen]',\n})\nexport class TdLayoutOpenDirective extends LayoutToggle {\n\n @Input('tdLayoutOpen') \n set tdLayoutClose(tdLayoutOpen: boolean) {\n this.disabled = !(<any>tdLayoutOpen === '' || tdLayoutOpen);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutComponent)) layout: TdLayoutComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.open();\n }\n}\n","import { Component, Input, forwardRef, Optional, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TdLayoutComponent } from '../layout.component';\n\n@Component({\n selector: 'td-layout-nav',\n styleUrls: ['./layout-nav.component.scss' ],\n templateUrl: './layout-nav.component.html',\n})\nexport class TdLayoutNavComponent {\n\n /**\n * toolbarTitle?: string\n *\n * Title set in toolbar.\n */\n @Input('toolbarTitle') toolbarTitle: string;\n\n /**\n * icon?: string\n *\n * icon name to be displayed before the title\n */\n @Input('icon') icon: string;\n\n /**\n * logo?: string\n *\n * logo icon name to be displayed before the title.\n * If [icon] is set, then this will not be shown.\n */\n @Input('logo') logo: string;\n\n /**\n * color?: string\n *\n * toolbar color option: primary | accent | warn.\n * If [color] is not set, primary is used.\n */\n @Input('color') color: string = 'primary';\n\n /**\n * navigationRoute?: string\n *\n * option to set the combined route for the icon, logo, and toolbarTitle.\n */\n @Input('navigationRoute') navigationRoute: string;\n\n /**\n * Checks if router was injected.\n */\n get routerEnabled(): boolean {\n return !!this._router && !!this.navigationRoute;\n }\n\n constructor(@Optional() private _router: Router) {}\n\n handleNavigationClick(): void {\n if (this.routerEnabled) {\n this._router.navigateByUrl(this.navigationRoute);\n }\n }\n}\n","import { Component, Input, ViewChild, Optional } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { MatSidenav, MatDrawerToggleResult } from '@angular/material/sidenav';\n\nimport { ILayoutTogglable } from '../layout-toggle.class';\n\n@Component({\n selector: 'td-layout-nav-list',\n styleUrls: ['./layout-nav-list.component.scss' ],\n templateUrl: './layout-nav-list.component.html',\n})\nexport class TdLayoutNavListComponent implements ILayoutTogglable {\n\n @ViewChild(MatSidenav) sidenav: MatSidenav;\n\n /**\n * toolbarTitle?: string\n *\n * Title set in toolbar.\n */\n @Input('toolbarTitle') toolbarTitle: string;\n\n /**\n * icon?: string\n * icon name to be displayed before the title\n */\n @Input('icon') icon: string;\n\n /**\n * logo?: string\n *\n * logo icon name to be displayed before the title.\n * If [icon] is set, then this will not be shown.\n */\n @Input('logo') logo: string;\n\n /**\n * color?: string\n *\n * toolbar color option: primary | accent | warn.\n * If [color] is not set, primary is used.\n */\n @Input('color') color: string = 'primary';\n\n /**\n * mode?: 'side', 'push' or 'over'\n *\n * The mode or styling of the sidenav.\n * Defaults to \"side\".\n * See \"MatSidenav\" documentation for more info.\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('mode') mode: 'side' | 'push' | 'over' = 'side';\n\n /**\n * opened?: boolean\n * Whether or not the sidenav is opened. Use this binding to open/close the sidenav.\n * Defaults to \"true\".\n *\n * See \"MatSidenav\" documentation for more info.\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('opened') opened: boolean = true;\n\n /**\n * sidenavWidth?: string\n *\n * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\n * Defaults to \"350px\".\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('sidenavWidth') sidenavWidth: string = '350px';\n\n /**\n * containerAutosize?: boolean\n *\n * Sets \"autosize\" of the sidenav-container.\n * Defaults to \"false\".\n *\n * See documentation for more info and potential performance risks.\n * \n * https://github.com/angular/material2/blob/master/src/lib/sidenav/sidenav.md#resizing-an-open-sidenav\n */\n @Input('containerAutosize') containerAutosize: boolean = false;\n \n /**\n * navigationRoute?: string\n *\n * option to set the combined route for the icon, logo, and toolbarTitle.\n */\n @Input('navigationRoute') navigationRoute: string;\n\n /**\n * Checks if `ESC` should close the sidenav\n * Should only close it for `push` and `over` modes\n */\n get disableClose(): boolean {\n return this.mode === 'side';\n }\n\n /**\n * Checks if router was injected.\n */\n get routerEnabled(): boolean {\n return !!this._router && !!this.navigationRoute;\n }\n\n constructor(@Optional() private _router: Router) {}\n\n handleNavigationClick(): void {\n if (this.routerEnabled) {\n this._router.navigateByUrl(this.navigationRoute);\n }\n }\n\n /**\n * Proxy toggle method to access sidenav from outside (from td-layout template).\n */\n public toggle(): Promise<MatDrawerToggleResult> {\n return this.sidenav.toggle(!this.sidenav.opened);\n }\n\n /**\n * Proxy open method to access sidenav from outside (from td-layout template).\n */\n public open(): Promise<MatDrawerToggleResult> {\n return this.sidenav.open();\n }\n\n /**\n * Proxy close method to access sidenav from outside (from td-layout template).\n */\n public close(): Promise<MatDrawerToggleResult> {\n return this.sidenav.close();\n }\n\n}\n","import { Optional, Directive, Input, Renderer2, ElementRef, Inject, forwardRef } from '@angular/core';\nimport { TdLayoutNavListComponent } from './layout-nav-list.component';\nimport { LayoutToggle } from '../layout-toggle.class';\n\n@Directive({\n selector: '[tdLayoutNavListToggle]',\n})\nexport class TdLayoutNavListToggleDirective extends LayoutToggle {\n\n @Input('tdLayoutNavListToggle') \n set tdLayoutNavListToggle(tdLayoutNavListToggle: boolean) {\n this.disabled = !(<any>tdLayoutNavListToggle === '' || tdLayoutNavListToggle);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutNavListComponent)) layout: TdLayoutNavListComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.toggle();\n }\n}\n\n@Directive({\n selector: '[tdLayoutNavListClose]',\n})\nexport class TdLayoutNavListCloseDirective extends LayoutToggle {\n \n @Input('tdLayoutNavListClose') \n set tdLayoutNavListClose(tdLayoutNavListClose: boolean) {\n this.disabled = !(<any>tdLayoutNavListClose === '' || tdLayoutNavListClose);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutNavListComponent)) layout: TdLayoutNavListComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.close();\n }\n}\n\n@Directive({\n selector: '[tdLayoutNavListOpen]',\n})\nexport class TdLayoutNavListOpenDirective extends LayoutToggle {\n\n @Input('tdLayoutNavListOpen') \n set tdLayoutNavListOpen(tdLayoutNavListOpen: boolean) {\n this.disabled = !(<any>tdLayoutNavListOpen === '' || tdLayoutNavListOpen);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutNavListComponent)) layout: TdLayoutNavListComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.open();\n }\n}\n","import { Component } from '@angular/core';\nimport { Input } from '@angular/core';\n\n@Component({\n selector: 'td-layout-card-over',\n styleUrls: ['./layout-card-over.component.scss' ],\n templateUrl: './layout-card-over.component.html',\n})\nexport class TdLayoutCardOverComponent {\n\n /**\n * cardTitle?: string\n *\n * Title set in card.\n */\n @Input('cardTitle') cardTitle: string;\n\n /**\n * cardSubtitle?: string\n *\n * Subtitle set in card.\n */\n @Input('cardSubtitle') cardSubtitle: string;\n\n /**\n * cardWidth?: string\n *\n * Card flex width in %.\n * Defaults to 70%.\n */\n @Input('cardWidth') cardWidth: number = 70;\n\n /**\n * color?: string\n *\n * toolbar color option: primary | accent | warn.\n * If [color] is not set, primary is used.\n */\n @Input('color') color: string = 'primary';\n\n}\n","import { Component, Directive, Input, ViewChild } from '@angular/core';\n\nimport { MatSidenav, MatDrawerToggleResult } from '@angular/material/sidenav';\n\nimport { ILayoutTogglable } from '../layout-toggle.class';\n\n@Component({\n selector: 'td-layout-manage-list',\n styleUrls: ['./layout-manage-list.component.scss' ],\n templateUrl: './layout-manage-list.component.html',\n})\nexport class TdLayoutManageListComponent implements ILayoutTogglable {\n\n @ViewChild(MatSidenav) sidenav: MatSidenav;\n\n /**\n * mode?: 'side', 'push' or 'over'\n *\n * The mode or styling of the sidenav.\n * Defaults to \"side\".\n * See \"MatSidenav\" documentation for more info.\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('mode') mode: 'side' | 'push' | 'over' = 'side';\n\n /**\n * opened?: boolean\n *\n * Whether or not the sidenav is opened. Use this binding to open/close the sidenav.\n * Defaults to \"true\".\n *\n * See \"MatSidenav\" documentation for more info.\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('opened') opened: boolean = true;\n\n /**\n * sidenavWidth?: string\n *\n * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\n * Defaults to \"257px\".\n *\n * https://github.com/angular/material2/tree/master/src/lib/sidenav\n */\n @Input('sidenavWidth') sidenavWidth: string = '257px';\n\n /**\n * containerAutosize?: boolean\n *\n * Sets \"autosize\" of the sidenav-container.\n * Defaults to \"false\".\n *\n * See documentation for more info and potential performance risks.\n * \n * https://github.com/angular/material2/blob/master/src/lib/sidenav/sidenav.md#resizing-an-open-sidenav\n */\n @Input('containerAutosize') containerAutosize: boolean = false;\n\n /**\n * Checks if `ESC` should close the sidenav\n * Should only close it for `push` and `over` modes\n */\n get disableClose(): boolean {\n return this.mode === 'side';\n }\n\n /**\n * Proxy toggle method to access sidenav from outside (from td-layout template).\n */\n public toggle(): Promise<MatDrawerToggleResult> {\n return this.sidenav.toggle(!this.sidenav.opened);\n }\n\n /**\n * Proxy open method to access sidenav from outside (from td-layout template).\n */\n public open(): Promise<MatDrawerToggleResult> {\n return this.sidenav.open();\n }\n\n /**\n * Proxy close method to access sidenav from outside (from td-layout template).\n */\n public close(): Promise<MatDrawerToggleResult> {\n return this.sidenav.close();\n }\n\n}\n","import { Optional, Directive, Input, Renderer2, ElementRef, Inject, forwardRef } from '@angular/core';\nimport { TdLayoutManageListComponent } from './layout-manage-list.component';\nimport { LayoutToggle } from '../layout-toggle.class';\n\n@Directive({\n selector: '[tdLayoutManageListToggle]',\n})\nexport class TdLayoutManageListToggleDirective extends LayoutToggle {\n\n @Input('tdLayoutManageListToggle') \n set tdLayoutManageListToggle(tdLayoutManageListToggle: boolean) {\n this.disabled = !(<any>tdLayoutManageListToggle === '' || tdLayoutManageListToggle);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutManageListComponent)) layout: TdLayoutManageListComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.toggle();\n }\n}\n\n@Directive({\n selector: '[tdLayoutManageListClose]',\n})\nexport class TdLayoutManageListCloseDirective extends LayoutToggle {\n \n @Input('tdLayoutManageListClose') \n set tdLayoutManageListClose(tdLayoutManageListClose: boolean) {\n this.disabled = !(<any>tdLayoutManageListClose === '' || tdLayoutManageListClose);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutManageListComponent)) layout: TdLayoutManageListComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.close();\n }\n}\n\n@Directive({\n selector: '[tdLayoutManageListOpen]',\n})\nexport class TdLayoutManageListOpenDirective extends LayoutToggle {\n\n @Input('tdLayoutManageListOpen') \n set tdLayoutManageListOpen(tdLayoutManageListOpen: boolean) {\n this.disabled = !(<any>tdLayoutManageListOpen === '' || tdLayoutManageListOpen);\n }\n\n constructor(@Optional() @Inject(forwardRef(() => TdLayoutManageListComponent)) layout: TdLayoutManageListComponent,\n renderer: Renderer2,\n elementRef: ElementRef) {\n super(layout, renderer, elementRef);\n }\n\n onClick(): void {\n this._layout.open();\n }\n}\n","import { Component, Input, Renderer2, ElementRef } from '@angular/core';\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'td-layout-footer,td-layout-footer-inner',\n styleUrls: ['./layout-footer.component.scss' ],\n templateUrl: './layout-footer.component.html',\n})\nexport class TdLayoutFooterComponent {\n\n private _color: 'primary' | 'accent' | 'warn';\n\n /**\n * color?: string\n *\n * Optional color option: primary | accent | warn.\n */\n @Input('color')\n set color(color: 'primary' | 'accent' | 'warn') {\n if (color) {\n this._renderer.removeClass(this._elementRef.nativeElement, 'mat-' + this._color);\n this._color = color;\n this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);\n }\n }\n get color(): 'primary' | 'accent' | 'warn' {\n return this._color;\n }\n\n constructor(private _renderer: Renderer2,\n private _elementRef: ElementRef) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-layout-footer');\n }\n\n}\n","import { Component, Directive, Input, ContentChildren, OnInit, OnDestroy, forwardRef, Inject,\n QueryList, SecurityContext, Optional } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { SafeResourceUrl, SafeStyle, DomSanitizer } from '@angular/platform-browser';\nimport { MatDrawerToggleResult } from '@angular/material/sidenav';\n\nimport { Subscription } from 'rxjs';\n\nimport { TdLayoutComponent } from '../layout.component';\n\nimport { tdCollapseAnimation } from '@covalent/core/common';\n\n@Directive({\n selector: '[td-navigation-drawer-menu]',\n})\nexport class TdNavigationDrawerMenuDirective {\n\n}\n\n@Directive({\n selector: '[td-navigation-drawer-toolbar]',\n})\nexport class TdNavigationDrawerToolbarDirective {\n\n}\n\n@Component({\n selector: 'td-navigation-drawer',\n styleUrls: ['./navigation-drawer.component.scss' ],\n templateUrl: './navigation-drawer.component.html',\n animations: [ tdCollapseAnimation ],\n})\nexport class TdNavigationDrawerComponent implements OnInit, OnDestroy {\n\n private _closeSubscription: Subscription;\n private _menuToggled: boolean = false;\n private _backgroundImage: SafeStyle;\n\n get menuToggled(): boolean {\n return this._menuToggled;\n }\n\n @ContentChildren(TdNavigationDrawerMenuDirective) _drawerMenu: QueryList<TdNavigationDrawerMenuDirective>;\n\n @ContentChildren(TdNavigationDrawerToolbarDirective) _toolbar: QueryList<TdNavigationDrawerToolbarDirective>;\n\n /**\n * Checks if there is a [TdNavigationDrawerMenuDirective] has content.\n */\n get isMenuAvailable(): boolean {\n return this._drawerMenu ? this._drawerMenu.length > 0 : false;\n }\n\n /**\n * Checks if there is a [TdNavigationDrawerToolbarDirective] has content.\n */\n get isCustomToolbar(): boolean {\n return this._toolbar ? this._toolbar.length > 0 : false;\n }\n\n /**\n * Checks if there is a background image for the toolbar.\n */\n get isBackgroundAvailable(): boolean {\n return !!this._backgroundImage;\n }\n\n /**\n * sidenavTitle?: string\n * Title set in sideNav.\n */\n @Input('sidenavTitle') sidenavTitle: string;\n\n /**\n * icon?: string\n *\n * icon name to be displayed before the title\n */\n @Input('icon') icon: string;\n\n /**\n * logo?: string\n *\n * logo icon name to be displayed before the title.\n * If [icon] is set, then this will not be shown.\n */\n @Input('logo') logo: string;\n\n /**\n * avatar?: string\n *\n * avatar url to be displayed before the title\n * If [icon] or [logo] are set, then this will not be shown.\n */\n @Input('avatar') avatar: string;\n\n /**\n * color?: string\n *\n * toolbar color option: primary | accent | warn.\n * If [color] is not set, default is used.\n */\n @Input('color') color: string;\n\n /**\n * navigationRoute?: string\n *\n * option to set the combined route for the icon, logo, and sidenavTitle.\n */\n @Input('navigationRoute') navigationRoute: string;\n\n /**\n * backgroundUrl?: SafeResourceUrl\n *\n * image to be displayed as the background of the toolbar.\n * URL used will be sanitized, but it should be always from a trusted source to avoid XSS.\n */\n @Input('backgroundUrl')\n // TODO Angular complains with warnings if this is type [SafeResourceUrl].. so we will make it <any> until its fixed.\n // https://github.com/webpack/webpack/issues/2977\n set backgroundUrl(backgroundUrl: any) {\n if (backgroundUrl) {\n let sanitizedUrl: string = this._sanitize.sanitize(SecurityContext.RESOURCE_URL, backgroundUrl);\n this._backgroundImage = this._sanitize.sanitize(SecurityContext.STYLE, 'url(' + sanitizedUrl + ')');\n }\n }\n get backgroundImage(): SafeStyle {\n return this._backgroundImage;\n }\n\n /**\n * name?: string\n *\n * string to be displayed as part of the navigation drawer sublabel.\n * if [email] is not set, then [name] will be the toggle menu text.\n */\n @Input('name') name: string;\n\n /**\n * email?: string\n *\n * string to be displayed as part of the navigation drawer sublabel in the [toggle] menu text.\n * if [email] and [name] are not set, then the toggle menu is not rendered.\n */\n @Input('email') email: string;\n\n /**\n * Checks if router was injected.\n */\n get routerEnabled(): boolean {\n return !!this._router && !!this.navigationRoute;\n }\n\n constructor(@Inject(forwardRef(() => TdLayoutComponent)) private _layout: TdLayoutComponent,\n @Optional() private _router: Router,\n private _sanitize: DomSanitizer) {}\n\n ngOnInit(): void {\n this._closeSubscription = this._layout.sidenav.openedChange.subscribe((opened: boolean) => {\n if (!opened) {\n this._menuToggled = false;\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this._closeSubscription) {\n this._closeSubscription.unsubscribe();\n this._closeSubscription = undefined;\n }\n }\n\n toggleMenu(): void {\n if (this.isMenuAvailable) {\n this._menuToggled = !this._menuToggled;\n }\n }\n\n handleNavigationClick(): void {\n if (this.routerEnabled) {\n this._router.navigateByUrl(this.navigationRoute);\n this.close();\n }\n }\n\n /**\n * Proxy toggle method to access sidenav from outside (from td-layout template).\n */\n public toggle(): Promise<MatDrawerToggleResult> {\n return this._layout.toggle();\n }\n\n /**\n * Proxy open method to access sidenav from outside (from td-layout template).\n */\n public open(): Promise<MatDrawerToggleResult> {\n return this._layout.open();\n }\n\n /**\n * Proxy close method to access sidenav from outside (from td-layout template).\n */\n public close(): Promise<MatDrawerToggleResult> {\n return this._layout.close();\n }\n}\n","import { Type } from '@angular/core';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { ScrollDispatchModule } from '@angular/cdk/scrolling';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { TdLayoutComponent } from './layout.component';\nimport { TdLayoutToggleDirective, TdLayoutCloseDirective, TdLayoutOpenDirective } from './layout.directives';\nimport { TdLayoutNavComponent } from './layout-nav/layout-nav.component';\nimport { TdLayoutNavListComponent } from './layout-nav-list/layout-nav-list.component';\nimport {\n TdLayoutNavListToggleDirective, TdLayoutNavListCloseDirective, TdLayoutNavListOpenDirective,\n} from './layout-nav-list/layout-nav-list.directives';\nimport { TdLayoutCardOverComponent } from './layout-card-over/layout-card-over.component';\nimport { TdLayoutManageListComponent } from './layout-manage-list/layout-manage-list.component';\nimport {\n TdLayoutManageListToggleDirective, TdLayoutManageListCloseDirective, TdLayoutManageListOpenDirective,\n} from './layout-manage-list/layout-manage-list.directives';\nimport { TdLayoutFooterComponent } from './layout-footer/layout-footer.component';\n\nimport {\n TdNavigationDrawerComponent, TdNavigationDrawerMenuDirective, TdNavigationDrawerToolbarDirective,\n} from './navigation-drawer/navigation-drawer.component';\n\nconst TD_LAYOUTS: Type<any>[] = [\n TdLayoutComponent,\n TdLayoutToggleDirective,\n TdLayoutCloseDirective,\n TdLayoutOpenDirective,\n\n TdLayoutNavComponent,\n\n TdLayoutNavListComponent,\n TdLayoutNavListToggleDirective,\n TdLayoutNavListCloseDirective,\n TdLayoutNavListOpenDirective,\n\n TdLayoutCardOverComponent,\n\n TdLayoutManageListComponent,\n TdLayoutManageListToggleDirective,\n TdLayoutManageListCloseDirective,\n TdLayoutManageListOpenDirective,\n\n TdLayoutFooterComponent,\n\n TdNavigationDrawerComponent,\n TdNavigationDrawerMenuDirective,\n TdNavigationDrawerToolbarDirective,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ScrollDispatchModule,\n MatSidenavModule,\n MatToolbarModule,\n MatButtonModule,\n MatIconModule,\n MatCardModule,\n MatDividerModule,\n ],\n declarations: [\n TD_LAYOUTS,\n ],\n exports: [\n TD_LAYOUTS,\n ],\n})\nexport class CovalentLayoutModule {\n\n}\n","import { Component, ViewChild, TemplateRef, ChangeDetectorRef, ChangeDetectionStrategy, ElementRef, DoCheck } from '@angular/core';\nimport { AnimationEvent } from '@angular/animations';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Observable, Subject } from 'rxjs';\n\nexport enum LoadingType {\n Circular = 'circular',\n Linear = 'linear',\n}\n\nexport enum LoadingMode {\n Determinate = 'determinate',\n Indeterminate = 'indeterminate',\n}\n\nexport enum LoadingStrategy {\n Overlay = 'overlay',\n Replace = 'replace',\n}\n\nexport enum LoadingStyle {\n FullScreen = 'fullscreen',\n Overlay = 'overlay',\n None = 'none',\n}\n\nimport { tdFadeInOutAnimation } from '@covalent/core/common';\n\nexport const TD_CIRCLE_DIAMETER: number = 100;\n\n@Component({\n selector: 'td-loading',\n styleUrls: ['./loading.component.scss' ],\n templateUrl: './loading.component.html',\n animations: [\n tdFadeInOutAnimation,\n ],\n})\nexport class TdLoadingComponent implements DoCheck {\n\n private _animationIn: Subject<any> = new Subject<any>();\n private _animationOut: Subject<any> = new Subject<any>();\n private _mode: LoadingMode = LoadingMode.Indeterminate;\n private _defaultMode: LoadingMode = LoadingMode.Indeterminate;\n private _value: number = 0;\n private _circleDiameter: number = TD_CIRCLE_DIAMETER;\n\n /**\n * Flag for animation\n */\n animation: boolean = false;\n\n /**\n * Content injected into loading component.\n */\n content: TemplatePortal<any>;\n\n /**\n * Sets mode of [TdLoadingComponent] to LoadingMode.Determinate or LoadingMode.Indeterminate\n */\n set mode(mode: LoadingMode) {\n this._defaultMode = mode;\n }\n get mode(): LoadingMode {\n return this._mode;\n }\n\n /**\n * Sets value of [TdLoadingComponent] if mode is 'LoadingMode.Determinate'\n */\n set value(value: number) {\n this._value = value;\n // Check for changes for `OnPush` change detection\n this._changeDetectorRef.markForCheck();\n }\n get value(): number {\n return this._value;\n }\n\n style: LoadingStyle = LoadingStyle.None;\n\n /**\n * height: number\n * Sets height of [TdLoadingComponent].\n */\n height: number;\n\n /**\n * type: LoadingType\n * Sets type of [TdLoadingComponent] rendered.\n */\n type: LoadingType = LoadingType.Circular;\n\n /**\n * color: primary' | 'accent' | 'warn'\n * Sets theme color of [TdLoadingComponent] rendered.\n */\n color: 'primary' | 'accent' | 'warn' = 'primary';\n\n constructor(private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef) {}\n\n ngDoCheck(): void {\n // When overlay is used and the host width has a value greater than 1px\n // set the circle diameter when possible incase the loading component was rendered in a hidden state\n if (this.isOverlay() && this._hostHeight() > 1) {\n if (this.animation) {\n this._setCircleDiameter();\n this._changeDetectorRef.markForCheck();\n }\n }\n }\n\n getHeight(): string {\n // Ignore height if style is `overlay` or `fullscreen`.\n // Add height if child elements have a height and style is `none`, else return default height.\n if (this.isOverlay() || this.isFullScreen()) {\n return undefined;\n } else {\n return this.height ? `${this.height}px` : '150px';\n }\n }\n\n getCircleDiameter(): number {\n return this._circleDiameter;\n }\n\n getCircleStrokeWidth(): number {\n // we calculate the stroke width by setting it as 10% of its diameter\n let strokeWidth: number = this.getCircleDiameter() / 10;\n return Math.abs(strokeWidth);\n }\n\n isCircular(): boolean {\n return this.type === LoadingType.Circular;\n }\n\n isLinear(): boolean {\n return this.type === LoadingType.Linear;\n }\n\n isFullScreen(): boolean {\n return this.style === LoadingStyle.FullScreen;\n }\n\n isOverlay(): boolean {\n return this.style === LoadingStyle.Overlay;\n }\n\n animationComplete(event: AnimationEvent): void {\n // Check to see if its \"in\" or \"out\" animation to execute the proper callback\n if (!event.fromState) {\n this.inAnimationCompleted();\n } else {\n this.outAnimationCompleted();\n }\n }\n\n inAnimationCompleted(): void {\n this._animationIn.next(undefined);\n }\n\n outAnimationCompleted(): void {\n /* little hack to reset the loader value and animation before removing it from DOM\n * else, the loader will appear with prev value when its registered again\n * and will do an animation going prev value to 0.\n */\n this.value = 0;\n // Check for changes for `OnPush` change detection\n this._changeDetectorRef.markForCheck();\n this._animationOut.next(undefined);\n }\n\n /**\n * Starts in animation and returns an observable for completition event.\n */\n startInAnimation(): Observable<any> {\n /* need to switch back to the selected mode, so we have saved it in another variable\n * and then recover it. (issue with protractor)\n */\n this._mode = this._defaultMode;\n // Set values before the animations starts\n this._setCircleDiameter();\n // Check for changes for `OnPush` change detection\n this.animation = true;\n this._changeDetectorRef.markForCheck();\n return this._animationIn.asObservable();\n }\n\n /**\n * Starts out animation and returns an observable for completition event.\n */\n startOutAnimation(): Observable<any> {\n this.animation = false;\n /* need to switch back and forth from determinate/indeterminate so the setInterval()\n * inside mat-progress-spinner stops and protractor doesnt timeout waiting to sync.\n */\n this._mode = LoadingMode.Determinate;\n // Check for changes for `OnPush` change detection\n this._changeDetectorRef.markForCheck();\n return this._animationOut.asObservable();\n }\n\n /**\n * Calculate the proper diameter for the circle and set it\n */\n private _setCircleDiameter(): void {\n // we set a default diameter of 100 since this is the default in material\n let diameter: number = TD_CIRCLE_DIAMETER;\n // if height is provided, then we take that as diameter\n if (this.height) {\n diameter = this.height;\n // else if its not provided, then we take the host height\n } else if (this.height === undefined) {\n diameter = this._hostHeight();\n }\n // if the diameter is over TD_CIRCLE_DIAMETER, we set TD_CIRCLE_DIAMETER\n if (!!diameter && diameter <= TD_CIRCLE_DIAMETER) {\n this._circleDiameter = Math.floor(diameter);\n } else {\n this._circleDiameter = TD_CIRCLE_DIAMETER;\n }\n }\n\n /**\n * Returns the host height of the loading component\n */\n private _hostHeight(): number {\n if (<HTMLElement>this._elementRef.nativeElement) {\n return (<HTMLElement>this._elementRef.nativeElement).getBoundingClientRect().height;\n }\n return 0;\n }\n}\n","import { Injectable, ComponentFactoryResolver, ChangeDetectorRef, Provider, SkipSelf, Optional, EmbeddedViewRef } from '@angular/core';\nimport { Injector, ComponentRef, ViewContainerRef, TemplateRef } from '@angular/core';\nimport { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\n\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { TdLoadingContext } from '../directives/loading.directive';\nimport { TdLoadingComponent, LoadingStyle } from '../loading.component';\nimport { ITdLoadingConfig } from './loading.service';\n\nexport interface IInternalLoadingOptions extends ITdLoadingConfig {\n height?: number;\n style?: LoadingStyle;\n}\n\nexport interface ILoadingRef {\n observable: Observable<any>;\n componentRef: ComponentRef<any>;\n subject?: Subject<any>;\n times?: number;\n}\n\n/**\n * NOTE: @internal usage only.\n */\n@Injectable()\nexport class TdLoadingFactory {\n\n constructor(private _componentFactoryResolver: ComponentFactoryResolver,\n private _overlay: Overlay,\n private _injector: Injector) {\n }\n\n /**\n * Uses material `Overlay` services to create a DOM element and attach the loading component\n * into it. Leveraging the state and configuration from it.\n *\n * Saves a reference in context to be called when registering/resolving the loading element.\n */\n public createFullScreenComponent(options: ITdLoadingConfig): ILoadingRef {\n (<IInternalLoadingOptions>options).height = undefined;\n (<IInternalLoadingOptions>options).style = LoadingStyle.FullScreen;\n let loadingRef: ILoadingRef = this._initializeContext();\n let loading: boolean = false;\n let overlayRef: OverlayRef;\n loadingRef.observable.pipe(\n distinctUntilChanged(),\n ).subscribe((registered: number) => {\n if (registered > 0 && !loading) {\n loading = true;\n overlayRef = this._createOverlay();\n loadingRef.componentRef = overlayRef.attach(new ComponentPortal(TdLoadingComponent));\n this._mapOptions(options, loadingRef.componentRef.instance);\n loadingRef.componentRef.instance.startInAnimation();\n loadingRef.componentRef.changeDetectorRef.detectChanges();\n } else if (registered <= 0 && loading) {\n loading = false;\n let subs: Subscription = loadingRef.componentRef.instance.startOutAnimation().subscribe(() => {\n subs.unsubscribe();\n loadingRef.componentRef.destroy();\n overlayRef.detach();\n overlayRef.dispose();\n });\n }\n });\n return loadingRef;\n }\n\n /**\n * Creates a loading component dynamically and attaches it into the given viewContainerRef.\n * Leverages TemplatePortals from material to inject the template inside of it so it fits\n * perfectly when overlaying it.\n *\n * Saves a reference in context to be called when registering/resolving the loading element.\n */\n public createOverlayComponent(options: ITdLoadingConfig, viewContainerRef: ViewContainerRef,\n templateRef: TemplateRef<Object>): ILoadingRef {\n (<IInternalLoadingOptions>options).height = undefined;\n (<IInternalLoadingOptions>options).style = LoadingStyle.Overlay;\n let loadingRef: ILoadingRef = this._createComponent(options);\n let loading: boolean = false;\n loadingRef.componentRef.instance.content = new TemplatePortal(templateRef, viewContainerRef);\n viewContainerRef.clear();\n viewContainerRef.insert(loadingRef.componentRef.hostView, 0);\n loadingRef.observable.pipe(\n distinctUntilChanged(),\n ).subscribe((registered: number) => {\n if (registered > 0 && !loading) {\n loading = true;\n loadingRef.componentRef.instance.startInAnimation();\n } else if (registered <= 0 && loading) {\n loading = false;\n loadingRef.componentRef.instance.startOutAnimation();\n }\n });\n return loadingRef;\n }\n\n /**\n * Creates a loading component dynamically and attaches it into the given viewContainerRef.\n * Replaces the template with the loading component depending if it was registered or resolved.\n *\n * Saves a reference in context to be called when registering/resolving the loading element.\n */\n public createReplaceComponent(options: ITdLoadingConfig, viewContainerRef: ViewContainerRef,\n templateRef: TemplateRef<Object>, context: TdLoadingContext): ILoadingRef {\n let nativeElement: HTMLElement = <HTMLElement>templateRef.elementRef.nativeElement;\n (<IInternalLoadingOptions>options).height = nativeElement.nextElementSibling ?\n nativeElement.nextElementSibling.scrollHeight : undefined;\n (<IInternalLoadingOptions>options).style = LoadingStyle.None;\n let loadingRef: ILoadingRef = this._createComponent(options);\n let loading: boolean = false;\n // passing context so when the template is attached, we can keep the reference of the variables\n let contentRef: EmbeddedViewRef<Object> = viewContainerRef.createEmbeddedView(templateRef, context);\n loadingRef.observable.pipe(\n distinctUntilChanged(),\n ).subscribe((registered: number) => {\n if (registered > 0 && !loading) {\n loading = true;\n // detach the content and attach the loader if loader is there\n let index: number = viewContainerRef.indexOf(loadingRef.componentRef.hostView);\n if (index < 0) {\n viewContainerRef.detach(viewContainerRef.indexOf(contentRef));\n viewContainerRef.insert(loadingRef.componentRef.hostView, 0);\n }\n loadingRef.componentRef.instance.startInAnimation();\n } else if (registered <= 0 && loading) {\n loading = false;\n let subs: Subscription = loadingRef.componentRef.instance.startOutAnimation().subscribe(() => {\n subs.unsubscribe();\n // detach loader and attach the content if content is there\n let index: number = viewContainerRef.indexOf(contentRef);\n if (index < 0) {\n viewContainerRef.detach(viewContainerRef.indexOf(loadingRef.componentRef.hostView));\n viewContainerRef.insert(contentRef, 0);\n }\n /**\n * Need to call \"markForCheck\" and \"detectChanges\" on attached template, so its detected by parent component when attached\n * with \"OnPush\" change detection\n */\n contentRef.detectChanges();\n contentRef.markForCheck();\n });\n }\n });\n return loadingRef;\n }\n\n /**\n * Creates a fullscreen overlay for the loading usage.\n */\n private _createOverlay(): OverlayRef {\n let state: OverlayConfig = new OverlayConfig();\n state.hasBackdrop = false;\n state.positionStrategy = this._overlay.position().global().centerHorizontally().centerVertically();\n return this._overlay.create(state);\n }\n\n /**\n * Creates a generic component dynamically waiting to be attached to a viewContainerRef.\n */\n private _createComponent(options: IInternalLoadingOptions): ILoadingRef {\n let compRef: ILoadingRef = this._initializeContext();\n compRef.componentRef = this._componentFactoryResolver\n .resolveComponentFactory(TdLoadingComponent).create(this._injector);\n this._mapOptions(options, compRef.componentRef.instance);\n return compRef;\n }\n\n /**\n * Initialize context for loading component.\n */\n private _initializeContext(): ILoadingRef {\n let subject: Subject<any> = new Subject<any>();\n return {\n observable: subject.asObservable(),\n subject: subject,\n componentRef: undefined,\n times: 0,\n };\n }\n\n /**\n * Maps configuration to the loading component instance.\n */\n private _mapOptions(options: IInternalLoadingOptions, instance: TdLoadingComponent): void {\n instance.style = options.style;\n if (options.type !== undefined) {\n instance.type = options.type;\n }\n if (options.height !== undefined) {\n instance.height = options.height;\n }\n if (options.mode !== undefined) {\n instance.mode = options.mode;\n }\n if (options.color !== undefined) {\n instance.color = options.color;\n }\n }\n}\n\nexport function LOADING_FACTORY_PROVIDER_FACTORY(\n parent: TdLoadingFactory, componentFactoryResolver: ComponentFactoryResolver, overlay: Overlay, injector: Injector): TdLoadingFactory {\n return parent || new TdLoadingFactory(componentFactoryResolver, overlay, injector);\n}\n\nexport const LOADING_FACTORY_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdLoadingFactory,\n deps: [[new Optional(), new SkipSelf(), TdLoadingFactory], ComponentFactoryResolver, Overlay, Injector],\n useFactory: LOADING_FACTORY_PROVIDER_FACTORY,\n};\n","import { Injectable, Provider, SkipSelf, Optional } from '@angular/core';\nimport { ViewContainerRef, TemplateRef } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\n\nimport { TdLoadingContext } from '../directives/loading.directive';\nimport { TdLoadingComponent, LoadingMode, LoadingStrategy, LoadingType } from '../loading.component';\nimport { TdLoadingFactory, ILoadingRef } from './loading.factory';\n\nexport interface ITdLoadingConfig {\n name: string;\n type?: LoadingType;\n mode?: LoadingMode;\n color?: 'primary' | 'accent' | 'warn';\n}\n\nexport class TdLoadingConfig implements ITdLoadingConfig {\n name: string;\n type?: LoadingType;\n mode?: LoadingMode;\n color?: 'primary' | 'accent' | 'warn';\n\n constructor(config: ITdLoadingConfig) {\n this.name = config.name;\n if (!this.name) {\n throw Error('Name is required for [TdLoading] configuration.');\n }\n this.mode = config.mode ? config.mode : LoadingMode.Indeterminate;\n this.type = config.type ? config.type : LoadingType.Circular;\n this.color = config.color ? config.color : 'primary';\n }\n}\n\nexport interface ITdLoadingDirectiveConfig extends ITdLoadingConfig {\n strategy?: LoadingStrategy;\n}\n\nexport class TdLoadingDirectiveConfig extends TdLoadingConfig implements ITdLoadingDirectiveConfig {\n name: string;\n type: LoadingType;\n mode: LoadingMode;\n strategy: LoadingStrategy;\n\n constructor(config: ITdLoadingDirectiveConfig) {\n super(config);\n this.strategy = config.strategy ? config.strategy : LoadingStrategy.Replace;\n }\n}\n\n@Injectable()\nexport class TdLoadingService {\n\n private _context: {[key: string]: ILoadingRef} = {};\n private _timeouts: {[key: string]: any} = {};\n\n constructor(private _loadingFactory: TdLoadingFactory) {\n this.create({\n name: 'td-loading-main',\n });\n }\n\n /**\n * params:\n * - config: ILoadingDirectiveConfig\n * - viewContainerRef: ViewContainerRef\n * - templateRef: TemplateRef<Object>\n *\n * Creates an replace loading mask and attaches it to the viewContainerRef.\n * Replaces the templateRef with the mask when a request is registered on it.\n *\n * NOTE: @internal usage only.\n */\n createComponent(config: ITdLoadingDirectiveConfig, viewContainerRef: ViewContainerRef,\n templateRef: TemplateRef<Object>, context: TdLoadingContext): ILoadingRef {\n let directiveConfig: TdLoadingDirectiveConfig = new TdLoadingDirectiveConfig(config);\n if (this._context[directiveConfig.name]) {\n throw Error(`Name duplication: [TdLoading] directive has a name conflict with ${directiveConfig.name}.`);\n }\n if (directiveConfig.strategy === LoadingStrategy.Overlay) {\n this._context[directiveConfig.name] = this._loadingFactory.createOverlayComponent(directiveConfig, viewContainerRef, templateRef);\n } else {\n this._context[directiveConfig.name] = this._loadingFactory.createReplaceComponent(directiveConfig, viewContainerRef, templateRef, context);\n }\n return this._context[directiveConfig.name];\n }\n\n /**\n * params:\n * - config: ITdLoadingConfig\n *\n * Creates a fullscreen loading mask and attaches it to the DOM with the given configuration.\n * Only displayed when the mask has a request registered on it.\n */\n public create(config: ITdLoadingConfig): void {\n let fullscreenConfig: TdLoadingConfig = new TdLoadingConfig(config);\n this.removeComponent(fullscreenConfig.name);\n this._context[fullscreenConfig.name] = this._loadingFactory.createFullScreenComponent(fullscreenConfig);\n }\n\n /**\n * params:\n * - name: string\n *\n * Removes `loading` component from service context.\n */\n public removeComponent(name: string): void {\n if (this._context[name]) {\n this._context[name].subject.unsubscribe();\n if (this._context[name].componentRef) {\n this._context[name].componentRef.destroy();\n }\n this._context[name] = undefined;\n delete this._context[name];\n }\n }\n\n /**\n * params:\n * - name: string\n * - registers?: number\n * returns: true if successful\n *\n * Resolves a request for the loading mask referenced by the name parameter.\n * Can optionally pass registers argument to set a number of register calls.\n *\n * If no paramemeters are used, then default main mask will be used.\n *\n * e.g. loadingService.register()\n */\n public register(name: string = 'td-loading-main', registers: number = 1): boolean {\n // try registering into the service if the loading component has been instanciated or if it exists.\n if (this._context[name]) {\n registers = registers < 1 ? 1 : registers;\n this._context[name].times += registers;\n this._context[name].subject.next(this._context[name].times);\n return true;\n } else {\n // if it doesnt exist, set a timeout so its registered after change detection happens\n // this in case \"register\" occured on the `ngOnInit` lifehook cycle.\n if (!this._timeouts[name]) {\n this._timeouts[name] = setTimeout(() => {\n this.register(name, registers);\n });\n } else {\n // if it timeout occured and still doesnt exist, it means the tiemout wasnt needed so we clear it.\n this._clearTimeout(name);\n }\n }\n return false;\n }\n\n /**\n * params:\n * - name: string\n * - resolves?: number\n * returns: true if successful\n *\n * Resolves a request for the loading mask referenced by the name parameter.\n * Can optionally pass resolves argument to set a number of resolve calls.\n *\n * If no paramemeters are used, then default main mask will be used.\n *\n * e.g. loadingService.resolve()\n */\n public resolve(name: string = 'td-loading-main', resolves: number = 1): boolean {\n // clear timeout if the loading component is \"resolved\" before its \"registered\"\n this._clearTimeout(name);\n if (this._context[name]) {\n resolves = resolves < 1 ? 1 : resolves;\n if (this._context[name].times > 0) {\n let times: number = this._context[name].times;\n times -= resolves;\n this._context[name].times = times < 0 ? 0 : times;\n }\n this._context[name].subject.next(this._context[name].times);\n return true;\n }\n return false;\n }\n\n /**\n * params:\n * - name: string\n * returns: true if successful\n *\n * Resolves all request for the loading mask referenced by the name parameter.\n *\n * If no paramemeters are used, then default main mask will be used.\n *\n * e.g. loadingService.resolveAll()\n */\n public resolveAll(name: string = 'td-loading-main'): boolean {\n // clear timeout if the loading component is \"resolved\" before its \"registered\"\n this._clearTimeout(name);\n if (this._context[name]) {\n this._context[name].times = 0;\n this._context[name].subject.next(this._context[name].times);\n return true;\n }\n return false;\n }\n\n /**\n * params:\n * - name: string\n * - value: number\n * returns: true if successful\n *\n * Set value on a loading mask referenced by the name parameter.\n * Usage only available if its mode is 'determinate' and if loading is showing.\n */\n public setValue(name: string, value: number): boolean {\n if (this._context[name]) {\n let instance: TdLoadingComponent = this._context[name].componentRef.instance;\n if (instance.mode === LoadingMode.Determinate && instance.animation) {\n instance.value = value;\n return true;\n }\n }\n return false;\n }\n\n /**\n * Clears timeout linked to the name.\n * @param name Name of the loading component to be cleared\n */\n private _clearTimeout(name: string): void {\n clearTimeout(this._timeouts[name]);\n delete this._timeouts[name];\n }\n}\n\nexport function LOADING_PROVIDER_FACTORY(\n parent: TdLoadingService, loadingFactory: TdLoadingFactory): TdLoadingService {\n return parent || new TdLoadingService(loadingFactory);\n}\n\nexport const LOADING_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdLoadingService,\n deps: [[new Optional(), new SkipSelf(), TdLoadingService], TdLoadingFactory],\n useFactory: LOADING_PROVIDER_FACTORY,\n};\n","import { Directive, Input, OnInit, OnDestroy } from '@angular/core';\nimport { ViewContainerRef, TemplateRef } from '@angular/core';\n\nimport { LoadingType, LoadingMode, LoadingStrategy, TdLoadingComponent } from '../loading.component';\nimport { TdLoadingService } from '../services/loading.service';\nimport { ILoadingRef } from '../services/loading.factory';\n\n/**\n * Context class for variable reference\n */\nexport class TdLoadingContext {\n public $implicit: any = undefined;\n public tdLoading: any = undefined;\n}\n\n// Constant for generation of the id for the next component\nlet TD_LOADING_NEXT_ID: number = 0;\n\n@Directive({\n selector: '[tdLoading]',\n})\nexport class TdLoadingDirective implements OnInit, OnDestroy {\n\n private _context: TdLoadingContext = new TdLoadingContext();\n private _type: LoadingType;\n private _mode: LoadingMode;\n private _strategy: LoadingStrategy;\n private _name: string;\n private _loadingRef: ILoadingRef;\n\n /**\n * tdLoading: string\n * Name reference of the loading mask, used to register/resolve requests to the mask.\n */\n @Input('tdLoading')\n set name(name: string) {\n if (!this._name) {\n if (name) {\n this._name = name;\n }\n }\n }\n\n /**\n * tdLoadingUntil?: any\n * If its null, undefined or false it will be used to register requests to the mask.\n * Else if its any value that can be resolved as true, it will resolve the mask.\n * [name] is optional when using [until], but can still be used to register/resolve it manually.\n */\n @Input('tdLoadingUntil')\n set until(until: any) {\n if (!this._name) {\n this._name = 'td-loading-until-' + TD_LOADING_NEXT_ID++;\n }\n this._context.$implicit = this._context.tdLoading = until;\n if (!until) {\n this._loadingService.register(this._name);\n } else {\n this._loadingService.resolveAll(this._name);\n }\n }\n\n /**\n * tdLoadingType?: LoadingType or ['linear' | 'circular']\n * Sets the type of loading mask depending on value.\n * Defaults to [LoadingType.Circular | 'circular'].\n */\n @Input('tdLoadingType')\n set type(type: LoadingType) {\n switch (type) {\n case LoadingType.Linear:\n this._type = LoadingType.Linear;\n break;\n default:\n this._type = LoadingType.Circular;\n break;\n }\n }\n\n /**\n * tdLoadingMode?: LoadingMode or ['determinate' | 'indeterminate']\n * Sets the mode of loading mask depending on value.\n * Defaults to [LoadingMode.Indeterminate | 'indeterminate'].\n */\n @Input('tdLoadingMode')\n set mode(mode: LoadingMode) {\n switch (mode) {\n case LoadingMode.Determinate:\n this._mode = LoadingMode.Determinate;\n break;\n default:\n this._mode = LoadingMode.Indeterminate;\n break;\n }\n }\n\n /**\n * tdLoadingStrategy?: LoadingStrategy or ['replace' | 'overlay']\n * Sets the strategy of loading mask depending on value.\n * Defaults to [LoadingMode.Replace | 'replace'].\n */\n @Input('tdLoadingStrategy')\n set strategy(stategy: LoadingStrategy) {\n switch (stategy) {\n case LoadingStrategy.Overlay:\n this._strategy = LoadingStrategy.Overlay;\n break;\n default:\n this._strategy = LoadingStrategy.Replace;\n break;\n }\n }\n\n /**\n * tdLoadingColor?: \"primary\" | \"accent\" | \"warn\"\n * Sets the theme color of the loading component. Defaults to \"primary\"\n */\n @Input('tdLoadingColor') color: 'primary' | 'accent' | 'warn' = 'primary';\n\n constructor(private _viewContainerRef: ViewContainerRef,\n private _templateRef: TemplateRef<TdLoadingContext>,\n private _loadingService: TdLoadingService) {}\n\n /**\n * Registers component in the DOM, so it will be available when calling resolve/register.\n */\n ngOnInit(): void {\n this._registerComponent();\n }\n\n /**\n * Remove component when directive is destroyed.\n */\n ngOnDestroy(): void {\n this._loadingService.removeComponent(this._name);\n this._loadingRef = undefined;\n }\n\n /**\n * Creates [TdLoadingComponent] and attaches it to this directive's [ViewContainerRef].\n * Passes this directive's [TemplateRef] to modify DOM depending on loading `strategy`.\n */\n private _registerComponent(): void {\n if (!this._name) {\n throw new Error('Name is needed to register loading directive');\n }\n // Check if `TdLoadingComponent` has been created before trying to add one again.\n // There is a weird edge case when using `[routerLinkActive]` that calls the `ngOnInit` twice in a row\n if (!this._loadingRef) {\n this._loadingRef = this._loadingService.createComponent({\n name: this._name,\n type: this._type,\n mode: this._mode,\n color: this.color,\n strategy: this._strategy,\n }, this._viewContainerRef, this._templateRef, this._context);\n }\n }\n}\n","import { Type } from '@angular/core';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { TdLoadingService, LOADING_PROVIDER } from './services/loading.service';\nimport { TdLoadingFactory, LOADING_FACTORY_PROVIDER } from './services/loading.factory';\nimport { TdLoadingDirective } from './directives/loading.directive';\nimport { TdLoadingComponent } from './loading.component';\n\nconst TD_LOADING: Type<any>[] = [\n TdLoadingComponent,\n TdLoadingDirective,\n];\n\nconst TD_LOADING_ENTRY_COMPONENTS: Type<any>[] = [\n TdLoadingComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n OverlayModule,\n PortalModule,\n ],\n declarations: [\n TD_LOADING,\n ],\n exports: [\n TD_LOADING,\n ],\n providers: [\n LOADING_FACTORY_PROVIDER,\n LOADING_PROVIDER,\n ],\n entryComponents: [\n TD_LOADING_ENTRY_COMPONENTS,\n ],\n})\nexport class CovalentLoadingModule {\n\n}\n","import { Injectable, NgZone, SkipSelf, Optional, Provider } from '@angular/core';\nimport { Observable, BehaviorSubject, Subscription, fromEvent } from 'rxjs';\n\n@Injectable()\nexport class TdMediaService {\n\n private _resizing: boolean = false;\n private _globalSubscription: Subscription;\n private _queryMap: Map<string, string> = new Map<string, string>();\n private _querySources: { [key: string]: BehaviorSubject<boolean>} = {};\n private _queryObservables: {[key: string]: Observable<boolean>} = {};\n\n constructor(private _ngZone: NgZone) {\n this._queryMap.set('xs', '(max-width: 599px)');\n this._queryMap.set('gt-xs', '(min-width: 600px)');\n this._queryMap.set('sm', '(min-width: 600px) and (max-width: 959px)');\n this._queryMap.set('gt-sm', '(min-width: 960px)');\n this._queryMap.set('md', '(min-width: 960px) and (max-width: 1279px)');\n this._queryMap.set('gt-md', '(min-width: 1280px)');\n this._queryMap.set('lg', '(min-width: 1280px) and (max-width: 1919px)');\n this._queryMap.set('gt-lg', '(min-width: 1920px)');\n this._queryMap.set('xl', '(min-width: 1920px)');\n this._queryMap.set('landscape', '(orientation: landscape)');\n this._queryMap.set('portrait', '(orientation: portrait)');\n this._queryMap.set('print', 'print');\n\n this._resizing = false;\n // we make sure that the resize checking happend outside of Angular since it happens often\n this._globalSubscription = this._ngZone.runOutsideAngular(() => {\n return fromEvent(window, 'resize').subscribe(() => {\n // way to prevent the resize event from triggering the match media if there is already one event running already.\n if (!this._resizing) {\n this._resizing = true;\n setTimeout(() => {\n this._onResize();\n this._resizing = false;\n }, 100);\n }\n });\n });\n }\n\n /**\n * Deregisters a query so its stops being notified or used.\n */\n deregisterQuery(query: string): void {\n if (this._queryMap.get(query.toLowerCase())) {\n query = this._queryMap.get(query.toLowerCase());\n }\n this._querySources[query].unsubscribe();\n delete this._querySources[query];\n delete this._queryObservables[query];\n }\n\n /**\n * Used to evaluate whether a given media query is true or false given the current device's screen / window size.\n */\n public query(query: string): boolean {\n if (this._queryMap.get(query.toLowerCase())) {\n query = this._queryMap.get(query.toLowerCase());\n }\n return this._ngZone.run(() => {\n return matchMedia(query).matches;\n });\n }\n\n /**\n * Registers a media query and returns an [Observable] that will re-evaluate and\n * return if the given media query matches on window resize.\n * Note: don't forget to unsubscribe from [Observable] when finished watching.\n */\n public registerQuery(query: string): Observable<boolean> {\n if (this._queryMap.get(query.toLowerCase())) {\n query = this._queryMap.get(query.toLowerCase());\n }\n if (!this._querySources[query]) {\n this._querySources[query] = new BehaviorSubject<boolean>(matchMedia(query).matches);\n this._queryObservables[query] = this._querySources[query].asObservable();\n }\n return this._queryObservables[query];\n }\n\n /**\n * Trigger a match media event on all subscribed observables.\n */\n public broadcast(): void {\n this._onResize();\n }\n\n private _onResize(): void {\n for (let query in this._querySources) {\n this._ngZone.run(() => {\n this._matchMediaTrigger(query);\n });\n }\n }\n\n private _matchMediaTrigger(query: string): void {\n this._querySources[query].next(matchMedia(query).matches);\n }\n}\n\nexport function MEDIA_PROVIDER_FACTORY(\n parent: TdMediaService, ngZone: NgZone): TdMediaService {\n return parent || new TdMediaService(ngZone);\n}\n\nexport const MEDIA_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdMediaService,\n deps: [[new Optional(), new SkipSelf(), TdMediaService], NgZone],\n useFactory: MEDIA_PROVIDER_FACTORY,\n};\n","import { Directive, ElementRef, Input, OnInit, OnDestroy } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { TdMediaService } from '../services/media.service';\n\n@Directive({\n selector: '[tdMediaToggle]',\n})\nexport class TdMediaToggleDirective implements OnInit, OnDestroy {\n\n private _subscription: Subscription;\n\n private _query: string;\n private _matches: boolean = false;\n private _attributes: {[key: string]: string} = {};\n private _styles: {[key: string]: string} = {};\n private _classes: string[] = [];\n\n /**\n * tdMediaToggle: string\n * Media query used to evaluate screen/window size.\n * Toggles attributes, classes and styles if media query is matched.\n */\n @Input('tdMediaToggle')\n set query(query: string) {\n if (!query) {\n throw new Error('Query needed for [tdMediaToggle] directive.');\n }\n this._query = query;\n }\n\n /**\n * mediaAttributes: {[key: string]: string}\n * Attributes to be toggled when media query matches.\n */\n @Input('mediaAttributes')\n set attributes(attributes: any) {\n this._attributes = attributes;\n }\n\n /**\n * mediaClasses: string[]\n * CSS Classes to be toggled when media query matches.\n */\n @Input('mediaClasses')\n set classes(classes: string[]) {\n this._classes = classes;\n }\n\n /**\n * mediaStyles: {[key: string]: string}\n * CSS Styles to be toggled when media query matches.\n */\n @Input('mediaStyles')\n set styles(styles: any) {\n this._styles = styles;\n }\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef, private _mediaService: TdMediaService) { }\n\n ngOnInit(): void {\n this._mediaChange(this._mediaService.query(this._query));\n this._subscription = this._mediaService.registerQuery(this._query).subscribe((matches: boolean) => {\n this._mediaChange(matches);\n });\n }\n\n ngOnDestroy(): void {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n }\n\n private _mediaChange(matches: boolean): void {\n this._matches = matches;\n this._changeAttributes();\n this._changeClasses();\n this._changeStyles();\n }\n\n private _changeAttributes(): void {\n for (let attr in this._attributes) {\n if (this._matches) {\n this._renderer.setAttribute(this._elementRef.nativeElement, attr, this._attributes[attr]);\n } else {\n this._renderer.removeAttribute(this._elementRef.nativeElement, attr);\n }\n }\n }\n\n private _changeClasses(): void {\n this._classes.forEach((className: string) => {\n if (this._matches) {\n this._renderer.addClass(this._elementRef.nativeElement, className);\n } else {\n this._renderer.removeClass(this._elementRef.nativeElement, className);\n }\n });\n }\n\n private _changeStyles(): void {\n for (let style in this._styles) {\n if (this._matches) {\n this._renderer.setStyle(this._elementRef.nativeElement, style, this._styles[style]);\n } else {\n this._renderer.removeStyle(this._elementRef.nativeElement, style);\n }\n }\n }\n\n}\n","import { Type } from '@angular/core';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\n\nimport { MEDIA_PROVIDER } from './services/media.service';\nimport { TdMediaToggleDirective } from './directives/media-toggle.directive';\n\nconst TD_MEDIA: Type<any>[] = [\n TdMediaToggleDirective,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n TD_MEDIA,\n ],\n exports: [\n TD_MEDIA,\n ],\n providers: [\n MEDIA_PROVIDER,\n ],\n})\nexport class CovalentMediaModule {\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'td-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n})\nexport class TdMenuComponent {\n\n}\n","import { Type } from '@angular/core';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { TdMenuComponent } from './menu.component';\n\nconst TD_MENU: Type<any>[] = [\n TdMenuComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n MatMenuModule,\n MatDividerModule,\n ],\n declarations: [\n TD_MENU,\n ],\n exports: [\n TD_MENU,\n ],\n})\nexport class CovalentMenuModule {\n\n}\n","import { Component, ViewChild, OnInit, Input, Output, EventEmitter, Optional,\n ChangeDetectionStrategy, ChangeDetectorRef, forwardRef } from '@angular/core';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Dir } from '@angular/cdk/bidi';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { debounceTime, skip } from 'rxjs/operators';\n\nimport { IControlValueAccessor, mixinControlValueAccessor } from '@covalent/core/common';\n\nexport class TdSearchInputBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) { }\n}\n\n/* tslint:disable-next-line */\nexport const _TdSearchInputMixinBase = mixinControlValueAccessor(TdSearchInputBase);\n\n@Component({\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdSearchInputComponent),\n multi: true,\n }],\n selector: 'td-search-input',\n templateUrl: './search-input.component.html',\n styleUrls: ['./search-input.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['value'],\n animations: [\n trigger('searchState', [\n state('hide-left', style({\n transform: 'translateX(-150%)',\n display: 'none',\n })),\n state('hide-right', style({\n transform: 'translateX(150%)',\n display: 'none',\n })),\n state('show', style({\n transform: 'translateX(0%)',\n display: 'block',\n })),\n transition('* => show', animate('200ms ease-in')),\n transition('show => *', animate('200ms ease-out')),\n ]),\n ],\n})\nexport class TdSearchInputComponent extends _TdSearchInputMixinBase implements IControlValueAccessor, OnInit {\n\n @ViewChild(MatInput) _input: MatInput;\n\n /**\n * appearance?: MatFormFieldAppearance\n * Appearance style for the underlying input component.\n */\n @Input('appearance') appearance: MatFormFieldAppearance;\n\n /**\n * showUnderline?: boolean\n * Sets if the input underline should be visible. Defaults to 'false'.\n */\n @Input('showUnderline') showUnderline: boolean = false;\n\n /**\n * debounce?: number\n * Debounce timeout between keypresses. Defaults to 400.\n */\n @Input('debounce') debounce: number = 400;\n\n /**\n * placeholder?: string\n * Placeholder for the underlying input component.\n */\n @Input('placeholder') placeholder: string;\n\n /**\n * clearIcon?: string\n * The icon used to clear the search input.\n * Defaults to 'cancel' icon.\n */\n @Input('clearIcon') clearIcon: string = 'cancel';\n\n /**\n * searchDebounce: function($event)\n * Event emitted after the [debounce] timeout.\n */\n @Output('searchDebounce') onSearchDebounce: EventEmitter<string> = new EventEmitter<string>();\n\n /**\n * search: function($event)\n * Event emitted after the key enter has been pressed.\n */\n @Output('search') onSearch: EventEmitter<string> = new EventEmitter<string>();\n\n /**\n * clear: function()\n * Event emitted after the clear icon has been clicked.\n */\n @Output('clear') onClear: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * blur: function()\n * Event emitted after the blur event has been called in underlying input.\n */\n @Output('blur') onBlur: EventEmitter<void> = new EventEmitter<void>();\n\n get isRTL(): boolean {\n if (this._dir) {\n return this._dir.dir === 'rtl';\n }\n return false;\n }\n\n constructor(@Optional() private _dir: Dir,\n _changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n }\n\n ngOnInit(): void {\n this._input.ngControl.valueChanges.pipe(\n debounceTime(this.debounce),\n skip(1), // skip first change when value is set to undefined\n ).subscribe((value: string) => {\n this._searchTermChanged(value);\n });\n }\n\n /**\n * Method to focus to underlying input.\n */\n focus(): void {\n this._input.focus();\n }\n\n handleBlur(): void {\n this.onBlur.emit(undefined);\n }\n\n stopPropagation(event: Event): void {\n event.stopPropagation();\n }\n\n handleSearch(event: Event): void {\n this.stopPropagation(event);\n this.onSearch.emit(this.value);\n }\n\n /**\n * Method to clear the underlying input.\n */\n clearSearch(): void {\n this.value = '';\n this._changeDetectorRef.markForCheck();\n this.onClear.emit(undefined);\n }\n\n private _searchTermChanged(value: string): void {\n this.onSearchDebounce.emit(value);\n }\n\n}\n","import { Component, ViewChild, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { trigger, state, style, transition, animate, AUTO_STYLE } from '@angular/animations';\n\nimport { TdSearchInputComponent } from '../search-input/search-input.component';\nimport { IControlValueAccessor, mixinControlValueAccessor } from '@covalent/core/common';\n\nexport class TdSearchBoxBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) { }\n}\n\n/* tslint:disable-next-line */\nexport const _TdSearchBoxMixinBase = mixinControlValueAccessor(TdSearchBoxBase);\n\n@Component({\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdSearchBoxComponent),\n multi: true,\n }],\n selector: 'td-search-box',\n templateUrl: './search-box.component.html',\n styleUrls: ['./search-box.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['value'],\n animations: [\n trigger('inputState', [\n state('0', style({\n width: '0%',\n margin: '0px',\n })),\n state('1', style({\n width: '100%',\n margin: AUTO_STYLE,\n })),\n transition('0 => 1', animate('200ms ease-in')),\n transition('1 => 0', animate('200ms ease-out')),\n ]),\n ],\n})\nexport class TdSearchBoxComponent extends _TdSearchBoxMixinBase implements IControlValueAccessor {\n\n private _searchVisible: boolean = false;\n @ViewChild(TdSearchInputComponent) _searchInput: TdSearchInputComponent;\n\n get searchVisible(): boolean {\n return this._searchVisible;\n }\n\n /**\n * backIcon?: string\n * The icon used to close the search toggle, only shown when [alwaysVisible] is false.\n * Defaults to 'search' icon.\n */\n @Input('backIcon') backIcon: string = 'search';\n\n /**\n * searchIcon?: string\n * The icon used to open/focus the search toggle.\n * Defaults to 'search' icon.\n */\n @Input('searchIcon') searchIcon: string = 'search';\n\n /**\n * clearIcon?: string\n * The icon used to clear the search input.\n * Defaults to 'cancel' icon.\n */\n @Input('clearIcon') clearIcon: string = 'cancel';\n\n /**\n * showUnderline?: boolean\n * Sets if the input underline should be visible. Defaults to 'false'.\n */\n @Input('showUnderline') showUnderline: boolean = false;\n\n /**\n * debounce?: number\n * Debounce timeout between keypresses. Defaults to 400.\n */\n @Input('debounce') debounce: number = 400;\n\n /**\n * alwaysVisible?: boolean\n * Sets if the input should always be visible. Defaults to 'false'.\n */\n @Input('alwaysVisible') alwaysVisible: boolean = false;\n\n /**\n * placeholder?: string\n * Placeholder for the underlying input component.\n */\n @Input('placeholder') placeholder: string;\n\n /**\n * searchDebounce: function($event)\n * Event emitted after the [debounce] timeout.\n */\n @Output('searchDebounce') onSearchDebounce: EventEmitter<string> = new EventEmitter<string>();\n\n /**\n * search: function($event)\n * Event emitted after the key enter has been pressed.\n */\n @Output('search') onSearch: EventEmitter<string> = new EventEmitter<string>();\n\n /**\n * clear: function()\n * Event emitted after the clear icon has been clicked.\n */\n @Output('clear') onClear: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * blur: function()\n * Event emitted after the blur event has been called in underlying input.\n */\n @Output('blur') onBlur: EventEmitter<void> = new EventEmitter<void>();\n\n constructor(_changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n }\n\n /**\n * Method executed when the search icon is clicked.\n */\n searchClicked(): void {\n if (!this.alwaysVisible && this._searchVisible) {\n this.value = '';\n this.handleClear();\n } else if (this.alwaysVisible || !this._searchVisible) {\n this._searchInput.focus();\n }\n this.toggleVisibility();\n }\n\n toggleVisibility(): void {\n this._searchVisible = !this._searchVisible;\n this._changeDetectorRef.markForCheck();\n }\n\n handleSearchDebounce(value: string): void {\n this.onSearchDebounce.emit(value);\n }\n\n handleSearch(value: string): void {\n this.onSearch.emit(value);\n }\n\n handleClear(): void {\n this.onClear.emit(undefined);\n }\n\n handleBlur(): void {\n this.onBlur.emit(undefined);\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { TdSearchInputComponent } from './search-input/search-input.component';\nimport { TdSearchBoxComponent } from './search-box/search-box.component';\n\n@NgModule({\n imports: [\n FormsModule,\n CommonModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n ],\n declarations: [\n TdSearchInputComponent,\n TdSearchBoxComponent,\n ],\n exports: [\n TdSearchInputComponent,\n TdSearchBoxComponent,\n ],\n})\nexport class CovalentSearchModule {\n\n}\n","import {\n Component,\n ElementRef,\n HostBinding,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\n\n@Component({\n selector: 'td-breadcrumb, a[td-breadcrumb]',\n styleUrls: ['./breadcrumb.component.scss'],\n templateUrl: './breadcrumb.component.html',\n /* tslint:disable-next-line */\n host: {\n class: 'mat-button td-breadcrumb',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdBreadcrumbComponent implements AfterViewInit {\n\n private _displayCrumb: boolean = true;\n private _width: number = 0;\n // Sets the icon url shown between breadcrumbs. Defaults to 'chevron_right'\n separatorIcon: string = 'chevron_right';\n // Should show the right chevron or not before the label\n _displayIcon: boolean = true;\n\n get displayCrumb(): boolean {\n return this._displayCrumb;\n }\n\n /**\n * Whether to display the crumb or not\n */\n set displayCrumb(shouldDisplay: boolean) {\n this._displayCrumb = shouldDisplay;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Width of the DOM element of the crumb\n */\n get width(): number {\n return this._width;\n }\n\n /**\n * Gets the display style of the crumb\n */\n @HostBinding('style.display')\n get displayBinding(): string {\n // Set the display to none on the component, just in case the end user is hiding\n // and showing them instead of the component doing itself for reasons like responsive\n return this._displayCrumb ? undefined : 'none';\n }\n\n constructor(private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef) {\n }\n\n ngAfterViewInit(): void {\n // set the width from the actual rendered DOM element\n setTimeout(() => {\n this._width = (<HTMLElement>this._elementRef.nativeElement).getBoundingClientRect().width;\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Stop click propagation when clicking on icon\n */\n _handleIconClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n}\n","import {\n Component,\n ContentChildren,\n QueryList,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n AfterContentInit,\n DoCheck,\n ChangeDetectorRef,\n ElementRef,\n Input,\n} from '@angular/core';\n\nimport {\n Subscription,\n Subject,\n fromEvent,\n merge,\n} from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n} from 'rxjs/operators';\n\nimport { TdBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\n\n@Component({\n selector: 'td-breadcrumbs',\n styleUrls: ['./breadcrumbs.component.scss'],\n templateUrl: './breadcrumbs.component.html',\n /* tslint:disable-next-line */\n host: {\n class: 'td-breadcrumbs',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdBreadcrumbsComponent implements OnInit, DoCheck, AfterContentInit, OnDestroy {\n\n private _resizeSubscription: Subscription = Subscription.EMPTY;\n private _widthSubject: Subject<number> = new Subject<number>();\n private _resizing: boolean = false;\n\n // all the sub components, which are the individual breadcrumbs\n @ContentChildren(TdBreadcrumbComponent) _breadcrumbs: QueryList<TdBreadcrumbComponent>;\n // the list of hidden breadcrumbs not shown right now (responsive)\n hiddenBreadcrumbs: TdBreadcrumbComponent[] = [];\n\n /**\n * Sets the icon url shown between breadcrumbs. Defaults to 'chevron_right'.\n */\n @Input('separatorIcon') separatorIcon: string = 'chevron_right';\n\n constructor(private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef) {\n }\n\n ngOnInit(): void {\n this._resizeSubscription = merge(\n fromEvent(window, 'resize').pipe(\n debounceTime(10),\n ),\n this._widthSubject.asObservable().pipe(\n distinctUntilChanged(),\n ),\n ).subscribe(() => {\n if (!this._resizing) {\n this._resizing = true;\n setTimeout(() => {\n this._calculateVisibility();\n this._resizing = false;\n this._changeDetectorRef.markForCheck();\n }, 100);\n }\n });\n }\n\n ngDoCheck(): void {\n if (this._elementRef && this._elementRef.nativeElement) {\n this._widthSubject.next(this.nativeElementWidth);\n }\n }\n\n ngAfterContentInit(): void {\n this.setCrumbIcons();\n this._changeDetectorRef.markForCheck();\n }\n\n ngOnDestroy(): void {\n this._resizeSubscription.unsubscribe();\n }\n\n /*\n * Current width of the element container\n */\n get nativeElementWidth(): number {\n let element: HTMLElement = (<HTMLElement>this._elementRef.nativeElement);\n // Need to take into account border, margin and padding that might be around all the crumbs\n let style: CSSStyleDeclaration = window.getComputedStyle(element);\n let borderLeft: number = parseInt(style.borderLeft, 10);\n let borderRight: number = parseInt(style.borderRight, 10);\n let marginLeft: number = parseInt(style.marginLeft, 10);\n let marginRight: number = parseInt(style.marginRight, 10);\n let paddingLeft: number = parseInt(style.paddingLeft, 10);\n let paddingRight: number = parseInt(style.paddingRight, 10);\n\n return element.getBoundingClientRect().width - borderLeft - borderRight - marginLeft - marginRight - paddingLeft - paddingRight;\n }\n\n /**\n * The total count of individual breadcrumbs\n */\n get count(): number {\n return this._breadcrumbs ? this._breadcrumbs.length : 0;\n }\n\n /**\n * Set the crumb icon separators\n */\n private setCrumbIcons(): void {\n let breadcrumbArray: TdBreadcrumbComponent[] = this._breadcrumbs.toArray();\n if (breadcrumbArray.length > 0) {\n // don't show the icon on the last breadcrumb\n breadcrumbArray[breadcrumbArray.length - 1]._displayIcon = false;\n }\n breadcrumbArray.forEach((breadcrumb: TdBreadcrumbComponent) => {\n breadcrumb.separatorIcon = this.separatorIcon;\n });\n }\n\n private _calculateVisibility(): void {\n let crumbsArray: TdBreadcrumbComponent[] = this._breadcrumbs.toArray();\n let crumbWidthSum: number = 0;\n let hiddenCrumbs: TdBreadcrumbComponent[] = [];\n // loop through crumbs in reverse order to calculate which ones should be removed\n for (let i: number = crumbsArray.length - 1; i >= 0; i--) {\n let breadcrumb: TdBreadcrumbComponent = crumbsArray[i];\n // if crumb exceeds width, then we skip it from the sum and add it into the hiddencrumbs array\n // and hide it\n if ((crumbWidthSum + breadcrumb.width) > this.nativeElementWidth) {\n breadcrumb.displayCrumb = false;\n hiddenCrumbs.push(breadcrumb);\n } else {\n // else we show it\n breadcrumb.displayCrumb = true;\n }\n crumbWidthSum += breadcrumb.width;\n }\n this.hiddenBreadcrumbs = hiddenCrumbs;\n this._changeDetectorRef.markForCheck();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { TdBreadcrumbsComponent } from './breadcrumbs.component';\nimport { TdBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n ],\n declarations: [\n TdBreadcrumbsComponent,\n TdBreadcrumbComponent,\n ],\n exports: [\n TdBreadcrumbsComponent,\n TdBreadcrumbComponent,\n ],\n})\nexport class CovalentBreadcrumbsModule {\n\n}\n","import { Component, Directive, Input, Output, TemplateRef, ViewChild,\n ViewContainerRef, ContentChild, OnInit } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\nimport { TemplatePortalDirective, TemplatePortal } from '@angular/cdk/portal';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { ICanDisable, mixinDisabled, ICanDisableRipple, mixinDisableRipple } from '@covalent/core/common';\n\nexport enum StepState {\n None = 'none',\n Required = 'required',\n Complete = 'complete',\n}\n\n@Directive({\n selector: '[td-step-label]ng-template',\n})\nexport class TdStepLabelDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Directive({\n selector: '[td-step-actions]ng-template',\n})\nexport class TdStepActionsDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Directive({\n selector: '[td-step-summary]ng-template',\n})\nexport class TdStepSummaryDirective extends TemplatePortalDirective {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\nexport class TdStepBase {}\n\n/* tslint:disable-next-line */\nexport const _TdStepMixinBase = mixinDisableRipple(mixinDisabled(TdStepBase));\n\n@Component({\n selector: 'td-step',\n inputs: ['disabled', 'disableRipple'],\n templateUrl: './step.component.html',\n})\nexport class TdStepComponent extends _TdStepMixinBase implements OnInit, ICanDisable, ICanDisableRipple {\n\n private _active: boolean = false;\n private _state: StepState = StepState.None;\n\n private _contentPortal: TemplatePortal<any>;\n get stepContent(): TemplatePortal<any> {\n return this._contentPortal;\n }\n\n @ViewChild(TemplateRef) _content: TemplateRef<any>;\n @ContentChild(TdStepLabelDirective) stepLabel: TdStepLabelDirective;\n @ContentChild(TdStepActionsDirective) stepActions: TdStepActionsDirective;\n @ContentChild(TdStepSummaryDirective) stepSummary: TdStepSummaryDirective;\n\n /**\n * label?: string\n * Sets label of [TdStepComponent] header.\n * Defaults to 'Step #'\n */\n @Input('label') label: string;\n\n /**\n * sublabel?: string\n * Sets sublabel of [TdStepComponent] header.\n */\n @Input('sublabel') sublabel: string;\n\n /**\n * active?: boolean\n * Toggles [TdStepComponent] between active/deactive.\n */\n @Input('active')\n set active(active: boolean) {\n this._setActive(coerceBooleanProperty(active));\n }\n get active(): boolean {\n return this._active;\n }\n\n /**\n * state?: StepState or ['none' | 'required' | 'complete']\n * Sets state of [TdStepComponent] depending on value.\n * Defaults to [StepState.None | 'none'].\n */\n @Input('state')\n set state(state: StepState) {\n switch (state) {\n case StepState.Complete:\n this._state = StepState.Complete;\n break;\n case StepState.Required:\n this._state = StepState.Required;\n break;\n default:\n this._state = StepState.None;\n break;\n }\n }\n get state(): StepState {\n return this._state;\n }\n\n /**\n * activated?: function\n * Event emitted when [TdStepComponent] is activated.\n */\n @Output('activated') onActivated: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * deactivated?: function\n * Event emitted when [TdStepComponent] is deactivated.\n */\n @Output('deactivated') onDeactivated: EventEmitter<void> = new EventEmitter<void>();\n\n constructor(private _viewContainerRef: ViewContainerRef) {\n super();\n }\n\n ngOnInit(): void {\n this._contentPortal = new TemplatePortal(this._content, this._viewContainerRef);\n }\n\n /**\n * Toggle active state of [TdStepComponent]\n * retuns 'true' if successful, else 'false'.\n */\n toggle(): boolean {\n return this._setActive(!this._active);\n }\n\n /**\n * Opens [TdStepComponent]\n * retuns 'true' if successful, else 'false'.\n */\n open(): boolean {\n return this._setActive(true);\n }\n\n /**\n * Closes [TdStepComponent]\n * retuns 'true' if successful, else 'false'.\n */\n close(): boolean {\n return this._setActive(false);\n }\n\n /**\n * Returns 'true' if [state] equals to [StepState.Complete | 'complete'], else 'false'.\n */\n isComplete(): boolean {\n return this._state === StepState.Complete;\n }\n\n /** Method executed when the disabled value changes */\n onDisabledChange(v: boolean): void {\n if (v && this._active) {\n this._active = false;\n this._onDeactivated();\n }\n }\n\n /**\n * Method to change active state internally and emit the [onActivated] event if 'true' or [onDeactivated]\n * event if 'false'. (Blocked if [disabled] is 'true')\n * returns true if successfully changed state\n */\n private _setActive(newActive: boolean): boolean {\n if (this.disabled) {\n return false;\n }\n if (this._active !== newActive) {\n this._active = newActive;\n if (newActive) {\n this._onActivated();\n } else {\n this._onDeactivated();\n }\n return true;\n }\n return false;\n }\n\n private _onActivated(): void {\n this.onActivated.emit(undefined);\n }\n\n private _onDeactivated(): void {\n this.onDeactivated.emit(undefined);\n }\n}\n","import { Component, Input, Output } from '@angular/core';\nimport { OnDestroy, AfterContentInit } from '@angular/core';\nimport { EventEmitter, ContentChildren, QueryList } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { TdStepComponent } from './step.component';\n\nexport interface IStepChangeEvent {\n newStep: TdStepComponent;\n prevStep: TdStepComponent;\n}\n\nexport enum StepMode {\n Vertical = 'vertical',\n Horizontal = 'horizontal',\n}\n\n@Component({\n selector: 'td-steps',\n styleUrls: ['./steps.component.scss' ],\n templateUrl: './steps.component.html',\n /* tslint:disable-next-line */\n host: {\n class: 'td-steps',\n },\n})\nexport class TdStepsComponent implements OnDestroy, AfterContentInit {\n\n private _subcriptions: Subscription[];\n private _mode: StepMode = StepMode.Vertical;\n private _steps: QueryList<TdStepComponent>;\n\n @ContentChildren(TdStepComponent)\n set stepsContent(steps: QueryList<TdStepComponent>) {\n if (steps) {\n this._steps = steps;\n this._registerSteps();\n }\n }\n\n get steps(): TdStepComponent[] {\n return this._steps.toArray();\n }\n prevStep: TdStepComponent;\n\n /**\n * mode?: StepMode or [\"vertical\" | \"horizontal\"]\n * Defines if the mode of the [TdStepsComponent]. Defaults to [StepMode.Vertical | \"vertical\"]\n */\n @Input('mode')\n set mode(mode: StepMode) {\n switch (mode) {\n case StepMode.Horizontal:\n this._mode = StepMode.Horizontal;\n break;\n default:\n this._mode = StepMode.Vertical;\n }\n }\n get mode(): StepMode {\n return this._mode;\n }\n\n /**\n * stepChange?: function\n * Method to be executed when [onStepChange] event is emitted.\n * Emits an [IStepChangeEvent] implemented object.\n */\n @Output('stepChange') onStepChange: EventEmitter<IStepChangeEvent> = new EventEmitter<IStepChangeEvent>();\n\n /**\n * Executed after content is initialized, loops through any [TdStepComponent] children elements,\n * assigns them a number and subscribes as an observer to their [onActivated] event.\n */\n ngAfterContentInit(): void {\n this._registerSteps();\n }\n\n /**\n * Unsubscribes from [TdStepComponent] children elements when component is destroyed.\n */\n ngOnDestroy(): void {\n this._deregisterSteps();\n }\n\n /**\n * Returns 'true' if [mode] equals to [StepMode.Horizontal | 'horizontal'], else 'false'.\n */\n isHorizontal(): boolean {\n return this._mode === StepMode.Horizontal;\n }\n\n /**\n * Returns 'true' if [mode] equals to [StepMode.Vertical | 'vertical'], else 'false'.\n */\n isVertical(): boolean {\n return this._mode === StepMode.Vertical;\n }\n\n areStepsActive(): boolean {\n return this._steps.filter((step: TdStepComponent) => {\n return step.active;\n }).length > 0;\n }\n\n /**\n * Wraps previous and new [TdStepComponent] numbers in an object that implements [IStepChangeEvent]\n * and emits [onStepChange] event.\n */\n private _onStepSelection(step: TdStepComponent): void {\n if (this.prevStep !== step) {\n let prevStep: TdStepComponent = this.prevStep;\n this.prevStep = step;\n let event: IStepChangeEvent = {\n newStep: step,\n prevStep: prevStep,\n };\n this._deactivateAllBut(step);\n this.onStepChange.emit(event);\n }\n }\n\n /**\n * Loops through [TdStepComponent] children elements and deactivates them ignoring the one passed as an argument.\n */\n private _deactivateAllBut(activeStep: TdStepComponent): void {\n this._steps.filter((step: TdStepComponent) => step !== activeStep)\n .forEach((step: TdStepComponent) => {\n step.active = false;\n });\n }\n\n private _registerSteps(): void {\n this._subcriptions = [];\n this._steps.toArray().forEach((step: TdStepComponent) => {\n let subscription: Subscription = step.onActivated.asObservable().subscribe(() => {\n this._onStepSelection(step);\n });\n this._subcriptions.push(subscription);\n });\n }\n\n private _deregisterSteps(): void {\n if (this._subcriptions) {\n this._subcriptions.forEach((subs: Subscription) => {\n subs.unsubscribe();\n });\n this._subcriptions = undefined;\n }\n }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { ICanDisable, mixinDisabled, ICanDisableRipple, mixinDisableRipple } from '@covalent/core/common';\n\nimport { StepState } from '../step.component';\n\nexport class TdStepHeaderBase {}\n\n/* tslint:disable-next-line */\nexport const _TdStepHeaderMixinBase = mixinDisableRipple(mixinDisabled(TdStepHeaderBase));\n\n@Component({\n selector: 'td-step-header',\n inputs: ['disabled', 'disableRipple'],\n styleUrls: ['./step-header.component.scss' ],\n templateUrl: './step-header.component.html',\n})\nexport class TdStepHeaderComponent extends _TdStepHeaderMixinBase implements ICanDisable, ICanDisableRipple {\n\n /**\n * Number assigned to [TdStepHeaderComponent].\n */\n @Input('number') number: number;\n\n /**\n * active?: boolean\n * Sets for active/inactive states on header.\n */\n @Input('active') active: boolean;\n\n /**\n * state?: StepState or ['none' | 'required' | 'complete']\n * Sets styles for state of header.\n * Defaults to [StepState.None | 'none'].\n */\n @Input('state') state: StepState = StepState.None;\n\n /**\n * tabIndex?: number\n * tabIndex of the step header for a11y\n */\n @Input('tabIndex') tabIndex: number;\n\n /**\n * Returns 'true' if [state] equals to [StepState.Complete | 'complete'], else 'false'.\n */\n isComplete(): boolean {\n return this.state === StepState.Complete;\n }\n\n /**\n * Returns 'true' if [state] equals to [StepState.Required | 'required'], else 'false'.\n */\n isRequired(): boolean {\n return this.state === StepState.Required;\n }\n}\n","import { Component, Input, ViewChild, ElementRef } from '@angular/core';\n\nimport { StepState } from '../step.component';\n\nimport { tdCollapseAnimation } from '@covalent/core/common';\n\n@Component({\n selector: 'td-step-body',\n styleUrls: ['./step-body.component.scss' ],\n templateUrl: './step-body.component.html',\n animations: [\n tdCollapseAnimation,\n ],\n})\nexport class TdStepBodyComponent {\n\n @ViewChild('contentRef', { read: ElementRef }) contentRef: ElementRef;\n\n get hasContent(): boolean {\n return this.contentRef &&\n (this.contentRef.nativeElement.children.length > 0 || !!this.contentRef.nativeElement.textContent.trim());\n }\n\n @ViewChild('actionsRef', { read: ElementRef }) actionsRef: ElementRef;\n\n get hasActions(): boolean {\n return this.actionsRef &&\n (this.actionsRef.nativeElement.children.length > 0 || !!this.actionsRef.nativeElement.textContent.trim());\n }\n\n @ViewChild('summaryRef', { read: ElementRef }) summaryRef: ElementRef;\n\n get hasSummary(): boolean {\n return this.summaryRef &&\n (this.summaryRef.nativeElement.children.length > 0 || !!this.summaryRef.nativeElement.textContent.trim());\n }\n\n /**\n * active?: boolean\n * Sets for active/inactive states on body.\n */\n @Input('active') active: boolean;\n\n /**\n * state?: StepState or ['none' | 'required' | 'complete']\n * Sets styles for state of body.\n * Defaults to [StepState.None | 'none'].\n */\n @Input('state') state: StepState = StepState.None;\n\n /**\n * Returns 'true' if [state] equals to [StepState.Complete | 'complete'], else 'false'.\n */\n isComplete(): boolean {\n return this.state === StepState.Complete;\n }\n}\n","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, Input, ElementRef } from '@angular/core';\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { ICanDisable, ICanDisableRipple } from '@covalent/core/common';\nimport { _TdStepMixinBase, StepState } from '../../step.component';\n\n@Component({\n selector: '[td-step-link],[tdStepLink]',\n styleUrls: ['./nav-step-link.component.scss'],\n templateUrl: './nav-step-link.component.html',\n inputs: ['disabled', 'disableRipple'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n /* tslint:disable-next-line */\n host: {\n '[class.td-step-link]': 'true',\n '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || null',\n '[class.mat-disabled]': 'disabled || null',\n '(click)': '_handleClick($event)',\n },\n})\nexport class TdNavStepLinkComponent extends _TdStepMixinBase implements ICanDisable, ICanDisableRipple {\n\n private _active: boolean = false;\n private _state: StepState = StepState.None;\n\n // Number to display in step header\n number: number;\n\n /**\n * state?: StepState or ['none' | 'required' | 'complete']\n * Sets state of component depending on value.\n * Defaults to [StepState.None | 'none'].\n */\n @Input('state')\n set state(state: StepState) {\n switch (state) {\n case StepState.Complete:\n this._state = StepState.Complete;\n break;\n case StepState.Required:\n this._state = StepState.Required;\n break;\n default:\n this._state = StepState.None;\n break;\n }\n }\n get state(): StepState {\n return this._state;\n }\n\n /**\n * label?: string\n * Label to display in step header\n * Defaults to empty\n */\n @Input('label') label: string;\n\n /**\n * sublabel?: string\n * Sublabel to display in step header\n * Defaults to empty\n */\n @Input('sublabel') sublabel: string;\n\n /**\n * active?: boolean\n * Toggles component between active/deactive.\n */\n @Input('active')\n set active(active: boolean) {\n this._active = coerceBooleanProperty(active);\n this._changeDetectorRef.markForCheck();\n }\n get active(): boolean {\n return this._active;\n }\n\n /**\n * tabIndex?: number\n * tabIndex for component\n */\n @Input('tabIndex') tabIndex: number;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,\n public elementRef: ElementRef) {\n super();\n }\n\n _handleClick(click: Event): void {\n if (this.disabled) {\n click.preventDefault();\n click.stopImmediatePropagation();\n }\n }\n\n}\n","import { Component, Optional, ContentChildren, ViewChild, QueryList, OnDestroy, ChangeDetectionStrategy, \n AfterContentInit, AfterContentChecked, ChangeDetectorRef, ElementRef, Renderer2 } from '@angular/core';\n\nimport { Subject, merge, of } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { RIGHT_ARROW, LEFT_ARROW } from '@angular/cdk/keycodes';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\n\nimport { TdNavStepLinkComponent } from '../nav-step-link/nav-step-link.component';\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n@Component({\n selector: 'nav[td-steps][horizontal]',\n styleUrls: ['./nav-steps-horizontal.component.scss'],\n templateUrl: './nav-steps-horizontal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n /* tslint:disable-next-line */\n host: {\n class: 'td-steps td-steps-horizontal',\n '[class.td-step-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.td-step-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n },\n})\nexport class TdNavStepsHorizontalComponent implements AfterContentChecked, AfterContentInit, OnDestroy {\n\n private _separators: HTMLElement[] = [];\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed: Subject<void> = new Subject<void>();\n\n private _widthSubject: Subject<number> = new Subject<number>();\n\n private _scrollDistance: number = 0;\n private _scrollDistanceChanged: boolean = false;\n\n /** Whether the controls for pagination should be displayed */\n _showPaginationControls: boolean = false;\n\n /** Whether the step list can be scrolled more towards the end. */\n _disableScrollAfter: boolean = true;\n\n /** Whether the step list can be scrolled more towards the beginning. */\n _disableScrollBefore: boolean = true;\n\n // all the sub components, which are the individual steps\n @ContentChildren(TdNavStepLinkComponent) _steps: QueryList<TdNavStepLinkComponent>;\n\n @ViewChild('stepListContainer') _stepListContainer: ElementRef;\n @ViewChild('stepList') _stepList: ElementRef;\n\n /*\n * Current width of the element container\n */\n get nativeElementWidth(): number {\n let element: HTMLElement = (<HTMLElement>this._elementRef.nativeElement);\n\n // Need to take into account border, margin and padding that might be around all the crumbs\n let style: CSSStyleDeclaration = window.getComputedStyle(element);\n let borderLeft: number = parseInt(style.borderLeft, 10);\n let borderRight: number = parseInt(style.borderRight, 10);\n let marginLeft: number = parseInt(style.marginLeft, 10);\n let marginRight: number = parseInt(style.marginRight, 10);\n let paddingLeft: number = parseInt(style.paddingLeft, 10);\n let paddingRight: number = parseInt(style.paddingRight, 10);\n\n return element.getBoundingClientRect().width - borderLeft - borderRight - marginLeft - marginRight - paddingLeft - paddingRight;\n }\n\n constructor(private _elementRef: ElementRef,\n private _viewportRuler: ViewportRuler,\n @Optional() private _dir: Directionality,\n private _renderer: Renderer2,\n private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngAfterContentInit(): void {\n merge(\n this._widthSubject.asObservable().pipe(\n distinctUntilChanged(),\n ),\n this._viewportRuler.change(150),\n this._dir ? this._dir.change : of(undefined),\n this._steps.changes,\n ).pipe(\n takeUntil(this._destroyed),\n ).subscribe(() => {\n this._configureSteps();\n this.updatePagination();\n this._changeDetectorRef.markForCheck();\n });\n this._configureSteps();\n this._changeDetectorRef.markForCheck();\n }\n\n ngAfterContentChecked(): void {\n if (this._elementRef && this._elementRef.nativeElement) {\n this._widthSubject.next(this.nativeElementWidth);\n }\n if (this._scrollDistanceChanged) {\n this._updateStepScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngOnDestroy(): void {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /**\n * Listen to right and left key events to move the the viewport.\n */\n _handleKeydown(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case LEFT_ARROW:\n this._scrollHeader('before');\n event.preventDefault();\n break;\n case RIGHT_ARROW:\n this._scrollHeader('after');\n event.preventDefault();\n break;\n default:\n // do something\n }\n }\n\n /**\n * Updates the view whether pagination should be enabled or not.\n */\n updatePagination(): void {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateStepScrollPosition();\n }\n\n /** The layout direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Performs the CSS transformation on the step list that will cause the list to scroll. */\n _updateStepScrollPosition(): void {\n const translateX: number = this._getLayoutDirection() === 'ltr' ? -this.scrollDistance : this.scrollDistance;\n // Move step list the amount of pixels scrolled\n this._stepList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off.\n if (this._getLayoutDirection() === 'ltr') {\n this._stepListContainer.nativeElement.scrollLeft = 0;\n } else {\n this._stepListContainer.nativeElement.scrollLeft = this._getMaxScrollDistance();\n }\n }\n\n /** Sets the distance in pixels that the step header should be transformed in the X-axis. */\n get scrollDistance(): number { return this._scrollDistance; }\n set scrollDistance(v: number) {\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), v));\n\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n }\n\n /**\n * Moves the step list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively).\n */\n _scrollHeader(scrollDir: ScrollDirection): void {\n // Move the scroll distance one-half the length of the step list's viewport.\n this.scrollDistance += (scrollDir === 'before' ? -1 : 1) * this._stepListContainer.nativeElement.offsetWidth / 2;\n }\n\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * step list is wider than the size of the header container, then the pagination controls should\n * be shown.\n */\n _checkPaginationEnabled(): void {\n const isEnabled: boolean =\n this._stepList.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n\n this._showPaginationControls = isEnabled;\n }\n\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n */\n _checkScrollingControls(): void {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance === 0;\n this._disableScrollAfter = this.scrollDistance === this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the step list container and step header container.\n */\n _getMaxScrollDistance(): number {\n return (this._stepList.nativeElement.scrollWidth - this._stepListContainer.nativeElement.offsetWidth) || 0;\n }\n\n /**\n * Set the step line separators and display numbers\n */\n private _configureSteps(): void {\n this._separators.forEach((separator: HTMLElement) => {\n this._renderer.removeChild(this._stepList.nativeElement, separator);\n });\n let stepsArray: TdNavStepLinkComponent[] = this._steps.toArray();\n // set the index number of the step so can display that number in circle\n stepsArray.forEach((step: TdNavStepLinkComponent, index: number) => {\n if (index > 0 && index < stepsArray.length) {\n let separator: any = this._renderer.createElement('div');\n this._renderer.addClass(separator, 'td-horizontal-line');\n this._separators.push(separator);\n this._renderer.insertBefore(this._stepList.nativeElement, separator, step.elementRef.nativeElement);\n }\n step.number = index + 1;\n });\n \n }\n\n}\n","import { Component, ContentChildren, ViewChild, QueryList, OnDestroy, ChangeDetectionStrategy, \n AfterContentInit, Renderer2, ChangeDetectorRef, ElementRef } from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { TdNavStepLinkComponent } from '../nav-step-link/nav-step-link.component';\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n@Component({\n selector: 'nav[td-steps][vertical]',\n styleUrls: ['./nav-steps-vertical.component.scss'],\n templateUrl: './nav-steps-vertical.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n /* tslint:disable-next-line */\n host: {\n class: 'td-steps td-steps-vertical',\n },\n})\nexport class TdNavStepsVerticalComponent implements AfterContentInit, OnDestroy {\n\n private _separators: HTMLElement[] = [];\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed: Subject<void> = new Subject<void>();\n\n // all the sub components, which are the individual steps\n @ContentChildren(TdNavStepLinkComponent) _steps: QueryList<TdNavStepLinkComponent>;\n\n @ViewChild('stepList') _stepList: ElementRef;\n\n constructor(private _renderer: Renderer2,\n private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngAfterContentInit(): void {\n this._steps.changes.pipe(\n takeUntil(this._destroyed),\n ).subscribe(() => {\n this._configureSteps();\n this._changeDetectorRef.markForCheck();\n });\n this._configureSteps();\n this._changeDetectorRef.markForCheck();\n }\n\n ngOnDestroy(): void {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /**\n * Set the step line separators and display numbers\n */\n private _configureSteps(): void {\n this._separators.forEach((separator: HTMLElement) => {\n this._renderer.removeChild(this._stepList.nativeElement, separator);\n });\n let stepsArray: TdNavStepLinkComponent[] = this._steps.toArray();\n // set the index number of the step so can display that number in circle\n stepsArray.forEach((step: TdNavStepLinkComponent, index: number) => {\n if (index > 0 && index < stepsArray.length) {\n let separator: any = this._renderer.createElement('div');\n this._renderer.addClass(separator, 'td-vertical-line-wrapper');\n let separatorChild: any = this._renderer.createElement('div');\n this._renderer.addClass(separatorChild, 'td-vertical-line');\n this._renderer.appendChild(separator, separatorChild);\n this._separators.push(separator);\n this._renderer.insertBefore(this._stepList.nativeElement, separator, step.elementRef.nativeElement);\n }\n step.number = index + 1;\n });\n \n }\n\n}\n","import { Type } from '@angular/core';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ScrollDispatchModule } from '@angular/cdk/scrolling';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatRippleModule } from '@angular/material/core';\n\nimport { CovalentCommonModule } from '@covalent/core/common';\n\n// Steps\nimport { TdStepsComponent } from './steps.component';\nimport { TdStepHeaderComponent } from './step-header/step-header.component';\nimport { TdStepBodyComponent } from './step-body/step-body.component';\nimport { TdStepComponent, TdStepLabelDirective, TdStepActionsDirective,\n TdStepSummaryDirective } from './step.component';\n\n// Nav Steps\nimport { TdNavStepsHorizontalComponent } from './nav/nav-steps-horizontal/nav-steps-horizontal.component';\nimport { TdNavStepsVerticalComponent } from './nav/nav-steps-vertical/nav-steps-vertical.component';\nimport { TdNavStepLinkComponent } from './nav/nav-step-link/nav-step-link.component';\n\nconst TD_STEPS: Type<any>[] = [\n TdStepsComponent,\n TdStepComponent,\n TdStepHeaderComponent,\n TdStepBodyComponent,\n TdStepLabelDirective,\n TdStepActionsDirective,\n TdStepSummaryDirective,\n TdNavStepsHorizontalComponent,\n TdNavStepsVerticalComponent,\n TdNavStepLinkComponent,\n\n];\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatRippleModule,\n PortalModule,\n ScrollDispatchModule,\n CovalentCommonModule,\n ],\n declarations: [\n TD_STEPS,\n ],\n exports: [\n TD_STEPS,\n ],\n})\nexport class CovalentStepsModule {\n\n}\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ViewChild,\n TemplateRef,\n OnInit,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { mixinDisabled, ICanDisable } from '@covalent/core/common';\n\nexport class TdTabOptionBase {\n constructor(public _viewContainerRef: ViewContainerRef,\n public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdTabOptionMixinBase = mixinDisabled(TdTabOptionBase);\n\n@Component({\n selector: 'td-tab-option',\n templateUrl: './tab-option.component.html',\n styleUrls: ['./tab-option.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n /* tslint:disable-next-line */\n inputs: ['disabled'],\n})\nexport class TdTabOptionComponent extends _TdTabOptionMixinBase implements ICanDisable, OnInit {\n\n private _contentPortal: TemplatePortal<any>;\n get content(): TemplatePortal<any> {\n return this._contentPortal;\n }\n\n @ViewChild(TemplateRef) _content: TemplateRef<any>;\n\n /**\n * Value to which the option will be binded to.\n */\n @Input('value') value: any;\n\n constructor(_viewContainerRef: ViewContainerRef,\n _changeDetectorRef: ChangeDetectorRef) {\n super(_viewContainerRef, _changeDetectorRef);\n }\n\n ngOnInit(): void {\n this._contentPortal = new TemplatePortal(this._content, this._viewContainerRef);\n }\n\n}\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ContentChildren,\n QueryList,\n OnInit,\n AfterContentInit,\n forwardRef,\n Output,\n EventEmitter,\n OnDestroy,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nimport { ThemePalette } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { ICanDisable,\n mixinDisabled,\n IControlValueAccessor,\n mixinControlValueAccessor,\n ICanDisableRipple,\n mixinDisableRipple,\n} from '@covalent/core/common';\n\nimport { Subscription } from 'rxjs';\n\nimport { TdTabOptionComponent } from './tab-option.component';\n\nexport class TdTabSelectBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdTabSelectMixinBase = mixinControlValueAccessor(mixinDisabled(mixinDisableRipple(TdTabSelectBase)));\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdTabSelectComponent),\n multi: true,\n }],\n selector: 'td-tab-select',\n templateUrl: './tab-select.component.html',\n styleUrls: ['./tab-select.component.scss'],\n /* tslint:disable-next-line */\n inputs: ['value', 'disabled', 'disableRipple'],\n})\nexport class TdTabSelectComponent extends _TdTabSelectMixinBase\n implements IControlValueAccessor, ICanDisable, ICanDisableRipple, OnInit, AfterContentInit, OnDestroy {\n\n private _subs: Subscription[] = [];\n\n private _values: any[] = [];\n private _selectedIndex: number = 0;\n private _stretchTabs: boolean = false;\n\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n /**\n * Gets all tab option children\n */\n @ContentChildren(TdTabOptionComponent) readonly _tabOptions: QueryList<TdTabOptionComponent>;\n\n get tabOptions(): TdTabOptionComponent[] {\n return this._tabOptions ? this._tabOptions.toArray() : undefined;\n }\n\n /**\n * Makes the tabs stretch to fit the parent container.\n */\n @Input('stretchTabs')\n set stretchTabs(stretchTabs: boolean) {\n this._stretchTabs = coerceBooleanProperty(stretchTabs);\n }\n get stretchTabs(): boolean {\n return this._stretchTabs;\n }\n\n /**\n * Color of the tab group.\n */\n @Input('color') color: ThemePalette;\n\n /**\n * Background color of the tab group.\n */\n @Input('backgroundColor') backgroundColor: ThemePalette;\n\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n constructor(_changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n }\n\n ngOnInit(): void {\n // subscribe to check if value changes and update the selectedIndex internally.\n this._subs.push(\n this.valueChanges.subscribe((value: any) => {\n this._setValue(value);\n }),\n );\n }\n\n ngAfterContentInit(): void {\n // subscribe to listen to any tab changes.\n this._refreshValues();\n this._subs.push(\n this._tabOptions.changes.subscribe(() => {\n this._refreshValues();\n }),\n );\n // initialize value\n Promise.resolve().then(() => {\n this._setValue(this.value);\n });\n }\n\n ngOnDestroy(): void {\n if (this._subs && this._subs.length) {\n this._subs.forEach((sub: Subscription) => {\n sub.unsubscribe();\n });\n }\n }\n\n /**\n * Method executed when user selects a different tab\n * This updates the new selectedIndex and infers what value should be mapped to.\n */\n selectedIndexChange(selectedIndex: number): void {\n this._selectedIndex = selectedIndex;\n let value: any = this._values[selectedIndex];\n this.value = value;\n this.valueChange.emit(value);\n this.onChange(value);\n }\n\n /**\n * Refresh the values array whenever the number of tabs gets updated\n */\n private _refreshValues(): void {\n this._values = this.tabOptions.map((tabOption: TdTabOptionComponent) => {\n return tabOption.value;\n });\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Try to set value depending if its part of our options\n * else set the value of the first tab.\n */\n private _setValue(value: any): void {\n let index: number = this._values.indexOf(value);\n if (index > -1) {\n this._selectedIndex = index;\n } else {\n this.value = this._values.length ? this._values[0] : undefined;\n this._selectedIndex = 0;\n }\n this._changeDetectorRef.markForCheck();\n }\n\n}\n","import { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { PortalModule } from '@angular/cdk/portal';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { TdTabSelectComponent } from './tab-select.component';\nimport { TdTabOptionComponent } from './tab-option.component';\n\n@NgModule({\n declarations: [\n TdTabSelectComponent,\n TdTabOptionComponent,\n ], // directives, components, and pipes owned by this NgModule\n imports: [\n /** Angular Modules */\n CommonModule,\n FormsModule,\n /** Material Modules */\n PortalModule,\n MatTabsModule,\n ], // modules needed to run this module\n exports: [\n TdTabSelectComponent,\n TdTabOptionComponent,\n ],\n})\nexport class CovalentTabSelectModule {}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\n\ntype Constructor<T> = new (...args: any[]) => T;\n\n/** Interface to implement when applying the disabled mixin */\nexport interface ICanDisable {\n disabled: boolean;\n onDisabledChange(v: boolean): void;\n}\n\n/** Mixin to augment a component or directive with a `disabled` property. */\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): Constructor<ICanDisable> & T {\n return class extends base {\n private _disabled: boolean = false;\n\n constructor(...args: any[]) {\n super(...args);\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n let newValue: boolean = coerceBooleanProperty(value);\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this.onDisabledChange(this._disabled);\n }\n }\n\n onDisabledChange(v: boolean): void {\n /** NOT IMPLEMENTED, this needs to be overriden by subclasses if needed */\n }\n };\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\n\ntype Constructor<T> = new (...args: any[]) => T;\n\n/** Interface to implement when applying the disabled mixin */\nexport interface ICanDisableRipple {\n disableRipple: boolean;\n onDisableRippleChange(v: boolean): void;\n}\n\n/** Mixin to augment a component or directive with a `disabled` property. */\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): Constructor<ICanDisableRipple> & T {\n return class extends base {\n private _disableRipple: boolean = false;\n\n constructor(...args: any[]) {\n super(...args);\n }\n\n get disableRipple(): boolean {\n return this._disableRipple;\n }\n set disableRipple(value: boolean) {\n let newValue: boolean = coerceBooleanProperty(value);\n if (this._disableRipple !== newValue) {\n this._disableRipple = newValue;\n this.onDisableRippleChange(this._disableRipple);\n }\n }\n\n onDisableRippleChange(v: boolean): void {\n /** NOT IMPLEMENTED, this needs to be overriden by subclasses if needed */\n }\n };\n}\n"]}