@coreui/angular-pro 5.2.23 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/fesm2022/coreui-angular-pro.mjs +1067 -1166
- package/fesm2022/coreui-angular-pro.mjs.map +1 -1
- package/lib/grid/col.directive.d.ts +26 -26
- package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +2 -2
- package/lib/tabs-2/tab/tab.directive.d.ts +4 -3
- package/lib/tabs-2/tabs-list/tabs-list.component.d.ts +1 -1
- package/package.json +9 -11
- package/esm2022/coreui-angular-pro.mjs +0 -5
- package/esm2022/lib/accordion/accordion/accordion.component.mjs +0 -34
- package/esm2022/lib/accordion/accordion-button/accordion-button.directive.mjs +0 -35
- package/esm2022/lib/accordion/accordion-item/accordion-item.component.mjs +0 -59
- package/esm2022/lib/accordion/accordion.module.mjs +0 -36
- package/esm2022/lib/accordion/accordion.service.mjs +0 -36
- package/esm2022/lib/accordion/index.mjs +0 -2
- package/esm2022/lib/accordion/public_api.mjs +0 -5
- package/esm2022/lib/alert/alert-heading.directive.mjs +0 -15
- package/esm2022/lib/alert/alert-link.directive.mjs +0 -15
- package/esm2022/lib/alert/alert.component.mjs +0 -173
- package/esm2022/lib/alert/alert.module.mjs +0 -30
- package/esm2022/lib/alert/index.mjs +0 -2
- package/esm2022/lib/alert/public_api.mjs +0 -5
- package/esm2022/lib/avatar/avatar.component.mjs +0 -71
- package/esm2022/lib/avatar/avatar.module.mjs +0 -20
- package/esm2022/lib/avatar/index.mjs +0 -2
- package/esm2022/lib/avatar/public_api.mjs +0 -3
- package/esm2022/lib/backdrop/backdrop.service.mjs +0 -82
- package/esm2022/lib/backdrop/index.mjs +0 -2
- package/esm2022/lib/backdrop/public_api.mjs +0 -2
- package/esm2022/lib/badge/badge.component.mjs +0 -77
- package/esm2022/lib/badge/badge.module.mjs +0 -20
- package/esm2022/lib/badge/index.mjs +0 -2
- package/esm2022/lib/badge/public_api.mjs +0 -3
- package/esm2022/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +0 -40
- package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +0 -39
- package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.mjs +0 -2
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +0 -41
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +0 -52
- package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +0 -34
- package/esm2022/lib/breadcrumb/index.mjs +0 -2
- package/esm2022/lib/breadcrumb/public_api.mjs +0 -6
- package/esm2022/lib/button/button-close.directive.mjs +0 -46
- package/esm2022/lib/button/button.directive.mjs +0 -88
- package/esm2022/lib/button/button.module.mjs +0 -25
- package/esm2022/lib/button/index.mjs +0 -2
- package/esm2022/lib/button/public_api.mjs +0 -4
- package/esm2022/lib/button-group/button-group/button-group.component.mjs +0 -41
- package/esm2022/lib/button-group/button-group.module.mjs +0 -17
- package/esm2022/lib/button-group/button-toolbar/button-toolbar.component.mjs +0 -24
- package/esm2022/lib/button-group/index.mjs +0 -2
- package/esm2022/lib/button-group/public_api.mjs +0 -4
- package/esm2022/lib/calendar/calendar/calendar-class-view.pipe.mjs +0 -20
- package/esm2022/lib/calendar/calendar/calendar.component.mjs +0 -380
- package/esm2022/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +0 -30
- package/esm2022/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +0 -24
- package/esm2022/lib/calendar/calendar-month/calendar-class-row.pipe.mjs +0 -24
- package/esm2022/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +0 -22
- package/esm2022/lib/calendar/calendar-month/calendar-day-title.pipe.mjs +0 -17
- package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +0 -138
- package/esm2022/lib/calendar/calendar-month/calendar-day.pipe.mjs +0 -19
- package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +0 -448
- package/esm2022/lib/calendar/calendar-month/calendar-row.directive.mjs +0 -123
- package/esm2022/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +0 -21
- package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +0 -87
- package/esm2022/lib/calendar/calendar.module.mjs +0 -57
- package/esm2022/lib/calendar/calendar.service.mjs +0 -66
- package/esm2022/lib/calendar/calendar.utils.mjs +0 -393
- package/esm2022/lib/calendar/index.mjs +0 -2
- package/esm2022/lib/calendar/public_api.mjs +0 -5
- package/esm2022/lib/callout/callout.component.mjs +0 -25
- package/esm2022/lib/callout/callout.module.mjs +0 -16
- package/esm2022/lib/callout/index.mjs +0 -2
- package/esm2022/lib/callout/public_api.mjs +0 -3
- package/esm2022/lib/card/card-body.component.mjs +0 -16
- package/esm2022/lib/card/card-footer.component.mjs +0 -16
- package/esm2022/lib/card/card-group.component.mjs +0 -16
- package/esm2022/lib/card/card-header-actions.component.mjs +0 -16
- package/esm2022/lib/card/card-header.component.mjs +0 -16
- package/esm2022/lib/card/card-img-overlay/card-img-overlay.component.mjs +0 -11
- package/esm2022/lib/card/card-img.directive.mjs +0 -32
- package/esm2022/lib/card/card-link.directive.mjs +0 -15
- package/esm2022/lib/card/card-subtitle.directive.mjs +0 -15
- package/esm2022/lib/card/card-text.directive.mjs +0 -15
- package/esm2022/lib/card/card-title.directive.mjs +0 -15
- package/esm2022/lib/card/card.component.mjs +0 -50
- package/esm2022/lib/card/card.module.mjs +0 -75
- package/esm2022/lib/card/index.mjs +0 -2
- package/esm2022/lib/card/public_api.mjs +0 -14
- package/esm2022/lib/carousel/carousel/carousel.component.mjs +0 -212
- package/esm2022/lib/carousel/carousel-caption/carousel-caption.component.mjs +0 -17
- package/esm2022/lib/carousel/carousel-control/carousel-control.component.mjs +0 -82
- package/esm2022/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +0 -44
- package/esm2022/lib/carousel/carousel-inner/carousel-inner.component.mjs +0 -47
- package/esm2022/lib/carousel/carousel-item/carousel-item.component.mjs +0 -67
- package/esm2022/lib/carousel/carousel-state.mjs +0 -77
- package/esm2022/lib/carousel/carousel-state.type.mjs +0 -2
- package/esm2022/lib/carousel/carousel.animation.mjs +0 -70
- package/esm2022/lib/carousel/carousel.config.mjs +0 -22
- package/esm2022/lib/carousel/carousel.module.mjs +0 -52
- package/esm2022/lib/carousel/carousel.service.mjs +0 -18
- package/esm2022/lib/carousel/index.mjs +0 -2
- package/esm2022/lib/carousel/public_api.mjs +0 -9
- package/esm2022/lib/collapse/collapse.animations.mjs +0 -9
- package/esm2022/lib/collapse/collapse.directive.mjs +0 -145
- package/esm2022/lib/collapse/collapse.module.mjs +0 -19
- package/esm2022/lib/collapse/index.mjs +0 -2
- package/esm2022/lib/collapse/public_api.mjs +0 -3
- package/esm2022/lib/coreui.types.mjs +0 -10
- package/esm2022/lib/date-picker/date-picker.component.mjs +0 -80
- package/esm2022/lib/date-picker/date-picker.module.mjs +0 -16
- package/esm2022/lib/date-picker/index.mjs +0 -2
- package/esm2022/lib/date-picker/public_api.mjs +0 -3
- package/esm2022/lib/date-range-picker/date-range-picker/custom-range-key.pipe.mjs +0 -17
- package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +0 -599
- package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +0 -16
- package/esm2022/lib/date-range-picker/index.mjs +0 -2
- package/esm2022/lib/date-range-picker/public_api.mjs +0 -3
- package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +0 -371
- package/esm2022/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +0 -73
- package/esm2022/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +0 -15
- package/esm2022/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +0 -15
- package/esm2022/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +0 -15
- package/esm2022/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +0 -96
- package/esm2022/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +0 -119
- package/esm2022/lib/dropdown/dropdown.module.mjs +0 -56
- package/esm2022/lib/dropdown/dropdown.service.mjs +0 -18
- package/esm2022/lib/dropdown/index.mjs +0 -2
- package/esm2022/lib/dropdown/public_api.mjs +0 -10
- package/esm2022/lib/element-cover/element-cover.component.mjs +0 -79
- package/esm2022/lib/element-cover/element-cover.module.mjs +0 -16
- package/esm2022/lib/element-cover/index.mjs +0 -2
- package/esm2022/lib/element-cover/public_api.mjs +0 -3
- package/esm2022/lib/footer/footer.component.mjs +0 -39
- package/esm2022/lib/footer/footer.module.mjs +0 -16
- package/esm2022/lib/footer/index.mjs +0 -2
- package/esm2022/lib/footer/public_api.mjs +0 -3
- package/esm2022/lib/form/form/form.directive.mjs +0 -33
- package/esm2022/lib/form/form-check/form-check-input.directive.mjs +0 -78
- package/esm2022/lib/form/form-check/form-check-label.directive.mjs +0 -15
- package/esm2022/lib/form/form-check/form-check.component.mjs +0 -77
- package/esm2022/lib/form/form-control/form-control.directive.mjs +0 -66
- package/esm2022/lib/form/form-feedback/form-feedback.component.mjs +0 -38
- package/esm2022/lib/form/form-floating/form-floating.directive.mjs +0 -32
- package/esm2022/lib/form/form-label/form-label.directive.mjs +0 -41
- package/esm2022/lib/form/form-select/form-select.directive.mjs +0 -36
- package/esm2022/lib/form/form-text/form-text.directive.mjs +0 -15
- package/esm2022/lib/form/form.module.mjs +0 -75
- package/esm2022/lib/form/index.mjs +0 -2
- package/esm2022/lib/form/input-group/input-group.component.mjs +0 -29
- package/esm2022/lib/form/input-group-text/input-group-text.directive.mjs +0 -15
- package/esm2022/lib/form/public_api.mjs +0 -14
- package/esm2022/lib/grid/col.component.mjs +0 -12
- package/esm2022/lib/grid/col.directive.mjs +0 -157
- package/esm2022/lib/grid/col.type.mjs +0 -2
- package/esm2022/lib/grid/container.component.mjs +0 -33
- package/esm2022/lib/grid/container.type.mjs +0 -2
- package/esm2022/lib/grid/grid.module.mjs +0 -45
- package/esm2022/lib/grid/gutter.directive.mjs +0 -57
- package/esm2022/lib/grid/gutter.type.mjs +0 -2
- package/esm2022/lib/grid/index.mjs +0 -2
- package/esm2022/lib/grid/public_api.mjs +0 -8
- package/esm2022/lib/grid/row.component.mjs +0 -16
- package/esm2022/lib/grid/row.directive.mjs +0 -47
- package/esm2022/lib/grid/row.type.mjs +0 -2
- package/esm2022/lib/header/header/header.component.mjs +0 -45
- package/esm2022/lib/header/header-brand/header-brand.component.mjs +0 -32
- package/esm2022/lib/header/header-divider/header-divider.component.mjs +0 -21
- package/esm2022/lib/header/header-nav/header-nav.component.mjs +0 -28
- package/esm2022/lib/header/header-text/header-text.component.mjs +0 -21
- package/esm2022/lib/header/header-toggler/header-toggler.directive.mjs +0 -55
- package/esm2022/lib/header/header.module.mjs +0 -45
- package/esm2022/lib/header/index.mjs +0 -2
- package/esm2022/lib/header/public_api.mjs +0 -8
- package/esm2022/lib/image/img.directive.mjs +0 -58
- package/esm2022/lib/image/img.module.mjs +0 -16
- package/esm2022/lib/image/index.mjs +0 -2
- package/esm2022/lib/image/public_api.mjs +0 -3
- package/esm2022/lib/list-group/index.mjs +0 -2
- package/esm2022/lib/list-group/list-group-item.directive.mjs +0 -63
- package/esm2022/lib/list-group/list-group.directive.mjs +0 -38
- package/esm2022/lib/list-group/list-group.module.mjs +0 -17
- package/esm2022/lib/list-group/public_api.mjs +0 -4
- package/esm2022/lib/loading-button/index.mjs +0 -2
- package/esm2022/lib/loading-button/loading-button.animations.mjs +0 -26
- package/esm2022/lib/loading-button/loading-button.component.mjs +0 -65
- package/esm2022/lib/loading-button/loading-button.module.mjs +0 -16
- package/esm2022/lib/loading-button/public_api.mjs +0 -3
- package/esm2022/lib/modal/index.mjs +0 -2
- package/esm2022/lib/modal/modal/modal.component.mjs +0 -334
- package/esm2022/lib/modal/modal-body/modal-body.component.mjs +0 -11
- package/esm2022/lib/modal/modal-content/modal-content.component.mjs +0 -16
- package/esm2022/lib/modal/modal-dialog/modal-dialog.component.mjs +0 -32
- package/esm2022/lib/modal/modal-dismiss/modal-toggle.directive.mjs +0 -28
- package/esm2022/lib/modal/modal-footer/modal-footer.component.mjs +0 -16
- package/esm2022/lib/modal/modal-header/modal-header.component.mjs +0 -16
- package/esm2022/lib/modal/modal-title/modal-title.directive.mjs +0 -15
- package/esm2022/lib/modal/modal.module.mjs +0 -57
- package/esm2022/lib/modal/modal.service.mjs +0 -21
- package/esm2022/lib/modal/public_api.mjs +0 -11
- package/esm2022/lib/multi-select/index.mjs +0 -2
- package/esm2022/lib/multi-select/multi-select/multi-select-search.directive.mjs +0 -65
- package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +0 -1296
- package/esm2022/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +0 -30
- package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +0 -11
- package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +0 -59
- package/esm2022/lib/multi-select/multi-select-option/multi-select-option.component.mjs +0 -302
- package/esm2022/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +0 -44
- package/esm2022/lib/multi-select/multi-select.module.mjs +0 -37
- package/esm2022/lib/multi-select/multi-select.service.mjs +0 -50
- package/esm2022/lib/multi-select/multi-select.type.mjs +0 -2
- package/esm2022/lib/multi-select/public_api.mjs +0 -6
- package/esm2022/lib/nav/index.mjs +0 -2
- package/esm2022/lib/nav/nav-item.component.mjs +0 -11
- package/esm2022/lib/nav/nav-link.directive.mjs +0 -76
- package/esm2022/lib/nav/nav.component.mjs +0 -25
- package/esm2022/lib/nav/nav.module.mjs +0 -30
- package/esm2022/lib/nav/public_api.mjs +0 -5
- package/esm2022/lib/navbar/index.mjs +0 -2
- package/esm2022/lib/navbar/navbar-brand/navbar-brand.directive.mjs +0 -18
- package/esm2022/lib/navbar/navbar-nav/navbar-nav.component.mjs +0 -29
- package/esm2022/lib/navbar/navbar-text/navbar-text.component.mjs +0 -16
- package/esm2022/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +0 -63
- package/esm2022/lib/navbar/navbar.component.mjs +0 -107
- package/esm2022/lib/navbar/navbar.module.mjs +0 -40
- package/esm2022/lib/navbar/public_api.mjs +0 -7
- package/esm2022/lib/offcanvas/index.mjs +0 -2
- package/esm2022/lib/offcanvas/offcanvas/offcanvas.component.mjs +0 -309
- package/esm2022/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +0 -11
- package/esm2022/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +0 -16
- package/esm2022/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +0 -15
- package/esm2022/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +0 -28
- package/esm2022/lib/offcanvas/offcanvas.module.mjs +0 -49
- package/esm2022/lib/offcanvas/offcanvas.service.mjs +0 -21
- package/esm2022/lib/offcanvas/public_api.mjs +0 -8
- package/esm2022/lib/pagination/index.mjs +0 -2
- package/esm2022/lib/pagination/page-item/page-item.component.mjs +0 -12
- package/esm2022/lib/pagination/page-item/page-item.directive.mjs +0 -64
- package/esm2022/lib/pagination/page-link/page-link.directive.mjs +0 -15
- package/esm2022/lib/pagination/pagination/pagination.component.mjs +0 -41
- package/esm2022/lib/pagination/pagination.module.mjs +0 -35
- package/esm2022/lib/pagination/public_api.mjs +0 -6
- package/esm2022/lib/placeholder/index.mjs +0 -2
- package/esm2022/lib/placeholder/placeholder-animation.directive.mjs +0 -34
- package/esm2022/lib/placeholder/placeholder.directive.mjs +0 -43
- package/esm2022/lib/placeholder/placeholder.module.mjs +0 -25
- package/esm2022/lib/placeholder/public_api.mjs +0 -4
- package/esm2022/lib/popover/index.mjs +0 -2
- package/esm2022/lib/popover/popover/popover.component.mjs +0 -70
- package/esm2022/lib/popover/popover.directive.mjs +0 -204
- package/esm2022/lib/popover/popover.module.mjs +0 -25
- package/esm2022/lib/popover/public_api.mjs +0 -4
- package/esm2022/lib/progress/index.mjs +0 -2
- package/esm2022/lib/progress/progress-bar.component.mjs +0 -40
- package/esm2022/lib/progress/progress-bar.directive.mjs +0 -113
- package/esm2022/lib/progress/progress-stacked.component.mjs +0 -19
- package/esm2022/lib/progress/progress.component.mjs +0 -74
- package/esm2022/lib/progress/progress.module.mjs +0 -35
- package/esm2022/lib/progress/progress.type.mjs +0 -2
- package/esm2022/lib/progress/public_api.mjs +0 -6
- package/esm2022/lib/rating/index.mjs +0 -2
- package/esm2022/lib/rating/public_api.mjs +0 -3
- package/esm2022/lib/rating/rating-item-label/rating-item-label.component.mjs +0 -40
- package/esm2022/lib/rating/rating.component.mjs +0 -355
- package/esm2022/lib/rating/rating.module.mjs +0 -16
- package/esm2022/lib/services/class-toggle.service.mjs +0 -30
- package/esm2022/lib/services/color-mode.service.mjs +0 -78
- package/esm2022/lib/services/in-memory-storage.service.mjs +0 -32
- package/esm2022/lib/services/index.mjs +0 -2
- package/esm2022/lib/services/intersection.service.mjs +0 -51
- package/esm2022/lib/services/listeners.service.mjs +0 -52
- package/esm2022/lib/services/local-storage.service.mjs +0 -45
- package/esm2022/lib/services/public_api.mjs +0 -7
- package/esm2022/lib/shared/element-ref.directive.mjs +0 -18
- package/esm2022/lib/shared/html-attr.directive.mjs +0 -56
- package/esm2022/lib/shared/index.mjs +0 -2
- package/esm2022/lib/shared/public_api.mjs +0 -6
- package/esm2022/lib/shared/shared.module.mjs +0 -24
- package/esm2022/lib/shared/template-id.directive.mjs +0 -20
- package/esm2022/lib/shared/theme.directive.mjs +0 -45
- package/esm2022/lib/sidebar/index.mjs +0 -2
- package/esm2022/lib/sidebar/public_api.mjs +0 -10
- package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +0 -241
- package/esm2022/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +0 -62
- package/esm2022/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +0 -30
- package/esm2022/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +0 -16
- package/esm2022/lib/sidebar/sidebar-header/sidebar-header.component.mjs +0 -16
- package/esm2022/lib/sidebar/sidebar-nav/index.mjs +0 -2
- package/esm2022/lib/sidebar/sidebar-nav/public_api.mjs +0 -14
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +0 -25
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +0 -17
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-group.service.mjs +0 -18
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +0 -21
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +0 -34
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +0 -43
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +0 -111
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +0 -23
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +0 -71
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +0 -230
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.mjs +0 -2
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +0 -54
- package/esm2022/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +0 -41
- package/esm2022/lib/sidebar/sidebar-toggler/sidebar-toggler.directive.mjs +0 -39
- package/esm2022/lib/sidebar/sidebar.module.mjs +0 -83
- package/esm2022/lib/sidebar/sidebar.service.mjs +0 -21
- package/esm2022/lib/smart-pagination/index.mjs +0 -2
- package/esm2022/lib/smart-pagination/public_api.mjs +0 -3
- package/esm2022/lib/smart-pagination/smart-pagination.component.mjs +0 -191
- package/esm2022/lib/smart-pagination/smart-pagination.module.mjs +0 -16
- package/esm2022/lib/smart-pagination/smart-pagination.type.mjs +0 -2
- package/esm2022/lib/smart-table/index.mjs +0 -2
- package/esm2022/lib/smart-table/public_api.mjs +0 -5
- package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +0 -526
- package/esm2022/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs +0 -27
- package/esm2022/lib/smart-table/smart-table-filter/filter-input.directive.mjs +0 -69
- package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +0 -42
- package/esm2022/lib/smart-table/smart-table-head/smart-table-column-label.pipe.mjs +0 -18
- package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +0 -229
- package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +0 -46
- package/esm2022/lib/smart-table/smart-table.module.mjs +0 -17
- package/esm2022/lib/smart-table/smart-table.type.mjs +0 -2
- package/esm2022/lib/smart-table/smart-table.utils.mjs +0 -181
- package/esm2022/lib/spinner/index.mjs +0 -2
- package/esm2022/lib/spinner/public_api.mjs +0 -3
- package/esm2022/lib/spinner/spinner.component.mjs +0 -52
- package/esm2022/lib/spinner/spinner.module.mjs +0 -20
- package/esm2022/lib/table/index.mjs +0 -2
- package/esm2022/lib/table/public_api.mjs +0 -5
- package/esm2022/lib/table/table-active.directive.mjs +0 -32
- package/esm2022/lib/table/table-color.directive.mjs +0 -25
- package/esm2022/lib/table/table.directive.mjs +0 -112
- package/esm2022/lib/table/table.module.mjs +0 -30
- package/esm2022/lib/table/table.type.mjs +0 -2
- package/esm2022/lib/tabs/index.mjs +0 -2
- package/esm2022/lib/tabs/public_api.mjs +0 -6
- package/esm2022/lib/tabs/tab-content/tab-content.component.mjs +0 -83
- package/esm2022/lib/tabs/tab-content-ref.directive.mjs +0 -141
- package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +0 -60
- package/esm2022/lib/tabs/tab.service.mjs +0 -21
- package/esm2022/lib/tabs/tabs.module.mjs +0 -36
- package/esm2022/lib/tabs-2/index.mjs +0 -2
- package/esm2022/lib/tabs-2/public_api.mjs +0 -8
- package/esm2022/lib/tabs-2/tab/tab.directive.mjs +0 -96
- package/esm2022/lib/tabs-2/tab-panel/tab-panel.component.mjs +0 -113
- package/esm2022/lib/tabs-2/tabs-content/tabs-content.component.mjs +0 -19
- package/esm2022/lib/tabs-2/tabs-list/tabs-list.component.mjs +0 -93
- package/esm2022/lib/tabs-2/tabs.component.mjs +0 -37
- package/esm2022/lib/tabs-2/tabs.service.mjs +0 -15
- package/esm2022/lib/tabs-2/tabs2.module.mjs +0 -22
- package/esm2022/lib/time-picker/index.mjs +0 -2
- package/esm2022/lib/time-picker/public_api.mjs +0 -3
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +0 -110
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +0 -114
- package/esm2022/lib/time-picker/time-picker.component.mjs +0 -517
- package/esm2022/lib/time-picker/time-picker.module.mjs +0 -16
- package/esm2022/lib/time-picker/time.utils.mjs +0 -645
- package/esm2022/lib/toast/index.mjs +0 -2
- package/esm2022/lib/toast/public_api.mjs +0 -9
- package/esm2022/lib/toast/toast/toast.component.mjs +0 -204
- package/esm2022/lib/toast/toast-body/toast-body.component.mjs +0 -21
- package/esm2022/lib/toast/toast-close.directive.mjs +0 -29
- package/esm2022/lib/toast/toast-header/toast-header.component.mjs +0 -30
- package/esm2022/lib/toast/toast.module.mjs +0 -47
- package/esm2022/lib/toast/toaster/toaster-host.directive.mjs +0 -18
- package/esm2022/lib/toast/toaster/toaster.component.mjs +0 -123
- package/esm2022/lib/toast/toaster/toaster.service.mjs +0 -22
- package/esm2022/lib/tooltip/index.mjs +0 -2
- package/esm2022/lib/tooltip/public_api.mjs +0 -4
- package/esm2022/lib/tooltip/tooltip/tooltip.component.mjs +0 -66
- package/esm2022/lib/tooltip/tooltip.directive.mjs +0 -204
- package/esm2022/lib/tooltip/tooltip.module.mjs +0 -25
- package/esm2022/lib/utilities/align.directive.mjs +0 -25
- package/esm2022/lib/utilities/bg-color.directive.mjs +0 -34
- package/esm2022/lib/utilities/border.directive.mjs +0 -67
- package/esm2022/lib/utilities/border.type.mjs +0 -2
- package/esm2022/lib/utilities/index.mjs +0 -2
- package/esm2022/lib/utilities/public_api.mjs +0 -9
- package/esm2022/lib/utilities/rounded.directive.mjs +0 -66
- package/esm2022/lib/utilities/rounded.type.mjs +0 -2
- package/esm2022/lib/utilities/shadow-on-scroll.directive.mjs +0 -48
- package/esm2022/lib/utilities/text-bg-color.directive.mjs +0 -30
- package/esm2022/lib/utilities/text-color.directive.mjs +0 -30
- package/esm2022/lib/utilities/utilities.module.mjs +0 -16
- package/esm2022/lib/widget/index.mjs +0 -2
- package/esm2022/lib/widget/public_api.mjs +0 -8
- package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +0 -55
- package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +0 -57
- package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +0 -71
- package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +0 -36
- package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +0 -36
- package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +0 -96
- package/esm2022/lib/widget/widget.module.mjs +0 -45
- package/esm2022/public-api.mjs +0 -53
|
@@ -1,517 +0,0 @@
|
|
|
1
|
-
import { booleanAttribute, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, forwardRef, HostListener, inject, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
3
|
-
import { NgClass, NgTemplateOutlet } from '@angular/common';
|
|
4
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
|
-
import { filter, tap } from 'rxjs/operators';
|
|
6
|
-
import { convert12hTo24h, convert24hTo12h, convertTimeToDate, getAmPm, getDayPeriods, getListOfHours, getListOfMinutes, getListOfSeconds, isHour12, isValidTime } from './time.utils';
|
|
7
|
-
import { DropdownComponent, DropdownMenuDirective, DropdownToggleDirective } from '../dropdown';
|
|
8
|
-
import { FormControlDirective, FormSelectDirective, InputGroupComponent, InputGroupTextDirective } from '../form';
|
|
9
|
-
import { TemplateIdDirective } from '../shared';
|
|
10
|
-
import { TimePickerRollColComponent } from './time-picker-roll-col/time-picker-roll-col.component';
|
|
11
|
-
import { TimePickerRollAmPmComponent } from './time-picker-roll-col/time-picker-roll-am-pm.component';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@angular/forms";
|
|
14
|
-
// todo: Focus management
|
|
15
|
-
export class TimePickerComponent {
|
|
16
|
-
constructor() {
|
|
17
|
-
this.#destroyRef = inject(DestroyRef);
|
|
18
|
-
/**
|
|
19
|
-
* Toggle visibility or set the content of the cleaner button.
|
|
20
|
-
* @type boolean
|
|
21
|
-
* @default true
|
|
22
|
-
*/
|
|
23
|
-
this.cleaner = true;
|
|
24
|
-
/**
|
|
25
|
-
* Sets DateTime format options including timeZone
|
|
26
|
-
* @type DateTimeFormatOptions
|
|
27
|
-
* @default {}
|
|
28
|
-
* @note The date object doesn't store timeZone, it keeps the local timezone of the browser, regardless if you parsed UTC dates.
|
|
29
|
-
*/
|
|
30
|
-
this.dateTimeFormatOptions = {};
|
|
31
|
-
/**
|
|
32
|
-
* Toggle the disabled state for the component.
|
|
33
|
-
* @type boolean
|
|
34
|
-
* @default false
|
|
35
|
-
*/
|
|
36
|
-
this.disabled = false;
|
|
37
|
-
/**
|
|
38
|
-
* Toggle visibility or set the content of the input indicator.
|
|
39
|
-
* @type boolean
|
|
40
|
-
* @default true
|
|
41
|
-
*/
|
|
42
|
-
this.indicator = true;
|
|
43
|
-
/**
|
|
44
|
-
* Toggle the readonly state for the component.
|
|
45
|
-
* @type boolean
|
|
46
|
-
* @default false
|
|
47
|
-
*/
|
|
48
|
-
this.inputReadOnly = false;
|
|
49
|
-
/**
|
|
50
|
-
* Sets the default locale for components. If not set, it is inherited from the browser.
|
|
51
|
-
* @type string
|
|
52
|
-
* @default default
|
|
53
|
-
*/
|
|
54
|
-
this.locale = 'default';
|
|
55
|
-
/**
|
|
56
|
-
* Specifies short hint visible in time input.
|
|
57
|
-
* @type string
|
|
58
|
-
* @default 'Select time'
|
|
59
|
-
*/
|
|
60
|
-
this.placeholder = 'Select time';
|
|
61
|
-
/**
|
|
62
|
-
* Toggle seconds visibility.
|
|
63
|
-
* @type boolean
|
|
64
|
-
* @default false
|
|
65
|
-
*/
|
|
66
|
-
this.seconds = false;
|
|
67
|
-
/**
|
|
68
|
-
* Set the time picker variant to a roll or select.
|
|
69
|
-
* @type 'roll' | 'select'
|
|
70
|
-
* @default 'roll'
|
|
71
|
-
*/
|
|
72
|
-
this.variant = 'roll';
|
|
73
|
-
/**
|
|
74
|
-
* Toggle the visibility of dropdown timepicker menu component.
|
|
75
|
-
* @type boolean
|
|
76
|
-
* @default false
|
|
77
|
-
*/
|
|
78
|
-
this.visible = false;
|
|
79
|
-
this.timeChange = new EventEmitter(false);
|
|
80
|
-
this.templates = {};
|
|
81
|
-
this.hour12 = isHour12(this.locale);
|
|
82
|
-
this.dayPeriods = [
|
|
83
|
-
{ value: 'am', label: 'am' },
|
|
84
|
-
{ value: 'pm', label: 'pm' }
|
|
85
|
-
];
|
|
86
|
-
this._timeInputValue = this.time?.toLocaleTimeString(this.locale, { timeStyle: this.seconds ? 'medium' : 'short' }) ?? '';
|
|
87
|
-
this.selectTime = new FormGroup({
|
|
88
|
-
selectHours: new FormControl({ value: this.hour, disabled: this.disabled }, { validators: [Validators.min(0), Validators.max(this.hour12 ? 11 : 23)] }),
|
|
89
|
-
selectMinutes: new FormControl({ value: this.minute, disabled: this.disabled }, { validators: [Validators.min(0), Validators.max(59)] }),
|
|
90
|
-
selectSeconds: new FormControl({ value: this.second, disabled: this.disabled }, { validators: [Validators.min(0), Validators.max(59)] }),
|
|
91
|
-
selectDayPeriod: new FormControl({ value: this.dayPeriod, disabled: this.disabled }, Validators.required)
|
|
92
|
-
}, { validators: [Validators.required] });
|
|
93
|
-
this.timeInput = new FormControl({
|
|
94
|
-
value: this.timeInputValue,
|
|
95
|
-
disabled: this.disabled
|
|
96
|
-
}, { validators: [Validators.required] });
|
|
97
|
-
this._hour = -1;
|
|
98
|
-
this._minute = -1;
|
|
99
|
-
this._second = -1;
|
|
100
|
-
this._dayPeriod = 'am';
|
|
101
|
-
this.onChange = (value) => {
|
|
102
|
-
/* empty */
|
|
103
|
-
};
|
|
104
|
-
this.onTouched = () => {
|
|
105
|
-
/* empty */
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
#destroyRef;
|
|
109
|
-
/**
|
|
110
|
-
* Initial selected time.
|
|
111
|
-
* @type Date | string | null | number
|
|
112
|
-
* @default undefined
|
|
113
|
-
*/
|
|
114
|
-
set time(value) {
|
|
115
|
-
if (value && isValidTime(value)) {
|
|
116
|
-
const time = convertTimeToDate(value);
|
|
117
|
-
if (!time) {
|
|
118
|
-
this.clearTime();
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
this.dayPeriod = getAmPm(time, this.locale);
|
|
122
|
-
if (this._time?.getTime() !== time.getTime()) {
|
|
123
|
-
this._time = new Date(time.getTime());
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
this.clearTime();
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
get time() {
|
|
131
|
-
return this._time;
|
|
132
|
-
}
|
|
133
|
-
onBlur() {
|
|
134
|
-
this.onTouched();
|
|
135
|
-
}
|
|
136
|
-
getListOfHours12() {
|
|
137
|
-
const listOfHours12 = this.hour12
|
|
138
|
-
? this.listOfHours?.filter((item) => (item.dayPeriod && item.dayPeriod === this.dayPeriod) || !item.dayPeriod)
|
|
139
|
-
: this.listOfHours;
|
|
140
|
-
if (this.hour12) {
|
|
141
|
-
listOfHours12.push(listOfHours12.shift());
|
|
142
|
-
}
|
|
143
|
-
return listOfHours12;
|
|
144
|
-
}
|
|
145
|
-
set timeInputValue(value) {
|
|
146
|
-
this.timeInput.setValue(value);
|
|
147
|
-
this._timeInputValue = value;
|
|
148
|
-
}
|
|
149
|
-
get timeInputValue() {
|
|
150
|
-
return this._timeInputValue;
|
|
151
|
-
}
|
|
152
|
-
get timePickerClasses() {
|
|
153
|
-
return {
|
|
154
|
-
'time-picker': true,
|
|
155
|
-
[`time-picker-${this.size}`]: !!this.size,
|
|
156
|
-
'form-control': this.variant === 'select' && this.valid !== undefined,
|
|
157
|
-
'is-valid': this.valid === true,
|
|
158
|
-
'is-invalid': this.valid === false,
|
|
159
|
-
disabled: this.disabled
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
set hour(value) {
|
|
163
|
-
if (this._hour !== value) {
|
|
164
|
-
if (value < 0) {
|
|
165
|
-
this.clearTime();
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
this._hour = value;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
get hour() {
|
|
172
|
-
return this._hour;
|
|
173
|
-
}
|
|
174
|
-
set minute(value) {
|
|
175
|
-
if (this._minute !== value) {
|
|
176
|
-
if (value < 0) {
|
|
177
|
-
this.clearTime();
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
this._minute = value;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
get minute() {
|
|
184
|
-
return this._minute;
|
|
185
|
-
}
|
|
186
|
-
set second(value) {
|
|
187
|
-
if (this._second !== value) {
|
|
188
|
-
if (value < 0) {
|
|
189
|
-
this.clearTime();
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
this._second = value;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
get second() {
|
|
196
|
-
return this._second;
|
|
197
|
-
}
|
|
198
|
-
set dayPeriod(value) {
|
|
199
|
-
if (this._dayPeriod !== value) {
|
|
200
|
-
this._dayPeriod = value;
|
|
201
|
-
if (this.listOfHours) {
|
|
202
|
-
this.listOfHours12 = this.getListOfHours12();
|
|
203
|
-
}
|
|
204
|
-
this.patchSelectTimeValues();
|
|
205
|
-
}
|
|
206
|
-
// this.listOfHours12 = this.hour12
|
|
207
|
-
// ? this.listOfHours?.filter(
|
|
208
|
-
// (item) => (item.dayPeriod && item.dayPeriod === value) || !item.dayPeriod
|
|
209
|
-
// )
|
|
210
|
-
// : this.listOfHours;
|
|
211
|
-
// this.patchSelectTimeValues();
|
|
212
|
-
}
|
|
213
|
-
get dayPeriod() {
|
|
214
|
-
return this._dayPeriod;
|
|
215
|
-
}
|
|
216
|
-
setTime() {
|
|
217
|
-
this._hour = this._hour < 0 ? 0 : this._hour;
|
|
218
|
-
this._minute = this._minute < 0 ? 0 : this._minute;
|
|
219
|
-
this._second = this._second < 0 ? 0 : this._second;
|
|
220
|
-
const time = new Date(this._time?.getTime() || new Date());
|
|
221
|
-
time.setHours(this.hour, this.minute, this.second, 0);
|
|
222
|
-
this.time = time;
|
|
223
|
-
this.emitTime(time);
|
|
224
|
-
}
|
|
225
|
-
clearTime() {
|
|
226
|
-
if (this.time) {
|
|
227
|
-
this._time = undefined;
|
|
228
|
-
this.emitTime(undefined);
|
|
229
|
-
}
|
|
230
|
-
this._hour = -1;
|
|
231
|
-
this._minute = -1;
|
|
232
|
-
this._second = -1;
|
|
233
|
-
this.dayPeriod = 'am';
|
|
234
|
-
this.patchSelectTimeValues();
|
|
235
|
-
this.timeInputValue = '';
|
|
236
|
-
}
|
|
237
|
-
emitTime(time) {
|
|
238
|
-
const timeValue = !!time && isValidTime(time) ? new Date(time.getTime()) : undefined;
|
|
239
|
-
if (this._timeInternal?.getTime() !== timeValue?.getTime()) {
|
|
240
|
-
this.timeChange.emit(timeValue);
|
|
241
|
-
this.onChange(timeValue);
|
|
242
|
-
this.onTouched();
|
|
243
|
-
this._timeInternal = timeValue;
|
|
244
|
-
}
|
|
245
|
-
this.timeInputValue =
|
|
246
|
-
this.time?.toLocaleTimeString(this.locale, {
|
|
247
|
-
timeStyle: this.seconds ? 'medium' : 'short'
|
|
248
|
-
}) ?? '';
|
|
249
|
-
}
|
|
250
|
-
ngOnInit() {
|
|
251
|
-
this.setTimeLists();
|
|
252
|
-
this.updateSelectTime();
|
|
253
|
-
this.setChangeHandlers();
|
|
254
|
-
}
|
|
255
|
-
ngOnChanges(changes) {
|
|
256
|
-
if (changes['time']) {
|
|
257
|
-
if (!changes['time'].firstChange) {
|
|
258
|
-
if (this._timeInternal?.getTime() !== changes['time'].currentValue?.getTime()) {
|
|
259
|
-
this.updateSelectTime();
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
ngAfterViewInit() {
|
|
265
|
-
setTimeout(() => {
|
|
266
|
-
this.contentTemplates.forEach((child) => {
|
|
267
|
-
this.templates[child.id] = child.templateRef;
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
setTimeLists() {
|
|
272
|
-
this.dayPeriods = getDayPeriods(this.locale, this.dateTimeFormatOptions);
|
|
273
|
-
this.hour12 = isHour12(this.locale);
|
|
274
|
-
this.listOfHours = this.listOfTimeSegments(getListOfHours, this.filterHours);
|
|
275
|
-
this.listOfMinutes = this.listOfTimeSegments(getListOfMinutes, this.filterMinutes);
|
|
276
|
-
this.listOfSeconds = this.listOfTimeSegments(getListOfSeconds, this.filterSeconds);
|
|
277
|
-
if (this.variant === 'select') {
|
|
278
|
-
const undefSegment = { value: -1, label: ' --', disabled: true };
|
|
279
|
-
this.listOfHours.unshift({ ...undefSegment });
|
|
280
|
-
this.listOfMinutes.unshift({ ...undefSegment });
|
|
281
|
-
this.listOfSeconds.unshift({ ...undefSegment });
|
|
282
|
-
}
|
|
283
|
-
this.listOfHours12 = this.getListOfHours12();
|
|
284
|
-
}
|
|
285
|
-
updateSelectTime(time = this.time) {
|
|
286
|
-
if (!!time && isValidTime(time)) {
|
|
287
|
-
const hour = time.getHours() ?? 0;
|
|
288
|
-
const minute = time.getMinutes() ?? 0;
|
|
289
|
-
const second = this.seconds ? (time.getSeconds() ?? 0) : 0;
|
|
290
|
-
const closestSecond = this.closestTime(this.listOfSeconds, second);
|
|
291
|
-
const closestMinute = this.closestTime(this.listOfMinutes, minute);
|
|
292
|
-
const closestHour = this.closestTime(this.listOfHours, hour);
|
|
293
|
-
this.second = this.seconds ? closestSecond.value : 0;
|
|
294
|
-
this.minute = closestMinute.value;
|
|
295
|
-
this.hour = closestHour.value;
|
|
296
|
-
this.setTime();
|
|
297
|
-
this.patchSelectTimeValues();
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
closestTime(timeArray, timeSegment) {
|
|
301
|
-
let array = timeArray ?? [{ value: 0, label: '00' }];
|
|
302
|
-
if (this.time) {
|
|
303
|
-
array = timeArray.filter((el) => el.value >= 0);
|
|
304
|
-
array = array.length ? array : timeArray;
|
|
305
|
-
}
|
|
306
|
-
return array.reduce((a, b) => {
|
|
307
|
-
return Math.abs(b.value - timeSegment) < Math.abs(a.value - timeSegment) ? b : a;
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
listOfTimeSegments(getListOfTimeSegments, filterTimeSegments) {
|
|
311
|
-
const list = getListOfTimeSegments(this.locale, this.dateTimeFormatOptions).filter((segment) => {
|
|
312
|
-
return typeof filterTimeSegments === 'function' ? filterTimeSegments(segment.value) : true;
|
|
313
|
-
});
|
|
314
|
-
return list.length ? list : getListOfTimeSegments(this.locale, this.dateTimeFormatOptions).slice(0, 1);
|
|
315
|
-
}
|
|
316
|
-
handleSelectDayPeriodChange(dayPeriod) {
|
|
317
|
-
if (dayPeriod !== this.dayPeriod) {
|
|
318
|
-
const hrs = this.time?.getHours() ?? (this.hour < 0 ? 0 : this.hour);
|
|
319
|
-
const hour = hrs > 12 ? convert24hTo12h(hrs) : convert12hTo24h(dayPeriod, hrs);
|
|
320
|
-
this.hour = this.closestTime(this.listOfHours, hour).value;
|
|
321
|
-
if (hour >= 0) {
|
|
322
|
-
this.setTime();
|
|
323
|
-
}
|
|
324
|
-
this.updateSelectTime();
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
handleSelectTimeChange(value, segment) {
|
|
328
|
-
this[segment] = value;
|
|
329
|
-
if (value >= 0) {
|
|
330
|
-
this.setTime();
|
|
331
|
-
}
|
|
332
|
-
this.updateSelectTime();
|
|
333
|
-
}
|
|
334
|
-
patchSelectTimeValues() {
|
|
335
|
-
const dayPeriod = this.selectTime.get('selectDayPeriod')?.value;
|
|
336
|
-
if (this.dayPeriod !== dayPeriod) {
|
|
337
|
-
this.selectTime.patchValue({
|
|
338
|
-
selectDayPeriod: this.dayPeriod ?? 'am'
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
const hours = this.selectTime.get('selectHours')?.value;
|
|
342
|
-
const minutes = this.selectTime.get('selectMinutes')?.value;
|
|
343
|
-
const seconds = this.selectTime.get('selectSeconds')?.value;
|
|
344
|
-
const goUpdate = (this.second < 0 && this.minute < 0) || (this.hour >= 0 && this.minute >= 0 && this.second >= 0);
|
|
345
|
-
const timeChanged = this.hour !== hours || this.minute !== minutes || this.second !== seconds;
|
|
346
|
-
if (goUpdate && timeChanged) {
|
|
347
|
-
if (this.hour !== hours) {
|
|
348
|
-
this.selectTime.patchValue({
|
|
349
|
-
selectHours: this.hour ?? 0
|
|
350
|
-
});
|
|
351
|
-
}
|
|
352
|
-
if (this.minute !== minutes) {
|
|
353
|
-
this.selectTime.patchValue({
|
|
354
|
-
selectMinutes: this.minute ?? 0
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
if (this.second !== seconds) {
|
|
358
|
-
this.selectTime.patchValue({
|
|
359
|
-
selectSeconds: this.second ?? 0
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
trackByHour(index, hour) {
|
|
365
|
-
return hour;
|
|
366
|
-
}
|
|
367
|
-
writeValue(value) {
|
|
368
|
-
this.time = value;
|
|
369
|
-
this.updateSelectTime();
|
|
370
|
-
}
|
|
371
|
-
registerOnChange(fn) {
|
|
372
|
-
this.onChange = fn;
|
|
373
|
-
}
|
|
374
|
-
registerOnTouched(fn) {
|
|
375
|
-
this.onTouched = fn;
|
|
376
|
-
}
|
|
377
|
-
setDisabledState(isDisabled) {
|
|
378
|
-
this.disabled = isDisabled;
|
|
379
|
-
}
|
|
380
|
-
handleTimeInputChange($event) {
|
|
381
|
-
const value = $event.target?.value;
|
|
382
|
-
if (!value || !isValidTime(value)) {
|
|
383
|
-
this.clearTime();
|
|
384
|
-
return;
|
|
385
|
-
}
|
|
386
|
-
const time = convertTimeToDate(value);
|
|
387
|
-
this.updateSelectTime(time ?? new Date(Date.now()));
|
|
388
|
-
}
|
|
389
|
-
handleClear($event) {
|
|
390
|
-
this.clearTime();
|
|
391
|
-
}
|
|
392
|
-
handleBlur($event) {
|
|
393
|
-
if (this.disabled) {
|
|
394
|
-
return;
|
|
395
|
-
}
|
|
396
|
-
this.dropdownRef?.nativeElement?.classList.remove('show');
|
|
397
|
-
setTimeout(() => {
|
|
398
|
-
this.onBlur();
|
|
399
|
-
}, 100);
|
|
400
|
-
}
|
|
401
|
-
handleFocus($event) {
|
|
402
|
-
if (this.disabled) {
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
this.dropdownRef?.nativeElement?.classList.add('show');
|
|
406
|
-
}
|
|
407
|
-
setChangeHandlers() {
|
|
408
|
-
if (this.variant !== 'select') {
|
|
409
|
-
return;
|
|
410
|
-
}
|
|
411
|
-
this.selectTime
|
|
412
|
-
.get('selectHours')
|
|
413
|
-
?.valueChanges.pipe(tap((value) => {
|
|
414
|
-
this.handleSelectTimeChange(value, 'hour');
|
|
415
|
-
}), takeUntilDestroyed(this.#destroyRef))
|
|
416
|
-
.subscribe();
|
|
417
|
-
this.selectTime
|
|
418
|
-
.get('selectMinutes')
|
|
419
|
-
?.valueChanges.pipe(tap((value) => {
|
|
420
|
-
this.handleSelectTimeChange(value, 'minute');
|
|
421
|
-
}), takeUntilDestroyed(this.#destroyRef))
|
|
422
|
-
.subscribe();
|
|
423
|
-
this.selectTime
|
|
424
|
-
.get('selectSeconds')
|
|
425
|
-
?.valueChanges.pipe(filter(() => this.seconds), tap((value) => {
|
|
426
|
-
this.handleSelectTimeChange(value, 'second');
|
|
427
|
-
}), takeUntilDestroyed(this.#destroyRef))
|
|
428
|
-
.subscribe();
|
|
429
|
-
this.selectTime
|
|
430
|
-
.get('selectDayPeriod')
|
|
431
|
-
?.valueChanges.pipe(filter(() => this.hour12), tap((value) => {
|
|
432
|
-
this.handleSelectDayPeriodChange(value);
|
|
433
|
-
}), takeUntilDestroyed(this.#destroyRef))
|
|
434
|
-
.subscribe();
|
|
435
|
-
}
|
|
436
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
437
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: TimePickerComponent, isStandalone: true, selector: "c-time-picker", inputs: { cleaner: ["cleaner", "cleaner", booleanAttribute], dateTimeFormatOptions: "dateTimeFormatOptions", disabled: ["disabled", "disabled", booleanAttribute], filterHours: "filterHours", filterMinutes: "filterMinutes", filterSeconds: "filterSeconds", indicator: ["indicator", "indicator", booleanAttribute], inputReadOnly: ["inputReadOnly", "inputReadOnly", booleanAttribute], locale: "locale", placeholder: "placeholder", seconds: ["seconds", "seconds", booleanAttribute], size: "size", time: "time", variant: "variant", valid: "valid", visible: ["visible", "visible", booleanAttribute] }, outputs: { timeChange: "timeChange" }, host: { listeners: { "blur": "onBlur()" } }, providers: [
|
|
438
|
-
{
|
|
439
|
-
provide: NG_VALUE_ACCESSOR,
|
|
440
|
-
useExisting: forwardRef(() => TimePickerComponent),
|
|
441
|
-
multi: true
|
|
442
|
-
}
|
|
443
|
-
], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: DropdownComponent, descendants: true, read: ElementRef }], exportAs: ["cTimePicker"], usesOnChanges: true, ngImport: i0, template: "@if (variant === 'select') {\n <div class=\"date-picker-timepickers\">\n <div class=\"picker time-picker\">\n <div [formGroup]=\"selectTime\" [ngClass]=\"timePickerClasses\" class=\"time-picker-body\">\n <span class=\"time-picker-inline-icon\"></span>\n <select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectHours\">\n @for (hour of listOfHours12; track hour; let i = $index) {\n <option [attr.disabled]=\"hour.disabled || null\" [ngValue]=\"hour.value\">\n {{ hour.label }}\n </option>\n }\n </select>\n {{ ' :' }}<select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectMinutes\">\n @for (minute of listOfMinutes; track minute; let i = $index) {\n <option [attr.disabled]=\"minute.disabled || null\" [ngValue]=\"minute.value\">\n {{ minute.label }}\n </option>\n }\n </select>\n @if (seconds) {\n {{ ' :' }}<select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectSeconds\">\n @for (second of listOfSeconds; track second; let i = $index) {\n <option [attr.disabled]=\"second.disabled || null\" [ngValue]=\"second.value\">\n {{ second.label }}\n </option>\n }\n </select>\n }\n @if (hour12) {\n <select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectDayPeriod\">\n @for (dayPeriod of dayPeriods; track dayPeriod) {\n <option [ngValue]=\"dayPeriod.value\" class=\"time-picker-roll-cell\">\n {{ dayPeriod.label }}\n </option>\n }\n </select>\n }\n </div>\n </div>\n </div>\n}\n@if (variant === 'roll') {\n <c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" [ngClass]=\"timePickerClasses\" [visible]=\"visible\">\n <div [caret]=\"false\" cDropdownToggle class=\"time-picker-input-group\">\n <input (blur)=\"handleBlur($event);\"\n (change)=\"handleTimeInputChange($event)\"\n (focus)=\"handleFocus($event)\"\n [attr.disabled]=\"disabled ?? dropdown.visible ? '' : null\"\n [attr.pattern]=\"hour12 ? '(((0[1-9])|(1[0-2])):([0-5])([0-9])\\\\s(A|P)M)' : '([01]?[0-9]|2[0-3]):[0-5][0-9]'\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"timeInput\"\n [placeholder]=\"placeholder\"\n [readonly]=\"inputReadOnly ?? null\"\n class=\"time-picker-input\"\n >\n @if (indicator) {\n <div class=\"time-picker-indicator\"></div>\n }\n @if (cleaner && time && !disabled) {\n <div (click)=\"!disabled && handleClear($event)\" class=\"time-picker-cleaner\" role=\"button\"></div>\n }\n </div>\n <div #dropdownMenu=\"cDropdownMenu\" cDropdownMenu class=\"time-picker-dropdown py-0\">\n <div class=\"time-picker-body time-picker-roll\" style=\"position: relative;\">\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'hour')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfHours12\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"hour\"\n role=\"listbox\"\n />\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'minute')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfMinutes\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"minute\"\n role=\"listbox\"\n />\n @if (seconds) {\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'second')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfSeconds\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"second\"\n role=\"listbox\"\n />\n }\n @if (hour12) {\n <c-time-picker-roll-am-pm\n (selectedChange)=\"handleSelectDayPeriodChange($event)\"\n [disabled]=\"disabled\"\n [elements]=\"dayPeriods\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"dayPeriod\"\n role=\"listbox\"\n />\n }\n </div>\n @if (templates?.timePickerFooter) {\n <div class=\"time-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.timePickerFooter; context: {$implicit: dropdown}\" />\n </div>\n }\n </div>\n </c-dropdown>\n}\n", styles: [".disabled{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: FormSelectDirective, selector: "select[cSelect]", inputs: ["sizing", "valid"] }, { kind: "component", type: TimePickerRollColComponent, selector: "c-time-picker-roll-col", inputs: ["disabled", "elements", "onClick", "selected", "refresh"], outputs: ["selectedChange"], exportAs: ["cTimePickerRollCol"] }, { kind: "component", type: TimePickerRollAmPmComponent, selector: "c-time-picker-roll-am-pm", inputs: ["disabled", "elements", "onClick", "selected", "refresh"], outputs: ["selectedChange"] }] }); }
|
|
444
|
-
}
|
|
445
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TimePickerComponent, decorators: [{
|
|
446
|
-
type: Component,
|
|
447
|
-
args: [{ selector: 'c-time-picker', exportAs: 'cTimePicker', standalone: true, imports: [
|
|
448
|
-
NgClass,
|
|
449
|
-
NgTemplateOutlet,
|
|
450
|
-
ReactiveFormsModule,
|
|
451
|
-
DropdownComponent,
|
|
452
|
-
DropdownToggleDirective,
|
|
453
|
-
DropdownMenuDirective,
|
|
454
|
-
FormControlDirective,
|
|
455
|
-
FormSelectDirective,
|
|
456
|
-
InputGroupComponent,
|
|
457
|
-
InputGroupTextDirective,
|
|
458
|
-
TimePickerRollColComponent,
|
|
459
|
-
TimePickerRollAmPmComponent
|
|
460
|
-
], providers: [
|
|
461
|
-
{
|
|
462
|
-
provide: NG_VALUE_ACCESSOR,
|
|
463
|
-
useExisting: forwardRef(() => TimePickerComponent),
|
|
464
|
-
multi: true
|
|
465
|
-
}
|
|
466
|
-
], template: "@if (variant === 'select') {\n <div class=\"date-picker-timepickers\">\n <div class=\"picker time-picker\">\n <div [formGroup]=\"selectTime\" [ngClass]=\"timePickerClasses\" class=\"time-picker-body\">\n <span class=\"time-picker-inline-icon\"></span>\n <select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectHours\">\n @for (hour of listOfHours12; track hour; let i = $index) {\n <option [attr.disabled]=\"hour.disabled || null\" [ngValue]=\"hour.value\">\n {{ hour.label }}\n </option>\n }\n </select>\n {{ ' :' }}<select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectMinutes\">\n @for (minute of listOfMinutes; track minute; let i = $index) {\n <option [attr.disabled]=\"minute.disabled || null\" [ngValue]=\"minute.value\">\n {{ minute.label }}\n </option>\n }\n </select>\n @if (seconds) {\n {{ ' :' }}<select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectSeconds\">\n @for (second of listOfSeconds; track second; let i = $index) {\n <option [attr.disabled]=\"second.disabled || null\" [ngValue]=\"second.value\">\n {{ second.label }}\n </option>\n }\n </select>\n }\n @if (hour12) {\n <select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectDayPeriod\">\n @for (dayPeriod of dayPeriods; track dayPeriod) {\n <option [ngValue]=\"dayPeriod.value\" class=\"time-picker-roll-cell\">\n {{ dayPeriod.label }}\n </option>\n }\n </select>\n }\n </div>\n </div>\n </div>\n}\n@if (variant === 'roll') {\n <c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" [ngClass]=\"timePickerClasses\" [visible]=\"visible\">\n <div [caret]=\"false\" cDropdownToggle class=\"time-picker-input-group\">\n <input (blur)=\"handleBlur($event);\"\n (change)=\"handleTimeInputChange($event)\"\n (focus)=\"handleFocus($event)\"\n [attr.disabled]=\"disabled ?? dropdown.visible ? '' : null\"\n [attr.pattern]=\"hour12 ? '(((0[1-9])|(1[0-2])):([0-5])([0-9])\\\\s(A|P)M)' : '([01]?[0-9]|2[0-3]):[0-5][0-9]'\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"timeInput\"\n [placeholder]=\"placeholder\"\n [readonly]=\"inputReadOnly ?? null\"\n class=\"time-picker-input\"\n >\n @if (indicator) {\n <div class=\"time-picker-indicator\"></div>\n }\n @if (cleaner && time && !disabled) {\n <div (click)=\"!disabled && handleClear($event)\" class=\"time-picker-cleaner\" role=\"button\"></div>\n }\n </div>\n <div #dropdownMenu=\"cDropdownMenu\" cDropdownMenu class=\"time-picker-dropdown py-0\">\n <div class=\"time-picker-body time-picker-roll\" style=\"position: relative;\">\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'hour')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfHours12\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"hour\"\n role=\"listbox\"\n />\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'minute')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfMinutes\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"minute\"\n role=\"listbox\"\n />\n @if (seconds) {\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'second')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfSeconds\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"second\"\n role=\"listbox\"\n />\n }\n @if (hour12) {\n <c-time-picker-roll-am-pm\n (selectedChange)=\"handleSelectDayPeriodChange($event)\"\n [disabled]=\"disabled\"\n [elements]=\"dayPeriods\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"dayPeriod\"\n role=\"listbox\"\n />\n }\n </div>\n @if (templates?.timePickerFooter) {\n <div class=\"time-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.timePickerFooter; context: {$implicit: dropdown}\" />\n </div>\n }\n </div>\n </c-dropdown>\n}\n", styles: [".disabled{pointer-events:none}\n"] }]
|
|
467
|
-
}], propDecorators: { cleaner: [{
|
|
468
|
-
type: Input,
|
|
469
|
-
args: [{ transform: booleanAttribute }]
|
|
470
|
-
}], dateTimeFormatOptions: [{
|
|
471
|
-
type: Input
|
|
472
|
-
}], disabled: [{
|
|
473
|
-
type: Input,
|
|
474
|
-
args: [{ transform: booleanAttribute }]
|
|
475
|
-
}], filterHours: [{
|
|
476
|
-
type: Input
|
|
477
|
-
}], filterMinutes: [{
|
|
478
|
-
type: Input
|
|
479
|
-
}], filterSeconds: [{
|
|
480
|
-
type: Input
|
|
481
|
-
}], indicator: [{
|
|
482
|
-
type: Input,
|
|
483
|
-
args: [{ transform: booleanAttribute }]
|
|
484
|
-
}], inputReadOnly: [{
|
|
485
|
-
type: Input,
|
|
486
|
-
args: [{ transform: booleanAttribute }]
|
|
487
|
-
}], locale: [{
|
|
488
|
-
type: Input
|
|
489
|
-
}], placeholder: [{
|
|
490
|
-
type: Input
|
|
491
|
-
}], seconds: [{
|
|
492
|
-
type: Input,
|
|
493
|
-
args: [{ transform: booleanAttribute }]
|
|
494
|
-
}], size: [{
|
|
495
|
-
type: Input
|
|
496
|
-
}], time: [{
|
|
497
|
-
type: Input
|
|
498
|
-
}], variant: [{
|
|
499
|
-
type: Input
|
|
500
|
-
}], valid: [{
|
|
501
|
-
type: Input
|
|
502
|
-
}], visible: [{
|
|
503
|
-
type: Input,
|
|
504
|
-
args: [{ transform: booleanAttribute }]
|
|
505
|
-
}], timeChange: [{
|
|
506
|
-
type: Output
|
|
507
|
-
}], onBlur: [{
|
|
508
|
-
type: HostListener,
|
|
509
|
-
args: ['blur']
|
|
510
|
-
}], dropdownRef: [{
|
|
511
|
-
type: ViewChild,
|
|
512
|
-
args: [DropdownComponent, { read: ElementRef }]
|
|
513
|
-
}], contentTemplates: [{
|
|
514
|
-
type: ContentChildren,
|
|
515
|
-
args: [TemplateIdDirective, { descendants: true }]
|
|
516
|
-
}] } });
|
|
517
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLGlCQUFpQixFQUdqQixPQUFPLEVBQ1AsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixXQUFXLEVBRVosTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxvQkFBb0IsRUFB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SztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9rQyxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU9FLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTzdCLE1BQU07c0JBQWQsS0FBSztnQkFPRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9rQyxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU83QixJQUFJO3NCQUFaLEtBQUs7Z0JBUUYsSUFBSTtzQkFEUCxLQUFLO2dCQTZCRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csS0FBSztzQkFBYixLQUFLO2dCQU9rQyxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUU1QixVQUFVO3NCQUFuQixNQUFNO2dCQUVlLE1BQU07c0JBQTNCLFlBQVk7dUJBQUMsTUFBTTtnQkFJZ0MsV0FBVztzQkFBOUQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSWxELGdCQUFnQjtzQkFEZixlQUFlO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEZXN0cm95UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgY29udmVydDEyaFRvMjRoLFxuICBjb252ZXJ0MjRoVG8xMmgsXG4gIGNvbnZlcnRUaW1lVG9EYXRlLFxuICBEYXRlVGltZUZvcm1hdE9wdGlvbnMsXG4gIERheVBlcmlvZCxcbiAgZ2V0QW1QbSxcbiAgZ2V0RGF5UGVyaW9kcyxcbiAgZ2V0TGlzdE9mSG91cnMsXG4gIGdldExpc3RPZk1pbnV0ZXMsXG4gIGdldExpc3RPZlNlY29uZHMsXG4gIGlzSG91cjEyLFxuICBpc1ZhbGlkVGltZSxcbiAgSVRpbWVWYWx1ZVxufSBmcm9tICcuL3RpbWUudXRpbHMnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQsIERyb3Bkb3duTWVudURpcmVjdGl2ZSwgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wZG93bic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbERpcmVjdGl2ZSwgRm9ybVNlbGVjdERpcmVjdGl2ZSwgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cFRleHREaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgVGltZVBpY2tlclJvbGxDb2xDb21wb25lbnQgfSBmcm9tICcuL3RpbWUtcGlja2VyLXJvbGwtY29sL3RpbWUtcGlja2VyLXJvbGwtY29sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaW1lUGlja2VyUm9sbEFtUG1Db21wb25lbnQgfSBmcm9tICcuL3RpbWUtcGlja2VyLXJvbGwtY29sL3RpbWUtcGlja2VyLXJvbGwtYW0tcG0uY29tcG9uZW50JztcblxuLy8gdG9kbzogRm9jdXMgbWFuYWdlbWVudFxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLXRpbWUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjVGltZVBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEcm9wZG93bkNvbXBvbmVudCxcbiAgICBEcm9wZG93blRvZ2dsZURpcmVjdGl2ZSxcbiAgICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gICAgRm9ybUNvbnRyb2xEaXJlY3RpdmUsXG4gICAgRm9ybVNlbGVjdERpcmVjdGl2ZSxcbiAgICBJbnB1dEdyb3VwQ29tcG9uZW50LFxuICAgIElucHV0R3JvdXBUZXh0RGlyZWN0aXZlLFxuICAgIFRpbWVQaWNrZXJSb2xsQ29sQ29tcG9uZW50LFxuICAgIFRpbWVQaWNrZXJSb2xsQW1QbUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJlYWRvbmx5ICNkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGNsZWFuZXIgYnV0dG9uLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjbGVhbmVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2V0cyBEYXRlVGltZSBmb3JtYXQgb3B0aW9ucyBpbmNsdWRpbmcgdGltZVpvbmVcbiAgICogQHR5cGUgRGF0ZVRpbWVGb3JtYXRPcHRpb25zXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqIEBub3RlIFRoZSBkYXRlIG9iamVjdCBkb2Vzbid0IHN0b3JlIHRpbWVab25lLCBpdCBrZWVwcyB0aGUgbG9jYWwgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIsIHJlZ2FyZGxlc3MgaWYgeW91IHBhcnNlZCBVVEMgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlVGltZUZvcm1hdE9wdGlvbnM6IERhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGRpc2FibGVkIHN0YXRlIGZvciB0aGUgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRmlsdGVyIGF2YWlsYWJsZSBob3VycyB0byBwaWNrLlxuICAgKiBAdHlwZSAodmFsdWU6IG51bWJlcikgPT4gYm9vbGVhbjtcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBmaWx0ZXJIb3Vycz86ICh2YWx1ZTogbnVtYmVyKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYXZhaWxhYmxlIG1pbnV0ZXMgdG8gcGljay5cbiAgICogQHR5cGUgKHZhbHVlOiBudW1iZXIpID0+IGJvb2xlYW47XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgZmlsdGVyTWludXRlcz86ICh2YWx1ZTogbnVtYmVyKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYXZhaWxhYmxlIHNlY29uZHMgdG8gcGljay5cbiAgICogQHR5cGUgKHZhbHVlOiBudW1iZXIpID0+IGJvb2xlYW47XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgZmlsdGVyU2Vjb25kcz86ICh2YWx1ZTogbnVtYmVyKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGlucHV0IGluZGljYXRvci5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaW5kaWNhdG9yOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSByZWFkb25seSBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlucHV0UmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgZGVmYXVsdCBsb2NhbGUgZm9yIGNvbXBvbmVudHMuIElmIG5vdCBzZXQsIGl0IGlzIGluaGVyaXRlZCBmcm9tIHRoZSBicm93c2VyLlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgKi9cbiAgQElucHV0KCkgbG9jYWxlOiBzdHJpbmcgPSAnZGVmYXVsdCc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBzaG9ydCBoaW50IHZpc2libGUgaW4gdGltZSBpbnB1dC5cbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdTZWxlY3QgdGltZSdcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IHRpbWUnO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgc2Vjb25kcyB2aXNpYmlsaXR5LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2Vjb25kczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgc2l6ZT86ICdzbScgfCAnbGcnO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHNlbGVjdGVkIHRpbWUuXG4gICAqIEB0eXBlIERhdGUgfCBzdHJpbmcgfCBudWxsIHwgbnVtYmVyXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHRpbWUodmFsdWU6IERhdGUgfCBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgJiYgaXNWYWxpZFRpbWUodmFsdWUpKSB7XG4gICAgICBjb25zdCB0aW1lID0gY29udmVydFRpbWVUb0RhdGUodmFsdWUpO1xuICAgICAgaWYgKCF0aW1lKSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF5UGVyaW9kID0gZ2V0QW1QbSh0aW1lLCB0aGlzLmxvY2FsZSk7XG4gICAgICBpZiAodGhpcy5fdGltZT8uZ2V0VGltZSgpICE9PSB0aW1lLmdldFRpbWUoKSkge1xuICAgICAgICB0aGlzLl90aW1lID0gbmV3IERhdGUodGltZS5nZXRUaW1lKCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0aW1lKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90aW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGltZT86IERhdGU7XG4gIHByaXZhdGUgX3RpbWVJbnRlcm5hbD86IERhdGU7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdGltZSBwaWNrZXIgdmFyaWFudCB0byBhIHJvbGwgb3Igc2VsZWN0LlxuICAgKiBAdHlwZSAncm9sbCcgfCAnc2VsZWN0J1xuICAgKiBAZGVmYXVsdCAncm9sbCdcbiAgICovXG4gIEBJbnB1dCgpIHZhcmlhbnQ6ICdyb2xsJyB8ICdzZWxlY3QnID0gJ3JvbGwnO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzdWFsIHZhbGlkYXRpb24gZmVlZGJhY2suXG4gICAqIEB0eXBlIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBkcm9wZG93biB0aW1lcGlja2VyIG1lbnUgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB0aW1lQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IHVuZGVmaW5lZD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCB1bmRlZmluZWQ+KGZhbHNlKTtcblxuICBASG9zdExpc3RlbmVyKCdibHVyJykgb25CbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBAVmlld0NoaWxkKERyb3Bkb3duQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd25SZWYhOiBFbGVtZW50UmVmO1xuXG4gIHRlbXBsYXRlczogYW55ID0ge307XG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVJZERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBjb250ZW50VGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlSWREaXJlY3RpdmU+O1xuXG4gIGxpc3RPZkhvdXJzITogSVRpbWVWYWx1ZVtdO1xuICBsaXN0T2ZIb3VyczEyITogSVRpbWVWYWx1ZVtdO1xuICBsaXN0T2ZNaW51dGVzITogSVRpbWVWYWx1ZVtdO1xuICBsaXN0T2ZTZWNvbmRzITogSVRpbWVWYWx1ZVtdO1xuICBob3VyMTI6IGJvb2xlYW4gPSBpc0hvdXIxMih0aGlzLmxvY2FsZSk7XG4gIGRheVBlcmlvZHMgPSBbXG4gICAgeyB2YWx1ZTogJ2FtJywgbGFiZWw6ICdhbScgfSxcbiAgICB7IHZhbHVlOiAncG0nLCBsYWJlbDogJ3BtJyB9XG4gIF07XG5cbiAgZ2V0TGlzdE9mSG91cnMxMigpOiBJVGltZVZhbHVlW10ge1xuICAgIGNvbnN0IGxpc3RPZkhvdXJzMTIgPSB0aGlzLmhvdXIxMlxuICAgICAgPyB0aGlzLmxpc3RPZkhvdXJzPy5maWx0ZXIoKGl0ZW0pID0+IChpdGVtLmRheVBlcmlvZCAmJiBpdGVtLmRheVBlcmlvZCA9PT0gdGhpcy5kYXlQZXJpb2QpIHx8ICFpdGVtLmRheVBlcmlvZClcbiAgICAgIDogdGhpcy5saXN0T2ZIb3VycztcbiAgICBpZiAodGhpcy5ob3VyMTIpIHtcbiAgICAgIGxpc3RPZkhvdXJzMTIucHVzaCg8SVRpbWVWYWx1ZT5saXN0T2ZIb3VyczEyLnNoaWZ0KCkpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdE9mSG91cnMxMjtcbiAgfVxuXG4gIHNldCB0aW1lSW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50aW1lSW5wdXQuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuX3RpbWVJbnB1dFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdGltZUlucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZUlucHV0VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90aW1lSW5wdXRWYWx1ZTogc3RyaW5nID1cbiAgICB0aGlzLnRpbWU/LnRvTG9jYWxlVGltZVN0cmluZyh0aGlzLmxvY2FsZSwgeyB0aW1lU3R5bGU6IHRoaXMuc2Vjb25kcyA/ICdtZWRpdW0nIDogJ3Nob3J0JyB9KSA/PyAnJztcblxuICBnZXQgdGltZVBpY2tlckNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICd0aW1lLXBpY2tlcic6IHRydWUsXG4gICAgICBbYHRpbWUtcGlja2VyLSR7dGhpcy5zaXplfWBdOiAhIXRoaXMuc2l6ZSxcbiAgICAgICdmb3JtLWNvbnRyb2wnOiB0aGlzLnZhcmlhbnQgPT09ICdzZWxlY3QnICYmIHRoaXMudmFsaWQgIT09IHVuZGVmaW5lZCxcbiAgICAgICdpcy12YWxpZCc6IHRoaXMudmFsaWQgPT09IHRydWUsXG4gICAgICAnaXMtaW52YWxpZCc6IHRoaXMudmFsaWQgPT09IGZhbHNlLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgc2VsZWN0VGltZSA9IG5ldyBGb3JtR3JvdXA8e1xuICAgIHNlbGVjdEhvdXJzOiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPjtcbiAgICBzZWxlY3RNaW51dGVzOiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPjtcbiAgICBzZWxlY3RTZWNvbmRzPzogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG4gICAgc2VsZWN0RGF5UGVyaW9kPzogRm9ybUNvbnRyb2w8J2FtJyB8ICdwbScgfCBudWxsPjtcbiAgfT4oXG4gICAge1xuICAgICAgc2VsZWN0SG91cnM6IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgeyB2YWx1ZTogdGhpcy5ob3VyLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LFxuICAgICAgICB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1pbigwKSwgVmFsaWRhdG9ycy5tYXgodGhpcy5ob3VyMTIgPyAxMSA6IDIzKV0gfVxuICAgICAgKSxcbiAgICAgIHNlbGVjdE1pbnV0ZXM6IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgeyB2YWx1ZTogdGhpcy5taW51dGUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sXG4gICAgICAgIHsgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMubWluKDApLCBWYWxpZGF0b3JzLm1heCg1OSldIH1cbiAgICAgICksXG4gICAgICBzZWxlY3RTZWNvbmRzOiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IHRoaXMuc2Vjb25kLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LFxuICAgICAgICB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1pbigwKSwgVmFsaWRhdG9ycy5tYXgoNTkpXSB9XG4gICAgICApLFxuICAgICAgc2VsZWN0RGF5UGVyaW9kOiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5kYXlQZXJpb2QsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgfSxcbiAgICB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSB9XG4gICk7XG5cbiAgdGltZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKFxuICAgIHtcbiAgICAgIHZhbHVlOiB0aGlzLnRpbWVJbnB1dFZhbHVlLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICB9LFxuICAgIHsgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdIH1cbiAgKTtcblxuICBzZXQgaG91cih2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX2hvdXIgIT09IHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2hvdXIgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgaG91cigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9ob3VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfaG91ciA9IC0xO1xuXG4gIHNldCBtaW51dGUodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl9taW51dGUgIT09IHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX21pbnV0ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtaW51dGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWludXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWludXRlID0gLTE7XG5cbiAgc2V0IHNlY29uZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX3NlY29uZCAhPT0gdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgdGhpcy5jbGVhclRpbWUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2Vjb25kID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlY29uZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWNvbmQ7XG4gIH1cblxuICBwcml2YXRlIF9zZWNvbmQgPSAtMTtcblxuICBzZXQgZGF5UGVyaW9kKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuX2RheVBlcmlvZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2RheVBlcmlvZCA9IHZhbHVlO1xuICAgICAgaWYgKHRoaXMubGlzdE9mSG91cnMpIHtcbiAgICAgICAgdGhpcy5saXN0T2ZIb3VyczEyID0gdGhpcy5nZXRMaXN0T2ZIb3VyczEyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhdGNoU2VsZWN0VGltZVZhbHVlcygpO1xuICAgIH1cbiAgICAvLyB0aGlzLmxpc3RPZkhvdXJzMTIgPSB0aGlzLmhvdXIxMlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5saXN0T2ZIb3Vycz8uZmlsdGVyKFxuICAgIC8vICAgICAoaXRlbSkgPT4gKGl0ZW0uZGF5UGVyaW9kICYmIGl0ZW0uZGF5UGVyaW9kID09PSB2YWx1ZSkgfHwgIWl0ZW0uZGF5UGVyaW9kXG4gICAgLy8gICApXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmxpc3RPZkhvdXJzO1xuICAgIC8vIHRoaXMucGF0Y2hTZWxlY3RUaW1lVmFsdWVzKCk7XG4gIH1cblxuICBnZXQgZGF5UGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXlQZXJpb2Q7XG4gIH1cblxuICBwcml2YXRlIF9kYXlQZXJpb2Q6IERheVBlcmlvZCA9ICdhbSc7XG5cbiAgc2V0VGltZSgpIHtcbiAgICB0aGlzLl9ob3VyID0gdGhpcy5faG91ciA8IDAgPyAwIDogdGhpcy5faG91cjtcbiAgICB0aGlzLl9taW51dGUgPSB0aGlzLl9taW51dGUgPCAwID8gMCA6IHRoaXMuX21pbnV0ZTtcbiAgICB0aGlzLl9zZWNvbmQgPSB0aGlzLl9zZWNvbmQgPCAwID8gMCA6IHRoaXMuX3NlY29uZDtcblxuICAgIGNvbnN0IHRpbWUgPSBuZXcgRGF0ZSh0aGlzLl90aW1lPy5nZXRUaW1lKCkgfHwgbmV3IERhdGUoKSk7XG4gICAgdGltZS5zZXRIb3Vycyh0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgMCk7XG4gICAgdGhpcy50aW1lID0gdGltZTtcbiAgICB0aGlzLmVtaXRUaW1lKHRpbWUpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyVGltZSgpIHtcbiAgICBpZiAodGhpcy50aW1lKSB7XG4gICAgICB0aGlzLl90aW1lID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5lbWl0VGltZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICB0aGlzLl9ob3VyID0gLTE7XG4gICAgdGhpcy5fbWludXRlID0gLTE7XG4gICAgdGhpcy5fc2Vjb25kID0gLTE7XG4gICAgdGhpcy5kYXlQZXJpb2QgPSAnYW0nO1xuICAgIHRoaXMucGF0Y2hTZWxlY3RUaW1lVmFsdWVzKCk7XG4gICAgdGhpcy50aW1lSW5wdXRWYWx1ZSA9ICcnO1xuICB9XG5cbiAgZW1pdFRpbWUodGltZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHRpbWVWYWx1ZSA9ICEhdGltZSAmJiBpc1ZhbGlkVGltZSh0aW1lKSA/IG5ldyBEYXRlKHRpbWUuZ2V0VGltZSgpKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5fdGltZUludGVybmFsPy5nZXRUaW1lKCkgIT09IHRpbWVWYWx1ZT8uZ2V0VGltZSgpKSB7XG4gICAgICB0aGlzLnRpbWVDaGFuZ2UuZW1pdCh0aW1lVmFsdWUpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aW1lVmFsdWUpO1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuX3RpbWVJbnRlcm5hbCA9IHRpbWVWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy50aW1lSW5wdXRWYWx1ZSA9XG4gICAgICB0aGlzLnRpbWU/LnRvTG9jYWxlVGltZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB0aW1lU3R5bGU6IHRoaXMuc2Vjb25kcyA/ICdtZWRpdW0nIDogJ3Nob3J0J1xuICAgICAgfSkgPz8gJyc7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFRpbWVMaXN0cygpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSgpO1xuICAgIHRoaXMuc2V0Q2hhbmdlSGFuZGxlcnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndGltZSddKSB7XG4gICAgICBpZiAoIWNoYW5nZXNbJ3RpbWUnXS5maXJzdENoYW5nZSkge1xuICAgICAgICBpZiAodGhpcy5fdGltZUludGVybmFsPy5nZXRUaW1lKCkgIT09IGNoYW5nZXNbJ3RpbWUnXS5jdXJyZW50VmFsdWU/LmdldFRpbWUoKSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVzLmZvckVhY2goKGNoaWxkOiBUZW1wbGF0ZUlkRGlyZWN0aXZlKSA9PiB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRUaW1lTGlzdHMoKSB7XG4gICAgdGhpcy5kYXlQZXJpb2RzID0gZ2V0RGF5UGVyaW9kcyh0aGlzLmxvY2FsZSwgdGhpcy5kYXRlVGltZUZvcm1hdE9wdGlvbnMpO1xuICAgIHRoaXMuaG91cjEyID0gaXNIb3VyMTIodGhpcy5sb2NhbGUpO1xuICAgIHRoaXMubGlzdE9mSG91cnMgPSB0aGlzLmxpc3RPZlRpbWVTZWdtZW50cyhnZXRMaXN0T2ZIb3VycywgdGhpcy5maWx0ZXJIb3Vycyk7XG4gICAgdGhpcy5saXN0T2ZNaW51dGVzID0gdGhpcy5saXN0T2ZUaW1lU2VnbWVudHMoZ2V0TGlzdE9mTWludXRlcywgdGhpcy5maWx0ZXJNaW51dGVzKTtcbiAgICB0aGlzLmxpc3RPZlNlY29uZHMgPSB0aGlzLmxpc3RPZlRpbWVTZWdtZW50cyhnZXRMaXN0T2ZTZWNvbmRzLCB0aGlzLmZpbHRlclNlY29uZHMpO1xuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdzZWxlY3QnKSB7XG4gICAgICBjb25zdCB1bmRlZlNlZ21lbnQgPSB7IHZhbHVlOiAtMSwgbGFiZWw6ICcgLS0nLCBkaXNhYmxlZDogdHJ1ZSB9O1xuICAgICAgdGhpcy5saXN0T2ZIb3Vycy51bnNoaWZ0KHsgLi4udW5kZWZTZWdtZW50IH0pO1xuICAgICAgdGhpcy5saXN0T2ZNaW51dGVzLnVuc2hpZnQoeyAuLi51bmRlZlNlZ21lbnQgfSk7XG4gICAgICB0aGlzLmxpc3RPZlNlY29uZHMudW5zaGlmdCh7IC4uLnVuZGVmU2VnbWVudCB9KTtcbiAgICB9XG4gICAgdGhpcy5saXN0T2ZIb3VyczEyID0gdGhpcy5nZXRMaXN0T2ZIb3VyczEyKCk7XG4gIH1cblxuICB1cGRhdGVTZWxlY3RUaW1lKHRpbWUgPSB0aGlzLnRpbWUpIHtcbiAgICBpZiAoISF0aW1lICYmIGlzVmFsaWRUaW1lKHRpbWUpKSB7XG4gICAgICBjb25zdCBob3VyID0gdGltZS5nZXRIb3VycygpID8/IDA7XG4gICAgICBjb25zdCBtaW51dGUgPSB0aW1lLmdldE1pbnV0ZXMoKSA/PyAwO1xuICAgICAgY29uc3Qgc2Vjb25kID0gdGhpcy5zZWNvbmRzID8gKHRpbWUuZ2V0U2Vjb25kcygpID8/IDApIDogMDtcblxuICAgICAgY29uc3QgY2xvc2VzdFNlY29uZCA9IHRoaXMuY2xvc2VzdFRpbWUodGhpcy5saXN0T2ZTZWNvbmRzLCBzZWNvbmQpO1xuICAgICAgY29uc3QgY2xvc2VzdE1pbnV0ZSA9IHRoaXMuY2xvc2VzdFRpbWUodGhpcy5saXN0T2ZNaW51dGVzLCBtaW51dGUpO1xuICAgICAgY29uc3QgY2xvc2VzdEhvdXIgPSB0aGlzLmNsb3Nlc3RUaW1lKHRoaXMubGlzdE9mSG91cnMsIGhvdXIpO1xuXG4gICAgICB0aGlzLnNlY29uZCA9IHRoaXMuc2Vjb25kcyA/IGNsb3Nlc3RTZWNvbmQudmFsdWUgOiAwO1xuICAgICAgdGhpcy5taW51dGUgPSBjbG9zZXN0TWludXRlLnZhbHVlO1xuICAgICAgdGhpcy5ob3VyID0gY2xvc2VzdEhvdXIudmFsdWU7XG4gICAgICB0aGlzLnNldFRpbWUoKTtcbiAgICAgIHRoaXMucGF0Y2hTZWxlY3RUaW1lVmFsdWVzKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VzdFRpbWUodGltZUFycmF5OiBJVGltZVZhbHVlW10sIHRpbWVTZWdtZW50OiBudW1iZXIpIHtcbiAgICBsZXQgYXJyYXkgPSB0aW1lQXJyYXkgPz8gW3sgdmFsdWU6IDAsIGxhYmVsOiAnMDAnIH1dO1xuICAgIGlmICh0aGlzLnRpbWUpIHtcbiAgICAgIGFycmF5ID0gdGltZUFycmF5LmZpbHRlcigoZWwpID0+IGVsLnZhbHVlID49IDApO1xuICAgICAgYXJyYXkgPSBhcnJheS5sZW5ndGggPyBhcnJheSA6IHRpbWVBcnJheTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5LnJlZHVjZSgoYTogSVRpbWVWYWx1ZSwgYjogSVRpbWVWYWx1ZSkgPT4ge1xuICAgICAgcmV0dXJuIE1hdGguYWJzKGIudmFsdWUgLSB0aW1lU2VnbWVudCkgPCBNYXRoLmFicyhhLnZhbHVlIC0gdGltZVNlZ21lbnQpID8gYiA6IGE7XG4gICAgfSk7XG4gIH1cblxuICBsaXN0T2ZUaW1lU2VnbWVudHMoXG4gICAgZ2V0TGlzdE9mVGltZVNlZ21lbnRzOiAobG9jYWxlOiBzdHJpbmcsIGRhdGVUaW1lRm9ybWF0T3B0aW9uczogRGF0ZVRpbWVGb3JtYXRPcHRpb25zKSA9PiBJVGltZVZhbHVlW10sXG4gICAgZmlsdGVyVGltZVNlZ21lbnRzOiAoKHRpbWVTZWdtZW50VmFsdWU6IG51bWJlcikgPT4gYm9vbGVhbikgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgY29uc3QgbGlzdCA9IGdldExpc3RPZlRpbWVTZWdtZW50cyh0aGlzLmxvY2FsZSwgdGhpcy5kYXRlVGltZUZvcm1hdE9wdGlvbnMpLmZpbHRlcigoc2VnbWVudDogSVRpbWVWYWx1ZSkgPT4ge1xuICAgICAgcmV0dXJuIHR5cGVvZiBmaWx0ZXJUaW1lU2VnbWVudHMgPT09ICdmdW5jdGlvbicgPyBmaWx0ZXJUaW1lU2VnbWVudHMoc2VnbWVudC52YWx1ZSkgOiB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiBsaXN0Lmxlbmd0aCA/IGxpc3QgOiBnZXRMaXN0T2ZUaW1lU2VnbWVudHModGhpcy5sb2NhbGUsIHRoaXMuZGF0ZVRpbWVGb3JtYXRPcHRpb25zKS5zbGljZSgwLCAxKTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdERheVBlcmlvZENoYW5nZShkYXlQZXJpb2Q6IERheVBlcmlvZCkge1xuICAgIGlmIChkYXlQZXJpb2QgIT09IHRoaXMuZGF5UGVyaW9kKSB7XG4gICAgICBjb25zdCBocnMgPSB0aGlzLnRpbWU/LmdldEhvdXJzKCkgPz8gKHRoaXMuaG91ciA8IDAgPyAwIDogdGhpcy5ob3VyKTtcbiAgICAgIGNvbnN0IGhvdXIgPSBocnMgPiAxMiA/IGNvbnZlcnQyNGhUbzEyaChocnMpIDogY29udmVydDEyaFRvMjRoKGRheVBlcmlvZCwgaHJzKTtcbiAgICAgIHRoaXMuaG91ciA9IHRoaXMuY2xvc2VzdFRpbWUodGhpcy5saXN0T2ZIb3VycywgaG91cikudmFsdWU7XG4gICAgICBpZiAoaG91ciA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2VsZWN0VGltZUNoYW5nZSh2YWx1ZTogbnVtYmVyLCBzZWdtZW50OiAnaG91cicgfCAnbWludXRlJyB8ICdzZWNvbmQnKSB7XG4gICAgdGhpc1tzZWdtZW50XSA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICB0aGlzLnNldFRpbWUoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTZWxlY3RUaW1lKCk7XG4gIH1cblxuICBwYXRjaFNlbGVjdFRpbWVWYWx1ZXMoKSB7XG4gICAgY29uc3QgZGF5UGVyaW9kID0gdGhpcy5zZWxlY3RUaW1lLmdldCgnc2VsZWN0RGF5UGVyaW9kJyk/LnZhbHVlO1xuICAgIGlmICh0aGlzLmRheVBlcmlvZCAhPT0gZGF5UGVyaW9kKSB7XG4gICAgICB0aGlzLnNlbGVjdFRpbWUucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHNlbGVjdERheVBlcmlvZDogdGhpcy5kYXlQZXJpb2QgPz8gJ2FtJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGhvdXJzID0gdGhpcy5zZWxlY3RUaW1lLmdldCgnc2VsZWN0SG91cnMnKT8udmFsdWU7XG4gICAgY29uc3QgbWludXRlcyA9IHRoaXMuc2VsZWN0VGltZS5nZXQoJ3NlbGVjdE1pbnV0ZXMnKT8udmFsdWU7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMuc2VsZWN0VGltZS5nZXQoJ3NlbGVjdFNlY29uZHMnKT8udmFsdWU7XG4gICAgY29uc3QgZ29VcGRhdGUgPSAodGhpcy5zZWNvbmQgPCAwICYmIHRoaXMubWludXRlIDwgMCkgfHwgKHRoaXMuaG91ciA+PSAwICYmIHRoaXMubWludXRlID49IDAgJiYgdGhpcy5zZWNvbmQgPj0gMCk7XG4gICAgY29uc3QgdGltZUNoYW5nZWQgPSB0aGlzLmhvdXIgIT09IGhvdXJzIHx8IHRoaXMubWludXRlICE9PSBtaW51dGVzIHx8IHRoaXMuc2Vjb25kICE9PSBzZWNvbmRzO1xuICAgIGlmIChnb1VwZGF0ZSAmJiB0aW1lQ2hhbmdlZCkge1xuICAgICAgaWYgKHRoaXMuaG91ciAhPT0gaG91cnMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RUaW1lLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIHNlbGVjdEhvdXJzOiB0aGlzLmhvdXIgPz8gMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1pbnV0ZSAhPT0gbWludXRlcykge1xuICAgICAgICB0aGlzLnNlbGVjdFRpbWUucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgc2VsZWN0TWludXRlczogdGhpcy5taW51dGUgPz8gMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlY29uZCAhPT0gc2Vjb25kcykge1xuICAgICAgICB0aGlzLnNlbGVjdFRpbWUucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgc2VsZWN0U2Vjb25kczogdGhpcy5zZWNvbmQgPz8gMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0cmFja0J5SG91cihpbmRleDogbnVtYmVyLCBob3VyOiBJVGltZVZhbHVlKSB7XG4gICAgcmV0dXJuIGhvdXI7XG4gIH1cblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIC8qIGVtcHR5ICovXG4gIH07XG4gIG9uVG91Y2hlZCA9ICgpID0+IHtcbiAgICAvKiBlbXB0eSAqL1xuICB9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudGltZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSgpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIGhhbmRsZVRpbWVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gJGV2ZW50LnRhcmdldD8udmFsdWU7XG4gICAgaWYgKCF2YWx1ZSB8fCAhaXNWYWxpZFRpbWUodmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0aW1lID0gY29udmVydFRpbWVUb0RhdGUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSh0aW1lID8/IG5ldyBEYXRlKERhdGUubm93KCkpKTtcbiAgfVxuXG4gIGhhbmRsZUNsZWFyKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xlYXJUaW1lKCk7XG4gIH1cblxuICBoYW5kbGVCbHVyKCRldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJvcGRvd25SZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGhhbmRsZUZvY3VzKCRldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJvcGRvd25SZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgfVxuXG4gIHNldENoYW5nZUhhbmRsZXJzKCkge1xuICAgIGlmICh0aGlzLnZhcmlhbnQgIT09ICdzZWxlY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RUaW1lXG4gICAgICAuZ2V0KCdzZWxlY3RIb3VycycpXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RUaW1lQ2hhbmdlKDxudW1iZXI+dmFsdWUsICdob3VyJyk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuc2VsZWN0VGltZVxuICAgICAgLmdldCgnc2VsZWN0TWludXRlcycpXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RUaW1lQ2hhbmdlKDxudW1iZXI+dmFsdWUsICdtaW51dGUnKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZWxlY3RUaW1lXG4gICAgICAuZ2V0KCdzZWxlY3RTZWNvbmRzJylcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnNlY29uZHMpLFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RUaW1lQ2hhbmdlKDxudW1iZXI+dmFsdWUsICdzZWNvbmQnKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZWxlY3RUaW1lXG4gICAgICAuZ2V0KCdzZWxlY3REYXlQZXJpb2QnKVxuICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaG91cjEyKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0RGF5UGVyaW9kQ2hhbmdlKDxEYXlQZXJpb2Q+dmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIkBpZiAodmFyaWFudCA9PT0gJ3NlbGVjdCcpIHtcbiAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXRpbWVwaWNrZXJzXCI+XG4gICAgPGRpdiBjbGFzcz1cInBpY2tlciB0aW1lLXBpY2tlclwiPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cInNlbGVjdFRpbWVcIiBbbmdDbGFzc109XCJ0aW1lUGlja2VyQ2xhc3Nlc1wiIGNsYXNzPVwidGltZS1waWNrZXItYm9keVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtcGlja2VyLWlubGluZS1pY29uXCI+PC9zcGFuPlxuICAgICAgICA8c2VsZWN0IChibHVyKT1cIm9uQmx1cigpXCIgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiIFtzaXppbmddPVwic2l6ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgY1NlbGVjdCBjbGFzcz1cInRpbWUtcGlja2VyLWlubGluZS1zZWxlY3QgbXMtMFwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEhvdXJzXCI+XG4gICAgICAgICAgQGZvciAoaG91ciBvZiBsaXN0T2ZIb3VyczEyOyB0cmFjayBob3VyOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPG9wdGlvbiBbYXR0ci5kaXNhYmxlZF09XCJob3VyLmRpc2FibGVkIHx8IG51bGxcIiBbbmdWYWx1ZV09XCJob3VyLnZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7IGhvdXIubGFiZWwgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIHt7ICcgOicgfX08c2VsZWN0IChibHVyKT1cIm9uQmx1cigpXCIgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiIFtzaXppbmddPVwic2l6ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNTZWxlY3QgY2xhc3M9XCJ0aW1lLXBpY2tlci1pbmxpbmUtc2VsZWN0IG1zLTBcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RNaW51dGVzXCI+XG4gICAgICAgIEBmb3IgKG1pbnV0ZSBvZiBsaXN0T2ZNaW51dGVzOyB0cmFjayBtaW51dGU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgPG9wdGlvbiBbYXR0ci5kaXNhYmxlZF09XCJtaW51dGUuZGlzYWJsZWQgfHwgbnVsbFwiIFtuZ1ZhbHVlXT1cIm1pbnV0ZS52YWx1ZVwiPlxuICAgICAgICAgICAge3sgbWludXRlLmxhYmVsIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIH1cbiAgICAgIDwvc2VsZWN0PlxuICAgICAgICBAaWYgKHNlY29uZHMpIHtcbiAgICAgICAgICB7eyAnIDonIH19PHNlbGVjdCAoYmx1cik9XCJvbkJsdXIoKVwiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkIHx8IG51bGxcIiBbc2l6aW5nXT1cInNpemUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNTZWxlY3QgY2xhc3M9XCJ0aW1lLXBpY2tlci1pbmxpbmUtc2VsZWN0IG1zLTBcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RTZWNvbmRzXCI+XG4gICAgICAgICAgICBAZm9yIChzZWNvbmQgb2YgbGlzdE9mU2Vjb25kczsgdHJhY2sgc2Vjb25kOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICA8b3B0aW9uIFthdHRyLmRpc2FibGVkXT1cInNlY29uZC5kaXNhYmxlZCB8fCBudWxsXCIgW25nVmFsdWVdPVwic2Vjb25kLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAge3sgc2Vjb25kLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaG91cjEyKSB7XG4gICAgICAgICAgPHNlbGVjdCAoYmx1cik9XCJvbkJsdXIoKVwiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkIHx8IG51bGxcIiBbc2l6aW5nXT1cInNpemUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgY1NlbGVjdCBjbGFzcz1cInRpbWUtcGlja2VyLWlubGluZS1zZWxlY3QgbXMtMFwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdERheVBlcmlvZFwiPlxuICAgICAgICAgICAgQGZvciAoZGF5UGVyaW9kIG9mIGRheVBlcmlvZHM7IHRyYWNrIGRheVBlcmlvZCkge1xuICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImRheVBlcmlvZC52YWx1ZVwiIGNsYXNzPVwidGltZS1waWNrZXItcm9sbC1jZWxsXCI+XG4gICAgICAgICAgICAgICAge3sgZGF5UGVyaW9kLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59XG5AaWYgKHZhcmlhbnQgPT09ICdyb2xsJykge1xuICA8Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiIFtuZ0NsYXNzXT1cInRpbWVQaWNrZXJDbGFzc2VzXCIgW3Zpc2libGVdPVwidmlzaWJsZVwiPlxuICAgIDxkaXYgW2NhcmV0XT1cImZhbHNlXCIgY0Ryb3Bkb3duVG9nZ2xlIGNsYXNzPVwidGltZS1waWNrZXItaW5wdXQtZ3JvdXBcIj5cbiAgICAgIDxpbnB1dCAoYmx1cik9XCJoYW5kbGVCbHVyKCRldmVudCk7XCJcbiAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVRpbWVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPz8gZHJvcGRvd24udmlzaWJsZSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgW2F0dHIucGF0dGVybl09XCJob3VyMTIgPyAnKCgoMFsxLTldKXwoMVswLTJdKSk6KFswLTVdKShbMC05XSlcXFxccyhBfFApTSknIDogJyhbMDFdP1swLTldfDJbMC0zXSk6WzAtNV1bMC05XSdcIlxuICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGltZUlucHV0XCJcbiAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxuICAgICAgICAgICAgIGNsYXNzPVwidGltZS1waWNrZXItaW5wdXRcIlxuICAgICAgPlxuICAgICAgQGlmIChpbmRpY2F0b3IpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyLWluZGljYXRvclwiPjwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChjbGVhbmVyICYmIHRpbWUgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiBoYW5kbGVDbGVhcigkZXZlbnQpXCIgY2xhc3M9XCJ0aW1lLXBpY2tlci1jbGVhbmVyXCIgcm9sZT1cImJ1dHRvblwiPjwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgI2Ryb3Bkb3duTWVudT1cImNEcm9wZG93bk1lbnVcIiBjRHJvcGRvd25NZW51IGNsYXNzPVwidGltZS1waWNrZXItZHJvcGRvd24gcHktMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyLWJvZHkgdGltZS1waWNrZXItcm9sbFwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxuICAgICAgICA8Yy10aW1lLXBpY2tlci1yb2xsLWNvbFxuICAgICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJoYW5kbGVTZWxlY3RUaW1lQ2hhbmdlKCRldmVudCwgJ2hvdXInKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbZWxlbWVudHNdPVwibGlzdE9mSG91cnMxMlwiXG4gICAgICAgICAgW3JlZnJlc2hdPVwiZHJvcGRvd25NZW51LnZpc2libGVcIlxuICAgICAgICAgIFtzZWxlY3RlZF09XCJob3VyXCJcbiAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjLXRpbWUtcGlja2VyLXJvbGwtY29sXG4gICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cImhhbmRsZVNlbGVjdFRpbWVDaGFuZ2UoJGV2ZW50LCAnbWludXRlJylcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW2VsZW1lbnRzXT1cImxpc3RPZk1pbnV0ZXNcIlxuICAgICAgICAgIFtyZWZyZXNoXT1cImRyb3Bkb3duTWVudS52aXNpYmxlXCJcbiAgICAgICAgICBbc2VsZWN0ZWRdPVwibWludXRlXCJcbiAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoc2Vjb25kcykge1xuICAgICAgICAgIDxjLXRpbWUtcGlja2VyLXJvbGwtY29sXG4gICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0VGltZUNoYW5nZSgkZXZlbnQsICdzZWNvbmQnKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2VsZW1lbnRzXT1cImxpc3RPZlNlY29uZHNcIlxuICAgICAgICAgICAgW3JlZnJlc2hdPVwiZHJvcGRvd25NZW51LnZpc2libGVcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlY29uZFwiXG4gICAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGhvdXIxMikge1xuICAgICAgICAgIDxjLXRpbWUtcGlja2VyLXJvbGwtYW0tcG1cbiAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJoYW5kbGVTZWxlY3REYXlQZXJpb2RDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2VsZW1lbnRzXT1cImRheVBlcmlvZHNcIlxuICAgICAgICAgICAgW3JlZnJlc2hdPVwiZHJvcGRvd25NZW51LnZpc2libGVcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cImRheVBlcmlvZFwiXG4gICAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKHRlbXBsYXRlcz8udGltZVBpY2tlckZvb3Rlcikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItZm9vdGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlcz8udGltZVBpY2tlckZvb3RlcjsgY29udGV4dDogeyRpbXBsaWNpdDogZHJvcGRvd259XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvYy1kcm9wZG93bj5cbn1cbiJdfQ==
|