@tetacom/ng-components 1.0.35 → 1.0.36

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.
@@ -26,10 +26,10 @@ export class DefaultHeadCellComponent extends HeadCellComponentBase {
26
26
  }
27
27
  }
28
28
  DefaultHeadCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DefaultHeadCellComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
29
- DefaultHeadCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: DefaultHeadCellComponent, selector: "teta-default-head-cell", inputs: { column: "column", data: "data" }, usesInheritance: true, ngImport: i0, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0}\n"], directives: [{ type: i1.HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29
+ DefaultHeadCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: DefaultHeadCellComponent, selector: "teta-default-head-cell", inputs: { column: "column", data: "data" }, usesInheritance: true, ngImport: i0, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0;padding:6px 8px}\n"], directives: [{ type: i1.HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DefaultHeadCellComponent, decorators: [{
31
31
  type: Component,
32
- args: [{ selector: 'teta-default-head-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0}\n"] }]
32
+ args: [{ selector: 'teta-default-head-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0;padding:6px 8px}\n"] }]
33
33
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { column: [{
34
34
  type: Input
35
35
  }], data: [{
@@ -144,6 +144,46 @@ export class DateUtil {
144
144
  static isValidDate(date) {
145
145
  return date instanceof Date && !isNaN(date.getTime());
146
146
  }
147
+ static millisecondToHumanFormat(milliSeconds, maxValue = 5000, showDays = false) {
148
+ const negative = milliSeconds < 0;
149
+ if (negative) {
150
+ milliSeconds = -milliSeconds;
151
+ }
152
+ let d;
153
+ if (showDays) {
154
+ d = Math.trunc(milliSeconds / (60000 * 60 * 24));
155
+ milliSeconds = milliSeconds - 60000 * 60 * 24 * d;
156
+ }
157
+ const h = Math.trunc(milliSeconds / (60000 * 60));
158
+ milliSeconds = milliSeconds - 60000 * 60 * h;
159
+ const m = Math.trunc(milliSeconds / 60000);
160
+ milliSeconds = milliSeconds - 60000 * m;
161
+ const s = Math.trunc(milliSeconds / 1000);
162
+ milliSeconds = milliSeconds - 1000 * s;
163
+ const frac = milliSeconds;
164
+ let result = m ? m + ' м ' : ''; // start with minutes
165
+ if (maxValue < 60000 * 60) {
166
+ if (s) {
167
+ result = result + s + ' с '; // add seconds value
168
+ }
169
+ if (s === 0 && !m) {
170
+ result = result + '0 c';
171
+ }
172
+ }
173
+ if (maxValue < 5000) {
174
+ result = frac ? result + frac + ' мс ' : result;
175
+ }
176
+ if (h) {
177
+ result = h + ' ч ' + result;
178
+ }
179
+ if (d) {
180
+ result = d + 'д ' + result;
181
+ }
182
+ if (negative) {
183
+ result = '-' + result;
184
+ }
185
+ return result.trim();
186
+ }
147
187
  static fillConvertDates(result, input) {
148
188
  for (const key in input) {
149
189
  if (!input.hasOwnProperty || !input.hasOwnProperty(key)) {
@@ -195,4 +235,4 @@ export class DateUtil {
195
235
  return null;
196
236
  }
197
237
  }
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWwvZGF0ZS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxNQUFNLE9BQU8sUUFBUTtJQUNuQjs7T0FFRztJQUVJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBVSxFQUFFLElBQUksR0FBRyxDQUFDO1FBQzdDLElBQUksSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLEVBQUU7WUFDaEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFcEMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDaEMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBRUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFVLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDeEMsSUFBSSxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksRUFBRTtZQUNoQyxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUVwQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNoQyxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDbkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxLQUFL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eEQ7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQ3BDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNyQjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxVQUFrQjtRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDeEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEMsT0FBTyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cHJlcGVuZFplcm99IGZyb20gJy4uL3BpcGUvdXRpbC9udW1iZXItaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIERhdGVVdGlsIHtcbiAgLyoqXG4gICAqINCS0YvRh9C10YHRgtGMIG4t0LTQvdC10LlcbiAgICovXG5cbiAgcHVibGljIHN0YXRpYyBzdWJ0cmFjdERheXMoZGF0ZTogRGF0ZSwgZGF5cyA9IDApOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuXG4gICAgICBkdC5zZXREYXRlKGR0LmdldERhdGUoKSAtIGRheXMpO1xuICAgICAgcmV0dXJuIGR0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINCU0L7QsdCw0LLQuNGC0Ywgbi3QtNC90LXQuVxuICAgKi9cblxuICBwdWJsaWMgc3RhdGljIGFkZERheXMoZGF0ZTogRGF0ZSwgZGF5cyA9IDApOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuXG4gICAgICBkdC5zZXREYXRlKGR0LmdldERhdGUoKSArIGRheXMpO1xuICAgICAgcmV0dXJuIGR0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINCf0L7Qu9GD0YfQuNGC0Ywg0LTQsNGC0YMg0LjQtyDRgdGC0YDQvtC60LhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VTdHJpbmcoZGF0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKCFkYXQgfHwgZGF0Lmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gZGF0LnNwbGl0KCcgJyk7XG4gICAgY29uc3QgZHRQYXJ0ID0gcGFydHNbMF0uc3BsaXQoJy4nKTtcbiAgICBjb25zdCB0UGFydCA9IHBhcnRzWzFdPy5zcGxpdCgnOicpID8/IFsnMCcsICcwJywgJzAnXTtcbiAgICBjb25zdCBwYXJzZWREYXRlID0gbmV3IERhdGUoXG4gICAgICBwYXJzZUludChkdFBhcnRbMl0sIDEwKSxcbiAgICAgIHBhcnNlSW50KGR0UGFydFsxXSwgMTApIC0gMSxcbiAgICAgIHBhcnNlSW50KGR0UGFydFswXSwgMTApLFxuICAgICAgcGFyc2VJbnQodFBhcnRbMF0sIDEwKSxcbiAgICAgIHBhcnNlSW50KHRQYXJ0WzFdLCAxMCksXG4gICAgICBwYXJzZUludCh0UGFydFsyXSwgMTApXG4gICAgKTtcbiAgICBpZiAoaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gIH1cblxuICAvKipcbiAgICog0J/RgNC40LLQtdGB0YLQuCDQtNCw0YLRgyDQuiDRgdGC0YDQvtC60LVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdG9TdHJpbmcoZGF0OiBEYXRlKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdCB8fCAhKGRhdCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IG1vbnRoID0gZGF0LmdldE1vbnRoKCkgKyAxO1xuICAgIHJldHVybiBgJHtwcmVwZW5kWmVybyhkYXQuZ2V0RGF0ZSgpLCAyKX0uXG4gICAgJHtwcmVwZW5kWmVybyhtb250aCwgMil9LlxuICAgICR7ZGF0LmdldEZ1bGxZZWFyKCl9XG4gICAgJHtwcmVwZW5kWmVybyhkYXQuZ2V0SG91cnMoKSwgMil9OlxuICAgICR7cHJlcGVuZFplcm8oZGF0LmdldE1pbnV0ZXMoKSwgMil9OlxuICAgICR7cHJlcGVuZFplcm8oZGF0LmdldFNlY29uZHMoKSwgMil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDQn9C+0LTQs9C+0YLQvtCy0LrQsCDQtNCw0YLRiyDQuiDQvtGC0L/RgNCw0LLQutC1INC90LAg0YHQtdGA0LLQtdGALCDRh9GC0L7QsdGLINC90LXQsdGL0LvQviDRgdC80LXRidC10L3QuNGPINGH0LDRgdC+0LJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFVUQzJEYXRlTG9jYWwoZGF0ZT86IERhdGUpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0TXM6IG51bWJlciA9XG4gICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKClcbiAgICAgICAgKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XG4gICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSB0aW1lem9uZU9mZnNldE1zKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICog0J/QvtC00LPQvtGC0L7QstC60LAg0LTQsNGC0Ysg0Log0L7RgtC/0YDQsNCy0LrQtSDQvdCwINGB0LXRgNCy0LXRgCwg0YfRgtC+0LHRiyDQvdC10LHRi9C70L4g0YHQvNC10YnQtdC90LjRjyDRh9Cw0YHQvtCyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnZlcnREYXRlTG9jYWwyVVRDKGRhdGU/OiBEYXRlKTogRGF0ZSB8IG51bGwge1xuICAgIGlmIChkYXRlICYmIGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCB0aW1lem9uZU9mZnNldE1zOiBudW1iZXIgPVxuICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xuICAgICAgcmV0dXJuIGRhdGUgPT0gbnVsbCA/IG51bGwgOiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIHRpbWV6b25lT2Zmc2V0TXMpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhpbnB1dDogYW55KTogYW55IHtcbiAgICBjb25zdCByZWdleElzbzg2MDEgPVxuICAgICAgL15cXGR7NH0tXFxkXFxkLVxcZFxcZFRcXGRcXGQ6XFxkXFxkOlxcZFxcZChcXC5cXGQrKT8oKFsrLV1cXGRcXGQ6XFxkXFxkKXxaKT8kL2k7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgcmVnZXhJc284NjAxLnRlc3QoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gRGF0ZVV0aWwuY29udmVydFN0cmluZ1RvTG9jYWxEYXRlKGlucHV0KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ29iamVjdCcgfHwgIWlucHV0KSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGxldCByZXM6IGFueSB8IGFueVtdO1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0ge307XG4gICAgfVxuICAgIHJldHVybiBEYXRlVXRpbC5maWxsQ29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhyZXMsIGlucHV0KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydERhdGVzKGlucHV0OiBhbnkgfCBhbnlbXSk6IGFueSB8IGFueVtdIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnb2JqZWN0JyB8fCAhaW5wdXQpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIERhdGVVdGlsLmNvbnZlcnRVVEMyRGF0ZUxvY2FsKGlucHV0KTtcbiAgICB9XG4gICAgbGV0IHJlczogYW55IHwgYW55W107XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJlcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIERhdGVVdGlsLmZpbGxDb252ZXJ0RGF0ZXMocmVzLCBpbnB1dCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldE1vbnRoRGF5c0NvdW50KGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSArIDEsIDApLmdldERhdGUoKTtcbiAgfVxuXG4gIC8vINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L/QuNGB0L7QuiDQvNC10YHRj9GG0LXQsiDQvNC10LbQtNGDINC00LLRg9C80Y8g0LTQsNGC0LDQvNC4XG4gIHB1YmxpYyBzdGF0aWMgZ2V0UmFuZ2VPZk1vbnRocyhzdGFydDogRGF0ZSwgZW5kOiBEYXRlKTogRGF0ZVtdIHtcbiAgICBpZiAoc3RhcnQgPiBlbmQgfHwgIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByZXNEYXRlczogRGF0ZVtdID0gW107XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBkYXRlVG1wID0gbmV3IERhdGUoc3RhcnQuZ2V0RnVsbFllYXIoKSwgc3RhcnQuZ2V0TW9udGgoKSArIGksIDEpO1xuICAgIHdoaWxlIChlbmQgPj0gZGF0ZVRtcCkge1xuICAgICAgcmVzRGF0ZXMucHVzaChkYXRlVG1wKTtcbiAgICAgIGkrKztcbiAgICAgIGRhdGVUbXAgPSBuZXcgRGF0ZShzdGFydC5nZXRGdWxsWWVhcigpLCBzdGFydC5nZXRNb250aCgpICsgaSwgMSk7XG4gICAgfVxuICAgIHJldHVybiByZXNEYXRlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHJ1bmNhdGVUb01vbnRoKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICBjb25zdCByZXMgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgMSwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHJ1bmNhdGVUb0RheShkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzID0gbmV3IERhdGUoXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICBkYXRlLmdldERhdGUoKSxcbiAgICAgIDAsXG4gICAgICAwLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHJ1bmNhdGVUb0hvdXIoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBEYXRlKFxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgZGF0ZS5nZXREYXRlKCksXG4gICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAwLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9JU09TdHJpbmcoZGF0ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgbmV3IERhdGUoZGF0ZSAtIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKVxuICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAuc2xpY2UoMCwgLTUpICsgJ1onXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZERhdGUoZGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmaWxsQ29udmVydERhdGVzKHJlc3VsdDogYW55LCBpbnB1dDogYW55KTogYW55IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgaWYgKCFpbnB1dC5oYXNPd25Qcm9wZXJ0eSB8fCAhaW5wdXQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGlucHV0W2tleV07XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBEYXRlVXRpbC5jb252ZXJ0VVRDMkRhdGVMb2NhbCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gRGF0ZVV0aWwuY29udmVydERhdGVzKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmaWxsQ29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhyZXN1bHQ6IGFueSwgaW5wdXQ6IGFueSk6IGFueSB7XG4gICAgY29uc3QgcmVnZXhJc284NjAxID1cbiAgICAgIC9eXFxkezR9LVxcZFxcZC1cXGRcXGRUXFxkXFxkOlxcZFxcZDpcXGRcXGQoXFwuXFxkKyk/KChbKy1dXFxkXFxkOlxcZFxcZCl8Wj8pPyQvaTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgaWYgKCFpbnB1dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dFtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVnZXhJc284NjAxLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gRGF0ZVV0aWwuY29udmVydFN0cmluZ1RvTG9jYWxEYXRlKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXN1bHRba2V5XSA9IERhdGVVdGlsLmNvbnZlcnREYXRlU3RyaW5nc1RvRGF0ZXModmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbnZlcnRTdHJpbmdUb0xvY2FsRGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gRGF0ZS5wYXJzZShkYXRlU3RyaW5nKTtcbiAgICBpZiAoIWlzTmFOKG1pbGxpc2Vjb25kcykpIHtcbiAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUobWlsbGlzZWNvbmRzKTtcbiAgICAgIHJldHVybiBEYXRlVXRpbC5jb252ZXJ0RGF0ZUxvY2FsMlVUQyhkdCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWwvZGF0ZS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxNQUFNLE9BQU8sUUFBUTtJQUNuQjs7T0FFRztJQUVJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBVSxFQUFFLElBQUksR0FBRyxDQUFDO1FBQzdDLElBQUksSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLEVBQUU7WUFDaEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFcEMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDaEMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBRUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFVLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDeEMsSUFBSSxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksRUFBRTtZQUNoQyxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUVwQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNoQyxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDbkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxLQUFL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LEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEMsT0FBTyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cHJlcGVuZFplcm99IGZyb20gJy4uL3BpcGUvdXRpbC9udW1iZXItaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIERhdGVVdGlsIHtcbiAgLyoqXG4gICAqINCS0YvRh9C10YHRgtGMIG4t0LTQvdC10LlcbiAgICovXG5cbiAgcHVibGljIHN0YXRpYyBzdWJ0cmFjdERheXMoZGF0ZTogRGF0ZSwgZGF5cyA9IDApOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuXG4gICAgICBkdC5zZXREYXRlKGR0LmdldERhdGUoKSAtIGRheXMpO1xuICAgICAgcmV0dXJuIGR0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINCU0L7QsdCw0LLQuNGC0Ywgbi3QtNC90LXQuVxuICAgKi9cblxuICBwdWJsaWMgc3RhdGljIGFkZERheXMoZGF0ZTogRGF0ZSwgZGF5cyA9IDApOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuXG4gICAgICBkdC5zZXREYXRlKGR0LmdldERhdGUoKSArIGRheXMpO1xuICAgICAgcmV0dXJuIGR0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINCf0L7Qu9GD0YfQuNGC0Ywg0LTQsNGC0YMg0LjQtyDRgdGC0YDQvtC60LhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VTdHJpbmcoZGF0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKCFkYXQgfHwgZGF0Lmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gZGF0LnNwbGl0KCcgJyk7XG4gICAgY29uc3QgZHRQYXJ0ID0gcGFydHNbMF0uc3BsaXQoJy4nKTtcbiAgICBjb25zdCB0UGFydCA9IHBhcnRzWzFdPy5zcGxpdCgnOicpID8/IFsnMCcsICcwJywgJzAnXTtcbiAgICBjb25zdCBwYXJzZWREYXRlID0gbmV3IERhdGUoXG4gICAgICBwYXJzZUludChkdFBhcnRbMl0sIDEwKSxcbiAgICAgIHBhcnNlSW50KGR0UGFydFsxXSwgMTApIC0gMSxcbiAgICAgIHBhcnNlSW50KGR0UGFydFswXSwgMTApLFxuICAgICAgcGFyc2VJbnQodFBhcnRbMF0sIDEwKSxcbiAgICAgIHBhcnNlSW50KHRQYXJ0WzFdLCAxMCksXG4gICAgICBwYXJzZUludCh0UGFydFsyXSwgMTApXG4gICAgKTtcbiAgICBpZiAoaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gIH1cblxuICAvKipcbiAgICog0J/RgNC40LLQtdGB0YLQuCDQtNCw0YLRgyDQuiDRgdGC0YDQvtC60LVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdG9TdHJpbmcoZGF0OiBEYXRlKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdCB8fCAhKGRhdCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IG1vbnRoID0gZGF0LmdldE1vbnRoKCkgKyAxO1xuICAgIHJldHVybiBgJHtwcmVwZW5kWmVybyhkYXQuZ2V0RGF0ZSgpLCAyKX0uXG4gICAgJHtwcmVwZW5kWmVybyhtb250aCwgMil9LlxuICAgICR7ZGF0LmdldEZ1bGxZZWFyKCl9XG4gICAgJHtwcmVwZW5kWmVybyhkYXQuZ2V0SG91cnMoKSwgMil9OlxuICAgICR7cHJlcGVuZFplcm8oZGF0LmdldE1pbnV0ZXMoKSwgMil9OlxuICAgICR7cHJlcGVuZFplcm8oZGF0LmdldFNlY29uZHMoKSwgMil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDQn9C+0LTQs9C+0YLQvtCy0LrQsCDQtNCw0YLRiyDQuiDQvtGC0L/RgNCw0LLQutC1INC90LAg0YHQtdGA0LLQtdGALCDRh9GC0L7QsdGLINC90LXQsdGL0LvQviDRgdC80LXRidC10L3QuNGPINGH0LDRgdC+0LJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFVUQzJEYXRlTG9jYWwoZGF0ZT86IERhdGUpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0TXM6IG51bWJlciA9XG4gICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKClcbiAgICAgICAgKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XG4gICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSB0aW1lem9uZU9mZnNldE1zKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICog0J/QvtC00LPQvtGC0L7QstC60LAg0LTQsNGC0Ysg0Log0L7RgtC/0YDQsNCy0LrQtSDQvdCwINGB0LXRgNCy0LXRgCwg0YfRgtC+0LHRiyDQvdC10LHRi9C70L4g0YHQvNC10YnQtdC90LjRjyDRh9Cw0YHQvtCyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnZlcnREYXRlTG9jYWwyVVRDKGRhdGU/OiBEYXRlKTogRGF0ZSB8IG51bGwge1xuICAgIGlmIChkYXRlICYmIGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCB0aW1lem9uZU9mZnNldE1zOiBudW1iZXIgPVxuICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xuICAgICAgcmV0dXJuIGRhdGUgPT0gbnVsbCA/IG51bGwgOiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIHRpbWV6b25lT2Zmc2V0TXMpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhpbnB1dDogYW55KTogYW55IHtcbiAgICBjb25zdCByZWdleElzbzg2MDEgPVxuICAgICAgL15cXGR7NH0tXFxkXFxkLVxcZFxcZFRcXGRcXGQ6XFxkXFxkOlxcZFxcZChcXC5cXGQrKT8oKFsrLV1cXGRcXGQ6XFxkXFxkKXxaKT8kL2k7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgcmVnZXhJc284NjAxLnRlc3QoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gRGF0ZVV0aWwuY29udmVydFN0cmluZ1RvTG9jYWxEYXRlKGlucHV0KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ29iamVjdCcgfHwgIWlucHV0KSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGxldCByZXM6IGFueSB8IGFueVtdO1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0ge307XG4gICAgfVxuICAgIHJldHVybiBEYXRlVXRpbC5maWxsQ29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhyZXMsIGlucHV0KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydERhdGVzKGlucHV0OiBhbnkgfCBhbnlbXSk6IGFueSB8IGFueVtdIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnb2JqZWN0JyB8fCAhaW5wdXQpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIERhdGVVdGlsLmNvbnZlcnRVVEMyRGF0ZUxvY2FsKGlucHV0KTtcbiAgICB9XG4gICAgbGV0IHJlczogYW55IHwgYW55W107XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJlcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIERhdGVVdGlsLmZpbGxDb252ZXJ0RGF0ZXMocmVzLCBpbnB1dCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldE1vbnRoRGF5c0NvdW50KGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSArIDEsIDApLmdldERhdGUoKTtcbiAgfVxuXG4gIC8vINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L/QuNGB0L7QuiDQvNC10YHRj9GG0LXQsiDQvNC10LbQtNGDINC00LLRg9C80Y8g0LTQsNGC0LDQvNC4XG4gIHB1YmxpYyBzdGF0aWMgZ2V0UmFuZ2VPZk1vbnRocyhzdGFydDogRGF0ZSwgZW5kOiBEYXRlKTogRGF0ZVtdIHtcbiAgICBpZiAoc3RhcnQgPiBlbmQgfHwgIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByZXNEYXRlczogRGF0ZVtdID0gW107XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBkYXRlVG1wID0gbmV3IERhdGUoc3RhcnQuZ2V0RnVsbFllYXIoKSwgc3RhcnQuZ2V0TW9udGgoKSArIGksIDEpO1xuICAgIHdoaWxlIChlbmQgPj0gZGF0ZVRtcCkge1xuICAgICAgcmVzRGF0ZXMucHVzaChkYXRlVG1wKTtcbiAgICAgIGkrKztcbiAgICAgIGRhdGVUbXAgPSBuZXcgRGF0ZShzdGFydC5nZXRGdWxsWWVhcigpLCBzdGFydC5nZXRNb250aCgpICsgaSwgMSk7XG4gICAgfVxuICAgIHJldHVybiByZXNEYXRlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHJ1bmNhdGVUb01vbnRoKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICBjb25zdCByZXMgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgMSwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHJ1bmNhdGVUb0RheShkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzID0gbmV3IERhdGUoXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICBkYXRlLmdldERhdGUoKSxcbiAgICAgIDAsXG4gICAgICAwLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHJ1bmNhdGVUb0hvdXIoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBEYXRlKFxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgZGF0ZS5nZXREYXRlKCksXG4gICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAwLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9JU09TdHJpbmcoZGF0ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgbmV3IERhdGUoZGF0ZSAtIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKVxuICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAuc2xpY2UoMCwgLTUpICsgJ1onXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZERhdGUoZGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG1pbGxpc2Vjb25kVG9IdW1hbkZvcm1hdChtaWxsaVNlY29uZHM6IG51bWJlciwgbWF4VmFsdWUgPSA1MDAwLCBzaG93RGF5cyA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBjb25zdCBuZWdhdGl2ZSA9IG1pbGxpU2Vjb25kcyA8IDA7XG4gICAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgICBtaWxsaVNlY29uZHMgPSAtbWlsbGlTZWNvbmRzO1xuICAgIH1cbiAgICBsZXQgZDtcbiAgICBpZiAoc2hvd0RheXMpIHtcbiAgICAgIGQgPSBNYXRoLnRydW5jKG1pbGxpU2Vjb25kcyAvICg2MDAwMCAqIDYwICogMjQpKTtcbiAgICAgIG1pbGxpU2Vjb25kcyA9IG1pbGxpU2Vjb25kcyAtIDYwMDAwICogNjAgKiAyNCAqIGQ7XG4gICAgfVxuICAgIGNvbnN0IGggPSBNYXRoLnRydW5jKG1pbGxpU2Vjb25kcyAvICg2MDAwMCAqIDYwKSk7XG4gICAgbWlsbGlTZWNvbmRzID0gbWlsbGlTZWNvbmRzIC0gNjAwMDAgKiA2MCAqIGg7XG4gICAgY29uc3QgbSA9IE1hdGgudHJ1bmMobWlsbGlTZWNvbmRzIC8gNjAwMDApO1xuICAgIG1pbGxpU2Vjb25kcyA9IG1pbGxpU2Vjb25kcyAtIDYwMDAwICogbTtcbiAgICBjb25zdCBzID0gTWF0aC50cnVuYyhtaWxsaVNlY29uZHMgLyAxMDAwKTtcbiAgICBtaWxsaVNlY29uZHMgPSBtaWxsaVNlY29uZHMgLSAxMDAwICogcztcbiAgICBjb25zdCBmcmFjID0gbWlsbGlTZWNvbmRzO1xuICAgIGxldCByZXN1bHQgPSBtID8gbSArICcg0LwgJyA6ICcnOyAvLyBzdGFydCB3aXRoIG1pbnV0ZXNcbiAgICBpZiAobWF4VmFsdWUgPCA2MDAwMCAqIDYwKSB7XG4gICAgICBpZiAocykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBzICsgJyDRgSAnOyAvLyBhZGQgc2Vjb25kcyB2YWx1ZVxuICAgICAgfVxuXG4gICAgICBpZihzID09PSAwICYmICFtKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICcwIGMnXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtYXhWYWx1ZSA8IDUwMDApIHtcbiAgICAgIHJlc3VsdCA9IGZyYWMgPyByZXN1bHQgKyBmcmFjICsgJyDQvNGBICcgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKGgpIHtcbiAgICAgIHJlc3VsdCA9IGggKyAnINGHICcgKyByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChkKSB7XG4gICAgICByZXN1bHQgPSBkICsgJ9C0ICcgKyByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChuZWdhdGl2ZSkge1xuICAgICAgcmVzdWx0ID0gJy0nICsgcmVzdWx0O1xuICAgIH1cblxuXG5cbiAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpbGxDb252ZXJ0RGF0ZXMocmVzdWx0OiBhbnksIGlucHV0OiBhbnkpOiBhbnkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICBpZiAoIWlucHV0Lmhhc093blByb3BlcnR5IHx8ICFpbnB1dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gaW5wdXRba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IERhdGVVdGlsLmNvbnZlcnRVVEMyRGF0ZUxvY2FsKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBEYXRlVXRpbC5jb252ZXJ0RGF0ZXModmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpbGxDb252ZXJ0RGF0ZVN0cmluZ3NUb0RhdGVzKHJlc3VsdDogYW55LCBpbnB1dDogYW55KTogYW55IHtcbiAgICBjb25zdCByZWdleElzbzg2MDEgPVxuICAgICAgL15cXGR7NH0tXFxkXFxkLVxcZFxcZFRcXGRcXGQ6XFxkXFxkOlxcZFxcZChcXC5cXGQrKT8oKFsrLV1cXGRcXGQ6XFxkXFxkKXxaPyk/JC9pO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICBpZiAoIWlucHV0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0W2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiByZWdleElzbzg2MDEudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBEYXRlVXRpbC5jb252ZXJ0U3RyaW5nVG9Mb2NhbERhdGUodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gRGF0ZVV0aWwuY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY29udmVydFN0cmluZ1RvTG9jYWxEYXRlKGRhdGVTdHJpbmc6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBEYXRlLnBhcnNlKGRhdGVTdHJpbmcpO1xuICAgIGlmICghaXNOYU4obWlsbGlzZWNvbmRzKSkge1xuICAgICAgY29uc3QgZHQgPSBuZXcgRGF0ZShtaWxsaXNlY29uZHMpO1xuICAgICAgcmV0dXJuIERhdGVVdGlsLmNvbnZlcnREYXRlTG9jYWwyVVRDKGR0KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -704,6 +704,46 @@ class DateUtil {
704
704
  static isValidDate(date) {
705
705
  return date instanceof Date && !isNaN(date.getTime());
706
706
  }
707
+ static millisecondToHumanFormat(milliSeconds, maxValue = 5000, showDays = false) {
708
+ const negative = milliSeconds < 0;
709
+ if (negative) {
710
+ milliSeconds = -milliSeconds;
711
+ }
712
+ let d;
713
+ if (showDays) {
714
+ d = Math.trunc(milliSeconds / (60000 * 60 * 24));
715
+ milliSeconds = milliSeconds - 60000 * 60 * 24 * d;
716
+ }
717
+ const h = Math.trunc(milliSeconds / (60000 * 60));
718
+ milliSeconds = milliSeconds - 60000 * 60 * h;
719
+ const m = Math.trunc(milliSeconds / 60000);
720
+ milliSeconds = milliSeconds - 60000 * m;
721
+ const s = Math.trunc(milliSeconds / 1000);
722
+ milliSeconds = milliSeconds - 1000 * s;
723
+ const frac = milliSeconds;
724
+ let result = m ? m + ' м ' : ''; // start with minutes
725
+ if (maxValue < 60000 * 60) {
726
+ if (s) {
727
+ result = result + s + ' с '; // add seconds value
728
+ }
729
+ if (s === 0 && !m) {
730
+ result = result + '0 c';
731
+ }
732
+ }
733
+ if (maxValue < 5000) {
734
+ result = frac ? result + frac + ' мс ' : result;
735
+ }
736
+ if (h) {
737
+ result = h + ' ч ' + result;
738
+ }
739
+ if (d) {
740
+ result = d + 'д ' + result;
741
+ }
742
+ if (negative) {
743
+ result = '-' + result;
744
+ }
745
+ return result.trim();
746
+ }
707
747
  static fillConvertDates(result, input) {
708
748
  for (const key in input) {
709
749
  if (!input.hasOwnProperty || !input.hasOwnProperty(key)) {
@@ -8005,10 +8045,10 @@ class DefaultHeadCellComponent extends HeadCellComponentBase {
8005
8045
  }
8006
8046
  }
8007
8047
  DefaultHeadCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DefaultHeadCellComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
8008
- DefaultHeadCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: DefaultHeadCellComponent, selector: "teta-default-head-cell", inputs: { column: "column", data: "data" }, usesInheritance: true, ngImport: i0, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0}\n"], directives: [{ type: HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8048
+ DefaultHeadCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: DefaultHeadCellComponent, selector: "teta-default-head-cell", inputs: { column: "column", data: "data" }, usesInheritance: true, ngImport: i0, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0;padding:6px 8px}\n"], directives: [{ type: HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8009
8049
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DefaultHeadCellComponent, decorators: [{
8010
8050
  type: Component,
8011
- args: [{ selector: 'teta-default-head-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0}\n"] }]
8051
+ args: [{ selector: 'teta-default-head-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0;padding:6px 8px}\n"] }]
8012
8052
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { column: [{
8013
8053
  type: Input
8014
8054
  }], data: [{