@sarasanalytics-com/design-system 0.0.168 → 0.0.170

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.
Files changed (94) hide show
  1. package/README.md +24 -24
  2. package/esm2022/interfaces/avatar-interface.mjs +1 -1
  3. package/esm2022/interfaces/button-interface.mjs +1 -1
  4. package/esm2022/interfaces/card-carousel-interface.mjs +1 -1
  5. package/esm2022/interfaces/chip-interface.mjs +1 -1
  6. package/esm2022/interfaces/form-layout.interface.mjs +1 -1
  7. package/esm2022/interfaces/grid-interface.mjs +1 -1
  8. package/esm2022/interfaces/guide-card-interface.mjs +1 -1
  9. package/esm2022/interfaces/header-interface.mjs +1 -1
  10. package/esm2022/interfaces/icon-interface.mjs +1 -1
  11. package/esm2022/interfaces/layout-section-interface.mjs +1 -1
  12. package/esm2022/interfaces/left-nav-interface.mjs +1 -1
  13. package/esm2022/interfaces/menu.interface.mjs +1 -1
  14. package/esm2022/interfaces/message-banner.mjs +1 -1
  15. package/esm2022/interfaces/option-interface.mjs +1 -1
  16. package/esm2022/interfaces/scrolling-card-interface.mjs +1 -1
  17. package/esm2022/interfaces/select-interface.mjs +1 -1
  18. package/esm2022/interfaces/status-dot.interface.mjs +1 -1
  19. package/esm2022/interfaces/tab-interface.mjs +1 -1
  20. package/esm2022/interfaces/toast-interface.mjs +1 -1
  21. package/esm2022/interfaces/typography-animation-interface.mjs +1 -1
  22. package/esm2022/lib/accordion/accordion.component.mjs +3 -3
  23. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  24. package/esm2022/lib/button/button.component.mjs +3 -3
  25. package/esm2022/lib/calendar-header/calendar-header.component.mjs +3 -3
  26. package/esm2022/lib/card/card-body/card-body.component.mjs +1 -1
  27. package/esm2022/lib/card/card-custom-header/card-custom-header.component.mjs +1 -1
  28. package/esm2022/lib/card/card-footer-actions/card-footer-actions.component.mjs +3 -3
  29. package/esm2022/lib/card/card-icon/card-icon.component.mjs +1 -1
  30. package/esm2022/lib/card/card-title-actions/card-title-actions.component.mjs +1 -1
  31. package/esm2022/lib/card/card.component.mjs +3 -3
  32. package/esm2022/lib/card/checkbox-card/checkbox-card.component.mjs +3 -3
  33. package/esm2022/lib/card/guide-card/guide-card.component.mjs +3 -3
  34. package/esm2022/lib/card/menu-card/menu-card.component.mjs +3 -3
  35. package/esm2022/lib/card/thumbnail-card/thumbnail-card.component.mjs +3 -3
  36. package/esm2022/lib/card-carousel/card-carousel.component.mjs +3 -3
  37. package/esm2022/lib/categories-nav/categories-nav.component.mjs +3 -3
  38. package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
  39. package/esm2022/lib/chips/chips.component.mjs +3 -3
  40. package/esm2022/lib/component-library.component.mjs +9 -9
  41. package/esm2022/lib/component-library.service.mjs +1 -1
  42. package/esm2022/lib/dashboard-loader/dashboard-loader.component.mjs +1 -1
  43. package/esm2022/lib/data-grid/data-grid.component.mjs +3 -3
  44. package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
  45. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  46. package/esm2022/lib/dropdown/category-dropdown/category-dropdown.component.mjs +3 -3
  47. package/esm2022/lib/dropdown/ng-select/ng-select.component.mjs +3 -3
  48. package/esm2022/lib/dropdown-menu/dropdown-menu.component.mjs +152 -0
  49. package/esm2022/lib/filter/filter.component.mjs +3 -3
  50. package/esm2022/lib/form-input/form-input.component.mjs +3 -3
  51. package/esm2022/lib/form-select/form-select.component.mjs +3 -3
  52. package/esm2022/lib/grid-cell/grid-cell.component.mjs +10 -10
  53. package/esm2022/lib/header/header.component.mjs +3 -3
  54. package/esm2022/lib/icon/icon.component.mjs +3 -3
  55. package/esm2022/lib/icon/icon.service.mjs +1 -1
  56. package/esm2022/lib/layout-section/layout-section.component.mjs +3 -3
  57. package/esm2022/lib/left-nav/left-nav.component.mjs +3 -3
  58. package/esm2022/lib/list/list.component.mjs +3 -3
  59. package/esm2022/lib/menu/menu-list/menu-item.component.mjs +3 -3
  60. package/esm2022/lib/menu/menu.component.mjs +3 -3
  61. package/esm2022/lib/menu/menu.directive.mjs +1 -1
  62. package/esm2022/lib/message-banner/message-banner.component.mjs +3 -3
  63. package/esm2022/lib/message-banner-v2/message-banner-v2.component.mjs +3 -3
  64. package/esm2022/lib/mini-card/mini-card.component.mjs +3 -3
  65. package/esm2022/lib/page-layout/page-layout.component.mjs +3 -3
  66. package/esm2022/lib/progress-bar/progress-bar.component.mjs +3 -3
  67. package/esm2022/lib/query-builder/query-builder-demo.component.mjs +45 -45
  68. package/esm2022/lib/query-builder/query-builder.component.mjs +3 -3
  69. package/esm2022/lib/query-builder/query-builder.service.mjs +1 -1
  70. package/esm2022/lib/query-builder-formly/query-builder-formly.component.mjs +3 -3
  71. package/esm2022/lib/query-builder-textarea/query-builder-textarea-demo.component.mjs +39 -39
  72. package/esm2022/lib/query-builder-textarea/query-builder-textarea.component.mjs +3 -3
  73. package/esm2022/lib/radio-button/radio-button.component.mjs +3 -3
  74. package/esm2022/lib/scrolling-cards/scrolling-cards.component.mjs +3 -3
  75. package/esm2022/lib/skeleton/skeleton-base.component.mjs +1 -1
  76. package/esm2022/lib/skeleton/skeleton-container.component.mjs +9 -9
  77. package/esm2022/lib/skeleton/skeleton-loader.component.mjs +217 -217
  78. package/esm2022/lib/skeleton/skeleton-presets.mjs +1 -1
  79. package/esm2022/lib/skeleton/skeleton-shapes.component.mjs +1 -1
  80. package/esm2022/lib/spinner/spinner.component.mjs +1 -1
  81. package/esm2022/lib/status-dot/status-dot.component.mjs +17 -17
  82. package/esm2022/lib/stepper/stepper.component.mjs +3 -3
  83. package/esm2022/lib/tabs/tabs.component.mjs +3 -3
  84. package/esm2022/lib/toast/toast.component.mjs +3 -3
  85. package/esm2022/lib/tool-tip/tool-tip.component.mjs +3 -3
  86. package/esm2022/lib/typography-animation/typography-animation.component.mjs +3 -3
  87. package/esm2022/public-api.mjs +2 -1
  88. package/esm2022/utils/validators.mjs +1 -1
  89. package/fesm2022/sarasanalytics-com-design-system.mjs +570 -435
  90. package/fesm2022/sarasanalytics-com-design-system.mjs.map +1 -1
  91. package/lib/dropdown-menu/dropdown-menu.component.d.ts +27 -0
  92. package/package.json +1 -1
  93. package/public-api.d.ts +1 -0
  94. package/styles/styles.css +434 -434
