angular-toolbox 1.1.0 → 1.2.0

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 (33) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/model/business/ui/index.mjs +2 -1
  3. package/esm2022/lib/model/business/ui/window/index.mjs +5 -0
  4. package/esm2022/lib/model/business/ui/window/window-feature-state.mjs +22 -0
  5. package/esm2022/lib/model/business/ui/window/window-init.mjs +9 -0
  6. package/esm2022/lib/model/business/ui/window/window-ref.mjs +9 -0
  7. package/esm2022/lib/model/business/ui/window/window-target.mjs +34 -0
  8. package/esm2022/lib/model/service/mock/http/logging/atx-http-mock-console.service.mjs +45 -47
  9. package/esm2022/lib/model/service/ui/index.mjs +2 -1
  10. package/esm2022/lib/model/service/ui/window/abstract-window.service.mjs +44 -0
  11. package/esm2022/lib/model/service/ui/window/index.mjs +3 -0
  12. package/esm2022/lib/model/service/ui/window/window.service.mjs +97 -0
  13. package/esm2022/lib/model/service/version/angular-toolbox-version.service.mjs +3 -3
  14. package/esm2022/lib/util/window/window-features-builder.mjs +78 -0
  15. package/esm2022/lib/util/window/window-header-tag-util.mjs +42 -0
  16. package/fesm2022/angular-toolbox.mjs +370 -48
  17. package/fesm2022/angular-toolbox.mjs.map +1 -1
  18. package/lib/model/business/ui/index.d.ts +1 -0
  19. package/lib/model/business/ui/window/index.d.ts +4 -0
  20. package/lib/model/business/ui/window/window-feature-state.d.ts +20 -0
  21. package/lib/model/business/ui/window/window-init.d.ts +70 -0
  22. package/lib/model/business/ui/window/window-ref.d.ts +21 -0
  23. package/lib/model/business/ui/window/window-target.d.ts +32 -0
  24. package/lib/model/service/mock/http/logging/atx-http-mock-console.service.d.ts +17 -19
  25. package/lib/model/service/ui/index.d.ts +1 -0
  26. package/lib/model/service/ui/window/abstract-window.service.d.ts +60 -0
  27. package/lib/model/service/ui/window/index.d.ts +2 -0
  28. package/lib/model/service/ui/window/window.service.d.ts +48 -0
  29. package/lib/util/window/window-features-builder.d.ts +42 -0
  30. package/lib/util/window/window-header-tag-util.d.ts +27 -0
  31. package/package.json +1 -1
  32. package/esm2022/lib/model/business/mock/http/popup/atx-http-mock-console-popup.mjs +0 -9
  33. package/lib/model/business/mock/http/popup/atx-http-mock-console-popup.d.ts +0 -23
