angular-toolbox 0.12.1 → 0.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +1 -1
  2. package/esm2022/lib/component/angular-toolbox-logo/angular-toolbox-logo.component.mjs +3 -3
  3. package/esm2022/lib/framework/logging/connector/console-log-connector.mjs +2 -2
  4. package/esm2022/lib/framework/logging/impl/log-impl.mjs +4 -1
  5. package/esm2022/lib/framework/logging/util/log.builder.mjs +2 -2
  6. package/esm2022/lib/framework/logging/util/log.util.mjs +3 -3
  7. package/esm2022/lib/framework/mock/http-monitoring-console/component/abstract/log-renderer-base.mjs +34 -0
  8. package/esm2022/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.mjs +16 -17
  9. package/esm2022/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.mjs +25 -15
  10. package/esm2022/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.mjs +41 -119
  11. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.mjs +38 -13
  12. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.mjs +15 -4
  13. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.mjs +12 -4
  14. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.mjs +36 -16
  15. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/request-info-renderer/request-info-renderer.component.mjs +43 -0
  16. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/request-list-renderer/request-list-renderer.component.mjs +116 -0
  17. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.mjs +63 -24
  18. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.mjs +72 -28
  19. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/spinner/spinner.component.mjs +22 -0
  20. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.mjs +53 -27
  21. package/esm2022/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.mjs +45 -21
  22. package/esm2022/lib/framework/mock/http-monitoring-console/connector/http-monitoring-console-log-connector.mjs +15 -8
  23. package/esm2022/lib/framework/mock/http-monitoring-console/index.mjs +1 -1
  24. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-action-type.mjs +27 -1
  25. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-action.mjs +1 -1
  26. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-json.mjs +1 -1
  27. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-is-imported-log.mjs +5 -1
  28. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-timeline-data.mjs +9 -0
  29. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-body-dto.mjs +1 -1
  30. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-header-dto.mjs +1 -1
  31. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log-metadata.dto.mjs +1 -1
  32. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log.dto.mjs +1 -1
  33. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request-metadata.dto.ts.mjs +1 -1
  34. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request.dto.mjs +1 -1
  35. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-response.dto.mjs +1 -1
  36. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/hmfl.mjs +1 -1
  37. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-log-io.service.mjs +71 -43
  38. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.controller.mjs +96 -0
  39. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.state.mjs +126 -0
  40. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-user-action.service.mjs +40 -0
  41. package/esm2022/lib/framework/mock/http-monitoring-console/util/console-body-type.mjs +33 -1
  42. package/esm2022/lib/framework/mock/http-monitoring-console/util/console-type-class.mjs +29 -1
  43. package/esm2022/lib/framework/mock/http-monitoring-console/util/data.util.mjs +21 -1
  44. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/body-converter.mjs +40 -0
  45. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/body-serializer.mjs +58 -0
  46. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/form-data-serializer.mjs +33 -0
  47. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/hmfl-builder.mjs +27 -0
  48. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/http-request-converter.mjs +62 -0
  49. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/http-response-converter.mjs +50 -0
  50. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/log-converter.mjs +43 -0
  51. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/log-headers-converter.mjs +53 -0
  52. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/log-message.util.mjs +30 -0
  53. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/log-metadata-converter.mjs +45 -0
  54. package/esm2022/lib/framework/mock/http-monitoring-console/util/io/request-metadata-converter.mjs +47 -0
  55. package/esm2022/lib/framework/mock/http-monitoring-console/util/size.util.mjs +24 -2
  56. package/esm2022/lib/framework/mock/http-monitoring-console/util/timeline.util.mjs +28 -0
  57. package/esm2022/lib/framework/mock/http-monitoring-console/util/url.util.mjs +26 -1
  58. package/esm2022/lib/model/business/logging/atx-logger-config.provider.mjs +21 -0
  59. package/esm2022/lib/model/business/logging/index.mjs +3 -1
  60. package/esm2022/lib/model/business/logging/log-level.enum.mjs +1 -2
  61. package/esm2022/lib/model/business/logging/logger-config.mjs +9 -0
  62. package/esm2022/lib/model/business/logging/logger.mjs +1 -1
  63. package/esm2022/lib/model/business/logging/transactional-logger.mjs +1 -1
  64. package/esm2022/lib/model/business/mock/http/popup/atx-http-mock-console-popup.mjs +9 -0
  65. package/esm2022/lib/model/service/logging/logger-service.mjs +21 -4
  66. package/esm2022/lib/model/service/mock/http/logging/atx-http-mock-console.service.mjs +94 -0
  67. package/esm2022/lib/model/service/mock/http/logging/http-mock-logging-service.mjs +6 -3
  68. package/esm2022/lib/model/service/mock/http/logging/index.mjs +2 -1
  69. package/esm2022/lib/model/service/ui/app-bridge.service.mjs +1 -1
  70. package/esm2022/lib/model/service/version/angular-toolbox-version.service.mjs +3 -3
  71. package/fesm2022/angular-toolbox.mjs +3085 -1961
  72. package/fesm2022/angular-toolbox.mjs.map +1 -1
  73. package/lib/framework/logging/connector/console-log-connector.d.ts +1 -1
  74. package/lib/framework/logging/impl/log-impl.d.ts +3 -0
  75. package/lib/framework/logging/util/log.builder.d.ts +1 -1
  76. package/lib/framework/logging/util/log.util.d.ts +2 -2
  77. package/lib/framework/mock/http-monitoring-console/component/abstract/log-renderer-base.d.ts +28 -0
  78. package/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.d.ts +11 -4
  79. package/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.d.ts +18 -16
  80. package/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.d.ts +16 -37
  81. package/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.d.ts +20 -4
  82. package/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.d.ts +11 -0
  83. package/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.d.ts +8 -0
  84. package/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.d.ts +18 -11
  85. package/lib/framework/mock/http-monitoring-console/component/renderer/request-info-renderer/request-info-renderer.component.d.ts +25 -0
  86. package/lib/framework/mock/http-monitoring-console/component/renderer/request-list-renderer/request-list-renderer.component.d.ts +57 -0
  87. package/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.d.ts +27 -12
  88. package/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.d.ts +41 -7
  89. package/lib/framework/mock/http-monitoring-console/component/renderer/spinner/spinner.component.d.ts +9 -0
  90. package/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.d.ts +29 -3
  91. package/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.d.ts +36 -12
  92. package/lib/framework/mock/http-monitoring-console/connector/http-monitoring-console-log-connector.d.ts +10 -5
  93. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-action-type.d.ts +27 -1
  94. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-action.d.ts +12 -0
  95. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-json.d.ts +20 -0
  96. package/lib/framework/mock/http-monitoring-console/model/business/atx-is-imported-log.d.ts +4 -0
  97. package/lib/framework/mock/http-monitoring-console/model/business/atx-timeline-data.d.ts +21 -0
  98. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-body-dto.d.ts +14 -1
  99. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-header-dto.d.ts +12 -0
  100. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log-metadata.dto.d.ts +14 -1
  101. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log.dto.d.ts +7 -0
  102. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request-metadata.dto.ts.d.ts +6 -0
  103. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request.dto.d.ts +38 -1
  104. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-response.dto.d.ts +26 -1
  105. package/lib/framework/mock/http-monitoring-console/model/business/io/hmfl.d.ts +12 -0
  106. package/lib/framework/mock/http-monitoring-console/model/service/atx-log-io.service.d.ts +24 -2
  107. package/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.controller.d.ts +55 -0
  108. package/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.state.d.ts +75 -0
  109. package/lib/framework/mock/http-monitoring-console/model/service/atx-user-action.service.d.ts +32 -0
  110. package/lib/framework/mock/http-monitoring-console/util/console-body-type.d.ts +32 -0
  111. package/lib/framework/mock/http-monitoring-console/util/console-type-class.d.ts +28 -0
  112. package/lib/framework/mock/http-monitoring-console/util/data.util.d.ts +20 -0
  113. package/lib/framework/mock/http-monitoring-console/util/io/body-converter.d.ts +30 -0
  114. package/lib/framework/mock/http-monitoring-console/util/io/body-serializer.d.ts +32 -0
  115. package/lib/framework/mock/http-monitoring-console/util/io/form-data-serializer.d.ts +21 -0
  116. package/lib/framework/mock/http-monitoring-console/util/io/hmfl-builder.d.ts +23 -0
  117. package/lib/framework/mock/http-monitoring-console/util/io/http-request-converter.d.ts +31 -0
  118. package/lib/framework/mock/http-monitoring-console/util/io/http-response-converter.d.ts +31 -0
  119. package/lib/framework/mock/http-monitoring-console/util/io/log-converter.d.ts +31 -0
  120. package/lib/framework/mock/http-monitoring-console/util/io/log-headers-converter.d.ts +31 -0
  121. package/lib/framework/mock/http-monitoring-console/util/io/log-message.util.d.ts +23 -0
  122. package/lib/framework/mock/http-monitoring-console/util/io/log-metadata-converter.d.ts +31 -0
  123. package/lib/framework/mock/http-monitoring-console/util/io/request-metadata-converter.d.ts +31 -0
  124. package/lib/framework/mock/http-monitoring-console/util/size.util.d.ts +22 -0
  125. package/lib/framework/mock/http-monitoring-console/util/timeline.util.d.ts +23 -0
  126. package/lib/framework/mock/http-monitoring-console/util/url.util.d.ts +25 -0
  127. package/lib/model/business/logging/atx-logger-config.provider.d.ts +21 -0
  128. package/lib/model/business/logging/index.d.ts +2 -0
  129. package/lib/model/business/logging/log-level.enum.d.ts +0 -1
  130. package/lib/model/business/logging/logger-config.d.ts +17 -0
  131. package/lib/model/business/logging/logger.d.ts +5 -5
  132. package/lib/model/business/logging/transactional-logger.d.ts +1 -1
  133. package/lib/model/business/mock/http/popup/atx-http-mock-console-popup.d.ts +23 -0
  134. package/lib/model/service/logging/logger-service.d.ts +6 -1
  135. package/lib/model/service/mock/http/logging/atx-http-mock-console.service.d.ts +53 -0
  136. package/lib/model/service/mock/http/logging/http-mock-logging-service.d.ts +1 -0
  137. package/lib/model/service/mock/http/logging/index.d.ts +1 -0
  138. package/package.json +1 -1
  139. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/body-converter.mjs +0 -22
  140. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/body-serializer.mjs +0 -47
  141. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/http-request-converter.mjs +0 -44
  142. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/http-response-converter.mjs +0 -32
  143. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-converter.mjs +0 -31
  144. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-headers-converter.mjs +0 -35
  145. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-message.util.mjs +0 -19
  146. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-metadata-converter.mjs +0 -27
  147. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/request-metadata-converter.mjs +0 -29
  148. package/lib/framework/mock/http-monitoring-console/model/service/io/body-converter.d.ts +0 -12
  149. package/lib/framework/mock/http-monitoring-console/model/service/io/body-serializer.d.ts +0 -13
  150. package/lib/framework/mock/http-monitoring-console/model/service/io/http-request-converter.d.ts +0 -13
  151. package/lib/framework/mock/http-monitoring-console/model/service/io/http-response-converter.d.ts +0 -13
  152. package/lib/framework/mock/http-monitoring-console/model/service/io/log-converter.d.ts +0 -13
  153. package/lib/framework/mock/http-monitoring-console/model/service/io/log-headers-converter.d.ts +0 -13
  154. package/lib/framework/mock/http-monitoring-console/model/service/io/log-message.util.d.ts +0 -12
  155. package/lib/framework/mock/http-monitoring-console/model/service/io/log-metadata-converter.d.ts +0 -13
  156. package/lib/framework/mock/http-monitoring-console/model/service/io/request-metadata-converter.d.ts +0 -13