@@ -0,0 +1,152 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { ReactiveFormsModule } from '@angular/forms';
3
+ import { FormlyModule, FieldType } from '@ngx-formly/core';
4
+ import { CommonModule } from '@angular/common';
5
+ import { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';
6
+ import { MatButtonModule } from '@angular/material/button';
7
+ import { MatCalendar } from '@angular/material/datepicker';
8
+ import { MatCardModule } from '@angular/material/card';
9
+ import { MatNativeDateModule } from '@angular/material/core';
10
+ import { IconComponent } from '../icon/icon.component';
11
+ import { MatTooltipModule } from '@angular/material/tooltip';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/common";
14
+ import * as i2 from "@ngx-formly/core";
15
+ import * as i3 from "@angular/material/menu";
16
+ import * as i4 from "@angular/material/button";
17
+ import * as i5 from "@angular/material/card";
18
+ import * as i6 from "@angular/material/tooltip";
19
+ export class DropdownMenuComponent extends FieldType {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.activeItem = null;
23
+ this.selectedDate = null;
24
+ this.isNavigating = false;
25
+ this.placeholderLabel = '';
26
+ }
27
+ ngOnInit() {
28
+ this.params = this.field.props['params'] || {};
29
+ if (!this.params || Object.keys(this.params).length === 0) {
30
+ this.params = this.field.props;
31
+ }
32
+ this.placeholderLabel =
33
+ this.params.placeholder ||
34
+ this.params.label ||
35
+ this.field.props.placeholder ||
36
+ 'Select an option';
37
+ }
38
+ get menuItems() {
39
+ const options = this.field.props?.options;
40
+ if (options && typeof options.subscribe === 'function') {
41
+ return [];
42
+ }
43
+ return Array.isArray(options) ? options : [];
44
+ }
45
+ get selectedItem() {
46
+ const value = this.formControl.value;
47
+ if (!value)
48
+ return this.placeholderLabel;
49
+ if (typeof value === 'object' && value !== null) {
50
+ return value.name || value.label || value.value || this.placeholderLabel;
51
+ }
52
+ const item = this.menuItems.find((item) => item.value === value || item.id === value);
53
+ return item?.name || item?.label || String(value) || this.placeholderLabel;
54
+ }
55
+ onSelect(item, event) {
56
+ event.stopPropagation();
57
+ if (item.type === 'date') {
58
+ this.activeItem = item.type;
59
+ return;
60
+ }
61
+ this.activeItem = null;
62
+ const updatedValue = {
63
+ historyYears: item.value || item.name || null,
64
+ historyDate: null,
65
+ };
66
+ this.formControl.setValue(item.value);
67
+ this.formControl.markAsTouched();
68
+ this.menuTrigger.closeMenu();
69
+ console.log(updatedValue);
70
+ }
71
+ get showError() {
72
+ return this.formControl?.invalid && this.formControl?.touched;
73
+ }
74
+ getError() {
75
+ if (this.formControl?.hasError('required'))
76
+ return 'This field is required';
77
+ return 'Please select a valid option';
78
+ }
79
+ onViewChanged() {
80
+ this.isNavigating = true;
81
+ setTimeout(() => (this.isNavigating = false), 300);
82
+ }
83
+ onDateSelected(date) {
84
+ if (this.isNavigating)
85
+ return;
86
+ this.selectedDate = date;
87
+ const formatted = date.toLocaleDateString('en-US', {
88
+ month: '2-digit',
89
+ day: '2-digit',
90
+ year: 'numeric',
91
+ });
92
+ const updatedValue = {
93
+ historyYears: null,
94
+ historyDate: formatted,
95
+ };
96
+ this.formControl.setValue(formatted);
97
+ this.formControl.markAsTouched();
98
+ this.menuTrigger.closeMenu();
99
+ console.log(updatedValue);
100
+ }
101
+ stopCalendarClose(event) {
102
+ event.stopPropagation();
103
+ }
104
+ isItemSelected(item) {
105
+ if (!this.formControl?.value)
106
+ return false;
107
+ const currentValue = this.formControl.value;
108
+ if (typeof currentValue === 'object' && currentValue !== null) {
109
+ return (currentValue === item ||
110
+ currentValue.value === item.value ||
111
+ currentValue.id === item.id);
112
+ }
113
+ return (currentValue === item.value ||
114
+ currentValue === item.id ||
115
+ currentValue === item.name);
116
+ }
117
+ onMenuOpened() {
118
+ const el = this.dropdownContainer?.nativeElement;
119
+ if (!el)
120
+ return;
121
+ const width = Math.round(el.getBoundingClientRect().width);
122
+ document.documentElement.style.setProperty('--dropdown-trigger-width', width + 'px');
123
+ }
124
+ onMenuClosed() {
125
+ document.documentElement.style.removeProperty('--dropdown-trigger-width');
126
+ this.activeItem = null;
127
+ }
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DropdownMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: DropdownMenuComponent, isStandalone: true, selector: "sa-dropdown-menu", viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }, { propertyName: "dropdownContainer", first: true, predicate: ["dropdownContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-dropdown-container {{ props?.['inputContainerClass'] }}\">\r\n <!-- Label and Tooltip Section -->\r\n @if(!!props?.['label']){\r\n <div class=\"sa-dropdown-label-container\">\r\n <div class=\"sa-dropdown-label-tooltip-container\">\r\n <span class=\"sa-dropdown-label\">\r\n {{ props?.['label'] }}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\">\r\n </sa-icon>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Dropdown Button -->\r\n <div class=\"dropdown-container\" #dropdownContainer [class.disabled]=\"params?.disabled\">\r\n <button mat-button [matMenuTriggerFor]=\"menu\" #menuTrigger=\"matMenuTrigger\" class=\"menu-trigger\"\r\n [disabled]=\"params?.disabled\" [attr.aria-label]=\"params?.label || 'Dropdown menu'\"\r\n [attr.aria-haspopup]=\"'menu'\" [attr.aria-expanded]=\"menuTrigger?.menuOpen\"\r\n (menuOpened)=\"onMenuOpened()\" (menuClosed)=\"onMenuClosed()\">\r\n\r\n <span class=\"selected-value\" [class.placeholder]=\"!formControl.value\">\r\n {{ selectedItem }}\r\n </span>\r\n <span class=\"dropdown_right_icon\">\r\n <sa-icon [icon]=\"'downOutlined'\" [size]=\"'22'\"></sa-icon>\r\n </span>\r\n </button>\r\n\r\n <!-- Dropdown Menu -->\r\n <mat-menu #menu=\"matMenu\" class=\"two-panel-menu\" [hasBackdrop]=\"true\">\r\n <div class=\"two-panel-dropdown\">\r\n <div class=\"menu-left\">\r\n <div *ngFor=\"let item of menuItems\" class=\"menu-item\" [class.active]=\"item.name === activeItem\"\r\n (click)=\"onSelect(item, $event)\" role=\"menuitem\" [attr.aria-selected]=\"isItemSelected(item)\">\r\n\r\n <span>{{ item.name }}</span>\r\n <sa-icon *ngIf=\"item.type === 'date'\" [icon]=\"'rightChevron'\" [size]=\"'16'\" aria-hidden=\"true\">\r\n </sa-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"divider\"></div>\r\n\r\n <div class=\"menu-right\" *ngIf=\"activeItem === 'date'\" (click)=\"stopCalendarClose($event)\">\r\n <mat-card class=\"calendar-card\">\r\n <mat-calendar [(selected)]=\"selectedDate\" (selectedChange)=\"onDateSelected($event)\"\r\n (viewChanged)=\"onViewChanged()\" [minDate]=\"params?.minDate\" [maxDate]=\"params?.maxDate\">\r\n </mat-calendar>\r\n </mat-card>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n\r\n <!-- Validation Message -->\r\n @if(!formControl.valid){\r\n <div class=\"error-message-container\">\r\n <span class=\"error-message\">\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </span>\r\n </div>\r\n }\r\n @if(!!props?.['supportText']){\r\n <p class=\"sa-dropdown-supportText\">{{ props?.['supportText'] }}</p>\r\n }\r\n</div>", styles: [".sa-dropdown-container{display:flex;flex-direction:column;width:100%;font-family:var(--font, Inter, sans-serif);gap:var(--small-8px, 8px)}.sa-dropdown-label-container{display:flex;flex-direction:column;gap:var(--small-4px, 4px)}.sa-dropdown-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-dropdown-label{color:var(--text-highemphasis, #1b1d20);font-family:var(--font, Inter, sans-serif);font-size:var(--small-14px, 14px);font-weight:500;line-height:var(--medium-20px, 20px);letter-spacing:.1px}.required-asterisk{color:var(--semantic-error-500, #bd271e);margin-left:2px}.tooltip-container{display:flex;align-items:center}.info-icon{color:var(--grey-500, #777);cursor:pointer}.sa-dropdown-description{font-family:var(--font);font-size:12px;color:var(--text-lowemphasis, #666);line-height:16px;letter-spacing:.25px}.dropdown-container{width:100%;position:relative}.menu-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;height:40px;padding:0 var(--medium-30px, 30px) 0 var(--small-12px, 12px);border-radius:var(--small-4px, 4px);background-color:#fff;font-family:var(--font);font-size:14px;font-weight:400;line-height:20px;letter-spacing:.25px;transition:border .2s ease,color .2s ease;cursor:pointer;border:var(--border, 1px solid var(--grey-50))}.idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.menu-trigger:hover{--border: 1px solid var(--primary-300);color:var(--text-highemphasis, #1b1d20)}.menu-trigger:disabled,.disabled{border:1px solid var(--grey-50)!important;opacity:.6;cursor:not-allowed}.invalid{border:1px solid var(--semantic-error-500, #bd271e)!important}.selected-value{flex:1;text-align:left;color:var(--text-lowemphasis, #555);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selected-value.placeholder{color:var(--text-lowemphasis, #aaa)}.menu-trigger sa-icon{color:var(--Grey-600, #475467);transition:transform .2s ease}.menu-trigger[aria-expanded=true] sa-icon{transform:rotate(180deg)}::ng-deep .two-panel-menu.mat-mdc-menu-panel{width:var(--dropdown-trigger-width, auto)!important;min-width:var(--dropdown-trigger-width, auto)!important;max-width:var(--dropdown-trigger-width, auto)!important}::ng-deep .mdc-button__label{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .mat-mdc-menu-content .two-panel-dropdown{width:var(--dropdown-trigger-width, 100%)!important;min-width:var(--dropdown-trigger-width, 100%)!important;max-width:var(--dropdown-trigger-width, 100%)!important;border:none;border-radius:var(--small-4px, 4px);box-shadow:none;overflow:hidden;margin-top:4px;box-shadow:0 1px 2px #0000004d}::ng-deep .mat-mdc-menu-content{box-shadow:0 1px 2px #0000004d;border:none;padding:0!important}::ng-deep .mat-mdc-elevation-specific{box-shadow:0 4px 12px #00000014!important}::ng-deep .cdk-overlay-backdrop.cdk-overlay-transparent-backdrop{background:transparent!important}.dropdown-container .menu-trigger{--dropdown-width: 100%}.menu-trigger[aria-expanded=true]{border-color:var(--primary-300)}.two-panel-menu{min-width:550px;overflow:hidden;border-radius:var(--small-8px, 8px);box-shadow:0 4px 16px #0000001f;background-color:#fff}.two-panel-dropdown{display:flex;width:100%}.menu-left{display:flex;flex-direction:column;width:100%;background-color:#fff}.menu-item{padding:10px 16px;cursor:pointer;display:flex;align-items:center;gap:var(--small-8px, 8px);justify-content:space-between;color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.menu-item sa-icon{display:flex;margin-top:var(--small-4px, 4px)}.menu-item:hover{background-color:var(--primary-50, #f3ebff)}.menu-item.active{background-color:var(--primary-50, #ede7ff);color:var(--primary-700, #5e35b1);font-weight:500}.sa-dropdown-supportText{font-family:var(--font-family, Roboto);font-size:11px;font-style:normal;font-weight:400;line-height:16px;margin:0 4px;letter-spacing:.25px;color:var(--text-mediumemphasis, #6D6979)}.dropdown_right_icon{position:absolute;right:-12px;top:0;color:var(--icon-grey1, #757575)}.divider{width:1px}.menu-right{width:100%;display:flex;align-items:flex-start;background-color:var(--structural-white,#FFFFFF)}.calendar-card{background:var(--structural-white,#FFFFFF);width:100%}::ng-deep .mat-calendar{width:100%;background:var(--structural-white,#FFFFFF)}.error-message-container{margin-top:4px}.error-message{color:var(--semantic-error-500, #bd271e);font-family:var(--font);font-size:11px;font-weight:400;line-height:var(--small-16px, 16px);letter-spacing:.5px}.support-label{font-family:var(--font);font-size:11px;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0 var(--small-16px)}.d-flex{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "imgWidth", "imgHeight", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
130
+ }
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DropdownMenuComponent, decorators: [{
132
+ type: Component,
133
+ args: [{ selector: 'sa-dropdown-menu', standalone: true, imports: [
134
+ CommonModule,
135
+ ReactiveFormsModule,
136
+ FormlyModule,
137
+ MatMenuModule,
138
+ MatButtonModule,
139
+ MatCalendar,
140
+ MatCardModule,
141
+ MatNativeDateModule,
142
+ IconComponent,
143
+ MatTooltipModule,
144
+ ], template: "<div class=\"sa-dropdown-container {{ props?.['inputContainerClass'] }}\">\r\n <!-- Label and Tooltip Section -->\r\n @if(!!props?.['label']){\r\n <div class=\"sa-dropdown-label-container\">\r\n <div class=\"sa-dropdown-label-tooltip-container\">\r\n <span class=\"sa-dropdown-label\">\r\n {{ props?.['label'] }}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\">\r\n </sa-icon>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Dropdown Button -->\r\n <div class=\"dropdown-container\" #dropdownContainer [class.disabled]=\"params?.disabled\">\r\n <button mat-button [matMenuTriggerFor]=\"menu\" #menuTrigger=\"matMenuTrigger\" class=\"menu-trigger\"\r\n [disabled]=\"params?.disabled\" [attr.aria-label]=\"params?.label || 'Dropdown menu'\"\r\n [attr.aria-haspopup]=\"'menu'\" [attr.aria-expanded]=\"menuTrigger?.menuOpen\"\r\n (menuOpened)=\"onMenuOpened()\" (menuClosed)=\"onMenuClosed()\">\r\n\r\n <span class=\"selected-value\" [class.placeholder]=\"!formControl.value\">\r\n {{ selectedItem }}\r\n </span>\r\n <span class=\"dropdown_right_icon\">\r\n <sa-icon [icon]=\"'downOutlined'\" [size]=\"'22'\"></sa-icon>\r\n </span>\r\n </button>\r\n\r\n <!-- Dropdown Menu -->\r\n <mat-menu #menu=\"matMenu\" class=\"two-panel-menu\" [hasBackdrop]=\"true\">\r\n <div class=\"two-panel-dropdown\">\r\n <div class=\"menu-left\">\r\n <div *ngFor=\"let item of menuItems\" class=\"menu-item\" [class.active]=\"item.name === activeItem\"\r\n (click)=\"onSelect(item, $event)\" role=\"menuitem\" [attr.aria-selected]=\"isItemSelected(item)\">\r\n\r\n <span>{{ item.name }}</span>\r\n <sa-icon *ngIf=\"item.type === 'date'\" [icon]=\"'rightChevron'\" [size]=\"'16'\" aria-hidden=\"true\">\r\n </sa-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"divider\"></div>\r\n\r\n <div class=\"menu-right\" *ngIf=\"activeItem === 'date'\" (click)=\"stopCalendarClose($event)\">\r\n <mat-card class=\"calendar-card\">\r\n <mat-calendar [(selected)]=\"selectedDate\" (selectedChange)=\"onDateSelected($event)\"\r\n (viewChanged)=\"onViewChanged()\" [minDate]=\"params?.minDate\" [maxDate]=\"params?.maxDate\">\r\n </mat-calendar>\r\n </mat-card>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n\r\n <!-- Validation Message -->\r\n @if(!formControl.valid){\r\n <div class=\"error-message-container\">\r\n <span class=\"error-message\">\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </span>\r\n </div>\r\n }\r\n @if(!!props?.['supportText']){\r\n <p class=\"sa-dropdown-supportText\">{{ props?.['supportText'] }}</p>\r\n }\r\n</div>", styles: [".sa-dropdown-container{display:flex;flex-direction:column;width:100%;font-family:var(--font, Inter, sans-serif);gap:var(--small-8px, 8px)}.sa-dropdown-label-container{display:flex;flex-direction:column;gap:var(--small-4px, 4px)}.sa-dropdown-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-dropdown-label{color:var(--text-highemphasis, #1b1d20);font-family:var(--font, Inter, sans-serif);font-size:var(--small-14px, 14px);font-weight:500;line-height:var(--medium-20px, 20px);letter-spacing:.1px}.required-asterisk{color:var(--semantic-error-500, #bd271e);margin-left:2px}.tooltip-container{display:flex;align-items:center}.info-icon{color:var(--grey-500, #777);cursor:pointer}.sa-dropdown-description{font-family:var(--font);font-size:12px;color:var(--text-lowemphasis, #666);line-height:16px;letter-spacing:.25px}.dropdown-container{width:100%;position:relative}.menu-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;height:40px;padding:0 var(--medium-30px, 30px) 0 var(--small-12px, 12px);border-radius:var(--small-4px, 4px);background-color:#fff;font-family:var(--font);font-size:14px;font-weight:400;line-height:20px;letter-spacing:.25px;transition:border .2s ease,color .2s ease;cursor:pointer;border:var(--border, 1px solid var(--grey-50))}.idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.menu-trigger:hover{--border: 1px solid var(--primary-300);color:var(--text-highemphasis, #1b1d20)}.menu-trigger:disabled,.disabled{border:1px solid var(--grey-50)!important;opacity:.6;cursor:not-allowed}.invalid{border:1px solid var(--semantic-error-500, #bd271e)!important}.selected-value{flex:1;text-align:left;color:var(--text-lowemphasis, #555);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selected-value.placeholder{color:var(--text-lowemphasis, #aaa)}.menu-trigger sa-icon{color:var(--Grey-600, #475467);transition:transform .2s ease}.menu-trigger[aria-expanded=true] sa-icon{transform:rotate(180deg)}::ng-deep .two-panel-menu.mat-mdc-menu-panel{width:var(--dropdown-trigger-width, auto)!important;min-width:var(--dropdown-trigger-width, auto)!important;max-width:var(--dropdown-trigger-width, auto)!important}::ng-deep .mdc-button__label{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .mat-mdc-menu-content .two-panel-dropdown{width:var(--dropdown-trigger-width, 100%)!important;min-width:var(--dropdown-trigger-width, 100%)!important;max-width:var(--dropdown-trigger-width, 100%)!important;border:none;border-radius:var(--small-4px, 4px);box-shadow:none;overflow:hidden;margin-top:4px;box-shadow:0 1px 2px #0000004d}::ng-deep .mat-mdc-menu-content{box-shadow:0 1px 2px #0000004d;border:none;padding:0!important}::ng-deep .mat-mdc-elevation-specific{box-shadow:0 4px 12px #00000014!important}::ng-deep .cdk-overlay-backdrop.cdk-overlay-transparent-backdrop{background:transparent!important}.dropdown-container .menu-trigger{--dropdown-width: 100%}.menu-trigger[aria-expanded=true]{border-color:var(--primary-300)}.two-panel-menu{min-width:550px;overflow:hidden;border-radius:var(--small-8px, 8px);box-shadow:0 4px 16px #0000001f;background-color:#fff}.two-panel-dropdown{display:flex;width:100%}.menu-left{display:flex;flex-direction:column;width:100%;background-color:#fff}.menu-item{padding:10px 16px;cursor:pointer;display:flex;align-items:center;gap:var(--small-8px, 8px);justify-content:space-between;color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.menu-item sa-icon{display:flex;margin-top:var(--small-4px, 4px)}.menu-item:hover{background-color:var(--primary-50, #f3ebff)}.menu-item.active{background-color:var(--primary-50, #ede7ff);color:var(--primary-700, #5e35b1);font-weight:500}.sa-dropdown-supportText{font-family:var(--font-family, Roboto);font-size:11px;font-style:normal;font-weight:400;line-height:16px;margin:0 4px;letter-spacing:.25px;color:var(--text-mediumemphasis, #6D6979)}.dropdown_right_icon{position:absolute;right:-12px;top:0;color:var(--icon-grey1, #757575)}.divider{width:1px}.menu-right{width:100%;display:flex;align-items:flex-start;background-color:var(--structural-white,#FFFFFF)}.calendar-card{background:var(--structural-white,#FFFFFF);width:100%}::ng-deep .mat-calendar{width:100%;background:var(--structural-white,#FFFFFF)}.error-message-container{margin-top:4px}.error-message{color:var(--semantic-error-500, #bd271e);font-family:var(--font);font-size:11px;font-weight:400;line-height:var(--small-16px, 16px);letter-spacing:.5px}.support-label{font-family:var(--font);font-size:11px;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0 var(--small-16px)}.d-flex{display:flex}\n"] }]
145
+ }], propDecorators: { menuTrigger: [{
146
+ type: ViewChild,
147
+ args: [MatMenuTrigger]
148
+ }], dropdownContainer: [{
149
+ type: ViewChild,
150
+ args: ['dropdownContainer']
151
+ }] } });
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Ryb3Bkb3duLW1lbnUvZHJvcGRvd24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Ryb3Bkb3duLW1lbnUvZHJvcGRvd24tbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUF1QixXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7OztBQW9CN0QsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFNBQTBCO0lBbEJyRTs7UUFzQkUsZUFBVSxHQUFrQixJQUFJLENBQUM7UUFDakMsaUJBQVksR0FBZ0IsSUFBSSxDQUFD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REYsWUFBWSwrUEFDWixtQkFBbUIsOEJBQ25CLFlBQVksa0pBQ1osYUFBYSx5bUJBQ2IsZUFBZSw0TkFDZixXQUFXLDZZQUNYLGFBQWEsNElBQ2IsbUJBQW1CLCtCQUNuQixhQUFhLDZOQUNiLGdCQUFnQjs7MkZBS1AscUJBQXFCO2tCQWxCakMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLGdCQUFnQjtxQkFDakI7OEJBSzBCLFdBQVc7c0JBQXJDLFNBQVM7dUJBQUMsY0FBYztnQkFDTyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRm9ybWx5TW9kdWxlLCBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlLCBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlLCBNYXRDYWxlbmRhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XHJcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhLWRyb3Bkb3duLW1lbnUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1seU1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRDYWxlbmRhcixcclxuICAgIE1hdENhcmRNb2R1bGUsXHJcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxyXG4gICAgSWNvbkNvbXBvbmVudCxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24tbWVudS5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bk1lbnVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPiB7XHJcbiAgQFZpZXdDaGlsZChNYXRNZW51VHJpZ2dlcikgbWVudVRyaWdnZXIhOiBNYXRNZW51VHJpZ2dlcjtcclxuICBAVmlld0NoaWxkKCdkcm9wZG93bkNvbnRhaW5lcicpIGRyb3Bkb3duQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIGFjdGl2ZUl0ZW06IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gIGlzTmF2aWdhdGluZyA9IGZhbHNlO1xyXG5cclxuICBwYXJhbXM6IGFueTtcclxuICBwbGFjZWhvbGRlckxhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuZmllbGQucHJvcHNbJ3BhcmFtcyddIHx8IHt9O1xyXG4gICAgaWYgKCF0aGlzLnBhcmFtcyB8fCBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zID0gdGhpcy5maWVsZC5wcm9wcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPVxyXG4gICAgICB0aGlzLnBhcmFtcy5wbGFjZWhvbGRlciB8fFxyXG4gICAgICB0aGlzLnBhcmFtcy5sYWJlbCB8fFxyXG4gICAgICB0aGlzLmZpZWxkLnByb3BzLnBsYWNlaG9sZGVyIHx8XHJcbiAgICAgICdTZWxlY3QgYW4gb3B0aW9uJztcclxuICB9XHJcblxyXG4gIGdldCBtZW51SXRlbXMoKTogYW55W10ge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZmllbGQucHJvcHM/Lm9wdGlvbnM7XHJcbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2YgKG9wdGlvbnMgYXMgYW55KS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogW107XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRJdGVtKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdGhpcy5wbGFjZWhvbGRlckxhYmVsO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLm5hbWUgfHwgdmFsdWUubGFiZWwgfHwgdmFsdWUudmFsdWUgfHwgdGhpcy5wbGFjZWhvbGRlckxhYmVsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMubWVudUl0ZW1zLmZpbmQoXHJcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSB8fCBpdGVtLmlkID09PSB2YWx1ZVxyXG4gICAgKTtcclxuICAgIHJldHVybiBpdGVtPy5uYW1lIHx8IGl0ZW0/LmxhYmVsIHx8IFN0cmluZyh2YWx1ZSkgfHwgdGhpcy5wbGFjZWhvbGRlckxhYmVsO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QoaXRlbTogYW55LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoaXRlbS50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5hY3RpdmVJdGVtID0gaXRlbS50eXBlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZUl0ZW0gPSBudWxsO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHtcclxuICAgICAgaGlzdG9yeVllYXJzOiBpdGVtLnZhbHVlIHx8IGl0ZW0ubmFtZSB8fCBudWxsLFxyXG4gICAgICBoaXN0b3J5RGF0ZTogbnVsbCxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShpdGVtLnZhbHVlKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5tZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcclxuICAgIGNvbnNvbGUubG9nKHVwZGF0ZWRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb3ZlcnJpZGUgZ2V0IHNob3dFcnJvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sPy5pbnZhbGlkICYmIHRoaXMuZm9ybUNvbnRyb2w/LnRvdWNoZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvcigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpKSByZXR1cm4gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnO1xyXG4gICAgcmV0dXJuICdQbGVhc2Ugc2VsZWN0IGEgdmFsaWQgb3B0aW9uJztcclxuICB9XHJcblxyXG4gIG9uVmlld0NoYW5nZWQoKSB7XHJcbiAgICB0aGlzLmlzTmF2aWdhdGluZyA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmlzTmF2aWdhdGluZyA9IGZhbHNlKSwgMzAwKTtcclxuICB9XHJcblxyXG4gIG9uRGF0ZVNlbGVjdGVkKGRhdGU6IERhdGUpIHtcclxuICAgIGlmICh0aGlzLmlzTmF2aWdhdGluZykgcmV0dXJuO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBkYXRlO1xyXG5cclxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcclxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcclxuICAgICAgZGF5OiAnMi1kaWdpdCcsXHJcbiAgICAgIHllYXI6ICdudW1lcmljJyxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHtcclxuICAgICAgaGlzdG9yeVllYXJzOiBudWxsLFxyXG4gICAgICBoaXN0b3J5RGF0ZTogZm9ybWF0dGVkLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGZvcm1hdHRlZCk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMubWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XHJcbiAgICBjb25zb2xlLmxvZyh1cGRhdGVkVmFsdWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHN0b3BDYWxlbmRhckNsb3NlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGlzSXRlbVNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sPy52YWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgY3VycmVudFZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgY3VycmVudFZhbHVlID09PSBpdGVtIHx8XHJcbiAgICAgICAgY3VycmVudFZhbHVlLnZhbHVlID09PSBpdGVtLnZhbHVlIHx8XHJcbiAgICAgICAgY3VycmVudFZhbHVlLmlkID09PSBpdGVtLmlkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgY3VycmVudFZhbHVlID09PSBpdGVtLnZhbHVlIHx8XHJcbiAgICAgIGN1cnJlbnRWYWx1ZSA9PT0gaXRlbS5pZCB8fFxyXG4gICAgICBjdXJyZW50VmFsdWUgPT09IGl0ZW0ubmFtZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uTWVudU9wZW5lZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5kcm9wZG93bkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICghZWwpIHJldHVybjtcclxuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5yb3VuZChlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZHJvcGRvd24tdHJpZ2dlci13aWR0aCcsIHdpZHRoICsgJ3B4Jyk7XHJcbiAgfVxyXG5cclxuICBvbk1lbnVDbG9zZWQoKTogdm9pZCB7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tZHJvcGRvd24tdHJpZ2dlci13aWR0aCcpO1xyXG4gICAgdGhpcy5hY3RpdmVJdGVtID0gbnVsbDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNhLWRyb3Bkb3duLWNvbnRhaW5lciB7eyBwcm9wcz8uWydpbnB1dENvbnRhaW5lckNsYXNzJ10gfX1cIj5cclxuICAgIDwhLS0gTGFiZWwgYW5kIFRvb2x0aXAgU2VjdGlvbiAtLT5cclxuICAgIEBpZighIXByb3BzPy5bJ2xhYmVsJ10pe1xyXG4gICAgPGRpdiBjbGFzcz1cInNhLWRyb3Bkb3duLWxhYmVsLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYS1kcm9wZG93bi1sYWJlbC10b29sdGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNhLWRyb3Bkb3duLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBwcm9wcz8uWydsYWJlbCddIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgQGlmKCEhcHJvcHM/LlsndG9vbHRpcCddKXtcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPHNhLWljb24gW2ljb25dPVwicHJvcHM/LlsndG9vbHRpcEljb24nXSB8fCAnaW5mb0NpcmNsZU91dGxpbmVkJ1wiIGN1c3RvbUNsYXNzPVwiaW5mby1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJwcm9wcz8uWyd0b29sdGlwJ11cIiBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiIGNsYXNzPVwidG9vbHRpcC1pY29uIGQtZmxleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwicHJvcHM/LlsndG9vbHRpcEljb25TaXplJ10gfHwgJzIwJ1wiPlxyXG4gICAgICAgICAgICAgICAgPC9zYS1pY29uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDwhLS0gRHJvcGRvd24gQnV0dG9uIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lclwiICNkcm9wZG93bkNvbnRhaW5lciBbY2xhc3MuZGlzYWJsZWRdPVwicGFyYW1zPy5kaXNhYmxlZFwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCIgY2xhc3M9XCJtZW51LXRyaWdnZXJcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFyYW1zPy5kaXNhYmxlZFwiIFthdHRyLmFyaWEtbGFiZWxdPVwicGFyYW1zPy5sYWJlbCB8fCAnRHJvcGRvd24gbWVudSdcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidtZW51J1wiIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwibWVudVRyaWdnZXI/Lm1lbnVPcGVuXCJcclxuICAgICAgICAgICAgKG1lbnVPcGVuZWQpPVwib25NZW51T3BlbmVkKClcIiAobWVudUNsb3NlZCk9XCJvbk1lbnVDbG9zZWQoKVwiPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3RlZC12YWx1ZVwiIFtjbGFzcy5wbGFjZWhvbGRlcl09XCIhZm9ybUNvbnRyb2wudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSXRlbSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd25fcmlnaHRfaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPHNhLWljb24gW2ljb25dPVwiJ2Rvd25PdXRsaW5lZCdcIiBbc2l6ZV09XCInMjInXCI+PC9zYS1pY29uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gRHJvcGRvd24gTWVudSAtLT5cclxuICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJ0d28tcGFuZWwtbWVudVwiIFtoYXNCYWNrZHJvcF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0d28tcGFuZWwtZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1lbnVJdGVtc1wiIGNsYXNzPVwibWVudS1pdGVtXCIgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLm5hbWUgPT09IGFjdGl2ZUl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3QoaXRlbSwgJGV2ZW50KVwiIHJvbGU9XCJtZW51aXRlbVwiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkYXRlJ1wiIFtpY29uXT1cIidyaWdodENoZXZyb24nXCIgW3NpemVdPVwiJzE2J1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NhLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LXJpZ2h0XCIgKm5nSWY9XCJhY3RpdmVJdGVtID09PSAnZGF0ZSdcIiAoY2xpY2spPVwic3RvcENhbGVuZGFyQ2xvc2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cImNhbGVuZGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jYWxlbmRhciBbKHNlbGVjdGVkKV09XCJzZWxlY3RlZERhdGVcIiAoc2VsZWN0ZWRDaGFuZ2UpPVwib25EYXRlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlld0NoYW5nZWQpPVwib25WaWV3Q2hhbmdlZCgpXCIgW21pbkRhdGVdPVwicGFyYW1zPy5taW5EYXRlXCIgW21heERhdGVdPVwicGFyYW1zPy5tYXhEYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhbGVuZGFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gVmFsaWRhdGlvbiBNZXNzYWdlIC0tPlxyXG4gICAgQGlmKCFmb3JtQ29udHJvbC52YWxpZCl7XHJcbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZS1jb250YWluZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPGZvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2UgW2ZpZWxkXT1cImZpZWxkXCI+PC9mb3JtbHktdmFsaWRhdGlvbi1tZXNzYWdlPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgQGlmKCEhcHJvcHM/Llsnc3VwcG9ydFRleHQnXSl7XHJcbiAgICA8cCBjbGFzcz1cInNhLWRyb3Bkb3duLXN1cHBvcnRUZXh0XCI+e3sgcHJvcHM/Llsnc3VwcG9ydFRleHQnXSB9fTwvcD5cclxuICAgIH1cclxuPC9kaXY+Il19
@@ -209,11 +209,11 @@ export class FilterComponent {
209
209
  window.scrollTo({ top: 0, behavior: 'smooth' });
210
210
  }