@@ -0,0 +1,78 @@
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 { EMPTY_STRING } from "../empty-string.const";
9
+ /**
10
+ * A static builder that creates the features associated with a popup window created by
11
+ * the `WindowService.open()` method.
12
+ */
13
+ export class BrowserWindowFeaturesBuilder {
14
+ /**
15
+ * Builds a string that represents the features parameter of the `Window.open()` method.
16
+ *
17
+ * @param init A `WindowInit` object that contains data to initialize the features string.
18
+ *
19
+ * @returns A string that represents the features parameter of the `Window.open()` method.
20
+ */
21
+ static build(init) {
22
+ if (!init)
23
+ return "popup=true,left=100,top=100,width=800,height=450";
24
+ let features = "popup=true";
25
+ features += BrowserWindowFeaturesBuilder.getLeft(init);
26
+ features += BrowserWindowFeaturesBuilder.getTop(init);
27
+ features += BrowserWindowFeaturesBuilder.getWidth(init);
28
+ features += BrowserWindowFeaturesBuilder.getHeight(init);
29
+ features += BrowserWindowFeaturesBuilder.getPopupProp("directories", init);
30
+ features += BrowserWindowFeaturesBuilder.getPopupProp("titlebar", init);
31
+ features += BrowserWindowFeaturesBuilder.getPopupProp("scrollbars", init);
32
+ features += BrowserWindowFeaturesBuilder.getPopupProp("toolbar", init);
33
+ features += BrowserWindowFeaturesBuilder.getPopupProp("location", init);
34
+ features += BrowserWindowFeaturesBuilder.getPopupProp("status", init);
35
+ features += BrowserWindowFeaturesBuilder.getPopupProp("menubar", init);
36
+ return features;
37
+ }
38
+ /**
39
+ * @private
40
+ */
41
+ static getLeft(init) {
42
+ const v = init?.left;
43
+ return ",left=" + (v || 100);
44
+ }
45
+ /**
46
+ * @private
47
+ */
48
+ static getTop(init) {
49
+ const v = init?.top;
50
+ return ",top=" + (v || 100);
51
+ }
52
+ /**
53
+ * @private
54
+ */
55
+ static getWidth(init) {
56
+ const v = init?.width;
57
+ return ",width=" + (v || 800);
58
+ }
59
+ /**
60
+ * @private
61
+ */
62
+ static getHeight(init) {
63
+ const v = init?.height;
64
+ return ",height=" + (v || 450);
65
+ }
66
+ /**
67
+ * @private
68
+ */
69
+ static getPopupProp(property, init) {
70
+ if (!init)
71
+ return EMPTY_STRING;
72
+ const v = init[property];
73
+ if (!v)
74
+ return EMPTY_STRING;
75
+ return `,${property}=${v}`;
76
+ }
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LWZlYXR1cmVzLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi91dGlsL3dpbmRvdy93aW5kb3ctZmVhdHVyZXMtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFHSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLDRCQUE0QjtJQUVyQzs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQWlCO1FBQ2pDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxrREFBa0QsQ0FBQztRQUNyRSxJQUFJLFFBQVEsR0FBVyxZQUFZLENBQUM7UUFDcEMsUUFBUSxJQUFJLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxRQUFRLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELFFBQVEsSUFBSSw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsUUFBUSxJQUFJLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RCxRQUFRLElBQUksNEJBQTRCLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRSxRQUFRLElBQUksNEJBQTRCLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RSxRQUFRLElBQUksNEJBQTRCLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRSxRQUFRLElBQUksNEJBQTRCLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RSxRQUFRLElBQUksNEJBQTRCLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RSxRQUFRLElBQUksNEJBQTRCLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxRQUFRLElBQUksNEJBQTRCLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQWlCO1FBQ25DLE1BQU0sQ0FBQyxHQUF1QixJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQ3pDLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBaUI7UUFDbEMsTUFBTSxDQUFDLEdBQXVCLElBQUksRUFBRSxHQUFHLENBQUM7UUFDeEMsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFpQjtRQUNwQyxNQUFNLENBQUMsR0FBdUIsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUMxQyxPQUFPLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQWlCO1FBQ3JDLE1BQU0sQ0FBQyxHQUF1QixJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQzNDLE9BQU8sVUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxJQUFpQjtRQUMxRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFTLElBQVksQ0FBQyxRQUFlLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgV2luZG93SW5pdCB9IGZyb20gXCIuLi8uLi9tb2RlbFwiO1xyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vZW1wdHktc3RyaW5nLmNvbnN0XCI7XHJcblxyXG4vKipcclxuICogQSBzdGF0aWMgYnVpbGRlciB0aGF0IGNyZWF0ZXMgdGhlIGZlYXR1cmVzIGFzc29jaWF0ZWQgd2l0aCBhIHBvcHVwIHdpbmRvdyBjcmVhdGVkIGJ5XHJcbiAqIHRoZSBgV2luZG93U2VydmljZS5vcGVuKClgIG1ldGhvZC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBCcm93c2VyV2luZG93RmVhdHVyZXNCdWlsZGVyIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkcyBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGZlYXR1cmVzIHBhcmFtZXRlciBvZiB0aGUgYFdpbmRvdy5vcGVuKClgIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGluaXQgQSBgV2luZG93SW5pdGAgb2JqZWN0IHRoYXQgY29udGFpbnMgZGF0YSB0byBpbml0aWFsaXplIHRoZSBmZWF0dXJlcyBzdHJpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgZmVhdHVyZXMgcGFyYW1ldGVyIG9mIHRoZSBgV2luZG93Lm9wZW4oKWAgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGJ1aWxkKGluaXQ/OiBXaW5kb3dJbml0KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWluaXQpIHJldHVybiBcInBvcHVwPXRydWUsbGVmdD0xMDAsdG9wPTEwMCx3aWR0aD04MDAsaGVpZ2h0PTQ1MFwiO1xyXG4gICAgICAgIGxldCBmZWF0dXJlczogc3RyaW5nID0gXCJwb3B1cD10cnVlXCI7XHJcbiAgICAgICAgZmVhdHVyZXMgKz0gQnJvd3NlcldpbmRvd0ZlYXR1cmVzQnVpbGRlci5nZXRMZWZ0KGluaXQpO1xyXG4gICAgICAgIGZlYXR1cmVzICs9IEJyb3dzZXJXaW5kb3dGZWF0dXJlc0J1aWxkZXIuZ2V0VG9wKGluaXQpO1xyXG4gICAgICAgIGZlYXR1cmVzICs9IEJyb3dzZXJXaW5kb3dGZWF0dXJlc0J1aWxkZXIuZ2V0V2lkdGgoaW5pdCk7XHJcbiAgICAgICAgZmVhdHVyZXMgKz0gQnJvd3NlcldpbmRvd0ZlYXR1cmVzQnVpbGRlci5nZXRIZWlnaHQoaW5pdCk7XHJcbiAgICAgICAgZmVhdHVyZXMgKz0gQnJvd3NlcldpbmRvd0ZlYXR1cmVzQnVpbGRlci5nZXRQb3B1cFByb3AoXCJkaXJlY3Rvcmllc1wiLCBpbml0KTtcclxuICAgICAgICBmZWF0dXJlcyArPSBCcm93c2VyV2luZG93RmVhdHVyZXNCdWlsZGVyLmdldFBvcHVwUHJvcChcInRpdGxlYmFyXCIsIGluaXQpO1xyXG4gICAgICAgIGZlYXR1cmVzICs9IEJyb3dzZXJXaW5kb3dGZWF0dXJlc0J1aWxkZXIuZ2V0UG9wdXBQcm9wKFwic2Nyb2xsYmFyc1wiLCBpbml0KTtcclxuICAgICAgICBmZWF0dXJlcyArPSBCcm93c2VyV2luZG93RmVhdHVyZXNCdWlsZGVyLmdldFBvcHVwUHJvcChcInRvb2xiYXJcIiwgaW5pdCk7XHJcbiAgICAgICAgZmVhdHVyZXMgKz0gQnJvd3NlcldpbmRvd0ZlYXR1cmVzQnVpbGRlci5nZXRQb3B1cFByb3AoXCJsb2NhdGlvblwiLCBpbml0KTtcclxuICAgICAgICBmZWF0dXJlcyArPSBCcm93c2VyV2luZG93RmVhdHVyZXNCdWlsZGVyLmdldFBvcHVwUHJvcChcInN0YXR1c1wiLCBpbml0KTtcclxuICAgICAgICBmZWF0dXJlcyArPSBCcm93c2VyV2luZG93RmVhdHVyZXNCdWlsZGVyLmdldFBvcHVwUHJvcChcIm1lbnViYXJcIiwgaW5pdCk7XHJcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXRMZWZ0KGluaXQ/OiBXaW5kb3dJbml0KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2OiBudW1iZXIgfCB1bmRlZmluZWQgPSBpbml0Py5sZWZ0O1xyXG4gICAgICAgIHJldHVybiBcIixsZWZ0PVwiICsgKHYgfHwgMTAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VG9wKGluaXQ/OiBXaW5kb3dJbml0KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2OiBudW1iZXIgfCB1bmRlZmluZWQgPSBpbml0Py50b3A7XHJcbiAgICAgICAgcmV0dXJuIFwiLHRvcD1cIiArICh2IHx8IDEwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFdpZHRoKGluaXQ/OiBXaW5kb3dJbml0KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2OiBudW1iZXIgfCB1bmRlZmluZWQgPSBpbml0Py53aWR0aDtcclxuICAgICAgICByZXR1cm4gXCIsd2lkdGg9XCIgKyAodiB8fCA4MDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXRIZWlnaHQoaW5pdD86IFdpbmRvd0luaXQpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHY6IG51bWJlciB8IHVuZGVmaW5lZCA9IGluaXQ/LmhlaWdodDtcclxuICAgICAgICByZXR1cm4gXCIsaGVpZ2h0PVwiICsgKHYgfHwgNDUwKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UG9wdXBQcm9wKHByb3BlcnR5OiBzdHJpbmcsIGluaXQ/OiBXaW5kb3dJbml0KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWluaXQpIHJldHVybiBFTVBUWV9TVFJJTkc7XHJcbiAgICAgICAgY29uc3QgdjogYW55ID0gKGluaXQgYXMgYW55KVtwcm9wZXJ0eSBhcyBhbnldO1xyXG4gICAgICAgIGlmICghdikgcmV0dXJuIEVNUFRZX1NUUklORztcclxuICAgICAgICByZXR1cm4gYCwke3Byb3BlcnR5fT0ke3Z9YDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,42 @@
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
+ /**
9
+ * A static utility class that creates header tags for windows created by the `WindowService.open()` method.
10
+ */
11
+ export class WindowHeaderTagUtil {
12
+ /**
13
+ * Sets the title of the specified window if defined in the `WindowInit` config object.
14
+ *
15
+ * @param win The window for which to set the title.
16
+ * @param init The `WindowInit` config object used to initialize the window.
17
+ */
18
+ static setTitle(win, init) {
19
+ const title = init?.title;
20
+ if (!title)
21
+ return;
22
+ win.document.title = title;
23
+ }
24
+ /**
25
+ * Sets the icon of the specified window if defined in the `WindowInit` config object.
26
+ *
27
+ * @param win The window for which to set the icon.
28
+ * @param init The `WindowInit` config object used to initialize the window.
29
+ */
30
+ static setIcon(win, init) {
31
+ const icon = init?.icon;
32
+ if (!icon)
33
+ return;
34
+ const doc = win.document;
35
+ const head = doc.getElementsByTagName('head')[0];
36
+ const link = doc.createElement('link');
37
+ link.rel = 'shortcut icon';
38
+ link.href = icon;
39
+ head.appendChild(link);
40
+ }
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LWhlYWRlci10YWctdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL3V0aWwvd2luZG93L3dpbmRvdy1oZWFkZXItdGFnLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBSUg7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBRTVCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsSUFBaUI7UUFDakQsTUFBTSxLQUFLLEdBQXVCLElBQUksRUFBRSxLQUFLLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxJQUFpQjtRQUNoRCxNQUFNLElBQUksR0FBdUIsSUFBSSxFQUFFLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsTUFBTSxHQUFHLEdBQWEsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBb0IsR0FBRyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxHQUFvQixHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxHQUFHLEdBQUcsZUFBZSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgV2luZG93SW5pdCB9IGZyb20gXCIuLi8uLi9tb2RlbFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgc3RhdGljIHV0aWxpdHkgY2xhc3MgdGhhdCBjcmVhdGVzIGhlYWRlciB0YWdzIGZvciB3aW5kb3dzIGNyZWF0ZWQgYnkgdGhlIGBXaW5kb3dTZXJ2aWNlLm9wZW4oKWAgbWV0aG9kLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFdpbmRvd0hlYWRlclRhZ1V0aWwge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGl0bGUgb2YgdGhlIHNwZWNpZmllZCB3aW5kb3cgaWYgZGVmaW5lZCBpbiB0aGUgYFdpbmRvd0luaXRgIGNvbmZpZyBvYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB3aW4gVGhlIHdpbmRvdyBmb3Igd2hpY2ggdG8gc2V0IHRoZSB0aXRsZS5cclxuICAgICAqIEBwYXJhbSBpbml0IFRoZSBgV2luZG93SW5pdGAgY29uZmlnIG9iamVjdCB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHdpbmRvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBzZXRUaXRsZSh3aW46IFdpbmRvdywgaW5pdD86IFdpbmRvd0luaXQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gaW5pdD8udGl0bGU7XHJcbiAgICAgICAgaWYgKCF0aXRsZSkgcmV0dXJuO1xyXG4gICAgICAgIHdpbi5kb2N1bWVudC50aXRsZSA9IHRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaWNvbiBvZiB0aGUgc3BlY2lmaWVkIHdpbmRvdyBpZiBkZWZpbmVkIGluIHRoZSBgV2luZG93SW5pdGAgY29uZmlnIG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHdpbiBUaGUgd2luZG93IGZvciB3aGljaCB0byBzZXQgdGhlIGljb24uXHJcbiAgICAgKiBAcGFyYW0gaW5pdCBUaGUgYFdpbmRvd0luaXRgIGNvbmZpZyBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSB3aW5kb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0SWNvbih3aW46IFdpbmRvdywgaW5pdD86IFdpbmRvd0luaXQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpY29uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBpbml0Py5pY29uO1xyXG4gICAgICAgIGlmICghaWNvbikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGRvYzogRG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaGVhZDogSFRNTEhlYWRFbGVtZW50ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XHJcbiAgICAgICAgY29uc3QgbGluazogSFRNTExpbmtFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgICAgICBsaW5rLnJlbCA9ICdzaG9ydGN1dCBpY29uJztcclxuICAgICAgICBsaW5rLmhyZWYgPSBpY29uO1xyXG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -543,9 +543,9 @@ class AbstractVersionManager {
543
543
  */
544
544
  const LAYERS_VERSION_CONFIG = {
545
545
  major: 1,
546
- minor: 1,
546
+ minor: 2,
547
547
  patch: 0,
548
- buildTimestamp: 1725438941672
548
+ buildTimestamp: 1725808881311
549
549
  };
550
550
  /**
551
551
  * The public service that exposes the current version of the Angular Toolbox library.
@@ -1265,6 +1265,78 @@ const DARK_MODE_CONFIG = {
1265
1265
  * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
1266
1266
  */
1267
1267
 
1268
+ /**
1269
+ * @license
1270
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
1271
+ *
1272
+ * Use of this source code is governed by an MIT-style license that can be found in
1273
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
1274
+ */
1275
+
1276
+ /**
1277
+ * @license
1278
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
1279
+ *
1280
+ * Use of this source code is governed by an MIT-style license that can be found in
1281
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
1282
+ */
1283
+
1284
+ /**
1285
+ * @license
1286
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
1287
+ *
1288
+ * Use of this source code is governed by an MIT-style license that can be found in
1289
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
1290
+ */
1291
+ /**
1292
+ * Specifies values used to activate, or deactivate, a feature for a browser window created by the `WindowService.open()` method.
1293
+ */
1294
+ var WindowFeatureState;
1295
+ (function (WindowFeatureState) {
1296
+ /**
1297
+ * The value used to activate a feature.
1298
+ */
1299
+ WindowFeatureState["YES"] = "yes";
1300
+ /**
1301
+ * The value used to deactivate a feature.
1302
+ */
1303
+ WindowFeatureState["NO"] = "no";
1304
+ })(WindowFeatureState || (WindowFeatureState = {}));
1305
+
1306
+ /**
1307
+ * @license
1308
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
1309
+ *
1310
+ * Use of this source code is governed by an MIT-style license that can be found in
1311
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
1312
+ */
1313
+ /**
1314
+ * Specifies the name of the browsing context the resource is being loaded into.
1315
+ */
1316
+ var WindowTarget;
1317
+ (function (WindowTarget) {
1318
+ /**
1319
+ * The current browsing context.
1320
+ */
1321
+ WindowTarget["SELF"] = "self";
1322
+ /**
1323
+ * Usually a new tab, but users can configure browsers to open a new window instead.
1324
+ */
1325
+ WindowTarget["BLANK"] = "_blank";
1326
+ /**
1327
+ * The parent browsing context of the current one. If no parent, behaves as `WindowTarget.SELF`.
1328
+ */
1329
+ WindowTarget["PARENT"] = "_parent";
1330
+ /**
1331
+ * The topmost browsing context.
1332
+ */
1333
+ WindowTarget["TOP"] = "_top";
1334
+ /**
1335
+ * Allows embedded fenced frames to navigate the top-level frame.
1336
+ */
1337
+ WindowTarget["UNFENCED_TOP"] = "_unfencedTop";
1338
+ })(WindowTarget || (WindowTarget = {}));
1339
+
1268
1340
  /**
1269
1341
  * @license
1270
1342
  * Copyright Pascal ECHEMANN. All Rights Reserved.
@@ -2090,6 +2162,259 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
2090
2162
  args: [DOCUMENT]
2091
2163
  }] }] });
2092
2164
 
2165
+ /**
2166
+ * @license
2167
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
2168
+ *
2169
+ * Use of this source code is governed by an MIT-style license that can be found in
2170
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
2171
+ */
2172
+ /**
2173
+ * The abstract class that must be implemented by services that provide
2174
+ * functionality to display Angular component within a new browser window.
2175
+ */
2176
+ class AbstractWindowService {
2177
+ constructor() {
2178
+ /**
2179
+ * @private
2180
+ */
2181
+ this.windowRefMap = new Map();
2182
+ }
2183
+ /**
2184
+ * Returns the window reference object associated with the specified `Uuid` object.
2185
+ *
2186
+ * @param uuid The `Uuid` object associated with the window reference to get.
2187
+ *
2188
+ * @returns A `WindowRef` object, or `undefined` if the reference cannot be found.
2189
+ */
2190
+ get(uuid) {
2191
+ return this.windowRefMap.get(uuid);
2192
+ }
2193
+ /**
2194
+ * Returns all the window reference objects created by the service.
2195
+ *
2196
+ * @returns A list of `WindowRef` objects created by this service.
2197
+ */
2198
+ getAll() {
2199
+ return Array.from(this.windowRefMap.values());
2200
+ }
2201
+ /**
2202
+ * @private
2203
+ */
2204
+ destroy() {
2205
+ this.windowRefMap.clear();
2206
+ }
2207
+ }
2208
+
2209
+ /**
2210
+ * @license
2211
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
2212
+ *
2213
+ * Use of this source code is governed by an MIT-style license that can be found in
2214
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
2215
+ */
2216
+ /**
2217
+ * A static builder that creates the features associated with a popup window created by
2218
+ * the `WindowService.open()` method.
2219
+ */
2220
+ class BrowserWindowFeaturesBuilder {
2221
+ /**
2222
+ * Builds a string that represents the features parameter of the `Window.open()` method.
2223
+ *
2224
+ * @param init A `WindowInit` object that contains data to initialize the features string.
2225
+ *
2226
+ * @returns A string that represents the features parameter of the `Window.open()` method.
2227
+ */
2228
+ static build(init) {
2229
+ if (!init)
2230
+ return "popup=true,left=100,top=100,width=800,height=450";
2231
+ let features = "popup=true";
2232
+ features += BrowserWindowFeaturesBuilder.getLeft(init);
2233
+ features += BrowserWindowFeaturesBuilder.getTop(init);
2234
+ features += BrowserWindowFeaturesBuilder.getWidth(init);
2235
+ features += BrowserWindowFeaturesBuilder.getHeight(init);
2236
+ features += BrowserWindowFeaturesBuilder.getPopupProp("directories", init);
2237
+ features += BrowserWindowFeaturesBuilder.getPopupProp("titlebar", init);
2238
+ features += BrowserWindowFeaturesBuilder.getPopupProp("scrollbars", init);
2239
+ features += BrowserWindowFeaturesBuilder.getPopupProp("toolbar", init);
2240
+ features += BrowserWindowFeaturesBuilder.getPopupProp("location", init);
2241
+ features += BrowserWindowFeaturesBuilder.getPopupProp("status", init);
2242
+ features += BrowserWindowFeaturesBuilder.getPopupProp("menubar", init);
2243
+ return features;
2244
+ }
2245
+ /**
2246
+ * @private
2247
+ */
2248
+ static getLeft(init) {
2249
+ const v = init?.left;
2250
+ return ",left=" + (v || 100);
2251
+ }
2252
+ /**
2253
+ * @private
2254
+ */
2255
+ static getTop(init) {
2256
+ const v = init?.top;
2257
+ return ",top=" + (v || 100);
2258
+ }
2259
+ /**
2260
+ * @private
2261
+ */
2262
+ static getWidth(init) {
2263
+ const v = init?.width;
2264
+ return ",width=" + (v || 800);
2265
+ }
2266
+ /**
2267
+ * @private
2268
+ */
2269
+ static getHeight(init) {
2270
+ const v = init?.height;
2271
+ return ",height=" + (v || 450);
2272
+ }
2273
+ /**
2274
+ * @private
2275
+ */
2276
+ static getPopupProp(property, init) {
2277
+ if (!init)
2278
+ return EMPTY_STRING;
2279
+ const v = init[property];
2280
+ if (!v)
2281
+ return EMPTY_STRING;
2282
+ return `,${property}=${v}`;
2283
+ }
2284
+ }
2285
+
2286
+ /**
2287
+ * @license
2288
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
2289
+ *
2290
+ * Use of this source code is governed by an MIT-style license that can be found in
2291
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
2292
+ */
2293
+ /**
2294
+ * A static utility class that creates header tags for windows created by the `WindowService.open()` method.
2295
+ */
2296
+ class WindowHeaderTagUtil {
2297
+ /**
2298
+ * Sets the title of the specified window if defined in the `WindowInit` config object.
2299
+ *
2300
+ * @param win The window for which to set the title.
2301
+ * @param init The `WindowInit` config object used to initialize the window.
2302
+ */
2303
+ static setTitle(win, init) {
2304
+ const title = init?.title;
2305
+ if (!title)
2306
+ return;
2307
+ win.document.title = title;
2308
+ }
2309
+ /**
2310
+ * Sets the icon of the specified window if defined in the `WindowInit` config object.
2311
+ *
2312
+ * @param win The window for which to set the icon.
2313
+ * @param init The `WindowInit` config object used to initialize the window.
2314
+ */
2315
+ static setIcon(win, init) {
2316
+ const icon = init?.icon;
2317
+ if (!icon)
2318
+ return;
2319
+ const doc = win.document;
2320
+ const head = doc.getElementsByTagName('head')[0];
2321
+ const link = doc.createElement('link');
2322
+ link.rel = 'shortcut icon';
2323
+ link.href = icon;
2324
+ head.appendChild(link);
2325
+ }
2326
+ }
2327
+
2328
+ /**
2329
+ * @license
2330
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
2331
+ *
2332
+ * Use of this source code is governed by an MIT-style license that can be found in
2333
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
2334
+ */
2335
+ /**
2336
+ * Provides functionality to display Angular component within a new browser window.
2337
+ */
2338
+ class WindowService extends AbstractWindowService {
2339
+ /**
2340
+ * @private
2341
+ */
2342
+ constructor(_appRef) {
2343
+ super();
2344
+ this._appRef = _appRef;
2345
+ window.addEventListener("beforeunload", () => this.beforUnloadHandler());
2346
+ }
2347
+ /**
2348
+ * @inheritdoc
2349
+ */
2350
+ open(component, init) {
2351
+ const id = Uuid.build();
2352
+ const features = BrowserWindowFeaturesBuilder.build(init);
2353
+ const win = window.open(EMPTY_STRING, this.getTarget(init), features);
2354
+ WindowHeaderTagUtil.setTitle(win, init);
2355
+ WindowHeaderTagUtil.setIcon(win, init);
2356
+ const componentRef = this._appRef.bootstrap(component, win.document.body);
2357
+ const winRef = {
2358
+ window: win,
2359
+ componentRef: componentRef
2360
+ };
2361
+ this.windowRefMap.set(id, winRef);
2362
+ return id;
2363
+ }
2364
+ /**
2365
+ * @inheritdoc
2366
+ */
2367
+ close(uuid) {
2368
+ const winRef = this.windowRefMap.get(uuid);
2369
+ if (!winRef)
2370
+ return false;
2371
+ this.windowRefMap.delete(uuid);
2372
+ winRef.window.close();
2373
+ winRef.window = null;
2374
+ winRef.componentRef.destroy();
2375
+ winRef.componentRef;
2376
+ return true;
2377
+ }
2378
+ /**
2379
+ * @inheritdoc
2380
+ */
2381
+ closeAll() {
2382
+ const keys = this.windowRefMap.keys();
2383
+ for (const key of keys)
2384
+ this.close(key);
2385
+ }
2386
+ /**
2387
+ * @private
2388
+ */
2389
+ ngOnDestroy() {
2390
+ this.closeAll();
2391
+ this.destroy();
2392
+ }
2393
+ /**
2394
+ * @private
2395
+ */
2396
+ beforUnloadHandler() {
2397
+ this.ngOnDestroy();
2398
+ window.removeEventListener("beforeunload", () => this.beforUnloadHandler());
2399
+ }
2400
+ /**
2401
+ * @private
2402
+ */
2403
+ getTarget(init) {
2404
+ if (init)
2405
+ return init.target || WindowTarget.BLANK;
2406
+ return WindowTarget.BLANK;
2407
+ }
2408
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: WindowService, deps: [{ token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
2409
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: WindowService, providedIn: 'root' }); }
2410
+ }
2411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: WindowService, decorators: [{
2412
+ type: Injectable,
2413
+ args: [{
2414
+ providedIn: 'root'
2415
+ }]
2416
+ }], ctorParameters: () => [{ type: i0.ApplicationRef }] });
2417
+
2093
2418
  /**
2094
2419
  * @license
2095
2420
  * Copyright Pascal ECHEMANN. All Rights Reserved.
@@ -6050,6 +6375,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
6050
6375
  * Use of this source code is governed by an MIT-style license that can be found in
6051
6376
  * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
6052
6377
  */
