angular-toolbox 0.11.2 → 0.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/README.md +1 -1
  2. package/esm2022/lib/core/bridge/app-bridge.mjs +3 -3
  3. package/esm2022/lib/core/error/app-bridge-error.mjs +3 -3
  4. package/esm2022/lib/core/error/http-mock-service-error.mjs +3 -3
  5. package/esm2022/lib/core/error/integrity-error.mjs +3 -3
  6. package/esm2022/lib/core/error/subscription-error.mjs +3 -3
  7. package/esm2022/lib/core/impl/lang/identifiable-component.mjs +3 -3
  8. package/esm2022/lib/core/impl/version/version.impl.mjs +3 -3
  9. package/esm2022/lib/framework/index.mjs +3 -1
  10. package/esm2022/lib/framework/logging/connector/console-log-connector.mjs +48 -0
  11. package/esm2022/lib/framework/logging/connector/default-log-connector.mjs +34 -0
  12. package/esm2022/lib/framework/logging/connector/html-log-connector.mjs +177 -0
  13. package/esm2022/lib/framework/logging/connector/index.mjs +4 -0
  14. package/esm2022/lib/framework/logging/impl/abstract-logger.mjs +100 -0
  15. package/esm2022/lib/framework/logging/impl/index.mjs +3 -0
  16. package/esm2022/lib/framework/logging/impl/log-impl.mjs +28 -0
  17. package/esm2022/lib/framework/logging/index.mjs +4 -0
  18. package/esm2022/lib/framework/logging/util/index.mjs +4 -0
  19. package/esm2022/lib/framework/logging/util/log.builder.mjs +28 -0
  20. package/esm2022/lib/framework/logging/util/log.constant.mjs +24 -0
  21. package/esm2022/lib/framework/logging/util/log.util.mjs +142 -0
  22. package/esm2022/lib/framework/mock/http/core/data-storage.mjs +1 -1
  23. package/esm2022/lib/framework/mock/http/core/response-delay.mjs +9 -0
  24. package/esm2022/lib/framework/mock/http/event/event-target.impl.mjs +15 -1
  25. package/esm2022/lib/framework/mock/http/logging/http-mock-logger.mjs +15 -0
  26. package/esm2022/lib/framework/mock/http/logging/http-mock-logging-metadata.builder.mjs +35 -0
  27. package/esm2022/lib/framework/mock/http/path-to-regexp/escape-to-regexp-string.mjs +3 -3
  28. package/esm2022/lib/framework/mock/http/path-to-regexp/model/lex-token.mjs +3 -3
  29. package/esm2022/lib/framework/mock/http/util/data-storage.builder.mjs +5 -3
  30. package/esm2022/lib/framework/mock/http/util/http-headers.util.mjs +18 -3
  31. package/esm2022/lib/framework/mock/http/util/http-mock-max-delay.mjs +12 -0
  32. package/esm2022/lib/framework/mock/http/util/http-mock-response-delay.util.mjs +33 -0
  33. package/esm2022/lib/framework/mock/http/util/http-mock-response.builder.mjs +45 -9
  34. package/esm2022/lib/framework/mock/http/util/index.mjs +2 -1
  35. package/esm2022/lib/framework/mock/http/xhr/delegate-xhr.mjs +75 -41
  36. package/esm2022/lib/framework/mock/http/xhr/http-mock-factory.impl.mjs +4 -3
  37. package/esm2022/lib/framework/mock/http/xhr/http-mock-factory.mjs +3 -2
  38. package/esm2022/lib/framework/mock/http/xhr/xhr-proxy-impl.mjs +7 -6
  39. package/esm2022/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.mjs +30 -0
  40. package/esm2022/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.mjs +30 -0
  41. package/esm2022/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.mjs +140 -0
  42. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.mjs +37 -0
  43. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.mjs +34 -0
  44. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.mjs +27 -0
  45. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.mjs +50 -0
  46. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.mjs +50 -0
  47. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.mjs +71 -0
  48. package/esm2022/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.mjs +55 -0
  49. package/esm2022/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.mjs +67 -0
  50. package/esm2022/lib/framework/mock/http-monitoring-console/connector/http-monitoring-console-log-connector.mjs +52 -0
  51. package/esm2022/lib/framework/mock/http-monitoring-console/index.mjs +2 -0
  52. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-action-type.mjs +14 -0
  53. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-action.mjs +9 -0
  54. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-console-json.mjs +9 -0
  55. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/atx-is-imported-log.mjs +10 -0
  56. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-body-dto.mjs +9 -0
  57. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-header-dto.mjs +9 -0
  58. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log-metadata.dto.mjs +9 -0
  59. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log.dto.mjs +9 -0
  60. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request-metadata.dto.ts.mjs +9 -0
  61. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request.dto.mjs +9 -0
  62. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-response.dto.mjs +9 -0
  63. package/esm2022/lib/framework/mock/http-monitoring-console/model/business/io/hmfl.mjs +9 -0
  64. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/atx-log-io.service.mjs +77 -0
  65. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/body-converter.mjs +22 -0
  66. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/body-serializer.mjs +47 -0
  67. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/http-request-converter.mjs +44 -0
  68. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/http-response-converter.mjs +32 -0
  69. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-converter.mjs +31 -0
  70. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-headers-converter.mjs +35 -0
  71. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-message.util.mjs +19 -0
  72. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/log-metadata-converter.mjs +27 -0
  73. package/esm2022/lib/framework/mock/http-monitoring-console/model/service/io/request-metadata-converter.mjs +29 -0
  74. package/esm2022/lib/framework/mock/http-monitoring-console/util/console-body-type.mjs +18 -0
  75. package/esm2022/lib/framework/mock/http-monitoring-console/util/console-type-class.mjs +17 -0
  76. package/esm2022/lib/framework/mock/http-monitoring-console/util/data.util.mjs +75 -0
  77. package/esm2022/lib/framework/mock/http-monitoring-console/util/size.util.mjs +35 -0
  78. package/esm2022/lib/framework/mock/http-monitoring-console/util/url.util.mjs +26 -0
  79. package/esm2022/lib/model/business/index.mjs +2 -1
  80. package/esm2022/lib/model/business/lang/app-bridge-command.mjs +3 -3
  81. package/esm2022/lib/model/business/lang/destroyable.mjs +3 -3
  82. package/esm2022/lib/model/business/lang/identifiable.mjs +3 -3
  83. package/esm2022/lib/model/business/logging/http-mock-logging-constant.enum.mjs +34 -0
  84. package/esm2022/lib/model/business/logging/index.mjs +6 -0
  85. package/esm2022/lib/model/business/logging/log-connector.mjs +9 -0
  86. package/esm2022/lib/model/business/logging/log-level.enum.mjs +35 -0
  87. package/esm2022/lib/model/business/logging/log.mjs +9 -0
  88. package/esm2022/lib/model/business/logging/logger.mjs +2 -0
  89. package/esm2022/lib/model/business/logging/transactional-logger.mjs +9 -0
  90. package/esm2022/lib/model/business/mock/http/config/http-mock-production-policy.enum.mjs +27 -0
  91. package/esm2022/lib/model/business/mock/http/config/http-mocking-framework-config.mjs +9 -0
  92. package/esm2022/lib/model/business/mock/http/config/http-mocking-framework-config.provider.mjs +33 -0
  93. package/esm2022/lib/model/business/mock/http/config/index.mjs +4 -0
  94. package/esm2022/lib/model/business/mock/http/fetch-client.mjs +7 -2
  95. package/esm2022/lib/model/business/mock/http/http-method-mock.mjs +1 -1
  96. package/esm2022/lib/model/business/mock/http/http-mock-request-metadata.mjs +9 -0
  97. package/esm2022/lib/model/business/mock/http/index.mjs +4 -1
  98. package/esm2022/lib/model/business/mock/http/logging/http-mock-logging-metadata.mjs +9 -0
  99. package/esm2022/lib/model/business/mock/http/logging/http-mock-logging-prefetch-metadata.mjs +9 -0
  100. package/esm2022/lib/model/business/mock/http/logging/index.mjs +3 -0
  101. package/esm2022/lib/model/service/index.mjs +3 -2
  102. package/esm2022/lib/model/service/logging/index.mjs +2 -0
  103. package/esm2022/lib/model/service/logging/logger-service.mjs +24 -0
  104. package/esm2022/lib/model/service/mock/http/http-mock.service.mjs +45 -6
  105. package/esm2022/lib/model/service/mock/http/index.mjs +3 -0
  106. package/esm2022/lib/model/service/mock/http/logging/http-mock-logging-service.mjs +110 -0
  107. package/esm2022/lib/model/service/mock/http/logging/index.mjs +2 -0
  108. package/esm2022/lib/model/service/ui/app-bridge.service.mjs +3 -3
  109. package/esm2022/lib/model/service/ui/dark-mode.service.mjs +3 -3
  110. package/esm2022/lib/model/service/version/angular-toolbox-version.service.mjs +3 -3
  111. package/esm2022/lib/util/default-scroll-behavior.mjs +3 -3
  112. package/esm2022/lib/util/http-mocking-framework-config.manager.mjs +129 -0
  113. package/fesm2022/angular-toolbox.mjs +3338 -997
  114. package/fesm2022/angular-toolbox.mjs.map +1 -1
  115. package/lib/core/bridge/app-bridge.d.ts +2 -2
  116. package/lib/core/error/app-bridge-error.d.ts +2 -2
  117. package/lib/core/error/http-mock-service-error.d.ts +2 -2
  118. package/lib/core/error/integrity-error.d.ts +2 -2
  119. package/lib/core/error/subscription-error.d.ts +2 -2
  120. package/lib/core/impl/lang/identifiable-component.d.ts +2 -2
  121. package/lib/core/impl/version/version.impl.d.ts +2 -2
  122. package/lib/framework/index.d.ts +2 -0
  123. package/lib/framework/logging/connector/console-log-connector.d.ts +34 -0
  124. package/lib/framework/logging/connector/default-log-connector.d.ts +34 -0
  125. package/lib/framework/logging/connector/html-log-connector.d.ts +72 -0
  126. package/lib/framework/logging/connector/index.d.ts +3 -0
  127. package/lib/framework/logging/impl/abstract-logger.d.ts +69 -0
  128. package/lib/framework/logging/impl/index.d.ts +2 -0
  129. package/lib/framework/logging/impl/log-impl.d.ts +42 -0
  130. package/lib/framework/logging/index.d.ts +3 -0
  131. package/lib/framework/logging/util/index.d.ts +3 -0
  132. package/lib/framework/logging/util/log.builder.d.ts +24 -0
  133. package/lib/framework/logging/util/log.constant.d.ts +23 -0
  134. package/lib/framework/logging/util/log.util.d.ts +48 -0
  135. package/lib/framework/mock/http/core/data-storage.d.ts +6 -1
  136. package/lib/framework/mock/http/core/response-delay.d.ts +23 -0
  137. package/lib/framework/mock/http/event/event-target.impl.d.ts +8 -0
  138. package/lib/framework/mock/http/logging/http-mock-logger.d.ts +14 -0
  139. package/lib/framework/mock/http/logging/http-mock-logging-metadata.builder.d.ts +20 -0
  140. package/lib/framework/mock/http/path-to-regexp/escape-to-regexp-string.d.ts +2 -2
  141. package/lib/framework/mock/http/path-to-regexp/model/lex-token.d.ts +2 -2
  142. package/lib/framework/mock/http/util/data-storage.builder.d.ts +3 -2
  143. package/lib/framework/mock/http/util/http-headers.util.d.ts +10 -0
  144. package/lib/framework/mock/http/util/http-mock-max-delay.d.ts +11 -0
  145. package/lib/framework/mock/http/util/http-mock-response-delay.util.d.ts +22 -0
  146. package/lib/framework/mock/http/util/http-mock-response.builder.d.ts +16 -0
  147. package/lib/framework/mock/http/util/index.d.ts +1 -0
  148. package/lib/framework/mock/http/xhr/delegate-xhr.d.ts +11 -4
  149. package/lib/framework/mock/http/xhr/http-mock-factory.impl.d.ts +3 -1
  150. package/lib/framework/mock/http/xhr/xhr-proxy-impl.d.ts +6 -5
  151. package/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.d.ts +8 -0
  152. package/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.d.ts +21 -0
  153. package/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.d.ts +42 -0
  154. package/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.d.ts +12 -0
  155. package/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.d.ts +8 -0
  156. package/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.d.ts +7 -0
  157. package/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.d.ts +20 -0
  158. package/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.d.ts +20 -0
  159. package/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.d.ts +27 -0
  160. package/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.d.ts +13 -0
  161. package/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.d.ts +27 -0
  162. package/lib/framework/mock/http-monitoring-console/connector/http-monitoring-console-log-connector.d.ts +40 -0
  163. package/lib/framework/mock/http-monitoring-console/index.d.ts +1 -0
  164. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-action-type.d.ts +12 -0
  165. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-action.d.ts +12 -0
  166. package/lib/framework/mock/http-monitoring-console/model/business/atx-console-json.d.ts +14 -0
  167. package/lib/framework/mock/http-monitoring-console/model/business/atx-is-imported-log.d.ts +9 -0
  168. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-body-dto.d.ts +11 -0
  169. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-header-dto.d.ts +11 -0
  170. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log-metadata.dto.d.ts +18 -0
  171. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-log.dto.d.ts +23 -0
  172. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request-metadata.dto.ts.d.ts +32 -0
  173. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-request.dto.d.ts +18 -0
  174. package/lib/framework/mock/http-monitoring-console/model/business/io/atx-http-response.dto.d.ts +16 -0
  175. package/lib/framework/mock/http-monitoring-console/model/business/io/hmfl.d.ts +12 -0
  176. package/lib/framework/mock/http-monitoring-console/model/service/atx-log-io.service.d.ts +11 -0
  177. package/lib/framework/mock/http-monitoring-console/model/service/io/body-converter.d.ts +12 -0
  178. package/lib/framework/mock/http-monitoring-console/model/service/io/body-serializer.d.ts +13 -0
  179. package/lib/framework/mock/http-monitoring-console/model/service/io/http-request-converter.d.ts +13 -0
  180. package/lib/framework/mock/http-monitoring-console/model/service/io/http-response-converter.d.ts +13 -0
  181. package/lib/framework/mock/http-monitoring-console/model/service/io/log-converter.d.ts +13 -0
  182. package/lib/framework/mock/http-monitoring-console/model/service/io/log-headers-converter.d.ts +13 -0
  183. package/lib/framework/mock/http-monitoring-console/model/service/io/log-message.util.d.ts +12 -0
  184. package/lib/framework/mock/http-monitoring-console/model/service/io/log-metadata-converter.d.ts +13 -0
  185. package/lib/framework/mock/http-monitoring-console/model/service/io/request-metadata-converter.d.ts +13 -0
  186. package/lib/framework/mock/http-monitoring-console/util/console-body-type.d.ts +16 -0
  187. package/lib/framework/mock/http-monitoring-console/util/console-type-class.d.ts +15 -0
  188. package/lib/framework/mock/http-monitoring-console/util/data.util.d.ts +13 -0
  189. package/lib/framework/mock/http-monitoring-console/util/size.util.d.ts +11 -0
  190. package/lib/framework/mock/http-monitoring-console/util/url.util.d.ts +13 -0
  191. package/lib/model/business/index.d.ts +1 -0
  192. package/lib/model/business/lang/app-bridge-command.d.ts +2 -2
  193. package/lib/model/business/lang/destroyable.d.ts +2 -2
  194. package/lib/model/business/lang/identifiable.d.ts +2 -2
  195. package/lib/model/business/logging/http-mock-logging-constant.enum.d.ts +32 -0
  196. package/lib/model/business/logging/index.d.ts +5 -0
  197. package/lib/model/business/logging/log-connector.d.ts +36 -0
  198. package/lib/model/business/logging/log-level.enum.d.ts +33 -0
  199. package/lib/model/business/logging/log.d.ts +34 -0
  200. package/lib/model/business/logging/logger.d.ts +58 -0
  201. package/lib/model/business/logging/transactional-logger.d.ts +28 -0
  202. package/lib/model/business/mock/http/config/http-mock-production-policy.enum.d.ts +24 -0
  203. package/lib/model/business/mock/http/config/http-mocking-framework-config.d.ts +21 -0
  204. package/lib/model/business/mock/http/config/http-mocking-framework-config.provider.d.ts +21 -0
  205. package/lib/model/business/mock/http/config/index.d.ts +3 -0
  206. package/lib/model/business/mock/http/fetch-client.d.ts +1 -1
  207. package/lib/model/business/mock/http/http-method-mock.d.ts +1 -6
  208. package/lib/model/business/mock/http/http-mock-request-metadata.d.ts +33 -0
  209. package/lib/model/business/mock/http/index.d.ts +3 -0
  210. package/lib/model/business/mock/http/logging/http-mock-logging-metadata.d.ts +15 -0
  211. package/lib/model/business/mock/http/logging/http-mock-logging-prefetch-metadata.d.ts +16 -0
  212. package/lib/model/business/mock/http/logging/index.d.ts +2 -0
  213. package/lib/model/service/index.d.ts +2 -1
  214. package/lib/model/service/logging/index.d.ts +1 -0
  215. package/lib/model/service/logging/logger-service.d.ts +9 -0
  216. package/lib/model/service/mock/http/http-mock.service.d.ts +35 -2
  217. package/lib/model/service/mock/http/index.d.ts +2 -0
  218. package/lib/model/service/mock/http/logging/http-mock-logging-service.d.ts +78 -0
  219. package/lib/model/service/mock/http/logging/index.d.ts +1 -0
  220. package/lib/model/service/ui/dark-mode.service.d.ts +2 -2
  221. package/lib/util/default-scroll-behavior.d.ts +2 -2
  222. package/lib/util/http-mocking-framework-config.manager.d.ts +66 -0
  223. package/package.json +1 -1