@@ -11,61 +11,105 @@ import { DataUtil } from '../../../util/data.util';
11
11
  import { ConsoleBodyType } from '../../../util/console-body-type';
12
12
  import { SafeHtmlPipe } from '../../../../../../pipe';
13
13
  import { UrlUtil } from '../../../util/url.util';
14
+ import { AtxLogRendererBase } from '../../abstract/log-renderer-base';
14
15
  import * as i0 from "@angular/core";
15
16
  import * as i1 from "@angular/platform-browser";
17
+ /**
18
+ * @Private
19
+ */
16
20
  const IMG_TYPE = 'image/';
17
- const SVG_TYPE = 'svg/';
18
- export class AtxResponsePreviewRendererComponent {
19
- set data(value) {
20
- const body = value.body;
21
- this.revokeObjectURL();
21
+ /**
22
+ * @private
23
+ * The component that displays HTTP response data preview in the ATX monitoring console.
24
+ */
25
+ export class AtxResponsePreviewRendererComponent extends AtxLogRendererBase {
26
+ /**
27
+ * @private
28
+ */
29
+ set log(value) {
30
+ super.log = value;
31
+ this.ngOnDestroy();
32
+ if (!value)
33
+ return;
34
+ const metadata = value.metadata;
35
+ const response = metadata.response;
36
+ if (!response)
37
+ return;
38
+ const body = response.body;
22
39
  this.response = value;
23
40
  this.json = this.text = this.imgUrl = this.trustUrl = null;
24
- if (body) {
25
- const bodyType = DataUtil.getBodyType(body);
26
- if (bodyType === ConsoleBodyType.TEXT)
27
- this.text = body;
28
- else if (bodyType === ConsoleBodyType.JSON)
29
- this.json = body;
30
- else if (bodyType === ConsoleBodyType.BLOB) {
31
- if (body.type.startsWith(IMG_TYPE) ||
32
- body.type.startsWith(SVG_TYPE)) {
33
- this.resourceName = UrlUtil.getResourceNameFromPath(value.url);
34
- const url = URL.createObjectURL(body);
35
- this.imgUrl = url;
36
- this.trustUrl = this.sanitizer.bypassSecurityTrustUrl(url);
37
- }
41
+ if (!body)
42
+ return;
43
+ const bodyType = DataUtil.getBodyType(body);
44
+ if (bodyType === ConsoleBodyType.TEXT) {
45
+ this.text = body;
46
+ return;
47
+ }
48
+ if (bodyType === ConsoleBodyType.JSON) {
49
+ this.json = body;
50
+ return;
51
+ }
52
+ if (bodyType === ConsoleBodyType.BLOB) {
53
+ const type = body.type;
54
+ if (type.startsWith(IMG_TYPE)) {
55
+ this.resourceName = UrlUtil.getResourceNameFromPath(response.url);
56
+ const url = URL.createObjectURL(body);
57
+ this.imgUrl = url;
58
+ this.trustUrl = this.sanitizer.bypassSecurityTrustUrl(url);
38
59
  }
39
60
  }
40
- this._cdr.detectChanges();
41
61
  }
42
- constructor(_cdr, sanitizer) {
43
- this._cdr = _cdr;
62
+ /**
63
+ * @private
64
+ */
65
+ constructor(sanitizer) {
66
+ super();
44
67
  this.sanitizer = sanitizer;
68
+ /**
69
+ * @private
70
+ */
45
71
  this.json = null;
72
+ /**
73
+ * @private
74
+ */
46
75
  this.text = null;
76
+ /**
77
+ * @private
78
+ */
47
79
  this.response = null;
80
+ /**
81
+ * @private
82
+ */
48
83
  this.imgUrl = null;
84
+ /**
85
+ * @private
86
+ */
49
87
  this.trustUrl = null;
50
88
  }
89
+ /**
90
+ * @private
91
+ */
51
92
  ngOnDestroy() {
52
93
  this.revokeObjectURL();
53
- this.json = this.text = this.imgUrl = this.trustUrl = null;
94
+ this.json = this.text = this.json = this.response = this.imgUrl = this.trustUrl = null;
54
95
  }
96
+ /**
97
+ * @private
98
+ */
55
99
  revokeObjectURL() {
56
100
  if (this.imgUrl)
57
101
  URL.revokeObjectURL(this.imgUrl);
58
102
  }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxResponsePreviewRendererComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxResponsePreviewRendererComponent, isStandalone: true, selector: "atx-response-preview-renderer", inputs: { data: "data" }, ngImport: i0, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (response) {\r\n @if (text) {\r\n <section class=\"content\" [innerHTML]=\"text | safeHtml \"></section>\r\n } @else if (json) {\r\n <section class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </section>\r\n } @else if (imgUrl) {\r\n <section class=\"content img-preview\">\r\n <div>\r\n <img [src]=\"imgUrl\" (load)=\"revokeObjectURL()\" [alt]=\"resourceName\" [title]=\"resourceName\">\r\n </div>\r\n </section>\r\n } @else {\r\n <section class=\"content center-content\">\r\n <strong>Preview not available</strong>\r\n </section>\r\n }\r\n}\r\n", styles: [":host{font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:13px;--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;color:#000;background-color:#fff;display:block}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)}.header-btn{padding:4px;margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}::ng-deep .xdebug-error{font-size:12px!important}.img-preview{text-align:center}.img-preview div{box-shadow:0 4px 10px #000000bf;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUAQMAAAC3R49OAAAABlBMVEX////09PQtDxrOAAAAE0lEQVQI12P4f4CBKMxg/4EYDAAFkR1NiYvv7QAAAABJRU5ErkJggg==);background-image:linear-gradient(45deg,#F0F0F0 25%,transparent 25%),linear-gradient(-45deg,#F0F0F0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#F0F0F0 75%),linear-gradient(-45deg,transparent 75%,#F0F0F0 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px;display:inline-block}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], dependencies: [{ kind: "component", type: AtxJsonViewerComponent, selector: "atx-json-viewer", inputs: ["data"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
103
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxResponsePreviewRendererComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
104
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxResponsePreviewRendererComponent, isStandalone: true, selector: "atx-response-preview-renderer", inputs: { log: "log" }, usesInheritance: true, ngImport: i0, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (response) {\r\n @if (text) {\r\n <section class=\"content\" [innerHTML]=\"text | safeHtml \"></section>\r\n } @else if (json) {\r\n <section class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </section>\r\n } @else if (imgUrl) {\r\n <section class=\"content img-preview\">\r\n <div>\r\n <img [src]=\"imgUrl\" (load)=\"revokeObjectURL()\" [alt]=\"resourceName\" [title]=\"resourceName\">\r\n </div>\r\n </section>\r\n } @else {\r\n <section class=\"content center-content\">\r\n <strong>Preview not available</strong>\r\n </section>\r\n }\r\n}\r\n", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}::ng-deep .xdebug-error{font-size:12px!important}.img-preview{text-align:center}.img-preview div{box-shadow:0 4px 10px #000000bf;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUAQMAAAC3R49OAAAABlBMVEX////09PQtDxrOAAAAE0lEQVQI12P4f4CBKMxg/4EYDAAFkR1NiYvv7QAAAABJRU5ErkJggg==);background-image:linear-gradient(45deg,#F0F0F0 25%,transparent 25%),linear-gradient(-45deg,#F0F0F0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#F0F0F0 75%),linear-gradient(-45deg,transparent 75%,#F0F0F0 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px;display:inline-block}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], dependencies: [{ kind: "component", type: AtxJsonViewerComponent, selector: "atx-json-viewer", inputs: ["data"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
61
105
  }
62
106
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxResponsePreviewRendererComponent, decorators: [{
63
107
  type: Component,
64
108
  args: [{ selector: 'atx-response-preview-renderer', standalone: true, imports: [
65
109
  AtxJsonViewerComponent,
66
110
  SafeHtmlPipe
67
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (response) {\r\n @if (text) {\r\n <section class=\"content\" [innerHTML]=\"text | safeHtml \"></section>\r\n } @else if (json) {\r\n <section class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </section>\r\n } @else if (imgUrl) {\r\n <section class=\"content img-preview\">\r\n <div>\r\n <img [src]=\"imgUrl\" (load)=\"revokeObjectURL()\" [alt]=\"resourceName\" [title]=\"resourceName\">\r\n </div>\r\n </section>\r\n } @else {\r\n <section class=\"content center-content\">\r\n <strong>Preview not available</strong>\r\n </section>\r\n }\r\n}\r\n", styles: [":host{font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:13px;--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;color:#000;background-color:#fff;display:block}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)}.header-btn{padding:4px;margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}::ng-deep .xdebug-error{font-size:12px!important}.img-preview{text-align:center}.img-preview div{box-shadow:0 4px 10px #000000bf;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUAQMAAAC3R49OAAAABlBMVEX////09PQtDxrOAAAAE0lEQVQI12P4f4CBKMxg/4EYDAAFkR1NiYvv7QAAAABJRU5ErkJggg==);background-image:linear-gradient(45deg,#F0F0F0 25%,transparent 25%),linear-gradient(-45deg,#F0F0F0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#F0F0F0 75%),linear-gradient(-45deg,transparent 75%,#F0F0F0 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px;display:inline-block}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
68
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }], propDecorators: { data: [{
111
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (response) {\r\n @if (text) {\r\n <section class=\"content\" [innerHTML]=\"text | safeHtml \"></section>\r\n } @else if (json) {\r\n <section class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </section>\r\n } @else if (imgUrl) {\r\n <section class=\"content img-preview\">\r\n <div>\r\n <img [src]=\"imgUrl\" (load)=\"revokeObjectURL()\" [alt]=\"resourceName\" [title]=\"resourceName\">\r\n </div>\r\n </section>\r\n } @else {\r\n <section class=\"content center-content\">\r\n <strong>Preview not available</strong>\r\n </section>\r\n }\r\n}\r\n", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}::ng-deep .xdebug-error{font-size:12px!important}.img-preview{text-align:center}.img-preview div{box-shadow:0 4px 10px #000000bf;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUAQMAAAC3R49OAAAABlBMVEX////09PQtDxrOAAAAE0lEQVQI12P4f4CBKMxg/4EYDAAFkR1NiYvv7QAAAABJRU5ErkJggg==);background-image:linear-gradient(45deg,#F0F0F0 25%,transparent 25%),linear-gradient(-45deg,#F0F0F0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#F0F0F0 75%),linear-gradient(-45deg,transparent 75%,#F0F0F0 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px;display:inline-block}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
112
+ }], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { log: [{
69
113
  type: Input
70
114
  }] } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtcHJldmlldy1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwLW1vbml0b3JpbmctY29uc29sZS9jb21wb25lbnQvcmVuZGVyZXIvcmVzcG9uc2UtcHJldmlldy1yZW5kZXJlci9yZXNwb25zZS1wcmV2aWV3LXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9yZXNwb25zZS1wcmV2aWV3LXJlbmRlcmVyL3Jlc3BvbnNlLXByZXZpZXctcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBRWpELE1BQU0sUUFBUSxHQUFXLFFBQVEsQ0FBQztBQUNsQyxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFhaEMsTUFBTSxPQUFPLG1DQUFtQztJQVU5QyxJQUNXLElBQUksQ0FBRSxLQUF3QjtRQUN2QyxNQUFNLElBQUksR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUMzRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsTUFBTSxRQUFRLEdBQW9CLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0QsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUk7Z0JBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7aUJBQ25ELElBQUksUUFBUSxLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUN4RCxJQUFJLFFBQVEsS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO29CQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBRSxLQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hFLE1BQU0sR0FBRyxHQUFXLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO29CQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdELENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQW9CLElBQXVCLEVBQ3ZCLFNBQXVCO1FBRHZCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFoQ2pDLFNBQUksR0FBUSxJQUFJLENBQUM7UUFDakIsU0FBSSxHQUFrQixJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFRLElBQUksQ0FBQztRQUNyQixXQUFNLEdBQWtCLElBQUksQ0FBQztRQUM3QixhQUFRLEdBQW1CLElBQUksQ0FBQztJQTRCSSxDQUFDO0lBRXhDLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzdELENBQUM7SUFFUyxlQUFlO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDOzhHQTNDVSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyxtSEMvQmhELDA4QkE0QkEscWhFREpJLHNCQUFzQix5RUFDdEIsWUFBWTs7MkZBTUgsbUNBQW1DO2tCQVgvQyxTQUFTOytCQUNFLCtCQUErQixjQUM3QixJQUFJLFdBQ1A7d0JBQ1Asc0JBQXNCO3dCQUN0QixZQUFZO3FCQUNiLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNO2lIQWFwQyxJQUFJO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cclxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdHhKc29uVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vanNvbi12aWV3ZXIvanNvbi12aWV3ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL2RhdGEudXRpbCc7XHJcbmltcG9ydCB7IENvbnNvbGVCb2R5VHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWwvY29uc29sZS1ib2R5LXR5cGUnO1xyXG5pbXBvcnQgeyBTYWZlSHRtbFBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9waXBlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgVXJsVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXJsLnV0aWwnO1xyXG5cclxuY29uc3QgSU1HX1RZUEU6IHN0cmluZyA9ICdpbWFnZS8nO1xyXG5jb25zdCBTVkdfVFlQRTogc3RyaW5nID0gJ3N2Zy8nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHgtcmVzcG9uc2UtcHJldmlldy1yZW5kZXJlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBBdHhKc29uVmlld2VyQ29tcG9uZW50LFxyXG4gICAgU2FmZUh0bWxQaXBlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzcG9uc2UtcHJldmlldy1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3Jlc3BvbnNlLXByZXZpZXctcmVuZGVyZXIuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdHhSZXNwb25zZVByZXZpZXdSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHByb3RlY3RlZCBqc29uOiBhbnkgPSBudWxsO1xyXG4gIHByb3RlY3RlZCB0ZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcmVzcG9uc2U6IGFueSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGltZ1VybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHRydXN0VXJsOiBTYWZlVXJsIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJlc291cmNlTmFtZSE6IHN0cmluZztcclxuXHJcbiAgXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGRhdGEgKHZhbHVlOiBIdHRwUmVzcG9uc2U8YW55Pikge1xyXG4gICAgY29uc3QgYm9keTogYW55ID0gdmFsdWUuYm9keTtcclxuICAgIHRoaXMucmV2b2tlT2JqZWN0VVJMKCk7XHJcbiAgICB0aGlzLnJlc3BvbnNlID0gdmFsdWU7XHJcbiAgICB0aGlzLmpzb24gPSB0aGlzLnRleHQgPSB0aGlzLmltZ1VybCA9IHRoaXMudHJ1c3RVcmwgPSBudWxsO1xyXG4gICAgaWYgKGJvZHkpIHtcclxuICAgICAgY29uc3QgYm9keVR5cGU6IENvbnNvbGVCb2R5VHlwZSA9IERhdGFVdGlsLmdldEJvZHlUeXBlKGJvZHkpO1xyXG4gICAgICBpZiAoYm9keVR5cGUgPT09IENvbnNvbGVCb2R5VHlwZS5URVhUKSB0aGlzLnRleHQgPSBib2R5O1xyXG4gICAgICBlbHNlIGlmIChib2R5VHlwZSA9PT0gQ29uc29sZUJvZHlUeXBlLkpTT04pIHRoaXMuanNvbiA9IGJvZHk7XHJcbiAgICAgIGVsc2UgaWYgKGJvZHlUeXBlID09PSBDb25zb2xlQm9keVR5cGUuQkxPQikge1xyXG4gICAgICAgIGlmIChib2R5LnR5cGUuc3RhcnRzV2l0aChJTUdfVFlQRSkgfHxcclxuICAgICAgICBib2R5LnR5cGUuc3RhcnRzV2l0aChTVkdfVFlQRSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc291cmNlTmFtZSA9IFVybFV0aWwuZ2V0UmVzb3VyY2VOYW1lRnJvbVBhdGgoKHZhbHVlIGFzIGFueSkudXJsKTtcclxuICAgICAgICAgICAgICBjb25zdCB1cmw6IHN0cmluZyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYm9keSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbWdVcmwgPSB1cmw7XHJcbiAgICAgICAgICAgICAgdGhpcy50cnVzdFVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJldm9rZU9iamVjdFVSTCgpO1xyXG4gICAgdGhpcy5qc29uID0gdGhpcy50ZXh0ID0gdGhpcy5pbWdVcmwgPSB0aGlzLnRydXN0VXJsID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXZva2VPYmplY3RVUkwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbWdVcmwpIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5pbWdVcmwpO1xyXG4gIH1cclxufVxyXG4iLCJcclxuPCEtLVxyXG4gKiBMSUNFTlNFXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbi0tPlxyXG5cclxuQGlmIChyZXNwb25zZSkge1xyXG4gICAgQGlmICh0ZXh0KSB7XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjb250ZW50XCIgW2lubmVySFRNTF09XCJ0ZXh0IHwgc2FmZUh0bWwgXCI+PC9zZWN0aW9uPlxyXG4gICAgfSBAZWxzZSBpZiAoanNvbikge1xyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICA8YXR4LWpzb24tdmlld2VyIFtkYXRhXT1cImpzb25cIi8+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgfSBAZWxzZSBpZiAoaW1nVXJsKSB7XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjb250ZW50IGltZy1wcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWdVcmxcIiAobG9hZCk9XCJyZXZva2VPYmplY3RVUkwoKVwiIFthbHRdPVwicmVzb3VyY2VOYW1lXCIgW3RpdGxlXT1cInJlc291cmNlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjb250ZW50IGNlbnRlci1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zdHJvbmc+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgfVxyXG59XHJcbiJdfQ==
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtcHJldmlldy1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwLW1vbml0b3JpbmctY29uc29sZS9jb21wb25lbnQvcmVuZGVyZXIvcmVzcG9uc2UtcHJldmlldy1yZW5kZXJlci9yZXNwb25zZS1wcmV2aWV3LXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9yZXNwb25zZS1wcmV2aWV3LXJlbmRlcmVyL3Jlc3BvbnNlLXByZXZpZXctcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7QUFHdEU7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxRQUFRLENBQUM7QUFFbEM7OztHQUdHO0FBWUgsTUFBTSxPQUFPLG1DQUFvQyxTQUFRLGtCQUFrQjtJQWdDekU7O09BRUc7SUFDSCxJQUNvQixHQUFHLENBQUMsS0FBaUI7UUFDdkMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixNQUFNLFFBQVEsR0FBNEIsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUN6RCxNQUFNLFFBQVEsR0FBdUIsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU07UUFDckIsTUFBTSxJQUFJLEdBQVEsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUMzRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsTUFBTSxRQUFRLEdBQW9CLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFFLFFBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNFLE1BQU0sR0FBRyxHQUFXLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO2dCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFvQixTQUF1QjtRQUN6QyxLQUFLLEVBQUUsQ0FBQztRQURVLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFwRTNDOztXQUVHO1FBQ08sU0FBSSxHQUFRLElBQUksQ0FBQztRQUUzQjs7V0FFRztRQUNPLFNBQUksR0FBa0IsSUFBSSxDQUFDO1FBRXJDOztXQUVHO1FBQ08sYUFBUSxHQUFRLElBQUksQ0FBQztRQUUvQjs7V0FFRztRQUNPLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBRXZDOztXQUVHO1FBQ08sYUFBUSxHQUFtQixJQUFJLENBQUM7SUErQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN6RixDQUFDO0lBRUQ7O09BRUc7SUFDTyxlQUFlO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDOzhHQXZGVSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyx3SUN2Q2hELDA4QkE0QkEseXBFRElJLHNCQUFzQix5RUFDdEIsWUFBWTs7MkZBTUgsbUNBQW1DO2tCQVgvQyxTQUFTOytCQUNFLCtCQUErQixjQUM3QixJQUFJLFdBQ1A7d0JBQ1Asc0JBQXNCO3dCQUN0QixZQUFZO3FCQUNiLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNO2lGQXNDM0IsR0FBRztzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXR4SnNvblZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2pzb24tdmlld2VyL2pzb24tdmlld2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9kYXRhLnV0aWwnO1xyXG5pbXBvcnQgeyBDb25zb2xlQm9keVR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvbnNvbGUtYm9keS10eXBlJztcclxuaW1wb3J0IHsgU2FmZUh0bWxQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vcGlwZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFVybFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3VybC51dGlsJztcclxuaW1wb3J0IHsgQXR4TG9nUmVuZGVyZXJCYXNlIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3QvbG9nLXJlbmRlcmVyLWJhc2UnO1xyXG5pbXBvcnQgeyBIdHRwTW9ja0xvZ2dpbmdNZXRhZGF0YSwgTG9nIH0gZnJvbSAncHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9wdWJsaWMtYXBpJztcclxuXHJcbi8qKlxyXG4gKiBAUHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgSU1HX1RZUEU6IHN0cmluZyA9ICdpbWFnZS8nO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqIFRoZSBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyBIVFRQIHJlc3BvbnNlIGRhdGEgcHJldmlldyBpbiB0aGUgQVRYIG1vbml0b3JpbmcgY29uc29sZS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXR4LXJlc3BvbnNlLXByZXZpZXctcmVuZGVyZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQXR4SnNvblZpZXdlckNvbXBvbmVudCxcclxuICAgIFNhZmVIdG1sUGlwZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3BvbnNlLXByZXZpZXctcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9yZXNwb25zZS1wcmV2aWV3LXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR4UmVzcG9uc2VQcmV2aWV3UmVuZGVyZXJDb21wb25lbnQgZXh0ZW5kcyBBdHhMb2dSZW5kZXJlckJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBqc29uOiBhbnkgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB0ZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZXNwb25zZTogYW55ID0gbnVsbDtcclxuICBcclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpbWdVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHRydXN0VXJsOiBTYWZlVXJsIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVzb3VyY2VOYW1lITogc3RyaW5nO1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGxvZyh2YWx1ZTogTG9nIHwgbnVsbCkge1xyXG4gICAgc3VwZXIubG9nID0gdmFsdWU7XHJcbiAgICB0aGlzLm5nT25EZXN0cm95KCk7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcbiAgICBjb25zdCBtZXRhZGF0YTogSHR0cE1vY2tMb2dnaW5nTWV0YWRhdGEgPSB2YWx1ZS5tZXRhZGF0YTsgXHJcbiAgICBjb25zdCByZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4gPSAgbWV0YWRhdGEucmVzcG9uc2U7XHJcbiAgICBpZiAoIXJlc3BvbnNlKSByZXR1cm5cclxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICB0aGlzLnJlc3BvbnNlID0gdmFsdWU7XHJcbiAgICB0aGlzLmpzb24gPSB0aGlzLnRleHQgPSB0aGlzLmltZ1VybCA9IHRoaXMudHJ1c3RVcmwgPSBudWxsO1xyXG4gICAgaWYgKCFib2R5KSByZXR1cm47XHJcbiAgICBjb25zdCBib2R5VHlwZTogQ29uc29sZUJvZHlUeXBlID0gRGF0YVV0aWwuZ2V0Qm9keVR5cGUoYm9keSk7XHJcbiAgICBpZiAoYm9keVR5cGUgPT09IENvbnNvbGVCb2R5VHlwZS5URVhUKSB7XHJcbiAgICAgIHRoaXMudGV4dCA9IGJvZHk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChib2R5VHlwZSA9PT0gQ29uc29sZUJvZHlUeXBlLkpTT04pIHtcclxuICAgICAgdGhpcy5qc29uID0gYm9keTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGJvZHlUeXBlID09PSBDb25zb2xlQm9keVR5cGUuQkxPQikge1xyXG4gICAgICBjb25zdCB0eXBlID0gYm9keS50eXBlO1xyXG4gICAgICBpZiAodHlwZS5zdGFydHNXaXRoKElNR19UWVBFKSkge1xyXG4gICAgICAgIHRoaXMucmVzb3VyY2VOYW1lID0gVXJsVXRpbC5nZXRSZXNvdXJjZU5hbWVGcm9tUGF0aCgocmVzcG9uc2UgYXMgYW55KS51cmwpO1xyXG4gICAgICAgIGNvbnN0IHVybDogc3RyaW5nID0gVVJMLmNyZWF0ZU9iamVjdFVSTChib2R5KTtcclxuICAgICAgICB0aGlzLmltZ1VybCA9IHVybDtcclxuICAgICAgICB0aGlzLnRydXN0VXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh1cmwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmV2b2tlT2JqZWN0VVJMKCk7XHJcbiAgICB0aGlzLmpzb24gPSB0aGlzLnRleHQgPSB0aGlzLmpzb24gPSB0aGlzLnJlc3BvbnNlID0gdGhpcy5pbWdVcmwgPSB0aGlzLnRydXN0VXJsID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHJldm9rZU9iamVjdFVSTCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmltZ1VybCkgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLmltZ1VybCk7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48IS0tXHJcbiAqIExJQ0VOU0VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuLS0+XHJcblxyXG5AaWYgKHJlc3BvbnNlKSB7XHJcbiAgICBAaWYgKHRleHQpIHtcclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRlbnRcIiBbaW5uZXJIVE1MXT1cInRleHQgfCBzYWZlSHRtbCBcIj48L3NlY3Rpb24+XHJcbiAgICB9IEBlbHNlIGlmIChqc29uKSB7XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxhdHgtanNvbi12aWV3ZXIgW2RhdGFdPVwianNvblwiLz5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICB9IEBlbHNlIGlmIChpbWdVcmwpIHtcclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRlbnQgaW1nLXByZXZpZXdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltZ1VybFwiIChsb2FkKT1cInJldm9rZU9iamVjdFVSTCgpXCIgW2FsdF09XCJyZXNvdXJjZU5hbWVcIiBbdGl0bGVdPVwicmVzb3VyY2VOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRlbnQgY2VudGVyLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPHN0cm9uZz5QcmV2aWV3IG5vdCBhdmFpbGFibGU8L3N0cm9uZz5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be found in
6
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
+ */
8
+ import { Component } from '@angular/core';
9
+ import * as i0 from "@angular/core";
10
+ /**
11
+ * @private
12
+ * A spinner icon component.
13
+ */
14
+ export class AtxSpinnerComponent {
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
16
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: AtxSpinnerComponent, isStandalone: true, selector: "atx-spinner", ngImport: i0, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41m-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9\"/>\r\n <path fill-rule=\"evenodd\" d=\"M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5 5 0 0 0 8 3M3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9z\"/>\r\n</svg>\r\n", styles: [":host{width:20px;height:20px}:host svg{animation:spinnerRotation 1.5s linear infinite}@keyframes spinnerRotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxSpinnerComponent, decorators: [{
19
+ type: Component,
20
+ args: [{ selector: 'atx-spinner', standalone: true, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41m-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9\"/>\r\n <path fill-rule=\"evenodd\" d=\"M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5 5 0 0 0 8 3M3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9z\"/>\r\n</svg>\r\n", styles: [":host{width:20px;height:20px}:host svg{animation:spinnerRotation 1.5s linear infinite}@keyframes spinnerRotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwLW1vbml0b3JpbmctY29uc29sZS9jb21wb25lbnQvcmVuZGVyZXIvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9zcGlubmVyL3NwaW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFMUM7OztHQUdHO0FBT0gsTUFBTSxPQUFPLG1CQUFtQjs4R0FBbkIsbUJBQW1CO2tHQUFuQixtQkFBbUIsdUVDcEJoQyxxeUJBWUE7OzJGRFFhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEEgc3Bpbm5lciBpY29uIGNvbXBvbmVudC5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXR4LXNwaW5uZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NwaW5uZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zcGlubmVyLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR4U3Bpbm5lckNvbXBvbmVudCB7fVxyXG4iLCI8IS0tXHJcbiAqIExJQ0VOU0VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuLS0+XHJcblxyXG48c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XHJcbiAgICA8cGF0aCBkPVwiTTExLjUzNCA3aDMuOTMyYS4yNS4yNSAwIDAgMSAuMTkyLjQxbC0xLjk2NiAyLjM2YS4yNS4yNSAwIDAgMS0uMzg0IDBsLTEuOTY2LTIuMzZhLjI1LjI1IDAgMCAxIC4xOTItLjQxbS0xMSAyaDMuOTMyYS4yNS4yNSAwIDAgMCAuMTkyLS40MUwyLjY5MiA2LjIzYS4yNS4yNSAwIDAgMC0uMzg0IDBMLjM0MiA4LjU5QS4yNS4yNSAwIDAgMCAuNTM0IDlcIi8+XHJcbiAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk04IDNjLTEuNTUyIDAtMi45NC43MDctMy44NTcgMS44MThhLjUuNSAwIDEgMS0uNzcxLS42MzZBNi4wMDIgNi4wMDIgMCAwIDEgMTMuOTE3IDdIMTIuOUE1IDUgMCAwIDAgOCAzTTMuMSA5YTUuMDAyIDUuMDAyIDAgMCAwIDguNzU3IDIuMTgyLjUuNSAwIDEgMSAuNzcxLjYzNkE2LjAwMiA2LjAwMiAwIDAgMSAyLjA4MyA5elwiLz5cclxuPC9zdmc+XHJcbiJdfQ==
@@ -5,51 +5,77 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be found in
6
6
  * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
7
  */
8
- import { Component, Input } from '@angular/core';
8
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
9
9
  import { DatePipe, NgStyle } from '@angular/common';
10
+ import { AtxLogRendererBase } from '../../abstract/log-renderer-base';
11
+ import { TimelineUtil } from '../../../util/timeline.util';
10
12
  import * as i0 from "@angular/core";
11
- export class AtxTimingRendererComponent {
13
+ /**
14
+ * @private
15
+ * The component that displays the timeline of an HTTP response in the ATX monitoring console.
16
+ */
17
+ export class AtxTimingRendererComponent extends AtxLogRendererBase {
12
18
  constructor() {
19
+ super(...arguments);
20
+ /**
21
+ * @private
22
+ */
13
23
  this.hasData = false;
24
+ /**
25
+ * @private
26
+ */
14
27
  this.start = NaN;
28
+ /**
29
+ * @private
30
+ */
15
31
  this.downloadStart = NaN;
32
+ /**
33
+ * @private
34
+ */
16
35
  this.downloadLength = NaN;
36
+ /**
37
+ * @private
38
+ */
17
39
  this.duration = 0;
40
+ /**
41
+ * @private
42
+ */
18
43
  this.error = false;
19
44
  }
20
- set data(value) {
21
- if (value) {
22
- const metadata = value.metadata;
23
- const requestMetadata = metadata.requestMetadata;
24
- const duration = requestMetadata.duration;
25
- const stalled = requestMetadata.stalled;
26
- this.error = metadata.response.status >= 400;
27
- this.hasData = true;
28
- this.start = requestMetadata.start;
29
- this.duration = duration;
30
- if (duration === 0) {
31
- this.downloadStart = this.downloadLength = 0;
32
- return;
33
- }
34
- const downloadLength = Math.round(100 * (duration - stalled) / duration);
35
- this.downloadStart = 100 - downloadLength;
36
- this.downloadLength = downloadLength;
45
+ /**
46
+ * @private
47
+ */
48
+ set log(value) {
49
+ super.log = value;
50
+ if (!value) {
51
+ this.hasData = this.error = false;
52
+ this.start = this.downloadStart = this.downloadLength = NaN;
53
+ this.duration = 0;
37
54
  return;
38
55
  }
39
- this.hasData = this.error = false;
40
- this.start = this.downloadStart = this.downloadLength = NaN;
41
- this.duration = 0;
56
+ const metadata = value.metadata;
57
+ const response = metadata.response;
58
+ if (!response)
59
+ return;
60
+ const requestMetadata = metadata.requestMetadata;
61
+ this.error = response.status >= 400;
62
+ this.hasData = true;
63
+ this.start = requestMetadata.start;
64
+ this.duration = requestMetadata.duration;
65
+ const timelineData = TimelineUtil.getTimelineData(requestMetadata);
66
+ this.downloadStart = timelineData.downloadStart;
67
+ this.downloadLength = timelineData.downloadLength;
42
68
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxTimingRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
44
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxTimingRendererComponent, isStandalone: true, selector: "atx-timing-renderer", inputs: { data: "data" }, ngImport: i0, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<section class=\"content\">\r\n@if (hasData) {\r\n <dl>\r\n <dt>Connection start</dt>\r\n <dd>{{ start | date: 'short' }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request/Response</dt>\r\n <dd class=\"timeline\">\r\n <div>\r\n <div [attr.style]=\"'width:' + downloadStart + '%'\">\r\n stalled\r\n <div class=\"stalled\"></div>\r\n <div class=\"time\">{{ downloadStart }} ms</div>\r\n </div>\r\n <div [attr.style]=\"'width:' + downloadLength + '%;margin-left:' + downloadStart + '%'\">\r\n download\r\n <div class=\"download\" [class.error]=\"error\"></div>\r\n <div class=\"time\">{{ duration }} ms</div>\r\n </div>\r\n </div>\r\n </dd>\r\n </dl>\r\n} \r\n</section>\r\n", styles: [":host{font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:13px;--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;color:#000;background-color:#fff;display:block}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)}.header-btn{padding:4px;margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}.timeline{width:100%;margin-top:6px}.download,.stalled{width:100%;height:10px}.stalled{background-color:var(--dark-gray)}.time{text-align:right;padding-right:4px}.download{background-color:#00bfff}.error{background-color:red}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }] }); }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxTimingRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
70
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxTimingRendererComponent, isStandalone: true, selector: "atx-timing-renderer", inputs: { log: "log" }, usesInheritance: true, ngImport: i0, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (hasData) {\r\n <section class=\"content\">\r\n <dl>\r\n <dt>Connection start</dt>\r\n <dd>{{ start | date: 'short' }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request/Response</dt>\r\n <dd class=\"timeline\">\r\n <div>\r\n <div [attr.style]=\"'width:' + downloadStart + '%'\">\r\n stalled\r\n <div class=\"stalled\"></div>\r\n <div class=\"time\">{{ downloadStart }} ms</div>\r\n </div>\r\n <div [attr.style]=\"'width:' + downloadLength + '%;margin-left:' + downloadStart + '%'\">\r\n download\r\n <div class=\"download\" [class.error]=\"error\"></div>\r\n <div class=\"time\">{{ duration }} ms</div>\r\n </div>\r\n </div>\r\n </dd>\r\n </dl>\r\n </section>\r\n} \r\n\r\n", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}.download,.stalled{width:100%;height:10px}.stalled{background-color:var(--dark-gray)}.time{text-align:right;padding-right:4px}.download{background-color:#00bfff}.error{background-color:red}dl{margin:0 0 10px}dt{font-weight:700;margin-bottom:4px}dd{width:calc(100% - 40px);margin-left:20px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
45
71
  }
46
72
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxTimingRendererComponent, decorators: [{
47
73
  type: Component,
48
74
  args: [{ selector: 'atx-timing-renderer', standalone: true, imports: [
49
75
  DatePipe,
50
76
  NgStyle
51
- ], template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<section class=\"content\">\r\n@if (hasData) {\r\n <dl>\r\n <dt>Connection start</dt>\r\n <dd>{{ start | date: 'short' }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request/Response</dt>\r\n <dd class=\"timeline\">\r\n <div>\r\n <div [attr.style]=\"'width:' + downloadStart + '%'\">\r\n stalled\r\n <div class=\"stalled\"></div>\r\n <div class=\"time\">{{ downloadStart }} ms</div>\r\n </div>\r\n <div [attr.style]=\"'width:' + downloadLength + '%;margin-left:' + downloadStart + '%'\">\r\n download\r\n <div class=\"download\" [class.error]=\"error\"></div>\r\n <div class=\"time\">{{ duration }} ms</div>\r\n </div>\r\n </div>\r\n </dd>\r\n </dl>\r\n} \r\n</section>\r\n", styles: [":host{font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:13px;--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;color:#000;background-color:#fff;display:block}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)}.header-btn{padding:4px;margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}.timeline{width:100%;margin-top:6px}.download,.stalled{width:100%;height:10px}.stalled{background-color:var(--dark-gray)}.time{text-align:right;padding-right:4px}.download{background-color:#00bfff}.error{background-color:red}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
52
- }], propDecorators: { data: [{
77
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (hasData) {\r\n <section class=\"content\">\r\n <dl>\r\n <dt>Connection start</dt>\r\n <dd>{{ start | date: 'short' }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request/Response</dt>\r\n <dd class=\"timeline\">\r\n <div>\r\n <div [attr.style]=\"'width:' + downloadStart + '%'\">\r\n stalled\r\n <div class=\"stalled\"></div>\r\n <div class=\"time\">{{ downloadStart }} ms</div>\r\n </div>\r\n <div [attr.style]=\"'width:' + downloadLength + '%;margin-left:' + downloadStart + '%'\">\r\n download\r\n <div class=\"download\" [class.error]=\"error\"></div>\r\n <div class=\"time\">{{ duration }} ms</div>\r\n </div>\r\n </div>\r\n </dd>\r\n </dl>\r\n </section>\r\n} \r\n\r\n", styles: [":host{--border-color: lightblue;--background-color: aliceblue;--selected-color: #d9eeff;--selected-error-color: lavenderblush;--light-gray: whitesmoke;--dark-gray: gainsboro;--header-height: 26px;display:block}:host,table{padding:0;margin:0;font-family:Verdana,Geneva,Tahoma,sans-serif;font-size:12px;color:#000;background-color:#fff}menu{padding:0;margin:0;display:flex;align-items:center;gap:6px;list-style:none}table{border-collapse:collapse}th{padding:0 0 0 6px;background-color:var(--background-color);border-bottom:1px solid var(--border-color);position:sticky;top:0}th:not(:last-child){border-right:1px solid var(--border-color)}td{padding:2px 6px;vertical-align:top}tr:nth-child(2n):not(.selected-row){background-color:var(--background-color)}.error-row{color:red}.selected-row{background-color:var(--selected-color)}.error-row.selected-row{background-color:var(--selected-error-color)}tr:hover{background-color:var(--light-gray)!important}th{height:var(--header-height)}.header-btn{margin-left:auto}.header-btn:hover{background-color:var(--selected-color)}.menu-separator{width:0;height:16px;border-right:2px solid var(--dark-gray)}.content{padding:4px 6px}.center-content{display:flex;justify-content:center}summary{-webkit-user-select:none;user-select:none}.download,.stalled{width:100%;height:10px}.stalled{background-color:var(--dark-gray)}.time{text-align:right;padding-right:4px}.download{background-color:#00bfff}.error{background-color:red}dl{margin:0 0 10px}dt{font-weight:700;margin-bottom:4px}dd{width:calc(100% - 40px);margin-left:20px}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
78
+ }], propDecorators: { log: [{
53
79
  type: Input
54
80
  }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltaW5nLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci90aW1pbmctcmVuZGVyZXIvdGltaW5nLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci90aW1pbmctcmVuZGVyZXIvdGltaW5nLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBWXBELE1BQU0sT0FBTywwQkFBMEI7SUFWdkM7UUFZWSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFVBQUssR0FBVyxHQUFHLENBQUM7UUFDcEIsa0JBQWEsR0FBVyxHQUFHLENBQUM7UUFDNUIsbUJBQWMsR0FBVyxHQUFHLENBQUM7UUFDN0IsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixVQUFLLEdBQVksS0FBSyxDQUFDO0tBMEJsQztJQXhCQyxJQUNXLElBQUksQ0FBQyxLQUFVO1FBQ3hCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLFFBQVEsR0FBUSxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ3JDLE1BQU0sZUFBZSxHQUE0QixRQUFRLENBQUMsZUFBZSxDQUFDO1lBQzFFLE1BQU0sUUFBUSxHQUFXLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDbEQsTUFBTSxPQUFPLEdBQVcsZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztZQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQzdDLE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxjQUFjLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsY0FBYyxDQUFDO1lBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7UUFDNUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQzs4R0FoQ1UsMEJBQTBCO2tHQUExQiwwQkFBMEIseUdDdEJ2QyxxcENBaUNBLGlvRERqQkksUUFBUTs7MkZBTUMsMEJBQTBCO2tCQVZ0QyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1A7d0JBQ1AsUUFBUTt3QkFDUixPQUFPO3FCQUNSOzhCQWNVLElBQUk7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cE1vY2tSZXF1ZXN0TWV0YWRhdGEsIExvZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVsJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHgtdGltaW5nLXJlbmRlcmVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIERhdGVQaXBlLFxyXG4gICAgTmdTdHlsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWluZy1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RpbWluZy1yZW5kZXJlci5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0eFRpbWluZ1JlbmRlcmVyQ29tcG9uZW50IHtcclxuXHJcbiAgcHJvdGVjdGVkIGhhc0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgc3RhcnQ6IG51bWJlciA9IE5hTjtcclxuICBwcm90ZWN0ZWQgZG93bmxvYWRTdGFydDogbnVtYmVyID0gTmFOO1xyXG4gIHByb3RlY3RlZCBkb3dubG9hZExlbmd0aDogbnVtYmVyID0gTmFOO1xyXG4gIHByb3RlY3RlZCBkdXJhdGlvbjogbnVtYmVyID0gMDtcclxuICBwcm90ZWN0ZWQgZXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IExvZykge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IG1ldGFkYXRhOiBhbnkgPSB2YWx1ZS5tZXRhZGF0YTtcclxuICAgICAgY29uc3QgcmVxdWVzdE1ldGFkYXRhOiBIdHRwTW9ja1JlcXVlc3RNZXRhZGF0YSA9IG1ldGFkYXRhLnJlcXVlc3RNZXRhZGF0YTtcclxuICAgICAgY29uc3QgZHVyYXRpb246IG51bWJlciA9IHJlcXVlc3RNZXRhZGF0YS5kdXJhdGlvbjtcclxuICAgICAgY29uc3Qgc3RhbGxlZDogbnVtYmVyID0gcmVxdWVzdE1ldGFkYXRhLnN0YWxsZWQ7XHJcbiAgICAgIHRoaXMuZXJyb3IgPSBtZXRhZGF0YS5yZXNwb25zZS5zdGF0dXMgPj0gNDAwO1xyXG4gICAgICB0aGlzLmhhc0RhdGEgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN0YXJ0ID0gcmVxdWVzdE1ldGFkYXRhLnN0YXJ0O1xyXG4gICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZG93bmxvYWRTdGFydCA9IHRoaXMuZG93bmxvYWRMZW5ndGggPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkb3dubG9hZExlbmd0aDogbnVtYmVyID0gTWF0aC5yb3VuZCgxMDAgKiAoZHVyYXRpb24gLSBzdGFsbGVkKSAvIGR1cmF0aW9uKTtcclxuICAgICAgdGhpcy5kb3dubG9hZFN0YXJ0ID0gMTAwIC0gZG93bmxvYWRMZW5ndGg7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRMZW5ndGggPSBkb3dubG9hZExlbmd0aDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oYXNEYXRhID0gdGhpcy5lcnJvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zdGFydCA9IHRoaXMuZG93bmxvYWRTdGFydCA9IHRoaXMuZG93bmxvYWRMZW5ndGggPSBOYU47XHJcbiAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuICB9XHJcbn1cclxuIiwiPCEtLVxyXG4gKiBMSUNFTlNFXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbi0tPlxyXG5cclxuPHNlY3Rpb24gY2xhc3M9XCJjb250ZW50XCI+XHJcbkBpZiAoaGFzRGF0YSkge1xyXG4gICAgPGRsPlxyXG4gICAgICAgIDxkdD5Db25uZWN0aW9uIHN0YXJ0PC9kdD5cclxuICAgICAgICA8ZGQ+e3sgc3RhcnQgfCBkYXRlOiAnc2hvcnQnIH19PC9kZD5cclxuICAgIDwvZGw+XHJcbiAgICA8ZGw+XHJcbiAgICAgICAgPGR0PlJlcXVlc3QvUmVzcG9uc2U8L2R0PlxyXG4gICAgICAgIDxkZCBjbGFzcz1cInRpbWVsaW5lXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIid3aWR0aDonICsgZG93bmxvYWRTdGFydCArICclJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHN0YWxsZWRcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhbGxlZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lXCI+e3sgZG93bmxvYWRTdGFydCB9fSBtczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIid3aWR0aDonICsgZG93bmxvYWRMZW5ndGggKyAnJTttYXJnaW4tbGVmdDonICsgZG93bmxvYWRTdGFydCArICclJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvd25sb2FkXCIgW2NsYXNzLmVycm9yXT1cImVycm9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj57eyBkdXJhdGlvbiB9fSBtczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGQ+XHJcbiAgICA8L2RsPlxyXG59IFxyXG48L3NlY3Rpb24+XHJcbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltaW5nLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci90aW1pbmctcmVuZGVyZXIvdGltaW5nLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci90aW1pbmctcmVuZGVyZXIvdGltaW5nLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUUzRDs7O0dBR0c7QUFZSCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsa0JBQWtCO0lBWGxFOztRQWFFOztXQUVHO1FBQ08sWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVuQzs7V0FFRztRQUNPLFVBQUssR0FBVyxHQUFHLENBQUM7UUFFOUI7O1dBRUc7UUFDTyxrQkFBYSxHQUFXLEdBQUcsQ0FBQztRQUV0Qzs7V0FFRztRQUNPLG1CQUFjLEdBQVcsR0FBRyxDQUFDO1FBRXZDOztXQUVHO1FBQ08sYUFBUSxHQUFXLENBQUMsQ0FBQztRQUUvQjs7V0FFRztRQUNPLFVBQUssR0FBWSxLQUFLLENBQUM7S0EwQmxDO0lBeEJDOztPQUVHO0lBQ0gsSUFDb0IsR0FBRyxDQUFDLEtBQWlCO1FBQ3ZDLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1lBQzVELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQTRCLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQWtDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLE1BQU0sZUFBZSxHQUE0QixRQUFRLENBQUMsZUFBZSxDQUFDO1FBQzFFLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUM7SUFDcEQsQ0FBQzs4R0F2RFUsMEJBQTBCO2tHQUExQiwwQkFBMEIsOEhDOUJ2QyxxdkNBa0NBLHEwRERYSSxRQUFROzsyRkFPQywwQkFBMEI7a0JBWHRDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxRQUFRO3dCQUNSLE9BQU87cUJBQ1IsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU07OEJBc0MzQixHQUFHO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cE1vY2tMb2dnaW5nTWV0YWRhdGEsIEh0dHBNb2NrUmVxdWVzdE1ldGFkYXRhLCBMb2cgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVQaXBlLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQXR4TG9nUmVuZGVyZXJCYXNlIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3QvbG9nLXJlbmRlcmVyLWJhc2UnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFRpbWVsaW5lVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdGltZWxpbmUudXRpbCc7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICogVGhlIGNvbXBvbmVudCB0aGF0IGRpc3BsYXlzIHRoZSB0aW1lbGluZSBvZiBhbiBIVFRQIHJlc3BvbnNlIGluIHRoZSBBVFggbW9uaXRvcmluZyBjb25zb2xlLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHgtdGltaW5nLXJlbmRlcmVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIERhdGVQaXBlLFxyXG4gICAgTmdTdHlsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWluZy1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RpbWluZy1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0eFRpbWluZ1JlbmRlcmVyQ29tcG9uZW50IGV4dGVuZHMgQXR4TG9nUmVuZGVyZXJCYXNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaGFzRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHN0YXJ0OiBudW1iZXIgPSBOYU47XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZG93bmxvYWRTdGFydDogbnVtYmVyID0gTmFOO1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGRvd25sb2FkTGVuZ3RoOiBudW1iZXIgPSBOYU47XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZHVyYXRpb246IG51bWJlciA9IDA7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgbG9nKHZhbHVlOiBMb2cgfCBudWxsKSB7XHJcbiAgICBzdXBlci5sb2cgPSB2YWx1ZTtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgdGhpcy5oYXNEYXRhID0gdGhpcy5lcnJvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5kb3dubG9hZFN0YXJ0ID0gdGhpcy5kb3dubG9hZExlbmd0aCA9IE5hTjtcclxuICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1ldGFkYXRhOiBIdHRwTW9ja0xvZ2dpbmdNZXRhZGF0YSA9IHZhbHVlLm1ldGFkYXRhO1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+IHwgdW5kZWZpbmVkID0gbWV0YWRhdGEucmVzcG9uc2U7XHJcbiAgICBpZiAoIXJlc3BvbnNlKSByZXR1cm47XHJcbiAgICBjb25zdCByZXF1ZXN0TWV0YWRhdGE6IEh0dHBNb2NrUmVxdWVzdE1ldGFkYXRhID0gbWV0YWRhdGEucmVxdWVzdE1ldGFkYXRhO1xyXG4gICAgdGhpcy5lcnJvciA9IHJlc3BvbnNlLnN0YXR1cyA+PSA0MDA7XHJcbiAgICB0aGlzLmhhc0RhdGEgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydCA9IHJlcXVlc3RNZXRhZGF0YS5zdGFydDtcclxuICAgIHRoaXMuZHVyYXRpb24gPSByZXF1ZXN0TWV0YWRhdGEuZHVyYXRpb247XHJcbiAgICBjb25zdCB0aW1lbGluZURhdGEgPSBUaW1lbGluZVV0aWwuZ2V0VGltZWxpbmVEYXRhKHJlcXVlc3RNZXRhZGF0YSk7XHJcbiAgICB0aGlzLmRvd25sb2FkU3RhcnQgPSB0aW1lbGluZURhdGEuZG93bmxvYWRTdGFydDtcclxuICAgIHRoaXMuZG93bmxvYWRMZW5ndGggPSB0aW1lbGluZURhdGEuZG93bmxvYWRMZW5ndGg7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS1cclxuICogTElDRU5TRVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4tLT5cclxuXHJcbkBpZiAoaGFzRGF0YSkge1xyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICA8ZHQ+Q29ubmVjdGlvbiBzdGFydDwvZHQ+XHJcbiAgICAgICAgICAgIDxkZD57eyBzdGFydCB8IGRhdGU6ICdzaG9ydCcgfX08L2RkPlxyXG4gICAgICAgIDwvZGw+XHJcbiAgICAgICAgPGRsPlxyXG4gICAgICAgICAgICA8ZHQ+UmVxdWVzdC9SZXNwb25zZTwvZHQ+XHJcbiAgICAgICAgICAgIDxkZCBjbGFzcz1cInRpbWVsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2F0dHIuc3R5bGVdPVwiJ3dpZHRoOicgKyBkb3dubG9hZFN0YXJ0ICsgJyUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWxsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YWxsZWRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj57eyBkb3dubG9hZFN0YXJ0IH19IG1zPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbYXR0ci5zdHlsZV09XCInd2lkdGg6JyArIGRvd25sb2FkTGVuZ3RoICsgJyU7bWFyZ2luLWxlZnQ6JyArIGRvd25sb2FkU3RhcnQgKyAnJSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvd25sb2FkXCIgW2NsYXNzLmVycm9yXT1cImVycm9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lXCI+e3sgZHVyYXRpb24gfX0gbXM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2RkPlxyXG4gICAgICAgIDwvZGw+XHJcbiAgICA8L3NlY3Rpb24+XHJcbn0gXHJcblxyXG4iXX0=