6378
+ /**
6379
+ * @private
6380
+ */
6381
+ const NO = WindowFeatureState.NO;
6382
+ /**
6383
+ * @private
6384
+ */
6385
+ const FEATURES = {
6386
+ left: 100,
6387
+ top: 100,
6388
+ width: 800,
6389
+ height: 450,
6390
+ directories: NO,
6391
+ titlebar: NO,
6392
+ scrollbars: NO,
6393
+ toolbar: NO,
6394
+ location: NO,
6395
+ status: NO,
6396
+ menubar: NO,
6397
+ title: "HTTP Mocking Framework Console",
6398
+ icon: "data:image/png;base64,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"
6399
+ };
6053
6400
  /**
6054
6401
  * Provides functionality to display the ATX monitoring console within a new window.
6055
6402
  */
@@ -6057,73 +6404,48 @@ class AtxHttpMockConsoleService {
6057
6404
  /**
6058
6405
  * @private
6059
6406
  */
6060
- constructor(_appRef) {
6061
- this._appRef = _appRef;
6062
- /**
6063
- * @private
6064
- */
6065
- this._window = null;
6407
+ constructor(_windowSrv) {
6408
+ this._windowSrv = _windowSrv;
6066
6409
  /**
6067
6410
  * @private
6068
6411
  */
6069
- this._componentRef = null;
6070
- /**
6071
- * @private
6072
- */
6073
- this.ICON = "data:image/png;base64,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";
6412
+ this._uuid = null;
6074
6413
  }
6075
6414
  /**
6076
6415
  * Opens the ATX monitoring console within a new window and returns reference objects
6077
6416
  * to control it.
6078
- *
6079
- * @returns An `AtxHttpMockConsolePopup` object.
6080
6417
  */
6081
6418
  open() {
6082
- if (this._window)
6083
- null;
6084
- const features = "left=100,top=100,width=800,height=450,popup=true,directories=no,titlebar=no,scrollbars=no,toolbar=no,location=no,status=no,menubar=no";
6085
- const popup = window.open(EMPTY_STRING, '_blank', features);
6086
- this._window = popup;
6087
- if (!popup)
6088
- return null;
6089
- this.createHeadTags(popup);
6090
- const componentRef = this._appRef.bootstrap(AtxMonitoringConsoleComponent, popup.document.body);
6091
- this._componentRef = componentRef;
6092
- return {
6093
- popup: popup,
6094
- componentRef: componentRef
6095
- };
6419
+ if (this._uuid)
6420
+ return;
6421
+ this._uuid = this._windowSrv.open(AtxMonitoringConsoleComponent, FEATURES);
6096
6422
  }
6097
6423
  /**
6098
6424
  * Closes the ATX monitoring console currently opened within a popup window.
6099
6425
  */
6100
6426
  close() {
6101
- if (!this._window)
6427
+ if (!this._uuid)
6102
6428
  return;
6103
- this._window.close();
6104
- this._window = null;
6105
- this._componentRef?.destroy();
6106
- this._componentRef = null;
6429
+ this._windowSrv.close(this._uuid);
6430
+ this._uuid = null;
6107
6431
  }
6108
6432
  /**
6109
- * @private
6433
+ * Returns reference to the opened popup window.
6434
+ *
6435
+ * @returns A `WindowRef` object, or undefined if the ATX monitoring console is not opened.
6110
6436
  */
6111
- ngOnDestroy() {
6112
- this.close();
6437
+ getWindowRef() {
6438
+ if (!this._uuid)
6439
+ return undefined;
6440
+ return this._windowSrv.get(this._uuid);
6113
6441
  }
6114
6442
  /**
6115
6443
  * @private
6116
6444
  */
6117
- createHeadTags(popup) {
6118
- const doc = popup.document;
6119
- const head = doc.getElementsByTagName('head')[0];
6120
- const link = doc.createElement('link');
6121
- link.rel = 'shortcut icon';
6122
- link.href = this.ICON;
6123
- head.appendChild(link);
6124
- doc.title = "HTTP Mocking Framework Console";
6445
+ ngOnDestroy() {
6446
+ this.close();
6125
6447
  }
6126
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxHttpMockConsoleService, deps: [{ token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
6448
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxHttpMockConsoleService, deps: [{ token: WindowService }], target: i0.ɵɵFactoryTarget.Injectable }); }
6127
6449
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxHttpMockConsoleService, providedIn: 'root' }); }
6128
6450
  }