@@ -2,8 +2,8 @@
2
2
  * @license
3
3
  * Copyright Pascal ECHEMANN. All Rights Reserved.
4
4
  *
5
- * Use of this source code is governed by an MIT-style license that can be ound in
6
- * fthe LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
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
7
  */
8
8
  import { DelegateXhr } from "./delegate-xhr";
9
9
  import { EMPTY_STRING } from "../../../../util";
@@ -96,7 +96,7 @@ export class XhrProxyImpl extends XhrBase {
96
96
  const config = this._httpMockService.getRouteConfig(parsedUrl, m);
97
97
  if (this.XHR && this.XHR instanceof DelegateXhr)
98
98
  this.XHR.destroy();
99
- this.XHR = config ? new DelegateXhr(config) : new XMLHttpRequest();
99
+ this.XHR = config ? new DelegateXhr(config, this._logger) : new XMLHttpRequest();
100
100
  this.XHR.withCredentials = this.withCredentials;
101
101
  this.XHR.open(m.toString(), parsedUrl.toString());
102
102
  }
@@ -116,7 +116,7 @@ export class XhrProxyImpl extends XhrBase {
116
116
  * XMLHTTPRequest API
117
117
  */
118
118
  getAllResponseHeaders() {
119
- return this.XHR ? this.XHR.getAllResponseHeaders() : EMPTY_STRING;
119
+ return this.XHR ? this.XHR.getAllResponseHeaders() : null;
120
120
  }
121
121
  /**
122
122
  * @private
@@ -169,9 +169,10 @@ export class XhrProxyImpl extends XhrBase {
169
169
  /**
170
170
  * @private
171
171
  */
172
- constructor(_httpMockService) {
172
+ constructor(_httpMockService, _logger) {
173
173
  super();
174
174
  this._httpMockService = _httpMockService;
175
+ this._logger = _logger;
175
176
  }
176
177
  }
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGhyLXByb3h5LWltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwL3hoci94aHItcHJveHktaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJckM7Ozs7R0FJRztBQUNILE1BQU0sU0FBUyxHQUEyQixDQUFDLE1BQWMsRUFBQyxFQUFFO0lBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE1BQU0sa0NBQWtDLENBQUMsQ0FBQTtBQUNoRixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLE9BQU87SUFTckM7Ozs7T0FJRztJQUNILElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7T0FJ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biAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIG91bmQgaW5cclxuICogZnRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSHR0cE1vY2tTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL3NlcnZpY2UvbW9jay9odHRwL2h0dHAtbW9jay5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFhoclByb3h5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsXCI7XHJcbmltcG9ydCB7IERlbGVnYXRlWGhyIH0gZnJvbSBcIi4vZGVsZWdhdGUteGhyXCI7XHJcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsXCI7XHJcbmltcG9ydCB7IFhockJhc2UgfSBmcm9tIFwiLi94aHItYmFzZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZU1vY2tDb25maWcgfSBmcm9tIFwiLi4vY29uZmlnL3JvdXRlLW1vY2stY29uZmlnXCI7XHJcbmltcG9ydCB7IEhUVFBNZXRob2RSZWYgfSBmcm9tIFwiLi4vdXRpbC9odHRwLW1ldGhvZC1yZWYuZW51bVwiO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEFuIGVycm9yIHVzZWQgYXMgcmVmZXJlbmNlIGZvciB1bml0IHRlc3RpbmcuXHJcbiAqIEFuZ3VsYXIgZnJhbWV3b3JrIGNhbGxzIGBYTUxIdHRwUmVxdWVzdGAgbWV0aG9kIG9ubHkgYWZ0ZXIgdGhlIGBvcGVuKClgIG1ldGhvZCBpbnZva2F0aW9uLlxyXG4gKi9cclxuY29uc3QgWEhSX0VSUk9SOiAobWV0aG9kOiBzdHJpbmcpPT52b2lkID0gKG1ldGhvZDogc3RyaW5nKT0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBjYWxsICR7bWV0aG9kfSgpIG1ldGhvZCBiZWZvcmUgY2FsbGluZyBvcGVuKCkuYClcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBBIFhIUiBwcm94eSB0aGF0IGlzIHVzZWQgYnkgdGhlIE1vY2tpbmcgRnJhbWV3b3JrIHRvIGFwcGx5IEhUVFAgY2FsbCBzdHJhdGVnaWVzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFhoclByb3h5SW1wbCBleHRlbmRzIFhockJhc2UgaW1wbGVtZW50cyBYaHJQcm94eSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogU3RvcmVzIGFuIGludGVybmFsIFhNTEh0dHBSZXF1ZXN0b2JqZWN0IHVzZWQgYXMgZGVsZWdhdGUsXHJcbiAgICAgKiBkZXBlbmRpbmcgb24gdGhlIHRlc3Rpbmcgc3RyYXRlZ3kgZGVmaW5lZCBieSB0aGUgY29uZmlnIGZpbGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgWEhSITogWGhyUHJveHk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgZ2V0IHJlc3BvbnNlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuWEhSID8gdGhpcy5YSFIucmVzcG9uc2UgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgZ2V0IHN0YXR1cygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlhIUiA/IHRoaXMuWEhSLnN0YXR1cyA6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgZ2V0IHN0YXR1c1RleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5YSFIgPyB0aGlzLlhIUi5zdGF0dXNUZXh0IDogRU1QVFlfU1RSSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogWE1MSFRUUFJlcXVlc3QgQVBJXHJcbiAgICAgKi9cclxuICAgIGdldCByZWFkeVN0YXRlKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuWEhSID8gdGhpcy5YSFIucmVhZHlTdGF0ZSA6IHRoaXMuVU5TRU5UO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogWE1MSFRUUFJlcXVlc3QgQVBJXHJcbiAgICAgKi9cclxuICAgIGdldCByZXNwb25zZVVSTCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlhIUiA/IHRoaXMuWEhSLnJlc3BvbnNlVVJMIDogRU1QVFlfU1RSSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogWE1MSFRUUFJlcXVlc3QgQVBJXHJcbiAgICAgKi9cclxuICAgIGdldCByZXNwb25zZVRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5YSFIgPyB0aGlzLlhIUi5yZXNwb25zZVRleHQgOiBFTVBUWV9TVFJJTkc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgZ2V0IHJlc3BvbnNlVHlwZSgpOiBYTUxIdHRwUmVxdWVzdFJlc3BvbnNlVHlwZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuWEhSID8gdGhpcy5YSFIucmVzcG9uc2VUeXBlIDogRU1QVFlfU1RSSU5HIGFzIFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogWE1MSFRUUFJlcXVlc3QgQVBJXHJcbiAgICAgKi9cclxuICAgIHNldCByZXNwb25zZVR5cGUodmFsdWU6IFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlKSAge1xyXG4gICAgICAgIGlmKCF0aGlzLlhIUikgWEhSX0VSUk9SKFwicmVzcG9uc2VUeXBlXCIpO1xyXG4gICAgICAgIHRoaXMuWEhSLnJlc3BvbnNlVHlwZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1cGxvYWQoKTogWE1MSHR0cFJlcXVlc3RVcGxvYWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlhIUi51cGxvYWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgb3BlbihtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcgfCBVUkwpOiB2b2lkO1xyXG4gICAgb3BlbihtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcgfCBVUkwsIGFzeW5jOiBib29sZWFuLCB1c2VybmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHBhc3N3b3JkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQ7XHJcbiAgICBvcGVuKG1ldGhvZDogdW5rbm93biwgdXJsOiB1bmtub3duLCBhc3luYz86IHVua25vd24sIHVzZXJuYW1lPzogdW5rbm93biwgcGFzc3dvcmQ/OiB1bmtub3duKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbTogc3RyaW5nID0gKG1ldGhvZCBhcyBzdHJpbmcpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBwYXJzZWRVcmw6IFVSTCA9IFVSTC5jYW5QYXJzZSh1cmwgYXMgc3RyaW5nKSA/IG5ldyBVUkwodXJsIGFzIHN0cmluZykgOiBuZXcgVVJMKHRoaXMuX2h0dHBNb2NrU2VydmljZS5nZXRBcHBPcmlnaW4oKSArIHVybCk7XHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBSb3V0ZU1vY2tDb25maWcgfCB1bmRlZmluZWQgPSB0aGlzLl9odHRwTW9ja1NlcnZpY2UuZ2V0Um91dGVDb25maWcocGFyc2VkVXJsLCBtIGFzIEhUVFBNZXRob2RSZWYpO1xyXG4gICAgICAgIGlmICh0aGlzLlhIUiAmJiB0aGlzLlhIUiBpbnN0YW5jZW9mIERlbGVnYXRlWGhyKSB0aGlzLlhIUi5kZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5YSFIgPSBjb25maWcgPyBuZXcgRGVsZWdhdGVYaHIoY29uZmlnKSA6IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHRoaXMuWEhSLndpdGhDcmVkZW50aWFscyA9IHRoaXMud2l0aENyZWRlbnRpYWxzO1xyXG4gICAgICAgIHRoaXMuWEhSLm9wZW4obS50b1N0cmluZygpLCBwYXJzZWRVcmwudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgYWJvcnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuWEhSKSByZXR1cm4gdGhpcy5YSFIuYWJvcnQoKTtcclxuICAgICAgICBYSFJfRVJST1IoXCJhYm9ydFwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5YSFIgPyB0aGlzLlhIUi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSA6IEVNUFRZX1NUUklORztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBvdmVycmlkZSBhZGRFdmVudExpc3RlbmVyKHR5cGU6IHVua25vd24sIGxpc3RlbmVyOiB1bmtub3duLCBvcHRpb25zPzogdW5rbm93bik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLlhIUikgcmV0dXJuIHRoaXMuWEhSLmFkZEV2ZW50TGlzdGVuZXIodHlwZSBhcyBhbnksIGxpc3RlbmVyIGFzIGFueSwgb3B0aW9ucyBhcyBhbnkpO1xyXG4gICAgICAgIFhIUl9FUlJPUihcImFkZEV2ZW50TGlzdGVuZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgb3ZlcnJpZGUgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiB1bmtub3duLCBsaXN0ZW5lcjogdW5rbm93biwgb3B0aW9ucz86IHVua25vd24pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5YSFIpIHJldHVybiB0aGlzLlhIUi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUgYXMgYW55LCBsaXN0ZW5lciBhcyBhbnksIG9wdGlvbnMgYXMgYW55KTtcclxuICAgICAgICBYSFJfRVJST1IoXCJyZW1vdmVFdmVudExpc3RlbmVyXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogWE1MSFRUUFJlcXVlc3QgQVBJXHJcbiAgICAgKi9cclxuICAgIHNlbmQoYm9keT86IERvY3VtZW50IHwgWE1MSHR0cFJlcXVlc3RCb2R5SW5pdCB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5YSFIpIHJldHVybiB0aGlzLlhIUi5zZW5kKGJvZHkpO1xyXG4gICAgICAgIFhIUl9FUlJPUihcInNlbmRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgc2V0UmVxdWVzdEhlYWRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5YSFIpIHJldHVybiB0aGlzLlhIUi5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKTtcclxuICAgICAgICBYSFJfRVJST1IoXCJzZXRSZXF1ZXN0SGVhZGVyXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogRm9yIFVuaXQgVGVzdGluZyBvbmx5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5zdGFuY2VPZihjbGFzc1JlZjogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuWEhSIGluc3RhbmNlb2YgY2xhc3NSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwTW9ja1NlcnZpY2U6IEh0dHBNb2NrU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGhyLXByb3h5LWltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwL3hoci94aHItcHJveHktaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJckM7Ozs7R0FJRztBQUNILE1BQU0sU0FBUyxHQUEyQixDQUFDLE1BQWMsRUFBQyxFQUFFO0lBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE1BQU0sa0NBQWtDLENBQUMsQ0FBQTtBQUNoRixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLE9BQU87SUFTckM7Ozs7T0FJRztJQUNILElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7T0FJ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LEdBQVAsT0FBTyxDQUF3QjtJQUVuRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cclxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBIdHRwTW9ja1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvc2VydmljZS9tb2NrL2h0dHAvaHR0cC1tb2NrLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSHR0cE1vY2tMb2dnaW5nU2VydmljZSwgWGhyUHJveHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxcIjtcclxuaW1wb3J0IHsgRGVsZWdhdGVYaHIgfSBmcm9tIFwiLi9kZWxlZ2F0ZS14aHJcIjtcclxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxcIjtcclxuaW1wb3J0IHsgWGhyQmFzZSB9IGZyb20gXCIuL3hoci1iYXNlXCI7XHJcbmltcG9ydCB7IFJvdXRlTW9ja0NvbmZpZyB9IGZyb20gXCIuLi9jb25maWcvcm91dGUtbW9jay1jb25maWdcIjtcclxuaW1wb3J0IHsgSFRUUE1ldGhvZFJlZiB9IGZyb20gXCIuLi91dGlsL2h0dHAtbWV0aG9kLXJlZi5lbnVtXCI7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICogQW4gZXJyb3IgdXNlZCBhcyByZWZlcmVuY2UgZm9yIHVuaXQgdGVzdGluZy5cclxuICogQW5ndWxhciBmcmFtZXdvcmsgY2FsbHMgYFhNTEh0dHBSZXF1ZXN0YCBtZXRob2Qgb25seSBhZnRlciB0aGUgYG9wZW4oKWAgbWV0aG9kIGludm9rYXRpb24uXHJcbiAqL1xyXG5jb25zdCBYSFJfRVJST1I6IChtZXRob2Q6IHN0cmluZyk9PnZvaWQgPSAobWV0aG9kOiBzdHJpbmcpPT4ge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIGNhbGwgJHttZXRob2R9KCkgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIG9wZW4oKS5gKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEEgWEhSIHByb3h5IHRoYXQgaXMgdXNlZCBieSB0aGUgTW9ja2luZyBGcmFtZXdvcmsgdG8gYXBwbHkgSFRUUCBjYWxsIHN0cmF0ZWdpZXMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgWGhyUHJveHlJbXBsIGV4dGVuZHMgWGhyQmFzZSBpbXBsZW1lbnRzIFhoclByb3h5IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBTdG9yZXMgYW4gaW50ZXJuYWwgWE1MSHR0cFJlcXVlc3RvYmplY3QgdXNlZCBhcyBkZWxlZ2F0ZSxcclxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdGVzdGluZyBzdHJhdGVneSBkZWZpbmVkIGJ5IHRoZSBjb25maWcgZmlsZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBYSFIhOiBYaHJQcm94eTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVzcG9uc2UoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5YSFIgPyB0aGlzLlhIUi5yZXNwb25zZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBnZXQgc3RhdHVzKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuWEhSID8gdGhpcy5YSFIuc3RhdHVzIDogMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBnZXQgc3RhdHVzVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlhIUiA/IHRoaXMuWEhSLnN0YXR1c1RleHQgOiBFTVBUWV9TVFJJTkc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWR5U3RhdGUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5YSFIgPyB0aGlzLlhIUi5yZWFkeVN0YXRlIDogdGhpcy5VTlNFTlQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgZ2V0IHJlc3BvbnNlVVJMKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuWEhSID8gdGhpcy5YSFIucmVzcG9uc2VVUkwgOiBFTVBUWV9TVFJJTkc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgZ2V0IHJlc3BvbnNlVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlhIUiA/IHRoaXMuWEhSLnJlc3BvbnNlVGV4dCA6IEVNUFRZX1NUUklORztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVzcG9uc2VUeXBlKCk6IFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5YSFIgPyB0aGlzLlhIUi5yZXNwb25zZVR5cGUgOiBFTVBUWV9TVFJJTkcgYXMgWE1MSHR0cFJlcXVlc3RSZXNwb25zZVR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgc2V0IHJlc3BvbnNlVHlwZSh2YWx1ZTogWE1MSHR0cFJlcXVlc3RSZXNwb25zZVR5cGUpICB7XHJcbiAgICAgICAgaWYoIXRoaXMuWEhSKSBYSFJfRVJST1IoXCJyZXNwb25zZVR5cGVcIik7XHJcbiAgICAgICAgdGhpcy5YSFIucmVzcG9uc2VUeXBlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHVwbG9hZCgpOiBYTUxIdHRwUmVxdWVzdFVwbG9hZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuWEhSLnVwbG9hZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBvcGVuKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZyB8IFVSTCk6IHZvaWQ7XHJcbiAgICBvcGVuKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZyB8IFVSTCwgYXN5bmM6IGJvb2xlYW4sIHVzZXJuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFzc3dvcmQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZDtcclxuICAgIG9wZW4obWV0aG9kOiB1bmtub3duLCB1cmw6IHVua25vd24sIGFzeW5jPzogdW5rbm93biwgdXNlcm5hbWU/OiB1bmtub3duLCBwYXNzd29yZD86IHVua25vd24pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtOiBzdHJpbmcgPSAobWV0aG9kIGFzIHN0cmluZykudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZFVybDogVVJMID0gVVJMLmNhblBhcnNlKHVybCBhcyBzdHJpbmcpID8gbmV3IFVSTCh1cmwgYXMgc3RyaW5nKSA6IG5ldyBVUkwodGhpcy5faHR0cE1vY2tTZXJ2aWNlLmdldEFwcE9yaWdpbigpICsgdXJsKTtcclxuICAgICAgICBjb25zdCBjb25maWc6IFJvdXRlTW9ja0NvbmZpZyB8IHVuZGVmaW5lZCA9IHRoaXMuX2h0dHBNb2NrU2VydmljZS5nZXRSb3V0ZUNvbmZpZyhwYXJzZWRVcmwsIG0gYXMgSFRUUE1ldGhvZFJlZik7XHJcbiAgICAgICAgaWYgKHRoaXMuWEhSICYmIHRoaXMuWEhSIGluc3RhbmNlb2YgRGVsZWdhdGVYaHIpIHRoaXMuWEhSLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLlhIUiA9IGNvbmZpZyA/IG5ldyBEZWxlZ2F0ZVhocihjb25maWcsIHRoaXMuX2xvZ2dlcikgOiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB0aGlzLlhIUi53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcclxuICAgICAgICB0aGlzLlhIUi5vcGVuKG0udG9TdHJpbmcoKSwgcGFyc2VkVXJsLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogWE1MSFRUUFJlcXVlc3QgQVBJXHJcbiAgICAgKi9cclxuICAgIGFib3J0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLlhIUikgcmV0dXJuIHRoaXMuWEhSLmFib3J0KCk7XHJcbiAgICAgICAgWEhSX0VSUk9SKFwiYWJvcnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuWEhSID8gdGhpcy5YSFIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogWE1MSFRUUFJlcXVlc3QgQVBJXHJcbiAgICAgKi9cclxuICAgIG92ZXJyaWRlIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogdW5rbm93biwgbGlzdGVuZXI6IHVua25vd24sIG9wdGlvbnM/OiB1bmtub3duKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuWEhSKSByZXR1cm4gdGhpcy5YSFIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlIGFzIGFueSwgbGlzdGVuZXIgYXMgYW55LCBvcHRpb25zIGFzIGFueSk7XHJcbiAgICAgICAgWEhSX0VSUk9SKFwiYWRkRXZlbnRMaXN0ZW5lclwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBvdmVycmlkZSByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IHVua25vd24sIGxpc3RlbmVyOiB1bmtub3duLCBvcHRpb25zPzogdW5rbm93bik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLlhIUikgcmV0dXJuIHRoaXMuWEhSLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSBhcyBhbnksIGxpc3RlbmVyIGFzIGFueSwgb3B0aW9ucyBhcyBhbnkpO1xyXG4gICAgICAgIFhIUl9FUlJPUihcInJlbW92ZUV2ZW50TGlzdGVuZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBYTUxIVFRQUmVxdWVzdCBBUElcclxuICAgICAqL1xyXG4gICAgc2VuZChib2R5PzogRG9jdW1lbnQgfCBYTUxIdHRwUmVxdWVzdEJvZHlJbml0IHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLlhIUikgcmV0dXJuIHRoaXMuWEhSLnNlbmQoYm9keSk7XHJcbiAgICAgICAgWEhSX0VSUk9SKFwic2VuZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIFhNTEhUVFBSZXF1ZXN0IEFQSVxyXG4gICAgICovXHJcbiAgICBzZXRSZXF1ZXN0SGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLlhIUikgcmV0dXJuIHRoaXMuWEhSLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIFhIUl9FUlJPUihcInNldFJlcXVlc3RIZWFkZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBGb3IgVW5pdCBUZXN0aW5nIG9ubHkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnN0YW5jZU9mKGNsYXNzUmVmOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5YSFIgaW5zdGFuY2VvZiBjbGFzc1JlZjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHBNb2NrU2VydmljZTogSHR0cE1vY2tTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyOiBIdHRwTW9ja0xvZ2dpbmdTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,30 @@
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, Input } from '@angular/core';
9
+ import { SizeUtil } from '../../util/size.util';
10
+ import * as i0 from "@angular/core";
11
+ export class AtxConsoleFooterComponent {
12
+ constructor() {
13
+ this.size = "0 B";
14
+ this.numLogs = 0;
15
+ }
16
+ set cumulativeSize(value) {
17
+ this.size = SizeUtil.sizeToString(value);
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxConsoleFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: AtxConsoleFooterComponent, isStandalone: true, selector: "atx-console-footer", inputs: { cumulativeSize: "cumulativeSize", numLogs: "numLogs" }, 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<footer>\r\n <div>\r\n {{ numLogs }} requests\r\n </div>\r\n <div class=\"menu-separator\"></div>\r\n <div>\r\n {{ size }} resources\r\n </div>\r\n</footer>\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}footer{background-color:var(--light-gray);border-top:1px solid var(--border-color);margin-top:6px;padding:6px 6px 6px 10px;display:flex;align-items:center;gap:6px}\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
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxConsoleFooterComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'atx-console-footer', standalone: true, imports: [], 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<footer>\r\n <div>\r\n {{ numLogs }} requests\r\n </div>\r\n <div class=\"menu-separator\"></div>\r\n <div>\r\n {{ size }} resources\r\n </div>\r\n</footer>\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}footer{background-color:var(--light-gray);border-top:1px solid var(--border-color);margin-top:6px;padding:6px 6px 6px 10px;display:flex;align-items:center;gap:6px}\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"] }]
25
+ }], propDecorators: { cumulativeSize: [{
26
+ type: Input
27
+ }], numLogs: [{
28
+ type: Input
29
+ }] } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS1mb290ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9saWIvZnJhbWV3b3JrL21vY2svaHR0cC1tb25pdG9yaW5nLWNvbnNvbGUvY29tcG9uZW50L2NvbnNvbGUtZm9vdGVyL2NvbnNvbGUtZm9vdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9jb25zb2xlLWZvb3Rlci9jb25zb2xlLWZvb3Rlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBU2hELE1BQU0sT0FBTyx5QkFBeUI7SUFQdEM7UUFTWSxTQUFJLEdBQVcsS0FBSyxDQUFDO1FBUXhCLFlBQU8sR0FBVyxDQUFDLENBQUM7S0FDNUI7SUFQQyxJQUNXLGNBQWMsQ0FBQyxLQUFhO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDOzhHQVBVLHlCQUF5QjtrR0FBekIseUJBQXlCLGdKQ2xCdEMsMGNBaUJBOzsyRkRDYSx5QkFBeUI7a0JBUHJDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxFQUFFOzhCQVNBLGNBQWM7c0JBRHhCLEtBQUs7Z0JBTUMsT0FBTztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTaXplVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvc2l6ZS51dGlsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXR4LWNvbnNvbGUtZm9vdGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25zb2xlLWZvb3Rlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvbnNvbGUtZm9vdGVyLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR4Q29uc29sZUZvb3RlckNvbXBvbmVudCB7XHJcblxyXG4gIHByb3RlY3RlZCBzaXplOiBzdHJpbmcgPSBcIjAgQlwiO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgY3VtdWxhdGl2ZVNpemUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5zaXplID0gU2l6ZVV0aWwuc2l6ZVRvU3RyaW5nKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIG51bUxvZ3M6IG51bWJlciA9IDA7XHJcbn1cclxuIiwiPCEtLVxyXG4gKiBMSUNFTlNFXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbi0tPlxyXG5cclxuPGZvb3Rlcj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAge3sgbnVtTG9ncyB9fSByZXF1ZXN0c1xyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWVudS1zZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAge3sgc2l6ZSB9fSByZXNvdXJjZXNcclxuICAgIDwvZGl2PlxyXG48L2Zvb3Rlcj5cclxuIl19
@@ -0,0 +1,30 @@
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, EventEmitter, Output } from '@angular/core';
9
+ import { AtxConsoleActionType } from '../../model/business/atx-console-action-type';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../../../../../model";
12
+ export class AtxConsoleMenuComponent {
13
+ constructor(logger) {
14
+ this.logger = logger;
15
+ this.actionList = AtxConsoleActionType;
16
+ this.action = new EventEmitter(true);
17
+ }
18
+ sendAction(type) {
19
+ this.action.emit({ type: type });
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxConsoleMenuComponent, deps: [{ token: i1.HttpMockLoggingService }], target: i0.ɵɵFactoryTarget.Component }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: AtxConsoleMenuComponent, isStandalone: true, selector: "atx-console-menu", outputs: { action: "action" }, 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<menu>\r\n <li role=\"button\" title=\"Clear network log\" (click)=\"sendAction(actionList.CLEAR_LOGS)\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16\"/>\r\n <path d=\"M11.354 4.646a.5.5 0 0 0-.708 0l-6 6a.5.5 0 0 0 .708.708l6-6a.5.5 0 0 0 0-.708\"/>\r\n </svg>\r\n </li>\r\n <div class=\"menu-separator\"></div>\r\n <li title=\"Filter\" class=\"disabled\">\r\n <svg width=\"19\" height=\"19\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5zm1 .5v1.308l4.372 4.858A.5.5 0 0 1 7 8.5v5.306l2-.666V8.5a.5.5 0 0 1 .128-.334L13.5 3.308V2z\"/>\r\n </svg>\r\n </li>\r\n <li title=\"Search\" class=\"disabled\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0\"/>\r\n </svg>\r\n </li>\r\n <div class=\"menu-separator\"></div>\r\n <li role=\"button\" title=\"Import\" (click)=\"sendAction(actionList.IMPORT_LOGS)\">\r\n <svg width=\"19\" height=\"19\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5\"/>\r\n <path d=\"M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z\"/>\r\n </svg>\r\n </li>\r\n <li role=\"button\" title=\"Export\" (click)=\"sendAction(actionList.EXPORT_LOGS)\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5\"/>\r\n <path d=\"M7.646 1.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 2.707V11.5a.5.5 0 0 1-1 0V2.707L5.354 4.854a.5.5 0 1 1-.708-.708z\"/>\r\n </svg>\r\n </li>\r\n</menu>\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}menu{padding-left:6px;background-color:var(--light-gray);position:absolute;width:100%;border-bottom:1px solid var(--border-color)}menu li{padding:6px}menu li:hover:not(.disabled){background-color:var(--dark-gray)}menu .disabled{opacity:.25}\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"] }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxConsoleMenuComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'atx-console-menu', standalone: true, imports: [], 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<menu>\r\n <li role=\"button\" title=\"Clear network log\" (click)=\"sendAction(actionList.CLEAR_LOGS)\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16\"/>\r\n <path d=\"M11.354 4.646a.5.5 0 0 0-.708 0l-6 6a.5.5 0 0 0 .708.708l6-6a.5.5 0 0 0 0-.708\"/>\r\n </svg>\r\n </li>\r\n <div class=\"menu-separator\"></div>\r\n <li title=\"Filter\" class=\"disabled\">\r\n <svg width=\"19\" height=\"19\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5zm1 .5v1.308l4.372 4.858A.5.5 0 0 1 7 8.5v5.306l2-.666V8.5a.5.5 0 0 1 .128-.334L13.5 3.308V2z\"/>\r\n </svg>\r\n </li>\r\n <li title=\"Search\" class=\"disabled\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0\"/>\r\n </svg>\r\n </li>\r\n <div class=\"menu-separator\"></div>\r\n <li role=\"button\" title=\"Import\" (click)=\"sendAction(actionList.IMPORT_LOGS)\">\r\n <svg width=\"19\" height=\"19\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5\"/>\r\n <path d=\"M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z\"/>\r\n </svg>\r\n </li>\r\n <li role=\"button\" title=\"Export\" (click)=\"sendAction(actionList.EXPORT_LOGS)\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5\"/>\r\n <path d=\"M7.646 1.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 2.707V11.5a.5.5 0 0 1-1 0V2.707L5.354 4.854a.5.5 0 1 1-.708-.708z\"/>\r\n </svg>\r\n </li>\r\n</menu>\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}menu{padding-left:6px;background-color:var(--light-gray);position:absolute;width:100%;border-bottom:1px solid var(--border-color)}menu li{padding:6px}menu li:hover:not(.disabled){background-color:var(--dark-gray)}menu .disabled{opacity:.25}\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"] }]
27
+ }], ctorParameters: () => [{ type: i1.HttpMockLoggingService }], propDecorators: { action: [{
28
+ type: Output
29
+ }] } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9jb25zb2xlLW1lbnUvY29uc29sZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9jb25zb2xlLW1lbnUvY29uc29sZS1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBU3BGLE1BQU0sT0FBTyx1QkFBdUI7SUFPbEMsWUFBc0IsTUFBOEI7UUFBOUIsV0FBTSxHQUFOLE1BQU0sQ0FBd0I7UUFMakMsZUFBVSxHQUFRLG9CQUFvQixDQUFDO1FBR25ELFdBQU0sR0FBbUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEIsQ0FBQztJQUU5QyxVQUFVLENBQUMsSUFBMEI7UUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUUsQ0FBQztJQUNwQyxDQUFDOzhHQVhVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDJHQ3BCcEMsc25GQXdDQTs7MkZEcEJhLHVCQUF1QjtrQkFQbkMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLEVBQUU7MkZBU0osTUFBTTtzQkFEWixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwTW9ja0xvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWwnO1xyXG5pbXBvcnQgeyBBdHhDb25zb2xlQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvYnVzaW5lc3MvYXR4LWNvbnNvbGUtYWN0aW9uJztcclxuaW1wb3J0IHsgQXR4Q29uc29sZUFjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9idXNpbmVzcy9hdHgtY29uc29sZS1hY3Rpb24tdHlwZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0eC1jb25zb2xlLW1lbnUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnNvbGUtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvbnNvbGUtbWVudS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0eENvbnNvbGVNZW51Q29tcG9uZW50IHtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjdGlvbkxpc3Q6IGFueSA9IEF0eENvbnNvbGVBY3Rpb25UeXBlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgYWN0aW9uOiBFdmVudEVtaXR0ZXI8QXR4Q29uc29sZUFjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyKHRydWUpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbG9nZ2VyOiBIdHRwTW9ja0xvZ2dpbmdTZXJ2aWNlKSB7fVxyXG5cclxuICBwcm90ZWN0ZWQgc2VuZEFjdGlvbih0eXBlOiBBdHhDb25zb2xlQWN0aW9uVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3Rpb24uZW1pdCh7IHR5cGU6IHR5cGUgfSApO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tXHJcbiAqIExJQ0VOU0VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuLS0+XHJcbiBcclxuPG1lbnU+XHJcbiAgICA8bGkgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiQ2xlYXIgbmV0d29yayBsb2dcIiAoY2xpY2spPVwic2VuZEFjdGlvbihhY3Rpb25MaXN0LkNMRUFSX0xPR1MpXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNlwiLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMS4zNTQgNC42NDZhLjUuNSAwIDAgMC0uNzA4IDBsLTYgNmEuNS41IDAgMCAwIC43MDguNzA4bDYtNmEuNS41IDAgMCAwIDAtLjcwOFwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgIDwvbGk+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWVudS1zZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgIDxsaSB0aXRsZT1cIkZpbHRlclwiIGNsYXNzPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMS41IDEuNUEuNS41IDAgMCAxIDIgMWgxMmEuNS41IDAgMCAxIC41LjV2MmEuNS41IDAgMCAxLS4xMjguMzM0TDEwIDguNjkyVjEzLjVhLjUuNSAwIDAgMS0uMzQyLjQ3NGwtMyAxQS41LjUgMCAwIDEgNiAxNC41VjguNjkyTDEuNjI4IDMuODM0QS41LjUgMCAwIDEgMS41IDMuNXptMSAuNXYxLjMwOGw0LjM3MiA0Ljg1OEEuNS41IDAgMCAxIDcgOC41djUuMzA2bDItLjY2NlY4LjVhLjUuNSAwIDAgMSAuMTI4LS4zMzRMMTMuNSAzLjMwOFYyelwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgIDwvbGk+XHJcbiAgICA8bGkgdGl0bGU9XCJTZWFyY2hcIiBjbGFzcz1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTExLjc0MiAxMC4zNDRhNi41IDYuNSAwIDEgMC0xLjM5NyAxLjM5OGgtLjAwMXEuMDQ0LjA2LjA5OC4xMTVsMy44NSAzLjg1YTEgMSAwIDAgMCAxLjQxNS0xLjQxNGwtMy44NS0zLjg1YTEgMSAwIDAgMC0uMTE1LS4xek0xMiA2LjVhNS41IDUuNSAwIDEgMS0xMSAwIDUuNSA1LjUgMCAwIDEgMTEgMFwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgIDwvbGk+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWVudS1zZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgIDxsaSByb2xlPVwiYnV0dG9uXCIgdGl0bGU9XCJJbXBvcnRcIiAoY2xpY2spPVwic2VuZEFjdGlvbihhY3Rpb25MaXN0LklNUE9SVF9MT0dTKVwiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxOVwiIGhlaWdodD1cIjE5XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0uNSA5LjlhLjUuNSAwIDAgMSAuNS41djIuNWExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTF2LTIuNWEuNS41IDAgMCAxIDEgMHYyLjVhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJ2LTIuNWEuNS41IDAgMCAxIC41LS41XCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTcuNjQ2IDExLjg1NGEuNS41IDAgMCAwIC43MDggMGwzLTNhLjUuNSAwIDAgMC0uNzA4LS43MDhMOC41IDEwLjI5M1YxLjVhLjUuNSAwIDAgMC0xIDB2OC43OTNMNS4zNTQgOC4xNDZhLjUuNSAwIDEgMC0uNzA4LjcwOHpcIi8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICA8L2xpPlxyXG4gICAgPGxpIHJvbGU9XCJidXR0b25cIiB0aXRsZT1cIkV4cG9ydFwiIChjbGljayk9XCJzZW5kQWN0aW9uKGFjdGlvbkxpc3QuRVhQT1JUX0xPR1MpXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTS41IDkuOWEuNS41IDAgMCAxIC41LjV2Mi41YTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtMi41YS41LjUgMCAwIDEgMSAwdjIuNWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMnYtMi41YS41LjUgMCAwIDEgLjUtLjVcIi8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy42NDYgMS4xNDZhLjUuNSAwIDAgMSAuNzA4IDBsMyAzYS41LjUgMCAwIDEtLjcwOC43MDhMOC41IDIuNzA3VjExLjVhLjUuNSAwIDAgMS0xIDBWMi43MDdMNS4zNTQgNC44NTRhLjUuNSAwIDEgMS0uNzA4LS43MDh6XCIvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9saT5cclxuPC9tZW51PlxyXG4iXX0=
@@ -0,0 +1,140 @@
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 { ChangeDetectionStrategy, Component } from '@angular/core';
9
+ import { LogLevel } from '../../../../../model';
10
+ import { HttpMonitoringConsoleLogConnector } from '../../connector/http-monitoring-console-log-connector';
11
+ import { IdentifiableComponent } from '../../../../../core';
12
+ import { AtxRequestDetailsComponent } from '../request-details/request-details.component';
13
+ import { SizeUtil } from '../../util/size.util';
14
+ import { AtxConsoleFooterComponent } from '../console-footer/console-footer.component';
15
+ import { AtxConsoleMenuComponent } from '../console-menu/console-menu.component';
16
+ import { AtxConsoleActionType } from '../../model/business/atx-console-action-type';
17
+ import { UrlUtil } from '../../util/url.util';
18
+ import { AtxLogIoService } from '../../model/service/atx-log-io.service';
19
+ import { ATX_IS_IMPORTED_LOG } from '../../model/business/atx-is-imported-log';
20
+ import { AtxIconRendererComponent } from '../renderer/icon-renderer/icon-renderer.component';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "../../../../../model";
23
+ import * as i2 from "../../model/service/atx-log-io.service";
24
+ const TPL_DASH = "---";
25
+ const PREFETCH = "prefetch";
26
+ const MS_SUFIX = " ms";
27
+ export class AtxMonitoringConsoleComponent extends IdentifiableComponent {
28
+ constructor(logger, _cdr, _subscribe, _ioSvc) {
29
+ super();
30
+ this.logger = logger;
31
+ this._cdr = _cdr;
32
+ this._subscribe = _subscribe;
33
+ this._ioSvc = _ioSvc;
34
+ this.selectedLog = null;
35
+ this.cumulativeSize = 0;
36
+ this.logs = [];
37
+ const connector = new HttpMonitoringConsoleLogConnector();
38
+ this.connector = connector;
39
+ logger.setLogConnector(connector);
40
+ this._subscribe.register(this, connector.change.subscribe((log) => this.addLog(log)));
41
+ }
42
+ ngOnDestroy() {
43
+ this._subscribe.clearAll(this);
44
+ }
45
+ logSelect(log) {
46
+ this.selectedLog = log;
47
+ }
48
+ getResourceName(log) {
49
+ return UrlUtil.getResourceName(log);
50
+ }
51
+ getResourcePath(log) {
52
+ return UrlUtil.getResourcePath(log);
53
+ }
54
+ getSize(log) {
55
+ const response = log.metadata.response;
56
+ if (response) {
57
+ const size = SizeUtil.getSize(response.body);
58
+ return SizeUtil.sizeToString(size);
59
+ }
60
+ return TPL_DASH;
61
+ }
62
+ getStatus(log) {
63
+ const response = log.metadata.response;
64
+ if (response)
65
+ return response.status;
66
+ return PREFETCH;
67
+ }
68
+ getTime(log) {
69
+ const response = log.metadata.response;
70
+ if (response)
71
+ return log.metadata.requestMetadata.duration + MS_SUFIX;
72
+ return TPL_DASH;
73
+ }
74
+ isError(log) {
75
+ const response = log.metadata.response;
76
+ if (response)
77
+ return response.status >= 400;
78
+ return false;
79
+ }
80
+ isImported(log) {
81
+ return log.metadata.request?.context.get(ATX_IS_IMPORTED_LOG);
82
+ }
83
+ checkFilters(log) {
84
+ return true;
85
+ }
86
+ userAction(action) {
87
+ switch (action.type) {
88
+ case AtxConsoleActionType.CLEAR_LOGS:
89
+ this.clearLogs();
90
+ break;
91
+ case AtxConsoleActionType.EXPORT_LOGS:
92
+ this.exportLogs();
93
+ break;
94
+ case AtxConsoleActionType.IMPORT_LOGS:
95
+ this.importLogs();
96
+ break;
97
+ }
98
+ }
99
+ addLog(log) {
100
+ if (log.level !== LogLevel.CONFIG) {
101
+ const size = SizeUtil.getSize(log.metadata.response.body);
102
+ const id = log.metadata.requestMetadata.id;
103
+ this.cumulativeSize += size;
104
+ const idx = this.logs.findIndex(prefetch => prefetch.metadata.requestMetadata.id === id);
105
+ idx > -1 ? this.logs.splice(idx, 1, log) : this.logs.push(log);
106
+ if (this.selectedLog?.metadata.requestMetadata.id === id)
107
+ this.selectedLog = log;
108
+ }
109
+ else
110
+ this.logs.push(log);
111
+ this._cdr.detectChanges();
112
+ }
113
+ clearLogs() {
114
+ this.logger.clearLogs();
115
+ this.logSelect(null);
116
+ this.cumulativeSize = this.logs.length = 0;
117
+ }
118
+ exportLogs() {
119
+ this._ioSvc.exportFile(this.logs);
120
+ }
121
+ importLogs() {
122
+ this._ioSvc.importFile();
123
+ }
124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxMonitoringConsoleComponent, deps: [{ token: i1.HttpMockLoggingService }, { token: i0.ChangeDetectorRef }, { token: i1.SubscriptionService }, { token: i2.AtxLogIoService }], target: i0.ɵɵFactoryTarget.Component }); }
125
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxMonitoringConsoleComponent, isStandalone: true, selector: "atx-http-monitoring-console", providers: [
126
+ AtxLogIoService
127
+ ], 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<atx-console-menu (action)=\"userAction($event)\"/>\r\n\r\n<div id=\"log-list-vieport\">\r\n <div class=\"request-list-wrapper\" [class.reduced-request-list]=\"selectedLog\">\r\n <table id=\"request-list\" >\r\n <thead>\r\n <tr>\r\n <th class=\"name-header\">\r\n Name\r\n <div role=\"button\" (click)=\"selectedLog = null\" title=\"Expand\" class=\"header-btn\">\r\n <svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n @if (selectedLog) {\r\n <path fill-rule=\"evenodd\" d=\"M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8m-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5\"/>\r\n }\r\n </svg>\r\n </div>\r\n </th>\r\n @if (!selectedLog) {\r\n <th>Status</th>\r\n <th>Size</th>\r\n <th>Time</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (log of logs; track log.metadata.requestMetadata.id) {\r\n @if (checkFilters(log)) {\r\n <tr [class.error-row]=\"isError(log)\" role=\"button\" (click)=\"logSelect(log)\"\r\n [class.selected-row]=\"selectedLog === log\">\r\n <td [title]=\"getResourcePath(log)\">\r\n <atx-icon-renderer [data]=\"log\"/>\r\n <div class=\"resource-cell\">\r\n {{ getResourceName(log) }}\r\n <br>\r\n {{ getResourcePath(log) }}\r\n </div>\r\n </td>\r\n @if (!selectedLog) {\r\n <td>{{ getStatus(log) }}</td>\r\n <td>{{ getSize(log) }}</td>\r\n <td>{{ getTime(log) }}</td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if (selectedLog) {\r\n <div id=\"selected-log-viewport\">\r\n <atx-monitoring-console-details [log]=\"selectedLog\" (close)=\"logSelect(null)\"/>\r\n </div>\r\n }\r\n</div>\r\n\r\n<atx-console-footer [cumulativeSize]=\"cumulativeSize\" [numLogs]=\"logs.length\"/>\r\n\r\n<svg id=\"icon-collection\">\r\n <symbol id=\"json-icon\" viewBox=\"0 0 16 16\">\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n <path d=\"M8.646 6.646a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L10.293 9 8.646 7.354a.5.5 0 0 1 0-.708m-1.292 0a.5.5 0 0 0-.708 0l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L5.707 9l1.647-1.646a.5.5 0 0 0 0-.708\"/>\r\n </symbol>\r\n <symbol id=\"bin-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M5.526 13.09c.976 0 1.524-.79 1.524-2.205 0-1.412-.548-2.203-1.524-2.203-.978 0-1.526.79-1.526 2.203 0 1.415.548 2.206 1.526 2.206zm-.832-2.205c0-1.05.29-1.612.832-1.612.358 0 .607.247.733.721L4.7 11.137a7 7 0 0 1-.006-.252m.832 1.614c-.36 0-.606-.246-.732-.718l1.556-1.145q.005.12.005.249c0 1.052-.29 1.614-.829 1.614m5.329.501v-.595H9.73V8.772h-.69l-1.19.786v.688L8.986 9.5h.05v2.906h-1.18V13h3z\"/>\r\n <path d=\"M4 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1\"/>\r\n </symbol>\r\n <symbol id=\"text-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M10.943 6H5.057L5 8h.5c.18-1.096.356-1.192 1.694-1.235l.293-.01v5.09c0 .47-.1.582-.898.655v.5H9.41v-.5c-.803-.073-.903-.184-.903-.654V6.755l.298.01c1.338.043 1.514.14 1.694 1.235h.5l-.057-2z\"/>\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n </symbol>\r\n <symbol id=\"empty-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n </symbol>\r\n <symbol id=\"blob-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\"/>\r\n <path d=\"M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2M3 2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v8l-2.083-2.083a.5.5 0 0 0-.76.063L8 11 5.835 9.7a.5.5 0 0 0-.611.076L3 12z\"/>\r\n </symbol>\r\n</svg>", 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}:host{position:relative;padding:0;margin:0}#log-list-vieport{position:absolute;width:100%;display:flex;flex-direction:row;gap:6px;padding:6px;top:34px;bottom:34px}#icon-collection{visibility:hidden;width:0;height:0}.request-list-wrapper{height:100%;flex-grow:1;overflow:hidden auto;border:1px solid var(--border-color)}#request-list{-webkit-user-select:none;user-select:none;width:100%}#request-list tbody tr td:first-of-type{display:flex;gap:6px}#request-list svg{margin-top:2px}#request-list .name-header{display:flex;align-items:center}#request-list thead{position:sticky;top:0}#request-list .resource-cell{max-height:40px;overflow:hidden}#selected-log-viewport{height:100%;width:80%}atx-console-footer{position:absolute;width:100%;bottom:0}\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: AtxRequestDetailsComponent, selector: "atx-monitoring-console-details", inputs: ["log"], outputs: ["close"] }, { kind: "component", type: AtxConsoleFooterComponent, selector: "atx-console-footer", inputs: ["cumulativeSize", "numLogs"] }, { kind: "component", type: AtxConsoleMenuComponent, selector: "atx-console-menu", outputs: ["action"] }, { kind: "component", type: AtxIconRendererComponent, selector: "atx-icon-renderer", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxMonitoringConsoleComponent, decorators: [{
130
+ type: Component,
131
+ args: [{ selector: 'atx-http-monitoring-console', standalone: true, imports: [
132
+ AtxRequestDetailsComponent,
133
+ AtxConsoleFooterComponent,
134
+ AtxConsoleMenuComponent,
135
+ AtxIconRendererComponent
136
+ ], providers: [
137
+ AtxLogIoService
138
+ ], 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<atx-console-menu (action)=\"userAction($event)\"/>\r\n\r\n<div id=\"log-list-vieport\">\r\n <div class=\"request-list-wrapper\" [class.reduced-request-list]=\"selectedLog\">\r\n <table id=\"request-list\" >\r\n <thead>\r\n <tr>\r\n <th class=\"name-header\">\r\n Name\r\n <div role=\"button\" (click)=\"selectedLog = null\" title=\"Expand\" class=\"header-btn\">\r\n <svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n @if (selectedLog) {\r\n <path fill-rule=\"evenodd\" d=\"M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8m-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5\"/>\r\n }\r\n </svg>\r\n </div>\r\n </th>\r\n @if (!selectedLog) {\r\n <th>Status</th>\r\n <th>Size</th>\r\n <th>Time</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (log of logs; track log.metadata.requestMetadata.id) {\r\n @if (checkFilters(log)) {\r\n <tr [class.error-row]=\"isError(log)\" role=\"button\" (click)=\"logSelect(log)\"\r\n [class.selected-row]=\"selectedLog === log\">\r\n <td [title]=\"getResourcePath(log)\">\r\n <atx-icon-renderer [data]=\"log\"/>\r\n <div class=\"resource-cell\">\r\n {{ getResourceName(log) }}\r\n <br>\r\n {{ getResourcePath(log) }}\r\n </div>\r\n </td>\r\n @if (!selectedLog) {\r\n <td>{{ getStatus(log) }}</td>\r\n <td>{{ getSize(log) }}</td>\r\n <td>{{ getTime(log) }}</td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if (selectedLog) {\r\n <div id=\"selected-log-viewport\">\r\n <atx-monitoring-console-details [log]=\"selectedLog\" (close)=\"logSelect(null)\"/>\r\n </div>\r\n }\r\n</div>\r\n\r\n<atx-console-footer [cumulativeSize]=\"cumulativeSize\" [numLogs]=\"logs.length\"/>\r\n\r\n<svg id=\"icon-collection\">\r\n <symbol id=\"json-icon\" viewBox=\"0 0 16 16\">\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n <path d=\"M8.646 6.646a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L10.293 9 8.646 7.354a.5.5 0 0 1 0-.708m-1.292 0a.5.5 0 0 0-.708 0l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L5.707 9l1.647-1.646a.5.5 0 0 0 0-.708\"/>\r\n </symbol>\r\n <symbol id=\"bin-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M5.526 13.09c.976 0 1.524-.79 1.524-2.205 0-1.412-.548-2.203-1.524-2.203-.978 0-1.526.79-1.526 2.203 0 1.415.548 2.206 1.526 2.206zm-.832-2.205c0-1.05.29-1.612.832-1.612.358 0 .607.247.733.721L4.7 11.137a7 7 0 0 1-.006-.252m.832 1.614c-.36 0-.606-.246-.732-.718l1.556-1.145q.005.12.005.249c0 1.052-.29 1.614-.829 1.614m5.329.501v-.595H9.73V8.772h-.69l-1.19.786v.688L8.986 9.5h.05v2.906h-1.18V13h3z\"/>\r\n <path d=\"M4 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1\"/>\r\n </symbol>\r\n <symbol id=\"text-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M10.943 6H5.057L5 8h.5c.18-1.096.356-1.192 1.694-1.235l.293-.01v5.09c0 .47-.1.582-.898.655v.5H9.41v-.5c-.803-.073-.903-.184-.903-.654V6.755l.298.01c1.338.043 1.514.14 1.694 1.235h.5l-.057-2z\"/>\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n </symbol>\r\n <symbol id=\"empty-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n </symbol>\r\n <symbol id=\"blob-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\"/>\r\n <path d=\"M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2M3 2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v8l-2.083-2.083a.5.5 0 0 0-.76.063L8 11 5.835 9.7a.5.5 0 0 0-.611.076L3 12z\"/>\r\n </symbol>\r\n</svg>", 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}:host{position:relative;padding:0;margin:0}#log-list-vieport{position:absolute;width:100%;display:flex;flex-direction:row;gap:6px;padding:6px;top:34px;bottom:34px}#icon-collection{visibility:hidden;width:0;height:0}.request-list-wrapper{height:100%;flex-grow:1;overflow:hidden auto;border:1px solid var(--border-color)}#request-list{-webkit-user-select:none;user-select:none;width:100%}#request-list tbody tr td:first-of-type{display:flex;gap:6px}#request-list svg{margin-top:2px}#request-list .name-header{display:flex;align-items:center}#request-list thead{position:sticky;top:0}#request-list .resource-cell{max-height:40px;overflow:hidden}#selected-log-viewport{height:100%;width:80%}atx-console-footer{position:absolute;width:100%;bottom:0}\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"] }]
139
+ }], ctorParameters: () => [{ type: i1.HttpMockLoggingService }, { type: i0.ChangeDetectorRef }, { type: i1.SubscriptionService }, { type: i2.AtxLogIoService }] });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tb25pdG9yaW5nLWNvbnNvbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9saWIvZnJhbWV3b3JrL21vY2svaHR0cC1tb25pdG9yaW5nLWNvbnNvbGUvY29tcG9uZW50L2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9odHRwLW1vbml0b3JpbmctY29uc29sZS9odHRwLW1vbml0b3JpbmctY29uc29sZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQW9ELFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUVqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsT0FB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QXVCO3dCQUN2Qix3QkFBd0I7cUJBQ3pCLGFBQ1U7d0JBQ1QsZUFBZTtxQkFDaEIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cclxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBNb2NrTG9nZ2luZ1NlcnZpY2UsIExvZywgU3Vic2NyaXB0aW9uU2VydmljZSwgTG9nTGV2ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9tb2RlbCc7XHJcbmltcG9ydCB7IFV1aWQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsJztcclxuaW1wb3J0IHsgSHR0cE1vbml0b3JpbmdDb25zb2xlTG9nQ29ubmVjdG9yIH0gZnJvbSAnLi4vLi4vY29ubmVjdG9yL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlLWxvZy1jb25uZWN0b3InO1xyXG5pbXBvcnQgeyBJZGVudGlmaWFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlJztcclxuaW1wb3J0IHsgQXR4UmVxdWVzdERldGFpbHNDb21wb25lbnQgfSBmcm9tICcuLi9yZXF1ZXN0LWRldGFpbHMvcmVxdWVzdC1kZXRhaWxzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpemVVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC9zaXplLnV0aWwnO1xyXG5pbXBvcnQgeyBBdHhDb25zb2xlRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uc29sZS1mb290ZXIvY29uc29sZS1mb290ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXR4Q29uc29sZU1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jb25zb2xlLW1lbnUvY29uc29sZS1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF0eENvbnNvbGVBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9idXNpbmVzcy9hdHgtY29uc29sZS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBBdHhDb25zb2xlQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2J1c2luZXNzL2F0eC1jb25zb2xlLWFjdGlvbi10eXBlJztcclxuaW1wb3J0IHsgVXJsVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXJsLnV0aWwnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEF0eExvZ0lvU2VydmljZSB9IGZyb20gJy4uLy4uL21vZGVsL3NlcnZpY2UvYXR4LWxvZy1pby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVRYX0lTX0lNUE9SVEVEX0xPRyB9IGZyb20gJy4uLy4uL21vZGVsL2J1c2luZXNzL2F0eC1pcy1pbXBvcnRlZC1sb2cnO1xyXG5pbXBvcnQgeyBBdHhJY29uUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9yZW5kZXJlci9pY29uLXJlbmRlcmVyL2ljb24tcmVuZGVyZXIuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IFRQTF9EQVNIOiBzdHJpbmcgPSBcIi0tLVwiO1xyXG5jb25zdCBQUkVGRVRDSDogc3RyaW5nID0gXCJwcmVmZXRjaFwiO1xyXG5jb25zdCBNU19TVUZJWDogc3RyaW5nID0gXCIgbXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXR4LWh0dHAtbW9uaXRvcmluZy1jb25zb2xlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEF0eFJlcXVlc3REZXRhaWxzQ29tcG9uZW50LFxyXG4gICAgQXR4Q29uc29sZUZvb3RlckNvbXBvbmVudCxcclxuICAgIEF0eENvbnNvbGVNZW51Q29tcG9uZW50LFxyXG4gICAgQXR4SWNvblJlbmRlcmVyQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIEF0eExvZ0lvU2VydmljZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vaHR0cC1tb25pdG9yaW5nLWNvbnNvbGUuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdHhNb25pdG9yaW5nQ29uc29sZUNvbXBvbmVudCBleHRlbmRzIElkZW50aWZpYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHByb3RlY3RlZCBjb25uZWN0b3I6IEh0dHBNb25pdG9yaW5nQ29uc29sZUxvZ0Nvbm5lY3RvcjtcclxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRMb2c6IExvZyB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBjdW11bGF0aXZlU2l6ZTogbnVtYmVyID0gMDtcclxuICBwcm90ZWN0ZWQgbG9nczogTG9nW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGxvZ2dlcjogSHR0cE1vY2tMb2dnaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX3N1YnNjcmliZTogU3Vic2NyaXB0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIF9pb1N2YzogQXR4TG9nSW9TZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgY29uc3QgY29ubmVjdG9yOiBIdHRwTW9uaXRvcmluZ0NvbnNvbGVMb2dDb25uZWN0b3IgPSBuZXcgSHR0cE1vbml0b3JpbmdDb25zb2xlTG9nQ29ubmVjdG9yKCk7XHJcbiAgICB0aGlzLmNvbm5lY3RvciA9IGNvbm5lY3RvcjtcclxuICAgIGxvZ2dlci5zZXRMb2dDb25uZWN0b3IoY29ubmVjdG9yKTtcclxuICAgIHRoaXMuX3N1YnNjcmliZS5yZWdpc3Rlcih0aGlzLCBjb25uZWN0b3IuY2hhbmdlLnN1YnNjcmliZSgobG9nOiBMb2cpPT4gdGhpcy5hZGRMb2cobG9nKSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaWJlLmNsZWFyQWxsKHRoaXMpO1xyXG4gIH1cclxuICBcclxuICBwcm90ZWN0ZWQgbG9nU2VsZWN0KGxvZzogTG9nIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZExvZyA9IGxvZztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRSZXNvdXJjZU5hbWUobG9nOiBMb2cpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVybFV0aWwuZ2V0UmVzb3VyY2VOYW1lKGxvZyk7XHJcbiAgfVxyXG4gIFxyXG4gIHByb3RlY3RlZCBnZXRSZXNvdXJjZVBhdGgobG9nOiBMb2cpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVybFV0aWwuZ2V0UmVzb3VyY2VQYXRoKGxvZyk7XHJcbiAgfVxyXG4gIFxyXG4gIHByb3RlY3RlZCBnZXRTaXplKGxvZzogTG9nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PiB8IG51bGwgPSBsb2cubWV0YWRhdGEucmVzcG9uc2U7XHJcbiAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgY29uc3Qgc2l6ZTogbnVtYmVyID0gU2l6ZVV0aWwuZ2V0U2l6ZShyZXNwb25zZS5ib2R5KTtcclxuICAgICAgcmV0dXJuIFNpemVVdGlsLnNpemVUb1N0cmluZyhzaXplKTtcclxuICAgIH1cclxuICAgIHJldHVybiBUUExfREFTSDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRTdGF0dXMobG9nOiBMb2cpOiBzdHJpbmcgfCBudW1iZXIgeyBjb25zdCByZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4gfCBudWxsID0gbG9nLm1ldGFkYXRhLnJlc3BvbnNlO1xyXG4gICAgaWYgKHJlc3BvbnNlKSByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgcmV0dXJuIFBSRUZFVENIO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldFRpbWUobG9nOiBMb2cpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+IHwgbnVsbCA9IGxvZy5tZXRhZGF0YS5yZXNwb25zZTtcclxuICAgIGlmIChyZXNwb25zZSkgcmV0dXJuIGxvZy5tZXRhZGF0YS5yZXF1ZXN0TWV0YWRhdGEuZHVyYXRpb24gKyBNU19TVUZJWDtcclxuICAgIHJldHVybiBUUExfREFTSDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc0Vycm9yKGxvZzogTG9nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4gfCBudWxsID0gbG9nLm1ldGFkYXRhLnJlc3BvbnNlO1xyXG4gICAgaWYgKHJlc3BvbnNlKSByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID49IDQwMDtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc0ltcG9ydGVkKGxvZzogTG9nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbG9nLm1ldGFkYXRhLnJlcXVlc3Q/LmNvbnRleHQuZ2V0KEFUWF9JU19JTVBPUlRFRF9MT0cpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNoZWNrRmlsdGVycyhsb2c6IExvZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXNlckFjdGlvbihhY3Rpb246IEF0eENvbnNvbGVBY3Rpb24pOiB2b2lkIHtcclxuICAgIHN3aXRjaChhY3Rpb24udHlwZSkge1xyXG4gICAgICBjYXNlIEF0eENvbnNvbGVBY3Rpb25UeXBlLkNMRUFSX0xPR1MgOiB0aGlzLmNsZWFyTG9ncygpOyBicmVhaztcclxuICAgICAgY2FzZSBBdHhDb25zb2xlQWN0aW9uVHlwZS5FWFBPUlRfTE9HUzogdGhpcy5leHBvcnRMb2dzKCk7IGJyZWFrO1xyXG4gICAgICBjYXNlIEF0eENvbnNvbGVBY3Rpb25UeXBlLklNUE9SVF9MT0dTOiB0aGlzLmltcG9ydExvZ3MoKTsgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZExvZyhsb2c6IExvZyk6IHZvaWQge1xyXG4gICAgaWYgKGxvZy5sZXZlbCAhPT0gTG9nTGV2ZWwuQ09ORklHKSB7XHJcbiAgICAgIGNvbnN0IHNpemU6IG51bWJlciA9IFNpemVVdGlsLmdldFNpemUobG9nLm1ldGFkYXRhLnJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICBjb25zdCBpZDogVXVpZCA9IGxvZy5tZXRhZGF0YS5yZXF1ZXN0TWV0YWRhdGEuaWQ7XHJcbiAgICAgIHRoaXMuY3VtdWxhdGl2ZVNpemUgKz0gc2l6ZTtcclxuICAgICAgY29uc3QgaWR4ID0gdGhpcy5sb2dzLmZpbmRJbmRleChwcmVmZXRjaCA9PiBwcmVmZXRjaC5tZXRhZGF0YS5yZXF1ZXN0TWV0YWRhdGEuaWQgPT09IGlkKTtcclxuICAgICAgaWR4ID4gLTEgPyB0aGlzLmxvZ3Muc3BsaWNlKGlkeCwgMSwgbG9nKSA6IHRoaXMubG9ncy5wdXNoKGxvZyk7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkTG9nPy5tZXRhZGF0YS5yZXF1ZXN0TWV0YWRhdGEuaWQgPT09IGlkKSB0aGlzLnNlbGVjdGVkTG9nID0gbG9nO1xyXG4gICAgfSBlbHNlIHRoaXMubG9ncy5wdXNoKGxvZyk7XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBcclxuICBwcml2YXRlIGNsZWFyTG9ncygpOiB2b2lkIHtcclxuICAgIHRoaXMubG9nZ2VyLmNsZWFyTG9ncygpO1xyXG4gICAgdGhpcy5sb2dTZWxlY3QobnVsbCk7XHJcbiAgICB0aGlzLmN1bXVsYXRpdmVTaXplID0gdGhpcy5sb2dzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydExvZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pb1N2Yy5leHBvcnRGaWxlKHRoaXMubG9ncyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGltcG9ydExvZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pb1N2Yy5pbXBvcnRGaWxlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS1cclxuICogTElDRU5TRVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4tLT5cclxuXHJcbjxhdHgtY29uc29sZS1tZW51IChhY3Rpb24pPVwidXNlckFjdGlvbigkZXZlbnQpXCIvPlxyXG5cclxuPGRpdiBpZD1cImxvZy1saXN0LXZpZXBvcnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyZXF1ZXN0LWxpc3Qtd3JhcHBlclwiIFtjbGFzcy5yZWR1Y2VkLXJlcXVlc3QtbGlzdF09XCJzZWxlY3RlZExvZ1wiPlxyXG4gICAgICAgIDx0YWJsZSBpZD1cInJlcXVlc3QtbGlzdFwiID5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm5hbWUtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbGVjdGVkTG9nID0gbnVsbFwiIHRpdGxlPVwiRXhwYW5kXCIgY2xhc3M9XCJoZWFkZXItYnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZExvZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk02IDhhLjUuNSAwIDAgMCAuNS41aDUuNzkzbC0yLjE0NyAyLjE0NmEuNS41IDAgMCAwIC43MDguNzA4bDMtM2EuNS41IDAgMCAwIDAtLjcwOGwtMy0zYS41LjUgMCAwIDAtLjcwOC43MDhMMTIuMjkzIDcuNUg2LjVBLjUuNSAwIDAgMCA2IDhtLTIuNSA3YS41LjUgMCAwIDEtLjUtLjV2LTEzYS41LjUgMCAwIDEgMSAwdjEzYS41LjUgMCAwIDEtLjUuNVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFzZWxlY3RlZExvZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+VGltZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgQGZvciAobG9nIG9mIGxvZ3M7IHRyYWNrIGxvZy5tZXRhZGF0YS5yZXF1ZXN0TWV0YWRhdGEuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNoZWNrRmlsdGVycyhsb2cpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbY2xhc3MuZXJyb3Itcm93XT1cImlzRXJyb3IobG9nKVwiIHJvbGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9nU2VsZWN0KGxvZylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLXJvd109XCJzZWxlY3RlZExvZyA9PT0gbG9nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgW3RpdGxlXT1cImdldFJlc291cmNlUGF0aChsb2cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF0eC1pY29uLXJlbmRlcmVyIFtkYXRhXT1cImxvZ1wiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzb3VyY2UtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSZXNvdXJjZU5hbWUobG9nKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFJlc291cmNlUGF0aChsb2cpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghc2VsZWN0ZWRMb2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgZ2V0U3RhdHVzKGxvZykgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBnZXRTaXplKGxvZykgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBnZXRUaW1lKGxvZykgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKHNlbGVjdGVkTG9nKSB7XHJcbiAgICAgICAgPGRpdiBpZD1cInNlbGVjdGVkLWxvZy12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICA8YXR4LW1vbml0b3JpbmctY29uc29sZS1kZXRhaWxzIFtsb2ddPVwic2VsZWN0ZWRMb2dcIiAoY2xvc2UpPVwibG9nU2VsZWN0KG51bGwpXCIvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG48L2Rpdj5cclxuXHJcbjxhdHgtY29uc29sZS1mb290ZXIgW2N1bXVsYXRpdmVTaXplXT1cImN1bXVsYXRpdmVTaXplXCIgW251bUxvZ3NdPVwibG9ncy5sZW5ndGhcIi8+XHJcblxyXG48c3ZnIGlkPVwiaWNvbi1jb2xsZWN0aW9uXCI+XHJcbiAgICA8c3ltYm9sIGlkPVwianNvbi1pY29uXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNMTQgNC41VjE0YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmg1LjV6bS0zIDBBMS41IDEuNSAwIDAgMSA5LjUgM1YxSDRhMSAxIDAgMCAwLTEgMXYxMmExIDEgMCAwIDAgMSAxaDhhMSAxIDAgMCAwIDEtMVY0LjV6XCIvPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNOC42NDYgNi42NDZhLjUuNSAwIDAgMSAuNzA4IDBsMiAyYS41LjUgMCAwIDEgMCAuNzA4bC0yIDJhLjUuNSAwIDAgMS0uNzA4LS43MDhMMTAuMjkzIDkgOC42NDYgNy4zNTRhLjUuNSAwIDAgMSAwLS43MDhtLTEuMjkyIDBhLjUuNSAwIDAgMC0uNzA4IDBsLTIgMmEuNS41IDAgMCAwIDAgLjcwOGwyIDJhLjUuNSAwIDAgMCAuNzA4LS43MDhMNS43MDcgOWwxLjY0Ny0xLjY0NmEuNS41IDAgMCAwIDAtLjcwOFwiLz5cclxuICAgIDwvc3ltYm9sPlxyXG4gICAgPHN5bWJvbCBpZD1cImJpbi1pY29uXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cclxuICAgICAgICA8cGF0aCBkPVwiTTUuNTI2IDEzLjA5Yy45NzYgMCAxLjUyNC0uNzkgMS41MjQtMi4yMDUgMC0xLjQxMi0uNTQ4LTIuMjAzLTEuNTI0LTIuMjAzLS45NzggMC0xLjUyNi43OS0xLjUyNiAyLjIwMyAwIDEuNDE1LjU0OCAyLjIwNiAxLjUyNiAyLjIwNnptLS44MzItMi4yMDVjMC0xLjA1LjI5LTEuNjEyLjgzMi0xLjYxMi4zNTggMCAuNjA3LjI0Ny43MzMuNzIxTDQuNyAxMS4xMzdhNyA3IDAgMCAxLS4wMDYtLjI1Mm0uODMyIDEuNjE0Yy0uMzYgMC0uNjA2LS4yNDYtLjczMi0uNzE4bDEuNTU2LTEuMTQ1cS4wMDUuMTIuMDA1LjI0OWMwIDEuMDUyLS4yOSAxLjYxNC0uODI5IDEuNjE0bTUuMzI5LjUwMXYtLjU5NUg5LjczVjguNzcyaC0uNjlsLTEuMTkuNzg2di42ODhMOC45ODYgOS41aC4wNXYyLjkwNmgtMS4xOFYxM2gzelwiLz5cclxuICAgICAgICA8cGF0aCBkPVwiTTQgMGEyIDIgMCAwIDAtMiAydjEyYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjJhMiAyIDAgMCAwLTItMnptMCAxaDhhMSAxIDAgMCAxIDEgMXYxMmExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFcIi8+XHJcbiAgICA8L3N5bWJvbD5cclxuICAgIDxzeW1ib2wgaWQ9XCJ0ZXh0LWljb25cIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNMTAuOTQzIDZINS4wNTdMNSA4aC41Yy4xOC0xLjA5Ni4zNTYtMS4xOTIgMS42OTQtMS4yMzVsLjI5My0uMDF2NS4wOWMwIC40Ny0uMS41ODItLjg5OC42NTV2LjVIOS40MXYtLjVjLS44MDMtLjA3My0uOTAzLS4xODQtLjkwMy0uNjU0VjYuNzU1bC4yOTguMDFjMS4zMzguMDQzIDEuNTE0LjE0IDEuNjk0IDEuMjM1aC41bC0uMDU3LTJ6XCIvPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNMTQgNC41VjE0YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmg1LjV6bS0zIDBBMS41IDEuNSAwIDAgMSA5LjUgM1YxSDRhMSAxIDAgMCAwLTEgMXYxMmExIDEgMCAwIDAgMSAxaDhhMSAxIDAgMCAwIDEtMVY0LjV6XCIvPlxyXG4gICAgPC9zeW1ib2w+XHJcbiAgICA8c3ltYm9sIGlkPVwiZW1wdHktaWNvblwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XHJcbiAgICAgICAgPHBhdGggZD1cIk0xNCA0LjVWMTRhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDUuNXptLTMgMEExLjUgMS41IDAgMCAxIDkuNSAzVjFINGExIDEgMCAwIDAtMSAxdjEyYTEgMSAwIDAgMCAxIDFoOGExIDEgMCAwIDAgMS0xVjQuNXpcIi8+XHJcbiAgICA8L3N5bWJvbD5cclxuICAgIDxzeW1ib2wgaWQ9XCJibG9iLWljb25cIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNOC4wMDIgNS41YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwXCIvPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNMTIgMEg0YTIgMiAwIDAgMC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWMmEyIDIgMCAwIDAtMi0yTTMgMmExIDEgMCAwIDEgMS0xaDhhMSAxIDAgMCAxIDEgMXY4bC0yLjA4My0yLjA4M2EuNS41IDAgMCAwLS43Ni4wNjNMOCAxMSA1LjgzNSA5LjdhLjUuNSAwIDAgMC0uNjExLjA3NkwzIDEyelwiLz5cclxuICAgIDwvc3ltYm9sPlxyXG48L3N2Zz4iXX0=
@@ -0,0 +1,37 @@
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, Input } from '@angular/core';
9
+ import { ATX_IS_IMPORTED_LOG } from '../../../model/business/atx-is-imported-log';
10
+ import { ConsoleBodyType } from '../../../util/console-body-type';
11
+ import { DataUtil } from '../../../util/data.util';
12
+ import * as i0 from "@angular/core";
13
+ export class AtxIconRendererComponent {
14
+ constructor() {
15
+ this.bodyType = ConsoleBodyType.INVALID;
16
+ this.hasReponse = false;
17
+ this.isImported = false;
18
+ }
19
+ set data(log) {
20
+ const response = log.metadata.response;
21
+ const complete = response !== null && response !== undefined;
22
+ this.hasReponse = complete;
23
+ if (complete)
24
+ this.bodyType = DataUtil.getBodyType(response.body);
25
+ this.log = log;
26
+ this.isImported = log.metadata.request?.context.get(ATX_IS_IMPORTED_LOG);
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxIconRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxIconRendererComponent, isStandalone: true, selector: "atx-icon-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@if (log) {\r\n @if (hasReponse) {\r\n <svg width=\"24\" height=\"24\" fill=\"currentColor\">\r\n @if (bodyType == 0) {\r\n <use href=\"#empty-icon\"/>\r\n } @else if (bodyType == 1) {\r\n <use href=\"#json-icon\"/>\r\n } @else if (bodyType == 2) {\r\n <use href=\"#text-icon\"/>\r\n } @else if (bodyType == 3) {\r\n <use href=\"#blob-icon\"/>\r\n } @else if (bodyType == 5) {\r\n <use href=\"#bin-icon\"/>\r\n }\r\n </svg>\r\n @if (isImported) {\r\n <svg width=\"24\" height=\"24\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\" d=\"M3.5 6a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h9a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 1 0-1h2A1.5 1.5 0 0 1 14 6.5v8a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 14.5v-8A1.5 1.5 0 0 1 3.5 5h2a.5.5 0 0 1 0 1z\"/>\r\n <path fill-rule=\"evenodd\" d=\"M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z\"/>\r\n </svg>\r\n }\r\n } @else {\r\n <div class=\"spinner\">\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 </div>\r\n }\r\n}\r\n", styles: [":host{display:flex;padding:0;margin:3px 0 0;min-width:24px}.spinner{margin-left:auto;width:20px;height:20px}.spinner 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"] }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxIconRendererComponent, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: 'atx-icon-renderer', standalone: true, imports: [], 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 (log) {\r\n @if (hasReponse) {\r\n <svg width=\"24\" height=\"24\" fill=\"currentColor\">\r\n @if (bodyType == 0) {\r\n <use href=\"#empty-icon\"/>\r\n } @else if (bodyType == 1) {\r\n <use href=\"#json-icon\"/>\r\n } @else if (bodyType == 2) {\r\n <use href=\"#text-icon\"/>\r\n } @else if (bodyType == 3) {\r\n <use href=\"#blob-icon\"/>\r\n } @else if (bodyType == 5) {\r\n <use href=\"#bin-icon\"/>\r\n }\r\n </svg>\r\n @if (isImported) {\r\n <svg width=\"24\" height=\"24\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\" d=\"M3.5 6a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h9a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 1 0-1h2A1.5 1.5 0 0 1 14 6.5v8a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 14.5v-8A1.5 1.5 0 0 1 3.5 5h2a.5.5 0 0 1 0 1z\"/>\r\n <path fill-rule=\"evenodd\" d=\"M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z\"/>\r\n </svg>\r\n }\r\n } @else {\r\n <div class=\"spinner\">\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 </div>\r\n }\r\n}\r\n", styles: [":host{display:flex;padding:0;margin:3px 0 0;min-width:24px}.spinner{margin-left:auto;width:20px;height:20px}.spinner 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"] }]
34
+ }], propDecorators: { data: [{
35
+ type: Input
36
+ }] } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9mcmFtZXdvcmsvbW9jay9odHRwLW1vbml0b3JpbmctY29uc29sZS9jb21wb25lbnQvcmVuZGVyZXIvaWNvbi1yZW5kZXJlci9pY29uLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9pY29uLXJlbmRlcmVyL2ljb24tcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFVbkQsTUFBTSxPQUFPLHdCQUF3QjtJQVByQztRQVNZLGFBQVEsR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUNwRCxlQUFVLEdBQVksS0FBSyxDQUFDO1FBWTVCLGVBQVUsR0FBWSxLQUFLLENBQUM7S0FFdkM7SUFaQyxJQUNXLElBQUksQ0FBQyxHQUFRO1FBQ3RCLE1BQU0sUUFBUSxHQUFzQixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBWSxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxTQUFTLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDM0IsSUFBSSxRQUFRO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7OEdBYlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsdUdDdEJyQyw2a0VBc0NBOzsyRkRoQmEsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsRUFBRTs4QkFVQSxJQUFJO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cclxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVsJztcclxuaW1wb3J0IHsgQVRYX0lTX0lNUE9SVEVEX0xPRyB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2J1c2luZXNzL2F0eC1pcy1pbXBvcnRlZC1sb2cnO1xyXG5pbXBvcnQgeyBDb25zb2xlQm9keVR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvbnNvbGUtYm9keS10eXBlJztcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL2RhdGEudXRpbCc7XHJcbmltcG9ydCB7IEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXR4LWljb24tcmVuZGVyZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ljb24tcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9pY29uLXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR4SWNvblJlbmRlcmVyQ29tcG9uZW50IHtcclxuXHJcbiAgcHJvdGVjdGVkIGJvZHlUeXBlOiBDb25zb2xlQm9keVR5cGUgPSBDb25zb2xlQm9keVR5cGUuSU5WQUxJRDtcclxuICBwcm90ZWN0ZWQgaGFzUmVwb25zZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZGF0YShsb2c6IExvZykge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+ID0gbG9nLm1ldGFkYXRhLnJlc3BvbnNlO1xyXG4gICAgY29uc3QgY29tcGxldGU6IGJvb2xlYW4gPSByZXNwb25zZSAhPT0gbnVsbCAmJiByZXNwb25zZSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5oYXNSZXBvbnNlID0gY29tcGxldGU7XHJcbiAgICBpZiAoY29tcGxldGUpIHRoaXMuYm9keVR5cGUgPSBEYXRhVXRpbC5nZXRCb2R5VHlwZShyZXNwb25zZS5ib2R5KTtcclxuICAgIHRoaXMubG9nID0gbG9nO1xyXG4gICAgdGhpcy5pc0ltcG9ydGVkID0gbG9nLm1ldGFkYXRhLnJlcXVlc3Q/LmNvbnRleHQuZ2V0KEFUWF9JU19JTVBPUlRFRF9MT0cpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGlzSW1wb3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgbG9nITogTG9nO1xyXG59XHJcbiIsIjwhLS1cclxuICogTElDRU5TRVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4tLT5cclxuXHJcbkBpZiAobG9nKSB7XHJcbiAgICBAaWYgKGhhc1JlcG9uc2UpIHtcclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgQGlmIChib2R5VHlwZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICA8dXNlIGhyZWY9XCIjZW1wdHktaWNvblwiLz5cclxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoYm9keVR5cGUgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI2pzb24taWNvblwiLz5cclxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoYm9keVR5cGUgPT0gMikge1xyXG4gICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3RleHQtaWNvblwiLz5cclxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoYm9keVR5cGUgPT0gMykge1xyXG4gICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI2Jsb2ItaWNvblwiLz5cclxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoYm9keVR5cGUgPT0gNSkge1xyXG4gICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI2Jpbi1pY29uXCIvPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgQGlmIChpc0ltcG9ydGVkKSB7XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTMuNSA2YS41LjUgMCAwIDAtLjUuNXY4YS41LjUgMCAwIDAgLjUuNWg5YS41LjUgMCAwIDAgLjUtLjV2LThhLjUuNSAwIDAgMC0uNS0uNWgtMmEuNS41IDAgMCAxIDAtMWgyQTEuNSAxLjUgMCAwIDEgMTQgNi41djhhMS41IDEuNSAwIDAgMS0xLjUgMS41aC05QTEuNSAxLjUgMCAwIDEgMiAxNC41di04QTEuNSAxLjUgMCAwIDEgMy41IDVoMmEuNS41IDAgMCAxIDAgMXpcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk03LjY0NiAxMS44NTRhLjUuNSAwIDAgMCAuNzA4IDBsMy0zYS41LjUgMCAwIDAtLjcwOC0uNzA4TDguNSAxMC4yOTNWMS41YS41LjUgMCAwIDAtMSAwdjguNzkzTDUuMzU0IDguMTQ2YS41LjUgMCAxIDAtLjcwOC43MDh6XCIvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICB9XHJcbiAgICB9IEBlbHNlIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUzNCA3aDMuOTMyYS4yNS4yNSAwIDAgMSAuMTkyLjQxbC0xLjk2NiAyLjM2YS4yNS4yNSAwIDAgMS0uMzg0IDBsLTEuOTY2LTIuMzZhLjI1LjI1IDAgMCAxIC4xOTItLjQxbS0xMSAyaDMuOTMyYS4yNS4yNSAwIDAgMCAuMTkyLS40MUwyLjY5MiA2LjIzYS4yNS4yNSAwIDAgMC0uMzg0IDBMLjM0MiA4LjU5QS4yNS4yNSAwIDAgMCAuNTM0IDlcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk04IDNjLTEuNTUyIDAtMi45NC43MDctMy44NTcgMS44MThhLjUuNSAwIDEgMS0uNzcxLS42MzZBNi4wMDIgNi4wMDIgMCAwIDEgMTMuOTE3IDdIMTIuOUE1IDUgMCAwIDAgOCAzTTMuMSA5YTUuMDAyIDUuMDAyIDAgMCAwIDguNzU3IDIuMTgyLjUuNSAwIDEgMSAuNzcxLjYzNkE2LjAwMiA2LjAwMiAwIDAgMSAyLjA4MyA5elwiLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,34 @@
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, Input } from '@angular/core';
9
+ import { AtxJsonViewerPanelComponent } from '../json-viewer-panel/json-viewer-panel.component';
10
+ import { DataUtil } from '../../../util/data.util';
11
+ import * as i0 from "@angular/core";
12
+ export class AtxJsonViewerComponent {
13
+ constructor() {
14
+ this.parsedData = null;
15
+ }
16
+ set data(value) {
17
+ if (!value) {
18
+ this.parsedData = null;
19
+ return;
20
+ }
21
+ this.parsedData = DataUtil.parseJson(value);
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxJsonViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: AtxJsonViewerComponent, isStandalone: true, selector: "atx-json-viewer", 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<atx-json-viewer-panel [data]=\"parsedData\"/>", styles: ["/**\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: AtxJsonViewerPanelComponent, selector: "atx-json-viewer-panel", inputs: ["data"] }] }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxJsonViewerComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'atx-json-viewer', standalone: true, imports: [
29
+ AtxJsonViewerPanelComponent
30
+ ], 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<atx-json-viewer-panel [data]=\"parsedData\"/>", styles: ["/**\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"] }]
31
+ }], propDecorators: { data: [{
32
+ type: Input
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9saWIvZnJhbWV3b3JrL21vY2svaHR0cC1tb25pdG9yaW5nLWNvbnNvbGUvY29tcG9uZW50L3JlbmRlcmVyL2pzb24tdmlld2VyL2pzb24tdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9qc29uLXZpZXdlci9qc29uLXZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBV25ELE1BQU0sT0FBTyxzQkFBc0I7SUFUbkM7UUFXWSxlQUFVLEdBQTBCLElBQUksQ0FBQztLQVVwRDtJQVJDLElBQ1csSUFBSSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs4R0FYVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixxR0N0Qm5DLDJUQVE0QyxtVERTeEMsMkJBQTJCOzsyRkFLbEIsc0JBQXNCO2tCQVRsQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUDt3QkFDUCwyQkFBMkI7cUJBQzVCOzhCQVNVLElBQUk7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXR4SnNvblZpZXdlclBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vanNvbi12aWV3ZXItcGFuZWwvanNvbi12aWV3ZXItcGFuZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXR4Q29uc29sZUpzb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9idXNpbmVzcy9hdHgtY29uc29sZS1qc29uJztcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL2RhdGEudXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0eC1qc29uLXZpZXdlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBBdHhKc29uVmlld2VyUGFuZWxDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9qc29uLXZpZXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2pzb24tdmlld2VyLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR4SnNvblZpZXdlckNvbXBvbmVudCB7XHJcblxyXG4gIHByb3RlY3RlZCBwYXJzZWREYXRhOiBBdHhDb25zb2xlSnNvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHRoaXMucGFyc2VkRGF0YSA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucGFyc2VkRGF0YSA9IERhdGFVdGlsLnBhcnNlSnNvbih2YWx1ZSk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS1cclxuICogTElDRU5TRVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4tLT5cclxuXHJcbjxhdHgtanNvbi12aWV3ZXItcGFuZWwgW2RhdGFdPVwicGFyc2VkRGF0YVwiLz4iXX0=
@@ -0,0 +1,27 @@
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, Input } from '@angular/core';
9
+ import { CommonModule } from '@angular/common';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common";
12
+ export class AtxJsonViewerPanelComponent {
13
+ constructor() {
14
+ this.data = null;
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxJsonViewerPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: AtxJsonViewerPanelComponent, isStandalone: true, selector: "atx-json-viewer-panel", 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@if (data) {\r\n @if (data.children) {\r\n <details>\r\n <summary>\r\n @if (data.label) {\r\n <span class=\"atx-prop-label\">{{ data.label }}</span>:\r\n <span [ngClass]=\"data.typeClass\">{{ data.value }}</span>\r\n } @else {\r\n {{ data.value }}\r\n }\r\n </summary>\r\n @for (item of data.children; track item) {\r\n <atx-json-viewer-panel [data]=\"item\"/>\r\n }\r\n </details>\r\n } @else {\r\n <div class=\"primitive\">\r\n <span class=\"atx-prop-label\">{{ data.label }}</span>: <span [ngClass]=\"data.typeClass\">{{ data.value }}</span>\r\n </div>\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}:host{display:block;font-family:monospace;font-size:13px}summary:hover{background-color:var(--dark-gray)}summary{padding-left:6px}atx-json-viewer-panel{padding-left:26px}.primitive{margin-left:20px}.atx-prop-label{font-weight:700;color:#8a2be2}.atx-string{color:#cd5c5c}.atx-string:before,.atx-string:after{content:'\"'}.atx-boolean,.atx-null,.atx-number{color:#0000cd}.atx-boolean,.atx-null{font-weight:700}\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: AtxJsonViewerPanelComponent, selector: "atx-json-viewer-panel", inputs: ["data"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxJsonViewerPanelComponent, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'atx-json-viewer-panel', standalone: true, imports: [
22
+ CommonModule
23
+ ], 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 (data) {\r\n @if (data.children) {\r\n <details>\r\n <summary>\r\n @if (data.label) {\r\n <span class=\"atx-prop-label\">{{ data.label }}</span>:\r\n <span [ngClass]=\"data.typeClass\">{{ data.value }}</span>\r\n } @else {\r\n {{ data.value }}\r\n }\r\n </summary>\r\n @for (item of data.children; track item) {\r\n <atx-json-viewer-panel [data]=\"item\"/>\r\n }\r\n </details>\r\n } @else {\r\n <div class=\"primitive\">\r\n <span class=\"atx-prop-label\">{{ data.label }}</span>: <span [ngClass]=\"data.typeClass\">{{ data.value }}</span>\r\n </div>\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}:host{display:block;font-family:monospace;font-size:13px}summary:hover{background-color:var(--dark-gray)}summary{padding-left:6px}atx-json-viewer-panel{padding-left:26px}.primitive{margin-left:20px}.atx-prop-label{font-weight:700;color:#8a2be2}.atx-string{color:#cd5c5c}.atx-string:before,.atx-string:after{content:'\"'}.atx-boolean,.atx-null,.atx-number{color:#0000cd}.atx-boolean,.atx-null{font-weight:700}\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"] }]
24
+ }], propDecorators: { data: [{
25
+ type: Input
26
+ }] } });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12aWV3ZXItcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9saWIvZnJhbWV3b3JrL21vY2svaHR0cC1tb25pdG9yaW5nLWNvbnNvbGUvY29tcG9uZW50L3JlbmRlcmVyL2pzb24tdmlld2VyLXBhbmVsL2pzb24tdmlld2VyLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2ZyYW1ld29yay9tb2NrL2h0dHAtbW9uaXRvcmluZy1jb25zb2xlL2NvbXBvbmVudC9yZW5kZXJlci9qc29uLXZpZXdlci1wYW5lbC9qc29uLXZpZXdlci1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVkvQyxNQUFNLE9BQU8sMkJBQTJCO0lBVHhDO1FBWVMsU0FBSSxHQUEwQixJQUFJLENBQUM7S0FDM0M7OEdBSlksMkJBQTJCO2tHQUEzQiwyQkFBMkIsMkdDckJ4Qyx3aENBNkJBLDZ6RERSYSwyQkFBMkIsbUZBTHBDLFlBQVk7OzJGQUtILDJCQUEyQjtrQkFUdkMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7cUJBQ2I7OEJBT00sSUFBSTtzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBdHhDb25zb2xlSnNvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2J1c2luZXNzL2F0eC1jb25zb2xlLWpzb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHgtanNvbi12aWV3ZXItcGFuZWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vanNvbi12aWV3ZXItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9qc29uLXZpZXdlci1wYW5lbC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0eEpzb25WaWV3ZXJQYW5lbENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRhdGE6IEF0eENvbnNvbGVKc29uIHwgbnVsbCA9IG51bGw7XHJcbn1cclxuIiwiPCEtLVxyXG4gKiBMSUNFTlNFXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbi0tPlxyXG5cclxuQGlmIChkYXRhKSB7XHJcbiAgICBAaWYgKGRhdGEuY2hpbGRyZW4pIHtcclxuICAgICAgICA8ZGV0YWlscz5cclxuICAgICAgICAgICAgPHN1bW1hcnk+XHJcbiAgICAgICAgICAgICAgICBAaWYgKGRhdGEubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF0eC1wcm9wLWxhYmVsXCI+e3sgZGF0YS5sYWJlbCB9fTwvc3Bhbj46XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiZGF0YS50eXBlQ2xhc3NcIj57eyBkYXRhLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZGF0YS52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3N1bW1hcnk+XHJcbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGF0YS5jaGlsZHJlbjsgdHJhY2sgaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgPGF0eC1qc29uLXZpZXdlci1wYW5lbCBbZGF0YV09XCJpdGVtXCIvPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kZXRhaWxzPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByaW1pdGl2ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF0eC1wcm9wLWxhYmVsXCI+e3sgZGF0YS5sYWJlbCB9fTwvc3Bhbj46IDxzcGFuIFtuZ0NsYXNzXT1cImRhdGEudHlwZUNsYXNzXCI+e3sgZGF0YS52YWx1ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufVxyXG4iXX0=