@coreui/angular-pro 5.1.0-next.0 → 5.1.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/esm2022/lib/accordion/accordion/accordion.component.mjs +3 -3
- package/esm2022/lib/accordion/accordion-button/accordion-button.directive.mjs +3 -3
- package/esm2022/lib/accordion/accordion-item/accordion-item.component.mjs +3 -3
- package/esm2022/lib/accordion/accordion.module.mjs +4 -4
- package/esm2022/lib/accordion/accordion.service.mjs +3 -3
- package/esm2022/lib/alert/alert-heading.directive.mjs +3 -3
- package/esm2022/lib/alert/alert-link.directive.mjs +3 -3
- package/esm2022/lib/alert/alert.component.mjs +3 -3
- package/esm2022/lib/alert/alert.module.mjs +4 -4
- package/esm2022/lib/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/avatar/avatar.module.mjs +4 -4
- package/esm2022/lib/backdrop/backdrop.service.mjs +3 -3
- package/esm2022/lib/badge/badge.component.mjs +3 -3
- package/esm2022/lib/badge/badge.module.mjs +4 -4
- package/esm2022/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +3 -3
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +3 -3
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +3 -3
- package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +4 -4
- package/esm2022/lib/button/button-close.directive.mjs +3 -3
- package/esm2022/lib/button/button.directive.mjs +3 -3
- package/esm2022/lib/button/button.module.mjs +4 -4
- package/esm2022/lib/button-group/button-group/button-group.component.mjs +3 -3
- package/esm2022/lib/button-group/button-group.module.mjs +4 -4
- package/esm2022/lib/button-group/button-toolbar/button-toolbar.component.mjs +3 -3
- package/esm2022/lib/calendar/calendar/calendar-class-view.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar/calendar.component.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-class-row.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-day-title.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-day.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-row.directive.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +3 -3
- package/esm2022/lib/calendar/calendar.module.mjs +4 -4
- package/esm2022/lib/calendar/calendar.service.mjs +3 -3
- package/esm2022/lib/callout/callout.component.mjs +3 -3
- package/esm2022/lib/callout/callout.module.mjs +4 -4
- package/esm2022/lib/card/card-body.component.mjs +3 -3
- package/esm2022/lib/card/card-footer.component.mjs +3 -3
- package/esm2022/lib/card/card-group.component.mjs +3 -3
- package/esm2022/lib/card/card-header-actions.component.mjs +3 -3
- package/esm2022/lib/card/card-header.component.mjs +3 -3
- package/esm2022/lib/card/card-img-overlay/card-img-overlay.component.mjs +3 -3
- package/esm2022/lib/card/card-img.directive.mjs +3 -3
- package/esm2022/lib/card/card-link.directive.mjs +3 -3
- package/esm2022/lib/card/card-subtitle.directive.mjs +3 -3
- package/esm2022/lib/card/card-text.directive.mjs +3 -3
- package/esm2022/lib/card/card-title.directive.mjs +3 -3
- package/esm2022/lib/card/card.component.mjs +3 -3
- package/esm2022/lib/card/card.module.mjs +4 -4
- package/esm2022/lib/carousel/carousel/carousel.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-caption/carousel-caption.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-control/carousel-control.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-inner/carousel-inner.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-item/carousel-item.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-state.mjs +3 -3
- package/esm2022/lib/carousel/carousel.config.mjs +3 -3
- package/esm2022/lib/carousel/carousel.module.mjs +4 -4
- package/esm2022/lib/carousel/carousel.service.mjs +3 -3
- package/esm2022/lib/collapse/collapse.directive.mjs +3 -3
- package/esm2022/lib/collapse/collapse.module.mjs +4 -4
- package/esm2022/lib/coreui.types.mjs +1 -1
- package/esm2022/lib/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/lib/date-picker/date-picker.module.mjs +4 -4
- package/esm2022/lib/date-range-picker/date-range-picker/custom-range-key.pipe.mjs +3 -3
- package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +3 -3
- package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +4 -4
- package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +6 -6
- package/esm2022/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown.module.mjs +4 -4
- package/esm2022/lib/dropdown/dropdown.service.mjs +3 -3
- package/esm2022/lib/element-cover/element-cover.component.mjs +3 -3
- package/esm2022/lib/element-cover/element-cover.module.mjs +4 -4
- package/esm2022/lib/footer/footer.component.mjs +3 -3
- package/esm2022/lib/footer/footer.module.mjs +4 -4
- package/esm2022/lib/form/form/form.directive.mjs +3 -3
- package/esm2022/lib/form/form-check/form-check-input.directive.mjs +3 -3
- package/esm2022/lib/form/form-check/form-check-label.directive.mjs +3 -3
- package/esm2022/lib/form/form-check/form-check.component.mjs +3 -3
- package/esm2022/lib/form/form-control/form-control.directive.mjs +3 -3
- package/esm2022/lib/form/form-feedback/form-feedback.component.mjs +3 -3
- package/esm2022/lib/form/form-floating/form-floating.directive.mjs +3 -3
- package/esm2022/lib/form/form-label/form-label.directive.mjs +3 -3
- package/esm2022/lib/form/form-select/form-select.directive.mjs +3 -3
- package/esm2022/lib/form/form-text/form-text.directive.mjs +3 -3
- package/esm2022/lib/form/form.module.mjs +4 -4
- package/esm2022/lib/form/input-group/input-group.component.mjs +3 -3
- package/esm2022/lib/form/input-group-text/input-group-text.directive.mjs +3 -3
- package/esm2022/lib/grid/col.component.mjs +3 -3
- package/esm2022/lib/grid/col.directive.mjs +3 -3
- package/esm2022/lib/grid/container.component.mjs +3 -3
- package/esm2022/lib/grid/grid.module.mjs +4 -4
- package/esm2022/lib/grid/gutter.directive.mjs +3 -3
- package/esm2022/lib/grid/row.component.mjs +3 -3
- package/esm2022/lib/grid/row.directive.mjs +3 -3
- package/esm2022/lib/header/header/header.component.mjs +3 -3
- package/esm2022/lib/header/header-brand/header-brand.component.mjs +3 -3
- package/esm2022/lib/header/header-divider/header-divider.component.mjs +3 -3
- package/esm2022/lib/header/header-nav/header-nav.component.mjs +3 -3
- package/esm2022/lib/header/header-text/header-text.component.mjs +3 -3
- package/esm2022/lib/header/header-toggler/header-toggler.directive.mjs +3 -3
- package/esm2022/lib/header/header.module.mjs +4 -4
- package/esm2022/lib/image/img.directive.mjs +3 -3
- package/esm2022/lib/image/img.module.mjs +4 -4
- package/esm2022/lib/list-group/list-group-item.directive.mjs +3 -3
- package/esm2022/lib/list-group/list-group.directive.mjs +3 -3
- package/esm2022/lib/list-group/list-group.module.mjs +4 -4
- package/esm2022/lib/loading-button/loading-button.component.mjs +3 -3
- package/esm2022/lib/loading-button/loading-button.module.mjs +4 -4
- package/esm2022/lib/modal/modal/modal.component.mjs +3 -3
- package/esm2022/lib/modal/modal-body/modal-body.component.mjs +3 -3
- package/esm2022/lib/modal/modal-content/modal-content.component.mjs +3 -3
- package/esm2022/lib/modal/modal-dialog/modal-dialog.component.mjs +3 -3
- package/esm2022/lib/modal/modal-dismiss/modal-toggle.directive.mjs +3 -3
- package/esm2022/lib/modal/modal-footer/modal-footer.component.mjs +3 -3
- package/esm2022/lib/modal/modal-header/modal-header.component.mjs +3 -3
- package/esm2022/lib/modal/modal-title/modal-title.directive.mjs +3 -3
- package/esm2022/lib/modal/modal.module.mjs +4 -4
- package/esm2022/lib/modal/modal.service.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select/multi-select-search.directive.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select-option/multi-select-option.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select.module.mjs +4 -4
- package/esm2022/lib/multi-select/multi-select.service.mjs +3 -3
- package/esm2022/lib/nav/nav-item.component.mjs +3 -3
- package/esm2022/lib/nav/nav-link.directive.mjs +3 -3
- package/esm2022/lib/nav/nav.component.mjs +3 -3
- package/esm2022/lib/nav/nav.module.mjs +4 -4
- package/esm2022/lib/navbar/navbar-brand/navbar-brand.directive.mjs +3 -3
- package/esm2022/lib/navbar/navbar-nav/navbar-nav.component.mjs +3 -3
- package/esm2022/lib/navbar/navbar-text/navbar-text.component.mjs +3 -3
- package/esm2022/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +3 -3
- package/esm2022/lib/navbar/navbar.component.mjs +3 -3
- package/esm2022/lib/navbar/navbar.module.mjs +4 -4
- package/esm2022/lib/offcanvas/offcanvas/offcanvas.component.mjs +3 -3
- package/esm2022/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +3 -3
- package/esm2022/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +3 -3
- package/esm2022/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +3 -3
- package/esm2022/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +3 -3
- package/esm2022/lib/offcanvas/offcanvas.module.mjs +4 -4
- package/esm2022/lib/offcanvas/offcanvas.service.mjs +3 -3
- package/esm2022/lib/pagination/page-item/page-item.component.mjs +3 -3
- package/esm2022/lib/pagination/page-item/page-item.directive.mjs +3 -3
- package/esm2022/lib/pagination/page-link/page-link.directive.mjs +3 -3
- package/esm2022/lib/pagination/pagination/pagination.component.mjs +3 -3
- package/esm2022/lib/pagination/pagination.module.mjs +4 -4
- package/esm2022/lib/placeholder/placeholder-animation.directive.mjs +3 -3
- package/esm2022/lib/placeholder/placeholder.directive.mjs +3 -3
- package/esm2022/lib/placeholder/placeholder.module.mjs +4 -4
- package/esm2022/lib/popover/popover/popover.component.mjs +3 -3
- package/esm2022/lib/popover/popover.directive.mjs +3 -3
- package/esm2022/lib/popover/popover.module.mjs +4 -4
- package/esm2022/lib/progress/progress-bar.component.mjs +3 -3
- package/esm2022/lib/progress/progress-bar.directive.mjs +3 -3
- package/esm2022/lib/progress/progress-stacked.component.mjs +3 -3
- package/esm2022/lib/progress/progress.component.mjs +3 -3
- package/esm2022/lib/progress/progress.module.mjs +4 -4
- package/esm2022/lib/rating/rating-item-label/rating-item-label.component.mjs +40 -0
- package/esm2022/lib/rating/rating.component.mjs +224 -59
- package/esm2022/lib/rating/rating.module.mjs +4 -4
- package/esm2022/lib/services/class-toggle.service.mjs +3 -3
- package/esm2022/lib/services/color-mode.service.mjs +3 -3
- package/esm2022/lib/services/in-memory-storage.service.mjs +3 -3
- package/esm2022/lib/services/intersection.service.mjs +3 -3
- package/esm2022/lib/services/listeners.service.mjs +25 -14
- package/esm2022/lib/services/local-storage.service.mjs +3 -3
- package/esm2022/lib/shared/element-ref.directive.mjs +18 -0
- package/esm2022/lib/shared/html-attr.directive.mjs +3 -3
- package/esm2022/lib/shared/public_api.mjs +3 -2
- package/esm2022/lib/shared/shared.module.mjs +9 -8
- package/esm2022/lib/shared/template-id.directive.mjs +9 -9
- package/esm2022/lib/shared/theme.directive.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-header/sidebar-header.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-group.service.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +6 -6
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +6 -6
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +6 -6
- package/esm2022/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-toggler/sidebar-toggler.directive.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar.module.mjs +4 -4
- package/esm2022/lib/sidebar/sidebar.service.mjs +3 -3
- package/esm2022/lib/smart-pagination/smart-pagination.component.mjs +3 -3
- package/esm2022/lib/smart-pagination/smart-pagination.module.mjs +4 -4
- package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table-filter/filter-input.directive.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table-head/smart-table-column-label.pipe.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table.module.mjs +4 -4
- package/esm2022/lib/spinner/spinner.component.mjs +3 -3
- package/esm2022/lib/spinner/spinner.module.mjs +4 -4
- package/esm2022/lib/table/table-active.directive.mjs +3 -3
- package/esm2022/lib/table/table-color.directive.mjs +3 -3
- package/esm2022/lib/table/table.directive.mjs +3 -3
- package/esm2022/lib/table/table.module.mjs +4 -4
- package/esm2022/lib/tabs/tab-content/tab-content.component.mjs +3 -3
- package/esm2022/lib/tabs/tab-content-ref.directive.mjs +3 -3
- package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +3 -3
- package/esm2022/lib/tabs/tab.service.mjs +3 -3
- package/esm2022/lib/tabs/tabs.module.mjs +4 -4
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +6 -6
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +6 -6
- package/esm2022/lib/time-picker/time-picker.component.mjs +3 -3
- package/esm2022/lib/time-picker/time-picker.module.mjs +4 -4
- package/esm2022/lib/toast/toast/toast.component.mjs +3 -3
- package/esm2022/lib/toast/toast-body/toast-body.component.mjs +3 -3
- package/esm2022/lib/toast/toast-close.directive.mjs +3 -3
- package/esm2022/lib/toast/toast-header/toast-header.component.mjs +3 -3
- package/esm2022/lib/toast/toast.module.mjs +4 -4
- package/esm2022/lib/toast/toaster/toaster-host.directive.mjs +3 -3
- package/esm2022/lib/toast/toaster/toaster.component.mjs +3 -3
- package/esm2022/lib/toast/toaster/toaster.service.mjs +3 -3
- package/esm2022/lib/tooltip/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/lib/tooltip/tooltip.directive.mjs +77 -81
- package/esm2022/lib/tooltip/tooltip.module.mjs +4 -4
- package/esm2022/lib/utilities/align.directive.mjs +3 -3
- package/esm2022/lib/utilities/bg-color.directive.mjs +3 -3
- package/esm2022/lib/utilities/border.directive.mjs +3 -3
- package/esm2022/lib/utilities/rounded.directive.mjs +3 -3
- package/esm2022/lib/utilities/shadow-on-scroll.directive.mjs +3 -3
- package/esm2022/lib/utilities/text-bg-color.directive.mjs +3 -3
- package/esm2022/lib/utilities/text-color.directive.mjs +3 -3
- package/esm2022/lib/utilities/utilities.module.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +3 -3
- package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +3 -3
- package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +3 -3
- package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +3 -3
- package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +3 -3
- package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +3 -3
- package/esm2022/lib/widget/widget.module.mjs +4 -4
- package/fesm2022/coreui-angular-pro.mjs +1192 -966
- package/fesm2022/coreui-angular-pro.mjs.map +1 -1
- package/lib/coreui.types.d.ts +1 -1
- package/lib/rating/rating-item-label/rating-item-label.component.d.ts +13 -0
- package/lib/rating/rating.component.d.ts +80 -7
- package/lib/services/listeners.service.d.ts +2 -3
- package/lib/shared/element-ref.directive.d.ts +7 -0
- package/lib/shared/public_api.d.ts +2 -1
- package/lib/shared/shared.module.d.ts +5 -4
- package/lib/shared/template-id.directive.d.ts +1 -2
- package/lib/tooltip/tooltip.directive.d.ts +30 -16
- package/package.json +3 -3
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, Renderer2, signal } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class RatingItemLabelComponent {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.#elementRef = inject(ElementRef);
|
|
6
|
+
this.#renderer = inject(Renderer2);
|
|
7
|
+
this.label = input('');
|
|
8
|
+
this.value = input.required();
|
|
9
|
+
this.focusable = signal(false);
|
|
10
|
+
this.focusableEffect = effect(() => {
|
|
11
|
+
this.#renderer.setAttribute(this.#elementRef.nativeElement, 'tabindex', this.focusable() ? '0' : '-1');
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
#elementRef;
|
|
15
|
+
#renderer;
|
|
16
|
+
// @HostBinding('attr.tabindex')
|
|
17
|
+
// get tabIndex() {
|
|
18
|
+
// // console.log('active', this.active(), this.active() ? '0' : '-1')
|
|
19
|
+
// console.log('focusable', this.value(), this.focusable(), this.focusable() ? '0' : '-1');
|
|
20
|
+
// return this.focusable() ? '0' : '-1';
|
|
21
|
+
// }
|
|
22
|
+
focus(origin) {
|
|
23
|
+
this.#elementRef.nativeElement.focus();
|
|
24
|
+
}
|
|
25
|
+
getLabel() {
|
|
26
|
+
return this.label() || this.value().toString();
|
|
27
|
+
}
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RatingItemLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: RatingItemLabelComponent, isStandalone: true, selector: "c-rating-item-label", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RatingItemLabelComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{
|
|
34
|
+
selector: 'c-rating-item-label',
|
|
35
|
+
standalone: true,
|
|
36
|
+
template: '<ng-content />',
|
|
37
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
38
|
+
}]
|
|
39
|
+
}] });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLWl0ZW0tbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9yYXRpbmcvcmF0aW5nLWl0ZW0tbGFiZWwvcmF0aW5nLWl0ZW0tbGFiZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBU3pILE1BQU0sT0FBTyx3QkFBd0I7SUFOckM7UUFPVyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLFVBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLG9CQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pHLENBQUMsQ0FBQyxDQUFDO0tBZ0JKO0lBeEJVLFdBQVcsQ0FBc0I7SUFDakMsU0FBUyxDQUFxQjtJQVN2QyxnQ0FBZ0M7SUFDaEMsbUJBQW1CO0lBQ25CLHdFQUF3RTtJQUN4RSw2RkFBNkY7SUFDN0YsMENBQTBDO0lBQzFDLElBQUk7SUFFSixLQUFLLENBQUMsTUFBb0I7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakQsQ0FBQzs4R0F4QlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsMFVBSHpCLGdCQUFnQjs7MkZBR2Ysd0JBQXdCO2tCQU5wQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIFJlbmRlcmVyMiwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb2N1c2FibGVPcHRpb24sIEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLXJhdGluZy1pdGVtLWxhYmVsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudCAvPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBSYXRpbmdJdGVtTGFiZWxDb21wb25lbnQgaW1wbGVtZW50cyBGb2N1c2FibGVPcHRpb24ge1xuICByZWFkb25seSAjZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcmVhZG9ubHkgI3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHJlYWRvbmx5IGxhYmVsID0gaW5wdXQoJycpO1xuICByZWFkb25seSB2YWx1ZSA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgZm9jdXNhYmxlID0gc2lnbmFsKGZhbHNlKTtcblxuICBmb2N1c2FibGVFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd0YWJpbmRleCcsIHRoaXMuZm9jdXNhYmxlKCkgPyAnMCcgOiAnLTEnKTtcbiAgfSk7XG5cbiAgLy8gQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgLy8gZ2V0IHRhYkluZGV4KCkge1xuICAvLyAgIC8vIGNvbnNvbGUubG9nKCdhY3RpdmUnLCB0aGlzLmFjdGl2ZSgpLCB0aGlzLmFjdGl2ZSgpID8gJzAnIDogJy0xJylcbiAgLy8gICBjb25zb2xlLmxvZygnZm9jdXNhYmxlJywgdGhpcy52YWx1ZSgpLCB0aGlzLmZvY3VzYWJsZSgpLCB0aGlzLmZvY3VzYWJsZSgpID8gJzAnIDogJy0xJyk7XG4gIC8vICAgcmV0dXJuIHRoaXMuZm9jdXNhYmxlKCkgPyAnMCcgOiAnLTEnO1xuICAvLyB9XG5cbiAgZm9jdXMob3JpZ2luPzogRm9jdXNPcmlnaW4pOiB2b2lkIHtcbiAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIGdldExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWwoKSB8fCB0aGlzLnZhbHVlKCkudG9TdHJpbmcoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,31 +1,134 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
2
|
+
import { booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChildren, DestroyRef, effect, ElementRef, forwardRef, HostBinding, HostListener, inject, input, model, numberAttribute, output, signal, untracked, viewChildren, } from '@angular/core';
|
|
2
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
4
|
import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
|
|
4
5
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
5
|
-
import { fromEvent, merge } from 'rxjs';
|
|
6
|
+
import { fromEvent, merge, takeWhile } from 'rxjs';
|
|
6
7
|
import { filter, tap } from 'rxjs/operators';
|
|
7
8
|
import { TooltipDirective } from '../tooltip';
|
|
8
|
-
import { TemplateIdDirective } from '../shared';
|
|
9
|
+
import { ElementRefDirective, TemplateIdDirective } from '../shared';
|
|
10
|
+
import { RatingItemLabelComponent } from './rating-item-label/rating-item-label.component';
|
|
9
11
|
import * as i0 from "@angular/core";
|
|
10
12
|
export const coerceStringArray = (value) => Array.isArray(value) ? [...value] : [value];
|
|
11
13
|
export const coerceRatingPrecision = (value) => [1, 0.5, 0.25].includes(numberAttribute(value)) ? numberAttribute(value) : 1;
|
|
14
|
+
export const coerceNumber = (value) => Number(value ?? 0);
|
|
12
15
|
export class RatingComponent {
|
|
13
16
|
constructor() {
|
|
14
|
-
this
|
|
17
|
+
this.#destroyRef = inject(DestroyRef);
|
|
18
|
+
this.#elementRef = inject(ElementRef);
|
|
19
|
+
/**
|
|
20
|
+
* The default icon to display when the item is selected.
|
|
21
|
+
* @type: string | string[]
|
|
22
|
+
*/
|
|
23
|
+
this.activeIcon = input([], {
|
|
24
|
+
transform: coerceStringArray,
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Enables the clearing upon clicking the selected item again.
|
|
28
|
+
* @type: boolean
|
|
29
|
+
* @default: false
|
|
30
|
+
*/
|
|
15
31
|
this.allowClear = input(false, { transform: booleanAttribute });
|
|
32
|
+
/**
|
|
33
|
+
* Toggle the disabled state for the component.
|
|
34
|
+
* @type: boolean
|
|
35
|
+
* @default: false
|
|
36
|
+
*/
|
|
16
37
|
this.disabled = input(false, { transform: booleanAttribute });
|
|
38
|
+
this.#disabledState = signal(this.disabled());
|
|
39
|
+
/**
|
|
40
|
+
* If enabled, only the currently selected icon will be visibly highlighted.
|
|
41
|
+
* @type: boolean
|
|
42
|
+
* @default: false
|
|
43
|
+
*/
|
|
17
44
|
this.highlightOnlySelected = input(false, { transform: booleanAttribute });
|
|
18
|
-
|
|
45
|
+
/**
|
|
46
|
+
* The default icon to display when the item is not selected.
|
|
47
|
+
* @type: string | string[]
|
|
48
|
+
*/
|
|
49
|
+
this.icon = input([], {
|
|
50
|
+
transform: coerceStringArray,
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* Specifies the total number of stars to be displayed in the star rating component. This property determines the scale of the rating,
|
|
54
|
+
* such as out of 5 stars, 10 stars, etc.
|
|
55
|
+
* @type: number
|
|
56
|
+
* @default: 5
|
|
57
|
+
*/
|
|
19
58
|
this.itemCount = input(5, { transform: numberAttribute });
|
|
59
|
+
/**
|
|
60
|
+
* Minimum increment value change allowed.
|
|
61
|
+
* @type: number
|
|
62
|
+
* @default: 1
|
|
63
|
+
*/
|
|
20
64
|
this.precision = input(1, { transform: numberAttribute });
|
|
65
|
+
/**
|
|
66
|
+
* Allows to click fractions
|
|
67
|
+
* @type: boolean
|
|
68
|
+
* @default: false
|
|
69
|
+
*/
|
|
70
|
+
// readonly precisionClick = input(false, { transform: booleanAttribute });
|
|
71
|
+
/**
|
|
72
|
+
* Toggle the readonly state for the component.
|
|
73
|
+
* @type: boolean
|
|
74
|
+
* @default: false
|
|
75
|
+
*/
|
|
21
76
|
this.readOnly = input(false, { transform: booleanAttribute });
|
|
77
|
+
/**
|
|
78
|
+
* Size the component small, large, or custom if you define custom icons with custom height.
|
|
79
|
+
* @type: 'sm' | 'lg' | 'custom' | undefined
|
|
80
|
+
* @default: undefined
|
|
81
|
+
*/
|
|
22
82
|
this.size = input(undefined);
|
|
83
|
+
/**
|
|
84
|
+
* Enable tooltips with default values or set specific labels for each icon.
|
|
85
|
+
* @type: boolean | string[] | undefined
|
|
86
|
+
* @default: undefined
|
|
87
|
+
*/
|
|
23
88
|
this.tooltips = input(undefined);
|
|
89
|
+
/**
|
|
90
|
+
* The `value` attribute of component.
|
|
91
|
+
* @type: number | null
|
|
92
|
+
* @default: null
|
|
93
|
+
* Emits `valueChange` on value change
|
|
94
|
+
*/
|
|
24
95
|
this.value = model(null);
|
|
25
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Event emitted on hoverValue change.
|
|
98
|
+
* @type: number | null
|
|
99
|
+
*/
|
|
26
100
|
this.hoverValue = signal(null);
|
|
101
|
+
this.hoverValueChange = output();
|
|
102
|
+
this.hoverValueEffect = effect(() => {
|
|
103
|
+
this.hoverValueChange.emit(this.hoverValue());
|
|
104
|
+
if (!this.hoverValue()) {
|
|
105
|
+
this.hoveredItem.set(undefined);
|
|
106
|
+
}
|
|
107
|
+
}, { allowSignalWrites: true });
|
|
108
|
+
this.#cleared = signal(false);
|
|
109
|
+
this.hoveredItem = signal(undefined);
|
|
27
110
|
this.tooltipValue = signal(null);
|
|
28
|
-
this.ratingDisabled = computed(() => this.disabled() || this.readOnly());
|
|
111
|
+
this.ratingDisabled = computed(() => this.disabled() || this.readOnly() || this.#disabledState());
|
|
112
|
+
this.ratingDisabledEffect = effect(() => {
|
|
113
|
+
if (!this.ratingDisabled()) {
|
|
114
|
+
const focusIn$ = fromEvent(this.#elementRef.nativeElement, 'focusin');
|
|
115
|
+
const focusOut$ = fromEvent(this.#elementRef.nativeElement, 'focusout');
|
|
116
|
+
const mouseLeave$ = fromEvent(this.#elementRef.nativeElement, 'mouseleave');
|
|
117
|
+
merge(focusIn$, focusOut$, mouseLeave$)
|
|
118
|
+
.pipe(filter((event) => !this.ratingDisabled()), tap(($event) => {
|
|
119
|
+
switch ($event.type) {
|
|
120
|
+
case 'focusin':
|
|
121
|
+
this.onTouched();
|
|
122
|
+
break;
|
|
123
|
+
case 'focusout':
|
|
124
|
+
case 'mouseleave':
|
|
125
|
+
this.hoverValue.set(null);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}), takeWhile(() => !this.ratingDisabled()), takeUntilDestroyed(this.#destroyRef))
|
|
129
|
+
.subscribe();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
29
132
|
this.contentTemplates = contentChildren(TemplateIdDirective);
|
|
30
133
|
this.iconTemplates = computed(() => {
|
|
31
134
|
const templateArray = this.contentTemplates().map((child) => {
|
|
@@ -34,7 +137,6 @@ export class RatingComponent {
|
|
|
34
137
|
return Object.fromEntries(templateArray);
|
|
35
138
|
});
|
|
36
139
|
this.numberOfSubItems = computed(() => {
|
|
37
|
-
// return 1 / this.precision();
|
|
38
140
|
return parseInt((1 / this.precision()).toFixed());
|
|
39
141
|
});
|
|
40
142
|
this.ratingItems = computed(() => {
|
|
@@ -45,33 +147,70 @@ export class RatingComponent {
|
|
|
45
147
|
return Array.from({ length: this.numberOfSubItems() }, (_, subIndex) => itemIndex + (subIndex + 1) * this.precision());
|
|
46
148
|
});
|
|
47
149
|
});
|
|
48
|
-
this
|
|
49
|
-
this
|
|
150
|
+
this.ratingItemLabels = viewChildren(RatingItemLabelComponent);
|
|
151
|
+
this.ratingItemLabelsEffect = effect(() => {
|
|
152
|
+
if (untracked(this.ratingDisabled)) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
this.#focusKeyManager = new FocusKeyManager(this.ratingItemLabels())
|
|
156
|
+
.withHorizontalOrientation('ltr')
|
|
157
|
+
.withWrap();
|
|
158
|
+
const activeItemIndex = this.ratingItems()
|
|
159
|
+
.flat()
|
|
160
|
+
.findIndex((value) => value === coerceNumber(this.value() ?? 0));
|
|
161
|
+
this.#focusKeyManager?.updateActiveItem(activeItemIndex < 0 ? 0 : activeItemIndex);
|
|
162
|
+
this.#focusKeyManager.tabOut
|
|
163
|
+
.pipe(tap((x) => {
|
|
164
|
+
const activeItemIndex = untracked(this.ratingItems)
|
|
165
|
+
.flat()
|
|
166
|
+
.findIndex((value) => value === coerceNumber(untracked(this.value) ?? 0));
|
|
167
|
+
this.#focusKeyManager.updateActiveItem(activeItemIndex === -1 ? 0 : activeItemIndex);
|
|
168
|
+
this.updateFocusableItems();
|
|
169
|
+
}), takeUntilDestroyed(this.#destroyRef))
|
|
170
|
+
.subscribe();
|
|
171
|
+
this.#focusKeyManager.change
|
|
172
|
+
.pipe(tap((value) => {
|
|
173
|
+
this.ratingItemLabels().forEach((label, index) => {
|
|
174
|
+
label.focusable.set(index === this.#focusKeyManager.activeItemIndex);
|
|
175
|
+
if (index === this.#focusKeyManager.activeItemIndex) {
|
|
176
|
+
const value = untracked(label.value);
|
|
177
|
+
this.handleClick(value);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}), takeUntilDestroyed(this.#destroyRef))
|
|
181
|
+
.subscribe();
|
|
182
|
+
}, { allowSignalWrites: true });
|
|
50
183
|
this.onChange = (value) => { };
|
|
51
|
-
this.valueEffect = effect(() => {
|
|
52
|
-
this.onChange(this.value());
|
|
53
|
-
});
|
|
54
184
|
this.onTouched = () => { };
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.hoverValueChange.emit('');
|
|
62
|
-
if ($event.type === 'focusin') {
|
|
63
|
-
this.onTouched();
|
|
185
|
+
// keep it at the bottom of the code
|
|
186
|
+
this.valueEffect = effect(() => {
|
|
187
|
+
const ratingValue = this.value();
|
|
188
|
+
this.onChange(ratingValue);
|
|
189
|
+
if (untracked(this.ratingDisabled)) {
|
|
190
|
+
return;
|
|
64
191
|
}
|
|
65
|
-
|
|
192
|
+
if (untracked(this.#cleared)) {
|
|
193
|
+
this.#cleared.set(false);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const activeItemIndex = this.ratingItems()
|
|
197
|
+
.flat()
|
|
198
|
+
.findIndex((value) => value === coerceNumber(ratingValue ?? 0));
|
|
199
|
+
this.#focusKeyManager?.updateActiveItem(activeItemIndex < 0 ? 0 : activeItemIndex);
|
|
200
|
+
this.updateFocusableItems();
|
|
201
|
+
}, { allowSignalWrites: true });
|
|
66
202
|
}
|
|
67
203
|
#destroyRef;
|
|
68
204
|
#elementRef;
|
|
205
|
+
#disabledState;
|
|
206
|
+
#cleared;
|
|
207
|
+
#focusKeyManager;
|
|
69
208
|
get hostClasses() {
|
|
70
209
|
return {
|
|
71
210
|
rating: true,
|
|
72
211
|
[`rating-${this.size()}`]: this.size(),
|
|
73
|
-
disabled: this.disabled(),
|
|
74
|
-
readonly: this.readOnly()
|
|
212
|
+
disabled: this.disabled() || this.#disabledState(),
|
|
213
|
+
readonly: this.readOnly(),
|
|
75
214
|
};
|
|
76
215
|
}
|
|
77
216
|
get ariaValueNow() {
|
|
@@ -80,22 +219,37 @@ export class RatingComponent {
|
|
|
80
219
|
get ariaValueMax() {
|
|
81
220
|
return this.itemCount();
|
|
82
221
|
}
|
|
83
|
-
|
|
222
|
+
get role() {
|
|
223
|
+
return 'radiogroup';
|
|
224
|
+
}
|
|
225
|
+
onKeydown($event) {
|
|
84
226
|
if (this.ratingDisabled()) {
|
|
85
227
|
return false;
|
|
86
228
|
}
|
|
87
|
-
|
|
229
|
+
if (['Space', 'Enter'].includes($event.code)) {
|
|
230
|
+
$event.preventDefault();
|
|
231
|
+
const item = this.ratingItemLabels().find((label, index) => index === this.#focusKeyManager?.activeItemIndex);
|
|
232
|
+
this.handleClick(item?.value() ?? -1);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes($event.key)) {
|
|
236
|
+
this.#focusKeyManager.onKeydown($event);
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
if (['Tab'].includes($event.key)) {
|
|
240
|
+
this.#focusKeyManager?.tabOut.next();
|
|
241
|
+
}
|
|
88
242
|
return;
|
|
89
243
|
}
|
|
90
244
|
registerOnChange(fn) {
|
|
91
245
|
this.onChange = fn;
|
|
92
246
|
}
|
|
93
|
-
// setDisabledState(isDisabled: boolean): void {
|
|
94
|
-
// this.disabled.set(isDisabled);
|
|
95
|
-
// }
|
|
96
247
|
registerOnTouched(fn) {
|
|
97
248
|
this.onTouched = fn;
|
|
98
249
|
}
|
|
250
|
+
setDisabledState(isDisabled) {
|
|
251
|
+
this.#disabledState.set(isDisabled);
|
|
252
|
+
}
|
|
99
253
|
writeValue(value) {
|
|
100
254
|
this.value.set(value);
|
|
101
255
|
}
|
|
@@ -106,18 +260,21 @@ export class RatingComponent {
|
|
|
106
260
|
notLastItemStyle(value) {
|
|
107
261
|
return {
|
|
108
262
|
zIndex: this.numberOfSubItems() - value,
|
|
109
|
-
// zIndex: 1 / this.precision() - value,
|
|
110
263
|
position: 'absolute',
|
|
111
264
|
width: `${this.precision() * (value + 1) * 100}%`,
|
|
112
265
|
overflow: 'hidden',
|
|
113
|
-
opacity: .1
|
|
266
|
+
opacity: 0.1,
|
|
114
267
|
};
|
|
115
268
|
}
|
|
269
|
+
handleFocusIn($event, itemValue) {
|
|
270
|
+
this.handleMouseEnter($event, itemValue);
|
|
271
|
+
}
|
|
116
272
|
handleClick(value) {
|
|
117
|
-
if (this.
|
|
273
|
+
if (this.ratingDisabled()) {
|
|
118
274
|
return;
|
|
119
275
|
}
|
|
120
276
|
if (this.allowClear() && value === this.value()) {
|
|
277
|
+
this.#cleared.set(true);
|
|
121
278
|
this.value.set(null);
|
|
122
279
|
this.hoverValue.set(null);
|
|
123
280
|
}
|
|
@@ -125,54 +282,59 @@ export class RatingComponent {
|
|
|
125
282
|
this.value.set(value);
|
|
126
283
|
}
|
|
127
284
|
}
|
|
128
|
-
|
|
129
|
-
if (
|
|
130
|
-
this.handleClick(value);
|
|
131
|
-
}
|
|
132
|
-
if ($event.key === 'Tab') {
|
|
133
|
-
this.handleMouseEnter(value);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
handleMouseEnter(value) {
|
|
137
|
-
if (this.disabled() || this.readOnly()) {
|
|
285
|
+
handleMouseEnter($event, value) {
|
|
286
|
+
if (this.ratingDisabled()) {
|
|
138
287
|
return;
|
|
139
288
|
}
|
|
140
289
|
this.hoverValue.set(null);
|
|
141
290
|
this.hoverValue.set(value);
|
|
142
291
|
this.tooltipValue.set(value);
|
|
143
|
-
this.hoverValueChange.emit(value.toString());
|
|
144
292
|
}
|
|
145
293
|
getTooltipValue(index) {
|
|
294
|
+
if (!this.hoverValue() || this.hoveredItem() !== index) {
|
|
295
|
+
return undefined;
|
|
296
|
+
}
|
|
146
297
|
if (Array.isArray(this.tooltips())) {
|
|
147
298
|
const tooltips = this.tooltips();
|
|
148
299
|
return tooltips[index];
|
|
149
300
|
}
|
|
150
|
-
return this.precision()
|
|
301
|
+
return this.precision()
|
|
302
|
+
? this.tooltipValue()?.toString() ?? ''
|
|
303
|
+
: this.ratingItems()
|
|
304
|
+
? (this.ratingItems()[index].at(-1) ?? '').toString()
|
|
305
|
+
: '';
|
|
151
306
|
}
|
|
152
|
-
|
|
153
|
-
|
|
307
|
+
updateFocusableItems() {
|
|
308
|
+
this.ratingItemLabels().forEach((label, index) => {
|
|
309
|
+
label.focusable.set(index === this.#focusKeyManager?.activeItemIndex);
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
313
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: RatingComponent, isStandalone: true, selector: "c-rating", inputs: { activeIcon: { classPropertyName: "activeIcon", publicName: "activeIcon", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, highlightOnlySelected: { classPropertyName: "highlightOnlySelected", publicName: "highlightOnlySelected", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, itemCount: { classPropertyName: "itemCount", publicName: "itemCount", isSignal: true, isRequired: false, transformFunction: null }, precision: { classPropertyName: "precision", publicName: "precision", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tooltips: { classPropertyName: "tooltips", publicName: "tooltips", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", hoverValueChange: "hoverValueChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.hostClasses", "attr.aria-valuenow": "this.ariaValueNow", "attr.aria-valuemax": "this.ariaValueMax", "attr.role": "this.role" } }, providers: [
|
|
154
314
|
{
|
|
155
315
|
provide: NG_VALUE_ACCESSOR,
|
|
156
316
|
useExisting: forwardRef(() => RatingComponent),
|
|
157
|
-
multi: true
|
|
158
|
-
}
|
|
159
|
-
], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, isSignal: true }], exportAs: ["cRating"], ngImport: i0, template: "@for (item of ratingItems(); track item; let itemIndex = $index, last = $last) {\n @if (tooltips()) {\n <div
|
|
317
|
+
multi: true,
|
|
318
|
+
},
|
|
319
|
+
], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, isSignal: true }], viewQueries: [{ propertyName: "ratingItemLabels", predicate: RatingItemLabelComponent, descendants: true, isSignal: true }], exportAs: ["cRating"], ngImport: i0, template: "@for (item of ratingItems(); track item; let itemIndex = $index, last = $last) {\n @if (tooltips()) {\n <div\n class=\"rating-item\"\n [cTooltip]=\"getTooltipValue(itemIndex)\"\n [cTooltipTrigger]=\"['hover', 'focusin']\"\n (mouseenter)=\"hoveredItem.set(itemIndex)\"\n (focusin)=\"hoveredItem.set(itemIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n } @else {\n <div class=\"rating-item\">\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n }\n}\n\n<ng-template let-item let-itemIndex=\"itemIndex\" #ratingItemLabel>\n @for (itemValue of item; track radioIndex; let radioIndex = $index, last = $last) {\n <c-rating-item-label\n class=\"rating-item-label d-inline-block\"\n role=\"radio\"\n (click)=\"handleClick(itemValue)\"\n (focus)=\"handleFocusIn($event, itemValue)\"\n [ngClass]=\"{ active: isItemActive(itemValue) }\"\n (mouseenter)=\"handleMouseEnter($event, itemValue)\"\n [ngStyle]=\"radioIndex + 1 < numberOfSubItems() ? notLastItemStyle(radioIndex) : {}\"\n [value]=\"itemValue\"\n [attr.aria-label]=\"itemValue\"\n [attr.aria-checked]=\"itemValue === value()\"\n >\n @if (iconTemplates()[icon()[itemIndex] ?? icon()]) {\n <ng-container *ngTemplateOutlet=\"customIconTemplate; context: { $implicit: icon()?.[itemIndex] ?? icon() }\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"defaultIconTemplate\" />\n }\n @if (iconTemplates()[activeIcon()[itemIndex] ?? activeIcon()]) {\n <ng-container *ngTemplateOutlet=\"customIconActiveTemplate; context: { $implicit: activeIcon()?.[itemIndex] ?? activeIcon() }\" />\n }\n </c-rating-item-label>\n }\n</ng-template>\n\n<ng-template #tooltipContent>\n <span>{{ hoverValue() }}</span>\n</ng-template>\n\n<ng-template #defaultIconTemplate>\n <div class=\"rating-item-icon\"></div>\n</ng-template>\n\n<ng-template #customIconTemplate let-icon>\n <div class=\"rating-item-custom-icon\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || defaultIconTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #customIconActiveTemplate let-icon>\n <div class=\"rating-item-custom-icon-active\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || customIconTemplate\" />\n </div>\n</ng-template>\n", styles: [":host{display:inline-flex}:is(:host.disabled,:host.readonly) .rating-item-label{cursor:default}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(() => TooltipDirective), selector: "[cTooltip]", inputs: ["cTooltip", "cTooltipOptions", "cTooltipPlacement", "cTooltipRef", "cTooltipTrigger", "cTooltipVisible"], outputs: ["cTooltipVisibleChange"], exportAs: ["cTooltip"] }, { kind: "component", type: i0.forwardRef(() => RatingItemLabelComponent), selector: "c-rating-item-label", inputs: ["label", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
160
320
|
}
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
321
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RatingComponent, decorators: [{
|
|
162
322
|
type: Component,
|
|
163
323
|
args: [{ selector: 'c-rating', exportAs: 'cRating', standalone: true, imports: [
|
|
164
324
|
NgClass,
|
|
165
325
|
NgStyle,
|
|
166
326
|
NgTemplateOutlet,
|
|
167
|
-
forwardRef(() => TooltipDirective)
|
|
327
|
+
forwardRef(() => TooltipDirective),
|
|
328
|
+
ElementRefDirective,
|
|
329
|
+
RatingItemLabelComponent,
|
|
168
330
|
], providers: [
|
|
169
331
|
{
|
|
170
332
|
provide: NG_VALUE_ACCESSOR,
|
|
171
333
|
useExisting: forwardRef(() => RatingComponent),
|
|
172
|
-
multi: true
|
|
173
|
-
}
|
|
174
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (item of ratingItems(); track item; let itemIndex = $index, last = $last) {\n @if (tooltips()) {\n <div
|
|
175
|
-
}],
|
|
334
|
+
multi: true,
|
|
335
|
+
},
|
|
336
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (item of ratingItems(); track item; let itemIndex = $index, last = $last) {\n @if (tooltips()) {\n <div\n class=\"rating-item\"\n [cTooltip]=\"getTooltipValue(itemIndex)\"\n [cTooltipTrigger]=\"['hover', 'focusin']\"\n (mouseenter)=\"hoveredItem.set(itemIndex)\"\n (focusin)=\"hoveredItem.set(itemIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n } @else {\n <div class=\"rating-item\">\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n }\n}\n\n<ng-template let-item let-itemIndex=\"itemIndex\" #ratingItemLabel>\n @for (itemValue of item; track radioIndex; let radioIndex = $index, last = $last) {\n <c-rating-item-label\n class=\"rating-item-label d-inline-block\"\n role=\"radio\"\n (click)=\"handleClick(itemValue)\"\n (focus)=\"handleFocusIn($event, itemValue)\"\n [ngClass]=\"{ active: isItemActive(itemValue) }\"\n (mouseenter)=\"handleMouseEnter($event, itemValue)\"\n [ngStyle]=\"radioIndex + 1 < numberOfSubItems() ? notLastItemStyle(radioIndex) : {}\"\n [value]=\"itemValue\"\n [attr.aria-label]=\"itemValue\"\n [attr.aria-checked]=\"itemValue === value()\"\n >\n @if (iconTemplates()[icon()[itemIndex] ?? icon()]) {\n <ng-container *ngTemplateOutlet=\"customIconTemplate; context: { $implicit: icon()?.[itemIndex] ?? icon() }\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"defaultIconTemplate\" />\n }\n @if (iconTemplates()[activeIcon()[itemIndex] ?? activeIcon()]) {\n <ng-container *ngTemplateOutlet=\"customIconActiveTemplate; context: { $implicit: activeIcon()?.[itemIndex] ?? activeIcon() }\" />\n }\n </c-rating-item-label>\n }\n</ng-template>\n\n<ng-template #tooltipContent>\n <span>{{ hoverValue() }}</span>\n</ng-template>\n\n<ng-template #defaultIconTemplate>\n <div class=\"rating-item-icon\"></div>\n</ng-template>\n\n<ng-template #customIconTemplate let-icon>\n <div class=\"rating-item-custom-icon\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || defaultIconTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #customIconActiveTemplate let-icon>\n <div class=\"rating-item-custom-icon-active\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || customIconTemplate\" />\n </div>\n</ng-template>\n", styles: [":host{display:inline-flex}:is(:host.disabled,:host.readonly) .rating-item-label{cursor:default}\n"] }]
|
|
337
|
+
}], propDecorators: { hostClasses: [{
|
|
176
338
|
type: HostBinding,
|
|
177
339
|
args: ['class']
|
|
178
340
|
}], ariaValueNow: [{
|
|
@@ -181,8 +343,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
181
343
|
}], ariaValueMax: [{
|
|
182
344
|
type: HostBinding,
|
|
183
345
|
args: ['attr.aria-valuemax']
|
|
184
|
-
}],
|
|
346
|
+
}], role: [{
|
|
347
|
+
type: HostBinding,
|
|
348
|
+
args: ['attr.role']
|
|
349
|
+
}], onKeydown: [{
|
|
185
350
|
type: HostListener,
|
|
186
|
-
args: ['
|
|
351
|
+
args: ['keydown', ['$event']]
|
|
187
352
|
}] } });
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvcmF0aW5nL3JhdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3JhdGluZy9yYXRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLE1BQU0sRUFDTixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUVoRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQXdCLEVBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxD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QURkLFdBQVc7dUJBQUMsT0FBTztnQkFXaEIsWUFBWTtzQkFEZixXQUFXO3VCQUFDLG9CQUFvQjtnQkFNN0IsWUFBWTtzQkFEZixXQUFXO3VCQUFDLG9CQUFvQjtnQkFLRSxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIERlc3Ryb3lSZWYsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgSW5wdXRTaWduYWxXaXRoVHJhbnNmb3JtLFxuICBtb2RlbCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBvdXRwdXQsXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vdG9vbHRpcCc7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vc2hhcmVkJztcblxuZXhwb3J0IGNvbnN0IGNvZXJjZVN0cmluZ0FycmF5ID0gKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFt2YWx1ZV07XG5leHBvcnQgY29uc3QgY29lcmNlUmF0aW5nUHJlY2lzaW9uID0gKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIgPT4gWzEsIDAuNSwgMC4yNV0uaW5jbHVkZXMobnVtYmVyQXR0cmlidXRlKHZhbHVlKSkgPyBudW1iZXJBdHRyaWJ1dGUodmFsdWUpIDogMTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1yYXRpbmcnLFxuICBleHBvcnRBczogJ2NSYXRpbmcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBOZ1N0eWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgZm9yd2FyZFJlZigoKSA9PiBUb29sdGlwRGlyZWN0aXZlKVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcmF0aW5nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3JhdGluZy5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmF0aW5nQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBSYXRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbW91c2VMZWF2ZSQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VsZWF2ZScpO1xuICAgIGNvbnN0IGZvY3VzT3V0JCA9IGZyb21FdmVudDxGb2N1c0V2ZW50Pih0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1c291dCcpO1xuICAgIGNvbnN0IGZvY3VzSW4kID0gZnJvbUV2ZW50PEZvY3VzRXZlbnQ+KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZvY3VzaW4nKTtcblxuICAgIG1lcmdlKG1vdXNlTGVhdmUkLCBmb2N1c091dCQsIGZvY3VzSW4kKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+ICF0aGlzLnJhdGluZ0Rpc2FibGVkKCkpLFxuICAgICAgICB0YXAoKCRldmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG92ZXJWYWx1ZS5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5ob3ZlclZhbHVlQ2hhbmdlLmVtaXQoJycpO1xuICAgICAgICAgIGlmICgkZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGFjdGl2ZUljb246IElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybTxzdHJpbmdbXSwgc3RyaW5nIHwgc3RyaW5nW10+ID0gaW5wdXQoW10sIHsgdHJhbnNmb3JtOiBjb2VyY2VTdHJpbmdBcnJheSB9KTtcbiAgcmVhZG9ubHkgYWxsb3dDbGVhciA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIHJlYWRvbmx5IGhpZ2hsaWdodE9ubHlTZWxlY3RlZCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmVhZG9ubHkgaWNvbjogSW5wdXRTaWduYWxXaXRoVHJhbnNmb3JtPHN0cmluZ1tdLCBzdHJpbmcgfCBzdHJpbmdbXT4gPSBpbnB1dChbXSwgeyB0cmFuc2Zvcm06IGNvZXJjZVN0cmluZ0FycmF5IH0pO1xuICByZWFkb25seSBpdGVtQ291bnQgPSBpbnB1dCg1LCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICByZWFkb25seSBwcmVjaXNpb24gPSBpbnB1dCgxLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICByZWFkb25seSByZWFkT25seSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PCdzbScgfCAnbGcnIHwgJ2N1c3RvbScgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHRvb2x0aXBzID0gaW5wdXQ8Ym9vbGVhbiB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSB2YWx1ZSA9IG1vZGVsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGhvdmVyVmFsdWVDaGFuZ2UgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBob3ZlclZhbHVlID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSB0b29sdGlwVmFsdWUgPSBzaWduYWw8c3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJhdGluZ0Rpc2FibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMucmVhZE9ubHkoKSk7XG4gIHJlYWRvbmx5IGNvbnRlbnRUZW1wbGF0ZXMgPSBjb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVJZERpcmVjdGl2ZSk7XG4gIHJlYWRvbmx5IGljb25UZW1wbGF0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGVBcnJheSA9IHRoaXMuY29udGVudFRlbXBsYXRlcygpLm1hcCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcbiAgICAgIHJldHVybiBbW2NoaWxkLmlkXSwgY2hpbGQudGVtcGxhdGVSZWZdO1xuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModGVtcGxhdGVBcnJheSk7XG4gIH0pO1xuICByZWFkb25seSBudW1iZXJPZlN1Ykl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIHJldHVybiAxIC8gdGhpcy5wcmVjaXNpb24oKTtcbiAgICByZXR1cm4gcGFyc2VJbnQoKDEgLyB0aGlzLnByZWNpc2lvbigpKS50b0ZpeGVkKCkpO1xuICB9KTtcbiAgcmVhZG9ubHkgcmF0aW5nSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuaXRlbUNvdW50KCkgfSwgKF8sIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKHRoaXMubnVtYmVyT2ZTdWJJdGVtcygpID09PSAxKSB7XG4gICAgICAgIHJldHVybiBbaXRlbUluZGV4ICsgMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5udW1iZXJPZlN1Ykl0ZW1zKCkgfSwgKF8sIHN1YkluZGV4KSA9PiBpdGVtSW5kZXggKyAoc3ViSW5kZXggKyAxKSAqIHRoaXMucHJlY2lzaW9uKCkpO1xuICAgIH0pO1xuICB9KTtcbiAgcmVhZG9ubHkgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHJlYWRvbmx5ICNlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJhdGluZzogdHJ1ZSxcbiAgICAgIFtgcmF0aW5nLSR7dGhpcy5zaXplKCl9YF06IHRoaXMuc2l6ZSgpLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQoKSxcbiAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRPbmx5KClcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVub3cnKVxuICBnZXQgYXJpYVZhbHVlTm93KCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlKCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1heCcpXG4gIGdldCBhcmlhVmFsdWVNYXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbUNvdW50KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIG9uQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMucmF0aW5nRGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBudW1iZXIgfCBudWxsKSA9PiB7fTtcblxuICByZWFkb25seSB2YWx1ZUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xuICB9KTtcblxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgLy8gICB0aGlzLmRpc2FibGVkLnNldChpc0Rpc2FibGVkKTtcbiAgLy8gfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIGlzSXRlbUFjdGl2ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbG9jYWxWYWx1ZSA9IHRoaXMuaG92ZXJWYWx1ZSgpID8/IHRoaXMudmFsdWUoKSA/PyAtMTtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRPbmx5U2VsZWN0ZWQoKSA/IGxvY2FsVmFsdWUgPT09IHZhbHVlIDogbG9jYWxWYWx1ZSA+PSB2YWx1ZTtcbiAgfVxuXG4gIG5vdExhc3RJdGVtU3R5bGUodmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICB6SW5kZXg6IHRoaXMubnVtYmVyT2ZTdWJJdGVtcygpIC0gdmFsdWUsXG4gICAgICAvLyB6SW5kZXg6IDEgLyB0aGlzLnByZWNpc2lvbigpIC0gdmFsdWUsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHdpZHRoOiBgJHt0aGlzLnByZWNpc2lvbigpICogKHZhbHVlICsgMSkgKiAxMDB9JWAsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICBvcGFjaXR5OiAuMVxuICAgIH07XG4gIH1cblxuICBoYW5kbGVDbGljayh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnJlYWRPbmx5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGxvd0NsZWFyKCkgJiYgdmFsdWUgPT09IHRoaXMudmFsdWUoKSkge1xuICAgICAgdGhpcy52YWx1ZS5zZXQobnVsbCk7XG4gICAgICB0aGlzLmhvdmVyVmFsdWUuc2V0KG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5VXAoJGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2sodmFsdWUpO1xuICAgIH1cbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMuaGFuZGxlTW91c2VFbnRlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTW91c2VFbnRlcih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnJlYWRPbmx5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ob3ZlclZhbHVlLnNldChudWxsKTtcbiAgICB0aGlzLmhvdmVyVmFsdWUuc2V0KHZhbHVlKTtcbiAgICB0aGlzLnRvb2x0aXBWYWx1ZS5zZXQodmFsdWUpO1xuICAgIHRoaXMuaG92ZXJWYWx1ZUNoYW5nZS5lbWl0KHZhbHVlLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgZ2V0VG9vbHRpcFZhbHVlKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudG9vbHRpcHMoKSkpIHtcbiAgICAgIGNvbnN0IHRvb2x0aXBzID0gdGhpcy50b29sdGlwcygpIGFzIEFycmF5PHN0cmluZz47XG4gICAgICByZXR1cm4gdG9vbHRpcHNbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcmVjaXNpb24oKSA/IHRoaXMudG9vbHRpcFZhbHVlKCk/LnRvU3RyaW5nKCkgPz8gJycgOiB0aGlzLnJhdGluZ0l0ZW1zKCkgPyAodGhpcy5yYXRpbmdJdGVtcygpW2luZGV4XS5hdCgtMSkgPz8gJycpLnRvU3RyaW5nKCkgOiAnJztcbiAgfVxufVxuIiwiQGZvciAoaXRlbSBvZiByYXRpbmdJdGVtcygpOyB0cmFjayBpdGVtOyBsZXQgaXRlbUluZGV4ID0gJGluZGV4LCBsYXN0ID0gJGxhc3QpIHtcbiAgQGlmICh0b29sdGlwcygpKSB7XG4gICAgPGRpdiBjbGFzcz1cInJhdGluZy1pdGVtXCIgW2NUb29sdGlwXT1cImdldFRvb2x0aXBWYWx1ZShpdGVtSW5kZXgpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmF0aW5nSXRlbUxhYmVsOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBpdGVtSW5kZXh9XCIgLz5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInJhdGluZy1pdGVtXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmF0aW5nSXRlbUxhYmVsOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBpdGVtSW5kZXh9XCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxufVxuXG48bmctdGVtcGxhdGUgbGV0LWl0ZW0gbGV0LWl0ZW1JbmRleD1cIml0ZW1JbmRleFwiICNyYXRpbmdJdGVtTGFiZWw+XG4gIEBmb3IgKGl0ZW1WYWx1ZSBvZiBpdGVtOyB0cmFjayByYWRpb0luZGV4OyBsZXQgcmFkaW9JbmRleCA9ICRpbmRleCwgbGFzdCA9ICRsYXN0KSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyYXRpbmctaXRlbS1sYWJlbCBkLWlubGluZS1ibG9ja1wiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soaXRlbVZhbHVlKVwiXG4gICAgICAoa2V5dXApPVwiaGFuZGxlS2V5VXAoJGV2ZW50LCBpdGVtVmFsdWUpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBpc0l0ZW1BY3RpdmUoaXRlbVZhbHVlKSB9XCJcbiAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZU1vdXNlRW50ZXIoaXRlbVZhbHVlKVwiXG4gICAgICBbbmdTdHlsZV09XCJyYWRpb0luZGV4ICsgMSA8IG51bWJlck9mU3ViSXRlbXMoKSA/IG5vdExhc3RJdGVtU3R5bGUocmFkaW9JbmRleCkgOiB7fVwiXG4gICAgICBbdGFiaW5kZXhdPVwicmF0aW5nRGlzYWJsZWQoKSA/IC0xIDogMFwiXG4gICAgPlxuICAgICAgQGlmIChpY29uVGVtcGxhdGVzKClbaWNvbigpW2l0ZW1JbmRleF0gPz8gaWNvbigpXSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpY29uKCk/LltpdGVtSW5kZXhdID8/IGljb24oKX1cIiAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0SWNvblRlbXBsYXRlXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAoaWNvblRlbXBsYXRlcygpW2FjdGl2ZUljb24oKVtpdGVtSW5kZXhdID8/IGFjdGl2ZUljb24oKV0pIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tSWNvbkFjdGl2ZVRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBhY3RpdmVJY29uKCk/LltpdGVtSW5kZXhdID8/IGFjdGl2ZUljb24oKX1cIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rvb2x0aXBDb250ZW50PlxuICA8c3Bhbj57eyBob3ZlclZhbHVlKCkgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJY29uVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJyYXRpbmctaXRlbS1pY29uXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbUljb25UZW1wbGF0ZSBsZXQtaWNvbj5cbiAgPGRpdiBjbGFzcz1cInJhdGluZy1pdGVtLWN1c3RvbS1pY29uXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZXMoKT8uW2ljb25dIHx8IGRlZmF1bHRJY29uVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tSWNvbkFjdGl2ZVRlbXBsYXRlIGxldC1pY29uPlxuICA8ZGl2IGNsYXNzPVwicmF0aW5nLWl0ZW0tY3VzdG9tLWljb24tYWN0aXZlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZXMoKT8uW2ljb25dIHx8IGN1c3RvbUljb25UZW1wbGF0ZVwiIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvcmF0aW5nL3JhdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3JhdGluZy9yYXRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUNmLFVBQVUsRUFDVixNQUFNLEVBQ04sVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsS0FBSyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyRSxPQUFPLEVBQUUs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QUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDJEQWtKMkMsbUJBQW1CLGtGQXlCdEIsd0JBQXdCLHVGQ3JPbkUsdzZFQStEQSwrS0RwQkksT0FBTyx5R0FDUCxPQUFPLGdHQUNQLGdCQUFnQix5S0FDQyxnQkFBZ0IsMlBBRWpDLHdCQUF3Qjs7MkZBYWYsZUFBZTtrQkF2QjNCLFNBQVM7K0JBQ0UsVUFBVSxZQUNWLFNBQVMsY0FDUCxJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO3dCQUNsQyxtQkFBbUI7d0JBQ25CLHdCQUF3QjtxQkFDekIsYUFHVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQzs0QkFDOUMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OEJBNk4zQyxXQUFXO3NCQURkLFdBQVc7dUJBQUMsT0FBTztnQkFXaEIsWUFBWTtzQkFEZixXQUFXO3VCQUFDLG9CQUFvQjtnQkFNN0IsWUFBWTtzQkFEZixXQUFXO3VCQUFDLG9CQUFvQjtnQkFNN0IsSUFBSTtzQkFEUCxXQUFXO3VCQUFDLFdBQVc7Z0JBTXhCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkcmVuLFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybSxcbiAgbW9kZWwsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbiAgdmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi90b29sdGlwJztcbmltcG9ydCB7IEVsZW1lbnRSZWZEaXJlY3RpdmUsIFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgUmF0aW5nSXRlbUxhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi9yYXRpbmctaXRlbS1sYWJlbC9yYXRpbmctaXRlbS1sYWJlbC5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgY29lcmNlU3RyaW5nQXJyYXkgPSAodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10gPT5cbiAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW3ZhbHVlXTtcbmV4cG9ydCBjb25zdCBjb2VyY2VSYXRpbmdQcmVjaXNpb24gPSAodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciA9PlxuICBbMSwgMC41LCAwLjI1XS5pbmNsdWRlcyhudW1iZXJBdHRyaWJ1dGUodmFsdWUpKSA/IG51bWJlckF0dHJpYnV0ZSh2YWx1ZSkgOiAxO1xuZXhwb3J0IGNvbnN0IGNvZXJjZU51bWJlciA9ICh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCk6IG51bWJlciA9PiBOdW1iZXIodmFsdWUgPz8gMCk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtcmF0aW5nJyxcbiAgZXhwb3J0QXM6ICdjUmF0aW5nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgTmdTdHlsZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIGZvcndhcmRSZWYoKCkgPT4gVG9vbHRpcERpcmVjdGl2ZSksXG4gICAgRWxlbWVudFJlZkRpcmVjdGl2ZSxcbiAgICBSYXRpbmdJdGVtTGFiZWxDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yYXRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcmF0aW5nLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYXRpbmdDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJhdGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcmVhZG9ubHkgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHJlYWRvbmx5ICNlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpY29uIHRvIGRpc3BsYXkgd2hlbiB0aGUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICogQHR5cGU6IHN0cmluZyB8IHN0cmluZ1tdXG4gICAqL1xuICByZWFkb25seSBhY3RpdmVJY29uOiBJbnB1dFNpZ25hbFdpdGhUcmFuc2Zvcm08c3RyaW5nW10sIHN0cmluZyB8IHN0cmluZ1tdPiA9IGlucHV0KFtdLCB7XG4gICAgdHJhbnNmb3JtOiBjb2VyY2VTdHJpbmdBcnJheSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIGNsZWFyaW5nIHVwb24gY2xpY2tpbmcgdGhlIHNlbGVjdGVkIGl0ZW0gYWdhaW4uXG4gICAqIEB0eXBlOiBib29sZWFuXG4gICAqIEBkZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dDbGVhciA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBkaXNhYmxlZCBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGU6IGJvb2xlYW5cbiAgICogQGRlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmVhZG9ubHkgI2Rpc2FibGVkU3RhdGUgPSBzaWduYWwodGhpcy5kaXNhYmxlZCgpKTtcblxuICAvKipcbiAgICogSWYgZW5hYmxlZCwgb25seSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGljb24gd2lsbCBiZSB2aXNpYmx5IGhpZ2hsaWdodGVkLlxuICAgKiBAdHlwZTogYm9vbGVhblxuICAgKiBAZGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGhpZ2hsaWdodE9ubHlTZWxlY3RlZCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGl0ZW0gaXMgbm90IHNlbGVjdGVkLlxuICAgKiBAdHlwZTogc3RyaW5nIHwgc3RyaW5nW11cbiAgICovXG4gIHJlYWRvbmx5IGljb246IElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybTxzdHJpbmdbXSwgc3RyaW5nIHwgc3RyaW5nW10+ID0gaW5wdXQoW10sIHtcbiAgICB0cmFuc2Zvcm06IGNvZXJjZVN0cmluZ0FycmF5LFxuICB9KTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3RhcnMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBzdGFyIHJhdGluZyBjb21wb25lbnQuIFRoaXMgcHJvcGVydHkgZGV0ZXJtaW5lcyB0aGUgc2NhbGUgb2YgdGhlIHJhdGluZyxcbiAgICogc3VjaCBhcyBvdXQgb2YgNSBzdGFycywgMTAgc3RhcnMsIGV0Yy5cbiAgICogQHR5cGU6IG51bWJlclxuICAgKiBAZGVmYXVsdDogNVxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbUNvdW50ID0gaW5wdXQoNSwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcblxuICAvKipcbiAgICogTWluaW11bSBpbmNyZW1lbnQgdmFsdWUgY2hhbmdlIGFsbG93ZWQuXG4gICAqIEB0eXBlOiBudW1iZXJcbiAgICogQGRlZmF1bHQ6IDFcbiAgICovXG4gIHJlYWRvbmx5IHByZWNpc2lvbiA9IGlucHV0KDEsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0byBjbGljayBmcmFjdGlvbnNcbiAgICogQHR5cGU6IGJvb2xlYW5cbiAgICogQGRlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICAvLyByZWFkb25seSBwcmVjaXNpb25DbGljayA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSByZWFkb25seSBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGU6IGJvb2xlYW5cbiAgICogQGRlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWFkT25seSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAvKipcbiAgICogU2l6ZSB0aGUgY29tcG9uZW50IHNtYWxsLCBsYXJnZSwgb3IgY3VzdG9tIGlmIHlvdSBkZWZpbmUgY3VzdG9tIGljb25zIHdpdGggY3VzdG9tIGhlaWdodC5cbiAgICogQHR5cGU6ICdzbScgfCAnbGcnIHwgJ2N1c3RvbScgfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PCdzbScgfCAnbGcnIHwgJ2N1c3RvbScgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0b29sdGlwcyB3aXRoIGRlZmF1bHQgdmFsdWVzIG9yIHNldCBzcGVjaWZpYyBsYWJlbHMgZm9yIGVhY2ggaWNvbi5cbiAgICogQHR5cGU6IGJvb2xlYW4gfCBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICAgKiBAZGVmYXVsdDogdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSB0b29sdGlwcyA9IGlucHV0PGJvb2xlYW4gfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogVGhlIGB2YWx1ZWAgYXR0cmlidXRlIG9mIGNvbXBvbmVudC5cbiAgICogQHR5cGU6IG51bWJlciB8IG51bGxcbiAgICogQGRlZmF1bHQ6IG51bGxcbiAgICogRW1pdHMgYHZhbHVlQ2hhbmdlYCBvbiB2YWx1ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlID0gbW9kZWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgb24gaG92ZXJWYWx1ZSBjaGFuZ2UuXG4gICAqIEB0eXBlOiBudW1iZXIgfCBudWxsXG4gICAqL1xuICByZWFkb25seSBob3ZlclZhbHVlID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBob3ZlclZhbHVlQ2hhbmdlID0gb3V0cHV0PG51bWJlciB8IG51bGw+KCk7XG4gIHJlYWRvbmx5IGhvdmVyVmFsdWVFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgdGhpcy5ob3ZlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5ob3ZlclZhbHVlKCkpO1xuICAgICAgaWYgKCF0aGlzLmhvdmVyVmFsdWUoKSkge1xuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLnNldCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIHJlYWRvbmx5ICNjbGVhcmVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaG92ZXJlZEl0ZW0gPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSB0b29sdGlwVmFsdWUgPSBzaWduYWw8c3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgcmF0aW5nRGlzYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPihcbiAgICAoKSA9PiB0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpIHx8IHRoaXMuI2Rpc2FibGVkU3RhdGUoKSxcbiAgKTtcbiAgcmVhZG9ubHkgcmF0aW5nRGlzYWJsZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGlmICghdGhpcy5yYXRpbmdEaXNhYmxlZCgpKSB7XG4gICAgICBjb25zdCBmb2N1c0luJCA9IGZyb21FdmVudDxGb2N1c0V2ZW50Pih0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1c2luJyk7XG4gICAgICBjb25zdCBmb2N1c091dCQgPSBmcm9tRXZlbnQ8Rm9jdXNFdmVudD4odGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZm9jdXNvdXQnKTtcbiAgICAgIGNvbnN0IG1vdXNlTGVhdmUkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKTtcblxuICAgICAgbWVyZ2UoZm9jdXNJbiQsIGZvY3VzT3V0JCwgbW91c2VMZWF2ZSQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+ICF0aGlzLnJhdGluZ0Rpc2FibGVkKCkpLFxuICAgICAgICAgIHRhcCgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKCRldmVudC50eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgICAgICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlclZhbHVlLnNldChudWxsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlV2hpbGUoKCkgPT4gIXRoaXMucmF0aW5nRGlzYWJsZWQoKSksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnRUZW1wbGF0ZXMgPSBjb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVJZERpcmVjdGl2ZSk7XG5cbiAgcmVhZG9ubHkgaWNvblRlbXBsYXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZUFycmF5ID0gdGhpcy5jb250ZW50VGVtcGxhdGVzKCkubWFwKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgcmV0dXJuIFtbY2hpbGQuaWRdLCBjaGlsZC50ZW1wbGF0ZVJlZl07XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh0ZW1wbGF0ZUFycmF5KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbnVtYmVyT2ZTdWJJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gcGFyc2VJbnQoKDEgLyB0aGlzLnByZWNpc2lvbigpKS50b0ZpeGVkKCkpO1xuICB9KTtcblxuICByZWFkb25seSByYXRpbmdJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5pdGVtQ291bnQoKSB9LCAoXywgaXRlbUluZGV4KSA9PiB7XG4gICAgICBpZiAodGhpcy5udW1iZXJPZlN1Ykl0ZW1zKCkgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIFtpdGVtSW5kZXggKyAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICB7IGxlbmd0aDogdGhpcy5udW1iZXJPZlN1Ykl0ZW1zKCkgfSxcbiAgICAgICAgKF8sIHN1YkluZGV4KSA9PiBpdGVtSW5kZXggKyAoc3ViSW5kZXggKyAxKSAqIHRoaXMucHJlY2lzaW9uKCksXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSByYXRpbmdJdGVtTGFiZWxzID0gdmlld0NoaWxkcmVuKFJhdGluZ0l0ZW1MYWJlbENvbXBvbmVudCk7XG4gICNmb2N1c0tleU1hbmFnZXIhOiBGb2N1c0tleU1hbmFnZXI8UmF0aW5nSXRlbUxhYmVsQ29tcG9uZW50PjtcblxuICByZWFkb25seSByYXRpbmdJdGVtTGFiZWxzRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGlmICh1bnRyYWNrZWQodGhpcy5yYXRpbmdEaXNhYmxlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy4jZm9jdXNLZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLnJhdGluZ0l0ZW1MYWJlbHMoKSlcbiAgICAgICAgLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24oJ2x0cicpXG4gICAgICAgIC53aXRoV3JhcCgpO1xuXG4gICAgICBjb25zdCBhY3RpdmVJdGVtSW5kZXggPSB0aGlzLnJhdGluZ0l0ZW1zKClcbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUgPT09IGNvZXJjZU51bWJlcih0aGlzLnZhbHVlKCkgPz8gMCkpO1xuXG4gICAgICB0aGlzLiNmb2N1c0tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4IDwgMCA/IDAgOiBhY3RpdmVJdGVtSW5kZXgpO1xuXG4gICAgICB0aGlzLiNmb2N1c0tleU1hbmFnZXIudGFiT3V0XG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlSXRlbUluZGV4ID0gdW50cmFja2VkKHRoaXMucmF0aW5nSXRlbXMpXG4gICAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgICAgLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBjb2VyY2VOdW1iZXIodW50cmFja2VkKHRoaXMudmFsdWUpID8/IDApKTtcblxuICAgICAgICAgICAgdGhpcy4jZm9jdXNLZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4ID09PSAtMSA/IDAgOiBhY3RpdmVJdGVtSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb2N1c2FibGVJdGVtcygpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgIHRoaXMuI2ZvY3VzS2V5TWFuYWdlci5jaGFuZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yYXRpbmdJdGVtTGFiZWxzKCkuZm9yRWFjaCgobGFiZWwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGxhYmVsLmZvY3VzYWJsZS5zZXQoaW5kZXggPT09IHRoaXMuI2ZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgpO1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI2ZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHVudHJhY2tlZChsYWJlbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljayh2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmF0aW5nOiB0cnVlLFxuICAgICAgW2ByYXRpbmctJHt0aGlzLnNpemUoKX1gXTogdGhpcy5zaXplKCksXG4gICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMuI2Rpc2FibGVkU3RhdGUoKSxcbiAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRPbmx5KCksXG4gICAgfTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JylcbiAgZ2V0IGFyaWFWYWx1ZU5vdygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSgpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKVxuICBnZXQgYXJpYVZhbHVlTWF4KCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1Db3VudCgpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBnZXQgcm9sZSgpIHtcbiAgICByZXR1cm4gJ3JhZGlvZ3JvdXAnO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5ZG93bigkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnJhdGluZ0Rpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFsnU3BhY2UnLCAnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQuY29kZSkpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmF0aW5nSXRlbUxhYmVscygpLmZpbmQoXG4gICAgICAgIChsYWJlbCwgaW5kZXgpID0+IGluZGV4ID09PSB0aGlzLiNmb2N1c0tleU1hbmFnZXI/LmFjdGl2ZUl0ZW1JbmRleCxcbiAgICAgICk7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrKGl0ZW0/LnZhbHVlKCkgPz8gLTEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoWydBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsICdBcnJvd1VwJywgJ0Fycm93RG93biddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICB0aGlzLiNmb2N1c0tleU1hbmFnZXIub25LZXlkb3duKCRldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChbJ1RhYiddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICB0aGlzLiNmb2N1c0tleU1hbmFnZXI/LnRhYk91dC5uZXh0KCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBudW1iZXIgfCBudWxsKSA9PiB7fTtcblxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuI2Rpc2FibGVkU3RhdGUuc2V0KGlzRGlzYWJsZWQpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIGlzSXRlbUFjdGl2ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbG9jYWxWYWx1ZSA9IHRoaXMuaG92ZXJWYWx1ZSgpID8/IHRoaXMudmFsdWUoKSA/PyAtMTtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRPbmx5U2VsZWN0ZWQoKSA/IGxvY2FsVmFsdWUgPT09IHZhbHVlIDogbG9jYWxWYWx1ZSA+PSB2YWx1ZTtcbiAgfVxuXG4gIG5vdExhc3RJdGVtU3R5bGUodmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICB6SW5kZXg6IHRoaXMubnVtYmVyT2ZTdWJJdGVtcygpIC0gdmFsdWUsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHdpZHRoOiBgJHt0aGlzLnByZWNpc2lvbigpICogKHZhbHVlICsgMSkgKiAxMDB9JWAsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICBvcGFjaXR5OiAwLjEsXG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZUZvY3VzSW4oJGV2ZW50OiBGb2N1c0V2ZW50LCBpdGVtVmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuaGFuZGxlTW91c2VFbnRlcigkZXZlbnQgYXMgTW91c2VFdmVudCwgaXRlbVZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5yYXRpbmdEaXNhYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmFsbG93Q2xlYXIoKSAmJiB2YWx1ZSA9PT0gdGhpcy52YWx1ZSgpKSB7XG4gICAgICB0aGlzLiNjbGVhcmVkLnNldCh0cnVlKTtcbiAgICAgIHRoaXMudmFsdWUuc2V0KG51bGwpO1xuICAgICAgdGhpcy5ob3ZlclZhbHVlLnNldChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1vdXNlRW50ZXIoJGV2ZW50OiBNb3VzZUV2ZW50LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmF0aW5nRGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhvdmVyVmFsdWUuc2V0KG51bGwpO1xuICAgIHRoaXMuaG92ZXJWYWx1ZS5zZXQodmFsdWUpO1xuICAgIHRoaXMudG9vbHRpcFZhbHVlLnNldCh2YWx1ZSk7XG4gIH1cblxuICBnZXRUb29sdGlwVmFsdWUoaW5kZXg6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmhvdmVyVmFsdWUoKSB8fCB0aGlzLmhvdmVyZWRJdGVtKCkgIT09IGluZGV4KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnRvb2x0aXBzKCkpKSB7XG4gICAgICBjb25zdCB0b29sdGlwcyA9IHRoaXMudG9vbHRpcHMoKSBhcyBBcnJheTxzdHJpbmc+O1xuICAgICAgcmV0dXJuIHRvb2x0aXBzW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJlY2lzaW9uKClcbiAgICAgID8gdGhpcy50b29sdGlwVmFsdWUoKT8udG9TdHJpbmcoKSA/PyAnJ1xuICAgICAgOiB0aGlzLnJhdGluZ0l0ZW1zKClcbiAgICAgICAgPyAodGhpcy5yYXRpbmdJdGVtcygpW2luZGV4XS5hdCgtMSkgPz8gJycpLnRvU3RyaW5nKClcbiAgICAgICAgOiAnJztcbiAgfVxuXG4gIHVwZGF0ZUZvY3VzYWJsZUl0ZW1zKCkge1xuICAgIHRoaXMucmF0aW5nSXRlbUxhYmVscygpLmZvckVhY2goKGxhYmVsLCBpbmRleCkgPT4ge1xuICAgICAgbGFiZWwuZm9jdXNhYmxlLnNldChpbmRleCA9PT0gdGhpcy4jZm9jdXNLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtSW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8ga2VlcCBpdCBhdCB0aGUgYm90dG9tIG9mIHRoZSBjb2RlXG4gIHJlYWRvbmx5IHZhbHVlRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHJhdGluZ1ZhbHVlID0gdGhpcy52YWx1ZSgpO1xuICAgICAgdGhpcy5vbkNoYW5nZShyYXRpbmdWYWx1ZSk7XG5cbiAgICAgIGlmICh1bnRyYWNrZWQodGhpcy5yYXRpbmdEaXNhYmxlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodW50cmFja2VkKHRoaXMuI2NsZWFyZWQpKSB7XG4gICAgICAgIHRoaXMuI2NsZWFyZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5yYXRpbmdJdGVtcygpXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBjb2VyY2VOdW1iZXIocmF0aW5nVmFsdWUgPz8gMCkpO1xuXG4gICAgICB0aGlzLiNmb2N1c0tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4IDwgMCA/IDAgOiBhY3RpdmVJdGVtSW5kZXgpO1xuICAgICAgdGhpcy51cGRhdGVGb2N1c2FibGVJdGVtcygpO1xuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xufVxuIiwiQGZvciAoaXRlbSBvZiByYXRpbmdJdGVtcygpOyB0cmFjayBpdGVtOyBsZXQgaXRlbUluZGV4ID0gJGluZGV4LCBsYXN0ID0gJGxhc3QpIHtcbiAgQGlmICh0b29sdGlwcygpKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyYXRpbmctaXRlbVwiXG4gICAgICBbY1Rvb2x0aXBdPVwiZ2V0VG9vbHRpcFZhbHVlKGl0ZW1JbmRleClcIlxuICAgICAgW2NUb29sdGlwVHJpZ2dlcl09XCJbJ2hvdmVyJywgJ2ZvY3VzaW4nXVwiXG4gICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkSXRlbS5zZXQoaXRlbUluZGV4KVwiXG4gICAgICAoZm9jdXNpbik9XCJob3ZlcmVkSXRlbS5zZXQoaXRlbUluZGV4KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJhdGluZ0l0ZW1MYWJlbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGl0ZW1JbmRleCB9XCIgLz5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInJhdGluZy1pdGVtXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmF0aW5nSXRlbUxhYmVsOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaXRlbUluZGV4IH1cIiAvPlxuICAgIDwvZGl2PlxuICB9XG59XG5cbjxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBsZXQtaXRlbUluZGV4PVwiaXRlbUluZGV4XCIgI3JhdGluZ0l0ZW1MYWJlbD5cbiAgQGZvciAoaXRlbVZhbHVlIG9mIGl0ZW07IHRyYWNrIHJhZGlvSW5kZXg7IGxldCByYWRpb0luZGV4ID0gJGluZGV4LCBsYXN0ID0gJGxhc3QpIHtcbiAgICA8Yy1yYXRpbmctaXRlbS1sYWJlbFxuICAgICAgY2xhc3M9XCJyYXRpbmctaXRlbS1sYWJlbCBkLWlubGluZS1ibG9ja1wiXG4gICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKGl0ZW1WYWx1ZSlcIlxuICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzSW4oJGV2ZW50LCBpdGVtVmFsdWUpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBpc0l0ZW1BY3RpdmUoaXRlbVZhbHVlKSB9XCJcbiAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZU1vdXNlRW50ZXIoJGV2ZW50LCBpdGVtVmFsdWUpXCJcbiAgICAgIFtuZ1N0eWxlXT1cInJhZGlvSW5kZXggKyAxIDwgbnVtYmVyT2ZTdWJJdGVtcygpID8gbm90TGFzdEl0ZW1TdHlsZShyYWRpb0luZGV4KSA6IHt9XCJcbiAgICAgIFt2YWx1ZV09XCJpdGVtVmFsdWVcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtVmFsdWVcIlxuICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIml0ZW1WYWx1ZSA9PT0gdmFsdWUoKVwiXG4gICAgPlxuICAgICAgQGlmIChpY29uVGVtcGxhdGVzKClbaWNvbigpW2l0ZW1JbmRleF0gPz8gaWNvbigpXSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaWNvbigpPy5baXRlbUluZGV4XSA/PyBpY29uKCkgfVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRJY29uVGVtcGxhdGVcIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChpY29uVGVtcGxhdGVzKClbYWN0aXZlSWNvbigpW2l0ZW1JbmRleF0gPz8gYWN0aXZlSWNvbigpXSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tSWNvbkFjdGl2ZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogYWN0aXZlSWNvbigpPy5baXRlbUluZGV4XSA/PyBhY3RpdmVJY29uKCkgfVwiIC8+XG4gICAgICB9XG4gICAgPC9jLXJhdGluZy1pdGVtLWxhYmVsPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rvb2x0aXBDb250ZW50PlxuICA8c3Bhbj57eyBob3ZlclZhbHVlKCkgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJY29uVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJyYXRpbmctaXRlbS1pY29uXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbUljb25UZW1wbGF0ZSBsZXQtaWNvbj5cbiAgPGRpdiBjbGFzcz1cInJhdGluZy1pdGVtLWN1c3RvbS1pY29uXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZXMoKT8uW2ljb25dIHx8IGRlZmF1bHRJY29uVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tSWNvbkFjdGl2ZVRlbXBsYXRlIGxldC1pY29uPlxuICA8ZGl2IGNsYXNzPVwicmF0aW5nLWl0ZW0tY3VzdG9tLWljb24tYWN0aXZlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZXMoKT8uW2ljb25dIHx8IGN1c3RvbUljb25UZW1wbGF0ZVwiIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -2,11 +2,11 @@ import { NgModule } from '@angular/core';
|
|
|
2
2
|
import { RatingComponent } from './rating.component';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class RatingModule {
|
|
5
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
6
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.
|
|
7
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RatingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: RatingModule, imports: [RatingComponent], exports: [RatingComponent] }); }
|
|
7
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RatingModule }); }
|
|
8
8
|
}
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: RatingModule, decorators: [{
|
|
10
10
|
type: NgModule,
|
|
11
11
|
args: [{
|
|
12
12
|
imports: [RatingComponent],
|