@fundamental-ngx/core 0.36.2-rc.3 → 0.36.2-rc.4

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.
@@ -73,6 +73,9 @@ export class StepInputComponent {
73
73
  this._value = this._checkValueLimits(value);
74
74
  }
75
75
  this.lastEmittedValue = this._value;
76
+ if (!this._firstEmittedValue && this._value) {
77
+ this._firstEmittedValue = this._value;
78
+ }
76
79
  if (this._numberFormat) {
77
80
  this._updateViewValue();
78
81
  }
@@ -112,17 +115,11 @@ export class StepInputComponent {
112
115
  }
113
116
  /** @hidden */
114
117
  get canIncrement() {
115
- if (this.value == null) {
116
- return false;
117
- }
118
- return this.value + this.step <= this._max;
118
+ return this.value == null || this.value + this.step <= this._max;
119
119
  }
120
120
  /** @hidden */
121
121
  get canDecrement() {
122
- if (this.value == null) {
123
- return false;
124
- }
125
- return this.value - this.step >= this._min;
122
+ return this.value == null || this.value - this.step >= this._min;
126
123
  }
127
124
  /** @hidden */
128
125
  get canDisplayLabel() {
@@ -130,16 +127,31 @@ export class StepInputComponent {
130
127
  }
131
128
  /** Increment input value by step value */
132
129
  increment() {
133
- if (this.canIncrement) {
134
- this._value = this._cutFloatingNumberDistortion(this.value, this.step);
135
- this._emitChangedValue();
136
- this._updateViewValue();
137
- }
130
+ this._incrementOrDecrement('increment');
138
131
  }
139
132
  /** Decrement input value by step value */
140
133
  decrement() {
141
- if (this.canDecrement) {
142
- this._value = this._cutFloatingNumberDistortion(this.value, -this.step);
134
+ this._incrementOrDecrement('decrement');
135
+ }
136
+ /** @hidden */
137
+ _incrementOrDecrement(direction) {
138
+ if ((direction === 'increment' && this.canIncrement) || (direction === 'decrement' && this.canDecrement)) {
139
+ let _shouldChange = true;
140
+ if (this.value == null && this._firstEmittedValue) {
141
+ this._value = this._firstEmittedValue;
142
+ let _limit;
143
+ direction === 'increment' ? (_limit = this.max) : (_limit = this.min);
144
+ if (this._firstEmittedValue === _limit) {
145
+ this._value = _limit;
146
+ _shouldChange = false;
147
+ }
148
+ }
149
+ if (_shouldChange) {
150
+ this._value =
151
+ direction === 'increment'
152
+ ? this._cutFloatingNumberDistortion(this.value, this.step)
153
+ : this._cutFloatingNumberDistortion(this.value, -this.step);
154
+ }
143
155
  this._emitChangedValue();
144
156
  this._updateViewValue();
145
157
  }
@@ -486,4 +498,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
486
498
  type: ViewChild,
487
499
  args: ['inputElement', { read: ElementRef, static: true }]
488
500
  }] } });
