@abp/ng.theme.basic 7.2.2 → 7.3.0-rc.2
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.
- package/README.md +129 -2
- package/{esm2020 → esm2022}/abp-ng.theme.basic.mjs +4 -4
- package/esm2022/lib/components/account-layout/account-layout.component.mjs +32 -0
- package/esm2022/lib/components/account-layout/auth-wrapper/auth-wrapper.component.mjs +20 -0
- package/esm2022/lib/components/account-layout/tenant-box/tenant-box.component.mjs +21 -0
- package/esm2022/lib/components/application-layout/application-layout.component.mjs +31 -0
- package/esm2022/lib/components/empty-layout/empty-layout.component.mjs +24 -0
- package/{esm2020 → esm2022}/lib/components/index.mjs +12 -12
- package/esm2022/lib/components/logo/logo.component.mjs +53 -0
- package/esm2022/lib/components/nav-items/current-user.component.mjs +40 -0
- package/esm2022/lib/components/nav-items/languages.component.mjs +108 -0
- package/{esm2020 → esm2022}/lib/components/nav-items/nav-items.component.mjs +20 -19
- package/esm2022/lib/components/page-alert-container/page-alert-container.component.mjs +19 -0
- package/esm2022/lib/components/routes/routes.component.mjs +38 -0
- package/esm2022/lib/components/validation-error/validation-error.component.mjs +45 -0
- package/{esm2020 → esm2022}/lib/constants/styles.mjs +1 -1
- package/{esm2020 → esm2022}/lib/enums/components.mjs +1 -1
- package/{esm2020 → esm2022}/lib/enums/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/enums/user-menu-items.mjs +1 -1
- package/{esm2020 → esm2022}/lib/handlers/index.mjs +1 -1
- package/esm2022/lib/handlers/lazy-style.handler.mjs +83 -0
- package/{esm2020 → esm2022}/lib/models/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/layout.mjs +1 -1
- package/{esm2020 → esm2022}/lib/providers/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/providers/nav-item.provider.mjs +28 -28
- package/{esm2020 → esm2022}/lib/providers/styles.provider.mjs +34 -34
- package/{esm2020 → esm2022}/lib/providers/user-menu.provider.mjs +40 -40
- package/esm2022/lib/services/layout.service.mjs +42 -0
- package/esm2022/lib/theme-basic.module.mjs +128 -0
- package/{esm2020 → esm2022}/lib/tokens/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/tokens/lazy-styles.token.mjs +2 -2
- package/{esm2020 → esm2022}/public-api.mjs +10 -10
- package/{esm2020 → esm2022}/testing/abp-ng.theme.basic-testing.mjs +4 -4
- package/esm2022/testing/lib/theme-basic-testing.module.mjs +39 -0
- package/{esm2020 → esm2022}/testing/public-api.mjs +1 -1
- package/{fesm2015 → fesm2022}/abp-ng.theme.basic-testing.mjs +34 -34
- package/{fesm2015 → fesm2022}/abp-ng.theme.basic-testing.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/abp-ng.theme.basic.mjs +520 -520
- package/{fesm2020 → fesm2022}/abp-ng.theme.basic.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/components/account-layout/account-layout.component.d.ts +13 -13
- package/lib/components/account-layout/auth-wrapper/auth-wrapper.component.d.ts +8 -8
- package/lib/components/account-layout/tenant-box/tenant-box.component.d.ts +8 -8
- package/lib/components/application-layout/application-layout.component.d.ts +12 -12
- package/lib/components/empty-layout/empty-layout.component.d.ts +7 -7
- package/lib/components/index.d.ts +12 -12
- package/lib/components/logo/logo.component.d.ts +9 -9
- package/lib/components/nav-items/current-user.component.d.ts +21 -21
- package/lib/components/nav-items/languages.component.d.ts +16 -16
- package/lib/components/nav-items/nav-items.component.d.ts +10 -10
- package/lib/components/page-alert-container/page-alert-container.component.d.ts +8 -8
- package/lib/components/routes/routes.component.d.ts +18 -18
- package/lib/components/validation-error/validation-error.component.d.ts +9 -9
- package/lib/constants/styles.d.ts +2 -2
- package/lib/enums/components.d.ts +10 -10
- package/lib/enums/index.d.ts +2 -2
- package/lib/enums/user-menu-items.d.ts +4 -4
- package/lib/handlers/index.d.ts +1 -1
- package/lib/handlers/lazy-style.handler.d.ts +23 -23
- package/lib/models/index.d.ts +1 -1
- package/lib/models/layout.d.ts +11 -11
- package/lib/providers/index.d.ts +3 -3
- package/lib/providers/nav-item.provider.d.ts +8 -8
- package/lib/providers/styles.provider.d.ts +8 -8
- package/lib/providers/user-menu.provider.d.ts +8 -8
- package/lib/services/layout.service.d.ts +18 -18
- package/lib/theme-basic.module.d.ts +32 -32
- package/lib/tokens/index.d.ts +1 -1
- package/lib/tokens/lazy-styles.token.d.ts +2 -2
- package/package.json +25 -19
- package/public-api.d.ts +7 -7
- package/testing/index.d.ts +5 -5
- package/testing/lib/theme-basic-testing.module.d.ts +9 -9
- package/testing/public-api.d.ts +1 -1
- package/esm2020/lib/components/account-layout/account-layout.component.mjs +0 -32
- package/esm2020/lib/components/account-layout/auth-wrapper/auth-wrapper.component.mjs +0 -19
- package/esm2020/lib/components/account-layout/tenant-box/tenant-box.component.mjs +0 -20
- package/esm2020/lib/components/application-layout/application-layout.component.mjs +0 -31
- package/esm2020/lib/components/empty-layout/empty-layout.component.mjs +0 -23
- package/esm2020/lib/components/logo/logo.component.mjs +0 -52
- package/esm2020/lib/components/nav-items/current-user.component.mjs +0 -39
- package/esm2020/lib/components/nav-items/languages.component.mjs +0 -107
- package/esm2020/lib/components/page-alert-container/page-alert-container.component.mjs +0 -18
- package/esm2020/lib/components/routes/routes.component.mjs +0 -37
- package/esm2020/lib/components/validation-error/validation-error.component.mjs +0 -44
- package/esm2020/lib/handlers/lazy-style.handler.mjs +0 -82
- package/esm2020/lib/services/layout.service.mjs +0 -41
- package/esm2020/lib/theme-basic.module.mjs +0 -126
- package/esm2020/testing/lib/theme-basic-testing.module.mjs +0 -38
- package/fesm2015/abp-ng.theme.basic.mjs +0 -834
- package/fesm2015/abp-ng.theme.basic.mjs.map +0 -1
- package/fesm2020/abp-ng.theme.basic-testing.mjs +0 -45
- package/fesm2020/abp-ng.theme.basic-testing.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -1,3 +1,130 @@
|
|
|
1
|
-
|
|
1
|
+
## ℹ️ Description
|
|
2
2
|
|
|
3
|
-
[
|
|
3
|
+
ABP Framework is a complete open-source infrastructure to create modern web applications by following the best practices and conventions of software development. This package is a part of the [ABP Framework](https://abp.io) and contains client-side files.
|
|
4
|
+
For more information, check out the below links:
|
|
5
|
+
|
|
6
|
+
🔗Official Website: https://abp.io
|
|
7
|
+
|
|
8
|
+
🔗Commercial Website: https://commercial.abp.io
|
|
9
|
+
|
|
10
|
+
🔗Commercial Demo: https://commercial.abp.io/demo
|
|
11
|
+
|
|
12
|
+
🔗GitHub Repository: https://github.com/abpframework/abp
|
|
13
|
+
|
|
14
|
+
🔗Official Theme: https://www.LeptonTheme.com
|
|
15
|
+
|
|
16
|
+
🔗Documentation: https://docs.abp.io
|
|
17
|
+
|
|
18
|
+
🔗Community: https://community.abp.io
|
|
19
|
+
|
|
20
|
+
🔗Blog: https://blog.abp.io
|
|
21
|
+
|
|
22
|
+
🔗Books: https://abp.io/books
|
|
23
|
+
|
|
24
|
+
🔗Twitter: https://twitter.com/abpframework
|
|
25
|
+
|
|
26
|
+
🔗Discord: https://community.abp.io/discord
|
|
27
|
+
|
|
28
|
+
🔗Stackoverflow: https://stackoverflow.com/questions/tagged/abp
|
|
29
|
+
|
|
30
|
+
🔗YouTube: https://www.youtube.com/@Volosoft
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
## 🤔 Why ABP Platform?
|
|
34
|
+
|
|
35
|
+
Why should you use the ABP.IO Platform instead of creating a new solution from scratch?
|
|
36
|
+
|
|
37
|
+
You can find the answer here 👉🏻 [Why ABP Platform?](https://docs.abp.io/en/commercial/latest/why-abp-io-platform)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
## 🚀 Key Features of the ABP Framework
|
|
41
|
+
|
|
42
|
+
🟡 Modularity
|
|
43
|
+
|
|
44
|
+
🟡 Multi-Tenancy
|
|
45
|
+
|
|
46
|
+
🟡 Bootstrap Tag Helpers
|
|
47
|
+
|
|
48
|
+
🟡 Dynamic Forms
|
|
49
|
+
|
|
50
|
+
🟡 Authentication
|
|
51
|
+
|
|
52
|
+
🟡 Authorization
|
|
53
|
+
|
|
54
|
+
🟡 Distributed Event Bus
|
|
55
|
+
|
|
56
|
+
🟡 BLOB Storing
|
|
57
|
+
|
|
58
|
+
🟡 Text Templating
|
|
59
|
+
|
|
60
|
+
🟡 Tooling: ABP CLI
|
|
61
|
+
|
|
62
|
+
🟡 Cross-Cutting Concerns
|
|
63
|
+
|
|
64
|
+
🟡 Bundling & Minification
|
|
65
|
+
|
|
66
|
+
🟡 Virtual File System
|
|
67
|
+
|
|
68
|
+
🟡 Theming
|
|
69
|
+
|
|
70
|
+
🟡 Background Jobs
|
|
71
|
+
|
|
72
|
+
🟡 DDD Infrastructure
|
|
73
|
+
|
|
74
|
+
🟡 Auto REST APIs
|
|
75
|
+
|
|
76
|
+
🟡 Dynamic Client Proxies
|
|
77
|
+
|
|
78
|
+
🟡 Multiple Database Providers
|
|
79
|
+
|
|
80
|
+
🟡 Data filtering
|
|
81
|
+
|
|
82
|
+
🟡 Test Infrastructure
|
|
83
|
+
|
|
84
|
+
🟡 Audit Logging
|
|
85
|
+
|
|
86
|
+
🟡 Object to Object Mapping
|
|
87
|
+
|
|
88
|
+
🟡 Email & SMS Abstractions
|
|
89
|
+
|
|
90
|
+
🟡 Localization
|
|
91
|
+
|
|
92
|
+
🟡 Setting Management
|
|
93
|
+
|
|
94
|
+
🟡 Extension Methods
|
|
95
|
+
|
|
96
|
+
🟡 Aspect Oriented Programming
|
|
97
|
+
|
|
98
|
+
🟡 Dependency Injection
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
## 🧐 How It Works?
|
|
102
|
+
|
|
103
|
+
The following page explains how you use the ABP.IO Platform as a .NET developer 👉 [How it works?](https://commercial.abp.io/how-it-works)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
### 📘 Supported Database Providers
|
|
107
|
+
|
|
108
|
+
🔵 Entity Framework Core
|
|
109
|
+
|
|
110
|
+
🔵 MongoDB
|
|
111
|
+
|
|
112
|
+
🔵 Dapper
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
### 🎴 Supported UI Frameworks
|
|
116
|
+
|
|
117
|
+
🔵 Angular
|
|
118
|
+
|
|
119
|
+
🔵 Razor Pages
|
|
120
|
+
|
|
121
|
+
🔵 Blazor Web Assembly
|
|
122
|
+
|
|
123
|
+
🔵 Blazor Server
|
|
124
|
+
|
|
125
|
+
🔵 MAUI with Blazor Hybrid
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## 📫 Bug & Support
|
|
129
|
+
|
|
130
|
+
Support for open-source ABP Framework client-side packages is available at [GitHub Issues](https://github.com/abpframework/abp/issues), and the commercial support is available at [support.abp.io](https://support.abp.io).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
5
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLnRoZW1lLmJhc2ljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtYmFzaWMvc3JjL2FicC1uZy50aGVtZS5iYXNpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { SubscriptionService } from '@abp/ng.core';
|
|
3
|
+
import { LayoutService } from '../../services/layout.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../services/layout.service";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "@angular/router";
|
|
8
|
+
import * as i4 from "@abp/ng.core";
|
|
9
|
+
import * as i5 from "../logo/logo.component";
|
|
10
|
+
import * as i6 from "../nav-items/nav-items.component";
|
|
11
|
+
import * as i7 from "../routes/routes.component";
|
|
12
|
+
import * as i8 from "../page-alert-container/page-alert-container.component";
|
|
13
|
+
import * as i9 from "./auth-wrapper/auth-wrapper.component";
|
|
14
|
+
class AccountLayoutComponent {
|
|
15
|
+
// required for dynamic component
|
|
16
|
+
static { this.type = "account" /* eLayoutType.account */; }
|
|
17
|
+
constructor(service) {
|
|
18
|
+
this.service = service;
|
|
19
|
+
this.authWrapperKey = 'Account.AuthWrapperComponent';
|
|
20
|
+
}
|
|
21
|
+
ngAfterViewInit() {
|
|
22
|
+
this.service.subscribeWindowSize();
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AccountLayoutComponent, deps: [{ token: i1.LayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AccountLayoutComponent, selector: "abp-layout-account", providers: [LayoutService, SubscriptionService], ngImport: i0, template: "<nav\r\n class=\"navbar navbar-expand-lg navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4\"\r\n id=\"main-navbar\"\r\n style=\"min-height: 4rem\"\r\n>\r\n <div class=\"container\">\r\n <abp-logo *abpReplaceableTemplate=\"{ componentKey: service.logoComponentKey }\"></abp-logo>\r\n <button\r\n class=\"navbar-toggler\"\r\n type=\"button\"\r\n [attr.aria-expanded]=\"!service.isCollapsed\"\r\n (click)=\"service.isCollapsed = !service.isCollapsed\"\r\n >\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n <div\r\n class=\"navbar-collapse\"\r\n [class.overflow-hidden]=\"service.smallScreen\"\r\n id=\"main-navbar-collapse\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"!service.smallScreen ? navigations : null\"></ng-container>\r\n\r\n <div\r\n *ngIf=\"service.smallScreen\"\r\n [@collapseWithMargin]=\"service.isCollapsed ? 'collapsed' : 'expanded'\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"navigations\"></ng-container>\r\n </div>\r\n\r\n <ng-template #navigations>\r\n <abp-routes\r\n *abpReplaceableTemplate=\"{\r\n componentKey: service.routesComponentKey,\r\n inputs: {\r\n smallScreen: { value: service.smallScreen }\r\n }\r\n }\"\r\n class=\"mx-auto\"\r\n [smallScreen]=\"service.smallScreen\"\r\n ></abp-routes>\r\n\r\n <abp-nav-items\r\n *abpReplaceableTemplate=\"{\r\n componentKey: service.navItemsComponentKey\r\n }\"\r\n ></abp-nav-items>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<!-- [@slideFromBottom]=\"outlet.isActivated && outlet.activatedRoute?.routeConfig?.path\" TODO: throws ExpressionChangedAfterItHasBeenCheck when animation is active. It should be fixed -->\r\n<div class=\"container\">\r\n <abp-page-alert-container></abp-page-alert-container>\r\n <abp-auth-wrapper\r\n *abpReplaceableTemplate=\"{\r\n componentKey: authWrapperKey\r\n }\"\r\n >\r\n <router-outlet #outlet=\"outlet\"></router-outlet>\r\n </abp-auth-wrapper>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i4.ReplaceableTemplateDirective, selector: "[abpReplaceableTemplate]", inputs: ["abpReplaceableTemplate"] }, { kind: "component", type: i5.LogoComponent, selector: "abp-logo" }, { kind: "component", type: i6.NavItemsComponent, selector: "abp-nav-items" }, { kind: "component", type: i7.RoutesComponent, selector: "abp-routes", inputs: ["smallScreen"] }, { kind: "component", type: i8.PageAlertContainerComponent, selector: "abp-page-alert-container" }, { kind: "component", type: i9.AuthWrapperComponent, selector: "abp-auth-wrapper" }] }); }
|
|
26
|
+
}
|
|
27
|
+
export { AccountLayoutComponent };
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AccountLayoutComponent, decorators: [{
|
|
29
|
+
type: Component,
|
|
30
|
+
args: [{ selector: 'abp-layout-account', providers: [LayoutService, SubscriptionService], template: "<nav\r\n class=\"navbar navbar-expand-lg navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4\"\r\n id=\"main-navbar\"\r\n style=\"min-height: 4rem\"\r\n>\r\n <div class=\"container\">\r\n <abp-logo *abpReplaceableTemplate=\"{ componentKey: service.logoComponentKey }\"></abp-logo>\r\n <button\r\n class=\"navbar-toggler\"\r\n type=\"button\"\r\n [attr.aria-expanded]=\"!service.isCollapsed\"\r\n (click)=\"service.isCollapsed = !service.isCollapsed\"\r\n >\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n <div\r\n class=\"navbar-collapse\"\r\n [class.overflow-hidden]=\"service.smallScreen\"\r\n id=\"main-navbar-collapse\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"!service.smallScreen ? navigations : null\"></ng-container>\r\n\r\n <div\r\n *ngIf=\"service.smallScreen\"\r\n [@collapseWithMargin]=\"service.isCollapsed ? 'collapsed' : 'expanded'\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"navigations\"></ng-container>\r\n </div>\r\n\r\n <ng-template #navigations>\r\n <abp-routes\r\n *abpReplaceableTemplate=\"{\r\n componentKey: service.routesComponentKey,\r\n inputs: {\r\n smallScreen: { value: service.smallScreen }\r\n }\r\n }\"\r\n class=\"mx-auto\"\r\n [smallScreen]=\"service.smallScreen\"\r\n ></abp-routes>\r\n\r\n <abp-nav-items\r\n *abpReplaceableTemplate=\"{\r\n componentKey: service.navItemsComponentKey\r\n }\"\r\n ></abp-nav-items>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<!-- [@slideFromBottom]=\"outlet.isActivated && outlet.activatedRoute?.routeConfig?.path\" TODO: throws ExpressionChangedAfterItHasBeenCheck when animation is active. It should be fixed -->\r\n<div class=\"container\">\r\n <abp-page-alert-container></abp-page-alert-container>\r\n <abp-auth-wrapper\r\n *abpReplaceableTemplate=\"{\r\n componentKey: authWrapperKey\r\n }\"\r\n >\r\n <router-outlet #outlet=\"outlet\"></router-outlet>\r\n </abp-auth-wrapper>\r\n</div>\r\n" }]
|
|
31
|
+
}], ctorParameters: function () { return [{ type: i1.LayoutService }]; } });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1sYXlvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtYmFzaWMvc3JjL2xpYi9jb21wb25lbnRzL2FjY291bnQtbGF5b3V0L2FjY291bnQtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50LWxheW91dC9hY2NvdW50LWxheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7OztBQUU5RCxNQUthLHNCQUFzQjtJQUNqQyxpQ0FBaUM7YUFDMUIsU0FBSSxzQ0FBQSxDQUF1QjtJQUlsQyxZQUFtQixPQUFzQjtRQUF0QixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBRnpDLG1CQUFjLEdBQUcsOEJBQThCLENBQUM7SUFFSixDQUFDO0lBRTdDLGVBQWU7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDckMsQ0FBQzs4R0FWVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiw2Q0FGdEIsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsMEJDUGpELDBvRUE4REE7O1NEckRhLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQixhQUVuQixDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBlTGF5b3V0VHlwZSwgU3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1sYXlvdXQtYWNjb3VudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FjY291bnQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtMYXlvdXRTZXJ2aWNlLCBTdWJzY3JpcHRpb25TZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY291bnRMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICAvLyByZXF1aXJlZCBmb3IgZHluYW1pYyBjb21wb25lbnRcclxuICBzdGF0aWMgdHlwZSA9IGVMYXlvdXRUeXBlLmFjY291bnQ7XHJcblxyXG4gIGF1dGhXcmFwcGVyS2V5ID0gJ0FjY291bnQuQXV0aFdyYXBwZXJDb21wb25lbnQnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc2VydmljZTogTGF5b3V0U2VydmljZSkge31cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLnN1YnNjcmliZVdpbmRvd1NpemUoKTtcclxuICB9XHJcbn1cclxuIiwiPG5hdlxyXG4gIGNsYXNzPVwibmF2YmFyIG5hdmJhci1leHBhbmQtbGcgbmF2YmFyLWRhcmsgYmctZGFyayBzaGFkb3ctc20gZmxleC1jb2x1bW4gZmxleC1tZC1yb3cgbWItNFwiXHJcbiAgaWQ9XCJtYWluLW5hdmJhclwiXHJcbiAgc3R5bGU9XCJtaW4taGVpZ2h0OiA0cmVtXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuICAgIDxhYnAtbG9nbyAqYWJwUmVwbGFjZWFibGVUZW1wbGF0ZT1cInsgY29tcG9uZW50S2V5OiBzZXJ2aWNlLmxvZ29Db21wb25lbnRLZXkgfVwiPjwvYWJwLWxvZ28+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhc2VydmljZS5pc0NvbGxhcHNlZFwiXHJcbiAgICAgIChjbGljayk9XCJzZXJ2aWNlLmlzQ29sbGFwc2VkID0gIXNlcnZpY2UuaXNDb2xsYXBzZWRcIlxyXG4gICAgPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJuYXZiYXItY29sbGFwc2VcIlxyXG4gICAgICBbY2xhc3Mub3ZlcmZsb3ctaGlkZGVuXT1cInNlcnZpY2Uuc21hbGxTY3JlZW5cIlxyXG4gICAgICBpZD1cIm1haW4tbmF2YmFyLWNvbGxhcHNlXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIiFzZXJ2aWNlLnNtYWxsU2NyZWVuID8gbmF2aWdhdGlvbnMgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJzZXJ2aWNlLnNtYWxsU2NyZWVuXCJcclxuICAgICAgICBbQGNvbGxhcHNlV2l0aE1hcmdpbl09XCJzZXJ2aWNlLmlzQ29sbGFwc2VkID8gJ2NvbGxhcHNlZCcgOiAnZXhwYW5kZWQnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuYXZpZ2F0aW9uc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjbmF2aWdhdGlvbnM+XHJcbiAgICAgICAgPGFicC1yb3V0ZXNcclxuICAgICAgICAgICphYnBSZXBsYWNlYWJsZVRlbXBsYXRlPVwie1xyXG4gICAgICAgICAgICBjb21wb25lbnRLZXk6IHNlcnZpY2Uucm91dGVzQ29tcG9uZW50S2V5LFxyXG4gICAgICAgICAgICBpbnB1dHM6IHtcclxuICAgICAgICAgICAgICBzbWFsbFNjcmVlbjogeyB2YWx1ZTogc2VydmljZS5zbWFsbFNjcmVlbiB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJteC1hdXRvXCJcclxuICAgICAgICAgIFtzbWFsbFNjcmVlbl09XCJzZXJ2aWNlLnNtYWxsU2NyZWVuXCJcclxuICAgICAgICA+PC9hYnAtcm91dGVzPlxyXG5cclxuICAgICAgICA8YWJwLW5hdi1pdGVtc1xyXG4gICAgICAgICAgKmFicFJlcGxhY2VhYmxlVGVtcGxhdGU9XCJ7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudEtleTogc2VydmljZS5uYXZJdGVtc0NvbXBvbmVudEtleVxyXG4gICAgICAgICAgfVwiXHJcbiAgICAgICAgPjwvYWJwLW5hdi1pdGVtcz5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25hdj5cclxuXHJcbjwhLS0gW0BzbGlkZUZyb21Cb3R0b21dPVwib3V0bGV0LmlzQWN0aXZhdGVkICYmIG91dGxldC5hY3RpdmF0ZWRSb3V0ZT8ucm91dGVDb25maWc/LnBhdGhcIiBUT0RPOiB0aHJvd3MgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrIHdoZW4gYW5pbWF0aW9uIGlzIGFjdGl2ZS4gSXQgc2hvdWxkIGJlIGZpeGVkIC0tPlxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgPGFicC1wYWdlLWFsZXJ0LWNvbnRhaW5lcj48L2FicC1wYWdlLWFsZXJ0LWNvbnRhaW5lcj5cclxuICA8YWJwLWF1dGgtd3JhcHBlclxyXG4gICAgKmFicFJlcGxhY2VhYmxlVGVtcGxhdGU9XCJ7XHJcbiAgICAgIGNvbXBvbmVudEtleTogYXV0aFdyYXBwZXJLZXlcclxuICAgIH1cIlxyXG4gID5cclxuICAgIDxyb3V0ZXItb3V0bGV0ICNvdXRsZXQ9XCJvdXRsZXRcIj48L3JvdXRlci1vdXRsZXQ+XHJcbiAgPC9hYnAtYXV0aC13cmFwcGVyPlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthWrapperService } from '@abp/ng.account.core';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@abp/ng.account.core";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@abp/ng.core";
|
|
7
|
+
import * as i4 from "../tenant-box/tenant-box.component";
|
|
8
|
+
class AuthWrapperComponent {
|
|
9
|
+
constructor(service) {
|
|
10
|
+
this.service = service;
|
|
11
|
+
}
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthWrapperComponent, deps: [{ token: i1.AuthWrapperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AuthWrapperComponent, selector: "abp-auth-wrapper", providers: [AuthWrapperService], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"mx-auto col col-md-5\">\r\n <ng-container *ngIf=\"(service.isMultiTenancyEnabled$ | async) && service.isTenantBoxVisible\">\r\n <abp-tenant-box\r\n *abpReplaceableTemplate=\"{ componentKey: service.tenantBoxKey }\"\r\n ></abp-tenant-box>\r\n </ng-container>\r\n\r\n <div class=\"abp-account-container\">\r\n <div\r\n *ngIf=\"service.enableLocalLogin$ | async; else disableLocalLoginTemplate\"\r\n class=\"card mt-3 shadow-sm rounded\"\r\n >\r\n <div class=\"card-body p-5\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #disableLocalLoginTemplate>\r\n <div class=\"alert alert-warning\">\r\n <strong>{{ 'AbpAccount::InvalidLoginRequest' | abpLocalization }}</strong>\r\n {{ 'AbpAccount::ThereAreNoLoginSchemesConfiguredForThisClient' | abpLocalization }}\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ReplaceableTemplateDirective, selector: "[abpReplaceableTemplate]", inputs: ["abpReplaceableTemplate"] }, { kind: "component", type: i4.TenantBoxComponent, selector: "abp-tenant-box" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
14
|
+
}
|
|
15
|
+
export { AuthWrapperComponent };
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthWrapperComponent, decorators: [{
|
|
17
|
+
type: Component,
|
|
18
|
+
args: [{ selector: 'abp-auth-wrapper', providers: [AuthWrapperService], template: "<div class=\"row\">\r\n <div class=\"mx-auto col col-md-5\">\r\n <ng-container *ngIf=\"(service.isMultiTenancyEnabled$ | async) && service.isTenantBoxVisible\">\r\n <abp-tenant-box\r\n *abpReplaceableTemplate=\"{ componentKey: service.tenantBoxKey }\"\r\n ></abp-tenant-box>\r\n </ng-container>\r\n\r\n <div class=\"abp-account-container\">\r\n <div\r\n *ngIf=\"service.enableLocalLogin$ | async; else disableLocalLoginTemplate\"\r\n class=\"card mt-3 shadow-sm rounded\"\r\n >\r\n <div class=\"card-body p-5\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #disableLocalLoginTemplate>\r\n <div class=\"alert alert-warning\">\r\n <strong>{{ 'AbpAccount::InvalidLoginRequest' | abpLocalization }}</strong>\r\n {{ 'AbpAccount::ThereAreNoLoginSchemesConfiguredForThisClient' | abpLocalization }}\r\n </div>\r\n</ng-template>\r\n" }]
|
|
19
|
+
}], ctorParameters: function () { return [{ type: i1.AuthWrapperService }]; } });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50LWxheW91dC9hdXRoLXdyYXBwZXIvYXV0aC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50LWxheW91dC9hdXRoLXdyYXBwZXIvYXV0aC13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQUUxQyxNQUthLG9CQUFvQjtJQUMvQixZQUFtQixPQUEyQjtRQUEzQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtJQUFHLENBQUM7OEdBRHZDLG9CQUFvQjtrR0FBcEIsb0JBQW9CLDJDQUZwQixDQUFDLGtCQUFrQixDQUFDLDBCQ05qQyxnOUJBMkJBOztTRG5CYSxvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IsYUFFakIsQ0FBQyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhXcmFwcGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuYWNjb3VudC5jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1hdXRoLXdyYXBwZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW0F1dGhXcmFwcGVyU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoV3JhcHBlckNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHNlcnZpY2U6IEF1dGhXcmFwcGVyU2VydmljZSkge31cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgPGRpdiBjbGFzcz1cIm14LWF1dG8gY29sIGNvbC1tZC01XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHNlcnZpY2UuaXNNdWx0aVRlbmFuY3lFbmFibGVkJCB8IGFzeW5jKSAmJiBzZXJ2aWNlLmlzVGVuYW50Qm94VmlzaWJsZVwiPlxyXG4gICAgICA8YWJwLXRlbmFudC1ib3hcclxuICAgICAgICAqYWJwUmVwbGFjZWFibGVUZW1wbGF0ZT1cInsgY29tcG9uZW50S2V5OiBzZXJ2aWNlLnRlbmFudEJveEtleSB9XCJcclxuICAgICAgPjwvYWJwLXRlbmFudC1ib3g+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYWJwLWFjY291bnQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cInNlcnZpY2UuZW5hYmxlTG9jYWxMb2dpbiQgfCBhc3luYzsgZWxzZSBkaXNhYmxlTG9jYWxMb2dpblRlbXBsYXRlXCJcclxuICAgICAgICBjbGFzcz1cImNhcmQgbXQtMyBzaGFkb3ctc20gcm91bmRlZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtNVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGlzYWJsZUxvY2FsTG9naW5UZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxyXG4gICAgPHN0cm9uZz57eyAnQWJwQWNjb3VudDo6SW52YWxpZExvZ2luUmVxdWVzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3N0cm9uZz5cclxuICAgIHt7ICdBYnBBY2NvdW50OjpUaGVyZUFyZU5vTG9naW5TY2hlbWVzQ29uZmlndXJlZEZvclRoaXNDbGllbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TenantBoxService } from '@abp/ng.account.core';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@abp/ng.account.core";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/forms";
|
|
7
|
+
import * as i4 from "@abp/ng.core";
|
|
8
|
+
import * as i5 from "@abp/ng.theme.shared";
|
|
9
|
+
class TenantBoxComponent {
|
|
10
|
+
constructor(service) {
|
|
11
|
+
this.service = service;
|
|
12
|
+
}
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: TenantBoxComponent, deps: [{ token: i1.TenantBoxService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: TenantBoxComponent, selector: "abp-tenant-box", providers: [TenantBoxService], ngImport: i0, template: "<ng-container *ngIf=\"(service.currentTenant$ | async) || { name: '' } as currentTenant\">\r\n <div class=\"card shadow-sm rounded mb-3\">\r\n <div class=\"card-body px-5\">\r\n <div class=\"row\">\r\n <div class=\"col\">\r\n <span style=\"font-size: 0.8em\" class=\"text-uppercase text-muted\">{{\r\n 'AbpUiMultiTenancy::Tenant' | abpLocalization\r\n }}</span\r\n ><br />\r\n <h6 class=\"m-0 d-inline-block\">\r\n <i>{{ currentTenant.name || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }}</i>\r\n </h6>\r\n </div>\r\n <div class=\"col-auto\">\r\n <a\r\n id=\"AbpTenantSwitchLink\"\r\n href=\"javascript:void(0);\"\r\n class=\"btn btn-sm mt-3 btn-outline-primary\"\r\n (click)=\"service.onSwitch()\"\r\n >{{ 'AbpUiMultiTenancy::Switch' | abpLocalization }}</a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <abp-modal [(visible)]=\"service.isModalVisible\" [busy]=\"service.modalBusy\">\r\n <ng-template #abpHeader>\r\n <h5>Switch Tenant</h5>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <form (ngSubmit)=\"service.save()\">\r\n <div class=\"mt-2\">\r\n <div class=\"mb-3 form-group\">\r\n <label for=\"name\" class=\"form-label\">{{\r\n 'AbpUiMultiTenancy::Name' | abpLocalization\r\n }}</label>\r\n <input\r\n [(ngModel)]=\"service.name\"\r\n type=\"text\"\r\n id=\"name\"\r\n name=\"tenant\"\r\n class=\"form-control\"\r\n autofocus\r\n />\r\n </div>\r\n <p>{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}</p>\r\n </div>\r\n </form>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">\r\n {{ 'AbpTenantManagement::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n type=\"abp-button\"\r\n iconClass=\"fa fa-check\"\r\n (click)=\"service.save()\"\r\n [disabled]=\"currentTenant?.name === service.name\"\r\n >\r\n <span>{{ 'AbpTenantManagement::Save' | abpLocalization }}</span>\r\n </abp-button>\r\n </ng-template>\r\n </abp-modal>\r\n</ng-container>\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.AutofocusDirective, selector: "[autofocus]", inputs: ["autofocus"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
15
|
+
}
|
|
16
|
+
export { TenantBoxComponent };
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: TenantBoxComponent, decorators: [{
|
|
18
|
+
type: Component,
|
|
19
|
+
args: [{ selector: 'abp-tenant-box', providers: [TenantBoxService], template: "<ng-container *ngIf=\"(service.currentTenant$ | async) || { name: '' } as currentTenant\">\r\n <div class=\"card shadow-sm rounded mb-3\">\r\n <div class=\"card-body px-5\">\r\n <div class=\"row\">\r\n <div class=\"col\">\r\n <span style=\"font-size: 0.8em\" class=\"text-uppercase text-muted\">{{\r\n 'AbpUiMultiTenancy::Tenant' | abpLocalization\r\n }}</span\r\n ><br />\r\n <h6 class=\"m-0 d-inline-block\">\r\n <i>{{ currentTenant.name || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }}</i>\r\n </h6>\r\n </div>\r\n <div class=\"col-auto\">\r\n <a\r\n id=\"AbpTenantSwitchLink\"\r\n href=\"javascript:void(0);\"\r\n class=\"btn btn-sm mt-3 btn-outline-primary\"\r\n (click)=\"service.onSwitch()\"\r\n >{{ 'AbpUiMultiTenancy::Switch' | abpLocalization }}</a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <abp-modal [(visible)]=\"service.isModalVisible\" [busy]=\"service.modalBusy\">\r\n <ng-template #abpHeader>\r\n <h5>Switch Tenant</h5>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <form (ngSubmit)=\"service.save()\">\r\n <div class=\"mt-2\">\r\n <div class=\"mb-3 form-group\">\r\n <label for=\"name\" class=\"form-label\">{{\r\n 'AbpUiMultiTenancy::Name' | abpLocalization\r\n }}</label>\r\n <input\r\n [(ngModel)]=\"service.name\"\r\n type=\"text\"\r\n id=\"name\"\r\n name=\"tenant\"\r\n class=\"form-control\"\r\n autofocus\r\n />\r\n </div>\r\n <p>{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}</p>\r\n </div>\r\n </form>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">\r\n {{ 'AbpTenantManagement::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n type=\"abp-button\"\r\n iconClass=\"fa fa-check\"\r\n (click)=\"service.save()\"\r\n [disabled]=\"currentTenant?.name === service.name\"\r\n >\r\n <span>{{ 'AbpTenantManagement::Save' | abpLocalization }}</span>\r\n </abp-button>\r\n </ng-template>\r\n </abp-modal>\r\n</ng-container>\r\n" }]
|
|
20
|
+
}], ctorParameters: function () { return [{ type: i1.TenantBoxService }]; } });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1iYXNpYy9zcmMvbGliL2NvbXBvbmVudHMvYWNjb3VudC1sYXlvdXQvdGVuYW50LWJveC90ZW5hbnQtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50LWxheW91dC90ZW5hbnQtYm94L3RlbmFudC1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQUUxQyxNQUthLGtCQUFrQjtJQUM3QixZQUFtQixPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtJQUFHLENBQUM7OEdBRHJDLGtCQUFrQjtrR0FBbEIsa0JBQWtCLHlDQUZsQixDQUFDLGdCQUFnQixDQUFDLDBCQ04vQixtNEVBaUVBOztTRHpEYSxrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0IsYUFFZixDQUFDLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVuYW50Qm94U2VydmljZSB9IGZyb20gJ0BhYnAvbmcuYWNjb3VudC5jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC10ZW5hbnQtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGVuYW50LWJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbVGVuYW50Qm94U2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZW5hbnRCb3hDb21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzZXJ2aWNlOiBUZW5hbnRCb3hTZXJ2aWNlKSB7fVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIoc2VydmljZS5jdXJyZW50VGVuYW50JCB8IGFzeW5jKSB8fCB7IG5hbWU6ICcnIH0gYXMgY3VycmVudFRlbmFudFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIHNoYWRvdy1zbSByb3VuZGVkIG1iLTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHgtNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDAuOGVtXCIgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkXCI+e3tcclxuICAgICAgICAgICAgJ0FicFVpTXVsdGlUZW5hbmN5OjpUZW5hbnQnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgPGg2IGNsYXNzPVwibS0wIGQtaW5saW5lLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxpPnt7IGN1cnJlbnRUZW5hbnQubmFtZSB8fCAoJ0FicFVpTXVsdGlUZW5hbmN5OjpOb3RTZWxlY3RlZCcgfCBhYnBMb2NhbGl6YXRpb24pIH19PC9pPlxyXG4gICAgICAgICAgPC9oNj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgIGlkPVwiQWJwVGVuYW50U3dpdGNoTGlua1wiXHJcbiAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIG10LTMgYnRuLW91dGxpbmUtcHJpbWFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXJ2aWNlLm9uU3dpdGNoKClcIlxyXG4gICAgICAgICAgICA+e3sgJ0FicFVpTXVsdGlUZW5hbmN5OjpTd2l0Y2gnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9hXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJzZXJ2aWNlLmlzTW9kYWxWaXNpYmxlXCIgW2J1c3ldPVwic2VydmljZS5tb2RhbEJ1c3lcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgICA8aDU+U3dpdGNoIFRlbmFudDwvaDU+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgICA8Zm9ybSAobmdTdWJtaXQpPVwic2VydmljZS5zYXZlKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwibmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7XHJcbiAgICAgICAgICAgICAgJ0FicFVpTXVsdGlUZW5hbmN5OjpOYW1lJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VydmljZS5uYW1lXCJcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICBuYW1lPVwidGVuYW50XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgYXV0b2ZvY3VzXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxwPnt7ICdBYnBVaU11bHRpVGVuYW5jeTo6U3dpdGNoVGVuYW50SGludCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgICAgPGJ1dHRvbiBhYnBDbG9zZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiPlxyXG4gICAgICAgIHt7ICdBYnBUZW5hbnRNYW5hZ2VtZW50OjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YWJwLWJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJhYnAtYnV0dG9uXCJcclxuICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlcnZpY2Uuc2F2ZSgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFRlbmFudD8ubmFtZSA9PT0gc2VydmljZS5uYW1lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuPnt7ICdBYnBUZW5hbnRNYW5hZ2VtZW50OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgPC9hYnAtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2FicC1tb2RhbD5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SubscriptionService } from '@abp/ng.core';
|
|
2
|
+
import { collapseWithMargin, slideFromBottom } from '@abp/ng.theme.shared';
|
|
3
|
+
import { Component } from '@angular/core';
|
|
4
|
+
import { LayoutService } from '../../services/layout.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/layout.service";
|
|
7
|
+
import * as i2 from "@angular/common";
|
|
8
|
+
import * as i3 from "@angular/router";
|
|
9
|
+
import * as i4 from "@abp/ng.core";
|
|
10
|
+
import * as i5 from "../logo/logo.component";
|
|
11
|
+
import * as i6 from "../nav-items/nav-items.component";
|
|
12
|
+
import * as i7 from "../routes/routes.component";
|
|
13
|
+
import * as i8 from "../page-alert-container/page-alert-container.component";
|
|
14
|
+
class ApplicationLayoutComponent {
|
|
15
|
+
// required for dynamic component
|
|
16
|
+
static { this.type = "application" /* eLayoutType.application */; }
|
|
17
|
+
constructor(service) {
|
|
18
|
+
this.service = service;
|
|
19
|
+
}
|
|
20
|
+
ngAfterViewInit() {
|
|
21
|
+
this.service.subscribeWindowSize();
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: ApplicationLayoutComponent, deps: [{ token: i1.LayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: ApplicationLayoutComponent, selector: "abp-layout-application", providers: [LayoutService, SubscriptionService], ngImport: i0, template: "<nav\r\n class=\"navbar navbar-expand-lg navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4\"\r\n id=\"main-navbar\"\r\n style=\"min-height: 4rem\"\r\n>\r\n <div class=\"container\">\r\n <abp-logo *abpReplaceableTemplate=\"{ componentKey: service.logoComponentKey }\"></abp-logo>\r\n <button\r\n class=\"navbar-toggler\"\r\n type=\"button\"\r\n [attr.aria-expanded]=\"!service.isCollapsed\"\r\n (click)=\"service.isCollapsed = !service.isCollapsed\"\r\n >\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n <div class=\"navbar-collapse\" [class.overflow-hidden]=\"service.smallScreen\" id=\"main-navbar-collapse\">\r\n <ng-container *ngTemplateOutlet=\"!service.smallScreen ? navigations : null\"></ng-container>\r\n\r\n <div *ngIf=\"service.smallScreen\" [@collapseWithMargin]=\"service.isCollapsed ? 'collapsed' : 'expanded'\">\r\n <ng-container *ngTemplateOutlet=\"navigations\"></ng-container>\r\n </div>\r\n\r\n <ng-template #navigations>\r\n <abp-routes\r\n *abpReplaceableTemplate=\"{\r\n componentKey: service.routesComponentKey,\r\n inputs: {\r\n smallScreen: { value: service.smallScreen }\r\n }\r\n }\"\r\n class=\"mx-auto\"\r\n [smallScreen]=\"service.smallScreen\"\r\n ></abp-routes>\r\n\r\n <abp-nav-items\r\n *abpReplaceableTemplate=\"{\r\n componentKey: service.navItemsComponentKey\r\n }\"\r\n ></abp-nav-items>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<!-- [@slideFromBottom]=\"outlet.isActivated && outlet.activatedRoute?.routeConfig?.path\" TODO: throws ExpressionChangedAfterItHasBeenCheck when animation is active. It should be fixed -->\r\n<div class=\"container\">\r\n <abp-page-alert-container></abp-page-alert-container>\r\n\r\n <router-outlet #outlet=\"outlet\"></router-outlet>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i4.ReplaceableTemplateDirective, selector: "[abpReplaceableTemplate]", inputs: ["abpReplaceableTemplate"] }, { kind: "component", type: i5.LogoComponent, selector: "abp-logo" }, { kind: "component", type: i6.NavItemsComponent, selector: "abp-nav-items" }, { kind: "component", type: i7.RoutesComponent, selector: "abp-routes", inputs: ["smallScreen"] }, { kind: "component", type: i8.PageAlertContainerComponent, selector: "abp-page-alert-container" }], animations: [slideFromBottom, collapseWithMargin] }); }
|
|
25
|
+
}
|
|
26
|
+
export { ApplicationLayoutComponent };
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: ApplicationLayoutComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'abp-layout-application', animations: [slideFromBottom, collapseWithMargin], providers: [LayoutService, SubscriptionService], template: "<nav\r\n class=\"navbar navbar-expand-lg navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4\"\r\n id=\"main-navbar\"\r\n style=\"min-height: 4rem\"\r\n>\r\n <div class=\"container\">\r\n <abp-logo *abpReplaceableTemplate=\"{ componentKey: service.logoComponentKey }\"></abp-logo>\r\n <button\r\n class=\"navbar-toggler\"\r\n type=\"button\"\r\n [attr.aria-expanded]=\"!service.isCollapsed\"\r\n (click)=\"service.isCollapsed = !service.isCollapsed\"\r\n >\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n <div class=\"navbar-collapse\" [class.overflow-hidden]=\"service.smallScreen\" id=\"main-navbar-collapse\">\r\n <ng-container *ngTemplateOutlet=\"!service.smallScreen ? navigations : null\"></ng-container>\r\n\r\n <div *ngIf=\"service.smallScreen\" [@collapseWithMargin]=\"service.isCollapsed ? 'collapsed' : 'expanded'\">\r\n <ng-container *ngTemplateOutlet=\"navigations\"></ng-container>\r\n </div>\r\n\r\n <ng-template #navigations>\r\n <abp-routes\r\n *abpReplaceableTemplate=\"{\r\n componentKey: service.routesComponentKey,\r\n inputs: {\r\n smallScreen: { value: service.smallScreen }\r\n }\r\n }\"\r\n class=\"mx-auto\"\r\n [smallScreen]=\"service.smallScreen\"\r\n ></abp-routes>\r\n\r\n <abp-nav-items\r\n *abpReplaceableTemplate=\"{\r\n componentKey: service.navItemsComponentKey\r\n }\"\r\n ></abp-nav-items>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<!-- [@slideFromBottom]=\"outlet.isActivated && outlet.activatedRoute?.routeConfig?.path\" TODO: throws ExpressionChangedAfterItHasBeenCheck when animation is active. It should be fixed -->\r\n<div class=\"container\">\r\n <abp-page-alert-container></abp-page-alert-container>\r\n\r\n <router-outlet #outlet=\"outlet\"></router-outlet>\r\n</div>\r\n" }]
|
|
30
|
+
}], ctorParameters: function () { return [{ type: i1.LayoutService }]; } });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9hcHBsaWNhdGlvbi1sYXlvdXQvYXBwbGljYXRpb24tbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9hcHBsaWNhdGlvbi1sYXlvdXQvYXBwbGljYXRpb24tbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxtQkFBbUIsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFnQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBRzlELE1BTWEsMEJBQTBCO0lBQ3JDLGlDQUFpQzthQUMxQixTQUFJLDhDQUFBLENBQTJCO0lBRXRDLFlBQW1CLE9BQXNCO1FBQXRCLFlBQU8sR0FBUCxPQUFPLENBQWU7SUFBRyxDQUFDO0lBRTdDLGVBQWU7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDckMsQ0FBQzs4R0FSVSwwQkFBMEI7a0dBQTFCLDBCQUEwQixpREFGMUIsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsMEJDVmpELDg3REFrREEsbTdCRHpDYyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQzs7U0FHdEMsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBRXRCLENBQUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLGFBQ3RDLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtlTGF5b3V0VHlwZSwgU3Vic2NyaXB0aW9uU2VydmljZX0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgY29sbGFwc2VXaXRoTWFyZ2luLCBzbGlkZUZyb21Cb3R0b20gfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1sYXlvdXQtYXBwbGljYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHBsaWNhdGlvbi1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGFuaW1hdGlvbnM6IFtzbGlkZUZyb21Cb3R0b20sIGNvbGxhcHNlV2l0aE1hcmdpbl0sXHJcbiAgcHJvdmlkZXJzOiBbTGF5b3V0U2VydmljZSwgU3Vic2NyaXB0aW9uU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkxheW91dENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIC8vIHJlcXVpcmVkIGZvciBkeW5hbWljIGNvbXBvbmVudFxyXG4gIHN0YXRpYyB0eXBlID0gZUxheW91dFR5cGUuYXBwbGljYXRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNlcnZpY2Uuc3Vic2NyaWJlV2luZG93U2l6ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bmF2XHJcbiAgY2xhc3M9XCJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBuYXZiYXItZGFyayBiZy1kYXJrIHNoYWRvdy1zbSBmbGV4LWNvbHVtbiBmbGV4LW1kLXJvdyBtYi00XCJcclxuICBpZD1cIm1haW4tbmF2YmFyXCJcclxuICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDRyZW1cIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPGFicC1sb2dvICphYnBSZXBsYWNlYWJsZVRlbXBsYXRlPVwieyBjb21wb25lbnRLZXk6IHNlcnZpY2UubG9nb0NvbXBvbmVudEtleSB9XCI+PC9hYnAtbG9nbz5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJuYXZiYXItdG9nZ2xlclwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiFzZXJ2aWNlLmlzQ29sbGFwc2VkXCJcclxuICAgICAgKGNsaWNrKT1cInNlcnZpY2UuaXNDb2xsYXBzZWQgPSAhc2VydmljZS5pc0NvbGxhcHNlZFwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXItaWNvblwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hdmJhci1jb2xsYXBzZVwiIFtjbGFzcy5vdmVyZmxvdy1oaWRkZW5dPVwic2VydmljZS5zbWFsbFNjcmVlblwiIGlkPVwibWFpbi1uYXZiYXItY29sbGFwc2VcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIiFzZXJ2aWNlLnNtYWxsU2NyZWVuID8gbmF2aWdhdGlvbnMgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2VydmljZS5zbWFsbFNjcmVlblwiIFtAY29sbGFwc2VXaXRoTWFyZ2luXT1cInNlcnZpY2UuaXNDb2xsYXBzZWQgPyAnY29sbGFwc2VkJyA6ICdleHBhbmRlZCdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmF2aWdhdGlvbnNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI25hdmlnYXRpb25zPlxyXG4gICAgICAgIDxhYnAtcm91dGVzXHJcbiAgICAgICAgICAqYWJwUmVwbGFjZWFibGVUZW1wbGF0ZT1cIntcclxuICAgICAgICAgICAgY29tcG9uZW50S2V5OiBzZXJ2aWNlLnJvdXRlc0NvbXBvbmVudEtleSxcclxuICAgICAgICAgICAgaW5wdXRzOiB7XHJcbiAgICAgICAgICAgICAgc21hbGxTY3JlZW46IHsgdmFsdWU6IHNlcnZpY2Uuc21hbGxTY3JlZW4gfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICAgIGNsYXNzPVwibXgtYXV0b1wiXHJcbiAgICAgICAgICBbc21hbGxTY3JlZW5dPVwic2VydmljZS5zbWFsbFNjcmVlblwiXHJcbiAgICAgICAgPjwvYWJwLXJvdXRlcz5cclxuXHJcbiAgICAgICAgPGFicC1uYXYtaXRlbXNcclxuICAgICAgICAgICphYnBSZXBsYWNlYWJsZVRlbXBsYXRlPVwie1xyXG4gICAgICAgICAgICBjb21wb25lbnRLZXk6IHNlcnZpY2UubmF2SXRlbXNDb21wb25lbnRLZXlcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgID48L2FicC1uYXYtaXRlbXM+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uYXY+XHJcblxyXG48IS0tIFtAc2xpZGVGcm9tQm90dG9tXT1cIm91dGxldC5pc0FjdGl2YXRlZCAmJiBvdXRsZXQuYWN0aXZhdGVkUm91dGU/LnJvdXRlQ29uZmlnPy5wYXRoXCIgVE9ETzogdGhyb3dzIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVjayB3aGVuIGFuaW1hdGlvbiBpcyBhY3RpdmUuIEl0IHNob3VsZCBiZSBmaXhlZCAtLT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gIDxhYnAtcGFnZS1hbGVydC1jb250YWluZXI+PC9hYnAtcGFnZS1hbGVydC1jb250YWluZXI+XHJcblxyXG4gIDxyb3V0ZXItb3V0bGV0ICNvdXRsZXQ9XCJvdXRsZXRcIj48L3JvdXRlci1vdXRsZXQ+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/router";
|
|
4
|
+
import * as i2 from "@abp/ng.theme.shared";
|
|
5
|
+
class EmptyLayoutComponent {
|
|
6
|
+
static { this.type = "empty" /* eLayoutType.empty */; }
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: EmptyLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: EmptyLayoutComponent, selector: "abp-layout-empty", ngImport: i0, template: `
|
|
9
|
+
<router-outlet></router-outlet>
|
|
10
|
+
<abp-confirmation></abp-confirmation>
|
|
11
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i2.ConfirmationComponent, selector: "abp-confirmation" }] }); }
|
|
12
|
+
}
|
|
13
|
+
export { EmptyLayoutComponent };
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: EmptyLayoutComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{
|
|
17
|
+
selector: 'abp-layout-empty',
|
|
18
|
+
template: `
|
|
19
|
+
<router-outlet></router-outlet>
|
|
20
|
+
<abp-confirmation></abp-confirmation>
|
|
21
|
+
`,
|
|
22
|
+
}]
|
|
23
|
+
}] });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1sYXlvdXQvZW1wdHktbGF5b3V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBRzFDLE1BT2Esb0JBQW9CO2FBQ3hCLFNBQUksa0NBQUEsQ0FBcUI7OEdBRHJCLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHdEQUxyQjs7O0dBR1Q7O1NBRVUsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBUGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFOzs7R0FHVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBlTGF5b3V0VHlwZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1sYXlvdXQtZW1wdHknLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbiAgICA8YWJwLWNvbmZpcm1hdGlvbj48L2FicC1jb25maXJtYXRpb24+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHR5TGF5b3V0Q29tcG9uZW50IHtcclxuICBzdGF0aWMgdHlwZSA9IGVMYXlvdXRUeXBlLmVtcHR5O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export * from './account-layout/account-layout.component';
|
|
2
|
-
export * from './account-layout/auth-wrapper/auth-wrapper.component';
|
|
3
|
-
export * from './account-layout/tenant-box/tenant-box.component';
|
|
4
|
-
export * from './application-layout/application-layout.component';
|
|
5
|
-
export * from './empty-layout/empty-layout.component';
|
|
6
|
-
export * from './logo/logo.component';
|
|
7
|
-
export * from './nav-items/current-user.component';
|
|
8
|
-
export * from './nav-items/languages.component';
|
|
9
|
-
export * from './nav-items/nav-items.component';
|
|
10
|
-
export * from './page-alert-container/page-alert-container.component';
|
|
11
|
-
export * from './routes/routes.component';
|
|
12
|
-
export * from './validation-error/validation-error.component';
|
|
1
|
+
export * from './account-layout/account-layout.component';
|
|
2
|
+
export * from './account-layout/auth-wrapper/auth-wrapper.component';
|
|
3
|
+
export * from './account-layout/tenant-box/tenant-box.component';
|
|
4
|
+
export * from './application-layout/application-layout.component';
|
|
5
|
+
export * from './empty-layout/empty-layout.component';
|
|
6
|
+
export * from './logo/logo.component';
|
|
7
|
+
export * from './nav-items/current-user.component';
|
|
8
|
+
export * from './nav-items/languages.component';
|
|
9
|
+
export * from './nav-items/nav-items.component';
|
|
10
|
+
export * from './page-alert-container/page-alert-container.component';
|
|
11
|
+
export * from './routes/routes.component';
|
|
12
|
+
export * from './validation-error/validation-error.component';
|
|
13
13
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1iYXNpYy9zcmMvbGliL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsK0NBQStDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FjY291bnQtbGF5b3V0L2FjY291bnQtbGF5b3V0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC1sYXlvdXQvYXV0aC13cmFwcGVyL2F1dGgtd3JhcHBlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FjY291bnQtbGF5b3V0L3RlbmFudC1ib3gvdGVuYW50LWJveC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FwcGxpY2F0aW9uLWxheW91dC9hcHBsaWNhdGlvbi1sYXlvdXQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9lbXB0eS1sYXlvdXQvZW1wdHktbGF5b3V0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9nby9sb2dvLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbmF2LWl0ZW1zL2N1cnJlbnQtdXNlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL25hdi1pdGVtcy9sYW5ndWFnZXMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9uYXYtaXRlbXMvbmF2LWl0ZW1zLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcGFnZS1hbGVydC1jb250YWluZXIvcGFnZS1hbGVydC1jb250YWluZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXMvcm91dGVzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdGlvbi1lcnJvci92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudCc7XHJcbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { EnvironmentService } from '@abp/ng.core';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@abp/ng.core";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/router";
|
|
7
|
+
class LogoComponent {
|
|
8
|
+
get appInfo() {
|
|
9
|
+
return this.environment.getEnvironment().application;
|
|
10
|
+
}
|
|
11
|
+
constructor(environment) {
|
|
12
|
+
this.environment = environment;
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: LogoComponent, deps: [{ token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: LogoComponent, selector: "abp-logo", ngImport: i0, template: `
|
|
16
|
+
<a class="navbar-brand" routerLink="/">
|
|
17
|
+
<img
|
|
18
|
+
*ngIf="appInfo.logoUrl; else appName"
|
|
19
|
+
[src]="appInfo.logoUrl"
|
|
20
|
+
[alt]="appInfo.name"
|
|
21
|
+
width="100%"
|
|
22
|
+
height="auto"
|
|
23
|
+
/>
|
|
24
|
+
</a>
|
|
25
|
+
|
|
26
|
+
<ng-template #appName>
|
|
27
|
+
{{ appInfo.name }}
|
|
28
|
+
</ng-template>
|
|
29
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
30
|
+
}
|
|
31
|
+
export { LogoComponent };
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: LogoComponent, decorators: [{
|
|
33
|
+
type: Component,
|
|
34
|
+
args: [{
|
|
35
|
+
selector: 'abp-logo',
|
|
36
|
+
template: `
|
|
37
|
+
<a class="navbar-brand" routerLink="/">
|
|
38
|
+
<img
|
|
39
|
+
*ngIf="appInfo.logoUrl; else appName"
|
|
40
|
+
[src]="appInfo.logoUrl"
|
|
41
|
+
[alt]="appInfo.name"
|
|
42
|
+
width="100%"
|
|
43
|
+
height="auto"
|
|
44
|
+
/>
|
|
45
|
+
</a>
|
|
46
|
+
|
|
47
|
+
<ng-template #appName>
|
|
48
|
+
{{ appInfo.name }}
|
|
49
|
+
</ng-template>
|
|
50
|
+
`,
|
|
51
|
+
}]
|
|
52
|
+
}], ctorParameters: function () { return [{ type: i1.EnvironmentService }]; } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1iYXNpYy9zcmMvbGliL2NvbXBvbmVudHMvbG9nby9sb2dvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRTFDLE1Ba0JhLGFBQWE7SUFDeEIsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBb0IsV0FBK0I7UUFBL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO0lBQUcsQ0FBQzs4R0FMNUMsYUFBYTtrR0FBYixhQUFhLGdEQWhCZDs7Ozs7Ozs7Ozs7Ozs7R0FjVDs7U0FFVSxhQUFhOzJGQUFiLGFBQWE7a0JBbEJ6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0dBY1Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvbkluZm8sIEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtbG9nbycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxhIGNsYXNzPVwibmF2YmFyLWJyYW5kXCIgcm91dGVyTGluaz1cIi9cIj5cclxuICAgICAgPGltZ1xyXG4gICAgICAgICpuZ0lmPVwiYXBwSW5mby5sb2dvVXJsOyBlbHNlIGFwcE5hbWVcIlxyXG4gICAgICAgIFtzcmNdPVwiYXBwSW5mby5sb2dvVXJsXCJcclxuICAgICAgICBbYWx0XT1cImFwcEluZm8ubmFtZVwiXHJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcclxuICAgICAgICBoZWlnaHQ9XCJhdXRvXCJcclxuICAgICAgLz5cclxuICAgIDwvYT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2FwcE5hbWU+XHJcbiAgICAgIHt7IGFwcEluZm8ubmFtZSB9fVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nb0NvbXBvbmVudCB7XHJcbiAgZ2V0IGFwcEluZm8oKTogQXBwbGljYXRpb25JbmZvIHtcclxuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmdldEVudmlyb25tZW50KCkuYXBwbGljYXRpb247XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFNlcnZpY2UpIHt9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AuthService, ConfigStateService, NAVIGATE_TO_MANAGE_PROFILE, SessionStateService, } from '@abp/ng.core';
|
|
2
|
+
import { UserMenuService } from '@abp/ng.theme.shared';
|
|
3
|
+
import { Component, Inject } from '@angular/core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@abp/ng.theme.shared";
|
|
6
|
+
import * as i2 from "@abp/ng.core";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
class CurrentUserComponent {
|
|
10
|
+
get smallScreen() {
|
|
11
|
+
return window.innerWidth < 992;
|
|
12
|
+
}
|
|
13
|
+
constructor(navigateToManageProfile, userMenu, authService, configState, sessionState) {
|
|
14
|
+
this.navigateToManageProfile = navigateToManageProfile;
|
|
15
|
+
this.userMenu = userMenu;
|
|
16
|
+
this.authService = authService;
|
|
17
|
+
this.configState = configState;
|
|
18
|
+
this.sessionState = sessionState;
|
|
19
|
+
this.currentUser$ = this.configState.getOne$('currentUser');
|
|
20
|
+
this.selectedTenant$ = this.sessionState.getTenant$();
|
|
21
|
+
this.trackByFn = (_, element) => element.id;
|
|
22
|
+
}
|
|
23
|
+
navigateToLogin() {
|
|
24
|
+
this.authService.navigateToLogin();
|
|
25
|
+
}
|
|
26
|
+
logout() {
|
|
27
|
+
this.authService.logout().subscribe();
|
|
28
|
+
}
|
|
29
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: CurrentUserComponent, deps: [{ token: NAVIGATE_TO_MANAGE_PROFILE }, { token: i1.UserMenuService }, { token: i2.AuthService }, { token: i2.ConfigStateService }, { token: i2.SessionStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: CurrentUserComponent, selector: "abp-current-user", ngImport: i0, template: "<ng-template #loginBtn>\r\n <a role=\"button\" class=\"nav-link pointer\" (click)=\"navigateToLogin()\">{{\r\n 'AbpAccount::Login' | abpLocalization\r\n }}</a>\r\n</ng-template>\r\n<div\r\n *ngIf=\"(currentUser$ | async)?.isAuthenticated; else loginBtn\"\r\n ngbDropdown\r\n class=\"dropdown\"\r\n #currentUserDropdown=\"ngbDropdown\"\r\n display=\"static\"\r\n>\r\n <a\r\n ngbDropdownToggle\r\n class=\"nav-link\"\r\n href=\"javascript:void(0)\"\r\n role=\"button\"\r\n id=\"dropdownMenuLink\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n >\r\n <small *ngIf=\"(selectedTenant$ | async)?.name as tenantName\"\r\n ><i>{{ tenantName }}</i\r\n >\\</small\r\n >\r\n <strong>{{ (currentUser$ | async)?.userName }}</strong>\r\n </a>\r\n <div\r\n class=\"dropdown-menu dropdown-menu-end border-0 shadow-sm\"\r\n aria-labelledby=\"dropdownMenuLink\"\r\n [class.d-block]=\"smallScreen && currentUserDropdown.isOpen()\"\r\n >\r\n <ng-container *ngFor=\"let item of userMenu.items$ | async; trackBy: trackByFn\">\r\n <ng-container *abpVisible=\"!item.visible || item.visible(item)\">\r\n <li class=\"nav-item d-flex align-items-center\" *abpPermission=\"item.requiredPolicy\">\r\n <ng-container\r\n *ngIf=\"item.component; else htmlTemplate\"\r\n [ngComponentOutlet]=\"item.component\"\r\n [ngComponentOutletInjector]=\"item | toInjector\"\r\n ></ng-container>\r\n\r\n <ng-template #htmlTemplate>\r\n <div\r\n *ngIf=\"item.html; else textTemplate\"\r\n [innerHTML]=\"item.html\"\r\n (click)=\"item.action ? item.action() : null\"\r\n ></div>\r\n </ng-template>\r\n\r\n <ng-template #textTemplate>\r\n <a\r\n *ngIf=\"item.textTemplate\"\r\n (click)=\"item.action ? item.action() : null\"\r\n class=\"dropdown-item pointer\"\r\n >\r\n <i *ngIf=\"item.textTemplate.icon\" class=\"me-1 {{ item.textTemplate.icon }}\"></i>\r\n {{ item.textTemplate.text | abpLocalization }}</a\r\n >\r\n </ng-template>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: i1.AbpVisibleDirective, selector: "[abpVisible]", inputs: ["abpVisible"] }, { kind: "directive", type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: i2.ToInjectorPipe, name: "toInjector" }] }); }
|
|
31
|
+
}
|
|
32
|
+
export { CurrentUserComponent };
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: CurrentUserComponent, decorators: [{
|
|
34
|
+
type: Component,
|
|
35
|
+
args: [{ selector: 'abp-current-user', template: "<ng-template #loginBtn>\r\n <a role=\"button\" class=\"nav-link pointer\" (click)=\"navigateToLogin()\">{{\r\n 'AbpAccount::Login' | abpLocalization\r\n }}</a>\r\n</ng-template>\r\n<div\r\n *ngIf=\"(currentUser$ | async)?.isAuthenticated; else loginBtn\"\r\n ngbDropdown\r\n class=\"dropdown\"\r\n #currentUserDropdown=\"ngbDropdown\"\r\n display=\"static\"\r\n>\r\n <a\r\n ngbDropdownToggle\r\n class=\"nav-link\"\r\n href=\"javascript:void(0)\"\r\n role=\"button\"\r\n id=\"dropdownMenuLink\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n >\r\n <small *ngIf=\"(selectedTenant$ | async)?.name as tenantName\"\r\n ><i>{{ tenantName }}</i\r\n >\\</small\r\n >\r\n <strong>{{ (currentUser$ | async)?.userName }}</strong>\r\n </a>\r\n <div\r\n class=\"dropdown-menu dropdown-menu-end border-0 shadow-sm\"\r\n aria-labelledby=\"dropdownMenuLink\"\r\n [class.d-block]=\"smallScreen && currentUserDropdown.isOpen()\"\r\n >\r\n <ng-container *ngFor=\"let item of userMenu.items$ | async; trackBy: trackByFn\">\r\n <ng-container *abpVisible=\"!item.visible || item.visible(item)\">\r\n <li class=\"nav-item d-flex align-items-center\" *abpPermission=\"item.requiredPolicy\">\r\n <ng-container\r\n *ngIf=\"item.component; else htmlTemplate\"\r\n [ngComponentOutlet]=\"item.component\"\r\n [ngComponentOutletInjector]=\"item | toInjector\"\r\n ></ng-container>\r\n\r\n <ng-template #htmlTemplate>\r\n <div\r\n *ngIf=\"item.html; else textTemplate\"\r\n [innerHTML]=\"item.html\"\r\n (click)=\"item.action ? item.action() : null\"\r\n ></div>\r\n </ng-template>\r\n\r\n <ng-template #textTemplate>\r\n <a\r\n *ngIf=\"item.textTemplate\"\r\n (click)=\"item.action ? item.action() : null\"\r\n class=\"dropdown-item pointer\"\r\n >\r\n <i *ngIf=\"item.textTemplate.icon\" class=\"me-1 {{ item.textTemplate.icon }}\"></i>\r\n {{ item.textTemplate.text | abpLocalization }}</a\r\n >\r\n </ng-template>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n" }]
|
|
36
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
37
|
+
type: Inject,
|
|
38
|
+
args: [NAVIGATE_TO_MANAGE_PROFILE]
|
|
39
|
+
}] }, { type: i1.UserMenuService }, { type: i2.AuthService }, { type: i2.ConfigStateService }, { type: i2.SessionStateService }]; } });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVudC11c2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9uYXYtaXRlbXMvY3VycmVudC11c2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLWJhc2ljL3NyYy9saWIvY29tcG9uZW50cy9uYXYtaXRlbXMvY3VycmVudC11c2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBRWxCLDBCQUEwQixFQUMxQixtQkFBbUIsR0FDcEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFZLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFtQixNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBR25FLE1BSWEsb0JBQW9CO0lBTS9CLElBQUksV0FBVztRQUNiLE9BQU8sTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQ3NELHVCQUFtQyxFQUN2RSxRQUF5QixFQUNqQyxXQUF3QixFQUN4QixXQUErQixFQUMvQixZQUFpQztRQUpXLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBWTtRQUN2RSxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBZDNDLGlCQUFZLEdBQStCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25GLG9CQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVqRCxjQUFTLEdBQThCLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQVkvRCxDQUFDO0lBRUosZUFBZTtRQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7OEdBeEJVLG9CQUFvQixrQkFXckIsMEJBQTBCO2tHQVh6QixvQkFBb0Isd0RDZmpDLDZ5RUFpRUE7O1NEbERhLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjs7MEJBY3pCLE1BQU07MkJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBdXRoU2VydmljZSxcclxuICBDb25maWdTdGF0ZVNlcnZpY2UsXHJcbiAgQ3VycmVudFVzZXJEdG8sXHJcbiAgTkFWSUdBVEVfVE9fTUFOQUdFX1BST0ZJTEUsXHJcbiAgU2Vzc2lvblN0YXRlU2VydmljZSxcclxufSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBVc2VyTWVudSwgVXNlck1lbnVTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgVHJhY2tCeUZ1bmN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWJwLWN1cnJlbnQtdXNlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1cnJlbnQtdXNlci5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXJyZW50VXNlckNvbXBvbmVudCB7XHJcbiAgY3VycmVudFVzZXIkOiBPYnNlcnZhYmxlPEN1cnJlbnRVc2VyRHRvPiA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lJCgnY3VycmVudFVzZXInKTtcclxuICBzZWxlY3RlZFRlbmFudCQgPSB0aGlzLnNlc3Npb25TdGF0ZS5nZXRUZW5hbnQkKCk7XHJcblxyXG4gIHRyYWNrQnlGbjogVHJhY2tCeUZ1bmN0aW9uPFVzZXJNZW51PiA9IChfLCBlbGVtZW50KSA9PiBlbGVtZW50LmlkO1xyXG5cclxuICBnZXQgc21hbGxTY3JlZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA5OTI7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTkFWSUdBVEVfVE9fTUFOQUdFX1BST0ZJTEUpIHB1YmxpYyByZWFkb25seSBuYXZpZ2F0ZVRvTWFuYWdlUHJvZmlsZTogKCkgPT4gdm9pZCxcclxuICAgIHB1YmxpYyByZWFkb25seSB1c2VyTWVudTogVXNlck1lbnVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlc3Npb25TdGF0ZTogU2Vzc2lvblN0YXRlU2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG5hdmlnYXRlVG9Mb2dpbigpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubmF2aWdhdGVUb0xvZ2luKCk7XHJcbiAgfVxyXG5cclxuICBsb2dvdXQoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCgpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctdGVtcGxhdGUgI2xvZ2luQnRuPlxyXG4gIDxhIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cIm5hdi1saW5rIHBvaW50ZXJcIiAoY2xpY2spPVwibmF2aWdhdGVUb0xvZ2luKClcIj57e1xyXG4gICAgJ0FicEFjY291bnQ6OkxvZ2luJyB8IGFicExvY2FsaXphdGlvblxyXG4gIH19PC9hPlxyXG48L25nLXRlbXBsYXRlPlxyXG48ZGl2XHJcbiAgKm5nSWY9XCIoY3VycmVudFVzZXIkIHwgYXN5bmMpPy5pc0F1dGhlbnRpY2F0ZWQ7IGVsc2UgbG9naW5CdG5cIlxyXG4gIG5nYkRyb3Bkb3duXHJcbiAgY2xhc3M9XCJkcm9wZG93blwiXHJcbiAgI2N1cnJlbnRVc2VyRHJvcGRvd249XCJuZ2JEcm9wZG93blwiXHJcbiAgZGlzcGxheT1cInN0YXRpY1wiXHJcbj5cclxuICA8YVxyXG4gICAgbmdiRHJvcGRvd25Ub2dnbGVcclxuICAgIGNsYXNzPVwibmF2LWxpbmtcIlxyXG4gICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXHJcbiAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgIGlkPVwiZHJvcGRvd25NZW51TGlua1wiXHJcbiAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcclxuICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcclxuICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXHJcbiAgPlxyXG4gICAgPHNtYWxsICpuZ0lmPVwiKHNlbGVjdGVkVGVuYW50JCB8IGFzeW5jKT8ubmFtZSBhcyB0ZW5hbnROYW1lXCJcclxuICAgICAgPjxpPnt7IHRlbmFudE5hbWUgfX08L2lcclxuICAgICAgPlxcPC9zbWFsbFxyXG4gICAgPlxyXG4gICAgPHN0cm9uZz57eyAoY3VycmVudFVzZXIkIHwgYXN5bmMpPy51c2VyTmFtZSB9fTwvc3Ryb25nPlxyXG4gIDwvYT5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1lbmQgYm9yZGVyLTAgc2hhZG93LXNtXCJcclxuICAgIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudUxpbmtcIlxyXG4gICAgW2NsYXNzLmQtYmxvY2tdPVwic21hbGxTY3JlZW4gJiYgY3VycmVudFVzZXJEcm9wZG93bi5pc09wZW4oKVwiXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB1c2VyTWVudS5pdGVtcyQgfCBhc3luYzsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKmFicFZpc2libGU9XCIhaXRlbS52aXNpYmxlIHx8IGl0ZW0udmlzaWJsZShpdGVtKVwiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqYWJwUGVybWlzc2lvbj1cIml0ZW0ucmVxdWlyZWRQb2xpY3lcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNvbXBvbmVudDsgZWxzZSBodG1sVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiaXRlbS5jb21wb25lbnRcIlxyXG4gICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcl09XCJpdGVtIHwgdG9JbmplY3RvclwiXHJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNodG1sVGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uaHRtbDsgZWxzZSB0ZXh0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaXRlbS5odG1sXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbS5hY3Rpb24gPyBpdGVtLmFjdGlvbigpIDogbnVsbFwiXHJcbiAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0VGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnRleHRUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIml0ZW0uYWN0aW9uID8gaXRlbS5hY3Rpb24oKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwb2ludGVyXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXRlbS50ZXh0VGVtcGxhdGUuaWNvblwiIGNsYXNzPVwibWUtMSB7eyBpdGVtLnRleHRUZW1wbGF0ZS5pY29uIH19XCI+PC9pPlxyXG4gICAgICAgICAgICAgIHt7IGl0ZW0udGV4dFRlbXBsYXRlLnRleHQgfCBhYnBMb2NhbGl6YXRpb24gfX08L2FcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|