6129
6451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AtxHttpMockConsoleService, decorators: [{
@@ -6131,7 +6453,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
6131
6453
  args: [{
6132
6454
  providedIn: 'root'
6133
6455
  }]
6134
- }], ctorParameters: () => [{ type: i0.ApplicationRef }] });
6456
+ }], ctorParameters: () => [{ type: WindowService }] });
6135
6457
 
6136
6458
  /**
6137
6459
  * @license
@@ -7675,5 +7997,5 @@ const httpMockFactory = () => {
7675
7997
  * Generated bundle index. Do not edit.
7676
7998
  */
7677
7999
 
7678
- export { APP_PRIDGE_REF, ATX_LOGGER_CONFIG, AbstractLogger, AbstractSubscriptionManager, AbstractVersionManager, AnchorLinklDirective, AngularToolboxLogoComponent, AngularToolboxModule, AngularToolboxVersionService, AppBridgeError, AppBridgeService, ArrayList, ArrayListEvent, ArrayListEventType, AtxHttpMockConsoleService, AtxMonitoringConsoleComponent, BIGINT, BOOLEAN, BUTTON_ROLE, ButtonRoleDirective, CSS_PROP, ConsoleLogConnector, ContentRendererDirective, DARK_MODE_CONFIG, DEFAULT_LOG_CONNECTOR, DarkModeService, DefaultLogConnector, EMPTY_STRING, FUNCTION, FetchClient, FetchClientBuilder, FetchClientResponseType, HTTP_MOCKING_FRAMEWORK_CONFIG, HTTP_MOCK_MAX_DELAY, HTTP_MOCK_SERVICE, HtmlLogConnector, HttpHeadersMockBuilder, HttpMock, HttpMockLoggingService, HttpMockProductionPolicy, HttpMockService, HttpMockServiceError, HttpResponseMockBuilder, IdentifiableComponent, IntegrityError, LINK_ROLE, LOG_CONFIG_STRING, LOG_ERROR_STRING, LOG_INFO_STRING, LOG_WARNING_STRING, LogBuilder, LogImpl, LogLevel, LogUtil, LoggerService, NUMBER, NavigateToUrlDirective, OBJECT, STORAGE_KEY, STRING, SYMBOL, SafeHtmlPipe, ScrollService, SubscriptionError, SubscriptionService, UNDEFINED, Uuid, VERSION_CONFIG, VersionService, httpHeadersMock, httpMockFactory, httpResponseMock };
8000
+ export { APP_PRIDGE_REF, ATX_LOGGER_CONFIG, AbstractLogger, AbstractSubscriptionManager, AbstractVersionManager, AbstractWindowService, AnchorLinklDirective, AngularToolboxLogoComponent, AngularToolboxModule, AngularToolboxVersionService, AppBridgeError, AppBridgeService, ArrayList, ArrayListEvent, ArrayListEventType, AtxHttpMockConsoleService, AtxMonitoringConsoleComponent, BIGINT, BOOLEAN, BUTTON_ROLE, ButtonRoleDirective, CSS_PROP, ConsoleLogConnector, ContentRendererDirective, DARK_MODE_CONFIG, DEFAULT_LOG_CONNECTOR, DarkModeService, DefaultLogConnector, EMPTY_STRING, FEATURES, FUNCTION, FetchClient, FetchClientBuilder, FetchClientResponseType, HTTP_MOCKING_FRAMEWORK_CONFIG, HTTP_MOCK_MAX_DELAY, HTTP_MOCK_SERVICE, HtmlLogConnector, HttpHeadersMockBuilder, HttpMock, HttpMockLoggingService, HttpMockProductionPolicy, HttpMockService, HttpMockServiceError, HttpResponseMockBuilder, IdentifiableComponent, IntegrityError, LINK_ROLE, LOG_CONFIG_STRING, LOG_ERROR_STRING, LOG_INFO_STRING, LOG_WARNING_STRING, LogBuilder, LogImpl, LogLevel, LogUtil, LoggerService, NUMBER, NavigateToUrlDirective, OBJECT, STORAGE_KEY, STRING, SYMBOL, SafeHtmlPipe, ScrollService, SubscriptionError, SubscriptionService, UNDEFINED, Uuid, VERSION_CONFIG, VersionService, WindowFeatureState, WindowService, WindowTarget, httpHeadersMock, httpMockFactory, httpResponseMock };
7679
8001
  //# sourceMappingURL=angular-toolbox.mjs.map