489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zdGVwLWlucHV0L3N0ZXAtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc3RlcC1pbnB1dC9zdGVwLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBR1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXRELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoSCxPQUFPLEVBQW1CLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEYsSUFBTyxZQUFZLEdBQUcsSUFBSSxDQUFD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QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUsvQyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLL0MsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgaXNEZXZNb2RlLFxuICAgIExPQ0FMRV9JRCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtU3RhdGVzLCBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgZGVmZXIsIGZyb21FdmVudCwgaW50ZXJ2YWwsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBLZXlVdGlsIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlPYnNlcnZlciwgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgRm9ybUl0ZW1Db250cm9sLCByZWdpc3RlckZvcm1JdGVtQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCBOdW1iZXJGb3JtYXQgPSBJbnRsLk51bWJlckZvcm1hdDtcblxubGV0IHN0ZXBJbnB1dFVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1zdGVwLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3RlcC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU3RlcElucHV0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woU3RlcElucHV0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLXN0ZXAtaW5wdXRfX2NvbnRhaW5lcicsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2hhbmRsZUZvY3VzT3V0KCRldmVudCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1JdGVtQ29udHJvbCB7XG4gICAgLyoqIFNldHMgY29tcGFjdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0PzogYm9vbGVhbjtcblxuICAgIC8qKiBTZXRzIGNvbnRyb2wgaW4gcmVhZG9ubHkgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZG9ubHk6IGJvb2xlYW47XG5cbiAgICAvKiogU2V0cyBjb250cm9sIGluIGRpc2FibGVkIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBTZXRzIGxvY2FsZSB1c2VkIHRvIGZvcm1hdCBudW1lcmljIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBsb2NhbGU6IHN0cmluZztcblxuICAgIC8qKiBTcGVjaWZpZXMgYWxnb3JpdGhtIHVzZWQgdG8gbWF0Y2ggbG9jYWxlLiBDaGVjayBJbnRsLk51bWJlckZvcm1hdCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBsb2NhbGVNYXRjaGVyOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgaWNvbiBkaXNwbGF5ZWQgaW4gSW5jcmVtZW50IEJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jcmVtZW50QnV0dG9uSWNvbiA9ICdhZGQnO1xuXG4gICAgLyoqIFNldHMgaWNvbiBkaXNwbGF5ZWQgaW4gRGVjcmVtZW50IEJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVjcmVtZW50QnV0dG9uSWNvbiA9ICdsZXNzJztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogU2V0cyBJbmNyZW1lbnQgQnV0dG9uIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jcmVtZW50QnV0dG9uVGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogU2V0cyBEZWNyZW1lbnQgQnV0dG9uIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVjcmVtZW50QnV0dG9uVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIGlucHV0IGFyaWEtbGFiZWwgYXR0cmlidXRlICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2V0cyBpbnB1dCBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhIGRlZmluZXMgcm9sZSBkZXNjcmlwdGlvbiBmb3IgdGhlIFN0ZXAgSW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhUm9sZURlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKiogU2V0cyBpbnB1dCBpZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRJZCA9IGBmZC1zdGVwLWlucHV0LSR7c3RlcElucHV0VW5pcXVlSWQrK31gO1xuXG4gICAgLyoqIFNldCBjb250cm9sIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IE51bGxhYmxlPG51bWJlcj4pIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNhc3QgbnVsbCBvciB1bmRlZmluZWQgdG8gXCJudWxsXCJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NoZWNrVmFsdWVMaW1pdHModmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fbnVtYmVyRm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVWaWV3VmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb250cm9sIHZhbHVlICovXG4gICAgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbWluaW11bSB2YWx1ZSBib3VuZGFyeSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWluOiBudW1iZXI7XG5cbiAgICAvKiogU2V0cyBtYXhpbXVtIHZhbHVlIGJvdW5kYXJ5ICovXG4gICAgQElucHV0KClcbiAgICBtYXg6IG51bWJlcjtcblxuICAgIC8qKiBTZXRzIGlucHV0IHN0ZXAgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0ZXAgPSAxO1xuXG4gICAgLyoqIFNldHMgaW5wdXQgbmFtZSBhdHRyaWJ1dGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2V0cyBpbnB1dCB0aXRsZSBhdHRyaWJ1dGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0VGl0bGUgPSAnJztcblxuICAgIC8qKiBTZXRzIGZvcm1hdHRpbmcgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9kZTogJ2RlY2ltYWwnIHwgJ2N1cnJlbmN5JyA9ICdkZWNpbWFsJztcblxuICAgIC8qKiBTZXRzIHN0YXRlIG9mIHRoZSBjb250cm9sLiBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZTogRm9ybVN0YXRlcyA9ICdkZWZhdWx0JztcblxuICAgIC8qKiBIb2xkcyB0aGUgbWVzc2FnZSB3aXRoIHJlc3BlY3QgdG8gc3RhdGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlTWVzc2FnZTogc3RyaW5nIHwgU2FmZUh0bWw7XG5cbiAgICAvKiogQ3VzdG9tIHVuaXQgZGlzcGxheWVkIGFzIGEgbGFiZWwgbmV4dCB0byB0aGUgaW5wdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIHVuaXQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRvIHVzZSBncm91cGluZyB3aGVuIGZvcm1hdHRpbmcgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZUdyb3VwaW5nID0gdHJ1ZTtcblxuICAgIC8qKiBEZWZpbmVzIG1pbmltYWwgbnVtYmVyIG9mIGZyYWN0aW9uYWwgZGlnaXRzIGZvciBjb250cm9sIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBtaW5GcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXG4gICAgLyoqIERlZmluZXMgbWF4aW1hbCBudW1iZXIgb2YgZnJhY3Rpb25hbCBkaWdpdHMgZm9yIGNvbnRyb2wgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG5cbiAgICAvKiogQ3VycmVuY3kgdXNlZCB0byBmb3JtYXQgdmFsdWUuIENoZWNrIEludGwuTnVtYmVyRm9ybWF0IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24qL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVuY3k6IHN0cmluZztcblxuICAgIC8qKiBDdXJyZW5jeSB1c2VkIHRvIGZvcm1hdCB2YWx1ZS4gQ2hlY2sgSW50bC5OdW1iZXJGb3JtYXQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVuY3lEaXNwbGF5OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBTdGVwSW5wdXQgc2hvdWxkIGRpc3BsYXkgSW5jcmVhc2UvRGVjcmVhc2UgYnV0dG9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGFzU3RlcEJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqIEhvcml6b250YWxseSBhbGlnbnMgdmFsdWUgaW5zaWRlIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuICAgIC8qKiBIaW50IGRpc3BsYXllZCBpbnNpZGUgaW5wdXQgYmVmb3JlIHVzZXIgd3JpdGVzIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlciA9ICcnO1xuXG4gICAgLyoqIEVtaXRzIGV2ZW50IHdoZW4gaW5wdXQgZ2V0cyBmb2N1c2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25Gb2N1c0luID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXRzIGV2ZW50IHdoZW4gaW5wdXQgbG9zZXMgZm9jdXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkZvY3VzT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXRzIG5ldyB2YWx1ZSB3aGVuIGNvbnRyb2wgdmFsdWUgaGFzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5jcmVtZW50QnRuJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5jcmVtZW50QnV0dG9uOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGVjcmVtZW50QnRuJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgZGVjcmVtZW50QnV0dG9uOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGxhc3RFbWl0dGVkVmFsdWU6IE51bGxhYmxlPG51bWJlcj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGN1cnJlbmN5U2lnbjogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX251bWVyYWxzOiBSZWdFeHA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlY2ltYWxTZXBhcmF0b3I6IFJlZ0V4cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVuY3k6IFJlZ0V4cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWludXNTaWduOiBSZWdFeHA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dyb3VwU2VwYXJhdG9yOiBSZWdFeHA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX251bWJlckZvcm1hdDogTnVtYmVyRm9ybWF0O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbmRleDogYW55O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGUsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyRm9ybWF0ID0gdGhpcy5fZ2V0TnVtYmVyRm9ybWF0KCk7XG4gICAgICAgIHRoaXMuX2J1aWxkUmVnRXhwcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGRhdGVWaWV3VmFsdWUoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25CdXR0b25zQ2xpY2soKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjYW5JbmNyZW1lbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSArIHRoaXMuc3RlcCA8PSB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuRGVjcmVtZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgPj0gdGhpcy5fbWluO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGNhbkRpc3BsYXlMYWJlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy51bml0IHx8ICEhdGhpcy5jdXJyZW5jeVNpZ247XG4gICAgfVxuXG4gICAgLyoqIEluY3JlbWVudCBpbnB1dCB2YWx1ZSBieSBzdGVwIHZhbHVlICovXG4gICAgaW5jcmVtZW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jYW5JbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fY3V0RmxvYXRpbmdOdW1iZXJEaXN0b3J0aW9uKHRoaXMudmFsdWUhLCB0aGlzLnN0ZXApO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYW5nZWRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGVjcmVtZW50IGlucHV0IHZhbHVlIGJ5IHN0ZXAgdmFsdWUgKi9cbiAgICBkZWNyZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhbkRlY3JlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9jdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24odGhpcy52YWx1ZSEsIC10aGlzLnN0ZXApO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYW5nZWRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbXV0ZUV2ZW50ID0gKGV2bnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBldm50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXZudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5fY2FuQ2hhbmdlVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICAgICAgbXV0ZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50KCk7XG4gICAgICAgICAgICBtdXRlRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVGb2N1c0luKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uRm9jdXNJbi5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVGb2N1c091dChldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkZvY3VzT3V0LmVtaXQoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVNjcm9sbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY2FuQ2hhbmdlVmFsdWUgJiYgdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVsdGFZID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVXBkYXRlcyB2aWV3VmFsdWUgYW5kIGNvbmRpdGlvbmFsbHkgZW1pdHMgbmV3IHZhbHVlLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiAoY2hhbmdlKSBldmVudCwgd2hlbiB1c2VyIGxlYXZlcyBpbnB1dCBjb250cm9sLiAqL1xuICAgIHVwZGF0ZU9uSW5wdXRDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gdGhpcy5sYXN0RW1pdHRlZFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlZFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVHJhY2sgcGFyc2VkIHZhbHVlIHdoZW4gdXNlciBjaGFuZ2VzIHZhbHVlIG9mIHRoZSBpbnB1dCBjb250cm9sLiAqL1xuICAgIHRyYWNrSW5wdXRWYWx1ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy5fcGFyc2VWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcnNlZFZhbHVlICE9IG51bGwgPyB0aGlzLl9jaGVja1ZhbHVlTGltaXRzKHBhcnNlZFZhbHVlKSA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfY2FuQ2hhbmdlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24odmFsdWU6IG51bWJlciwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc3RlcERlY2ltYWxzID0gYCR7c3RlcH1gLnNwbGl0KCcuJylbMV07XG4gICAgICAgIGNvbnN0IHZhbHVlRGVjaW1hbHMgPSBgJHt2YWx1ZX1gLnNwbGl0KCcuJylbMV07XG4gICAgICAgIGNvbnN0IHN0ZXBEZWNpbWFsc0xlbmd0aCA9IHN0ZXBEZWNpbWFscyA/IHN0ZXBEZWNpbWFscy5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCB2YWx1ZURlY2ltYWxzTGVuZ3RoID0gdmFsdWVEZWNpbWFscyA/IHZhbHVlRGVjaW1hbHMubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgbG9uZ2VzdERlY2ltYWwgPSB2YWx1ZURlY2ltYWxzTGVuZ3RoID4gc3RlcERlY2ltYWxzTGVuZ3RoID8gdmFsdWVEZWNpbWFsc0xlbmd0aCA6IHN0ZXBEZWNpbWFsc0xlbmd0aDtcblxuICAgICAgICByZXR1cm4gTnVtYmVyKCh2YWx1ZSArIHN0ZXApLnRvRml4ZWQobG9uZ2VzdERlY2ltYWwpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrVmFsdWVMaW1pdHModmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh2YWx1ZSA+IHRoaXMuX21heCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPCB0aGlzLl9taW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUudG9GaXhlZCh0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUudG9GaXhlZCh0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX21heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHRoaXMubWF4KSA/IHRoaXMubWF4IDogTnVtYmVyLk1BWF9WQUxVRTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9taW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICFpc05hTih0aGlzLm1pbikgPyB0aGlzLm1pbiA6IC1OdW1iZXIuTUFYX1ZBTFVFO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlVmlld1ZhbHVlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Zvcm1hdFRvVmlld1ZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25CdXR0b25zQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1N0ZXBCdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR1cEJ1dHRvbkxpc3RlbmVyKHRoaXMuaW5jcmVtZW50QnV0dG9uKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwQnV0dG9uTGlzdGVuZXIodGhpcy5kZWNyZW1lbnRCdXR0b24pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0ZW5zIGZvciBjbGljayBvciBzcGFjZS9lbnRlciBrZXlkb3duIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEZvciBsb25nIGNsaWNrcyB3aWxsIGNvbnRpbnVvdXNseSBlbWl0IGV2ZW50IHVudGlsIFwibW91c2V1cFwiIGV2ZW50IGlzIGRldGVjdGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0dXBCdXR0b25MaXN0ZW5lcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgb25Nb3VzZURvd24kID0gZnJvbUV2ZW50KGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpO1xuICAgICAgICBjb25zdCBvbk1vdXNlVXAkID0gZnJvbUV2ZW50KHdpbmRvdywgJ21vdXNldXAnKTtcbiAgICAgICAgY29uc3Qgb25LZXlEb3duJCA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJykucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbU1BBQ0UsIEVOVEVSXSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdGltZXJGYWN0b3J5JCA9IGRlZmVyKCgpID0+XG4gICAgICAgICAgICB0aW1lcig1MDApLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKDQwKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKG9uTW91c2VVcCQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgb25Nb3VzZURvd24kLFxuICAgICAgICAgICAgb25Nb3VzZURvd24kLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRpbWVyRmFjdG9yeSQpKSxcbiAgICAgICAgICAgIC8vIHdoaWxlIGtleSBpcyBwcmVzc2VkLCBldmVudCB3aWxsIGJlIGVtaXR0ZWQgY29udGludW91c2x5LCBzbyB0aGVyZSdzIG5vIG5lZWQgZm9yIHRpbWVyRmFjdG9yeSRcbiAgICAgICAgICAgIG9uS2V5RG93biRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcnNlVmFsdWUodGV4dDogc3RyaW5nKTogTnVsbGFibGU8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRUZXh0ID0gdGV4dC50cmltKCk7XG5cbiAgICAgICAgaWYgKHRyaW1tZWRUZXh0ID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZFRleHQgPSB0cmltbWVkVGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xccy9nLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2N1cnJlbmN5LCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2dyb3VwU2VwYXJhdG9yLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX21pbnVzU2lnbiwgJy0nKVxuICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fZGVjaW1hbFNlcGFyYXRvciwgJy4nKVxuICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fbnVtZXJhbHMsIHRoaXMuX2luZGV4KTtcblxuICAgICAgICBpZiAoZmlsdGVyZWRUZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IE51bWJlcihmaWx0ZXJlZFRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHBhcnNlZFZhbHVlKSA/IHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA6IHBhcnNlZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROdW1iZXJGb3JtYXQoKTogTnVtYmVyRm9ybWF0IHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIHRoaXMubWluRnJhY3Rpb25EaWdpdHMgPiB0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSYW5nZSBlcnJvciAtIG1pbkZyYWN0aW9uRGlnaXRzIGNhbid0IGJlIGJpZ2dlciB0aGFuIG1heEZyYWN0aW9uRGlnaXRzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgIGxvY2FsZU1hdGNoZXI6IHRoaXMubG9jYWxlTWF0Y2hlciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5tb2RlLFxuICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3ksXG4gICAgICAgICAgICAvLyBvbmx5IGF2YWlsYWJsZSBpbiBFUzIwMjAgYW5kIGxhdGVyXG4gICAgICAgICAgICBbJ2N1cnJlbmN5RGlzcGxheScgYXMgYW55XTogdGhpcy5jdXJyZW5jeURpc3BsYXksXG4gICAgICAgICAgICB1c2VHcm91cGluZzogdGhpcy51c2VHcm91cGluZyxcbiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyxcbiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5tYXhGcmFjdGlvbkRpZ2l0c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE51bWVyYWxzRXhwcmVzc2lvbnMoKTogUmVnRXhwIHtcbiAgICAgICAgY29uc3QgbnVtZXJhbHMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7IHVzZUdyb3VwaW5nOiBmYWxzZSB9KS5mb3JtYXQoOTg3NjU0MzIxMCkuc3BsaXQoJycpXG4gICAgICAgIF0ucmV2ZXJzZSgpO1xuICAgICAgICBjb25zdCBpbmRleCA9IG5ldyBNYXAobnVtZXJhbHMubWFwKChkLCBpKSA9PiBbZCwgaV0pKTtcbiAgICAgICAgdGhpcy5faW5kZXggPSAoZCkgPT4gaW5kZXguZ2V0KGQpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBbJHtudW1lcmFscy5qb2luKCcnKX1dYCwgJ2cnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERlY2ltYWxTZXBhcmF0b3IoKTogUmVnRXhwIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IE51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSwgeyB1c2VHcm91cGluZzogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBbJHtmb3JtYXR0ZXIuZm9ybWF0KDEuMSkudHJpbSgpLnJlcGxhY2UodGhpcy5fbnVtZXJhbHMsICcnKX1dYCwgJ2cnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEdyb3VwaW5nU2VwYXJhdG9yKCk6IFJlZ0V4cCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHsgdXNlR3JvdXBpbmc6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBbJHtmb3JtYXR0ZXIuZm9ybWF0KDEwMDApLnRyaW0oKS5yZXBsYWNlKHRoaXMuX251bWVyYWxzLCAnJyl9XWAsICdnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRNaW51c1NpZ25FeHByZXNzaW9uKCk6IFJlZ0V4cCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHsgdXNlR3JvdXBpbmc6IGZhbHNlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7Zm9ybWF0dGVyLmZvcm1hdCgtMSkudHJpbSgpLnJlcGxhY2UodGhpcy5fbnVtZXJhbHMsICcnKX1dYCwgJ2cnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEN1cnJlbmN5RXhwcmVzc2lvbigpOiBSZWdFeHAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW5jeSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IE51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgIC8vIG9ubHkgYXZhaWxhYmxlIGluIEVTMjAyMCBhbmQgbGF0ZXJcbiAgICAgICAgICAgICAgICBbJ2N1cnJlbmN5RGlzcGxheScgYXMgYW55XTogdGhpcy5jdXJyZW5jeURpc3BsYXlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeVNpZ24gPSBgJHtmb3JtYXR0ZXJcbiAgICAgICAgICAgICAgICAuZm9ybWF0KDEpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xccy9nLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSh0aGlzLl9udW1lcmFscywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fZGVjaW1hbFNlcGFyYXRvciwgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fZ3JvdXBTZXBhcmF0b3IsICcnKX1gO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7dGhpcy5jdXJyZW5jeVNpZ259XWAsICdnJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgW11gLCAnZycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYnVpbGRSZWdFeHBzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9udW1lcmFscyA9IHRoaXMuX2dldE51bWVyYWxzRXhwcmVzc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fZGVjaW1hbFNlcGFyYXRvciA9IHRoaXMuX2dldERlY2ltYWxTZXBhcmF0b3IoKTtcbiAgICAgICAgdGhpcy5fbWludXNTaWduID0gdGhpcy5fZ2V0TWludXNTaWduRXhwcmVzc2lvbigpO1xuICAgICAgICB0aGlzLl9ncm91cFNlcGFyYXRvciA9IHRoaXMuX2dldEdyb3VwaW5nU2VwYXJhdG9yKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5ID0gdGhpcy5fZ2V0Q3VycmVuY3lFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtYXRUb1ZpZXdWYWx1ZShudW1iZXI6IE51bGxhYmxlPG51bWJlcj4pOiBzdHJpbmcge1xuICAgICAgICBpZiAobnVtYmVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9udW1iZXJGb3JtYXQuZm9ybWF0KG51bWJlcikucmVwbGFjZSh0aGlzLl9jdXJyZW5jeSwgJycpXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9udW1iZXJGb3JtYXQuZm9ybWF0KG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1zdGVwLWlucHV0XCJcbiAgICAgICAgW2NsYXNzXT1cInN0YXRlID8gJ2lzLScgKyBzdGF0ZSA6ICcnXCJcbiAgICAgICAgW2NsYXNzLmlzLWZvY3VzXT1cImZvY3VzZWRcIlxuICAgICAgICBbY2xhc3MuaXMtcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY2xhc3MuZmQtc3RlcC1pbnB1dC0tY29tcGFjdF09XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3RcIlxuICAgICAgICBbY2xhc3MuZmQtc3RlcC1pbnB1dC0td2l0aG91dC1idXR0b25zXT1cIiFoYXNTdGVwQnV0dG9uc1wiXG4gICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImhhc1N0ZXBCdXR0b25zXCJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgI2RlY3JlbWVudEJ0blxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1zdGVwLWlucHV0X19idXR0b25cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRGVjcmVtZW50XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJkZWNyZW1lbnRCdXR0b25UaXRsZSB8fCAoJ2NvcmVTdGVwSW5wdXQuZGVjcmVtZW50QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJkZWNyZW1lbnRCdXR0b25JY29uXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGVjcmVtZW50QnV0dG9uVGl0bGUgfHwgKCdjb3JlU3RlcElucHV0LmRlY3JlbWVudEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlucHV0SWRcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2lucHV0RWxlbWVudFxuICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaW5wdXRUaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtaW5wdXQtLWNvbXBhY3RdPVwiX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb21wYWN0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInZhbHVlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwibWluXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiY2FuRGlzcGxheUxhYmVsID8gaW5wdXRJZCArICdfX2Rlc2NyaXB0aW9uJyA6ICcnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb25dPVwiYXJpYVJvbGVEZXNjcmlwdGlvbiB8fCAoJ2NvcmVTdGVwSW5wdXQuYXJpYVJvbGVEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgKGZvY3VzaW4pPVwiaGFuZGxlRm9jdXNJbigpXCJcbiAgICAgICAgICAgICh3aGVlbCk9XCJoYW5kbGVTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGlucHV0KT1cInRyYWNrSW5wdXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlT25JbnB1dENoYW5nZWQoKVwiXG4gICAgICAgICAgICBbc3R5bGUudGV4dEFsaWduXT1cInRleHRBbGlnblwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0IGZkLWlucHV0LS1uby1udW1iZXItc3Bpbm5lciBmZC1zdGVwLWlucHV0X19pbnB1dFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBpbnB1dG1vZGU9XCJudW1lcmljXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJoYXNTdGVwQnV0dG9uc1wiXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICNpbmNyZW1lbnRCdG5cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtc3RlcC1pbnB1dF9fYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkluY3JlbWVudFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaW5jcmVtZW50QnV0dG9uVGl0bGUgfHwgKCdjb3JlU3RlcElucHV0LmluY3JlbWVudEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbZ2x5cGhdPVwiaW5jcmVtZW50QnV0dG9uSWNvblwiXG4gICAgICAgICAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImluY3JlbWVudEJ1dHRvblRpdGxlIHx8ICgnY29yZVN0ZXBJbnB1dC5pbmNyZW1lbnRCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpbnB1dElkXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGZkLWZvcm0tbWVzc2FnZSAqbmdJZj1cIiEhc3RhdGVNZXNzYWdlXCIgW3R5cGVdPVwic3RhdGVcIiBbaW5uZXJIVE1MXT1cInN0YXRlTWVzc2FnZVwiPjwvZmQtZm9ybS1tZXNzYWdlPlxuPC9mZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXA+XG5cbjxzcGFuICpuZ0lmPVwiY2FuRGlzcGxheUxhYmVsXCIgW2lkXT1cImlucHV0SWQgKyAnX19kZXNjcmlwdGlvbidcIiBjbGFzcz1cImZkLWZvcm0tbGFiZWwgZmQtZm9ybS1sYWJlbC0tdW5pdC1kZXNjcmlwdGlvblwiPlxuICAgIHt7IHVuaXQgfHwgY3VycmVuY3lTaWduIH19XG48L3NwYW4+XG4iXX0=
501
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zdGVwLWlucHV0L3N0ZXAtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc3RlcC1pbnB1dC9zdGVwLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBR1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXRELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoSCxPQUFPLEVBQW1CLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEYsSUFBTyxZQUFZLEdBQUcsSUFBSSxDQUFD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QVM7c0JBRFIsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFLRixLQUFLO3NCQURSLEtBQUs7Z0JBeUJOLEdBQUc7c0JBREYsS0FBSztnQkFLTixHQUFHO3NCQURGLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7O1FBS04sK0RBQStEO1FBQy9ELFNBQVM7c0JBRlIsTUFBTTs7UUFNUCwrREFBK0Q7UUFDL0QsVUFBVTtzQkFGVCxNQUFNO2dCQU1QLFdBQVc7c0JBRFYsTUFBTTtnQkFLUCxlQUFlO3NCQURkLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLL0MsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSy9DLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIGlzRGV2TW9kZSxcbiAgICBMT0NBTEVfSUQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybVN0YXRlcywgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IGRlZmVyLCBmcm9tRXZlbnQsIGludGVydmFsLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERPV05fQVJST1csIEVOVEVSLCBTUEFDRSwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5pbXBvcnQgeyBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEZvcm1JdGVtQ29udHJvbCwgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgTnVtYmVyRm9ybWF0ID0gSW50bC5OdW1iZXJGb3JtYXQ7XG5cbmxldCBzdGVwSW5wdXRVbmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtc3RlcC1pbnB1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0ZXAtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN0ZXBJbnB1dENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCksXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKFN0ZXBJbnB1dENvbXBvbmVudClcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZC1zdGVwLWlucHV0X19jb250YWluZXInLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdoYW5kbGVGb2N1c091dCgkZXZlbnQpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtSXRlbUNvbnRyb2wge1xuICAgIC8qKiBTZXRzIGNvbXBhY3QgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29tcGFjdD86IGJvb2xlYW47XG5cbiAgICAvKiogU2V0cyBjb250cm9sIGluIHJlYWRvbmx5IG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRvbmx5OiBib29sZWFuO1xuXG4gICAgLyoqIFNldHMgY29udHJvbCBpbiBkaXNhYmxlZCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogU2V0cyBsb2NhbGUgdXNlZCB0byBmb3JtYXQgbnVtZXJpYyB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9jYWxlOiBzdHJpbmc7XG5cbiAgICAvKiogU3BlY2lmaWVzIGFsZ29yaXRobSB1c2VkIHRvIG1hdGNoIGxvY2FsZS4gQ2hlY2sgSW50bC5OdW1iZXJGb3JtYXQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9jYWxlTWF0Y2hlcjogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBTZXRzIGljb24gZGlzcGxheWVkIGluIEluY3JlbWVudCBCdXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIGluY3JlbWVudEJ1dHRvbkljb24gPSAnYWRkJztcblxuICAgIC8qKiBTZXRzIGljb24gZGlzcGxheWVkIGluIERlY3JlbWVudCBCdXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIGRlY3JlbWVudEJ1dHRvbkljb24gPSAnbGVzcyc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFNldHMgSW5jcmVtZW50IEJ1dHRvbiB0aXRsZSBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluY3JlbWVudEJ1dHRvblRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFNldHMgRGVjcmVtZW50IEJ1dHRvbiB0aXRsZSBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRlY3JlbWVudEJ1dHRvblRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogU2V0cyBpbnB1dCBhcmlhLWxhYmVsIGF0dHJpYnV0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgaW5wdXQgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQXJpYSBkZWZpbmVzIHJvbGUgZGVzY3JpcHRpb24gZm9yIHRoZSBTdGVwIElucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgaW5wdXQgaWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQgPSBgZmQtc3RlcC1pbnB1dC0ke3N0ZXBJbnB1dFVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBTZXQgY29udHJvbCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBjYXN0IG51bGwgb3IgdW5kZWZpbmVkIHRvIFwibnVsbFwiXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9jaGVja1ZhbHVlTGltaXRzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLl9maXJzdEVtaXR0ZWRWYWx1ZSAmJiB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZmlyc3RFbWl0dGVkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbnVtYmVyRm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVWaWV3VmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb250cm9sIHZhbHVlICovXG4gICAgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbWluaW11bSB2YWx1ZSBib3VuZGFyeSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWluOiBudW1iZXI7XG5cbiAgICAvKiogU2V0cyBtYXhpbXVtIHZhbHVlIGJvdW5kYXJ5ICovXG4gICAgQElucHV0KClcbiAgICBtYXg6IG51bWJlcjtcblxuICAgIC8qKiBTZXRzIGlucHV0IHN0ZXAgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0ZXAgPSAxO1xuXG4gICAgLyoqIFNldHMgaW5wdXQgbmFtZSBhdHRyaWJ1dGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2V0cyBpbnB1dCB0aXRsZSBhdHRyaWJ1dGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0VGl0bGUgPSAnJztcblxuICAgIC8qKiBTZXRzIGZvcm1hdHRpbmcgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9kZTogJ2RlY2ltYWwnIHwgJ2N1cnJlbmN5JyA9ICdkZWNpbWFsJztcblxuICAgIC8qKiBTZXRzIHN0YXRlIG9mIHRoZSBjb250cm9sLiBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZTogRm9ybVN0YXRlcyA9ICdkZWZhdWx0JztcblxuICAgIC8qKiBIb2xkcyB0aGUgbWVzc2FnZSB3aXRoIHJlc3BlY3QgdG8gc3RhdGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlTWVzc2FnZTogc3RyaW5nIHwgU2FmZUh0bWw7XG5cbiAgICAvKiogQ3VzdG9tIHVuaXQgZGlzcGxheWVkIGFzIGEgbGFiZWwgbmV4dCB0byB0aGUgaW5wdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIHVuaXQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRvIHVzZSBncm91cGluZyB3aGVuIGZvcm1hdHRpbmcgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZUdyb3VwaW5nID0gdHJ1ZTtcblxuICAgIC8qKiBEZWZpbmVzIG1pbmltYWwgbnVtYmVyIG9mIGZyYWN0aW9uYWwgZGlnaXRzIGZvciBjb250cm9sIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBtaW5GcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXG4gICAgLyoqIERlZmluZXMgbWF4aW1hbCBudW1iZXIgb2YgZnJhY3Rpb25hbCBkaWdpdHMgZm9yIGNvbnRyb2wgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG5cbiAgICAvKiogQ3VycmVuY3kgdXNlZCB0byBmb3JtYXQgdmFsdWUuIENoZWNrIEludGwuTnVtYmVyRm9ybWF0IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24qL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVuY3k6IHN0cmluZztcblxuICAgIC8qKiBDdXJyZW5jeSB1c2VkIHRvIGZvcm1hdCB2YWx1ZS4gQ2hlY2sgSW50bC5OdW1iZXJGb3JtYXQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVuY3lEaXNwbGF5OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBTdGVwSW5wdXQgc2hvdWxkIGRpc3BsYXkgSW5jcmVhc2UvRGVjcmVhc2UgYnV0dG9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGFzU3RlcEJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqIEhvcml6b250YWxseSBhbGlnbnMgdmFsdWUgaW5zaWRlIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuICAgIC8qKiBIaW50IGRpc3BsYXllZCBpbnNpZGUgaW5wdXQgYmVmb3JlIHVzZXIgd3JpdGVzIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlciA9ICcnO1xuXG4gICAgLyoqIEVtaXRzIGV2ZW50IHdoZW4gaW5wdXQgZ2V0cyBmb2N1c2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25Gb2N1c0luID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXRzIGV2ZW50IHdoZW4gaW5wdXQgbG9zZXMgZm9jdXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkZvY3VzT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXRzIG5ldyB2YWx1ZSB3aGVuIGNvbnRyb2wgdmFsdWUgaGFzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5jcmVtZW50QnRuJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5jcmVtZW50QnV0dG9uOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGVjcmVtZW50QnRuJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgZGVjcmVtZW50QnV0dG9uOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGxhc3RFbWl0dGVkVmFsdWU6IE51bGxhYmxlPG51bWJlcj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGN1cnJlbmN5U2lnbjogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX251bWVyYWxzOiBSZWdFeHA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlY2ltYWxTZXBhcmF0b3I6IFJlZ0V4cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVuY3k6IFJlZ0V4cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWludXNTaWduOiBSZWdFeHA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dyb3VwU2VwYXJhdG9yOiBSZWdFeHA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX251bWJlckZvcm1hdDogTnVtYmVyRm9ybWF0O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbmRleDogYW55O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maXJzdEVtaXR0ZWRWYWx1ZTogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGUsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyRm9ybWF0ID0gdGhpcy5fZ2V0TnVtYmVyRm9ybWF0KCk7XG4gICAgICAgIHRoaXMuX2J1aWxkUmVnRXhwcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGRhdGVWaWV3VmFsdWUoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25CdXR0b25zQ2xpY2soKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjYW5JbmNyZW1lbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID09IG51bGwgfHwgdGhpcy52YWx1ZSArIHRoaXMuc3RlcCA8PSB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuRGVjcmVtZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PSBudWxsIHx8IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgPj0gdGhpcy5fbWluO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGNhbkRpc3BsYXlMYWJlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy51bml0IHx8ICEhdGhpcy5jdXJyZW5jeVNpZ247XG4gICAgfVxuXG4gICAgLyoqIEluY3JlbWVudCBpbnB1dCB2YWx1ZSBieSBzdGVwIHZhbHVlICovXG4gICAgaW5jcmVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudCgnaW5jcmVtZW50Jyk7XG4gICAgfVxuXG4gICAgLyoqIERlY3JlbWVudCBpbnB1dCB2YWx1ZSBieSBzdGVwIHZhbHVlICovXG4gICAgZGVjcmVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudCgnZGVjcmVtZW50Jyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbmNyZW1lbnRPckRlY3JlbWVudChkaXJlY3Rpb246ICdpbmNyZW1lbnQnIHwgJ2RlY3JlbWVudCcpOiB2b2lkIHtcbiAgICAgICAgaWYgKChkaXJlY3Rpb24gPT09ICdpbmNyZW1lbnQnICYmIHRoaXMuY2FuSW5jcmVtZW50KSB8fCAoZGlyZWN0aW9uID09PSAnZGVjcmVtZW50JyAmJiB0aGlzLmNhbkRlY3JlbWVudCkpIHtcbiAgICAgICAgICAgIGxldCBfc2hvdWxkQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgJiYgdGhpcy5fZmlyc3RFbWl0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2ZpcnN0RW1pdHRlZFZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBfbGltaXQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09ICdpbmNyZW1lbnQnID8gKF9saW1pdCA9IHRoaXMubWF4KSA6IChfbGltaXQgPSB0aGlzLm1pbik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpcnN0RW1pdHRlZFZhbHVlID09PSBfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfbGltaXQ7XG4gICAgICAgICAgICAgICAgICAgIF9zaG91bGRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3Nob3VsZENoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSAnaW5jcmVtZW50J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24odGhpcy52YWx1ZSEsIHRoaXMuc3RlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fY3V0RmxvYXRpbmdOdW1iZXJEaXN0b3J0aW9uKHRoaXMudmFsdWUhLCAtdGhpcy5zdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG11dGVFdmVudCA9IChldm50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZXZudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2bnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NhbkNoYW5nZVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgdGhpcy5pbmNyZW1lbnQoKTtcbiAgICAgICAgICAgIG11dGVFdmVudChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICAgICAgbXV0ZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRm9jdXNJbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbkZvY3VzSW4uZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Gb2N1c091dC5lbWl0KCk7XG4gICAgICAgIGlmICghdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVTY3JvbGwoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhbkNoYW5nZVZhbHVlICYmIHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRlbHRhWSA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFVwZGF0ZXMgdmlld1ZhbHVlIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIG5ldyB2YWx1ZS5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gKGNoYW5nZSkgZXZlbnQsIHdoZW4gdXNlciBsZWF2ZXMgaW5wdXQgY29udHJvbC4gKi9cbiAgICB1cGRhdGVPbklucHV0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYW5nZWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFRyYWNrIHBhcnNlZCB2YWx1ZSB3aGVuIHVzZXIgY2hhbmdlcyB2YWx1ZSBvZiB0aGUgaW5wdXQgY29udHJvbC4gKi9cbiAgICB0cmFja0lucHV0VmFsdWUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMuX3BhcnNlVmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJzZWRWYWx1ZSAhPSBudWxsID8gdGhpcy5fY2hlY2tWYWx1ZUxpbWl0cyhwYXJzZWRWYWx1ZSkgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX2NhbkNoYW5nZVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3V0RmxvYXRpbmdOdW1iZXJEaXN0b3J0aW9uKHZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHN0ZXBEZWNpbWFscyA9IGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdO1xuICAgICAgICBjb25zdCB2YWx1ZURlY2ltYWxzID0gYCR7dmFsdWV9YC5zcGxpdCgnLicpWzFdO1xuICAgICAgICBjb25zdCBzdGVwRGVjaW1hbHNMZW5ndGggPSBzdGVwRGVjaW1hbHMgPyBzdGVwRGVjaW1hbHMubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgdmFsdWVEZWNpbWFsc0xlbmd0aCA9IHZhbHVlRGVjaW1hbHMgPyB2YWx1ZURlY2ltYWxzLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IGxvbmdlc3REZWNpbWFsID0gdmFsdWVEZWNpbWFsc0xlbmd0aCA+IHN0ZXBEZWNpbWFsc0xlbmd0aCA/IHZhbHVlRGVjaW1hbHNMZW5ndGggOiBzdGVwRGVjaW1hbHNMZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIE51bWJlcigodmFsdWUgKyBzdGVwKS50b0ZpeGVkKGxvbmdlc3REZWNpbWFsKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja1ZhbHVlTGltaXRzKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIDwgdGhpcy5fbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5tYXhGcmFjdGlvbkRpZ2l0cykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnRvRml4ZWQodGhpcy5tYXhGcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5taW5GcmFjdGlvbkRpZ2l0cykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnRvRml4ZWQodGhpcy5taW5GcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VtaXRDaGFuZ2VkVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9tYXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICFpc05hTih0aGlzLm1heCkgPyB0aGlzLm1heCA6IE51bWJlci5NQVhfVkFMVUU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAhaXNOYU4odGhpcy5taW4pID8gdGhpcy5taW4gOiAtTnVtYmVyLk1BWF9WQUxVRTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZVZpZXdWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9mb3JtYXRUb1ZpZXdWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uQnV0dG9uc0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNTdGVwQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBCdXR0b25MaXN0ZW5lcih0aGlzLmluY3JlbWVudEJ1dHRvbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmNyZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR1cEJ1dHRvbkxpc3RlbmVyKHRoaXMuZGVjcmVtZW50QnV0dG9uKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdGVucyBmb3IgY2xpY2sgb3Igc3BhY2UvZW50ZXIga2V5ZG93biBldmVudHMuXG4gICAgICpcbiAgICAgKiBGb3IgbG9uZyBjbGlja3Mgd2lsbCBjb250aW51b3VzbHkgZW1pdCBldmVudCB1bnRpbCBcIm1vdXNldXBcIiBldmVudCBpcyBkZXRlY3RlZFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldHVwQnV0dG9uTGlzdGVuZXIoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IG9uTW91c2VEb3duJCA9IGZyb21FdmVudChlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKTtcbiAgICAgICAgY29uc3Qgb25Nb3VzZVVwJCA9IGZyb21FdmVudCh3aW5kb3csICdtb3VzZXVwJyk7XG4gICAgICAgIGNvbnN0IG9uS2V5RG93biQgPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW1NQQUNFLCBFTlRFUl0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRpbWVyRmFjdG9yeSQgPSBkZWZlcigoKSA9PlxuICAgICAgICAgICAgdGltZXIoNTAwKS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBpbnRlcnZhbCg0MCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbChvbk1vdXNlVXAkKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBtZXJnZShcbiAgICAgICAgICAgIG9uTW91c2VEb3duJCxcbiAgICAgICAgICAgIG9uTW91c2VEb3duJC5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aW1lckZhY3RvcnkkKSksXG4gICAgICAgICAgICAvLyB3aGlsZSBrZXkgaXMgcHJlc3NlZCwgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIGNvbnRpbnVvdXNseSwgc28gdGhlcmUncyBubyBuZWVkIGZvciB0aW1lckZhY3RvcnkkXG4gICAgICAgICAgICBvbktleURvd24kXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wYXJzZVZhbHVlKHRleHQ6IHN0cmluZyk6IE51bGxhYmxlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCB0cmltbWVkVGV4dCA9IHRleHQudHJpbSgpO1xuXG4gICAgICAgIGlmICh0cmltbWVkVGV4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyZWRUZXh0ID0gdHJpbW1lZFRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLl9jdXJyZW5jeSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLl9ncm91cFNlcGFyYXRvciwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLl9taW51c1NpZ24sICctJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IsICcuJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX251bWVyYWxzLCB0aGlzLl9pbmRleCk7XG5cbiAgICAgICAgaWYgKGZpbHRlcmVkVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBOdW1iZXIoZmlsdGVyZWRUZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBpc05hTihwYXJzZWRWYWx1ZSkgPyB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgOiBwYXJzZWRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0TnVtYmVyRm9ybWF0KCk6IE51bWJlckZvcm1hdCB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzID4gdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmFuZ2UgZXJyb3IgLSBtaW5GcmFjdGlvbkRpZ2l0cyBjYW4ndCBiZSBiaWdnZXIgdGhhbiBtYXhGcmFjdGlvbkRpZ2l0c1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7XG4gICAgICAgICAgICBsb2NhbGVNYXRjaGVyOiB0aGlzLmxvY2FsZU1hdGNoZXIgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMubW9kZSxcbiAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5LFxuICAgICAgICAgICAgLy8gb25seSBhdmFpbGFibGUgaW4gRVMyMDIwIGFuZCBsYXRlclxuICAgICAgICAgICAgWydjdXJyZW5jeURpc3BsYXknIGFzIGFueV06IHRoaXMuY3VycmVuY3lEaXNwbGF5LFxuICAgICAgICAgICAgdXNlR3JvdXBpbmc6IHRoaXMudXNlR3JvdXBpbmcsXG4gICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWluRnJhY3Rpb25EaWdpdHMsXG4gICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWF4RnJhY3Rpb25EaWdpdHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROdW1lcmFsc0V4cHJlc3Npb25zKCk6IFJlZ0V4cCB7XG4gICAgICAgIGNvbnN0IG51bWVyYWxzID0gW1xuICAgICAgICAgICAgLi4ubmV3IE51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSwgeyB1c2VHcm91cGluZzogZmFsc2UgfSkuZm9ybWF0KDk4NzY1NDMyMTApLnNwbGl0KCcnKVxuICAgICAgICBdLnJldmVyc2UoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBuZXcgTWFwKG51bWVyYWxzLm1hcCgoZCwgaSkgPT4gW2QsIGldKSk7XG4gICAgICAgIHRoaXMuX2luZGV4ID0gKGQpID0+IGluZGV4LmdldChkKTtcblxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7bnVtZXJhbHMuam9pbignJyl9XWAsICdnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXREZWNpbWFsU2VwYXJhdG9yKCk6IFJlZ0V4cCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHsgdXNlR3JvdXBpbmc6IGZhbHNlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7Zm9ybWF0dGVyLmZvcm1hdCgxLjEpLnRyaW0oKS5yZXBsYWNlKHRoaXMuX251bWVyYWxzLCAnJyl9XWAsICdnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRHcm91cGluZ1NlcGFyYXRvcigpOiBSZWdFeHAge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7IHVzZUdyb3VwaW5nOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7Zm9ybWF0dGVyLmZvcm1hdCgxMDAwKS50cmltKCkucmVwbGFjZSh0aGlzLl9udW1lcmFscywgJycpfV1gLCAnZycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0TWludXNTaWduRXhwcmVzc2lvbigpOiBSZWdFeHAge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7IHVzZUdyb3VwaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYFske2Zvcm1hdHRlci5mb3JtYXQoLTEpLnRyaW0oKS5yZXBsYWNlKHRoaXMuX251bWVyYWxzLCAnJyl9XWAsICdnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRDdXJyZW5jeUV4cHJlc3Npb24oKTogUmVnRXhwIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICAvLyBvbmx5IGF2YWlsYWJsZSBpbiBFUzIwMjAgYW5kIGxhdGVyXG4gICAgICAgICAgICAgICAgWydjdXJyZW5jeURpc3BsYXknIGFzIGFueV06IHRoaXMuY3VycmVuY3lEaXNwbGF5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3lTaWduID0gYCR7Zm9ybWF0dGVyXG4gICAgICAgICAgICAgICAgLmZvcm1hdCgxKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fbnVtZXJhbHMsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2dyb3VwU2VwYXJhdG9yLCAnJyl9YDtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYFske3RoaXMuY3VycmVuY3lTaWdufV1gLCAnZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYFtdYCwgJ2cnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2J1aWxkUmVnRXhwcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbnVtZXJhbHMgPSB0aGlzLl9nZXROdW1lcmFsc0V4cHJlc3Npb25zKCk7XG4gICAgICAgIHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IgPSB0aGlzLl9nZXREZWNpbWFsU2VwYXJhdG9yKCk7XG4gICAgICAgIHRoaXMuX21pbnVzU2lnbiA9IHRoaXMuX2dldE1pbnVzU2lnbkV4cHJlc3Npb24oKTtcbiAgICAgICAgdGhpcy5fZ3JvdXBTZXBhcmF0b3IgPSB0aGlzLl9nZXRHcm91cGluZ1NlcGFyYXRvcigpO1xuICAgICAgICB0aGlzLl9jdXJyZW5jeSA9IHRoaXMuX2dldEN1cnJlbmN5RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0VG9WaWV3VmFsdWUobnVtYmVyOiBOdWxsYWJsZTxudW1iZXI+KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKG51bWJlciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbnVtYmVyRm9ybWF0LmZvcm1hdChudW1iZXIpLnJlcGxhY2UodGhpcy5fY3VycmVuY3ksICcnKVxuICAgICAgICAgICAgICAgIDogdGhpcy5fbnVtYmVyRm9ybWF0LmZvcm1hdChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtc3RlcC1pbnB1dFwiXG4gICAgICAgIFtjbGFzc109XCJzdGF0ZSA/ICdpcy0nICsgc3RhdGUgOiAnJ1wiXG4gICAgICAgIFtjbGFzcy5pcy1mb2N1c109XCJmb2N1c2VkXCJcbiAgICAgICAgW2NsYXNzLmlzLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2NsYXNzLmlzLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzLmZkLXN0ZXAtaW5wdXQtLWNvbXBhY3RdPVwiX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb21wYWN0XCJcbiAgICAgICAgW2NsYXNzLmZkLXN0ZXAtaW5wdXQtLXdpdGhvdXQtYnV0dG9uc109XCIhaGFzU3RlcEJ1dHRvbnNcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJoYXNTdGVwQnV0dG9uc1wiXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICNkZWNyZW1lbnRCdG5cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtc3RlcC1pbnB1dF9fYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkRlY3JlbWVudFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiZGVjcmVtZW50QnV0dG9uVGl0bGUgfHwgKCdjb3JlU3RlcElucHV0LmRlY3JlbWVudEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbZ2x5cGhdPVwiZGVjcmVtZW50QnV0dG9uSWNvblwiXG4gICAgICAgICAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRlY3JlbWVudEJ1dHRvblRpdGxlIHx8ICgnY29yZVN0ZXBJbnB1dC5kZWNyZW1lbnRCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpbnB1dElkXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dEVsZW1lbnRcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImlucHV0VGl0bGVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLWlucHV0LS1jb21wYWN0XT1cIl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ29tcGFjdFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIm1heFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIm1pblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNhbkRpc3BsYXlMYWJlbCA/IGlucHV0SWQgKyAnX19kZXNjcmlwdGlvbicgOiAnJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cImFyaWFSb2xlRGVzY3JpcHRpb24gfHwgKCdjb3JlU3RlcElucHV0LmFyaWFSb2xlRGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIChmb2N1c2luKT1cImhhbmRsZUZvY3VzSW4oKVwiXG4gICAgICAgICAgICAod2hlZWwpPVwiaGFuZGxlU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJ0cmFja0lucHV0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZU9uSW5wdXRDaGFuZ2VkKClcIlxuICAgICAgICAgICAgW3N0eWxlLnRleHRBbGlnbl09XCJ0ZXh0QWxpZ25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dCBmZC1pbnB1dC0tbm8tbnVtYmVyLXNwaW5uZXIgZmQtc3RlcC1pbnB1dF9faW5wdXRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgaW5wdXRtb2RlPVwibnVtZXJpY1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaGFzU3RlcEJ1dHRvbnNcIlxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAjaW5jcmVtZW50QnRuXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXN0ZXAtaW5wdXRfX2J1dHRvblwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5JbmNyZW1lbnRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImluY3JlbWVudEJ1dHRvblRpdGxlIHx8ICgnY29yZVN0ZXBJbnB1dC5pbmNyZW1lbnRCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW2dseXBoXT1cImluY3JlbWVudEJ1dHRvbkljb25cIlxuICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpbmNyZW1lbnRCdXR0b25UaXRsZSB8fCAoJ2NvcmVTdGVwSW5wdXQuaW5jcmVtZW50QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaW5wdXRJZFwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxmZC1mb3JtLW1lc3NhZ2UgKm5nSWY9XCIhIXN0YXRlTWVzc2FnZVwiIFt0eXBlXT1cInN0YXRlXCIgW2lubmVySFRNTF09XCJzdGF0ZU1lc3NhZ2VcIj48L2ZkLWZvcm0tbWVzc2FnZT5cbjwvZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuXG48c3BhbiAqbmdJZj1cImNhbkRpc3BsYXlMYWJlbFwiIFtpZF09XCJpbnB1dElkICsgJ19fZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmZC1mb3JtLWxhYmVsIGZkLWZvcm0tbGFiZWwtLXVuaXQtZGVzY3JpcHRpb25cIj5cbiAgICB7eyB1bml0IHx8IGN1cnJlbmN5U2lnbiB9fVxuPC9zcGFuPlxuIl19
@@ -77,6 +77,9 @@ class StepInputComponent {
77
77
  this._value = this._checkValueLimits(value);
78
78
  }
