@morozeckiy/dd-lib 0.7.38 → 0.7.44

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 (106) hide show
  1. package/assets/images/svg/eds-2-m.svg +34 -0
  2. package/assets/images/svg/eds-2.svg +34 -0
  3. package/assets/scss/common.scss +4 -4
  4. package/assets/scss/theme.scss +2 -2
  5. package/assets/scss/titles.scss +2 -2
  6. package/assets/styles.scss +12 -12
  7. package/fesm2022/morozeckiy-dd-lib.mjs +545 -461
  8. package/fesm2022/morozeckiy-dd-lib.mjs.map +1 -1
  9. package/lib/common/lib-common-button.d.ts +1 -1
  10. package/lib/common/lib-common-input-text.d.ts +1 -1
  11. package/lib/components/footer/footer-links-block/footer-link/footer-link.component.d.ts +7 -0
  12. package/lib/components/footer/footer-links-block/footer-links-block.component.d.ts +7 -0
  13. package/lib/components/footer/footer.component.d.ts +21 -3
  14. package/lib/components/index.d.ts +2 -0
  15. package/lib/core/dialog/modal-base/modal-common.component.d.ts +1 -1
  16. package/lib/core/services/destroy.service.d.ts +3 -0
  17. package/lib/lib-input/lib-input.component.d.ts +5 -6
  18. package/lib/lib-search-input/lib-search-input.component.d.ts +2 -3
  19. package/lib/lib-select/lib-select.component.d.ts +6 -5
  20. package/lib/svg-icons/svg-icon.model.d.ts +96 -82
  21. package/morozeckiy-dd-lib-0.7.44.tgz +0 -0
  22. package/package.json +4 -6
  23. package/esm2022/lib/common/const.mjs +0 -10
  24. package/esm2022/lib/common/lib-common-button.mjs +0 -65
  25. package/esm2022/lib/common/lib-common-input-text.mjs +0 -211
  26. package/esm2022/lib/components/data-empty/data-empty.component.mjs +0 -20
  27. package/esm2022/lib/components/error-page/error-page.component.mjs +0 -32
  28. package/esm2022/lib/components/footer/footer.component.mjs +0 -22
  29. package/esm2022/lib/components/index.mjs +0 -7
  30. package/esm2022/lib/components/main-shared/main-shared.component.mjs +0 -16
  31. package/esm2022/lib/components/not-found/not-found.component.mjs +0 -29
  32. package/esm2022/lib/components/tech-works/tech-works.component.mjs +0 -29
  33. package/esm2022/lib/core/dialog/dialog-config.mjs +0 -15
  34. package/esm2022/lib/core/dialog/dialog-container.component.mjs +0 -40
  35. package/esm2022/lib/core/dialog/dialog-ref.mjs +0 -19
  36. package/esm2022/lib/core/dialog/dialog.service.mjs +0 -106
  37. package/esm2022/lib/core/dialog/modal-base/modal-base.component.mjs +0 -52
  38. package/esm2022/lib/core/dialog/modal-base/modal-common.component.mjs +0 -13
  39. package/esm2022/lib/core/directives/auto-height.directive.mjs +0 -36
  40. package/esm2022/lib/core/directives/ban-symbol.directive.mjs +0 -36
  41. package/esm2022/lib/core/directives/click-outside.directive.mjs +0 -42
  42. package/esm2022/lib/core/directives/counter.directive.mjs +0 -76
  43. package/esm2022/lib/core/directives/declension.directive.mjs +0 -40
  44. package/esm2022/lib/core/directives/drop-down-position.directive.mjs +0 -66
  45. package/esm2022/lib/core/directives/fixed-position.directive.mjs +0 -89
  46. package/esm2022/lib/core/directives/list-keyboard-navigation.directive.mjs +0 -57
  47. package/esm2022/lib/core/directives/max-num.directive.mjs +0 -56
  48. package/esm2022/lib/core/directives/phone-mask.directive.mjs +0 -34
  49. package/esm2022/lib/core/directives/resize-textarea.directive.mjs +0 -26
  50. package/esm2022/lib/core/directives/selectable-item.directive.mjs +0 -29
  51. package/esm2022/lib/core/directives/triangle.directive.mjs +0 -75
  52. package/esm2022/lib/core/index.mjs +0 -37
  53. package/esm2022/lib/core/pipes/filter-tabs.pipe.mjs +0 -31
  54. package/esm2022/lib/core/pipes/filter.pipe.mjs +0 -44
  55. package/esm2022/lib/core/pipes/highlight.pipe.mjs +0 -23
  56. package/esm2022/lib/core/pipes/reverse.pipe.mjs +0 -17
  57. package/esm2022/lib/core/pipes/safe.pipe.mjs +0 -34
  58. package/esm2022/lib/core/services/date.service.mjs +0 -119
  59. package/esm2022/lib/core/services/destroy.service.mjs +0 -15
  60. package/esm2022/lib/core/services/fetcher.service.mjs +0 -76
  61. package/esm2022/lib/core/services/interceptors.service.mjs +0 -27
  62. package/esm2022/lib/core/services/svg-icons.service.mjs +0 -26
  63. package/esm2022/lib/core/services/theme-constructor.service.mjs +0 -70
  64. package/esm2022/lib/core/services/validators.service.mjs +0 -106
  65. package/esm2022/lib/core/toast/index.mjs +0 -5
  66. package/esm2022/lib/core/toast/toast/toast-animations.mjs +0 -9
  67. package/esm2022/lib/core/toast/toast/toast.component.mjs +0 -62
  68. package/esm2022/lib/core/toast/toast-config.mjs +0 -35
  69. package/esm2022/lib/core/toast/toast-ref.mjs +0 -15
  70. package/esm2022/lib/core/toast/toast.service.mjs +0 -74
  71. package/esm2022/lib/core/tooltip/tooltip.component.mjs +0 -27
  72. package/esm2022/lib/core/tooltip/tooltip.directive.mjs +0 -179
  73. package/esm2022/lib/lib-accordion/lib-accordion.component.mjs +0 -15
  74. package/esm2022/lib/lib-back-button/lib-back-button.component.mjs +0 -37
  75. package/esm2022/lib/lib-button/lib-button.component.mjs +0 -26
  76. package/esm2022/lib/lib-calendar/lib-calendar.component.mjs +0 -316
  77. package/esm2022/lib/lib-card/lib-card.component.mjs +0 -34
  78. package/esm2022/lib/lib-checkbox/lib-checkbox.component.mjs +0 -72
  79. package/esm2022/lib/lib-comment-input/lib-comment-input.component.mjs +0 -20
  80. package/esm2022/lib/lib-date-input/lib-date-input.component.mjs +0 -117
  81. package/esm2022/lib/lib-date-range/lib-date-range.component.mjs +0 -117
  82. package/esm2022/lib/lib-disclaimer/lib-disclaimer.component.mjs +0 -26
  83. package/esm2022/lib/lib-file-loader/lib-file-loader.component.mjs +0 -116
  84. package/esm2022/lib/lib-file-upload/lib-file-upload.component.mjs +0 -37
  85. package/esm2022/lib/lib-filter/lib-filter.component.mjs +0 -29
  86. package/esm2022/lib/lib-filter-button/lib-filter-button.component.mjs +0 -41
  87. package/esm2022/lib/lib-image-loader/lib-image-loader.component.mjs +0 -14
  88. package/esm2022/lib/lib-info-card/lib-info-card.component.mjs +0 -30
  89. package/esm2022/lib/lib-input/lib-input.component.mjs +0 -99
  90. package/esm2022/lib/lib-loader/lib-loader.component.mjs +0 -22
  91. package/esm2022/lib/lib-period/lib-period.component.mjs +0 -118
  92. package/esm2022/lib/lib-radio/lib-radio.component.mjs +0 -78
  93. package/esm2022/lib/lib-search-input/lib-search-input.component.mjs +0 -209
  94. package/esm2022/lib/lib-select/lib-select.component.mjs +0 -384
  95. package/esm2022/lib/lib-skeleton/lib-skeleton.component.mjs +0 -45
  96. package/esm2022/lib/lib-sort/lib-sort.component.mjs +0 -44
  97. package/esm2022/lib/lib-step/lib-step.component.mjs +0 -19
  98. package/esm2022/lib/lib-svg/lib-svg.component.mjs +0 -75
  99. package/esm2022/lib/lib-svg-icon/lib-svg-icon.component.mjs +0 -61
  100. package/esm2022/lib/lib-tabs-fragment/lib-tabs-fragment.component.mjs +0 -92
  101. package/esm2022/lib/lib-textarea/lib-textarea.component.mjs +0 -62
  102. package/esm2022/lib/svg-icons/svg-icon.model.mjs +0 -409
  103. package/esm2022/lib/utils/decorators.mjs +0 -102
  104. package/esm2022/morozeckiy-dd-lib.mjs +0 -5
  105. package/esm2022/public-api.mjs +0 -41
  106. package/morozeckiy-dd-lib-0.7.38.tgz +0 -0