211
211
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FilterComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
212
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FilterComponent, isStandalone: true, selector: "sa-filter", inputs: { config: "config", filterValues: "filterValues" }, outputs: { onClickEvent: "onClickEvent", filterSelected: "filterSelected", filterRemoved: "filterRemoved", dropdownToggled: "dropdownToggled" }, viewQueries: [{ propertyName: "filterByContent", first: true, predicate: ["filterByContent"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\n\n <div class=\"filter-container\">\n <!-- Main Filter By Dropdown -->\n <div class=\"dropdown filter-by-dropdown\">\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\n 'filled-btn': config?.filterButtonStyle === 'filled',\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\n }\" (click)=\"toggleDropdown($event)\">\n <span>{{config?.filterLabel}}</span>\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\n </button>\n\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\n (touchend)=\"onTouchEnd()\">\n <div class=\"filter-section\">\n <!-- Dynamic Filter Items -->\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\n <span class=\"filter-label\">{{item.text}}</span>\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\n [size]=\"'16'\" \n [matTooltip]=\"item?.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\" \n class=\"tooltip-icon d-flex\"\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\n </div>\n <ng-container *ngIf=\"item?.subMenu?.length\">\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\n [attr.data-value]=\"option.value\"\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\n (click)=\"selectFilter($event)\">\n <span>{{option.label}}</span>\n <div class=\"info-icon\" *ngIf=\"option.icon\">\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\" \n class=\"tooltip-icon d-flex\"\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".filter-container{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.dropdown{position:relative;display:flex}.dropdown-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;border-radius:6px;cursor:pointer;transition:all .2s ease-in-out}.filled-btn{background-color:#7f56d9;color:#fff;border:none;border-radius:4px}.outlined-btn{border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}.outlined-btn:hover{background-color:#f9fafb}.filter-by-btn{padding:0 12px;height:36px;cursor:pointer;display:flex;align-items:center;flex:1 0 0;font-size:.875rem;font-weight:500;transition:all .2s ease;min-width:120px;justify-content:space-between}.filter-by-btn span{font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.filter-by-btn:active{transform:translateY(0)}.filter-by-content{position:absolute;top:100%;left:0;min-width:-webkit-fill-available;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.dropdown.active .filter-by-content{opacity:1;visibility:visible;transform:translateY(0)}.filter-section{padding:0rem}.filter-item{border-bottom:1px solid #f3f4f6;position:relative}.filter-item:last-child{border-bottom:none}.filter-header{padding:.75rem .6rem;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s ease}.filter-header:hover{background:var(--Primary-50, #F4EBFF)}.filter-label{font-weight:500;color:#374151;font-size:.875rem}.filter-arrow{transition:transform .2s ease;color:#9ca3af}.filter-item.active{background:var(--Primary-50, #F4EBFF)}.filter-submenu{position:absolute;top:0;left:100%;background:#fff;border:1px solid #e5e7eb;min-width:169px;opacity:0;visibility:hidden;transform:translate(-10px);transition:all .2s ease;z-index:1001}.filter-submenu.show-left{left:auto;right:100%;transform:translate(10px);margin-left:0;margin-right:.5rem}.filter-item.active .filter-submenu{opacity:1;visibility:visible;transform:translate(0)}.filter-item.active .filter-submenu.show-left{transform:translate(0)}.filter-option{padding:.5rem;gap:4px;display:flex;align-items:center;cursor:pointer;transition:all .2s ease;align-self:stretch}.filter-option:hover,.filter-option.selected{background:var(--Primary-50, #F4EBFF)}.filter-option span{font-size:.875rem;color:#374151;margin-right:5px}.info-icon{opacity:.6;transition:opacity .2s ease;margin-top:5px}.info-icon:hover{opacity:1}.info-icon svg{width:14px;height:14px;color:#9ca3af}.add-user-btn{background:#7c3aed;color:#fff;border:none;padding:.75rem 1rem;border-radius:.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:all .2s ease}.selected-filters{background:#fff;padding:1.5rem;border-radius:.75rem;border:1px solid #e5e7eb;box-shadow:0 2px 8px #0000000d}@keyframes fadeIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.container{padding:1rem}.filter-container{flex-direction:column;align-items:stretch}.filter-by-content{position:fixed;top:auto;left:1rem;right:1rem;bottom:1rem;min-width:auto;max-height:70vh;overflow-y:auto}.filter-by-btn,.add-user-btn{width:100%;justify-content:center}.filter-submenu{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;max-width:90vw;max-height:60vh;overflow-y:auto}.filter-submenu.show-left{left:50%;right:auto;transform:translate(-50%,-50%);margin:0}.filter-item.active .filter-submenu,.filter-item.active .filter-submenu.show-left{transform:translate(-50%,-50%)}}.dropdown.filter-by-dropdown.active{border-radius:4px;border:1px solid var(--Primary-500, #7F56D9);background:var(--Structural-White, #FFF)}.filter-by-content{-webkit-overflow-scrolling:touch}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "imgWidth", "imgHeight", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
212
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FilterComponent, isStandalone: true, selector: "sa-filter", inputs: { config: "config", filterValues: "filterValues" }, outputs: { onClickEvent: "onClickEvent", filterSelected: "filterSelected", filterRemoved: "filterRemoved", dropdownToggled: "dropdownToggled" }, viewQueries: [{ propertyName: "filterByContent", first: true, predicate: ["filterByContent"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\r\n\r\n <div class=\"filter-container\">\r\n <!-- Main Filter By Dropdown -->\r\n <div class=\"dropdown filter-by-dropdown\">\r\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\r\n 'filled-btn': config?.filterButtonStyle === 'filled',\r\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\r\n }\" (click)=\"toggleDropdown($event)\">\r\n <span>{{config?.filterLabel}}</span>\r\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\r\n </button>\r\n\r\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\r\n (touchend)=\"onTouchEnd()\">\r\n <div class=\"filter-section\">\r\n <!-- Dynamic Filter Items -->\r\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\r\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\r\n <span class=\"filter-label\">{{item.text}}</span>\r\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\r\n [size]=\"'16'\" \r\n [matTooltip]=\"item?.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\r\n </div>\r\n <ng-container *ngIf=\"item?.subMenu?.length\">\r\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\r\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\r\n [attr.data-value]=\"option.value\"\r\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\r\n (click)=\"selectFilter($event)\">\r\n <span>{{option.label}}</span>\r\n <div class=\"info-icon\" *ngIf=\"option.icon\">\r\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\r\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\r\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\r\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".filter-container{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.dropdown{position:relative;display:flex}.dropdown-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;border-radius:6px;cursor:pointer;transition:all .2s ease-in-out}.filled-btn{background-color:#7f56d9;color:#fff;border:none;border-radius:4px}.outlined-btn{border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}.outlined-btn:hover{background-color:#f9fafb}.filter-by-btn{padding:0 12px;height:36px;cursor:pointer;display:flex;align-items:center;flex:1 0 0;font-size:.875rem;font-weight:500;transition:all .2s ease;min-width:120px;justify-content:space-between}.filter-by-btn span{font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.filter-by-btn:active{transform:translateY(0)}.filter-by-content{position:absolute;top:100%;left:0;min-width:-webkit-fill-available;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.dropdown.active .filter-by-content{opacity:1;visibility:visible;transform:translateY(0)}.filter-section{padding:0rem}.filter-item{border-bottom:1px solid #f3f4f6;position:relative}.filter-item:last-child{border-bottom:none}.filter-header{padding:.75rem .6rem;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s ease}.filter-header:hover{background:var(--Primary-50, #F4EBFF)}.filter-label{font-weight:500;color:#374151;font-size:.875rem}.filter-arrow{transition:transform .2s ease;color:#9ca3af}.filter-item.active{background:var(--Primary-50, #F4EBFF)}.filter-submenu{position:absolute;top:0;left:100%;background:#fff;border:1px solid #e5e7eb;min-width:169px;opacity:0;visibility:hidden;transform:translate(-10px);transition:all .2s ease;z-index:1001}.filter-submenu.show-left{left:auto;right:100%;transform:translate(10px);margin-left:0;margin-right:.5rem}.filter-item.active .filter-submenu{opacity:1;visibility:visible;transform:translate(0)}.filter-item.active .filter-submenu.show-left{transform:translate(0)}.filter-option{padding:.5rem;gap:4px;display:flex;align-items:center;cursor:pointer;transition:all .2s ease;align-self:stretch}.filter-option:hover,.filter-option.selected{background:var(--Primary-50, #F4EBFF)}.filter-option span{font-size:.875rem;color:#374151;margin-right:5px}.info-icon{opacity:.6;transition:opacity .2s ease;margin-top:5px}.info-icon:hover{opacity:1}.info-icon svg{width:14px;height:14px;color:#9ca3af}.add-user-btn{background:#7c3aed;color:#fff;border:none;padding:.75rem 1rem;border-radius:.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:all .2s ease}.selected-filters{background:#fff;padding:1.5rem;border-radius:.75rem;border:1px solid #e5e7eb;box-shadow:0 2px 8px #0000000d}@keyframes fadeIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.container{padding:1rem}.filter-container{flex-direction:column;align-items:stretch}.filter-by-content{position:fixed;top:auto;left:1rem;right:1rem;bottom:1rem;min-width:auto;max-height:70vh;overflow-y:auto}.filter-by-btn,.add-user-btn{width:100%;justify-content:center}.filter-submenu{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;max-width:90vw;max-height:60vh;overflow-y:auto}.filter-submenu.show-left{left:50%;right:auto;transform:translate(-50%,-50%);margin:0}.filter-item.active .filter-submenu,.filter-item.active .filter-submenu.show-left{transform:translate(-50%,-50%)}}.dropdown.filter-by-dropdown.active{border-radius:4px;border:1px solid var(--Primary-500, #7F56D9);background:var(--Structural-White, #FFF)}.filter-by-content{-webkit-overflow-scrolling:touch}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "imgWidth", "imgHeight", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
213
213
  }
214
214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FilterComponent, decorators: [{
215
215
  type: Component,
216
- args: [{ selector: 'sa-filter', standalone: true, imports: [CommonModule, IconComponent, HttpClientModule, MatTooltipModule], template: "<div class=\"container\">\n\n <div class=\"filter-container\">\n <!-- Main Filter By Dropdown -->\n <div class=\"dropdown filter-by-dropdown\">\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\n 'filled-btn': config?.filterButtonStyle === 'filled',\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\n }\" (click)=\"toggleDropdown($event)\">\n <span>{{config?.filterLabel}}</span>\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\n </button>\n\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\n (touchend)=\"onTouchEnd()\">\n <div class=\"filter-section\">\n <!-- Dynamic Filter Items -->\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\n <span class=\"filter-label\">{{item.text}}</span>\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\n [size]=\"'16'\" \n [matTooltip]=\"item?.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\" \n class=\"tooltip-icon d-flex\"\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\n </div>\n <ng-container *ngIf=\"item?.subMenu?.length\">\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\n [attr.data-value]=\"option.value\"\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\n (click)=\"selectFilter($event)\">\n <span>{{option.label}}</span>\n <div class=\"info-icon\" *ngIf=\"option.icon\">\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\" \n class=\"tooltip-icon d-flex\"\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".filter-container{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.dropdown{position:relative;display:flex}.dropdown-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;border-radius:6px;cursor:pointer;transition:all .2s ease-in-out}.filled-btn{background-color:#7f56d9;color:#fff;border:none;border-radius:4px}.outlined-btn{border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}.outlined-btn:hover{background-color:#f9fafb}.filter-by-btn{padding:0 12px;height:36px;cursor:pointer;display:flex;align-items:center;flex:1 0 0;font-size:.875rem;font-weight:500;transition:all .2s ease;min-width:120px;justify-content:space-between}.filter-by-btn span{font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.filter-by-btn:active{transform:translateY(0)}.filter-by-content{position:absolute;top:100%;left:0;min-width:-webkit-fill-available;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.dropdown.active .filter-by-content{opacity:1;visibility:visible;transform:translateY(0)}.filter-section{padding:0rem}.filter-item{border-bottom:1px solid #f3f4f6;position:relative}.filter-item:last-child{border-bottom:none}.filter-header{padding:.75rem .6rem;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s ease}.filter-header:hover{background:var(--Primary-50, #F4EBFF)}.filter-label{font-weight:500;color:#374151;font-size:.875rem}.filter-arrow{transition:transform .2s ease;color:#9ca3af}.filter-item.active{background:var(--Primary-50, #F4EBFF)}.filter-submenu{position:absolute;top:0;left:100%;background:#fff;border:1px solid #e5e7eb;min-width:169px;opacity:0;visibility:hidden;transform:translate(-10px);transition:all .2s ease;z-index:1001}.filter-submenu.show-left{left:auto;right:100%;transform:translate(10px);margin-left:0;margin-right:.5rem}.filter-item.active .filter-submenu{opacity:1;visibility:visible;transform:translate(0)}.filter-item.active .filter-submenu.show-left{transform:translate(0)}.filter-option{padding:.5rem;gap:4px;display:flex;align-items:center;cursor:pointer;transition:all .2s ease;align-self:stretch}.filter-option:hover,.filter-option.selected{background:var(--Primary-50, #F4EBFF)}.filter-option span{font-size:.875rem;color:#374151;margin-right:5px}.info-icon{opacity:.6;transition:opacity .2s ease;margin-top:5px}.info-icon:hover{opacity:1}.info-icon svg{width:14px;height:14px;color:#9ca3af}.add-user-btn{background:#7c3aed;color:#fff;border:none;padding:.75rem 1rem;border-radius:.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:all .2s ease}.selected-filters{background:#fff;padding:1.5rem;border-radius:.75rem;border:1px solid #e5e7eb;box-shadow:0 2px 8px #0000000d}@keyframes fadeIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.container{padding:1rem}.filter-container{flex-direction:column;align-items:stretch}.filter-by-content{position:fixed;top:auto;left:1rem;right:1rem;bottom:1rem;min-width:auto;max-height:70vh;overflow-y:auto}.filter-by-btn,.add-user-btn{width:100%;justify-content:center}.filter-submenu{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;max-width:90vw;max-height:60vh;overflow-y:auto}.filter-submenu.show-left{left:50%;right:auto;transform:translate(-50%,-50%);margin:0}.filter-item.active .filter-submenu,.filter-item.active .filter-submenu.show-left{transform:translate(-50%,-50%)}}.dropdown.filter-by-dropdown.active{border-radius:4px;border:1px solid var(--Primary-500, #7F56D9);background:var(--Structural-White, #FFF)}.filter-by-content{-webkit-overflow-scrolling:touch}\n"] }]
216
+ args: [{ selector: 'sa-filter', standalone: true, imports: [CommonModule, IconComponent, HttpClientModule, MatTooltipModule], template: "<div class=\"container\">\r\n\r\n <div class=\"filter-container\">\r\n <!-- Main Filter By Dropdown -->\r\n <div class=\"dropdown filter-by-dropdown\">\r\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\r\n 'filled-btn': config?.filterButtonStyle === 'filled',\r\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\r\n }\" (click)=\"toggleDropdown($event)\">\r\n <span>{{config?.filterLabel}}</span>\r\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\r\n </button>\r\n\r\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\r\n (touchend)=\"onTouchEnd()\">\r\n <div class=\"filter-section\">\r\n <!-- Dynamic Filter Items -->\r\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\r\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\r\n <span class=\"filter-label\">{{item.text}}</span>\r\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\r\n [size]=\"'16'\" \r\n [matTooltip]=\"item?.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\r\n </div>\r\n <ng-container *ngIf=\"item?.subMenu?.length\">\r\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\r\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\r\n [attr.data-value]=\"option.value\"\r\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\r\n (click)=\"selectFilter($event)\">\r\n <span>{{option.label}}</span>\r\n <div class=\"info-icon\" *ngIf=\"option.icon\">\r\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\r\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\r\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\r\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".filter-container{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.dropdown{position:relative;display:flex}.dropdown-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;border-radius:6px;cursor:pointer;transition:all .2s ease-in-out}.filled-btn{background-color:#7f56d9;color:#fff;border:none;border-radius:4px}.outlined-btn{border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}.outlined-btn:hover{background-color:#f9fafb}.filter-by-btn{padding:0 12px;height:36px;cursor:pointer;display:flex;align-items:center;flex:1 0 0;font-size:.875rem;font-weight:500;transition:all .2s ease;min-width:120px;justify-content:space-between}.filter-by-btn span{font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.filter-by-btn:active{transform:translateY(0)}.filter-by-content{position:absolute;top:100%;left:0;min-width:-webkit-fill-available;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.dropdown.active .filter-by-content{opacity:1;visibility:visible;transform:translateY(0)}.filter-section{padding:0rem}.filter-item{border-bottom:1px solid #f3f4f6;position:relative}.filter-item:last-child{border-bottom:none}.filter-header{padding:.75rem .6rem;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s ease}.filter-header:hover{background:var(--Primary-50, #F4EBFF)}.filter-label{font-weight:500;color:#374151;font-size:.875rem}.filter-arrow{transition:transform .2s ease;color:#9ca3af}.filter-item.active{background:var(--Primary-50, #F4EBFF)}.filter-submenu{position:absolute;top:0;left:100%;background:#fff;border:1px solid #e5e7eb;min-width:169px;opacity:0;visibility:hidden;transform:translate(-10px);transition:all .2s ease;z-index:1001}.filter-submenu.show-left{left:auto;right:100%;transform:translate(10px);margin-left:0;margin-right:.5rem}.filter-item.active .filter-submenu{opacity:1;visibility:visible;transform:translate(0)}.filter-item.active .filter-submenu.show-left{transform:translate(0)}.filter-option{padding:.5rem;gap:4px;display:flex;align-items:center;cursor:pointer;transition:all .2s ease;align-self:stretch}.filter-option:hover,.filter-option.selected{background:var(--Primary-50, #F4EBFF)}.filter-option span{font-size:.875rem;color:#374151;margin-right:5px}.info-icon{opacity:.6;transition:opacity .2s ease;margin-top:5px}.info-icon:hover{opacity:1}.info-icon svg{width:14px;height:14px;color:#9ca3af}.add-user-btn{background:#7c3aed;color:#fff;border:none;padding:.75rem 1rem;border-radius:.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:all .2s ease}.selected-filters{background:#fff;padding:1.5rem;border-radius:.75rem;border:1px solid #e5e7eb;box-shadow:0 2px 8px #0000000d}@keyframes fadeIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.container{padding:1rem}.filter-container{flex-direction:column;align-items:stretch}.filter-by-content{position:fixed;top:auto;left:1rem;right:1rem;bottom:1rem;min-width:auto;max-height:70vh;overflow-y:auto}.filter-by-btn,.add-user-btn{width:100%;justify-content:center}.filter-submenu{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;max-width:90vw;max-height:60vh;overflow-y:auto}.filter-submenu.show-left{left:50%;right:auto;transform:translate(-50%,-50%);margin:0}.filter-item.active .filter-submenu,.filter-item.active .filter-submenu.show-left{transform:translate(-50%,-50%)}}.dropdown.filter-by-dropdown.active{border-radius:4px;border:1px solid var(--Primary-500, #7F56D9);background:var(--Structural-White, #FFF)}.filter-by-content{-webkit-overflow-scrolling:touch}\n"] }]
217
217
  }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { config: [{
218
218
  type: Input
219
219
  }], filterValues: [{
@@ -231,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
231
231
  }], dropdownToggled: [{
232
232
  type: Output
233
233
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUFTN0QsTUFBTSxPQUFPLGVBQWU7SUFRMUIsSUFBMkIsWUFBWSxDQUFDLEtBQW1CO1FBQ3pELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQWdCRCxZQUFvQixRQUFtQixFQUFVLFdBQXVCO1FBQXBELGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTFCL0QsV0FBTSxHQUFpQjtZQUM5QixXQUFXLEVBQUUsV0FBVztZQUN4QixpQkFBaUIsRUFBRSxVQUFVO1lBQzdCLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7UUFVUSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ3BELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDMUQs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QUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0E5T1UsZUFBZTtrR0FBZixlQUFlLHNZQ2I1Qixzd0dBbURNLGc2SEQxQ00sWUFBWSw4VkFBRSxhQUFhLDZOQUFFLGdCQUFnQiw4QkFBRSxnQkFBZ0I7OzJGQUk5RCxlQUFlO2tCQVAzQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO3VHQU1qRSxNQUFNO3NCQUFkLEtBQUs7Z0JBTXFCLFlBQVk7c0JBQXRDLEtBQUs7dUJBQUMsY0FBYztnQkFNUyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFFbEIsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgSHR0cENsaWVudE1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgY29uZmlnOiBGaWx0ZXJDb25maWcgPSB7XG4gICAgZmlsdGVyTGFiZWw6ICdGaWx0ZXIgYnknLFxuICAgIGZpbHRlckJ1dHRvblN0eWxlOiAnb3V0bGluZWQnLFxuICAgIGZpbHRlckl0ZW1zOiBbXVxuICB9O1xuICBcbiAgQElucHV0KCdmaWx0ZXJWYWx1ZXMnKSBzZXQgZmlsdGVyVmFsdWVzKHZhbHVlOiBGaWx0ZXJDb25maWcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgQFZpZXdDaGlsZCgnZmlsdGVyQnlDb250ZW50JykgZmlsdGVyQnlDb250ZW50ITogRWxlbWVudFJlZjtcbiAgXG4gIEBPdXRwdXQoKSBvbkNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckNsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU2VsZWN0aW9uRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJSZW1vdmFsRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkcm9wZG93blRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgdG91Y2hTdGFydFkgPSAwO1xuICB0b3VjaEVuZFkgPSAwO1xuICBkcm9wZG93bkFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNlbGVjdGVkRmlsdGVyczogUmVjb3JkPHN0cmluZywgRmlsdGVyU2VsZWN0aW9uPiA9IHt9O1xuICBzdWJtZW51QWN0aXZlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZikgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVHbG9iYWxDbGljayhlKSk7XG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdrZXlkb3duJywgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHRoaXMuY2xvc2VBbGwoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHRoaXMuaGFuZGxlUmVzaXplKCkpO1xuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duJyk7XG4gICAgZHJvcGRvd24uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG4gICAgdGhpcy5kcm9wZG93bkFjdGl2ZSA9IGRyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJyk7XG4gICAgdGhpcy5kcm9wZG93blRvZ2dsZWQuZW1pdCh0aGlzLmRyb3Bkb3duQWN0aXZlKTtcbiAgfVxuXG4gIHRvZ2dsZVN1Ym1lbnUoZWxlbWVudDogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IGN1cnJlbnRIZWFkZXIgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSBjdXJyZW50SGVhZGVyLmNsb3Nlc3QoJy5maWx0ZXItaXRlbScpO1xuXG4gICAgLy8gQ2xvc2UgYWxsIG90aGVyIGZpbHRlciBpdGVtc1xuICAgIGNvbnN0IGFsbEl0ZW1zID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItaXRlbScpO1xuICAgIGFsbEl0ZW1zLmZvckVhY2goKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXRlbSAhPT0gY3VycmVudEl0ZW0pIHtcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRvZ2dsZSB0aGUgY3VycmVudCBpdGVtXG4gICAgY3VycmVudEl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG5cbiAgICAvLyBJZiBpdCdzIG5vdyBhY3RpdmUsIHBvc2l0aW9uIGl0cyBzdWJtZW51XG4gICAgaWYgKGN1cnJlbnRJdGVtLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcbiAgICAgIGNvbnN0IHN1Ym1lbnUgPSBjdXJyZW50SXRlbS5xdWVyeVNlbGVjdG9yKCcuZmlsdGVyLXN1Ym1lbnUnKTtcbiAgICAgIHRoaXMucG9zaXRpb25TdWJtZW51KHN1Ym1lbnUgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgICBcbiAgICAvLyBMZWdhY3kgZXZlbnRcbiAgICB0aGlzLm9uQ2xpY2tFdmVudC5lbWl0KHsgXG4gICAgICBldmVudDogJ2NsaWNrJywgXG4gICAgICB0eXBlOiAnTWVudScsIFxuICAgICAgaXRlbTogZWxlbWVudCxcbiAgICAgIGZpbHRlclR5cGU6IGVsZW1lbnQsXG4gICAgICBpc0FjdGl2ZTogY3VycmVudEl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKVxuICAgIH0pO1xuXG4gICAgLy8gVG9nZ2xlIGFjdGl2ZSBzdGF0ZVxuICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5zdWJtZW51QWN0aXZlW2VsZW1lbnRdO1xuICAgIHRoaXMuc3VibWVudUFjdGl2ZSA9IHt9OyAvLyBjbG9zZSBhbGxcbiAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICB0aGlzLnN1Ym1lbnVBY3RpdmVbZWxlbWVudF0gPSB0cnVlOyAvLyBvcGVuIGN1cnJlbnRcbiAgICB9XG4gIH1cblxuICBzZWxlY3RGaWx0ZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBvcHRpb24gPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uLmRhdGFzZXRbJ3ZhbHVlJ10gfHwgJyc7XG4gICAgY29uc3QgdGV4dCA9IG9wdGlvbi5xdWVyeVNlbGVjdG9yKCdzcGFuJyk/LnRleHRDb250ZW50IHx8ICcnO1xuXG4gICAgLy8gRmluZCBwYXJlbnQgc3VibWVudSBhbmQgaXRzIGZpbHRlciB0eXBlXG4gICAgY29uc3Qgc3VibWVudSA9IG9wdGlvbi5jbG9zZXN0KCcuZmlsdGVyLXN1Ym1lbnUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIXN1Ym1lbnUgfHwgIXN1Ym1lbnUuaWQuZW5kc1dpdGgoJ1N1Ym1lbnUnKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsdGVyVHlwZSA9IHN1Ym1lbnUuaWQucmVwbGFjZSgnU3VibWVudScsICcnKTtcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgZmlsdGVyIGlzIGFscmVhZHkgc2VsZWN0ZWQgKHRvZ2dsZSBmdW5jdGlvbmFsaXR5KVxuICAgIGNvbnN0IGlzQ3VycmVudGx5U2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkRmlsdGVyc1tmaWx0ZXJUeXBlXSAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyc1tmaWx0ZXJUeXBlXS52YWx1ZSA9PT0gdmFsdWU7XG5cbiAgICBpZiAoaXNDdXJyZW50bHlTZWxlY3RlZCkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBmaWx0ZXIgaWYgaXQncyBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXJUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZXNlbGVjdCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnVcbiAgICBzdWJtZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItb3B0aW9uJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcblxuICAgIC8vIFNlbGVjdCB0aGUgY2xpY2tlZCBvcHRpb25cbiAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcblxuICAgIC8vIFN0b3JlIHNlbGVjdGVkIGZpbHRlclxuICAgIGNvbnN0IHNlbGVjdGlvbjogRmlsdGVyU2VsZWN0aW9uID0geyB2YWx1ZSwgdGV4dCwgZmlsdGVyVHlwZSB9O1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzW2ZpbHRlclR5cGVdID0gc2VsZWN0aW9uO1xuXG4gICAgLy8gRW1pdCBlbmhhbmNlZCBldmVudHNcbiAgICB0aGlzLmZpbHRlclNlbGVjdGVkLmVtaXQoe1xuICAgICAgZmlsdGVyVHlwZSxcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIGFsbFNlbGVjdGlvbnM6IHsgLi4udGhpcy5zZWxlY3RlZEZpbHRlcnMgfVxuICAgIH0pO1xuXG4gICAgLy8gTGVnYWN5IGV2ZW50XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQuZW1pdCh7IFxuICAgICAgZXZlbnQ6ICdjbGljaycsIFxuICAgICAgdHlwZTogJ1N1YiBNZW51JywgXG4gICAgICBpdGVtOiB2YWx1ZSxcbiAgICAgIGZpbHRlclR5cGUsXG4gICAgICBzZWxlY3Rpb25cbiAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZUFsbCgpLCAxMDApO1xuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlbW92ZWRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkRmlsdGVyc1t0eXBlXTtcbiAgICBkZWxldGUgdGhpcy5zZWxlY3RlZEZpbHRlcnNbdHlwZV07XG4gICAgXG4gICAgY29uc3Qgc3VibWVudSA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0eXBlfVN1Ym1lbnVgKTtcbiAgICBpZiAoc3VibWVudSkge1xuICAgICAgc3VibWVudS5xdWVyeVNlbGVjdG9yQWxsKCcuZmlsdGVyLW9wdGlvbicpLmZvckVhY2goKG9wdDogSFRNTEVsZW1lbnQpID0+IG9wdC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcbiAgICB9XG5cbiAgICAvLyBFbWl0IHJlbW92YWwgZXZlbnRcbiAgICB0aGlzLmZpbHRlclJlbW92ZWQuZW1pdCh7XG4gICAgICBmaWx0ZXJUeXBlOiB0eXBlLFxuICAgICAgcmVtb3ZlZFNlbGVjdGlvbixcbiAgICAgIHJlbWFpbmluZ1NlbGVjdGlvbnM6IHsgLi4udGhpcy5zZWxlY3RlZEZpbHRlcnMgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIGZpbHRlciBvcHRpb24gaXMgc2VsZWN0ZWRcbiAgaXNGaWx0ZXJPcHRpb25TZWxlY3RlZChmaWx0ZXJUeXBlOiBzdHJpbmcsIG9wdGlvblZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbHRlcnNbZmlsdGVyVHlwZV0gJiYgXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzW2ZpbHRlclR5cGVdLnZhbHVlID09PSBvcHRpb25WYWx1ZTtcbiAgfVxuXG4gIC8vIFB1YmxpYyBtZXRob2QgdG8gZ2V0IGN1cnJlbnQgc2VsZWN0aW9uc1xuICBnZXRTZWxlY3RlZEZpbHRlcnMoKTogUmVjb3JkPHN0cmluZywgRmlsdGVyU2VsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5zZWxlY3RlZEZpbHRlcnMgfTtcbiAgfVxuXG4gIC8vIFB1YmxpYyBtZXRob2QgdG8gY2xlYXIgYWxsIGZpbHRlcnNcbiAgY2xlYXJBbGxGaWx0ZXJzKCk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICAgdGhpcy5yZW1vdmVGaWx0ZXIodHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQdWJsaWMgbWV0aG9kIHRvIHNldCBmaWx0ZXJzIHByb2dyYW1tYXRpY2FsbHlcbiAgc2V0RmlsdGVycyhmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJTZWxlY3Rpb24+KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMgPSB7IC4uLmZpbHRlcnMgfTtcbiAgICAvLyBVcGRhdGUgVUkgdG8gcmVmbGVjdCBzZWxlY3Rpb25zXG4gICAgT2JqZWN0LmVudHJpZXMoZmlsdGVycykuZm9yRWFjaCgoW3R5cGUsIHNlbGVjdGlvbl0pID0+IHtcbiAgICAgIGNvbnN0IHN1Ym1lbnUgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dHlwZX1TdWJtZW51YCk7XG4gICAgICBpZiAoc3VibWVudSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBzdWJtZW51LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXZhbHVlPVwiJHtzZWxlY3Rpb24udmFsdWV9XCJdYCk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duJyk7XG4gICAgZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItaXRlbScpLmZvckVhY2goKGl0ZW06IEhUTUxFbGVtZW50KSA9PiBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcbiAgfVxuXG4gIGhhbmRsZUdsb2JhbENsaWNrKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmRyb3Bkb3duJykpIHtcbiAgICAgIHRoaXMuY2xvc2VBbGwoKTtcbiAgICB9XG4gIH1cblxuICBwb3NpdGlvblN1Ym1lbnUoc3VibWVudTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXN1Ym1lbnUpIHJldHVybjtcbiAgICBzdWJtZW51LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3ctbGVmdCcpO1xuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA3NjgpIHJldHVybjtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBzdWJtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHJlY3QubGVmdCArIHN1Ym1lbnUub2Zmc2V0V2lkdGggPiB3aW5kb3cuaW5uZXJXaWR0aCAtIDIwKSB7XG4gICAgICAgIHN1Ym1lbnUuY2xhc3NMaXN0LmFkZCgnc2hvdy1sZWZ0Jyk7XG4gICAgICB9XG4gICAgfSwgMTApO1xuICB9XG5cbiAgaGFuZGxlUmVzaXplKCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCgodGhpcyBhcyBhbnkpLl9yZXNpemVUaW1lb3V0KTtcbiAgICAodGhpcyBhcyBhbnkpLl9yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlQWxsKCksIDI1MCk7XG4gIH1cblxuICBvblRvdWNoU3RhcnQoZTogVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hTdGFydFkgPSBlLmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblk7XG4gIH1cblxuICBvblRvdWNoRW5kKCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hFbmRZID0gZXZlbnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50ID8gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uc2NyZWVuWSA6IDA7XG4gICAgdGhpcy5oYW5kbGVTd2lwZUdlc3R1cmUoKTtcbiAgfVxuXG4gIGhhbmRsZVN3aXBlR2VzdHVyZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzd2lwZVRocmVzaG9sZCA9IDUwO1xuICAgIGNvbnN0IHN3aXBlRGlzdGFuY2UgPSB0aGlzLnRvdWNoU3RhcnRZIC0gdGhpcy50b3VjaEVuZFk7XG4gICAgaWYgKHN3aXBlRGlzdGFuY2UgPCAtc3dpcGVUaHJlc2hvbGQgJiYgdGhpcy5maWx0ZXJCeUNvbnRlbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgIGNvbnN0IGRyb3Bkb3duID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bicpO1xuICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgc21vb3RoU2Nyb2xsVG9Ub3AoKTogdm9pZCB7XG4gICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gIH1cblxufVxuXG4vLyBFbmhhbmNlZCBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNvbmZpZyB7XG4gIGZpbHRlckxhYmVsOiBzdHJpbmc7XG4gIGZpbHRlckJ1dHRvblN0eWxlPzogJ2ZpbGxlZCcgfCAnb3V0bGluZWQnO1xuICBmaWx0ZXJJdGVtczogRmlsdGVyQ2F0ZWdvcnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDYXRlZ29yeSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgc3ViTWVudT86IEZpbHRlck9wdGlvbltdO1xuICB0b29sdGlwPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlck9wdGlvbiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0b29sdGlwPzogc3RyaW5nO1xuICBpY29uPzoge1xuICAgIGljb246IHN0cmluZztcbiAgICBzaXplOiBzdHJpbmc7XG4gICAgaWNvblBhdGg/OiBzdHJpbmc7XG4gICAgaWNvblVybD86IHN0cmluZztcbiAgICBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgICB0b29sdGlwPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclNlbGVjdGlvbiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNsaWNrRXZlbnQge1xuICBldmVudDogc3RyaW5nO1xuICB0eXBlOiAnTWVudScgfCAnU3ViIE1lbnUnO1xuICBpdGVtOiBhbnk7XG4gIGZpbHRlclR5cGU/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbj86IEZpbHRlclNlbGVjdGlvbjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclNlbGVjdGlvbkV2ZW50IHtcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xuICBzZWxlY3Rpb246IEZpbHRlclNlbGVjdGlvbjtcbiAgYWxsU2VsZWN0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyU2VsZWN0aW9uPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJSZW1vdmFsRXZlbnQge1xuICBmaWx0ZXJUeXBlOiBzdHJpbmc7XG4gIHJlbW92ZWRTZWxlY3Rpb24/OiBGaWx0ZXJTZWxlY3Rpb247XG4gIHJlbWFpbmluZ1NlbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj47XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8IS0tIE1haW4gRmlsdGVyIEJ5IERyb3Bkb3duIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24gZmlsdGVyLWJ5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24tYnRuIGZpbHRlci1ieS1idG5cIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2ZpbGxlZC1idG4nOiBjb25maWc/LmZpbHRlckJ1dHRvblN0eWxlID09PSAnZmlsbGVkJyxcbiAgICAgICAgICAgICAgICAnb3V0bGluZWQtYnRuJzogY29uZmlnPy5maWx0ZXJCdXR0b25TdHlsZSA9PT0gJ291dGxpbmVkJ1xuICAgICAgICAgICAgfVwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tjb25maWc/LmZpbHRlckxhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwiJ2Rvd25DaGV2cm9uT3V0bGluZWQnXCIgW3NpemVdPVwiJzIwJ1wiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGVudCBmaWx0ZXItYnktY29udGVudFwiICNmaWx0ZXJCeUNvbnRlbnQgKHRvdWNoc3RhcnQpPVwib25Ub3VjaFN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICh0b3VjaGVuZCk9XCJvblRvdWNoRW5kKClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEeW5hbWljIEZpbHRlciBJdGVtcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb25maWc/LmZpbHRlckl0ZW1zXCIgY2xhc3M9XCJmaWx0ZXItaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1oZWFkZXJcIiBbaWRdPVwiaXRlbS50ZXh0KydIZWFkZXInXCIgKGNsaWNrKT1cInRvZ2dsZVN1Ym1lbnUoaXRlbS50ZXh0LCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1sYWJlbFwiPnt7aXRlbS50ZXh0fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gKm5nSWY9XCJpdGVtPy5zdWJNZW51Py5sZW5ndGhcIiBbaWNvbl09XCIncmlnaHRDaGV2cm9uT3V0bGluZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJzE2J1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpdGVtPy50b29sdGlwIHx8ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9vbHRpcC1pY29uIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIWl0ZW0/LnRvb2x0aXBcIj48L3NhLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtPy5zdWJNZW51Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXN1Ym1lbnVcIiBbaWRdPVwiaXRlbS50ZXh0KydTdWJtZW51J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbS5zdWJNZW51XCIgY2xhc3M9XCJmaWx0ZXItb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnOiBpc0ZpbHRlck9wdGlvblNlbGVjdGVkKGl0ZW0uaWQsIG9wdGlvbi52YWx1ZSl9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGaWx0ZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tvcHRpb24ubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWljb25cIiAqbmdJZj1cIm9wdGlvbi5pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwib3B0aW9uLmljb24uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uUGF0aF09XCJvcHRpb24uaWNvbi5pY29uUGF0aFwiIFtpY29uVXJsXT1cIm9wdGlvbi5pY29uLmljb25VcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJvcHRpb24uaWNvbi5zaXplXCIgW2N1c3RvbUNsYXNzXT1cIm9wdGlvbi5pY29uLmN1c3RvbUNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwib3B0aW9uLmRlc2NyaXB0aW9uIHx8IG9wdGlvbi50b29sdGlwIHx8IG9wdGlvbi5pY29uLnRvb2x0aXAgfHwgJydcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b29sdGlwLWljb24gZC1mbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhKG9wdGlvbi5kZXNjcmlwdGlvbiB8fCBvcHRpb24udG9vbHRpcCB8fCBvcHRpb24uaWNvbi50b29sdGlwKVwiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUFTN0QsTUFBTSxPQUFPLGVBQWU7SUFRMUIsSUFBMkIsWUFBWSxDQUFDLEtBQW1CO1FBQ3pELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQWdCRCxZQUFvQixRQUFtQixFQUFVLFdBQXVCO1FBQXBELGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTFCL0QsV0FBTSxHQUFpQjtZQUM5QixXQUFXLEVBQUUsV0FBVztZQUN4QixpQkFBaUIsRUFBRSxVQUFVO1lBQzdCLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7UUFVUSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ3BELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDMUQs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QUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0E5T1UsZUFBZTtrR0FBZixlQUFlLHNZQ2I1Qiw0MkdBbURNLGc2SEQxQ00sWUFBWSw4VkFBRSxhQUFhLDZOQUFFLGdCQUFnQiw4QkFBRSxnQkFBZ0I7OzJGQUk5RCxlQUFlO2tCQVAzQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO3VHQU1qRSxNQUFNO3NCQUFkLEtBQUs7Z0JBTXFCLFlBQVk7c0JBQXRDLEtBQUs7dUJBQUMsY0FBYztnQkFNUyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFFbEIsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzYS1maWx0ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgSHR0cENsaWVudE1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlnOiBGaWx0ZXJDb25maWcgPSB7XHJcbiAgICBmaWx0ZXJMYWJlbDogJ0ZpbHRlciBieScsXHJcbiAgICBmaWx0ZXJCdXR0b25TdHlsZTogJ291dGxpbmVkJyxcclxuICAgIGZpbHRlckl0ZW1zOiBbXVxyXG4gIH07XHJcbiAgXHJcbiAgQElucHV0KCdmaWx0ZXJWYWx1ZXMnKSBzZXQgZmlsdGVyVmFsdWVzKHZhbHVlOiBGaWx0ZXJDb25maWcpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyQnlDb250ZW50JykgZmlsdGVyQnlDb250ZW50ITogRWxlbWVudFJlZjtcclxuICBcclxuICBAT3V0cHV0KCkgb25DbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDbGlja0V2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU2VsZWN0aW9uRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlclJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclJlbW92YWxFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgZHJvcGRvd25Ub2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICB0b3VjaFN0YXJ0WSA9IDA7XHJcbiAgdG91Y2hFbmRZID0gMDtcclxuICBkcm9wZG93bkFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RlZEZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj4gPSB7fTtcclxuICBzdWJtZW51QWN0aXZlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlR2xvYmFsQ2xpY2soZSkpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdrZXlkb3duJywgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgdGhpcy5jbG9zZUFsbCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHRoaXMuaGFuZGxlUmVzaXplKCkpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNvbnN0IGRyb3Bkb3duID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bicpO1xyXG4gICAgZHJvcGRvd24uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XHJcbiAgICB0aGlzLmRyb3Bkb3duQWN0aXZlID0gZHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKTtcclxuICAgIHRoaXMuZHJvcGRvd25Ub2dnbGVkLmVtaXQodGhpcy5kcm9wZG93bkFjdGl2ZSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTdWJtZW51KGVsZW1lbnQ6IGFueSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50SGVhZGVyID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSBjdXJyZW50SGVhZGVyLmNsb3Nlc3QoJy5maWx0ZXItaXRlbScpO1xyXG5cclxuICAgIC8vIENsb3NlIGFsbCBvdGhlciBmaWx0ZXIgaXRlbXNcclxuICAgIGNvbnN0IGFsbEl0ZW1zID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItaXRlbScpO1xyXG4gICAgYWxsSXRlbXMuZm9yRWFjaCgoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgICAgaWYgKGl0ZW0gIT09IGN1cnJlbnRJdGVtKSB7XHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVG9nZ2xlIHRoZSBjdXJyZW50IGl0ZW1cclxuICAgIGN1cnJlbnRJdGVtLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpO1xyXG5cclxuICAgIC8vIElmIGl0J3Mgbm93IGFjdGl2ZSwgcG9zaXRpb24gaXRzIHN1Ym1lbnVcclxuICAgIGlmIChjdXJyZW50SXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7XHJcbiAgICAgIGNvbnN0IHN1Ym1lbnUgPSBjdXJyZW50SXRlbS5xdWVyeVNlbGVjdG9yKCcuZmlsdGVyLXN1Ym1lbnUnKTtcclxuICAgICAgdGhpcy5wb3NpdGlvblN1Ym1lbnUoc3VibWVudSBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIExlZ2FjeSBldmVudFxyXG4gICAgdGhpcy5vbkNsaWNrRXZlbnQuZW1pdCh7IFxyXG4gICAgICBldmVudDogJ2NsaWNrJywgXHJcbiAgICAgIHR5cGU6ICdNZW51JywgXHJcbiAgICAgIGl0ZW06IGVsZW1lbnQsXHJcbiAgICAgIGZpbHRlclR5cGU6IGVsZW1lbnQsXHJcbiAgICAgIGlzQWN0aXZlOiBjdXJyZW50SXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUb2dnbGUgYWN0aXZlIHN0YXRlXHJcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuc3VibWVudUFjdGl2ZVtlbGVtZW50XTtcclxuICAgIHRoaXMuc3VibWVudUFjdGl2ZSA9IHt9OyAvLyBjbG9zZSBhbGxcclxuICAgIGlmICghaXNBY3RpdmUpIHtcclxuICAgICAgdGhpcy5zdWJtZW51QWN0aXZlW2VsZW1lbnRdID0gdHJ1ZTsgLy8gb3BlbiBjdXJyZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaWx0ZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBvcHRpb24gPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb24uZGF0YXNldFsndmFsdWUnXSB8fCAnJztcclxuICAgIGNvbnN0IHRleHQgPSBvcHRpb24ucXVlcnlTZWxlY3Rvcignc3BhbicpPy50ZXh0Q29udGVudCB8fCAnJztcclxuXHJcbiAgICAvLyBGaW5kIHBhcmVudCBzdWJtZW51IGFuZCBpdHMgZmlsdGVyIHR5cGVcclxuICAgIGNvbnN0IHN1Ym1lbnUgPSBvcHRpb24uY2xvc2VzdCgnLmZpbHRlci1zdWJtZW51JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIXN1Ym1lbnUgfHwgIXN1Ym1lbnUuaWQuZW5kc1dpdGgoJ1N1Ym1lbnUnKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlclR5cGUgPSBzdWJtZW51LmlkLnJlcGxhY2UoJ1N1Ym1lbnUnLCAnJyk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBmaWx0ZXIgaXMgYWxyZWFkeSBzZWxlY3RlZCAodG9nZ2xlIGZ1bmN0aW9uYWxpdHkpXHJcbiAgICBjb25zdCBpc0N1cnJlbnRseVNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEZpbHRlcnNbZmlsdGVyVHlwZV0gJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyc1tmaWx0ZXJUeXBlXS52YWx1ZSA9PT0gdmFsdWU7XHJcblxyXG4gICAgaWYgKGlzQ3VycmVudGx5U2VsZWN0ZWQpIHtcclxuICAgICAgLy8gUmVtb3ZlIHRoZSBmaWx0ZXIgaWYgaXQncyBhbHJlYWR5IHNlbGVjdGVkXHJcbiAgICAgIHRoaXMucmVtb3ZlRmlsdGVyKGZpbHRlclR5cGUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGVzZWxlY3QgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51XHJcbiAgICBzdWJtZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItb3B0aW9uJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcclxuXHJcbiAgICAvLyBTZWxlY3QgdGhlIGNsaWNrZWQgb3B0aW9uXHJcbiAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcclxuXHJcbiAgICAvLyBTdG9yZSBzZWxlY3RlZCBmaWx0ZXJcclxuICAgIGNvbnN0IHNlbGVjdGlvbjogRmlsdGVyU2VsZWN0aW9uID0geyB2YWx1ZSwgdGV4dCwgZmlsdGVyVHlwZSB9O1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnNbZmlsdGVyVHlwZV0gPSBzZWxlY3Rpb247XHJcblxyXG4gICAgLy8gRW1pdCBlbmhhbmNlZCBldmVudHNcclxuICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQuZW1pdCh7XHJcbiAgICAgIGZpbHRlclR5cGUsXHJcbiAgICAgIHNlbGVjdGlvbixcclxuICAgICAgYWxsU2VsZWN0aW9uczogeyAuLi50aGlzLnNlbGVjdGVkRmlsdGVycyB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBMZWdhY3kgZXZlbnRcclxuICAgIHRoaXMub25DbGlja0V2ZW50LmVtaXQoeyBcclxuICAgICAgZXZlbnQ6ICdjbGljaycsIFxyXG4gICAgICB0eXBlOiAnU3ViIE1lbnUnLCBcclxuICAgICAgaXRlbTogdmFsdWUsXHJcbiAgICAgIGZpbHRlclR5cGUsXHJcbiAgICAgIHNlbGVjdGlvblxyXG4gICAgfSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlQWxsKCksIDEwMCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaWx0ZXIodHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByZW1vdmVkU2VsZWN0aW9uID0gdGhpcy5zZWxlY3RlZEZpbHRlcnNbdHlwZV07XHJcbiAgICBkZWxldGUgdGhpcy5zZWxlY3RlZEZpbHRlcnNbdHlwZV07XHJcbiAgICBcclxuICAgIGNvbnN0IHN1Ym1lbnUgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dHlwZX1TdWJtZW51YCk7XHJcbiAgICBpZiAoc3VibWVudSkge1xyXG4gICAgICBzdWJtZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItb3B0aW9uJykuZm9yRWFjaCgob3B0OiBIVE1MRWxlbWVudCkgPT4gb3B0LmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVtaXQgcmVtb3ZhbCBldmVudFxyXG4gICAgdGhpcy5maWx0ZXJSZW1vdmVkLmVtaXQoe1xyXG4gICAgICBmaWx0ZXJUeXBlOiB0eXBlLFxyXG4gICAgICByZW1vdmVkU2VsZWN0aW9uLFxyXG4gICAgICByZW1haW5pbmdTZWxlY3Rpb25zOiB7IC4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXJzIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIGZpbHRlciBvcHRpb24gaXMgc2VsZWN0ZWRcclxuICBpc0ZpbHRlck9wdGlvblNlbGVjdGVkKGZpbHRlclR5cGU6IHN0cmluZywgb3B0aW9uVmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzW2ZpbHRlclR5cGVdICYmIFxyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzW2ZpbHRlclR5cGVdLnZhbHVlID09PSBvcHRpb25WYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIFB1YmxpYyBtZXRob2QgdG8gZ2V0IGN1cnJlbnQgc2VsZWN0aW9uc1xyXG4gIGdldFNlbGVjdGVkRmlsdGVycygpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJTZWxlY3Rpb24+IHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXJzIH07XHJcbiAgfVxyXG5cclxuICAvLyBQdWJsaWMgbWV0aG9kIHRvIGNsZWFyIGFsbCBmaWx0ZXJzXHJcbiAgY2xlYXJBbGxGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZEZpbHRlcnMpLmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlRmlsdGVyKHR5cGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBQdWJsaWMgbWV0aG9kIHRvIHNldCBmaWx0ZXJzIHByb2dyYW1tYXRpY2FsbHlcclxuICBzZXRGaWx0ZXJzKGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj4pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0geyAuLi5maWx0ZXJzIH07XHJcbiAgICAvLyBVcGRhdGUgVUkgdG8gcmVmbGVjdCBzZWxlY3Rpb25zXHJcbiAgICBPYmplY3QuZW50cmllcyhmaWx0ZXJzKS5mb3JFYWNoKChbdHlwZSwgc2VsZWN0aW9uXSkgPT4ge1xyXG4gICAgICBjb25zdCBzdWJtZW51ID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3R5cGV9U3VibWVudWApO1xyXG4gICAgICBpZiAoc3VibWVudSkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHN1Ym1lbnUucXVlcnlTZWxlY3RvcihgW2RhdGEtdmFsdWU9XCIke3NlbGVjdGlvbi52YWx1ZX1cIl1gKTtcclxuICAgICAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VBbGwoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkcm9wZG93biA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24nKTtcclxuICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItaXRlbScpLmZvckVhY2goKGl0ZW06IEhUTUxFbGVtZW50KSA9PiBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUdsb2JhbENsaWNrKGU6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bicpKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvc2l0aW9uU3VibWVudShzdWJtZW51OiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgaWYgKCFzdWJtZW51KSByZXR1cm47XHJcbiAgICBzdWJtZW51LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3ctbGVmdCcpO1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2OCkgcmV0dXJuO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBzdWJtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBpZiAocmVjdC5sZWZ0ICsgc3VibWVudS5vZmZzZXRXaWR0aCA+IHdpbmRvdy5pbm5lcldpZHRoIC0gMjApIHtcclxuICAgICAgICBzdWJtZW51LmNsYXNzTGlzdC5hZGQoJ3Nob3ctbGVmdCcpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNpemUoKTogdm9pZCB7XHJcbiAgICBjbGVhclRpbWVvdXQoKHRoaXMgYXMgYW55KS5fcmVzaXplVGltZW91dCk7XHJcbiAgICAodGhpcyBhcyBhbnkpLl9yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlQWxsKCksIDI1MCk7XHJcbiAgfVxyXG5cclxuICBvblRvdWNoU3RhcnQoZTogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy50b3VjaFN0YXJ0WSA9IGUuY2hhbmdlZFRvdWNoZXNbMF0uc2NyZWVuWTtcclxuICB9XHJcblxyXG4gIG9uVG91Y2hFbmQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvdWNoRW5kWSA9IGV2ZW50IGluc3RhbmNlb2YgVG91Y2hFdmVudCA/IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblkgOiAwO1xyXG4gICAgdGhpcy5oYW5kbGVTd2lwZUdlc3R1cmUoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVN3aXBlR2VzdHVyZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN3aXBlVGhyZXNob2xkID0gNTA7XHJcbiAgICBjb25zdCBzd2lwZURpc3RhbmNlID0gdGhpcy50b3VjaFN0YXJ0WSAtIHRoaXMudG91Y2hFbmRZO1xyXG4gICAgaWYgKHN3aXBlRGlzdGFuY2UgPCAtc3dpcGVUaHJlc2hvbGQgJiYgdGhpcy5maWx0ZXJCeUNvbnRlbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPT09IDApIHtcclxuICAgICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duJyk7XHJcbiAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc21vb3RoU2Nyb2xsVG9Ub3AoKTogdm9pZCB7XHJcbiAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICB9XHJcblxyXG59XHJcblxyXG4vLyBFbmhhbmNlZCBpbnRlcmZhY2VzXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ29uZmlnIHtcclxuICBmaWx0ZXJMYWJlbDogc3RyaW5nO1xyXG4gIGZpbHRlckJ1dHRvblN0eWxlPzogJ2ZpbGxlZCcgfCAnb3V0bGluZWQnO1xyXG4gIGZpbHRlckl0ZW1zOiBGaWx0ZXJDYXRlZ29yeVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNhdGVnb3J5IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHRleHQ6IHN0cmluZztcclxuICBzdWJNZW51PzogRmlsdGVyT3B0aW9uW107XHJcbiAgdG9vbHRpcD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJPcHRpb24ge1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICB0b29sdGlwPzogc3RyaW5nO1xyXG4gIGljb24/OiB7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBzaXplOiBzdHJpbmc7XHJcbiAgICBpY29uUGF0aD86IHN0cmluZztcclxuICAgIGljb25Vcmw/OiBzdHJpbmc7XHJcbiAgICBjdXN0b21DbGFzcz86IHN0cmluZztcclxuICAgIHRvb2x0aXA/OiBzdHJpbmc7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTZWxlY3Rpb24ge1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGZpbHRlclR5cGU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDbGlja0V2ZW50IHtcclxuICBldmVudDogc3RyaW5nO1xyXG4gIHR5cGU6ICdNZW51JyB8ICdTdWIgTWVudSc7XHJcbiAgaXRlbTogYW55O1xyXG4gIGZpbHRlclR5cGU/OiBzdHJpbmc7XHJcbiAgc2VsZWN0aW9uPzogRmlsdGVyU2VsZWN0aW9uO1xyXG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTZWxlY3Rpb25FdmVudCB7XHJcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGlvbjogRmlsdGVyU2VsZWN0aW9uO1xyXG4gIGFsbFNlbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUmVtb3ZhbEV2ZW50IHtcclxuICBmaWx0ZXJUeXBlOiBzdHJpbmc7XHJcbiAgcmVtb3ZlZFNlbGVjdGlvbj86IEZpbHRlclNlbGVjdGlvbjtcclxuICByZW1haW5pbmdTZWxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJTZWxlY3Rpb24+O1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDwhLS0gTWFpbiBGaWx0ZXIgQnkgRHJvcGRvd24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duIGZpbHRlci1ieS1kcm9wZG93blwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24tYnRuIGZpbHRlci1ieS1idG5cIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAnZmlsbGVkLWJ0bic6IGNvbmZpZz8uZmlsdGVyQnV0dG9uU3R5bGUgPT09ICdmaWxsZWQnLFxyXG4gICAgICAgICAgICAgICAgJ291dGxpbmVkLWJ0bic6IGNvbmZpZz8uZmlsdGVyQnV0dG9uU3R5bGUgPT09ICdvdXRsaW5lZCdcclxuICAgICAgICAgICAgfVwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2NvbmZpZz8uZmlsdGVyTGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwiZmxleFwiIFtpY29uXT1cIidkb3duQ2hldnJvbk91dGxpbmVkJ1wiIFtzaXplXT1cIicyMCdcIj48L3NhLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRlbnQgZmlsdGVyLWJ5LWNvbnRlbnRcIiAjZmlsdGVyQnlDb250ZW50ICh0b3VjaHN0YXJ0KT1cIm9uVG91Y2hTdGFydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICh0b3VjaGVuZCk9XCJvblRvdWNoRW5kKClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRHluYW1pYyBGaWx0ZXIgSXRlbXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb25maWc/LmZpbHRlckl0ZW1zXCIgY2xhc3M9XCJmaWx0ZXItaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWhlYWRlclwiIFtpZF09XCJpdGVtLnRleHQrJ0hlYWRlcidcIiAoY2xpY2spPVwidG9nZ2xlU3VibWVudShpdGVtLnRleHQsJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItbGFiZWxcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gKm5nSWY9XCJpdGVtPy5zdWJNZW51Py5sZW5ndGhcIiBbaWNvbl09XCIncmlnaHRDaGV2cm9uT3V0bGluZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInMTYnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXRlbT8udG9vbHRpcCB8fCAnJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b29sdGlwLWljb24gZC1mbGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFpdGVtPy50b29sdGlwXCI+PC9zYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0/LnN1Yk1lbnU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1zdWJtZW51XCIgW2lkXT1cIml0ZW0udGV4dCsnU3VibWVudSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbS5zdWJNZW51XCIgY2xhc3M9XCJmaWx0ZXItb3B0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS12YWx1ZV09XCJvcHRpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJzogaXNGaWx0ZXJPcHRpb25TZWxlY3RlZChpdGVtLmlkLCBvcHRpb24udmFsdWUpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGaWx0ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e29wdGlvbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1pY29uXCIgKm5nSWY9XCJvcHRpb24uaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwib3B0aW9uLmljb24uaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25QYXRoXT1cIm9wdGlvbi5pY29uLmljb25QYXRoXCIgW2ljb25VcmxdPVwib3B0aW9uLmljb24uaWNvblVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwib3B0aW9uLmljb24uc2l6ZVwiIFtjdXN0b21DbGFzc109XCJvcHRpb24uaWNvbi5jdXN0b21DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwib3B0aW9uLmRlc2NyaXB0aW9uIHx8IG9wdGlvbi50b29sdGlwIHx8IG9wdGlvbi5pY29uLnRvb2x0aXAgfHwgJydcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9vbHRpcC1pY29uIGQtZmxleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhKG9wdGlvbi5kZXNjcmlwdGlvbiB8fCBvcHRpb24udG9vbHRpcCB8fCBvcHRpb24uaWNvbi50b29sdGlwKVwiPjwvc2EtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19