79
79
  this.lastEmittedValue = this._value;
80
+ if (!this._firstEmittedValue && this._value) {
81
+ this._firstEmittedValue = this._value;
82
+ }
80
83
  if (this._numberFormat) {
81
84
  this._updateViewValue();
82
85
  }
@@ -116,17 +119,11 @@ class StepInputComponent {
116
119
  }
117
120
  /** @hidden */
118
121
  get canIncrement() {
119
- if (this.value == null) {
120
- return false;
121
- }
122
- return this.value + this.step <= this._max;
122
+ return this.value == null || this.value + this.step <= this._max;
123
123
  }
124
124
  /** @hidden */
125
125
  get canDecrement() {
126
- if (this.value == null) {
127
- return false;
128
- }
129
- return this.value - this.step >= this._min;
126
+ return this.value == null || this.value - this.step >= this._min;
130
127
  }
131
128
  /** @hidden */
132
129
  get canDisplayLabel() {
@@ -134,16 +131,31 @@ class StepInputComponent {
134
131
  }
135
132
  /** Increment input value by step value */
136
133
  increment() {
137
- if (this.canIncrement) {
138
- this._value = this._cutFloatingNumberDistortion(this.value, this.step);
139
- this._emitChangedValue();
140
- this._updateViewValue();
141
- }
134
+ this._incrementOrDecrement('increment');
142
135
  }
143
136
  /** Decrement input value by step value */
144
137
  decrement() {
145
- if (this.canDecrement) {
146
- this._value = this._cutFloatingNumberDistortion(this.value, -this.step);
138
+ this._incrementOrDecrement('decrement');
139
+ }
140
+ /** @hidden */
141
+ _incrementOrDecrement(direction) {
142
+ if ((direction === 'increment' && this.canIncrement) || (direction === 'decrement' && this.canDecrement)) {
143
+ let _shouldChange = true;
144
+ if (this.value == null && this._firstEmittedValue) {
145
+ this._value = this._firstEmittedValue;
146
+ let _limit;
147
+ direction === 'increment' ? (_limit = this.max) : (_limit = this.min);
148
+ if (this._firstEmittedValue === _limit) {
149
+ this._value = _limit;
150
+ _shouldChange = false;
151
+ }
152
+ }
153
+ if (_shouldChange) {
154
+ this._value =
155
+ direction === 'increment'
156
+ ? this._cutFloatingNumberDistortion(this.value, this.step)
157
+ : this._cutFloatingNumberDistortion(this.value, -this.step);
158
+ }
147
159
  this._emitChangedValue();
148
160
  this._updateViewValue();
149
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-step-input.mjs","sources":["../../../../libs/core/src/lib/step-input/step-input.component.ts","../../../../libs/core/src/lib/step-input/step-input.component.html","../../../../libs/core/src/lib/step-input/deprecated-step-input-compact.directive.ts","../../../../libs/core/src/lib/step-input/step-input.module.ts","../../../../libs/core/src/lib/step-input/fundamental-ngx-core-step-input.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n isDevMode,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FormStates, Nullable } from '@fundamental-ngx/core/shared';\nimport { defer, fromEvent, interval, merge, Observable, Subscription, timer } from 'rxjs';\nimport { filter, switchMap, takeUntil } from 'rxjs/operators';\nimport { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport NumberFormat = Intl.NumberFormat;\n\nlet stepInputUniqueId = 0;\n\n@Component({\n selector: 'fd-step-input',\n templateUrl: './step-input.component.html',\n styleUrls: ['./step-input.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => StepInputComponent),\n multi: true\n },\n contentDensityObserverProviders(),\n registerFormItemControl(StepInputComponent)\n ],\n host: {\n class: 'fd-step-input__container',\n '(focusout)': 'handleFocusOut($event)'\n }\n})\nexport class StepInputComponent implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, FormItemControl {\n /** Sets compact mode */\n @Input()\n compact?: boolean;\n\n /** Sets control in readonly mode */\n @Input()\n readonly: boolean;\n\n /** Sets control in disabled mode */\n @Input()\n disabled: boolean;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Sets locale used to format numeric value */\n @Input()\n locale: string;\n\n /** Specifies algorithm used to match locale. Check Intl.NumberFormat documentation for more information */\n @Input()\n localeMatcher: Nullable<string>;\n\n /** Sets icon displayed in Increment Button */\n @Input()\n incrementButtonIcon = 'add';\n\n /** Sets icon displayed in Decrement Button */\n @Input()\n decrementButtonIcon = 'less';\n\n /**\n * @deprecated use i18n capabilities instead\n * Sets Increment Button title attribute\n */\n @Input()\n incrementButtonTitle: string;\n\n /**\n * @deprecated use i18n capabilities instead\n * Sets Decrement Button title attribute\n */\n @Input()\n decrementButtonTitle: string;\n\n /** Sets input aria-label attribute */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Sets input aria-labelledby attribute */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** Aria defines role description for the Step Input. */\n @Input()\n ariaRoleDescription: string;\n\n /** Sets input id */\n @Input()\n inputId = `fd-step-input-${stepInputUniqueId++}`;\n\n /** Set control value */\n @Input()\n set value(value: Nullable<number>) {\n if (value == null) {\n // cast null or undefined to \"null\"\n this._value = null;\n } else if (!isNaN(value)) {\n value = Number(value);\n this._value = this._checkValueLimits(value);\n }\n this.lastEmittedValue = this._value;\n if (this._numberFormat) {\n this._updateViewValue();\n }\n }\n\n /** Control value */\n get value(): number | null {\n return this._value;\n }\n\n /** Sets minimum value boundary */\n @Input()\n min: number;\n\n /** Sets maximum value boundary */\n @Input()\n max: number;\n\n /** Sets input step value */\n @Input()\n step = 1;\n\n /** Sets input name attribute */\n @Input()\n name: Nullable<string>;\n\n /** Sets input title attribute */\n @Input()\n inputTitle = '';\n\n /** Sets formatting mode */\n @Input()\n mode: 'decimal' | 'currency' = 'decimal';\n\n /** Sets state of the control. Can be `success`, `error`, `warning`, `information` or blank for default. */\n @Input()\n state: FormStates = 'default';\n\n /** Holds the message with respect to state */\n @Input()\n stateMessage: string | SafeHtml;\n\n /** Custom unit displayed as a label next to the input */\n @Input()\n unit: string;\n\n /** Whether to use grouping when formatting value */\n @Input()\n useGrouping = true;\n\n /** Defines minimal number of fractional digits for control value */\n @Input()\n minFractionDigits: number;\n\n /** Defines maximal number of fractional digits for control value */\n @Input()\n maxFractionDigits: number;\n\n /** Currency used to format value. Check Intl.NumberFormat documentation for more information*/\n @Input()\n currency: string;\n\n /** Currency used to format value. Check Intl.NumberFormat documentation for more information */\n @Input()\n currencyDisplay: string;\n\n /** Whether StepInput should display Increase/Decrease buttons */\n @Input()\n hasStepButtons = true;\n\n /** Horizontally aligns value inside input */\n @Input()\n textAlign: 'left' | 'center' | 'right';\n\n /** Hint displayed inside input before user writes value */\n @Input()\n placeholder = '';\n\n /** Emits event when input gets focused */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFocusIn = new EventEmitter<void>();\n\n /** Emits event when input loses focus */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFocusOut = new EventEmitter<void>();\n\n /** Emits new value when control value has changed */\n @Output()\n valueChange = new EventEmitter<number | null>();\n\n /** @hidden */\n @ViewChild('incrementBtn', { read: ElementRef })\n incrementButton: ElementRef<HTMLButtonElement>;\n\n /** @hidden */\n @ViewChild('decrementBtn', { read: ElementRef })\n decrementButton: ElementRef<HTMLButtonElement>;\n\n /** @hidden */\n @ViewChild('inputElement', { read: ElementRef, static: true })\n inputElement: ElementRef;\n\n /** @hidden */\n lastEmittedValue: Nullable<number>;\n\n /** @hidden */\n currencySign: string;\n\n /** @hidden */\n focused: boolean;\n\n /** @hidden */\n private _value: number | null = null;\n\n /** @hidden */\n private _numerals: RegExp;\n\n /** @hidden */\n private _decimalSeparator: RegExp;\n\n /** @hidden */\n private _currency: RegExp;\n\n /** @hidden */\n private _minusSign: RegExp;\n\n /** @hidden */\n private _groupSeparator: RegExp;\n\n /** @hidden */\n private _numberFormat: NumberFormat;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _index: any;\n\n /** @hidden */\n onChange: (value: Nullable<number>) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n constructor(\n @Inject(LOCALE_ID) locale,\n private _changeDetectorRef: ChangeDetectorRef,\n private readonly _liveAnnouncer: LiveAnnouncer,\n readonly _contentDensityObserver: ContentDensityObserver,\n private readonly _elementRef: ElementRef\n ) {\n this.locale = locale;\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._numberFormat = this._getNumberFormat();\n this._buildRegExps();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._updateViewValue();\n this._listenOnButtonsClick();\n }\n\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n registerOnChange(fn: (value: Nullable<number>) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n writeValue(value: number | null): void {\n this.value = value;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** @hidden */\n get canIncrement(): boolean {\n if (this.value == null) {\n return false;\n }\n return this.value + this.step <= this._max;\n }\n\n /** @hidden */\n get canDecrement(): boolean {\n if (this.value == null) {\n return false;\n }\n return this.value - this.step >= this._min;\n }\n\n /** @hidden */\n get canDisplayLabel(): boolean {\n return !!this.unit || !!this.currencySign;\n }\n\n /** Increment input value by step value */\n increment(): void {\n if (this.canIncrement) {\n this._value = this._cutFloatingNumberDistortion(this.value!, this.step);\n this._emitChangedValue();\n this._updateViewValue();\n }\n }\n\n /** Decrement input value by step value */\n decrement(): void {\n if (this.canDecrement) {\n this._value = this._cutFloatingNumberDistortion(this.value!, -this.step);\n this._emitChangedValue();\n this._updateViewValue();\n }\n }\n\n /** @hidden */\n handleKeyDown(event: KeyboardEvent): void {\n const muteEvent = (evnt: Event): void => {\n evnt.stopPropagation();\n evnt.preventDefault();\n };\n\n if (!this._canChangeValue) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.increment();\n muteEvent(event);\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.decrement();\n muteEvent(event);\n }\n }\n\n /** @hidden */\n handleFocusIn(): void {\n this.focused = true;\n this.onFocusIn.emit();\n }\n\n /** @hidden */\n handleFocusOut(event: FocusEvent): void {\n this.focused = false;\n this.onFocusOut.emit();\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /** @hidden */\n handleScroll(event: WheelEvent): void {\n if (this._canChangeValue && this.focused) {\n if (event.deltaY > 0) {\n this.decrement();\n } else {\n this.increment();\n }\n event.preventDefault();\n }\n }\n\n /** @hidden Updates viewValue and conditionally emits new value.\n * This method is called on (change) event, when user leaves input control. */\n updateOnInputChanged(): void {\n if (this.value !== this.lastEmittedValue) {\n this._emitChangedValue();\n }\n this._updateViewValue();\n }\n\n /** @hidden Track parsed value when user changes value of the input control. */\n trackInputValue(event: any): void {\n const parsedValue = this._parseValue(event.target.value);\n this._value = parsedValue != null ? this._checkValueLimits(parsedValue) : null;\n }\n\n /** @hidden */\n private get _canChangeValue(): boolean {\n return !(this.disabled || this.readonly);\n }\n\n /** @hidden */\n private _cutFloatingNumberDistortion(value: number, step: number): number {\n const stepDecimals = `${step}`.split('.')[1];\n const valueDecimals = `${value}`.split('.')[1];\n const stepDecimalsLength = stepDecimals ? stepDecimals.length : 0;\n const valueDecimalsLength = valueDecimals ? valueDecimals.length : 0;\n const longestDecimal = valueDecimalsLength > stepDecimalsLength ? valueDecimalsLength : stepDecimalsLength;\n\n return Number((value + step).toFixed(longestDecimal));\n }\n\n /** @hidden */\n private _checkValueLimits(value: number): number {\n if (value > this._max) {\n return this._max;\n }\n if (value < this._min) {\n return this._min;\n }\n if (!isNaN(this.maxFractionDigits)) {\n value = Number(value.toFixed(this.maxFractionDigits));\n }\n if (!isNaN(this.minFractionDigits)) {\n value = Number(value.toFixed(this.minFractionDigits));\n }\n return value;\n }\n\n /** @hidden */\n private _emitChangedValue(): void {\n this.lastEmittedValue = this.value;\n this.valueChange.emit(this.value);\n this.onChange(this.value);\n }\n\n /** @hidden */\n private get _max(): number {\n return !isNaN(this.max) ? this.max : Number.MAX_VALUE;\n }\n\n /** @hidden */\n private get _min(): number {\n return !isNaN(this.min) ? this.min : -Number.MAX_VALUE;\n }\n\n /** @hidden */\n private _updateViewValue(): void {\n const value = this._formatToViewValue(this.value);\n this.inputElement.nativeElement.value = value;\n this._liveAnnouncer.announce(value);\n }\n\n /** @hidden */\n private _listenOnButtonsClick(): void {\n if (this.hasStepButtons) {\n this._subscriptions.add(\n this._setupButtonListener(this.incrementButton).subscribe(() => {\n this.increment();\n this._changeDetectorRef.detectChanges();\n })\n );\n\n this._subscriptions.add(\n this._setupButtonListener(this.decrementButton).subscribe(() => {\n this.decrement();\n this._changeDetectorRef.detectChanges();\n })\n );\n }\n }\n\n /**\n * @hidden\n * Listens for click or space/enter keydown events.\n *\n * For long clicks will continuously emit event until \"mouseup\" event is detected\n */\n private _setupButtonListener(elementRef: ElementRef): Observable<any> {\n const onMouseDown$ = fromEvent(elementRef.nativeElement, 'mousedown');\n const onMouseUp$ = fromEvent(window, 'mouseup');\n const onKeyDown$ = fromEvent<KeyboardEvent>(elementRef.nativeElement, 'keydown').pipe(\n filter((event) => KeyUtil.isKeyCode(event, [SPACE, ENTER]))\n );\n\n const timerFactory$ = defer(() =>\n timer(500).pipe(\n switchMap(() => interval(40)),\n takeUntil(onMouseUp$)\n )\n );\n\n return merge(\n onMouseDown$,\n onMouseDown$.pipe(switchMap(() => timerFactory$)),\n // while key is pressed, event will be emitted continuously, so there's no need for timerFactory$\n onKeyDown$\n );\n }\n\n /** @hidden */\n private _parseValue(text: string): Nullable<number> {\n const trimmedText = text.trim();\n\n if (trimmedText === '') {\n return null;\n }\n\n const filteredText = trimmedText\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._groupSeparator, '')\n .replace(this._minusSign, '-')\n .replace(this._decimalSeparator, '.')\n .replace(this._numerals, this._index);\n\n if (filteredText) {\n const parsedValue = Number(filteredText);\n return isNaN(parsedValue) ? this.lastEmittedValue : parsedValue;\n }\n\n return null;\n }\n\n /** @hidden */\n private _getNumberFormat(): NumberFormat {\n if (isDevMode() && this.minFractionDigits > this.maxFractionDigits) {\n throw new Error(\"Range error - minFractionDigits can't be bigger than maxFractionDigits\");\n }\n\n return new NumberFormat(this.locale, {\n localeMatcher: this.localeMatcher ?? undefined,\n style: this.mode,\n currency: this.currency,\n // only available in ES2020 and later\n ['currencyDisplay' as any]: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits\n });\n }\n\n /** @hidden */\n private _getNumeralsExpressions(): RegExp {\n const numerals = [\n ...new NumberFormat(this.locale, { useGrouping: false }).format(9876543210).split('')\n ].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n this._index = (d) => index.get(d);\n\n return new RegExp(`[${numerals.join('')}]`, 'g');\n }\n\n /** @hidden */\n private _getDecimalSeparator(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: false });\n return new RegExp(`[${formatter.format(1.1).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getGroupingSeparator(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: true });\n return new RegExp(`[${formatter.format(1000).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getMinusSignExpression(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: false });\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getCurrencyExpression(): RegExp {\n if (this.currency) {\n const formatter = new NumberFormat(this.locale, {\n style: 'currency',\n currency: this.currency,\n // only available in ES2020 and later\n ['currencyDisplay' as any]: this.currencyDisplay\n });\n this.currencySign = `${formatter\n .format(1)\n .replace(/\\s/g, '')\n .replace(this._numerals, '')\n .replace(this._decimalSeparator, '')\n .replace(this._groupSeparator, '')}`;\n\n return new RegExp(`[${this.currencySign}]`, 'g');\n }\n\n return new RegExp(`[]`, 'g');\n }\n\n /** @hidden */\n private _buildRegExps(): void {\n this._numerals = this._getNumeralsExpressions();\n this._decimalSeparator = this._getDecimalSeparator();\n this._minusSign = this._getMinusSignExpression();\n this._groupSeparator = this._getGroupingSeparator();\n this._currency = this._getCurrencyExpression();\n }\n\n /** @hidden */\n private _formatToViewValue(number: Nullable<number>): string {\n if (number == null) {\n return '';\n } else {\n return this.currency\n ? this._numberFormat.format(number).replace(this._currency, '')\n : this._numberFormat.format(number);\n }\n }\n}\n","<fd-form-input-message-group>\n <div\n class=\"fd-step-input\"\n [class]=\"state ? 'is-' + state : ''\"\n [class.is-focus]=\"focused\"\n [class.is-readonly]=\"readonly\"\n [class.is-disabled]=\"disabled\"\n [class.fd-step-input--compact]=\"_contentDensityObserver.isCompact\"\n [class.fd-step-input--without-buttons]=\"!hasStepButtons\"\n >\n <button\n *ngIf=\"hasStepButtons\"\n fd-button\n #decrementBtn\n fdType=\"transparent\"\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"!canDecrement\"\n [title]=\"decrementButtonTitle || ('coreStepInput.decrementButtonTitle' | fdTranslate)\"\n [glyph]=\"decrementButtonIcon\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"decrementButtonTitle || ('coreStepInput.decrementButtonTitle' | fdTranslate)\"\n [attr.aria-controls]=\"inputId\"\n ></button>\n <input\n #inputElement\n [name]=\"name\"\n [id]=\"inputId\"\n [title]=\"inputTitle\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [class.fd-input--compact]=\"_contentDensityObserver.isCompact\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuemin]=\"min\"\n [attr.aria-describedby]=\"canDisplayLabel ? inputId + '__description' : ''\"\n [attr.aria-required]=\"required\"\n [attr.aria-roledescription]=\"ariaRoleDescription || ('coreStepInput.ariaRoleDescription' | fdTranslate)\"\n (focusin)=\"handleFocusIn()\"\n (wheel)=\"handleScroll($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (input)=\"trackInputValue($event)\"\n (change)=\"updateOnInputChanged()\"\n [style.textAlign]=\"textAlign\"\n class=\"fd-input fd-input--no-number-spinner fd-step-input__input\"\n type=\"text\"\n inputmode=\"numeric\"\n />\n <button\n *ngIf=\"hasStepButtons\"\n fd-button\n #incrementBtn\n fdType=\"transparent\"\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"!canIncrement\"\n [title]=\"incrementButtonTitle || ('coreStepInput.incrementButtonTitle' | fdTranslate)\"\n [glyph]=\"incrementButtonIcon\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"incrementButtonTitle || ('coreStepInput.incrementButtonTitle' | fdTranslate)\"\n [attr.aria-controls]=\"inputId\"\n ></button>\n </div>\n\n <fd-form-message *ngIf=\"!!stateMessage\" [type]=\"state\" [innerHTML]=\"stateMessage\"></fd-form-message>\n</fd-form-input-message-group>\n\n<span *ngIf=\"canDisplayLabel\" [id]=\"inputId + '__description'\" class=\"fd-form-label fd-form-label--unit-description\">\n {{ unit || currencySign }}\n</span>\n","import { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\nimport { Directive, forwardRef } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-step-input[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedStepInputCompactDirective)\n }\n ]\n})\nexport class DeprecatedStepInputCompactDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-step-input');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { FormInputMessageGroupModule, FormMessageModule } from '@fundamental-ngx/core/form';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { I18nModule } from '@fundamental-ngx/i18n';\nimport { StepInputComponent } from './step-input.component';\nimport { DeprecatedStepInputCompactDirective } from './deprecated-step-input-compact.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [StepInputComponent, DeprecatedStepInputCompactDirective],\n imports: [\n CommonModule,\n ButtonModule,\n FormInputMessageGroupModule,\n FormMessageModule,\n A11yModule,\n ContentDensityModule,\n I18nModule\n ],\n exports: [StepInputComponent, DeprecatedStepInputCompactDirective, ContentDensityModule]\n})\nexport class StepInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-step-input.mjs","sources":["../../../../libs/core/src/lib/step-input/step-input.component.ts","../../../../libs/core/src/lib/step-input/step-input.component.html","../../../../libs/core/src/lib/step-input/deprecated-step-input-compact.directive.ts","../../../../libs/core/src/lib/step-input/step-input.module.ts","../../../../libs/core/src/lib/step-input/fundamental-ngx-core-step-input.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n isDevMode,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FormStates, Nullable } from '@fundamental-ngx/core/shared';\nimport { defer, fromEvent, interval, merge, Observable, Subscription, timer } from 'rxjs';\nimport { filter, switchMap, takeUntil } from 'rxjs/operators';\nimport { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport NumberFormat = Intl.NumberFormat;\n\nlet stepInputUniqueId = 0;\n\n@Component({\n selector: 'fd-step-input',\n templateUrl: './step-input.component.html',\n styleUrls: ['./step-input.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => StepInputComponent),\n multi: true\n },\n contentDensityObserverProviders(),\n registerFormItemControl(StepInputComponent)\n ],\n host: {\n class: 'fd-step-input__container',\n '(focusout)': 'handleFocusOut($event)'\n }\n})\nexport class StepInputComponent implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, FormItemControl {\n /** Sets compact mode */\n @Input()\n compact?: boolean;\n\n /** Sets control in readonly mode */\n @Input()\n readonly: boolean;\n\n /** Sets control in disabled mode */\n @Input()\n disabled: boolean;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Sets locale used to format numeric value */\n @Input()\n locale: string;\n\n /** Specifies algorithm used to match locale. Check Intl.NumberFormat documentation for more information */\n @Input()\n localeMatcher: Nullable<string>;\n\n /** Sets icon displayed in Increment Button */\n @Input()\n incrementButtonIcon = 'add';\n\n /** Sets icon displayed in Decrement Button */\n @Input()\n decrementButtonIcon = 'less';\n\n /**\n * @deprecated use i18n capabilities instead\n * Sets Increment Button title attribute\n */\n @Input()\n incrementButtonTitle: string;\n\n /**\n * @deprecated use i18n capabilities instead\n * Sets Decrement Button title attribute\n */\n @Input()\n decrementButtonTitle: string;\n\n /** Sets input aria-label attribute */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Sets input aria-labelledby attribute */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** Aria defines role description for the Step Input. */\n @Input()\n ariaRoleDescription: string;\n\n /** Sets input id */\n @Input()\n inputId = `fd-step-input-${stepInputUniqueId++}`;\n\n /** Set control value */\n @Input()\n set value(value: Nullable<number>) {\n if (value == null) {\n // cast null or undefined to \"null\"\n this._value = null;\n } else if (!isNaN(value)) {\n value = Number(value);\n this._value = this._checkValueLimits(value);\n }\n this.lastEmittedValue = this._value;\n if (!this._firstEmittedValue && this._value) {\n this._firstEmittedValue = this._value;\n }\n if (this._numberFormat) {\n this._updateViewValue();\n }\n }\n\n /** Control value */\n get value(): number | null {\n return this._value;\n }\n\n /** Sets minimum value boundary */\n @Input()\n min: number;\n\n /** Sets maximum value boundary */\n @Input()\n max: number;\n\n /** Sets input step value */\n @Input()\n step = 1;\n\n /** Sets input name attribute */\n @Input()\n name: Nullable<string>;\n\n /** Sets input title attribute */\n @Input()\n inputTitle = '';\n\n /** Sets formatting mode */\n @Input()\n mode: 'decimal' | 'currency' = 'decimal';\n\n /** Sets state of the control. Can be `success`, `error`, `warning`, `information` or blank for default. */\n @Input()\n state: FormStates = 'default';\n\n /** Holds the message with respect to state */\n @Input()\n stateMessage: string | SafeHtml;\n\n /** Custom unit displayed as a label next to the input */\n @Input()\n unit: string;\n\n /** Whether to use grouping when formatting value */\n @Input()\n useGrouping = true;\n\n /** Defines minimal number of fractional digits for control value */\n @Input()\n minFractionDigits: number;\n\n /** Defines maximal number of fractional digits for control value */\n @Input()\n maxFractionDigits: number;\n\n /** Currency used to format value. Check Intl.NumberFormat documentation for more information*/\n @Input()\n currency: string;\n\n /** Currency used to format value. Check Intl.NumberFormat documentation for more information */\n @Input()\n currencyDisplay: string;\n\n /** Whether StepInput should display Increase/Decrease buttons */\n @Input()\n hasStepButtons = true;\n\n /** Horizontally aligns value inside input */\n @Input()\n textAlign: 'left' | 'center' | 'right';\n\n /** Hint displayed inside input before user writes value */\n @Input()\n placeholder = '';\n\n /** Emits event when input gets focused */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFocusIn = new EventEmitter<void>();\n\n /** Emits event when input loses focus */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFocusOut = new EventEmitter<void>();\n\n /** Emits new value when control value has changed */\n @Output()\n valueChange = new EventEmitter<number | null>();\n\n /** @hidden */\n @ViewChild('incrementBtn', { read: ElementRef })\n incrementButton: ElementRef<HTMLButtonElement>;\n\n /** @hidden */\n @ViewChild('decrementBtn', { read: ElementRef })\n decrementButton: ElementRef<HTMLButtonElement>;\n\n /** @hidden */\n @ViewChild('inputElement', { read: ElementRef, static: true })\n inputElement: ElementRef;\n\n /** @hidden */\n lastEmittedValue: Nullable<number>;\n\n /** @hidden */\n currencySign: string;\n\n /** @hidden */\n focused: boolean;\n\n /** @hidden */\n private _value: number | null = null;\n\n /** @hidden */\n private _numerals: RegExp;\n\n /** @hidden */\n private _decimalSeparator: RegExp;\n\n /** @hidden */\n private _currency: RegExp;\n\n /** @hidden */\n private _minusSign: RegExp;\n\n /** @hidden */\n private _groupSeparator: RegExp;\n\n /** @hidden */\n private _numberFormat: NumberFormat;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _index: any;\n\n /** @hidden */\n private _firstEmittedValue: number;\n\n /** @hidden */\n onChange: (value: Nullable<number>) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n constructor(\n @Inject(LOCALE_ID) locale,\n private _changeDetectorRef: ChangeDetectorRef,\n private readonly _liveAnnouncer: LiveAnnouncer,\n readonly _contentDensityObserver: ContentDensityObserver,\n private readonly _elementRef: ElementRef\n ) {\n this.locale = locale;\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._numberFormat = this._getNumberFormat();\n this._buildRegExps();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._updateViewValue();\n this._listenOnButtonsClick();\n }\n\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n registerOnChange(fn: (value: Nullable<number>) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n writeValue(value: number | null): void {\n this.value = value;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** @hidden */\n get canIncrement(): boolean {\n return this.value == null || this.value + this.step <= this._max;\n }\n\n /** @hidden */\n get canDecrement(): boolean {\n return this.value == null || this.value - this.step >= this._min;\n }\n\n /** @hidden */\n get canDisplayLabel(): boolean {\n return !!this.unit || !!this.currencySign;\n }\n\n /** Increment input value by step value */\n increment(): void {\n this._incrementOrDecrement('increment');\n }\n\n /** Decrement input value by step value */\n decrement(): void {\n this._incrementOrDecrement('decrement');\n }\n\n /** @hidden */\n private _incrementOrDecrement(direction: 'increment' | 'decrement'): void {\n if ((direction === 'increment' && this.canIncrement) || (direction === 'decrement' && this.canDecrement)) {\n let _shouldChange = true;\n if (this.value == null && this._firstEmittedValue) {\n this._value = this._firstEmittedValue;\n let _limit: number;\n direction === 'increment' ? (_limit = this.max) : (_limit = this.min);\n if (this._firstEmittedValue === _limit) {\n this._value = _limit;\n _shouldChange = false;\n }\n }\n if (_shouldChange) {\n this._value =\n direction === 'increment'\n ? this._cutFloatingNumberDistortion(this.value!, this.step)\n : this._cutFloatingNumberDistortion(this.value!, -this.step);\n }\n this._emitChangedValue();\n this._updateViewValue();\n }\n }\n\n /** @hidden */\n handleKeyDown(event: KeyboardEvent): void {\n const muteEvent = (evnt: Event): void => {\n evnt.stopPropagation();\n evnt.preventDefault();\n };\n\n if (!this._canChangeValue) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.increment();\n muteEvent(event);\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.decrement();\n muteEvent(event);\n }\n }\n\n /** @hidden */\n handleFocusIn(): void {\n this.focused = true;\n this.onFocusIn.emit();\n }\n\n /** @hidden */\n handleFocusOut(event: FocusEvent): void {\n this.focused = false;\n this.onFocusOut.emit();\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /** @hidden */\n handleScroll(event: WheelEvent): void {\n if (this._canChangeValue && this.focused) {\n if (event.deltaY > 0) {\n this.decrement();\n } else {\n this.increment();\n }\n event.preventDefault();\n }\n }\n\n /** @hidden Updates viewValue and conditionally emits new value.\n * This method is called on (change) event, when user leaves input control. */\n updateOnInputChanged(): void {\n if (this.value !== this.lastEmittedValue) {\n this._emitChangedValue();\n }\n this._updateViewValue();\n }\n\n /** @hidden Track parsed value when user changes value of the input control. */\n trackInputValue(event: any): void {\n const parsedValue = this._parseValue(event.target.value);\n this._value = parsedValue != null ? this._checkValueLimits(parsedValue) : null;\n }\n\n /** @hidden */\n private get _canChangeValue(): boolean {\n return !(this.disabled || this.readonly);\n }\n\n /** @hidden */\n private _cutFloatingNumberDistortion(value: number, step: number): number {\n const stepDecimals = `${step}`.split('.')[1];\n const valueDecimals = `${value}`.split('.')[1];\n const stepDecimalsLength = stepDecimals ? stepDecimals.length : 0;\n const valueDecimalsLength = valueDecimals ? valueDecimals.length : 0;\n const longestDecimal = valueDecimalsLength > stepDecimalsLength ? valueDecimalsLength : stepDecimalsLength;\n\n return Number((value + step).toFixed(longestDecimal));\n }\n\n /** @hidden */\n private _checkValueLimits(value: number): number {\n if (value > this._max) {\n return this._max;\n }\n if (value < this._min) {\n return this._min;\n }\n if (!isNaN(this.maxFractionDigits)) {\n value = Number(value.toFixed(this.maxFractionDigits));\n }\n if (!isNaN(this.minFractionDigits)) {\n value = Number(value.toFixed(this.minFractionDigits));\n }\n return value;\n }\n\n /** @hidden */\n private _emitChangedValue(): void {\n this.lastEmittedValue = this.value;\n this.valueChange.emit(this.value);\n this.onChange(this.value);\n }\n\n /** @hidden */\n private get _max(): number {\n return !isNaN(this.max) ? this.max : Number.MAX_VALUE;\n }\n\n /** @hidden */\n private get _min(): number {\n return !isNaN(this.min) ? this.min : -Number.MAX_VALUE;\n }\n\n /** @hidden */\n private _updateViewValue(): void {\n const value = this._formatToViewValue(this.value);\n this.inputElement.nativeElement.value = value;\n this._liveAnnouncer.announce(value);\n }\n\n /** @hidden */\n private _listenOnButtonsClick(): void {\n if (this.hasStepButtons) {\n this._subscriptions.add(\n this._setupButtonListener(this.incrementButton).subscribe(() => {\n this.increment();\n this._changeDetectorRef.detectChanges();\n })\n );\n\n this._subscriptions.add(\n this._setupButtonListener(this.decrementButton).subscribe(() => {\n this.decrement();\n this._changeDetectorRef.detectChanges();\n })\n );\n }\n }\n\n /**\n * @hidden\n * Listens for click or space/enter keydown events.\n *\n * For long clicks will continuously emit event until \"mouseup\" event is detected\n */\n private _setupButtonListener(elementRef: ElementRef): Observable<any> {\n const onMouseDown$ = fromEvent(elementRef.nativeElement, 'mousedown');\n const onMouseUp$ = fromEvent(window, 'mouseup');\n const onKeyDown$ = fromEvent<KeyboardEvent>(elementRef.nativeElement, 'keydown').pipe(\n filter((event) => KeyUtil.isKeyCode(event, [SPACE, ENTER]))\n );\n\n const timerFactory$ = defer(() =>\n timer(500).pipe(\n switchMap(() => interval(40)),\n takeUntil(onMouseUp$)\n )\n );\n\n return merge(\n onMouseDown$,\n onMouseDown$.pipe(switchMap(() => timerFactory$)),\n // while key is pressed, event will be emitted continuously, so there's no need for timerFactory$\n onKeyDown$\n );\n }\n\n /** @hidden */\n private _parseValue(text: string): Nullable<number> {\n const trimmedText = text.trim();\n\n if (trimmedText === '') {\n return null;\n }\n\n const filteredText = trimmedText\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._groupSeparator, '')\n .replace(this._minusSign, '-')\n .replace(this._decimalSeparator, '.')\n .replace(this._numerals, this._index);\n\n if (filteredText) {\n const parsedValue = Number(filteredText);\n return isNaN(parsedValue) ? this.lastEmittedValue : parsedValue;\n }\n\n return null;\n }\n\n /** @hidden */\n private _getNumberFormat(): NumberFormat {\n if (isDevMode() && this.minFractionDigits > this.maxFractionDigits) {\n throw new Error(\"Range error - minFractionDigits can't be bigger than maxFractionDigits\");\n }\n\n return new NumberFormat(this.locale, {\n localeMatcher: this.localeMatcher ?? undefined,\n style: this.mode,\n currency: this.currency,\n // only available in ES2020 and later\n ['currencyDisplay' as any]: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits\n });\n }\n\n /** @hidden */\n private _getNumeralsExpressions(): RegExp {\n const numerals = [\n ...new NumberFormat(this.locale, { useGrouping: false }).format(9876543210).split('')\n ].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n this._index = (d) => index.get(d);\n\n return new RegExp(`[${numerals.join('')}]`, 'g');\n }\n\n /** @hidden */\n private _getDecimalSeparator(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: false });\n return new RegExp(`[${formatter.format(1.1).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getGroupingSeparator(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: true });\n return new RegExp(`[${formatter.format(1000).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getMinusSignExpression(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: false });\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getCurrencyExpression(): RegExp {\n if (this.currency) {\n const formatter = new NumberFormat(this.locale, {\n style: 'currency',\n currency: this.currency,\n // only available in ES2020 and later\n ['currencyDisplay' as any]: this.currencyDisplay\n });\n this.currencySign = `${formatter\n .format(1)\n .replace(/\\s/g, '')\n .replace(this._numerals, '')\n .replace(this._decimalSeparator, '')\n .replace(this._groupSeparator, '')}`;\n\n return new RegExp(`[${this.currencySign}]`, 'g');\n }\n\n return new RegExp(`[]`, 'g');\n }\n\n /** @hidden */\n private _buildRegExps(): void {\n this._numerals = this._getNumeralsExpressions();\n this._decimalSeparator = this._getDecimalSeparator();\n this._minusSign = this._getMinusSignExpression();\n this._groupSeparator = this._getGroupingSeparator();\n this._currency = this._getCurrencyExpression();\n }\n\n /** @hidden */\n private _formatToViewValue(number: Nullable<number>): string {\n if (number == null) {\n return '';\n } else {\n return this.currency\n ? this._numberFormat.format(number).replace(this._currency, '')\n : this._numberFormat.format(number);\n }\n }\n}\n","<fd-form-input-message-group>\n <div\n class=\"fd-step-input\"\n [class]=\"state ? 'is-' + state : ''\"\n [class.is-focus]=\"focused\"\n [class.is-readonly]=\"readonly\"\n [class.is-disabled]=\"disabled\"\n [class.fd-step-input--compact]=\"_contentDensityObserver.isCompact\"\n [class.fd-step-input--without-buttons]=\"!hasStepButtons\"\n >\n <button\n *ngIf=\"hasStepButtons\"\n fd-button\n #decrementBtn\n fdType=\"transparent\"\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"!canDecrement\"\n [title]=\"decrementButtonTitle || ('coreStepInput.decrementButtonTitle' | fdTranslate)\"\n [glyph]=\"decrementButtonIcon\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"decrementButtonTitle || ('coreStepInput.decrementButtonTitle' | fdTranslate)\"\n [attr.aria-controls]=\"inputId\"\n ></button>\n <input\n #inputElement\n [name]=\"name\"\n [id]=\"inputId\"\n [title]=\"inputTitle\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [class.fd-input--compact]=\"_contentDensityObserver.isCompact\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuemin]=\"min\"\n [attr.aria-describedby]=\"canDisplayLabel ? inputId + '__description' : ''\"\n [attr.aria-required]=\"required\"\n [attr.aria-roledescription]=\"ariaRoleDescription || ('coreStepInput.ariaRoleDescription' | fdTranslate)\"\n (focusin)=\"handleFocusIn()\"\n (wheel)=\"handleScroll($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (input)=\"trackInputValue($event)\"\n (change)=\"updateOnInputChanged()\"\n [style.textAlign]=\"textAlign\"\n class=\"fd-input fd-input--no-number-spinner fd-step-input__input\"\n type=\"text\"\n inputmode=\"numeric\"\n />\n <button\n *ngIf=\"hasStepButtons\"\n fd-button\n #incrementBtn\n fdType=\"transparent\"\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"!canIncrement\"\n [title]=\"incrementButtonTitle || ('coreStepInput.incrementButtonTitle' | fdTranslate)\"\n [glyph]=\"incrementButtonIcon\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"incrementButtonTitle || ('coreStepInput.incrementButtonTitle' | fdTranslate)\"\n [attr.aria-controls]=\"inputId\"\n ></button>\n </div>\n\n <fd-form-message *ngIf=\"!!stateMessage\" [type]=\"state\" [innerHTML]=\"stateMessage\"></fd-form-message>\n</fd-form-input-message-group>\n\n<span *ngIf=\"canDisplayLabel\" [id]=\"inputId + '__description'\" class=\"fd-form-label fd-form-label--unit-description\">\n {{ unit || currencySign }}\n</span>\n","import { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\nimport { Directive, forwardRef } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-step-input[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedStepInputCompactDirective)\n }\n ]\n})\nexport class DeprecatedStepInputCompactDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-step-input');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { FormInputMessageGroupModule, FormMessageModule } from '@fundamental-ngx/core/form';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { I18nModule } from '@fundamental-ngx/i18n';\nimport { StepInputComponent } from './step-input.component';\nimport { DeprecatedStepInputCompactDirective } from './deprecated-step-input-compact.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [StepInputComponent, DeprecatedStepInputCompactDirective],\n imports: [\n CommonModule,\n ButtonModule,\n FormInputMessageGroupModule,\n FormMessageModule,\n A11yModule,\n ContentDensityModule,\n I18nModule\n ],\n exports: [StepInputComponent, DeprecatedStepInputCompactDirective, ContentDensityModule]\n})\nexport class StepInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -77,6 +77,9 @@ class StepInputComponent {
77
77
  this._value = this._checkValueLimits(value);
78
78
  }
79
79
  this.lastEmittedValue = this._value;
80
+ if (!this._firstEmittedValue && this._value) {
81
+ this._firstEmittedValue = this._value;
82
+ }
80
83
  if (this._numberFormat) {
81
84
  this._updateViewValue();
82
85
  }
@@ -116,17 +119,11 @@ class StepInputComponent {
116
119
  }
117
120
  /** @hidden */
118
121
  get canIncrement() {
119
- if (this.value == null) {
120
- return false;
121
- }
122
- return this.value + this.step <= this._max;
122
+ return this.value == null || this.value + this.step <= this._max;
123
123
  }
124
124
  /** @hidden */
125
125
  get canDecrement() {
126
- if (this.value == null) {
127
- return false;
128
- }
129
- return this.value - this.step >= this._min;
126
+ return this.value == null || this.value - this.step >= this._min;
130
127
  }
131
128
  /** @hidden */
132
129
  get canDisplayLabel() {
@@ -134,16 +131,31 @@ class StepInputComponent {
134
131
  }
135
132
  /** Increment input value by step value */
136
133
  increment() {
137
- if (this.canIncrement) {
138
- this._value = this._cutFloatingNumberDistortion(this.value, this.step);
139
- this._emitChangedValue();
140
- this._updateViewValue();
141
- }
134
+ this._incrementOrDecrement('increment');
142
135
  }
143
136
  /** Decrement input value by step value */
144
137
  decrement() {
145
- if (this.canDecrement) {
146
- this._value = this._cutFloatingNumberDistortion(this.value, -this.step);
138
+ this._incrementOrDecrement('decrement');
139
+ }
140
+ /** @hidden */
141
+ _incrementOrDecrement(direction) {
142
+ if ((direction === 'increment' && this.canIncrement) || (direction === 'decrement' && this.canDecrement)) {
143
+ let _shouldChange = true;
144
+ if (this.value == null && this._firstEmittedValue) {
145
+ this._value = this._firstEmittedValue;
146
+ let _limit;
147
+ direction === 'increment' ? (_limit = this.max) : (_limit = this.min);
148
+ if (this._firstEmittedValue === _limit) {
149
+ this._value = _limit;
150
+ _shouldChange = false;
151
+ }
152
+ }
153
+ if (_shouldChange) {
154
+ this._value =
155
+ direction === 'increment'
156
+ ? this._cutFloatingNumberDistortion(this.value, this.step)
157
+ : this._cutFloatingNumberDistortion(this.value, -this.step);
158
+ }
147
159
  this._emitChangedValue();
148
160
  this._updateViewValue();
149
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-step-input.mjs","sources":["../../../../libs/core/src/lib/step-input/step-input.component.ts","../../../../libs/core/src/lib/step-input/step-input.component.html","../../../../libs/core/src/lib/step-input/deprecated-step-input-compact.directive.ts","../../../../libs/core/src/lib/step-input/step-input.module.ts","../../../../libs/core/src/lib/step-input/fundamental-ngx-core-step-input.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n isDevMode,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FormStates, Nullable } from '@fundamental-ngx/core/shared';\nimport { defer, fromEvent, interval, merge, Observable, Subscription, timer } from 'rxjs';\nimport { filter, switchMap, takeUntil } from 'rxjs/operators';\nimport { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport NumberFormat = Intl.NumberFormat;\n\nlet stepInputUniqueId = 0;\n\n@Component({\n selector: 'fd-step-input',\n templateUrl: './step-input.component.html',\n styleUrls: ['./step-input.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => StepInputComponent),\n multi: true\n },\n contentDensityObserverProviders(),\n registerFormItemControl(StepInputComponent)\n ],\n host: {\n class: 'fd-step-input__container',\n '(focusout)': 'handleFocusOut($event)'\n }\n})\nexport class StepInputComponent implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, FormItemControl {\n /** Sets compact mode */\n @Input()\n compact?: boolean;\n\n /** Sets control in readonly mode */\n @Input()\n readonly: boolean;\n\n /** Sets control in disabled mode */\n @Input()\n disabled: boolean;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Sets locale used to format numeric value */\n @Input()\n locale: string;\n\n /** Specifies algorithm used to match locale. Check Intl.NumberFormat documentation for more information */\n @Input()\n localeMatcher: Nullable<string>;\n\n /** Sets icon displayed in Increment Button */\n @Input()\n incrementButtonIcon = 'add';\n\n /** Sets icon displayed in Decrement Button */\n @Input()\n decrementButtonIcon = 'less';\n\n /**\n * @deprecated use i18n capabilities instead\n * Sets Increment Button title attribute\n */\n @Input()\n incrementButtonTitle: string;\n\n /**\n * @deprecated use i18n capabilities instead\n * Sets Decrement Button title attribute\n */\n @Input()\n decrementButtonTitle: string;\n\n /** Sets input aria-label attribute */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Sets input aria-labelledby attribute */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** Aria defines role description for the Step Input. */\n @Input()\n ariaRoleDescription: string;\n\n /** Sets input id */\n @Input()\n inputId = `fd-step-input-${stepInputUniqueId++}`;\n\n /** Set control value */\n @Input()\n set value(value: Nullable<number>) {\n if (value == null) {\n // cast null or undefined to \"null\"\n this._value = null;\n } else if (!isNaN(value)) {\n value = Number(value);\n this._value = this._checkValueLimits(value);\n }\n this.lastEmittedValue = this._value;\n if (this._numberFormat) {\n this._updateViewValue();\n }\n }\n\n /** Control value */\n get value(): number | null {\n return this._value;\n }\n\n /** Sets minimum value boundary */\n @Input()\n min: number;\n\n /** Sets maximum value boundary */\n @Input()\n max: number;\n\n /** Sets input step value */\n @Input()\n step = 1;\n\n /** Sets input name attribute */\n @Input()\n name: Nullable<string>;\n\n /** Sets input title attribute */\n @Input()\n inputTitle = '';\n\n /** Sets formatting mode */\n @Input()\n mode: 'decimal' | 'currency' = 'decimal';\n\n /** Sets state of the control. Can be `success`, `error`, `warning`, `information` or blank for default. */\n @Input()\n state: FormStates = 'default';\n\n /** Holds the message with respect to state */\n @Input()\n stateMessage: string | SafeHtml;\n\n /** Custom unit displayed as a label next to the input */\n @Input()\n unit: string;\n\n /** Whether to use grouping when formatting value */\n @Input()\n useGrouping = true;\n\n /** Defines minimal number of fractional digits for control value */\n @Input()\n minFractionDigits: number;\n\n /** Defines maximal number of fractional digits for control value */\n @Input()\n maxFractionDigits: number;\n\n /** Currency used to format value. Check Intl.NumberFormat documentation for more information*/\n @Input()\n currency: string;\n\n /** Currency used to format value. Check Intl.NumberFormat documentation for more information */\n @Input()\n currencyDisplay: string;\n\n /** Whether StepInput should display Increase/Decrease buttons */\n @Input()\n hasStepButtons = true;\n\n /** Horizontally aligns value inside input */\n @Input()\n textAlign: 'left' | 'center' | 'right';\n\n /** Hint displayed inside input before user writes value */\n @Input()\n placeholder = '';\n\n /** Emits event when input gets focused */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFocusIn = new EventEmitter<void>();\n\n /** Emits event when input loses focus */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFocusOut = new EventEmitter<void>();\n\n /** Emits new value when control value has changed */\n @Output()\n valueChange = new EventEmitter<number | null>();\n\n /** @hidden */\n @ViewChild('incrementBtn', { read: ElementRef })\n incrementButton: ElementRef<HTMLButtonElement>;\n\n /** @hidden */\n @ViewChild('decrementBtn', { read: ElementRef })\n decrementButton: ElementRef<HTMLButtonElement>;\n\n /** @hidden */\n @ViewChild('inputElement', { read: ElementRef, static: true })\n inputElement: ElementRef;\n\n /** @hidden */\n lastEmittedValue: Nullable<number>;\n\n /** @hidden */\n currencySign: string;\n\n /** @hidden */\n focused: boolean;\n\n /** @hidden */\n private _value: number | null = null;\n\n /** @hidden */\n private _numerals: RegExp;\n\n /** @hidden */\n private _decimalSeparator: RegExp;\n\n /** @hidden */\n private _currency: RegExp;\n\n /** @hidden */\n private _minusSign: RegExp;\n\n /** @hidden */\n private _groupSeparator: RegExp;\n\n /** @hidden */\n private _numberFormat: NumberFormat;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _index: any;\n\n /** @hidden */\n onChange: (value: Nullable<number>) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n constructor(\n @Inject(LOCALE_ID) locale,\n private _changeDetectorRef: ChangeDetectorRef,\n private readonly _liveAnnouncer: LiveAnnouncer,\n readonly _contentDensityObserver: ContentDensityObserver,\n private readonly _elementRef: ElementRef\n ) {\n this.locale = locale;\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._numberFormat = this._getNumberFormat();\n this._buildRegExps();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._updateViewValue();\n this._listenOnButtonsClick();\n }\n\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n registerOnChange(fn: (value: Nullable<number>) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n writeValue(value: number | null): void {\n this.value = value;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** @hidden */\n get canIncrement(): boolean {\n if (this.value == null) {\n return false;\n }\n return this.value + this.step <= this._max;\n }\n\n /** @hidden */\n get canDecrement(): boolean {\n if (this.value == null) {\n return false;\n }\n return this.value - this.step >= this._min;\n }\n\n /** @hidden */\n get canDisplayLabel(): boolean {\n return !!this.unit || !!this.currencySign;\n }\n\n /** Increment input value by step value */\n increment(): void {\n if (this.canIncrement) {\n this._value = this._cutFloatingNumberDistortion(this.value!, this.step);\n this._emitChangedValue();\n this._updateViewValue();\n }\n }\n\n /** Decrement input value by step value */\n decrement(): void {\n if (this.canDecrement) {\n this._value = this._cutFloatingNumberDistortion(this.value!, -this.step);\n this._emitChangedValue();\n this._updateViewValue();\n }\n }\n\n /** @hidden */\n handleKeyDown(event: KeyboardEvent): void {\n const muteEvent = (evnt: Event): void => {\n evnt.stopPropagation();\n evnt.preventDefault();\n };\n\n if (!this._canChangeValue) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.increment();\n muteEvent(event);\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.decrement();\n muteEvent(event);\n }\n }\n\n /** @hidden */\n handleFocusIn(): void {\n this.focused = true;\n this.onFocusIn.emit();\n }\n\n /** @hidden */\n handleFocusOut(event: FocusEvent): void {\n this.focused = false;\n this.onFocusOut.emit();\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /** @hidden */\n handleScroll(event: WheelEvent): void {\n if (this._canChangeValue && this.focused) {\n if (event.deltaY > 0) {\n this.decrement();\n } else {\n this.increment();\n }\n event.preventDefault();\n }\n }\n\n /** @hidden Updates viewValue and conditionally emits new value.\n * This method is called on (change) event, when user leaves input control. */\n updateOnInputChanged(): void {\n if (this.value !== this.lastEmittedValue) {\n this._emitChangedValue();\n }\n this._updateViewValue();\n }\n\n /** @hidden Track parsed value when user changes value of the input control. */\n trackInputValue(event: any): void {\n const parsedValue = this._parseValue(event.target.value);\n this._value = parsedValue != null ? this._checkValueLimits(parsedValue) : null;\n }\n\n /** @hidden */\n private get _canChangeValue(): boolean {\n return !(this.disabled || this.readonly);\n }\n\n /** @hidden */\n private _cutFloatingNumberDistortion(value: number, step: number): number {\n const stepDecimals = `${step}`.split('.')[1];\n const valueDecimals = `${value}`.split('.')[1];\n const stepDecimalsLength = stepDecimals ? stepDecimals.length : 0;\n const valueDecimalsLength = valueDecimals ? valueDecimals.length : 0;\n const longestDecimal = valueDecimalsLength > stepDecimalsLength ? valueDecimalsLength : stepDecimalsLength;\n\n return Number((value + step).toFixed(longestDecimal));\n }\n\n /** @hidden */\n private _checkValueLimits(value: number): number {\n if (value > this._max) {\n return this._max;\n }\n if (value < this._min) {\n return this._min;\n }\n if (!isNaN(this.maxFractionDigits)) {\n value = Number(value.toFixed(this.maxFractionDigits));\n }\n if (!isNaN(this.minFractionDigits)) {\n value = Number(value.toFixed(this.minFractionDigits));\n }\n return value;\n }\n\n /** @hidden */\n private _emitChangedValue(): void {\n this.lastEmittedValue = this.value;\n this.valueChange.emit(this.value);\n this.onChange(this.value);\n }\n\n /** @hidden */\n private get _max(): number {\n return !isNaN(this.max) ? this.max : Number.MAX_VALUE;\n }\n\n /** @hidden */\n private get _min(): number {\n return !isNaN(this.min) ? this.min : -Number.MAX_VALUE;\n }\n\n /** @hidden */\n private _updateViewValue(): void {\n const value = this._formatToViewValue(this.value);\n this.inputElement.nativeElement.value = value;\n this._liveAnnouncer.announce(value);\n }\n\n /** @hidden */\n private _listenOnButtonsClick(): void {\n if (this.hasStepButtons) {\n this._subscriptions.add(\n this._setupButtonListener(this.incrementButton).subscribe(() => {\n this.increment();\n this._changeDetectorRef.detectChanges();\n })\n );\n\n this._subscriptions.add(\n this._setupButtonListener(this.decrementButton).subscribe(() => {\n this.decrement();\n this._changeDetectorRef.detectChanges();\n })\n );\n }\n }\n\n /**\n * @hidden\n * Listens for click or space/enter keydown events.\n *\n * For long clicks will continuously emit event until \"mouseup\" event is detected\n */\n private _setupButtonListener(elementRef: ElementRef): Observable<any> {\n const onMouseDown$ = fromEvent(elementRef.nativeElement, 'mousedown');\n const onMouseUp$ = fromEvent(window, 'mouseup');\n const onKeyDown$ = fromEvent<KeyboardEvent>(elementRef.nativeElement, 'keydown').pipe(\n filter((event) => KeyUtil.isKeyCode(event, [SPACE, ENTER]))\n );\n\n const timerFactory$ = defer(() =>\n timer(500).pipe(\n switchMap(() => interval(40)),\n takeUntil(onMouseUp$)\n )\n );\n\n return merge(\n onMouseDown$,\n onMouseDown$.pipe(switchMap(() => timerFactory$)),\n // while key is pressed, event will be emitted continuously, so there's no need for timerFactory$\n onKeyDown$\n );\n }\n\n /** @hidden */\n private _parseValue(text: string): Nullable<number> {\n const trimmedText = text.trim();\n\n if (trimmedText === '') {\n return null;\n }\n\n const filteredText = trimmedText\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._groupSeparator, '')\n .replace(this._minusSign, '-')\n .replace(this._decimalSeparator, '.')\n .replace(this._numerals, this._index);\n\n if (filteredText) {\n const parsedValue = Number(filteredText);\n return isNaN(parsedValue) ? this.lastEmittedValue : parsedValue;\n }\n\n return null;\n }\n\n /** @hidden */\n private _getNumberFormat(): NumberFormat {\n if (isDevMode() && this.minFractionDigits > this.maxFractionDigits) {\n throw new Error(\"Range error - minFractionDigits can't be bigger than maxFractionDigits\");\n }\n\n return new NumberFormat(this.locale, {\n localeMatcher: this.localeMatcher ?? undefined,\n style: this.mode,\n currency: this.currency,\n // only available in ES2020 and later\n ['currencyDisplay' as any]: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits\n });\n }\n\n /** @hidden */\n private _getNumeralsExpressions(): RegExp {\n const numerals = [\n ...new NumberFormat(this.locale, { useGrouping: false }).format(9876543210).split('')\n ].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n this._index = (d) => index.get(d);\n\n return new RegExp(`[${numerals.join('')}]`, 'g');\n }\n\n /** @hidden */\n private _getDecimalSeparator(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: false });\n return new RegExp(`[${formatter.format(1.1).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getGroupingSeparator(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: true });\n return new RegExp(`[${formatter.format(1000).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getMinusSignExpression(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: false });\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getCurrencyExpression(): RegExp {\n if (this.currency) {\n const formatter = new NumberFormat(this.locale, {\n style: 'currency',\n currency: this.currency,\n // only available in ES2020 and later\n ['currencyDisplay' as any]: this.currencyDisplay\n });\n this.currencySign = `${formatter\n .format(1)\n .replace(/\\s/g, '')\n .replace(this._numerals, '')\n .replace(this._decimalSeparator, '')\n .replace(this._groupSeparator, '')}`;\n\n return new RegExp(`[${this.currencySign}]`, 'g');\n }\n\n return new RegExp(`[]`, 'g');\n }\n\n /** @hidden */\n private _buildRegExps(): void {\n this._numerals = this._getNumeralsExpressions();\n this._decimalSeparator = this._getDecimalSeparator();\n this._minusSign = this._getMinusSignExpression();\n this._groupSeparator = this._getGroupingSeparator();\n this._currency = this._getCurrencyExpression();\n }\n\n /** @hidden */\n private _formatToViewValue(number: Nullable<number>): string {\n if (number == null) {\n return '';\n } else {\n return this.currency\n ? this._numberFormat.format(number).replace(this._currency, '')\n : this._numberFormat.format(number);\n }\n }\n}\n","<fd-form-input-message-group>\n <div\n class=\"fd-step-input\"\n [class]=\"state ? 'is-' + state : ''\"\n [class.is-focus]=\"focused\"\n [class.is-readonly]=\"readonly\"\n [class.is-disabled]=\"disabled\"\n [class.fd-step-input--compact]=\"_contentDensityObserver.isCompact\"\n [class.fd-step-input--without-buttons]=\"!hasStepButtons\"\n >\n <button\n *ngIf=\"hasStepButtons\"\n fd-button\n #decrementBtn\n fdType=\"transparent\"\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"!canDecrement\"\n [title]=\"decrementButtonTitle || ('coreStepInput.decrementButtonTitle' | fdTranslate)\"\n [glyph]=\"decrementButtonIcon\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"decrementButtonTitle || ('coreStepInput.decrementButtonTitle' | fdTranslate)\"\n [attr.aria-controls]=\"inputId\"\n ></button>\n <input\n #inputElement\n [name]=\"name\"\n [id]=\"inputId\"\n [title]=\"inputTitle\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [class.fd-input--compact]=\"_contentDensityObserver.isCompact\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuemin]=\"min\"\n [attr.aria-describedby]=\"canDisplayLabel ? inputId + '__description' : ''\"\n [attr.aria-required]=\"required\"\n [attr.aria-roledescription]=\"ariaRoleDescription || ('coreStepInput.ariaRoleDescription' | fdTranslate)\"\n (focusin)=\"handleFocusIn()\"\n (wheel)=\"handleScroll($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (input)=\"trackInputValue($event)\"\n (change)=\"updateOnInputChanged()\"\n [style.textAlign]=\"textAlign\"\n class=\"fd-input fd-input--no-number-spinner fd-step-input__input\"\n type=\"text\"\n inputmode=\"numeric\"\n />\n <button\n *ngIf=\"hasStepButtons\"\n fd-button\n #incrementBtn\n fdType=\"transparent\"\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"!canIncrement\"\n [title]=\"incrementButtonTitle || ('coreStepInput.incrementButtonTitle' | fdTranslate)\"\n [glyph]=\"incrementButtonIcon\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"incrementButtonTitle || ('coreStepInput.incrementButtonTitle' | fdTranslate)\"\n [attr.aria-controls]=\"inputId\"\n ></button>\n </div>\n\n <fd-form-message *ngIf=\"!!stateMessage\" [type]=\"state\" [innerHTML]=\"stateMessage\"></fd-form-message>\n</fd-form-input-message-group>\n\n<span *ngIf=\"canDisplayLabel\" [id]=\"inputId + '__description'\" class=\"fd-form-label fd-form-label--unit-description\">\n {{ unit || currencySign }}\n</span>\n","import { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\nimport { Directive, forwardRef } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-step-input[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedStepInputCompactDirective)\n }\n ]\n})\nexport class DeprecatedStepInputCompactDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-step-input');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { FormInputMessageGroupModule, FormMessageModule } from '@fundamental-ngx/core/form';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { I18nModule } from '@fundamental-ngx/i18n';\nimport { StepInputComponent } from './step-input.component';\nimport { DeprecatedStepInputCompactDirective } from './deprecated-step-input-compact.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [StepInputComponent, DeprecatedStepInputCompactDirective],\n imports: [\n CommonModule,\n ButtonModule,\n FormInputMessageGroupModule,\n FormMessageModule,\n A11yModule,\n ContentDensityModule,\n I18nModule\n ],\n exports: [StepInputComponent, DeprecatedStepInputCompactDirective, ContentDensityModule]\n})\nexport class StepInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-step-input.mjs","sources":["../../../../libs/core/src/lib/step-input/step-input.component.ts","../../../../libs/core/src/lib/step-input/step-input.component.html","../../../../libs/core/src/lib/step-input/deprecated-step-input-compact.directive.ts","../../../../libs/core/src/lib/step-input/step-input.module.ts","../../../../libs/core/src/lib/step-input/fundamental-ngx-core-step-input.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n isDevMode,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FormStates, Nullable } from '@fundamental-ngx/core/shared';\nimport { defer, fromEvent, interval, merge, Observable, Subscription, timer } from 'rxjs';\nimport { filter, switchMap, takeUntil } from 'rxjs/operators';\nimport { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport NumberFormat = Intl.NumberFormat;\n\nlet stepInputUniqueId = 0;\n\n@Component({\n selector: 'fd-step-input',\n templateUrl: './step-input.component.html',\n styleUrls: ['./step-input.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => StepInputComponent),\n multi: true\n },\n contentDensityObserverProviders(),\n registerFormItemControl(StepInputComponent)\n ],\n host: {\n class: 'fd-step-input__container',\n '(focusout)': 'handleFocusOut($event)'\n }\n})\nexport class StepInputComponent implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, FormItemControl {\n /** Sets compact mode */\n @Input()\n compact?: boolean;\n\n /** Sets control in readonly mode */\n @Input()\n readonly: boolean;\n\n /** Sets control in disabled mode */\n @Input()\n disabled: boolean;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Sets locale used to format numeric value */\n @Input()\n locale: string;\n\n /** Specifies algorithm used to match locale. Check Intl.NumberFormat documentation for more information */\n @Input()\n localeMatcher: Nullable<string>;\n\n /** Sets icon displayed in Increment Button */\n @Input()\n incrementButtonIcon = 'add';\n\n /** Sets icon displayed in Decrement Button */\n @Input()\n decrementButtonIcon = 'less';\n\n /**\n * @deprecated use i18n capabilities instead\n * Sets Increment Button title attribute\n */\n @Input()\n incrementButtonTitle: string;\n\n /**\n * @deprecated use i18n capabilities instead\n * Sets Decrement Button title attribute\n */\n @Input()\n decrementButtonTitle: string;\n\n /** Sets input aria-label attribute */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Sets input aria-labelledby attribute */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** Aria defines role description for the Step Input. */\n @Input()\n ariaRoleDescription: string;\n\n /** Sets input id */\n @Input()\n inputId = `fd-step-input-${stepInputUniqueId++}`;\n\n /** Set control value */\n @Input()\n set value(value: Nullable<number>) {\n if (value == null) {\n // cast null or undefined to \"null\"\n this._value = null;\n } else if (!isNaN(value)) {\n value = Number(value);\n this._value = this._checkValueLimits(value);\n }\n this.lastEmittedValue = this._value;\n if (!this._firstEmittedValue && this._value) {\n this._firstEmittedValue = this._value;\n }\n if (this._numberFormat) {\n this._updateViewValue();\n }\n }\n\n /** Control value */\n get value(): number | null {\n return this._value;\n }\n\n /** Sets minimum value boundary */\n @Input()\n min: number;\n\n /** Sets maximum value boundary */\n @Input()\n max: number;\n\n /** Sets input step value */\n @Input()\n step = 1;\n\n /** Sets input name attribute */\n @Input()\n name: Nullable<string>;\n\n /** Sets input title attribute */\n @Input()\n inputTitle = '';\n\n /** Sets formatting mode */\n @Input()\n mode: 'decimal' | 'currency' = 'decimal';\n\n /** Sets state of the control. Can be `success`, `error`, `warning`, `information` or blank for default. */\n @Input()\n state: FormStates = 'default';\n\n /** Holds the message with respect to state */\n @Input()\n stateMessage: string | SafeHtml;\n\n /** Custom unit displayed as a label next to the input */\n @Input()\n unit: string;\n\n /** Whether to use grouping when formatting value */\n @Input()\n useGrouping = true;\n\n /** Defines minimal number of fractional digits for control value */\n @Input()\n minFractionDigits: number;\n\n /** Defines maximal number of fractional digits for control value */\n @Input()\n maxFractionDigits: number;\n\n /** Currency used to format value. Check Intl.NumberFormat documentation for more information*/\n @Input()\n currency: string;\n\n /** Currency used to format value. Check Intl.NumberFormat documentation for more information */\n @Input()\n currencyDisplay: string;\n\n /** Whether StepInput should display Increase/Decrease buttons */\n @Input()\n hasStepButtons = true;\n\n /** Horizontally aligns value inside input */\n @Input()\n textAlign: 'left' | 'center' | 'right';\n\n /** Hint displayed inside input before user writes value */\n @Input()\n placeholder = '';\n\n /** Emits event when input gets focused */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFocusIn = new EventEmitter<void>();\n\n /** Emits event when input loses focus */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFocusOut = new EventEmitter<void>();\n\n /** Emits new value when control value has changed */\n @Output()\n valueChange = new EventEmitter<number | null>();\n\n /** @hidden */\n @ViewChild('incrementBtn', { read: ElementRef })\n incrementButton: ElementRef<HTMLButtonElement>;\n\n /** @hidden */\n @ViewChild('decrementBtn', { read: ElementRef })\n decrementButton: ElementRef<HTMLButtonElement>;\n\n /** @hidden */\n @ViewChild('inputElement', { read: ElementRef, static: true })\n inputElement: ElementRef;\n\n /** @hidden */\n lastEmittedValue: Nullable<number>;\n\n /** @hidden */\n currencySign: string;\n\n /** @hidden */\n focused: boolean;\n\n /** @hidden */\n private _value: number | null = null;\n\n /** @hidden */\n private _numerals: RegExp;\n\n /** @hidden */\n private _decimalSeparator: RegExp;\n\n /** @hidden */\n private _currency: RegExp;\n\n /** @hidden */\n private _minusSign: RegExp;\n\n /** @hidden */\n private _groupSeparator: RegExp;\n\n /** @hidden */\n private _numberFormat: NumberFormat;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _index: any;\n\n /** @hidden */\n private _firstEmittedValue: number;\n\n /** @hidden */\n onChange: (value: Nullable<number>) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n constructor(\n @Inject(LOCALE_ID) locale,\n private _changeDetectorRef: ChangeDetectorRef,\n private readonly _liveAnnouncer: LiveAnnouncer,\n readonly _contentDensityObserver: ContentDensityObserver,\n private readonly _elementRef: ElementRef\n ) {\n this.locale = locale;\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._numberFormat = this._getNumberFormat();\n this._buildRegExps();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._updateViewValue();\n this._listenOnButtonsClick();\n }\n\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n registerOnChange(fn: (value: Nullable<number>) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n writeValue(value: number | null): void {\n this.value = value;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** @hidden */\n get canIncrement(): boolean {\n return this.value == null || this.value + this.step <= this._max;\n }\n\n /** @hidden */\n get canDecrement(): boolean {\n return this.value == null || this.value - this.step >= this._min;\n }\n\n /** @hidden */\n get canDisplayLabel(): boolean {\n return !!this.unit || !!this.currencySign;\n }\n\n /** Increment input value by step value */\n increment(): void {\n this._incrementOrDecrement('increment');\n }\n\n /** Decrement input value by step value */\n decrement(): void {\n this._incrementOrDecrement('decrement');\n }\n\n /** @hidden */\n private _incrementOrDecrement(direction: 'increment' | 'decrement'): void {\n if ((direction === 'increment' && this.canIncrement) || (direction === 'decrement' && this.canDecrement)) {\n let _shouldChange = true;\n if (this.value == null && this._firstEmittedValue) {\n this._value = this._firstEmittedValue;\n let _limit: number;\n direction === 'increment' ? (_limit = this.max) : (_limit = this.min);\n if (this._firstEmittedValue === _limit) {\n this._value = _limit;\n _shouldChange = false;\n }\n }\n if (_shouldChange) {\n this._value =\n direction === 'increment'\n ? this._cutFloatingNumberDistortion(this.value!, this.step)\n : this._cutFloatingNumberDistortion(this.value!, -this.step);\n }\n this._emitChangedValue();\n this._updateViewValue();\n }\n }\n\n /** @hidden */\n handleKeyDown(event: KeyboardEvent): void {\n const muteEvent = (evnt: Event): void => {\n evnt.stopPropagation();\n evnt.preventDefault();\n };\n\n if (!this._canChangeValue) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.increment();\n muteEvent(event);\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.decrement();\n muteEvent(event);\n }\n }\n\n /** @hidden */\n handleFocusIn(): void {\n this.focused = true;\n this.onFocusIn.emit();\n }\n\n /** @hidden */\n handleFocusOut(event: FocusEvent): void {\n this.focused = false;\n this.onFocusOut.emit();\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /** @hidden */\n handleScroll(event: WheelEvent): void {\n if (this._canChangeValue && this.focused) {\n if (event.deltaY > 0) {\n this.decrement();\n } else {\n this.increment();\n }\n event.preventDefault();\n }\n }\n\n /** @hidden Updates viewValue and conditionally emits new value.\n * This method is called on (change) event, when user leaves input control. */\n updateOnInputChanged(): void {\n if (this.value !== this.lastEmittedValue) {\n this._emitChangedValue();\n }\n this._updateViewValue();\n }\n\n /** @hidden Track parsed value when user changes value of the input control. */\n trackInputValue(event: any): void {\n const parsedValue = this._parseValue(event.target.value);\n this._value = parsedValue != null ? this._checkValueLimits(parsedValue) : null;\n }\n\n /** @hidden */\n private get _canChangeValue(): boolean {\n return !(this.disabled || this.readonly);\n }\n\n /** @hidden */\n private _cutFloatingNumberDistortion(value: number, step: number): number {\n const stepDecimals = `${step}`.split('.')[1];\n const valueDecimals = `${value}`.split('.')[1];\n const stepDecimalsLength = stepDecimals ? stepDecimals.length : 0;\n const valueDecimalsLength = valueDecimals ? valueDecimals.length : 0;\n const longestDecimal = valueDecimalsLength > stepDecimalsLength ? valueDecimalsLength : stepDecimalsLength;\n\n return Number((value + step).toFixed(longestDecimal));\n }\n\n /** @hidden */\n private _checkValueLimits(value: number): number {\n if (value > this._max) {\n return this._max;\n }\n if (value < this._min) {\n return this._min;\n }\n if (!isNaN(this.maxFractionDigits)) {\n value = Number(value.toFixed(this.maxFractionDigits));\n }\n if (!isNaN(this.minFractionDigits)) {\n value = Number(value.toFixed(this.minFractionDigits));\n }\n return value;\n }\n\n /** @hidden */\n private _emitChangedValue(): void {\n this.lastEmittedValue = this.value;\n this.valueChange.emit(this.value);\n this.onChange(this.value);\n }\n\n /** @hidden */\n private get _max(): number {\n return !isNaN(this.max) ? this.max : Number.MAX_VALUE;\n }\n\n /** @hidden */\n private get _min(): number {\n return !isNaN(this.min) ? this.min : -Number.MAX_VALUE;\n }\n\n /** @hidden */\n private _updateViewValue(): void {\n const value = this._formatToViewValue(this.value);\n this.inputElement.nativeElement.value = value;\n this._liveAnnouncer.announce(value);\n }\n\n /** @hidden */\n private _listenOnButtonsClick(): void {\n if (this.hasStepButtons) {\n this._subscriptions.add(\n this._setupButtonListener(this.incrementButton).subscribe(() => {\n this.increment();\n this._changeDetectorRef.detectChanges();\n })\n );\n\n this._subscriptions.add(\n this._setupButtonListener(this.decrementButton).subscribe(() => {\n this.decrement();\n this._changeDetectorRef.detectChanges();\n })\n );\n }\n }\n\n /**\n * @hidden\n * Listens for click or space/enter keydown events.\n *\n * For long clicks will continuously emit event until \"mouseup\" event is detected\n */\n private _setupButtonListener(elementRef: ElementRef): Observable<any> {\n const onMouseDown$ = fromEvent(elementRef.nativeElement, 'mousedown');\n const onMouseUp$ = fromEvent(window, 'mouseup');\n const onKeyDown$ = fromEvent<KeyboardEvent>(elementRef.nativeElement, 'keydown').pipe(\n filter((event) => KeyUtil.isKeyCode(event, [SPACE, ENTER]))\n );\n\n const timerFactory$ = defer(() =>\n timer(500).pipe(\n switchMap(() => interval(40)),\n takeUntil(onMouseUp$)\n )\n );\n\n return merge(\n onMouseDown$,\n onMouseDown$.pipe(switchMap(() => timerFactory$)),\n // while key is pressed, event will be emitted continuously, so there's no need for timerFactory$\n onKeyDown$\n );\n }\n\n /** @hidden */\n private _parseValue(text: string): Nullable<number> {\n const trimmedText = text.trim();\n\n if (trimmedText === '') {\n return null;\n }\n\n const filteredText = trimmedText\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._groupSeparator, '')\n .replace(this._minusSign, '-')\n .replace(this._decimalSeparator, '.')\n .replace(this._numerals, this._index);\n\n if (filteredText) {\n const parsedValue = Number(filteredText);\n return isNaN(parsedValue) ? this.lastEmittedValue : parsedValue;\n }\n\n return null;\n }\n\n /** @hidden */\n private _getNumberFormat(): NumberFormat {\n if (isDevMode() && this.minFractionDigits > this.maxFractionDigits) {\n throw new Error(\"Range error - minFractionDigits can't be bigger than maxFractionDigits\");\n }\n\n return new NumberFormat(this.locale, {\n localeMatcher: this.localeMatcher ?? undefined,\n style: this.mode,\n currency: this.currency,\n // only available in ES2020 and later\n ['currencyDisplay' as any]: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits\n });\n }\n\n /** @hidden */\n private _getNumeralsExpressions(): RegExp {\n const numerals = [\n ...new NumberFormat(this.locale, { useGrouping: false }).format(9876543210).split('')\n ].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n this._index = (d) => index.get(d);\n\n return new RegExp(`[${numerals.join('')}]`, 'g');\n }\n\n /** @hidden */\n private _getDecimalSeparator(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: false });\n return new RegExp(`[${formatter.format(1.1).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getGroupingSeparator(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: true });\n return new RegExp(`[${formatter.format(1000).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getMinusSignExpression(): RegExp {\n const formatter = new NumberFormat(this.locale, { useGrouping: false });\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numerals, '')}]`, 'g');\n }\n\n /** @hidden */\n private _getCurrencyExpression(): RegExp {\n if (this.currency) {\n const formatter = new NumberFormat(this.locale, {\n style: 'currency',\n currency: this.currency,\n // only available in ES2020 and later\n ['currencyDisplay' as any]: this.currencyDisplay\n });\n this.currencySign = `${formatter\n .format(1)\n .replace(/\\s/g, '')\n .replace(this._numerals, '')\n .replace(this._decimalSeparator, '')\n .replace(this._groupSeparator, '')}`;\n\n return new RegExp(`[${this.currencySign}]`, 'g');\n }\n\n return new RegExp(`[]`, 'g');\n }\n\n /** @hidden */\n private _buildRegExps(): void {\n this._numerals = this._getNumeralsExpressions();\n this._decimalSeparator = this._getDecimalSeparator();\n this._minusSign = this._getMinusSignExpression();\n this._groupSeparator = this._getGroupingSeparator();\n this._currency = this._getCurrencyExpression();\n }\n\n /** @hidden */\n private _formatToViewValue(number: Nullable<number>): string {\n if (number == null) {\n return '';\n } else {\n return this.currency\n ? this._numberFormat.format(number).replace(this._currency, '')\n : this._numberFormat.format(number);\n }\n }\n}\n","<fd-form-input-message-group>\n <div\n class=\"fd-step-input\"\n [class]=\"state ? 'is-' + state : ''\"\n [class.is-focus]=\"focused\"\n [class.is-readonly]=\"readonly\"\n [class.is-disabled]=\"disabled\"\n [class.fd-step-input--compact]=\"_contentDensityObserver.isCompact\"\n [class.fd-step-input--without-buttons]=\"!hasStepButtons\"\n >\n <button\n *ngIf=\"hasStepButtons\"\n fd-button\n #decrementBtn\n fdType=\"transparent\"\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"!canDecrement\"\n [title]=\"decrementButtonTitle || ('coreStepInput.decrementButtonTitle' | fdTranslate)\"\n [glyph]=\"decrementButtonIcon\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"decrementButtonTitle || ('coreStepInput.decrementButtonTitle' | fdTranslate)\"\n [attr.aria-controls]=\"inputId\"\n ></button>\n <input\n #inputElement\n [name]=\"name\"\n [id]=\"inputId\"\n [title]=\"inputTitle\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [class.fd-input--compact]=\"_contentDensityObserver.isCompact\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuemin]=\"min\"\n [attr.aria-describedby]=\"canDisplayLabel ? inputId + '__description' : ''\"\n [attr.aria-required]=\"required\"\n [attr.aria-roledescription]=\"ariaRoleDescription || ('coreStepInput.ariaRoleDescription' | fdTranslate)\"\n (focusin)=\"handleFocusIn()\"\n (wheel)=\"handleScroll($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (input)=\"trackInputValue($event)\"\n (change)=\"updateOnInputChanged()\"\n [style.textAlign]=\"textAlign\"\n class=\"fd-input fd-input--no-number-spinner fd-step-input__input\"\n type=\"text\"\n inputmode=\"numeric\"\n />\n <button\n *ngIf=\"hasStepButtons\"\n fd-button\n #incrementBtn\n fdType=\"transparent\"\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"!canIncrement\"\n [title]=\"incrementButtonTitle || ('coreStepInput.incrementButtonTitle' | fdTranslate)\"\n [glyph]=\"incrementButtonIcon\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"incrementButtonTitle || ('coreStepInput.incrementButtonTitle' | fdTranslate)\"\n [attr.aria-controls]=\"inputId\"\n ></button>\n </div>\n\n <fd-form-message *ngIf=\"!!stateMessage\" [type]=\"state\" [innerHTML]=\"stateMessage\"></fd-form-message>\n</fd-form-input-message-group>\n\n<span *ngIf=\"canDisplayLabel\" [id]=\"inputId + '__description'\" class=\"fd-form-label fd-form-label--unit-description\">\n {{ unit || currencySign }}\n</span>\n","import { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\nimport { Directive, forwardRef } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-step-input[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedStepInputCompactDirective)\n }\n ]\n})\nexport class DeprecatedStepInputCompactDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-step-input');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { FormInputMessageGroupModule, FormMessageModule } from '@fundamental-ngx/core/form';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { I18nModule } from '@fundamental-ngx/i18n';\nimport { StepInputComponent } from './step-input.component';\nimport { DeprecatedStepInputCompactDirective } from './deprecated-step-input-compact.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [StepInputComponent, DeprecatedStepInputCompactDirective],\n imports: [\n CommonModule,\n ButtonModule,\n FormInputMessageGroupModule,\n FormMessageModule,\n A11yModule,\n ContentDensityModule,\n I18nModule\n ],\n exports: [StepInputComponent, DeprecatedStepInputCompactDirective, ContentDensityModule]\n})\nexport class StepInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core",
3
- "version": "0.36.2-rc.3",
3
+ "version": "0.36.2-rc.4",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "description": "Fundamental Library for Angular - core",
6
6
  "license": "Apache-2.0",
@@ -25,7 +25,7 @@
25
25
  "@sap-theming/theming-base-content": "11.1.40",
26
26
  "focus-trap": "6.7.3",
27
27
  "fundamental-styles": "0.25.0-rc.35",
28
- "@fundamental-ngx/i18n": "0.36.2-rc.3",
28
+ "@fundamental-ngx/i18n": "0.36.2-rc.4",
29
29
  "fast-deep-equal": "3.1.3",
30
30
  "lodash-es": "4.17.21",
31
31
  "tslib": "^2.0.0",
@@ -120,6 +120,8 @@ export declare class StepInputComponent implements OnInit, AfterViewInit, OnDest
120
120
  /** @hidden */
121
121
  private _index;
122
122
  /** @hidden */
123
+ private _firstEmittedValue;
124
+ /** @hidden */
123
125
  onChange: (value: Nullable<number>) => void;
124
126
  /** @hidden */
125
127
  onTouched: () => void;
@@ -148,6 +150,8 @@ export declare class StepInputComponent implements OnInit, AfterViewInit, OnDest
148
150
  /** Decrement input value by step value */
149
151
  decrement(): void;
150
152
  /** @hidden */
153
+ private _incrementOrDecrement;
154
+ /** @hidden */
151
155
  handleKeyDown(event: KeyboardEvent): void;
152
156
  /** @hidden */
153
157
  handleFocusIn(): void;