@@ -1,118 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, } from '@angular/core';
2
- import { LibCardComponent } from '../lib-card/lib-card.component';
3
- import { LibFilterButtonComponent } from '../lib-filter-button/lib-filter-button.component';
4
- import { LibRadioComponent } from '../lib-radio/lib-radio.component';
5
- import { LibCalendarComponent } from '../lib-calendar/lib-calendar.component';
6
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
7
- import { format } from 'date-fns';
8
- import { ClickOutsideDirective, DEFAULT_FORMAT } from "../core";
9
- import { LibSvgIconComponent } from "../lib-svg-icon/lib-svg-icon.component";
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "../core";
12
- import * as i2 from "@angular/forms";
13
- export class LibPeriodComponent {
14
- static { this.idCounter = 1; }
15
- constructor(dateService, cdr) {
16
- this.dateService = dateService;
17
- this.cdr = cdr;
18
- this.setPeriodDate = new EventEmitter();
19
- this.periodIsShown = false;
20
- this.calendarIsShown = false;
21
- this.periodIsSelected = false;
22
- this.calendarIsSelected = false;
23
- }
24
- ngOnInit() {
25
- this.idPeriod = 'period-wrapper-' + LibPeriodComponent.idCounter++;
26
- this.idCalendar = 'calendar-wrapper-' + LibPeriodComponent.idCounter++;
27
- this.periodMenu = this.dateService.getPeriodMenu();
28
- }
29
- registerOnChange(fn) {
30
- this.propagateChange = fn;
31
- }
32
- registerOnTouched(fn) {
33
- this.onTouchedCallback = fn;
34
- }
35
- showPeriod() {
36
- this.periodIsShown = !this.periodIsShown;
37
- this.calendarIsShown = !!this.selectedDate;
38
- }
39
- clearPeriod() {
40
- this.periodIsSelected = false;
41
- this.calendarIsSelected = false;
42
- this.periodIsShown = false;
43
- this.calendarIsShown = false;
44
- this.selectedPeriod = undefined;
45
- this.selectedDate = undefined;
46
- this.setPeriodDate.emit(null);
47
- }
48
- selectPeriod(type) {
49
- this.periodIsShown = false;
50
- this.calendarIsShown = false;
51
- this.periodIsSelected = true;
52
- this.calendarIsSelected = false;
53
- const date = this.dateService.getFormattedDate(type);
54
- this.propagateChange(type);
55
- this.setPeriodDate.emit({ [type]: date });
56
- }
57
- writeValue(value) {
58
- this.selectedPeriod = value;
59
- this.cdr.detectChanges();
60
- }
61
- selectDate($event) {
62
- this.calendarIsShown = false;
63
- if ($event) {
64
- this.selectedPeriod = 'calendar';
65
- this.propagateChange(this.selectedPeriod);
66
- this.periodIsShown = false;
67
- this.periodIsSelected = false;
68
- this.calendarIsSelected = true;
69
- this.setPeriodDate.emit({ calendar: format($event, DEFAULT_FORMAT) });
70
- }
71
- else {
72
- this.selectedDate = undefined;
73
- this.setPeriodDate.emit(null);
74
- if (!this.selectedPeriod) {
75
- this.periodIsSelected = false;
76
- }
77
- this.calendarIsSelected = false;
78
- }
79
- }
80
- clickOutside($event) {
81
- this.periodIsShown = $event;
82
- if (this.periodIsShown && !$event) {
83
- this.calendarIsShown = $event;
84
- }
85
- }
86
- propagateChange(value) { }
87
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LibPeriodComponent, deps: [{ token: i1.DateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
88
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: LibPeriodComponent, isStandalone: true, selector: "dd-lib-period", inputs: { maxDate: "maxDate" }, outputs: { setPeriodDate: "setPeriodDate" }, providers: [
89
- {
90
- provide: NG_VALUE_ACCESSOR,
91
- useExisting: forwardRef(() => LibPeriodComponent),
92
- multi: true,
93
- },
94
- ], ngImport: i0, template: "<div class=\"pos-relative\">\r\n <dd-lib-filter-button\r\n (clearEvent)=\"clearPeriod()\"\r\n (clickEvent)=\"showPeriod()\"\r\n [active]=\"periodIsSelected || calendarIsSelected\"\r\n [id]=\"idPeriod\"\r\n btnColor=\"transparent\">\r\n <div>\u041F\u0435\u0440\u0438\u043E\u0434</div>\r\n </dd-lib-filter-button>\r\n @if (periodIsShown) {\r\n <div (ddClickOutside)=\"clickOutside($event)\" [elements]=\"[idPeriod, idCalendar]\" class=\"period__wrapper\">\r\n <dd-lib-card class=\"period__block\" type=\"small\">\r\n <div>\r\n <div class=\"period__header\">\r\n <div class=\"period__back\" (click)=\"periodIsShown = false\">\r\n <dd-lib-svg-icon icon=\"toggle_arrow_left\"></dd-lib-svg-icon>\r\n <div class=\"g-h5-title\">\u041F\u0435\u0440\u0438\u043E\u0434</div>\r\n </div>\r\n <div class=\"g-h5-title hide-tablet\">\u041F\u0435\u0440\u0438\u043E\u0434</div>\r\n <div (click)=\"clearPeriod()\" class=\"g-text font-medium green cup\">\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C</div>\r\n </div>\r\n <div class=\"period__list\">\r\n @for (period of periodMenu; track period) {\r\n <dd-lib-radio (changed)=\"selectPeriod($event)\" [(ngModel)]=\"selectedPeriod\" [value]=\"period.name\">{{\r\n period.title\r\n }}</dd-lib-radio>\r\n }\r\n </div>\r\n <div (click)=\"calendarIsShown = !calendarIsShown\" class=\"g-text font-medium green cup mt-8\">\r\n {{ calendarIsShown ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : '\u041E\u0442\u043A\u0440\u044B\u0442\u044C' }} \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C\r\n </div>\r\n </div>\r\n </dd-lib-card>\r\n @if (calendarIsShown) {\r\n <dd-lib-calendar\r\n (emitDate)=\"selectDate($event)\"\r\n [(ngModel)]=\"selectedDate\"\r\n [id]=\"idCalendar\"\r\n [maxDate]=\"maxDate\"\r\n class=\"period__calendar\">\r\n </dd-lib-calendar>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: ["dd-lib-filter-button{position:relative}.period__wrapper{position:absolute;left:0;z-index:400;display:block;width:352px;height:348px;margin-top:8px;animation:filter-show .5s forwards}@media screen and (max-width: 840px){.period__wrapper{position:fixed;top:0;width:100%;height:100%;overflow:auto;margin-top:0;animation:shift .3s}}@media screen and (max-width: 840px){.period__block{height:100%}}.period__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}@media screen and (max-width: 840px){.period__header{padding-bottom:24px;border-bottom:1px solid var(--gray-color-200)}}@media screen and (max-width: 480px){.period__header{padding-top:8px}}.period__back{display:none}@media screen and (max-width: 840px){.period__back{display:flex;align-items:center}}.period__back ::ng-deep svg{margin-right:16px}.period__back ::ng-deep svg path{stroke:var(--menu-arr-color)}.period__list{max-height:400px;overflow:auto}@media screen and (max-width: 840px){.period__list{max-height:none}}.period__list ::ng-deep dd-lib-radio{display:block;margin-bottom:16px}@media screen and (max-width: 840px){.period__list ::ng-deep dd-lib-radio:not(:last-child){padding-bottom:16px;border-bottom:1px solid var(--gray-color-200)}}.period__calendar{margin-top:8px;display:block;animation:filter-show .5s forwards}@media screen and (max-width: 840px){.period__calendar{position:fixed;top:0;left:0;width:100%;height:100%;overflow:auto;margin-top:0;animation:shift .3s}}\n"], dependencies: [{ kind: "component", type: LibCardComponent, selector: "dd-lib-card", inputs: ["type", "footerBtn", "sHeight", "skeleton", "parentLvlForSkeleton", "plugs", "borderRadius"], outputs: ["cardBtnEvent"] }, { kind: "component", type: LibFilterButtonComponent, selector: "dd-lib-filter-button", inputs: ["btnTitle", "hintContent"], outputs: ["clearEvent", "hintEvent"] }, { kind: "component", type: LibRadioComponent, selector: "dd-lib-radio", inputs: ["radioId", "disabled", "required", "name", "value", "checked"], outputs: ["changed"] }, { kind: "component", type: LibCalendarComponent, selector: "dd-lib-calendar", inputs: ["type", "formatDate", "formatTime", "rangeMode", "maxHours", "maxMinutes", "needTime", "mode", "maxDate", "minDate"], outputs: ["emitDate", "emitPeriod"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[ddClickOutside]", inputs: ["elements"], outputs: ["ddClickOutside"] }, { kind: "component", type: LibSvgIconComponent, selector: "dd-lib-svg-icon", inputs: ["width", "height", "color", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
95
- }
96
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LibPeriodComponent, decorators: [{
97
- type: Component,
98
- args: [{ selector: 'dd-lib-period', standalone: true, imports: [
99
- LibCardComponent,
100
- LibFilterButtonComponent,
101
- LibRadioComponent,
102
- LibCalendarComponent,
103
- FormsModule,
104
- ClickOutsideDirective,
105
- LibSvgIconComponent,
106
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
107
- {
108
- provide: NG_VALUE_ACCESSOR,
109
- useExisting: forwardRef(() => LibPeriodComponent),
110
- multi: true,
111
- },
112
- ], template: "<div class=\"pos-relative\">\r\n <dd-lib-filter-button\r\n (clearEvent)=\"clearPeriod()\"\r\n (clickEvent)=\"showPeriod()\"\r\n [active]=\"periodIsSelected || calendarIsSelected\"\r\n [id]=\"idPeriod\"\r\n btnColor=\"transparent\">\r\n <div>\u041F\u0435\u0440\u0438\u043E\u0434</div>\r\n </dd-lib-filter-button>\r\n @if (periodIsShown) {\r\n <div (ddClickOutside)=\"clickOutside($event)\" [elements]=\"[idPeriod, idCalendar]\" class=\"period__wrapper\">\r\n <dd-lib-card class=\"period__block\" type=\"small\">\r\n <div>\r\n <div class=\"period__header\">\r\n <div class=\"period__back\" (click)=\"periodIsShown = false\">\r\n <dd-lib-svg-icon icon=\"toggle_arrow_left\"></dd-lib-svg-icon>\r\n <div class=\"g-h5-title\">\u041F\u0435\u0440\u0438\u043E\u0434</div>\r\n </div>\r\n <div class=\"g-h5-title hide-tablet\">\u041F\u0435\u0440\u0438\u043E\u0434</div>\r\n <div (click)=\"clearPeriod()\" class=\"g-text font-medium green cup\">\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C</div>\r\n </div>\r\n <div class=\"period__list\">\r\n @for (period of periodMenu; track period) {\r\n <dd-lib-radio (changed)=\"selectPeriod($event)\" [(ngModel)]=\"selectedPeriod\" [value]=\"period.name\">{{\r\n period.title\r\n }}</dd-lib-radio>\r\n }\r\n </div>\r\n <div (click)=\"calendarIsShown = !calendarIsShown\" class=\"g-text font-medium green cup mt-8\">\r\n {{ calendarIsShown ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : '\u041E\u0442\u043A\u0440\u044B\u0442\u044C' }} \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C\r\n </div>\r\n </div>\r\n </dd-lib-card>\r\n @if (calendarIsShown) {\r\n <dd-lib-calendar\r\n (emitDate)=\"selectDate($event)\"\r\n [(ngModel)]=\"selectedDate\"\r\n [id]=\"idCalendar\"\r\n [maxDate]=\"maxDate\"\r\n class=\"period__calendar\">\r\n </dd-lib-calendar>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: ["dd-lib-filter-button{position:relative}.period__wrapper{position:absolute;left:0;z-index:400;display:block;width:352px;height:348px;margin-top:8px;animation:filter-show .5s forwards}@media screen and (max-width: 840px){.period__wrapper{position:fixed;top:0;width:100%;height:100%;overflow:auto;margin-top:0;animation:shift .3s}}@media screen and (max-width: 840px){.period__block{height:100%}}.period__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}@media screen and (max-width: 840px){.period__header{padding-bottom:24px;border-bottom:1px solid var(--gray-color-200)}}@media screen and (max-width: 480px){.period__header{padding-top:8px}}.period__back{display:none}@media screen and (max-width: 840px){.period__back{display:flex;align-items:center}}.period__back ::ng-deep svg{margin-right:16px}.period__back ::ng-deep svg path{stroke:var(--menu-arr-color)}.period__list{max-height:400px;overflow:auto}@media screen and (max-width: 840px){.period__list{max-height:none}}.period__list ::ng-deep dd-lib-radio{display:block;margin-bottom:16px}@media screen and (max-width: 840px){.period__list ::ng-deep dd-lib-radio:not(:last-child){padding-bottom:16px;border-bottom:1px solid var(--gray-color-200)}}.period__calendar{margin-top:8px;display:block;animation:filter-show .5s forwards}@media screen and (max-width: 840px){.period__calendar{position:fixed;top:0;left:0;width:100%;height:100%;overflow:auto;margin-top:0;animation:shift .3s}}\n"] }]
113
- }], ctorParameters: () => [{ type: i1.DateService }, { type: i0.ChangeDetectorRef }], propDecorators: { maxDate: [{
114
- type: Input
115
- }], setPeriodDate: [{
116
- type: Output
117
- }] } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXBlcmlvZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZC1saWIvc3JjL2xpYi9saWItcGVyaW9kL2xpYi1wZXJpb2QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGQtbGliL3NyYy9saWIvbGliLXBlcmlvZC9saWItcGVyaW9kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFDLHFCQUFxQixFQUFlLGNBQWMsRUFBd0MsTUFBTSxTQUFTLENBQUM7QUFDbEgsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7Ozs7QUEwQjNFLE1BQU0sT0FBTyxrQkFBa0I7YUFDZixjQUFTLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUFlNUIsWUFBb0IsV0FBd0IsRUFBVSxHQUFzQjtRQUF4RCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBYjNELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQStDLENBQUM7UUFH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LEVBQUUsbUJBQW1CLENBQUM7NEJBQ2pELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2dIQUllLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1csYUFBYTtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMaWJDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vbGliLWNhcmQvbGliLWNhcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGliRmlsdGVyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vbGliLWZpbHRlci1idXR0b24vbGliLWZpbHRlci1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGliUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9saWItcmFkaW8vbGliLXJhZGlvLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBMaWJDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uL2xpYi1jYWxlbmRhci9saWItY2FsZW5kYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHtDbGlja091dHNpZGVEaXJlY3RpdmUsIERhdGVTZXJ2aWNlLCBERUZBVUxUX0ZPUk1BVCwgR2V0RGF0ZUJ5LCBQZXJpb2RNZW51RGF0ZSwgUGVyaW9kTmFtZX0gZnJvbSBcIi4uL2NvcmVcIjtcclxuaW1wb3J0IHtMaWJTdmdJY29uQ29tcG9uZW50fSBmcm9tIFwiLi4vbGliLXN2Zy1pY29uL2xpYi1zdmctaWNvbi5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGQtbGliLXBlcmlvZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBMaWJDYXJkQ29tcG9uZW50LFxyXG4gICAgTGliRmlsdGVyQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTGliUmFkaW9Db21wb25lbnQsXHJcbiAgICBMaWJDYWxlbmRhckNvbXBvbmVudCxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLFxyXG4gICAgTGliU3ZnSWNvbkNvbXBvbmVudCxcclxuICBdLFxyXG5cclxuICB0ZW1wbGF0ZVVybDogJy4vbGliLXBlcmlvZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2xpYi1wZXJpb2QuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTGliUGVyaW9kQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaWJQZXJpb2RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBwdWJsaWMgc3RhdGljIGlkQ291bnRlciA9IDE7XHJcbiAgQElucHV0KCkgcHVibGljIG1heERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBzZXRQZXJpb2REYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtrZXkgaW4ga2V5b2YgR2V0RGF0ZUJ5XTogc3RyaW5nIH0gfCBudWxsPigpO1xyXG5cclxuICBwdWJsaWMgcGVyaW9kTWVudTogUGVyaW9kTWVudURhdGVbXSB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgcGVyaW9kSXNTaG93biA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYWxlbmRhcklzU2hvd24gPSBmYWxzZTtcclxuICBwdWJsaWMgcGVyaW9kSXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYWxlbmRhcklzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgc2VsZWN0ZWRQZXJpb2Q6IFBlcmlvZE5hbWUgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHNlbGVjdGVkRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgaWRQZXJpb2QhOiBzdHJpbmc7XHJcbiAgcHVibGljIGlkQ2FsZW5kYXIhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVTZXJ2aWNlOiBEYXRlU2VydmljZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlkUGVyaW9kID0gJ3BlcmlvZC13cmFwcGVyLScgKyBMaWJQZXJpb2RDb21wb25lbnQuaWRDb3VudGVyKys7XHJcbiAgICB0aGlzLmlkQ2FsZW5kYXIgPSAnY2FsZW5kYXItd3JhcHBlci0nICsgTGliUGVyaW9kQ29tcG9uZW50LmlkQ291bnRlcisrO1xyXG4gICAgdGhpcy5wZXJpb2RNZW51ID0gdGhpcy5kYXRlU2VydmljZS5nZXRQZXJpb2RNZW51KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93UGVyaW9kKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wZXJpb2RJc1Nob3duID0gIXRoaXMucGVyaW9kSXNTaG93bjtcclxuICAgIHRoaXMuY2FsZW5kYXJJc1Nob3duID0gISF0aGlzLnNlbGVjdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhclBlcmlvZCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGVyaW9kSXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYWxlbmRhcklzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucGVyaW9kSXNTaG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYWxlbmRhcklzU2hvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQZXJpb2QgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2V0UGVyaW9kRGF0ZS5lbWl0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFBlcmlvZCh0eXBlOiBrZXlvZiBHZXREYXRlQnkpOiB2b2lkIHtcclxuICAgIHRoaXMucGVyaW9kSXNTaG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYWxlbmRhcklzU2hvd24gPSBmYWxzZTtcclxuICAgIHRoaXMucGVyaW9kSXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGVuZGFySXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UuZ2V0Rm9ybWF0dGVkRGF0ZSh0eXBlKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHR5cGUpO1xyXG4gICAgdGhpcy5zZXRQZXJpb2REYXRlLmVtaXQoeyBbdHlwZV06IGRhdGUgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGVyaW9kID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0RGF0ZSgkZXZlbnQ6IERhdGUgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FsZW5kYXJJc1Nob3duID0gZmFsc2U7XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQZXJpb2QgPSAnY2FsZW5kYXInO1xyXG4gICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkUGVyaW9kKTtcclxuICAgICAgdGhpcy5wZXJpb2RJc1Nob3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGVyaW9kSXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbGVuZGFySXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0UGVyaW9kRGF0ZS5lbWl0KHsgY2FsZW5kYXI6IGZvcm1hdCgkZXZlbnQsIERFRkFVTFRfRk9STUFUKSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnNldFBlcmlvZERhdGUuZW1pdChudWxsKTtcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkUGVyaW9kKSB7XHJcbiAgICAgICAgdGhpcy5wZXJpb2RJc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYWxlbmRhcklzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja091dHNpZGUoJGV2ZW50OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnBlcmlvZElzU2hvd24gPSAkZXZlbnQ7XHJcbiAgICBpZiAodGhpcy5wZXJpb2RJc1Nob3duICYmICEkZXZlbnQpIHtcclxuICAgICAgdGhpcy5jYWxlbmRhcklzU2hvd24gPSAkZXZlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZSh2YWx1ZTogUGVyaW9kTmFtZSkge31cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicG9zLXJlbGF0aXZlXCI+XHJcbiAgPGRkLWxpYi1maWx0ZXItYnV0dG9uXHJcbiAgICAoY2xlYXJFdmVudCk9XCJjbGVhclBlcmlvZCgpXCJcclxuICAgIChjbGlja0V2ZW50KT1cInNob3dQZXJpb2QoKVwiXHJcbiAgICBbYWN0aXZlXT1cInBlcmlvZElzU2VsZWN0ZWQgfHwgY2FsZW5kYXJJc1NlbGVjdGVkXCJcclxuICAgIFtpZF09XCJpZFBlcmlvZFwiXHJcbiAgICBidG5Db2xvcj1cInRyYW5zcGFyZW50XCI+XHJcbiAgICA8ZGl2PtCf0LXRgNC40L7QtDwvZGl2PlxyXG4gIDwvZGQtbGliLWZpbHRlci1idXR0b24+XHJcbiAgQGlmIChwZXJpb2RJc1Nob3duKSB7XHJcbiAgPGRpdiAoZGRDbGlja091dHNpZGUpPVwiY2xpY2tPdXRzaWRlKCRldmVudClcIiBbZWxlbWVudHNdPVwiW2lkUGVyaW9kLCBpZENhbGVuZGFyXVwiIGNsYXNzPVwicGVyaW9kX193cmFwcGVyXCI+XHJcbiAgICA8ZGQtbGliLWNhcmQgY2xhc3M9XCJwZXJpb2RfX2Jsb2NrXCIgdHlwZT1cInNtYWxsXCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcmlvZF9faGVhZGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyaW9kX19iYWNrXCIgKGNsaWNrKT1cInBlcmlvZElzU2hvd24gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8ZGQtbGliLXN2Zy1pY29uIGljb249XCJ0b2dnbGVfYXJyb3dfbGVmdFwiPjwvZGQtbGliLXN2Zy1pY29uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZy1oNS10aXRsZVwiPtCf0LXRgNC40L7QtDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZy1oNS10aXRsZSBoaWRlLXRhYmxldFwiPtCf0LXRgNC40L7QtDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAoY2xpY2spPVwiY2xlYXJQZXJpb2QoKVwiIGNsYXNzPVwiZy10ZXh0IGZvbnQtbWVkaXVtIGdyZWVuIGN1cFwiPtCh0LHRgNC+0YHQuNGC0Yw8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVyaW9kX19saXN0XCI+XHJcbiAgICAgICAgICBAZm9yIChwZXJpb2Qgb2YgcGVyaW9kTWVudTsgdHJhY2sgcGVyaW9kKSB7XHJcbiAgICAgICAgICA8ZGQtbGliLXJhZGlvIChjaGFuZ2VkKT1cInNlbGVjdFBlcmlvZCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFBlcmlvZFwiIFt2YWx1ZV09XCJwZXJpb2QubmFtZVwiPnt7XHJcbiAgICAgICAgICAgIHBlcmlvZC50aXRsZVxyXG4gICAgICAgICAgfX08L2RkLWxpYi1yYWRpbz5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IChjbGljayk9XCJjYWxlbmRhcklzU2hvd24gPSAhY2FsZW5kYXJJc1Nob3duXCIgY2xhc3M9XCJnLXRleHQgZm9udC1tZWRpdW0gZ3JlZW4gY3VwIG10LThcIj5cclxuICAgICAgICAgIHt7IGNhbGVuZGFySXNTaG93biA/ICfQl9Cw0LrRgNGL0YLRjCcgOiAn0J7RgtC60YDRi9GC0YwnIH19INC60LDQu9C10L3QtNCw0YDRjFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGQtbGliLWNhcmQ+XHJcbiAgICBAaWYgKGNhbGVuZGFySXNTaG93bikge1xyXG4gICAgPGRkLWxpYi1jYWxlbmRhclxyXG4gICAgICAoZW1pdERhdGUpPVwic2VsZWN0RGF0ZSgkZXZlbnQpXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVcIlxyXG4gICAgICBbaWRdPVwiaWRDYWxlbmRhclwiXHJcbiAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgICBjbGFzcz1cInBlcmlvZF9fY2FsZW5kYXJcIj5cclxuICAgIDwvZGQtbGliLWNhbGVuZGFyPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,78 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- export class LibRadioComponent {
7
- static { this.idCounter = 1; }
8
- constructor(cdr) {
9
- this.cdr = cdr;
10
- this.disabled = false; // состояние: по умолчанию - активное
11
- this.required = false;
12
- this.checked = false;
13
- this.changed = new EventEmitter();
14
- this.modelInitialization = true;
15
- }
16
- ngOnInit() {
17
- if (!this.radioId) {
18
- this.radioId = 'dd-radio-' + LibRadioComponent.idCounter++;
19
- }
20
- }
21
- onSelected(target) {
22
- this.checked = target?.checked;
23
- this.propagateChange(this.value);
24
- this.changed.emit(this.value);
25
- }
26
- registerOnChange(fn) {
27
- this.propagateChange = fn;
28
- }
29
- setDisabledState(disabled) {
30
- this.disabled = disabled;
31
- }
32
- registerOnTouched(fn) {
33
- this.onTouchedCallback = fn;
34
- }
35
- writeValue(value) {
36
- const isInitialization = this.modelInitialization;
37
- this.modelInitialization = false;
38
- if (this.checked !== undefined && value === undefined && isInitialization) {
39
- return;
40
- }
41
- this.checked = value === this.value;
42
- this.cdr.detectChanges();
43
- }
44
- propagateChange(_value) { }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LibRadioComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.2", type: LibRadioComponent, isStandalone: true, selector: "dd-lib-radio", inputs: { radioId: "radioId", disabled: "disabled", required: "required", name: "name", value: "value", checked: "checked" }, outputs: { changed: "changed" }, providers: [
47
- {
48
- provide: NG_VALUE_ACCESSOR,
49
- useExisting: forwardRef(() => LibRadioComponent),
50
- multi: true,
51
- },
52
- ], ngImport: i0, template: "<label [for]=\"radioId\" [ngClass]=\"{ disabled: disabled }\" class=\"radio\">\r\n <input\r\n (change)=\"onSelected($event.target)\"\r\n [attr.aria-checked]=\"checked\"\r\n [attr.tabIndex]=\"disabled ? -1 : 0\"\r\n [attr.value]=\"value\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [id]=\"radioId\"\r\n [name]=\"name\"\r\n [ngClass]=\"{ disabled: disabled }\"\r\n [required]=\"required\"\r\n class=\"radio__input\"\r\n role=\"radio\"\r\n type=\"radio\" />\r\n <div [class.focused]=\"focused\" class=\"radio__mark\"></div>\r\n <div class=\"radio__text g-text\" [ngClass]=\"disabled ? 'gray' : 'black'\">\r\n <span><ng-content></ng-content></span>\r\n </div>\r\n</label>\r\n", styles: [":host{outline:none}.radio{position:relative;display:flex;align-items:center;cursor:pointer}.radio:hover .radio__mark{border-color:var(--light-black-color)}.radio.disabled{cursor:default}.radio.disabled .radio__mark{border-color:var(--gray-color-200)}.radio__input{opacity:0;position:absolute;z-index:-1;min-width:20px;min-height:20px;margin:0}.radio__input:focus+.radio__mark{border-color:var(--light-black-color)}.radio__input:checked+.radio__mark{border:2px solid var(--primary-green-color)}.radio__input:checked+.radio__mark:before{background:var(--primary-green-color)}.radio__input:checked~.radio__text{font-weight:500}.radio__input:checked.disabled+.radio__mark{border-color:var(--gray-color-200)}.radio__input:checked.disabled+.radio__mark:before{background:var(--gray-color-200)}.radio__mark{position:relative;width:20px;height:20px;min-width:20px;min-height:20px;border:1px solid var(--primary-gray-color);border-radius:50%;margin-right:12px;transition:border-color .25s linear}.radio__mark:before{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:transparent;transition:background-color .25s linear;content:\"\"}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
53
- }
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LibRadioComponent, decorators: [{
55
- type: Component,
56
- args: [{ selector: 'dd-lib-radio', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
57
- {
58
- provide: NG_VALUE_ACCESSOR,
59
- useExisting: forwardRef(() => LibRadioComponent),
60
- multi: true,
61
- },
62
- ], template: "<label [for]=\"radioId\" [ngClass]=\"{ disabled: disabled }\" class=\"radio\">\r\n <input\r\n (change)=\"onSelected($event.target)\"\r\n [attr.aria-checked]=\"checked\"\r\n [attr.tabIndex]=\"disabled ? -1 : 0\"\r\n [attr.value]=\"value\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [id]=\"radioId\"\r\n [name]=\"name\"\r\n [ngClass]=\"{ disabled: disabled }\"\r\n [required]=\"required\"\r\n class=\"radio__input\"\r\n role=\"radio\"\r\n type=\"radio\" />\r\n <div [class.focused]=\"focused\" class=\"radio__mark\"></div>\r\n <div class=\"radio__text g-text\" [ngClass]=\"disabled ? 'gray' : 'black'\">\r\n <span><ng-content></ng-content></span>\r\n </div>\r\n</label>\r\n", styles: [":host{outline:none}.radio{position:relative;display:flex;align-items:center;cursor:pointer}.radio:hover .radio__mark{border-color:var(--light-black-color)}.radio.disabled{cursor:default}.radio.disabled .radio__mark{border-color:var(--gray-color-200)}.radio__input{opacity:0;position:absolute;z-index:-1;min-width:20px;min-height:20px;margin:0}.radio__input:focus+.radio__mark{border-color:var(--light-black-color)}.radio__input:checked+.radio__mark{border:2px solid var(--primary-green-color)}.radio__input:checked+.radio__mark:before{background:var(--primary-green-color)}.radio__input:checked~.radio__text{font-weight:500}.radio__input:checked.disabled+.radio__mark{border-color:var(--gray-color-200)}.radio__input:checked.disabled+.radio__mark:before{background:var(--gray-color-200)}.radio__mark{position:relative;width:20px;height:20px;min-width:20px;min-height:20px;border:1px solid var(--primary-gray-color);border-radius:50%;margin-right:12px;transition:border-color .25s linear}.radio__mark:before{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:transparent;transition:background-color .25s linear;content:\"\"}\n"] }]
63
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { radioId: [{
64
- type: Input
65
- }], disabled: [{
66
- type: Input
67
- }], required: [{
68
- type: Input
69
- }], name: [{
70
- type: Input
71
- }], value: [{
72
- type: Input
73
- }], checked: [{
74
- type: Input
75
- }], changed: [{
76
- type: Output
77
- }] } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXJhZGlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RkLWxpYi9zcmMvbGliL2xpYi1yYWRpby9saWItcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGQtbGliL3NyYy9saWIvbGliLXJhZGlvL2xpYi1yYWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQWlCM0csTUFBTSxPQUFPLGlCQUFpQjthQUNkLGNBQVMsR0FBRyxDQUFDLEFBQUosQ0FBSztJQWU1QixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVoxQixhQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMscUNBQXFDO1FBQ3ZELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVmLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSXRDLHdCQUFtQixHQUFHLElBQUksQ0FBQztJQUduQyxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFTSxVQUFVLENBQUMsTUFBMEI7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBSSxNQUEyQixFQUFFLE9BQU8sQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQU87UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFFBQWlCO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxFQUFPO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDMUUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFXLElBQUcsQ0FBQzs4R0FyRDVCLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBOQVJqQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkN6QkgsOHRCQW9CQSxrc0NETFksWUFBWSw0SEFBRSxXQUFXLDhCQUFFLG1CQUFtQjs7MkZBWTdDLGlCQUFpQjtrQkFmN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxtQkFHeEMsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzs0QkFDaEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7c0ZBS2UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBRVcsT0FBTztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkZC1saWItcmFkaW8nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saWItcmFkaW8uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9saWItcmFkaW8uY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTGliUmFkaW9Db21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpYlJhZGlvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgcHVibGljIHN0YXRpYyBpZENvdW50ZXIgPSAxO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgcmFkaW9JZDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLyBpbnB1dCBJRDog0LXRgdC70Lgg0L3QtSDRg9C60LDQt9Cw0L0sINCz0LXQvdC10YDQuNGA0YPQtdGC0YHRjyDRg9C90LjQutCw0LvRjNC90YvQuSBJRFxyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlOyAvLyDRgdC+0YHRgtC+0Y/QvdC40LU6INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIC0g0LDQutGC0LjQstC90L7QtVxyXG4gIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgcHVibGljIHZhbHVlOiBhbnk7XHJcbiAgQElucHV0KCkgcHVibGljIGNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwdWJsaWMgZm9jdXNlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgb25Ub3VjaGVkQ2FsbGJhY2s6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIG1vZGVsSW5pdGlhbGl6YXRpb24gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5yYWRpb0lkKSB7XHJcbiAgICAgIHRoaXMucmFkaW9JZCA9ICdkZC1yYWRpby0nICsgTGliUmFkaW9Db21wb25lbnQuaWRDb3VudGVyKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TZWxlY3RlZCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCkge1xyXG4gICAgdGhpcy5jaGVja2VkID0gKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8uY2hlY2tlZDtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0luaXRpYWxpemF0aW9uID0gdGhpcy5tb2RlbEluaXRpYWxpemF0aW9uO1xyXG4gICAgdGhpcy5tb2RlbEluaXRpYWxpemF0aW9uID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpc0luaXRpYWxpemF0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlID09PSB0aGlzLnZhbHVlO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9wYWdhdGVDaGFuZ2UoX3ZhbHVlOiBhbnkpIHt9XHJcbn1cclxuIiwiPGxhYmVsIFtmb3JdPVwicmFkaW9JZFwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGRpc2FibGVkIH1cIiBjbGFzcz1cInJhZGlvXCI+XHJcbiAgPGlucHV0XHJcbiAgICAoY2hhbmdlKT1cIm9uU2VsZWN0ZWQoJGV2ZW50LnRhcmdldClcIlxyXG4gICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImNoZWNrZWRcIlxyXG4gICAgW2F0dHIudGFiSW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxyXG4gICAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxyXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW2lkXT1cInJhZGlvSWRcIlxyXG4gICAgW25hbWVdPVwibmFtZVwiXHJcbiAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCB9XCJcclxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICBjbGFzcz1cInJhZGlvX19pbnB1dFwiXHJcbiAgICByb2xlPVwicmFkaW9cIlxyXG4gICAgdHlwZT1cInJhZGlvXCIgLz5cclxuICA8ZGl2IFtjbGFzcy5mb2N1c2VkXT1cImZvY3VzZWRcIiBjbGFzcz1cInJhZGlvX19tYXJrXCI+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJhZGlvX190ZXh0IGctdGV4dFwiIFtuZ0NsYXNzXT1cImRpc2FibGVkID8gJ2dyYXknIDogJ2JsYWNrJ1wiPlxyXG4gICAgPHNwYW4+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9sYWJlbD5cclxuIl19
@@ -1,209 +0,0 @@
1
- /**
2
- * Входные параметры (Input)
3
- * keyTitle (default: 'title')
4
- * Тип: string
5
- * Описание: Наименование ключа для получения заголовка элемента данных.
6
- *
7
- * keyDesc (default: 'description')
8
- * Тип: string
9
- * Описание: Наименование ключа для получения описания элемента данных.
10
- *
11
- * styleInput (default: 'standard')
12
- * Тип: 'round' | 'standard'
13
- * Описание: Тип стиля входного элемента, может быть 'round' или 'standard'.
14
- *
15
- * inputStyle (default: 'gray')
16
- * Тип: 'white' | 'gray'
17
- * Описание: Стиль входного элемента, может быть 'white' или 'gray'.
18
- *
19
- * fetchMode
20
- * Тип: boolean
21
- * Описание: Флаг, указывающий, включен ли режим получения данных.
22
- *
23
- * searchData
24
- * Тип: any
25
- * Описание: Массив данных для поиска. Устанавливая данные, компонент сбрасывает состояние загрузки.
26
- *
27
- * debounceTime (default: 100)
28
- * Тип: number
29
- * Описание: Время задержки перед выполнением действий после ввода, в миллисекундах.
30
- *
31
- * delay (default: 0)
32
- * Тип: number
33
- * Описание: Задержка перед обработкой поиска, в миллисекундах.
34
- *
35
- * idClose
36
- * Тип: string | undefined
37
- * Описание: Идентификатор элемента закрытия (неопределено по умолчанию).
38
- *
39
- * loaded$
40
- * Тип: BehaviorSubject<boolean>
41
- * Описание: Субъект для управления состоянием загрузки компонента.
42
- *
43
- * Выходные параметры (Output)
44
- * keyupEvent
45
- * Тип: EventEmitter<string>
46
- * Описание: Событие, испускаемое при вводе текста в поле поиска.
47
- *
48
- * selectedItem
49
- * Тип: EventEmitter
50
- * Описание: Событие, испускаемое при выборе элемента из результатов поиска.
51
- *
52
- * Внутренние свойства и переменные
53
- * keyUp
54
- * Тип: Subject<KeyboardEvent>
55
- * Описание: Субъект для обработки событий ввода с клавиатуры.
56
- *
57
- * data
58
- * Тип: any[] | undefined
59
- * Описание: Массив данных для отображения результатов поиска.
60
-
61
- * Методы
62
- * ngOnInit Выполняет настройку потоков событий ввода при инициализации компонента.
63
- * forceChangeМетод для принудительного вызова события изменения ввода.
64
- * onClear(noEmit?: boolean)Метод для очистки поля ввода, сброса состояния загрузки и фокуса на элемент ввода.
65
- * onClickSearchItem(item: any)Метод для обработки выбора элемента из результатов поиска.
66
- * getTitle(item: any)Метод для получения заголовка элемента данных.
67
- * getDesc(item: any)Метод для получения описания элемента данных.
68
- * **/
69
- import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, HostListener, Input, Output, } from '@angular/core';
70
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
71
- import { AsyncPipe, JsonPipe, NgOptimizedImage, NgStyle } from '@angular/common';
72
- import { LibCommonInputTextComponent } from '../common/lib-common-input-text';
73
- import { LibCardComponent } from '../lib-card/lib-card.component';
74
- import { BehaviorSubject, of, Subject } from 'rxjs';
75
- import { debounceTime, delay, map, mergeMap, takeUntil, tap } from 'rxjs/operators';
76
- import { DestroyService, DropDownPositionDirective, HighlightPipe, SafePipe } from "../core";
77
- import { LibSvgIconComponent } from "../lib-svg-icon/lib-svg-icon.component";
78
- import { LibLoaderComponent } from "../lib-loader/lib-loader.component";
79
- import * as i0 from "@angular/core";
80
- import * as i1 from "../core";
81
- import * as i2 from "@angular/forms";
82
- export class LibSearchInputComponent extends LibCommonInputTextComponent {
83
- set searchData(data) {
84
- this.loaded$.next(false);
85
- this.data = data;
86
- if (data?.length) {
87
- this.itemSize = this.keyDesc && this.keyTitle ? 90 : this.keyDesc && !this.keyTitle ? 50 : 40;
88
- this.updateDropdownPosition(this.el, data, this.itemSize, 400);
89
- }
90
- }
91
- ;
92
- constructor(destroy$, el, changeDetection, cdr) {
93
- super(changeDetection);
94
- this.destroy$ = destroy$;
95
- this.el = el;
96
- this.cdr = cdr;
97
- this.styleInput = 'standard';
98
- this.inputStyle = 'gray';
99
- this.debounceTime = 100;
100
- this.delay = 0;
101
- this.loaded$ = new BehaviorSubject(false);
102
- this.keyupEvent = new EventEmitter();
103
- this.selectedItem = new EventEmitter();
104
- this.keyUp = new Subject();
105
- this.itemSize = this.keyDesc && this.keyTitle ? 90 : this.keyDesc && !this.keyTitle ? 50 : 40;
106
- }
107
- onWindowScroll() {
108
- if (this.data?.length) {
109
- this.updateDropdownPosition(this.el, this.data, this.itemSize, 400);
110
- }
111
- }
112
- ngOnInit() {
113
- if (this.commitOnInput) {
114
- this.keyUp
115
- .pipe(tap(() => {
116
- if (this.fetchMode) {
117
- this.loaded$.next(true);
118
- }
119
- }), map(event => event.target?.value), debounceTime(this.debounceTime),
120
- // distinctUntilChanged(), надо ли?
121
- mergeMap(search => of(search).pipe(delay(this.delay))), takeUntil(this.destroy$))
122
- .subscribe(str => {
123
- this.keyupEvent.emit(str);
124
- this.loaded$.next(false);
125
- }, () => this.loaded$.next(false));
126
- }
127
- }
128
- writeValue(value) {
129
- this.value = value === null || value === undefined ? '' : '' + value;
130
- if (!this.destroyed) {
131
- this.changeDetection.detectChanges();
132
- }
133
- }
134
- forceChange() {
135
- if (!this.commitOnInput) {
136
- this.keyupEvent.emit(this.value);
137
- }
138
- }
139
- onClear(noEmit) {
140
- this.loaded$.next(false);
141
- this.value = '';
142
- if (!noEmit) {
143
- this.cleared.emit();
144
- this.keyupEvent.emit('');
145
- }
146
- this.inputSearchElement?.nativeElement.focus();
147
- this.cdr.detectChanges();
148
- }
149
- onClickSearchItem(item) {
150
- this.loaded$.next(false);
151
- this.selectedItem.emit(item);
152
- this.value = this.keyTitle ? this.getTitle(item) : this.getDesc(item);
153
- }
154
- getTitle(item) {
155
- return item[this.keyTitle];
156
- }
157
- getDesc(item) {
158
- return item[this.keyDesc];
159
- }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LibSearchInputComponent, deps: [{ token: i1.DestroyService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: LibSearchInputComponent, isStandalone: true, selector: "dd-lib-search-input", inputs: { keyTitle: "keyTitle", keyDesc: "keyDesc", styleInput: "styleInput", inputStyle: "inputStyle", searchData: "searchData", debounceTime: "debounceTime", delay: "delay", idClose: "idClose", loaded$: "loaded$" }, outputs: { keyupEvent: "keyupEvent", selectedItem: "selectedItem" }, host: { listeners: { "window:resize": "onWindowScroll()", "window:scroll": "onWindowScroll()" } }, providers: [
162
- DestroyService,
163
- {
164
- provide: NG_VALUE_ACCESSOR,
165
- useExisting: forwardRef(() => LibSearchInputComponent),
166
- multi: true,
167
- },
168
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"lib-search-input\">\r\n <label [for]=\"id\" class=\"lib-search-input__title\">\r\n {{ label }}\r\n @if (required) {\r\n <dd-lib-svg-icon icon=\"error_hint\"></dd-lib-svg-icon>\r\n }\r\n </label>\r\n <div class=\"pos-relative\">\r\n <dd-lib-svg-icon (click)=\"forceChange()\" class=\"search-icon\" icon=\"search\"></dd-lib-svg-icon>\r\n <input\r\n #searchInput\r\n (keyup)=\"keyUp.next($event)\"\r\n (keyup.enter)=\"forceChange()\"\r\n [(ngModel)]=\"value\"\r\n [attr.autocomplete]=\"autocomplete === undefined ? null : autocomplete\"\r\n [attr.id]=\"id ? id : null\"\r\n [attr.maxlength]=\"maxlength\"\r\n [attr.minlength]=\"minlength\"\r\n [attr.name]=\"name\"\r\n [attr.placeholder]=\"placeholder\"\r\n [attr.tabIndex]=\"tabIndex\"\r\n [attr.type]=\"type || 'text'\"\r\n [class.focused]=\"focused\"\r\n [class.round]=\"styleInput === 'round'\"\r\n [class.white]=\"inputStyle === 'white'\"\r\n [disabled]=\"disabled\"\r\n [readOnly]=\"readOnly\"\r\n class=\"search-input\" />\r\n <dd-lib-svg-icon\r\n (click)=\"onClear()\"\r\n [id]=\"idClose\" [style.display]=\"value?.length ? 'block' : 'none'\"\r\n class=\"clear-icon\" icon=\"clear\"></dd-lib-svg-icon>\r\n @if (loaded$ | async) {\r\n <div class=\"loading-icon\">\r\n <dd-lib-loader></dd-lib-loader>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (data?.length) {\r\n <div class=\"search-dropdown\" [class.top]=\"side === 'top'\" [ngStyle]=\"dropdownStyle\">\r\n @for (item of data; track item) {\r\n <div (click)=\"onClickSearchItem(item)\" class=\"search-result\">\r\n @if (getTitle(item); as title) {\r\n <div [innerHTML]=\"title | highlight: value | safe: 'html'\" class=\"search-result__title\"></div>\r\n }\r\n @if (getDesc(item); as desc) {\r\n <div [innerHTML]=\"desc | highlight: value | safe: 'html'\" class=\"search-result__desc\"></div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block}.lib-search-input{position:relative}.lib-search-input__title{margin-bottom:4px;font-size:14px;line-height:24px;display:flex;align-items:flex-start}.lib-search-input input{width:100%;height:48px;padding:16px 16px 15px 44px;border-radius:8px;border:none;color:var(--light-black-color);background-color:var(--input-gray-bgc)}.lib-search-input input.white{background-color:var(--white-color);border:1px solid var(--primary-gray-color)}.lib-search-input .round{border-radius:24px}.lib-search-input .search-icon{position:absolute;left:16px;top:14px;cursor:pointer}.lib-search-input .clear-icon{position:absolute;right:16px;top:14px;cursor:pointer}.lib-search-input .loading-icon{position:absolute;right:40px;top:12px}.lib-search-input .search-result{font-size:16px;font-weight:400;line-height:24px;letter-spacing:0;text-align:left;cursor:pointer}.lib-search-input .search-result:hover{opacity:.8}.lib-search-input .search-result:last-child .search-result__desc{border:none;padding-bottom:0}.lib-search-input .search-result__title{color:var(--second-gray-color);min-height:40px;align-items:center;align-content:center}.lib-search-input .search-result__desc{min-height:50px;align-items:center;align-content:center;border-bottom:1px solid var(--gray-color-200)}.lib-search-input dd-lib-card{position:absolute;display:block;top:76px;z-index:100;width:100%;max-height:400px;box-shadow:var(--main-card-shadow);overflow:auto}.lib-search-input dd-lib-card.top{bottom:50px;top:unset}.lib-search-input .search-dropdown{position:absolute;display:block;top:76px;z-index:100;width:100%;max-height:400px;overflow:auto;border-radius:24px;box-shadow:var(--main-card-shadow);background-color:var(--main-card-color);min-height:100%;padding:0 24px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: HighlightPipe, name: "highlight" }, { kind: "pipe", type: SafePipe, name: "safe" }, { kind: "component", type: LibSvgIconComponent, selector: "dd-lib-svg-icon", inputs: ["width", "height", "color", "icon"] }, { kind: "component", type: LibLoaderComponent, selector: "dd-lib-loader", inputs: ["color", "size"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
169
- }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LibSearchInputComponent, decorators: [{
171
- type: Component,
172
- args: [{ selector: 'dd-lib-search-input', standalone: true, imports: [FormsModule, NgStyle, NgOptimizedImage, LibCardComponent, HighlightPipe, SafePipe, LibSvgIconComponent, LibLoaderComponent, AsyncPipe, DropDownPositionDirective, JsonPipe], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
173
- DestroyService,
174
- {
175
- provide: NG_VALUE_ACCESSOR,
176
- useExisting: forwardRef(() => LibSearchInputComponent),
177
- multi: true,
178
- },
179
- ], template: "<div class=\"lib-search-input\">\r\n <label [for]=\"id\" class=\"lib-search-input__title\">\r\n {{ label }}\r\n @if (required) {\r\n <dd-lib-svg-icon icon=\"error_hint\"></dd-lib-svg-icon>\r\n }\r\n </label>\r\n <div class=\"pos-relative\">\r\n <dd-lib-svg-icon (click)=\"forceChange()\" class=\"search-icon\" icon=\"search\"></dd-lib-svg-icon>\r\n <input\r\n #searchInput\r\n (keyup)=\"keyUp.next($event)\"\r\n (keyup.enter)=\"forceChange()\"\r\n [(ngModel)]=\"value\"\r\n [attr.autocomplete]=\"autocomplete === undefined ? null : autocomplete\"\r\n [attr.id]=\"id ? id : null\"\r\n [attr.maxlength]=\"maxlength\"\r\n [attr.minlength]=\"minlength\"\r\n [attr.name]=\"name\"\r\n [attr.placeholder]=\"placeholder\"\r\n [attr.tabIndex]=\"tabIndex\"\r\n [attr.type]=\"type || 'text'\"\r\n [class.focused]=\"focused\"\r\n [class.round]=\"styleInput === 'round'\"\r\n [class.white]=\"inputStyle === 'white'\"\r\n [disabled]=\"disabled\"\r\n [readOnly]=\"readOnly\"\r\n class=\"search-input\" />\r\n <dd-lib-svg-icon\r\n (click)=\"onClear()\"\r\n [id]=\"idClose\" [style.display]=\"value?.length ? 'block' : 'none'\"\r\n class=\"clear-icon\" icon=\"clear\"></dd-lib-svg-icon>\r\n @if (loaded$ | async) {\r\n <div class=\"loading-icon\">\r\n <dd-lib-loader></dd-lib-loader>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (data?.length) {\r\n <div class=\"search-dropdown\" [class.top]=\"side === 'top'\" [ngStyle]=\"dropdownStyle\">\r\n @for (item of data; track item) {\r\n <div (click)=\"onClickSearchItem(item)\" class=\"search-result\">\r\n @if (getTitle(item); as title) {\r\n <div [innerHTML]=\"title | highlight: value | safe: 'html'\" class=\"search-result__title\"></div>\r\n }\r\n @if (getDesc(item); as desc) {\r\n <div [innerHTML]=\"desc | highlight: value | safe: 'html'\" class=\"search-result__desc\"></div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block}.lib-search-input{position:relative}.lib-search-input__title{margin-bottom:4px;font-size:14px;line-height:24px;display:flex;align-items:flex-start}.lib-search-input input{width:100%;height:48px;padding:16px 16px 15px 44px;border-radius:8px;border:none;color:var(--light-black-color);background-color:var(--input-gray-bgc)}.lib-search-input input.white{background-color:var(--white-color);border:1px solid var(--primary-gray-color)}.lib-search-input .round{border-radius:24px}.lib-search-input .search-icon{position:absolute;left:16px;top:14px;cursor:pointer}.lib-search-input .clear-icon{position:absolute;right:16px;top:14px;cursor:pointer}.lib-search-input .loading-icon{position:absolute;right:40px;top:12px}.lib-search-input .search-result{font-size:16px;font-weight:400;line-height:24px;letter-spacing:0;text-align:left;cursor:pointer}.lib-search-input .search-result:hover{opacity:.8}.lib-search-input .search-result:last-child .search-result__desc{border:none;padding-bottom:0}.lib-search-input .search-result__title{color:var(--second-gray-color);min-height:40px;align-items:center;align-content:center}.lib-search-input .search-result__desc{min-height:50px;align-items:center;align-content:center;border-bottom:1px solid var(--gray-color-200)}.lib-search-input dd-lib-card{position:absolute;display:block;top:76px;z-index:100;width:100%;max-height:400px;box-shadow:var(--main-card-shadow);overflow:auto}.lib-search-input dd-lib-card.top{bottom:50px;top:unset}.lib-search-input .search-dropdown{position:absolute;display:block;top:76px;z-index:100;width:100%;max-height:400px;overflow:auto;border-radius:24px;box-shadow:var(--main-card-shadow);background-color:var(--main-card-color);min-height:100%;padding:0 24px}\n"] }]
180
- }], ctorParameters: () => [{ type: i1.DestroyService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.ChangeDetectorRef }], propDecorators: { keyTitle: [{
181
- type: Input
182
- }], keyDesc: [{
183
- type: Input
184
- }], styleInput: [{
185
- type: Input
186
- }], inputStyle: [{
187
- type: Input
188
- }], searchData: [{
189
- type: Input
190
- }], debounceTime: [{
191
- type: Input
192
- }], delay: [{
193
- type: Input
194
- }], idClose: [{
195
- type: Input
196
- }], loaded$: [{
197
- type: Input
198
- }], keyupEvent: [{
199
- type: Output
200
- }], selectedItem: [{
201
- type: Output
202
- }], onWindowScroll: [{
203
- type: HostListener,
204
- args: ['window:resize']
205
- }, {
206
- type: HostListener,
207
- args: ['window:scroll']
208
- }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXNlYXJjaC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZC1saWIvc3JjL2xpYi9saWItc2VhcmNoLWlucHV0L2xpYi1zZWFyY2gtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGQtbGliL3NyYy9saWIvbGliLXNlYXJjaC1pbnB1dC9saWItc2VhcmNoLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BbUVNO0FBRU4sT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVCLFdBQVcsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQy9FLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUMsY0FBYyxFQUFFLHlCQUF5QixFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUMsTUFBTSxT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Z0IsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSx5QkFBeUIsRUFBRSxRQUFRLENBQUMsbUJBR3BLLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1QsY0FBYzt3QkFDZDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQzs0QkFDdEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7NEtBR2UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDYyxVQUFVO3NCQUE3QixLQUFLO2dCQVFVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1csVUFBVTtzQkFBMUIsTUFBTTtnQkFDVSxZQUFZO3NCQUE1QixNQUFNO2dCQWNBLGNBQWM7c0JBRnBCLFlBQVk7dUJBQUMsZUFBZTs7c0JBQzVCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4vKipcclxuICog0JLRhdC+0LTQvdGL0LUg0L/QsNGA0LDQvNC10YLRgNGLIChJbnB1dClcclxuICoga2V5VGl0bGUgKGRlZmF1bHQ6ICd0aXRsZScpXHJcbiAqINCi0LjQvzogc3RyaW5nXHJcbiAqINCe0L/QuNGB0LDQvdC40LU6INCd0LDQuNC80LXQvdC+0LLQsNC90LjQtSDQutC70Y7Rh9CwINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0LfQsNCz0L7Qu9C+0LLQutCwINGN0LvQtdC80LXQvdGC0LAg0LTQsNC90L3Ri9GFLlxyXG4gKlxyXG4gKiBrZXlEZXNjIChkZWZhdWx0OiAnZGVzY3JpcHRpb24nKVxyXG4gKiDQotC40L86IHN0cmluZ1xyXG4gKiDQntC/0LjRgdCw0L3QuNC1OiDQndCw0LjQvNC10L3QvtCy0LDQvdC40LUg0LrQu9GO0YfQsCDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPINC+0L/QuNGB0LDQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsCDQtNCw0L3QvdGL0YUuXHJcbiAqXHJcbiAqIHN0eWxlSW5wdXQgKGRlZmF1bHQ6ICdzdGFuZGFyZCcpXHJcbiAqINCi0LjQvzogJ3JvdW5kJyB8ICdzdGFuZGFyZCdcclxuICog0J7Qv9C40YHQsNC90LjQtTog0KLQuNC/INGB0YLQuNC70Y8g0LLRhdC+0LTQvdC+0LPQviDRjdC70LXQvNC10L3RgtCwLCDQvNC+0LbQtdGCINCx0YvRgtGMICdyb3VuZCcg0LjQu9C4ICdzdGFuZGFyZCcuXHJcbiAqXHJcbiAqIGlucHV0U3R5bGUgKGRlZmF1bHQ6ICdncmF5JylcclxuICog0KLQuNC/OiAnd2hpdGUnIHwgJ2dyYXknXHJcbiAqINCe0L/QuNGB0LDQvdC40LU6INCh0YLQuNC70Ywg0LLRhdC+0LTQvdC+0LPQviDRjdC70LXQvNC10L3RgtCwLCDQvNC+0LbQtdGCINCx0YvRgtGMICd3aGl0ZScg0LjQu9C4ICdncmF5Jy5cclxuICpcclxuICogZmV0Y2hNb2RlXHJcbiAqINCi0LjQvzogYm9vbGVhblxyXG4gKiDQntC/0LjRgdCw0L3QuNC1OiDQpNC70LDQsywg0YPQutCw0LfRi9Cy0LDRjtGJ0LjQuSwg0LLQutC70Y7Rh9C10L0g0LvQuCDRgNC10LbQuNC8INC/0L7Qu9GD0YfQtdC90LjRjyDQtNCw0L3QvdGL0YUuXHJcbiAqXHJcbiAqIHNlYXJjaERhdGFcclxuICog0KLQuNC/OiBhbnlcclxuICog0J7Qv9C40YHQsNC90LjQtTog0JzQsNGB0YHQuNCyINC00LDQvdC90YvRhSDQtNC70Y8g0L/QvtC40YHQutCwLiDQo9GB0YLQsNC90LDQstC70LjQstCw0Y8g0LTQsNC90L3Ri9C1LCDQutC+0LzQv9C+0L3QtdC90YIg0YHQsdGA0LDRgdGL0LLQsNC10YIg0YHQvtGB0YLQvtGP0L3QuNC1INC30LDQs9GA0YPQt9C60LguXHJcbiAqXHJcbiAqIGRlYm91bmNlVGltZSAoZGVmYXVsdDogMTAwKVxyXG4gKiDQotC40L86IG51bWJlclxyXG4gKiDQntC/0LjRgdCw0L3QuNC1OiDQktGA0LXQvNGPINC30LDQtNC10YDQttC60Lgg0L/QtdGA0LXQtCDQstGL0L/QvtC70L3QtdC90LjQtdC8INC00LXQudGB0YLQstC40Lkg0L/QvtGB0LvQtSDQstCy0L7QtNCwLCDQsiDQvNC40LvQu9C40YHQtdC60YPQvdC00LDRhS5cclxuICpcclxuICogZGVsYXkgKGRlZmF1bHQ6IDApXHJcbiAqINCi0LjQvzogbnVtYmVyXHJcbiAqINCe0L/QuNGB0LDQvdC40LU6INCX0LDQtNC10YDQttC60LAg0L/QtdGA0LXQtCDQvtCx0YDQsNCx0L7RgtC60L7QuSDQv9C+0LjRgdC60LAsINCyINC80LjQu9C70LjRgdC10LrRg9C90LTQsNGFLlxyXG4gKlxyXG4gKiBpZENsb3NlXHJcbiAqINCi0LjQvzogc3RyaW5nIHwgdW5kZWZpbmVkXHJcbiAqINCe0L/QuNGB0LDQvdC40LU6INCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGN0LvQtdC80LXQvdGC0LAg0LfQsNC60YDRi9GC0LjRjyAo0L3QtdC+0L/RgNC10LTQtdC70LXQvdC+INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKS5cclxuICpcclxuICogbG9hZGVkJFxyXG4gKiDQotC40L86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gKiDQntC/0LjRgdCw0L3QuNC1OiDQodGD0LHRitC10LrRgiDQtNC70Y8g0YPQv9GA0LDQstC70LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNC10Lwg0LfQsNCz0YDRg9C30LrQuCDQutC+0LzQv9C+0L3QtdC90YLQsC5cclxuICpcclxuICog0JLRi9GF0L7QtNC90YvQtSDQv9Cw0YDQsNC80LXRgtGA0YsgKE91dHB1dClcclxuICoga2V5dXBFdmVudFxyXG4gKiDQotC40L86IEV2ZW50RW1pdHRlcjxzdHJpbmc+XHJcbiAqINCe0L/QuNGB0LDQvdC40LU6INCh0L7QsdGL0YLQuNC1LCDQuNGB0L/Rg9GB0LrQsNC10LzQvtC1INC/0YDQuCDQstCy0L7QtNC1INGC0LXQutGB0YLQsCDQsiDQv9C+0LvQtSDQv9C+0LjRgdC60LAuXHJcbiAqXHJcbiAqIHNlbGVjdGVkSXRlbVxyXG4gKiDQotC40L86IEV2ZW50RW1pdHRlclxyXG4gKiDQntC/0LjRgdCw0L3QuNC1OiDQodC+0LHRi9GC0LjQtSwg0LjRgdC/0YPRgdC60LDQtdC80L7QtSDQv9GA0Lgg0LLRi9Cx0L7RgNC1INGN0LvQtdC80LXQvdGC0LAg0LjQtyDRgNC10LfRg9C70YzRgtCw0YLQvtCyINC/0L7QuNGB0LrQsC5cclxuICpcclxuICog0JLQvdGD0YLRgNC10L3QvdC40LUg0YHQstC+0LnRgdGC0LLQsCDQuCDQv9C10YDQtdC80LXQvdC90YvQtVxyXG4gKiBrZXlVcFxyXG4gKiDQotC40L86IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD5cclxuICog0J7Qv9C40YHQsNC90LjQtTog0KHRg9Cx0YrQtdC60YIg0LTQu9GPINC+0LHRgNCw0LHQvtGC0LrQuCDRgdC+0LHRi9GC0LjQuSDQstCy0L7QtNCwINGBINC60LvQsNCy0LjQsNGC0YPRgNGLLlxyXG4gKlxyXG4gKiBkYXRhXHJcbiAqINCi0LjQvzogYW55W10gfCB1bmRlZmluZWRcclxuICog0J7Qv9C40YHQsNC90LjQtTog0JzQsNGB0YHQuNCyINC00LDQvdC90YvRhSDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDRgNC10LfRg9C70YzRgtCw0YLQvtCyINC/0L7QuNGB0LrQsC5cclxuXHJcbiAqINCc0LXRgtC+0LTRi1xyXG4gKiBuZ09uSW5pdCDQktGL0L/QvtC70L3Rj9C10YIg0L3QsNGB0YLRgNC+0LnQutGDINC/0L7RgtC+0LrQvtCyINGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAg0L/RgNC4INC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNC4INC60L7QvNC/0L7QvdC10L3RgtCwLlxyXG4gKiBmb3JjZUNoYW5nZdCc0LXRgtC+0LQg0LTQu9GPINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LPQviDQstGL0LfQvtCy0LAg0YHQvtCx0YvRgtC40Y8g0LjQt9C80LXQvdC10L3QuNGPINCy0LLQvtC00LAuXHJcbiAqIG9uQ2xlYXIobm9FbWl0PzogYm9vbGVhbinQnNC10YLQvtC0INC00LvRjyDQvtGH0LjRgdGC0LrQuCDQv9C+0LvRjyDQstCy0L7QtNCwLCDRgdCx0YDQvtGB0LAg0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0Lgg0YTQvtC60YPRgdCwINC90LAg0Y3Qu9C10LzQtdC90YIg0LLQstC+0LTQsC5cclxuICogb25DbGlja1NlYXJjaEl0ZW0oaXRlbTogYW55KdCc0LXRgtC+0LQg0LTQu9GPINC+0LHRgNCw0LHQvtGC0LrQuCDQstGL0LHQvtGA0LAg0Y3Qu9C10LzQtdC90YLQsCDQuNC3INGA0LXQt9GD0LvRjNGC0LDRgtC+0LIg0L/QvtC40YHQutCwLlxyXG4gKiBnZXRUaXRsZShpdGVtOiBhbnkp0JzQtdGC0L7QtCDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPINC30LDQs9C+0LvQvtCy0LrQsCDRjdC70LXQvNC10L3RgtCwINC00LDQvdC90YvRhS5cclxuICogZ2V0RGVzYyhpdGVtOiBhbnkp0JzQtdGC0L7QtCDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPINC+0L/QuNGB0LDQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsCDQtNCw0L3QvdGL0YUuXHJcbiAqICoqL1xyXG5cclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7QXN5bmNQaXBlLCBKc29uUGlwZSwgTmdPcHRpbWl6ZWRJbWFnZSwgTmdTdHlsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtMaWJDb21tb25JbnB1dFRleHRDb21wb25lbnR9IGZyb20gJy4uL2NvbW1vbi9saWItY29tbW9uLWlucHV0LXRleHQnO1xyXG5pbXBvcnQge0xpYkNhcmRDb21wb25lbnR9IGZyb20gJy4uL2xpYi1jYXJkL2xpYi1jYXJkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBvZiwgU3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkZWxheSwgbWFwLCBtZXJnZU1hcCwgdGFrZVVudGlsLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtEZXN0cm95U2VydmljZSwgRHJvcERvd25Qb3NpdGlvbkRpcmVjdGl2ZSwgSGlnaGxpZ2h0UGlwZSwgU2FmZVBpcGV9IGZyb20gXCIuLi9jb3JlXCI7XHJcbmltcG9ydCB7TGliU3ZnSWNvbkNvbXBvbmVudH0gZnJvbSBcIi4uL2xpYi1zdmctaWNvbi9saWItc3ZnLWljb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TGliTG9hZGVyQ29tcG9uZW50fSBmcm9tIFwiLi4vbGliLWxvYWRlci9saWItbG9hZGVyLmNvbXBvbmVudFwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGQtbGliLXNlYXJjaC1pbnB1dCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIE5nU3R5bGUsIE5nT3B0aW1pemVkSW1hZ2UsIExpYkNhcmRDb21wb25lbnQsIEhpZ2hsaWdodFBpcGUsIFNhZmVQaXBlLCBMaWJTdmdJY29uQ29tcG9uZW50LCBMaWJMb2FkZXJDb21wb25lbnQsIEFzeW5jUGlwZSwgRHJvcERvd25Qb3NpdGlvbkRpcmVjdGl2ZSwgSnNvblBpcGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saWItc2VhcmNoLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbGliLXNlYXJjaC1pbnB1dC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBEZXN0cm95U2VydmljZSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExpYlNlYXJjaElucHV0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaWJTZWFyY2hJbnB1dENvbXBvbmVudDxUPiBleHRlbmRzIExpYkNvbW1vbklucHV0VGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBrZXlUaXRsZT86IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMga2V5RGVzYz86IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgc3R5bGVJbnB1dDogJ3JvdW5kJyB8ICdzdGFuZGFyZCcgPSAnc3RhbmRhcmQnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpbnB1dFN0eWxlOiAnd2hpdGUnIHwgJ2dyYXknID0gJ2dyYXknO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2VhcmNoRGF0YShkYXRhOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLmxvYWRlZCQubmV4dChmYWxzZSlcclxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICBpZiAoZGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuaXRlbVNpemUgPSB0aGlzLmtleURlc2MgJiYgdGhpcy5rZXlUaXRsZSA/IDkwIDogdGhpcy5rZXlEZXNjICYmICF0aGlzLmtleVRpdGxlID8gNTAgOiA0MDtcclxuICAgICAgdGhpcy51cGRhdGVEcm9wZG93blBvc2l0aW9uKHRoaXMuZWwsIGRhdGEsIHRoaXMuaXRlbVNpemUsIDQwMCk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBASW5wdXQoKSBwdWJsaWMgZGVib3VuY2VUaW1lID0gMTAwO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkZWxheSA9IDA7XHJcbiAgQElucHV0KCkgcHVibGljIGlkQ2xvc2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwdWJsaWMgbG9hZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMga2V5dXBFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2VsZWN0ZWRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBrZXlVcCA9IG5ldyBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+KCk7XHJcbiAgcHVibGljIGRhdGE6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGl0ZW1TaXplID0gdGhpcy5rZXlEZXNjICYmIHRoaXMua2V5VGl0bGUgPyA5MCA6IHRoaXMua2V5RGVzYyAmJiAhdGhpcy5rZXlUaXRsZSA/IDUwIDogNDA7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBEZXN0cm95U2VydmljZSxcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjaGFuZ2VEZXRlY3Rpb24pO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcclxuICBwdWJsaWMgb25XaW5kb3dTY3JvbGwoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy51cGRhdGVEcm9wZG93blBvc2l0aW9uKHRoaXMuZWwsIHRoaXMuZGF0YSwgdGhpcy5pdGVtU2l6ZSwgNDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbW1pdE9uSW5wdXQpIHtcclxuICAgICAgdGhpcy5rZXlVcFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmV0Y2hNb2RlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkZWQkLm5leHQodHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBtYXAoZXZlbnQgPT4gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWUpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSxcclxuICAgICAgICAgIC8vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksINC90LDQtNC+INC70Lg/XHJcbiAgICAgICAgICBtZXJnZU1hcChzZWFyY2ggPT4gb2Yoc2VhcmNoKS5waXBlKGRlbGF5KHRoaXMuZGVsYXkpKSksXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoc3RyID0+IHtcclxuICAgICAgICAgIHRoaXMua2V5dXBFdmVudC5lbWl0KHN0cik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkJC5uZXh0KGZhbHNlKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICgpID0+IHRoaXMubG9hZGVkJC5uZXh0KGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyB2YWx1ZTtcclxuICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIGZvcmNlQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNvbW1pdE9uSW5wdXQpIHtcclxuICAgICAgdGhpcy5rZXl1cEV2ZW50LmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGVhcihub0VtaXQ/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRlZCQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICBpZiAoIW5vRW1pdCkge1xyXG4gICAgICB0aGlzLmNsZWFyZWQuZW1pdCgpO1xyXG4gICAgICB0aGlzLmtleXVwRXZlbnQuZW1pdCgnJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucHV0U2VhcmNoRWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2xpY2tTZWFyY2hJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkZWQkLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChpdGVtKTtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLmtleVRpdGxlID8gdGhpcy5nZXRUaXRsZShpdGVtKSA6IHRoaXMuZ2V0RGVzYyhpdGVtKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUaXRsZShpdGVtOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGl0ZW1bdGhpcy5rZXlUaXRsZSBhcyBrZXlvZiB0eXBlb2YgaXRlbV0gYXMgc3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERlc2MoaXRlbTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBpdGVtW3RoaXMua2V5RGVzYyBhcyBrZXlvZiB0eXBlb2YgaXRlbV0gYXMgc3RyaW5nO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibGliLXNlYXJjaC1pbnB1dFwiPlxyXG4gIDxsYWJlbCBbZm9yXT1cImlkXCIgY2xhc3M9XCJsaWItc2VhcmNoLWlucHV0X190aXRsZVwiPlxyXG4gICAge3sgbGFiZWwgfX1cclxuICAgIEBpZiAocmVxdWlyZWQpIHtcclxuICAgICAgPGRkLWxpYi1zdmctaWNvbiBpY29uPVwiZXJyb3JfaGludFwiPjwvZGQtbGliLXN2Zy1pY29uPlxyXG4gICAgfVxyXG4gIDwvbGFiZWw+XHJcbiAgPGRpdiBjbGFzcz1cInBvcy1yZWxhdGl2ZVwiPlxyXG4gICAgPGRkLWxpYi1zdmctaWNvbiAoY2xpY2spPVwiZm9yY2VDaGFuZ2UoKVwiIGNsYXNzPVwic2VhcmNoLWljb25cIiBpY29uPVwic2VhcmNoXCI+PC9kZC1saWItc3ZnLWljb24+XHJcbiAgICA8aW5wdXRcclxuICAgICAgI3NlYXJjaElucHV0XHJcbiAgICAgIChrZXl1cCk9XCJrZXlVcC5uZXh0KCRldmVudClcIlxyXG4gICAgICAoa2V5dXAuZW50ZXIpPVwiZm9yY2VDaGFuZ2UoKVwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICBbYXR0ci5hdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlID09PSB1bmRlZmluZWQgPyBudWxsIDogYXV0b2NvbXBsZXRlXCJcclxuICAgICAgW2F0dHIuaWRdPVwiaWQgPyBpZCA6IG51bGxcIlxyXG4gICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCJcclxuICAgICAgW2F0dHIubWlubGVuZ3RoXT1cIm1pbmxlbmd0aFwiXHJcbiAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXHJcbiAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgW2F0dHIudGFiSW5kZXhdPVwidGFiSW5kZXhcIlxyXG4gICAgICBbYXR0ci50eXBlXT1cInR5cGUgfHwgJ3RleHQnXCJcclxuICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiZm9jdXNlZFwiXHJcbiAgICAgIFtjbGFzcy5yb3VuZF09XCJzdHlsZUlucHV0ID09PSAncm91bmQnXCJcclxuICAgICAgW2NsYXNzLndoaXRlXT1cImlucHV0U3R5bGUgPT09ICd3aGl0ZSdcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxyXG4gICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIC8+XHJcbiAgICA8ZGQtbGliLXN2Zy1pY29uXHJcbiAgICAgIChjbGljayk9XCJvbkNsZWFyKClcIlxyXG4gICAgICBbaWRdPVwiaWRDbG9zZVwiIFtzdHlsZS5kaXNwbGF5XT1cInZhbHVlPy5sZW5ndGggPyAnYmxvY2snIDogJ25vbmUnXCJcclxuICAgICAgY2xhc3M9XCJjbGVhci1pY29uXCIgaWNvbj1cImNsZWFyXCI+PC9kZC1saWItc3ZnLWljb24+XHJcbiAgICBAaWYgKGxvYWRlZCQgfCBhc3luYykge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1pY29uXCI+XHJcbiAgICAgICAgPGRkLWxpYi1sb2FkZXI+PC9kZC1saWItbG9hZGVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgQGlmIChkYXRhPy5sZW5ndGgpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZHJvcGRvd25cIiBbY2xhc3MudG9wXT1cInNpZGUgPT09ICd0b3AnXCIgW25nU3R5bGVdPVwiZHJvcGRvd25TdHlsZVwiPlxyXG4gICAgQGZvciAoaXRlbSBvZiBkYXRhOyB0cmFjayBpdGVtKSB7XHJcbiAgICA8ZGl2IChjbGljayk9XCJvbkNsaWNrU2VhcmNoSXRlbShpdGVtKVwiIGNsYXNzPVwic2VhcmNoLXJlc3VsdFwiPlxyXG4gICAgICBAaWYgKGdldFRpdGxlKGl0ZW0pOyBhcyB0aXRsZSkge1xyXG4gICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJ0aXRsZSB8IGhpZ2hsaWdodDogdmFsdWUgfCBzYWZlOiAnaHRtbCdcIiBjbGFzcz1cInNlYXJjaC1yZXN1bHRfX3RpdGxlXCI+PC9kaXY+XHJcbiAgICAgIH1cclxuICAgICAgQGlmIChnZXREZXNjKGl0ZW0pOyBhcyBkZXNjKSB7XHJcbiAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImRlc2MgfCBoaWdobGlnaHQ6IHZhbHVlIHwgc2FmZTogJ2h0bWwnXCIgY2xhc3M9XCJzZWFyY2gtcmVzdWx0X19kZXNjXCI+PC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==