@spicainternational/ngx-sds-components 2.23.0 → 2.23.2

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.
@@ -1,6 +1,7 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { SdsDurationFormatPipe } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
2
3
  import * as i0 from "@angular/core";
3
- import * as i1 from "./duration-input-resolver.service";
4
+ import * as i1 from "./duration.service";
4
5
  import * as i2 from "devextreme-angular";
5
6
  import * as i3 from "devextreme-angular/ui/nested";
6
7
  import * as i4 from "@angular/common";
@@ -9,14 +10,55 @@ import * as i6 from "@spicainternational/ngx-sds-components/src/lib/duration-pip
9
10
  export class SdsDurationBoxComponent {
10
11
  constructor(_durationInputResolver) {
11
12
  this._durationInputResolver = _durationInputResolver;
13
+ /**
14
+ * Duration length expressed in minutes; when we allow empty values this property can be null.
15
+ *
16
+ * @type {(number | null)}
17
+ * @memberof SdsDurationBoxComponent
18
+ */
12
19
  this.value = null;
13
20
  this.valueChange = new EventEmitter();
21
+ /**
22
+ * Allow user to select empty value. You should provide emptyValueText in this case.
23
+ *
24
+ * @type {boolean}
25
+ * @memberof SdsDurationBoxComponent
26
+ */
14
27
  this.allowEmptyValue = true;
28
+ /**
29
+ * 'emptyValueText' - text to be displayed when value is cleared
30
+ *
31
+ * @type {string}
32
+ * @memberof SdsDurationBoxComponent
33
+ */
15
34
  this.emptyValueText = 'not set';
35
+ /**
36
+ * Width of component
37
+ *
38
+ * @type {string}
39
+ * @memberof SdsDurationBoxComponent
40
+ */
16
41
  this.width = '10rem';
42
+ /**
43
+ * Specifies whether the UI component responds to user interaction.
44
+ *
45
+ * @type {boolean}
46
+ * @memberof SdsDurationBoxComponent
47
+ */
48
+ this.disabled = false;
49
+ /**
50
+ * Specifies whether to display the Clear button in the UI component.
51
+ *
52
+ * @type {boolean}
53
+ * @memberof SdsDurationBoxComponent
54
+ */
55
+ this.showClearButton = false;
17
56
  this.elementUUID = 'sds-db-' + crypto.randomUUID();
18
57
  this.inputValue = '';
19
58
  this.showOptions = false;
59
+ this.isValueEmpty = false;
60
+ this.isValueSetInternally = false;
61
+ this._durationPipe = new SdsDurationFormatPipe();
20
62
  this.optionsDropdownButton = {
21
63
  icon: 'spindown',
22
64
  stylingMode: 'text',
@@ -27,68 +69,55 @@ export class SdsDurationBoxComponent {
27
69
  this.clearValueButton = {
28
70
  icon: 'clear',
29
71
  stylingMode: 'text',
72
+ elementAttr: { class: 'sds-durationbox-clear-button' },
30
73
  onClick: () => {
31
74
  this.applyOption(null);
32
75
  }
33
76
  };
34
- this.isValueEmpty = false;
35
- this.isValueSetInternally = false;
36
77
  }
37
78
  ngOnChanges(changes) {
38
79
  if (changes['value']) {
39
80
  if (this.value === null) {
40
81
  if (this.allowEmptyValue) {
41
- this.isValueEmpty = true;
42
- this.inputValue = this.emptyValueText;
82
+ this.setValue(null);
43
83
  }
44
84
  else {
45
- this.inputValue = '0:00'; // TO-DO: resolve this scenario
85
+ this.setValue(this._durationInputResolver.getDefaultValue());
86
+ this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
46
87
  }
47
88
  }
48
89
  else {
49
- this.inputValue = this.minutesToDurationString(this.value);
90
+ this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
50
91
  }
51
92
  }
52
93
  }
53
94
  ngOnInit() { }
54
95
  blockNonNumberOrSemicolon(e) {
55
96
  this.isValueSetInternally = false;
56
- if (!(e.event.key === 'Enter' ||
57
- e.event.key === 'NumpadEnter' ||
58
- e.event.key === 'Delete' ||
59
- e.event.key === 'Tab' ||
60
- e.event.key === 'Backspace' ||
61
- e.event.key === 'ArrowLeft' ||
62
- e.event.key === 'ArrowRight' ||
63
- e.event.key === 'ArrowTop' ||
64
- e.event.key === 'ArrowBottom')) {
65
- const regexNumberOfSemicolon = /\d|:/;
66
- if (!regexNumberOfSemicolon.test(e.event.key)) {
67
- e.event.preventDefault();
68
- console.log(`${e.event.key} is not valid`);
69
- }
70
- else {
71
- this.isValueEmpty = false;
72
- }
73
- }
74
97
  }
75
- resolveInput(data) {
98
+ resolveInput() {
76
99
  if (!this.isValueSetInternally) {
77
- if (this.isValueEmpty || (data.value === '' && this.allowEmptyValue)) {
78
- // this.inputValue = this.emptyValueTextthis
79
- // this.applyOption(null);
80
- this.setValue(null);
100
+ if (!this._durationInputResolver.isValidInput(this.inputValue)) {
101
+ // we have invalid input. use old value
102
+ this.setInputValueInternally(this.value);
81
103
  }
82
104
  else {
83
- const resolvedValue = this._durationInputResolver.resolve(data.value);
105
+ const resolvedValue = this._durationInputResolver.resolve(this.inputValue);
84
106
  if (resolvedValue === null && this.allowEmptyValue) {
85
107
  this.setValue(null);
86
108
  }
87
109
  else if (resolvedValue === null && !this.allowEmptyValue) {
88
- this.setValue(resolvedValue);
110
+ this.setValue(this._durationInputResolver.getDefaultValue());
89
111
  }
90
112
  else {
91
- this.setValue(resolvedValue);
113
+ // make sure that the value is within the min/max period
114
+ if (this._durationInputResolver.isValueWithinLimits(resolvedValue, this.min, this.max)) {
115
+ this.setValue(resolvedValue);
116
+ }
117
+ else {
118
+ // use old value
119
+ this.setInputValueInternally(this.value);
120
+ }
92
121
  }
93
122
  }
94
123
  }
@@ -99,33 +128,24 @@ export class SdsDurationBoxComponent {
99
128
  this.setValue(value);
100
129
  }
101
130
  setValue(value) {
102
- if ((this.isValueEmpty && value != null) || (!this.isValueEmpty && this.value != value)) {
103
- this.value = value;
104
- this.valueChange.emit(this.value);
105
- if (value === null) {
106
- this.isValueEmpty = true;
107
- this.isValueSetInternally = true;
108
- this.inputValue = this.emptyValueText;
109
- }
110
- else if (typeof value === 'number') {
111
- this.isValueEmpty = false;
112
- this.isValueSetInternally = true;
113
- this.inputValue = this.minutesToDurationString(this.value);
114
- }
115
- }
131
+ this.isValueEmpty = (value === null);
132
+ this.value = value;
133
+ this.valueChange.emit(this.value);
134
+ this.setInputValueInternally(value);
116
135
  }
117
- minutesToDurationString(minutes) {
118
- const hours = Math.floor(minutes / 60);
119
- const mins = minutes % 60;
120
- return `${hours.toString().padStart(1, "0")}:${mins.toString().padStart(2, "0")}`;
136
+ setInputValueInternally(value) {
137
+ this.isValueSetInternally = true;
138
+ setTimeout(() => {
139
+ this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
140
+ }, 0);
121
141
  }
122
142
  }
123
- SdsDurationBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, deps: [{ token: i1.DurationInputResolverService }], target: i0.ɵɵFactoryTarget.Component });
124
- SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textbox"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onValueChanged)=\"resolveInput($event)\"\n [width]=\"width\"\n >\n <dxi-button\n *ngIf=\"allowEmptyValue\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n \n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [width]=\"width\"\n [closeOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </div>\n\n <!-- <div *ngFor=\"let option of options\"\n class=\"d-flex align-items-center p-1 my-1 mx-1 overflow-avatar-container\" >\n <div class=\"ml-2 pl-1\">\n {{option | sdsDurationFormat}}\n </div>\n </div> -->\n</dx-popover>", styles: [".duration-box-container{height:calc(1.5em + .75rem + 2px)}.duration-box-container .options-dropdown-button{box-shadow:none!important;border:1px solid white;flex:0;padding-top:.3rem!important;padding-bottom:.3rem!important}.duration-box-container input{border:0;min-width:0}.duration-box-container input:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item .selected{background-color:#dee2e6}\n"], components: [{ type: i2.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { type: i3.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "sdsDurationFormat": i6.SdsDurationFormatPipe } });
143
+ SdsDurationBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, deps: [{ token: i1.DurationService }], target: i0.ɵɵFactoryTarget.Component });
144
+ SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width", disabled: "disabled", showClearButton: "showClearButton", max: "max", min: "min" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<dx-text-box\r\n #textbox\r\n [id]=\"elementUUID\"\r\n class=\"sds-durationbox\"\r\n [(value)]=\"inputValue\"\r\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\r\n (onChange)=\"resolveInput()\"\r\n [width]=\"width\"\r\n [disabled]=\"disabled\"\r\n >\r\n\r\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\r\n\r\n <dxi-button\r\n *ngIf=\"allowEmptyValue && showClearButton\"\r\n name=\"clearValue\"\r\n location=\"after\"\r\n [options]=\"clearValueButton\"\r\n ></dxi-button>\r\n <dxi-button\r\n *ngIf=\"options && options.length > 0\"\r\n name=\"optionsDropdown\"\r\n location=\"after\"\r\n [options]=\"optionsDropdownButton\"\r\n ></dxi-button>\r\n</dx-text-box>\r\n\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n [(visible)]=\"showOptions\"\r\n [minWidth]=\"width\"\r\n [hideOnOutsideClick]=\"true\"\r\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\r\n >\r\n\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view>\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"isValueEmpty\"\r\n (click)=\"applyOption(null)\"\r\n > {{ emptyValueText}}\r\n </button>\r\n\r\n <div *ngFor=\"let option of options\">\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"option === value\"\r\n (click)=\"applyOption(option)\"\r\n > {{option | sdsDurationFormat}}\r\n </button>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"], components: [{ type: i2.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { type: i3.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { type: i2.DxScrollViewComponent, selector: "dx-scroll-view", inputs: ["bounceEnabled", "direction", "disabled", "elementAttr", "height", "pulledDownText", "pullingDownText", "reachBottomText", "refreshingText", "rtlEnabled", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onPullDown", "onReachBottom", "onScroll", "onUpdated", "bounceEnabledChange", "directionChange", "disabledChange", "elementAttrChange", "heightChange", "pulledDownTextChange", "pullingDownTextChange", "reachBottomTextChange", "refreshingTextChange", "rtlEnabledChange", "scrollByContentChange", "scrollByThumbChange", "showScrollbarChange", "useNativeChange", "widthChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "sdsDurationFormat": i6.SdsDurationFormatPipe } });
125
145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, decorators: [{
126
146
  type: Component,
127
- args: [{ selector: 'sds-duration-box', template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onValueChanged)=\"resolveInput($event)\"\n [width]=\"width\"\n >\n <dxi-button\n *ngIf=\"allowEmptyValue\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n \n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [width]=\"width\"\n [closeOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </div>\n\n <!-- <div *ngFor=\"let option of options\"\n class=\"d-flex align-items-center p-1 my-1 mx-1 overflow-avatar-container\" >\n <div class=\"ml-2 pl-1\">\n {{option | sdsDurationFormat}}\n </div>\n </div> -->\n</dx-popover>", styles: [".duration-box-container{height:calc(1.5em + .75rem + 2px)}.duration-box-container .options-dropdown-button{box-shadow:none!important;border:1px solid white;flex:0;padding-top:.3rem!important;padding-bottom:.3rem!important}.duration-box-container input{border:0;min-width:0}.duration-box-container input:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item .selected{background-color:#dee2e6}\n"] }]
128
- }], ctorParameters: function () { return [{ type: i1.DurationInputResolverService }]; }, propDecorators: { value: [{
147
+ args: [{ selector: 'sds-duration-box', template: "<dx-text-box\r\n #textbox\r\n [id]=\"elementUUID\"\r\n class=\"sds-durationbox\"\r\n [(value)]=\"inputValue\"\r\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\r\n (onChange)=\"resolveInput()\"\r\n [width]=\"width\"\r\n [disabled]=\"disabled\"\r\n >\r\n\r\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\r\n\r\n <dxi-button\r\n *ngIf=\"allowEmptyValue && showClearButton\"\r\n name=\"clearValue\"\r\n location=\"after\"\r\n [options]=\"clearValueButton\"\r\n ></dxi-button>\r\n <dxi-button\r\n *ngIf=\"options && options.length > 0\"\r\n name=\"optionsDropdown\"\r\n location=\"after\"\r\n [options]=\"optionsDropdownButton\"\r\n ></dxi-button>\r\n</dx-text-box>\r\n\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n [(visible)]=\"showOptions\"\r\n [minWidth]=\"width\"\r\n [hideOnOutsideClick]=\"true\"\r\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\r\n >\r\n\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view>\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"isValueEmpty\"\r\n (click)=\"applyOption(null)\"\r\n > {{ emptyValueText}}\r\n </button>\r\n\r\n <div *ngFor=\"let option of options\">\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"option === value\"\r\n (click)=\"applyOption(option)\"\r\n > {{option | sdsDurationFormat}}\r\n </button>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"] }]
148
+ }], ctorParameters: function () { return [{ type: i1.DurationService }]; }, propDecorators: { value: [{
129
149
  type: Input
130
150
  }], valueChange: [{
131
151
  type: Output
@@ -137,8 +157,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
137
157
  type: Input
138
158
  }], width: [{
139
159
  type: Input
140
- }], textbox: [{
141
- type: ViewChild,
142
- args: ['textbox', { static: true }]
160
+ }], disabled: [{
161
+ type: Input
162
+ }], showClearButton: [{
163
+ type: Input
164
+ }], max: [{
165
+ type: Input
166
+ }], min: [{
167
+ type: Input
143
168
  }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvZHVyYXRpb24tYm94L2R1cmF0aW9uLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVNoSSxNQUFNLE9BQU8sdUJBQXVCO0lBdUNoQyxZQUNZLHNCQUFvRDtRQUFwRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQThCO1FBdEN2RCxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWpELG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLG1CQUFjLEdBQVcsU0FBUyxDQUFDO1FBR25DLFVBQUssR0FBVyxPQUFPLENBQUM7UUFLMUIsZ0JBQVcsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTlDLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0IsMEJBQXFCLEdBQUk7WUFDNUIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUFFLE1BQU07WUFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1NBQ0osQ0FBQTtRQUVNLHFCQUFnQixHQUFJO1lBQ3ZCLElBQUksRUFBRSxPQUFP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QUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3RGLENBQUM7O29IQXBJUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw4V0NUcEMsb29EQXlEYTsyRkRoREEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLGtCQUFrQjttSEFNbkIsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRWdDLE9BQU87c0JBQTVDLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeFRleHRCb3hDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0IHsgRHVyYXRpb25JbnB1dFJlc29sdmVyU2VydmljZSB9IGZyb20gJy4vZHVyYXRpb24taW5wdXQtcmVzb2x2ZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2RzLWR1cmF0aW9uLWJveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2R1cmF0aW9uLWJveC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHVyYXRpb24tYm94LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgdmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcblxuICAgIEBJbnB1dCgpIGFsbG93RW1wdHlWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgZW1wdHlWYWx1ZVRleHQ6IHN0cmluZyA9ICdub3Qgc2V0JztcblxuICAgIEBJbnB1dCgpIG9wdGlvbnM/OiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJzEwcmVtJztcblxuICAgIEBWaWV3Q2hpbGQoJ3RleHRib3gnLCB7c3RhdGljOiB0cnVlfSkgdGV4dGJveD86IER4VGV4dEJveENvbXBvbmVudDtcblxuXG4gICAgcHVibGljIGVsZW1lbnRVVUlEID0gJ3Nkcy1kYi0nICsgY3J5cHRvLnJhbmRvbVVVSUQoKTtcblxuICAgIHB1YmxpYyBpbnB1dFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBcbiAgICBwdWJsaWMgb3B0aW9uc0Ryb3Bkb3duQnV0dG9uID0gIHtcbiAgICAgICAgaWNvbjogJ3NwaW5kb3duJyxcbiAgICAgICAgc3R5bGluZ01vZGU6ICd0ZXh0JyxcbiAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyVmFsdWVCdXR0b24gPSAge1xuICAgICAgICBpY29uOiAnY2xlYXInLFxuICAgICAgICBzdHlsaW5nTW9kZTogJ3RleHQnLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5T3B0aW9uKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBpc1ZhbHVlU2V0SW50ZXJuYWxseSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2R1cmF0aW9uSW5wdXRSZXNvbHZlcjogRHVyYXRpb25JbnB1dFJlc29sdmVyU2VydmljZVxuICAgICkge31cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dFbXB0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZUVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5lbXB0eVZhbHVlVGV4dDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAnMDowMCc7IC8vIFRPLURPOiByZXNvbHZlIHRoaXMgc2NlbmFyaW9cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLm1pbnV0ZXNUb0R1cmF0aW9uU3RyaW5nKHRoaXMudmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgYmxvY2tOb25OdW1iZXJPclNlbWljb2xvbihlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbHVlU2V0SW50ZXJuYWxseSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghKFxuICAgICAgICAgICAgZS5ldmVudC5rZXkgPT09ICdFbnRlcicgfHwgXG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ051bXBhZEVudGVyJyB8fCBcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnRGVsZXRlJyB8fCBcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnVGFiJyB8fFxuICAgICAgICAgICAgZS5ldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8XG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHxcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHxcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnQXJyb3dUb3AnIHx8XG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ0Fycm93Qm90dG9tJ1xuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgY29uc3QgcmVnZXhOdW1iZXJPZlNlbWljb2xvbiA9IC9cXGR8Oi87XG4gICAgICAgICAgICBpZiAoIXJlZ2V4TnVtYmVyT2ZTZW1pY29sb24udGVzdChlLmV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICBlLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7ZS5ldmVudC5rZXl9IGlzIG5vdCB2YWxpZGApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVJbnB1dChkYXRhOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5KXtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSB8fCAoZGF0YS52YWx1ZSA9PT0gJycgJiYgdGhpcy5hbGxvd0VtcHR5VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5lbXB0eVZhbHVlVGV4dHRoaXNcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmFwcGx5T3B0aW9uKG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IHRoaXMuX2R1cmF0aW9uSW5wdXRSZXNvbHZlci5yZXNvbHZlKGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZFZhbHVlID09PSBudWxsICYmIHRoaXMuYWxsb3dFbXB0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZFZhbHVlID09PSBudWxsICYmICF0aGlzLmFsbG93RW1wdHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUocmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5T3B0aW9uKHZhbHVlOiBudW1iZXIgfCBudWxsKXtcbiAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpe1xuICAgICAgICBpZiAoICh0aGlzLmlzVmFsdWVFbXB0eSAmJiB2YWx1ZSAhPSBudWxsKSAgfHwgKCF0aGlzLmlzVmFsdWVFbXB0eSAmJiB0aGlzLnZhbHVlICE9IHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZW1wdHlWYWx1ZVRleHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMubWludXRlc1RvRHVyYXRpb25TdHJpbmcodGhpcy52YWx1ZSBhcyBudW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIG1pbnV0ZXNUb0R1cmF0aW9uU3RyaW5nKG1pbnV0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzLzYwKTtcbiAgICAgICAgY29uc3QgbWlucyA9IG1pbnV0ZXMgJSA2MDtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMSwgXCIwXCIpfToke21pbnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9YDtcbiAgICB9XG59XG4iLCI8ZHgtdGV4dC1ib3hcbiAgICAjdGV4dGJveFxuICAgIFtpZF09XCJlbGVtZW50VVVJRFwiXG4gICAgW3ZhbHVlXT1cImlucHV0VmFsdWVcIlxuICAgIChvbktleURvd24pPVwiYmxvY2tOb25OdW1iZXJPclNlbWljb2xvbigkZXZlbnQpXCJcbiAgICAob25WYWx1ZUNoYW5nZWQpPVwicmVzb2x2ZUlucHV0KCRldmVudClcIlxuICAgIFt3aWR0aF09XCJ3aWR0aFwiXG4gICAgPlxuICAgIDxkeGktYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiYWxsb3dFbXB0eVZhbHVlXCJcbiAgICAgICAgbmFtZT1cImNsZWFyVmFsdWVcIlxuICAgICAgICBsb2NhdGlvbj1cImFmdGVyXCJcbiAgICAgICAgW29wdGlvbnNdPVwiY2xlYXJWYWx1ZUJ1dHRvblwiXG4gICAgPjwvZHhpLWJ1dHRvbj5cbiAgICA8ZHhpLWJ1dHRvblxuICAgICAgICBcbiAgICAgICAgKm5nSWY9XCJvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgIG5hbWU9XCJvcHRpb25zRHJvcGRvd25cIlxuICAgICAgICBsb2NhdGlvbj1cImFmdGVyXCJcbiAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc0Ryb3Bkb3duQnV0dG9uXCJcbiAgICA+PC9keGktYnV0dG9uPlxuPC9keC10ZXh0LWJveD5cblxuXG48ZHgtcG9wb3ZlclxuICAgIHRhcmdldD1cIiN7e2VsZW1lbnRVVUlEfX1cIlxuICAgIFsodmlzaWJsZSldPVwic2hvd09wdGlvbnNcIlxuICAgIFt3aWR0aF09XCJ3aWR0aFwiXG4gICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgW3dyYXBwZXJBdHRyXT1cInsgY2xhc3M6ICdzZHMtZHVyYXRpb25ib3gtb3B0aW9ucy1wb3BvdmVyJyB9XCJcbiAgICA+XG5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGJvcmRlci0wXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF0gPSBcImlzVmFsdWVFbXB0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlPcHRpb24obnVsbClcIlxuICAgICAgICAgICAgPiB7eyBlbXB0eVZhbHVlVGV4dH19XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdID0gXCJvcHRpb24gPT09IHZhbHVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgICA+IHt7b3B0aW9uIHwgc2RzRHVyYXRpb25Gb3JtYXR9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwLTEgbXktMSBteC0xIG92ZXJmbG93LWF2YXRhci1jb250YWluZXJcIiA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yIHBsLTFcIj5cbiAgICAgICAgICAgIHt7b3B0aW9uIHwgc2RzRHVyYXRpb25Gb3JtYXR9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG48L2R4LXBvcG92ZXI+Il19
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvZHVyYXRpb24tYm94L2R1cmF0aW9uLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOERBQThELENBQUM7Ozs7Ozs7O0FBUXJHLE1BQU0sT0FBTyx1QkFBdUI7SUF1RmhDLFlBQ1ksc0JBQXVDO1FBQXZDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBaUI7UUF2Rm5EOzs7OztXQUtHO1FBQ00sVUFBSyxHQUFrQixJQUFJLENBQUM7UUFDM0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUUxRDs7Ozs7V0FLRztRQUNNLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBRXpDOzs7OztXQUtHO1FBQ00sbUJBQWMsR0FBVyxTQUFTLENBQUM7UUFVNUM7Ozs7O1dBS0c7UUFDTSxVQUFLLEdBQVcsT0FBTyxDQUFDO1FBRWpDOzs7OztXQUtHO1FBQ00sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7Ozs7V0FLRztRQUNNLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBa0JuQyxnQkFBVyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFOUMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUs3QixpQkFBWSxHQUFHLEtBQUss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QkFRRyxHQUFHO3NCQUFYLEtBQUs7Z0JBUUcsR0FBRztzQkFBWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNkc0R1cmF0aW9uRm9ybWF0UGlwZSB9IGZyb20gJ0BzcGljYWludGVybmF0aW9uYWwvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvZHVyYXRpb24tcGlwZSc7XHJcbmltcG9ydCB7IER1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vZHVyYXRpb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc2RzLWR1cmF0aW9uLWJveCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHVyYXRpb24tYm94LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2R1cmF0aW9uLWJveC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RzRHVyYXRpb25Cb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICAvKipcclxuICAgICAqIER1cmF0aW9uIGxlbmd0aCBleHByZXNzZWQgaW4gbWludXRlczsgd2hlbiB3ZSBhbGxvdyBlbXB0eSB2YWx1ZXMgdGhpcyBwcm9wZXJ0eSBjYW4gYmUgbnVsbC5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7KG51bWJlciB8IG51bGwpfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbG93IHVzZXIgdG8gc2VsZWN0IGVtcHR5IHZhbHVlLiBZb3Ugc2hvdWxkIHByb3ZpZGUgZW1wdHlWYWx1ZVRleHQgaW4gdGhpcyBjYXNlLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlcm9mIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGFsbG93RW1wdHlWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAnZW1wdHlWYWx1ZVRleHQnIC0gdGV4dCB0byBiZSBkaXNwbGF5ZWQgd2hlbiB2YWx1ZSBpcyBjbGVhcmVkXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBtZW1iZXJvZiBTZHNEdXJhdGlvbkJveENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBlbXB0eVZhbHVlVGV4dDogc3RyaW5nID0gJ25vdCBzZXQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJyYXkgb2YgcHJlLWRlZmluZWQgZHVyYXRpb25zIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gZHJvcGRvd24gZm9yIGVhc2llciBzZWxlY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIG9wdGlvbnM/OiBudW1iZXJbXTtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBXaWR0aCBvZiBjb21wb25lbnRcclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMTByZW0nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFVJIGNvbXBvbmVudCByZXNwb25kcyB0byB1c2VyIGludGVyYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlcm9mIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgQ2xlYXIgYnV0dG9uIGluIHRoZSBVSSBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyb2YgU2RzRHVyYXRpb25Cb3hDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc2hvd0NsZWFyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWF4aW11bSB2YWx1ZSBhY2NlcHRlZCBieSB0aGUgZHVyYXRpb24gYm94LlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyb2YgU2RzRHVyYXRpb25Cb3hDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgbWF4PzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1pbmltdW0gdmFsdWUgYWNjZXB0ZWQgYnkgdGhlIGR1cmF0aW9uIGJveC5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50XHJcbiAgICAgKi8gICAgXHJcbiAgICBASW5wdXQoKSBtaW4/OiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGVsZW1lbnRVVUlEID0gJ3Nkcy1kYi0nICsgY3J5cHRvLnJhbmRvbVVVSUQoKTtcclxuXHJcbiAgICBwdWJsaWMgaW5wdXRWYWx1ZTogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgcHVibGljIG9wdGlvbnNEcm9wZG93bkJ1dHRvbjtcclxuICAgIHB1YmxpYyBjbGVhclZhbHVlQnV0dG9uO1xyXG5cclxuICAgIHB1YmxpYyBpc1ZhbHVlRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGlzVmFsdWVTZXRJbnRlcm5hbGx5ID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9kdXJhdGlvblBpcGU6IFNkc0R1cmF0aW9uRm9ybWF0UGlwZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9kdXJhdGlvbklucHV0UmVzb2x2ZXI6IER1cmF0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuX2R1cmF0aW9uUGlwZSA9IG5ldyBTZHNEdXJhdGlvbkZvcm1hdFBpcGUoKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm9wdGlvbnNEcm9wZG93bkJ1dHRvbiA9ICB7XHJcbiAgICAgICAgICAgIGljb246ICdzcGluZG93bicsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2RlOiAndGV4dCcsXHJcbiAgICBcclxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNsZWFyVmFsdWVCdXR0b24gPSAge1xyXG4gICAgICAgICAgICBpY29uOiAnY2xlYXInLFxyXG4gICAgICAgICAgICBzdHlsaW5nTW9kZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBlbGVtZW50QXR0cjogeyBjbGFzczogJ3Nkcy1kdXJhdGlvbmJveC1jbGVhci1idXR0b24nIH0sXHJcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlPcHRpb24obnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbG93RW1wdHlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5fZHVyYXRpb25JbnB1dFJlc29sdmVyLmdldERlZmF1bHRWYWx1ZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLl9kdXJhdGlvblBpcGUudHJhbnNmb3JtKHRoaXMudmFsdWUsIHRoaXMuZW1wdHlWYWx1ZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLl9kdXJhdGlvblBpcGUudHJhbnNmb3JtKHRoaXMudmFsdWUsIHRoaXMuZW1wdHlWYWx1ZVRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge31cclxuXHJcbiAgICBwdWJsaWMgYmxvY2tOb25OdW1iZXJPclNlbWljb2xvbihlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyByZXNvbHZlSW5wdXQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5KXtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kdXJhdGlvbklucHV0UmVzb2x2ZXIuaXNWYWxpZElucHV0KHRoaXMuaW5wdXRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgaW52YWxpZCBpbnB1dC4gdXNlIG9sZCB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlSW50ZXJuYWxseSh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSB0aGlzLl9kdXJhdGlvbklucHV0UmVzb2x2ZXIucmVzb2x2ZSh0aGlzLmlucHV0VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRWYWx1ZSA9PT0gbnVsbCAmJiB0aGlzLmFsbG93RW1wdHlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmVkVmFsdWUgPT09IG51bGwgJiYgIXRoaXMuYWxsb3dFbXB0eVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLl9kdXJhdGlvbklucHV0UmVzb2x2ZXIuZ2V0RGVmYXVsdFZhbHVlKCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlIGlzIHdpdGhpbiB0aGUgbWluL21heCBwZXJpb2RcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZHVyYXRpb25JbnB1dFJlc29sdmVyLmlzVmFsdWVXaXRoaW5MaW1pdHMocmVzb2x2ZWRWYWx1ZSBhcyBudW1iZXIsIHRoaXMubWluLCB0aGlzLm1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShyZXNvbHZlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Ugb2xkIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZUludGVybmFsbHkodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHBseU9wdGlvbih2YWx1ZTogbnVtYmVyIHwgbnVsbCl7XHJcbiAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKXtcclxuICAgICAgICB0aGlzLmlzVmFsdWVFbXB0eSA9ICh2YWx1ZSA9PT0gbnVsbCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLnNldElucHV0VmFsdWVJbnRlcm5hbGx5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldElucHV0VmFsdWVJbnRlcm5hbGx5KHZhbHVlOiBudW1iZXIgfCBudWxsKXtcclxuICAgICAgICB0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5ID0gdHJ1ZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5fZHVyYXRpb25QaXBlLnRyYW5zZm9ybSh0aGlzLnZhbHVlLCB0aGlzLmVtcHR5VmFsdWVUZXh0KTtcclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiPGR4LXRleHQtYm94XHJcbiAgICAjdGV4dGJveFxyXG4gICAgW2lkXT1cImVsZW1lbnRVVUlEXCJcclxuICAgIGNsYXNzPVwic2RzLWR1cmF0aW9uYm94XCJcclxuICAgIFsodmFsdWUpXT1cImlucHV0VmFsdWVcIlxyXG4gICAgKG9uS2V5RG93bik9XCJibG9ja05vbk51bWJlck9yU2VtaWNvbG9uKCRldmVudClcIlxyXG4gICAgKG9uQ2hhbmdlKT1cInJlc29sdmVJbnB1dCgpXCJcclxuICAgIFt3aWR0aF09XCJ3aWR0aFwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgPlxyXG5cclxuICAgIDwhLS0gKG9uVmFsdWVDaGFuZ2VkKT1cInJlc29sdmVJbnB1dCgkZXZlbnQpXCIgLS0+XHJcblxyXG4gICAgPGR4aS1idXR0b25cclxuICAgICAgICAqbmdJZj1cImFsbG93RW1wdHlWYWx1ZSAmJiBzaG93Q2xlYXJCdXR0b25cIlxyXG4gICAgICAgIG5hbWU9XCJjbGVhclZhbHVlXCJcclxuICAgICAgICBsb2NhdGlvbj1cImFmdGVyXCJcclxuICAgICAgICBbb3B0aW9uc109XCJjbGVhclZhbHVlQnV0dG9uXCJcclxuICAgID48L2R4aS1idXR0b24+XHJcbiAgICA8ZHhpLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwib3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgIG5hbWU9XCJvcHRpb25zRHJvcGRvd25cIlxyXG4gICAgICAgIGxvY2F0aW9uPVwiYWZ0ZXJcIlxyXG4gICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNEcm9wZG93bkJ1dHRvblwiXHJcbiAgICA+PC9keGktYnV0dG9uPlxyXG48L2R4LXRleHQtYm94PlxyXG5cclxuXHJcbjxkeC1wb3BvdmVyXHJcbiAgICB0YXJnZXQ9XCIje3tlbGVtZW50VVVJRH19XCJcclxuICAgIFsodmlzaWJsZSldPVwic2hvd09wdGlvbnNcIlxyXG4gICAgW21pbldpZHRoXT1cIndpZHRoXCJcclxuICAgIFtoaWRlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXHJcbiAgICBbd3JhcHBlckF0dHJdPVwieyBjbGFzczogJ3Nkcy1kdXJhdGlvbmJveC1vcHRpb25zLXBvcG92ZXInIH1cIlxyXG4gICAgPlxyXG5cclxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY29udGVudCdcIj5cclxuICAgICAgICA8ZHgtc2Nyb2xsLXZpZXc+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBib3JkZXItMFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdID0gXCJpc1ZhbHVlRW1wdHlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5T3B0aW9uKG51bGwpXCJcclxuICAgICAgICAgICAgICAgID4ge3sgZW1wdHlWYWx1ZVRleHR9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGJvcmRlci0wXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdID0gXCJvcHRpb24gPT09IHZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlPcHRpb24ob3B0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICA+IHt7b3B0aW9uIHwgc2RzRHVyYXRpb25Gb3JtYXR9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZHgtc2Nyb2xsLXZpZXc+XHJcbiAgICA8L2Rpdj5cclxuPC9keC1wb3BvdmVyPiJdfQ==
@@ -40,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
40
40
  ]
41
41
  }]
42
42
  }] });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tYm94Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1ib3gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOERBQThELENBQUM7O0FBSXJHLE1BQU0sVUFBVSxHQUFHO0lBQ2YsdUJBQXVCO0NBQzFCLENBQUE7QUFtQkQsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGlCQWY3Qix1QkFBdUIsYUFHdkIsWUFBWTtRQUVaLHFCQUFxQjtRQUVyQixlQUFlO1FBQ2YsZUFBZTtRQUNmLGtCQUFrQixhQWRsQix1QkFBdUI7a0hBb0JkLG9CQUFvQixZQWJ0QjtZQUNQLFlBQVk7WUFFWixxQkFBcUI7WUFFckIsZUFBZTtZQUNmLGVBQWU7WUFDZixrQkFBa0I7U0FDbkI7MkZBS1Usb0JBQW9CO2tCQWpCaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osdUJBQXVCO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFFWixxQkFBcUI7d0JBRXJCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixrQkFBa0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLFVBQVU7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNkc0R1cmF0aW9uQm94Q29tcG9uZW50IH0gZnJvbSAnLi9kdXJhdGlvbi1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IER4UG9wb3Zlck1vZHVsZSwgRHhTY3JvbGxWaWV3TW9kdWxlLCBEeFRleHRCb3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0IHsgU2RzRHVyYXRpb25QaXBlTW9kdWxlIH0gZnJvbSAnQHNwaWNhaW50ZXJuYXRpb25hbC9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi9kdXJhdGlvbi1waXBlJztcblxuXG5cbmNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgU2RzRHVyYXRpb25Cb3hDb21wb25lbnRcbl1cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgU2RzRHVyYXRpb25Cb3hDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcblxuICAgIFNkc0R1cmF0aW9uUGlwZU1vZHVsZSxcbiAgICBcbiAgICBEeFRleHRCb3hNb2R1bGUsXG4gICAgRHhQb3BvdmVyTW9kdWxlLFxuICAgIER4U2Nyb2xsVmlld01vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIC4uLmNvbXBvbmVudHNcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZHNEdXJhdGlvbkJveE1vZHVsZSB7IH1cbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tYm94Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1ib3gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOERBQThELENBQUM7O0FBSXJHLE1BQU0sVUFBVSxHQUFHO0lBQ2YsdUJBQXVCO0NBQzFCLENBQUE7QUFtQkQsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGlCQWY3Qix1QkFBdUIsYUFHdkIsWUFBWTtRQUVaLHFCQUFxQjtRQUVyQixlQUFlO1FBQ2YsZUFBZTtRQUNmLGtCQUFrQixhQWRsQix1QkFBdUI7a0hBb0JkLG9CQUFvQixZQWJ0QjtZQUNQLFlBQVk7WUFFWixxQkFBcUI7WUFFckIsZUFBZTtZQUNmLGVBQWU7WUFDZixrQkFBa0I7U0FDbkI7MkZBS1Usb0JBQW9CO2tCQWpCaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osdUJBQXVCO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFFWixxQkFBcUI7d0JBRXJCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixrQkFBa0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLFVBQVU7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTZHNEdXJhdGlvbkJveENvbXBvbmVudCB9IGZyb20gJy4vZHVyYXRpb24tYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IER4UG9wb3Zlck1vZHVsZSwgRHhTY3JvbGxWaWV3TW9kdWxlLCBEeFRleHRCb3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBTZHNEdXJhdGlvblBpcGVNb2R1bGUgfSBmcm9tICdAc3BpY2FpbnRlcm5hdGlvbmFsL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLXBpcGUnO1xyXG5cclxuXHJcblxyXG5jb25zdCBjb21wb25lbnRzID0gW1xyXG4gICAgU2RzRHVyYXRpb25Cb3hDb21wb25lbnRcclxuXVxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50XHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcblxyXG4gICAgU2RzRHVyYXRpb25QaXBlTW9kdWxlLFxyXG4gICAgXHJcbiAgICBEeFRleHRCb3hNb2R1bGUsXHJcbiAgICBEeFBvcG92ZXJNb2R1bGUsXHJcbiAgICBEeFNjcm9sbFZpZXdNb2R1bGUsXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICAuLi5jb21wb25lbnRzXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RzRHVyYXRpb25Cb3hNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -0,0 +1,69 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DurationService {
4
+ constructor() { }
5
+ resolve(input) {
6
+ if (!input || input.length === 0) {
7
+ return 0;
8
+ }
9
+ const inputSegments = input.split(':');
10
+ if (inputSegments.length > 2) {
11
+ //invalid input
12
+ return 0;
13
+ }
14
+ else if (inputSegments.length == 2) {
15
+ // we have hrs and minutes
16
+ const hrs = parseInt(inputSegments[0] ? inputSegments[0] : '0');
17
+ const mins = parseInt(inputSegments[1] ? inputSegments[1] : '0');
18
+ const totalMins = (hrs * 60) + mins;
19
+ return totalMins;
20
+ }
21
+ else if (inputSegments.length == 1) {
22
+ // take last two digits as mins
23
+ const nonSeparated = inputSegments[0];
24
+ let totalMins = 0;
25
+ if (nonSeparated.length <= 2) {
26
+ totalMins = parseInt(nonSeparated);
27
+ }
28
+ else {
29
+ const lastIndex = nonSeparated.length - 2;
30
+ const part1 = nonSeparated.slice(0, lastIndex);
31
+ const part2 = nonSeparated.slice(lastIndex);
32
+ const hrs = parseInt(part1);
33
+ const mins = parseInt(part2);
34
+ totalMins = (hrs * 60) + mins;
35
+ }
36
+ return totalMins;
37
+ }
38
+ return 0;
39
+ }
40
+ isValidInput(input) {
41
+ const regexNumbersOnly = /^[+-]?\d+$/;
42
+ const regexColonSeparated = /^[+-]?\d+:\d+$/;
43
+ return regexNumbersOnly.test(input) || regexColonSeparated.test(input);
44
+ }
45
+ getDefaultValue(min, max) {
46
+ let defaultValue = 0;
47
+ // try keeping the 0 as default
48
+ // if it is outside the min/max then adjust
49
+ if (min) {
50
+ defaultValue = Math.max(defaultValue, min);
51
+ }
52
+ if (max) {
53
+ defaultValue = Math.min(defaultValue, max);
54
+ }
55
+ return defaultValue;
56
+ }
57
+ isValueWithinLimits(value, min, max) {
58
+ return !((min && value < min) || (max && value > max));
59
+ }
60
+ }
61
+ DurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
62
+ DurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationService, providedIn: 'root' });
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationService, decorators: [{
64
+ type: Injectable,
65
+ args: [{
66
+ providedIn: 'root',
67
+ }]
68
+ }], ctorParameters: function () { return []; } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxlQUFlO0lBRXhCLGdCQUFlLENBQUM7SUFFVCxPQUFPLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzlCLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUIsZUFBZTtZQUNmLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7YUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFDO1lBQ2pDLDBCQUEwQjtZQUMxQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBRXBDLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO2FBQU0sSUFBSSxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNsQywrQkFBK0I7WUFDL0IsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNsQixJQUFJLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUMxQixTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQ3JDO2lCQUFNO2dCQUNILE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLFNBQVMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDakM7WUFDRCxPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUFhO1FBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO1FBQ3RDLE1BQU0sbUJBQW1CLEdBQUksZ0JBQWdCLENBQUM7UUFDOUMsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxlQUFlLENBQUMsR0FBWSxFQUFFLEdBQVk7UUFDN0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLCtCQUErQjtRQUMvQiwyQ0FBMkM7UUFDM0MsSUFBSSxHQUFHLEVBQUU7WUFDTCxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLEdBQUcsRUFBRTtZQUNMLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsR0FBWSxFQUFFLEdBQVk7UUFDaEUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzFELENBQUM7OzRHQTdEUSxlQUFlO2dIQUFmLGVBQWUsY0FGWixNQUFNOzJGQUVULGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHVyYXRpb25TZXJ2aWNlIHtcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIHB1YmxpYyByZXNvbHZlKGlucHV0OiBzdHJpbmcpOiBudW1iZXIgfCBudWxse1xyXG4gICAgICAgIGlmICghaW5wdXQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaW5wdXRTZWdtZW50cyA9IGlucHV0LnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgaWYgKGlucHV0U2VnbWVudHMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAvL2ludmFsaWQgaW5wdXRcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dFNlZ21lbnRzLmxlbmd0aCA9PSAyKXtcclxuICAgICAgICAgICAgLy8gd2UgaGF2ZSBocnMgYW5kIG1pbnV0ZXNcclxuICAgICAgICAgICAgY29uc3QgaHJzID0gcGFyc2VJbnQoaW5wdXRTZWdtZW50c1swXSA/IGlucHV0U2VnbWVudHNbMF0gOiAnMCcpO1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zID0gcGFyc2VJbnQoaW5wdXRTZWdtZW50c1sxXSA/IGlucHV0U2VnbWVudHNbMV0gOiAnMCcpO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbE1pbnMgPSAoaHJzICogNjApICsgbWlucztcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0b3RhbE1pbnM7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dFNlZ21lbnRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIC8vIHRha2UgbGFzdCB0d28gZGlnaXRzIGFzIG1pbnNcclxuICAgICAgICAgICAgY29uc3Qgbm9uU2VwYXJhdGVkID0gaW5wdXRTZWdtZW50c1swXTtcclxuXHJcbiAgICAgICAgICAgIGxldCB0b3RhbE1pbnMgPSAwO1xyXG4gICAgICAgICAgICBpZiAobm9uU2VwYXJhdGVkLmxlbmd0aCA8PSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0b3RhbE1pbnMgPSBwYXJzZUludChub25TZXBhcmF0ZWQpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBub25TZXBhcmF0ZWQubGVuZ3RoIC0gMjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQxID0gbm9uU2VwYXJhdGVkLnNsaWNlKDAsIGxhc3RJbmRleCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0MiA9IG5vblNlcGFyYXRlZC5zbGljZShsYXN0SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHJzID0gcGFyc2VJbnQocGFydDEpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWlucyA9IHBhcnNlSW50KHBhcnQyKTtcclxuICAgICAgICAgICAgICAgIHRvdGFsTWlucyA9IChocnMgKiA2MCkgKyBtaW5zOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0b3RhbE1pbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmFsaWRJbnB1dChpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcmVnZXhOdW1iZXJzT25seSA9IC9eWystXT9cXGQrJC87XHJcbiAgICAgICAgY29uc3QgcmVnZXhDb2xvblNlcGFyYXRlZCA9ICAvXlsrLV0/XFxkKzpcXGQrJC87XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4TnVtYmVyc09ubHkudGVzdChpbnB1dCkgfHwgcmVnZXhDb2xvblNlcGFyYXRlZC50ZXN0KGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGVmYXVsdFZhbHVlKG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gMDtcclxuICAgICAgICAvLyB0cnkga2VlcGluZyB0aGUgMCBhcyBkZWZhdWx0XHJcbiAgICAgICAgLy8gaWYgaXQgaXMgb3V0c2lkZSB0aGUgbWluL21heCB0aGVuIGFkanVzdFxyXG4gICAgICAgIGlmIChtaW4pIHtcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gTWF0aC5tYXgoZGVmYXVsdFZhbHVlLCBtaW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4KSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IE1hdGgubWluKGRlZmF1bHRWYWx1ZSwgbWF4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWYWx1ZVdpdGhpbkxpbWl0cyh2YWx1ZTogbnVtYmVyLCBtaW4/OiBudW1iZXIsIG1heD86IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhKChtaW4gJiYgdmFsdWUgPCBtaW4pIHx8IChtYXggJiYgdmFsdWUgPiBtYXgpKVxyXG4gICAgfSAgXHJcblxyXG59XHJcbiJdfQ==