@memberjunction/ng-explorer-settings 3.3.0 → 3.4.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.
- package/dist/lib/account-info/account-info.component.d.ts +23 -0
- package/dist/lib/account-info/account-info.component.d.ts.map +1 -0
- package/dist/lib/account-info/account-info.component.js +155 -0
- package/dist/lib/account-info/account-info.component.js.map +1 -0
- package/dist/lib/appearance-settings/appearance-settings.component.d.ts +15 -0
- package/dist/lib/appearance-settings/appearance-settings.component.d.ts.map +1 -0
- package/dist/lib/appearance-settings/appearance-settings.component.js +79 -0
- package/dist/lib/appearance-settings/appearance-settings.component.js.map +1 -0
- package/dist/lib/application-settings/application-settings.component.d.ts +113 -0
- package/dist/lib/application-settings/application-settings.component.d.ts.map +1 -0
- package/dist/lib/application-settings/application-settings.component.js +520 -0
- package/dist/lib/application-settings/application-settings.component.js.map +1 -0
- package/dist/lib/general-settings/general-settings.component.d.ts +14 -0
- package/dist/lib/general-settings/general-settings.component.d.ts.map +1 -0
- package/dist/lib/general-settings/general-settings.component.js +50 -0
- package/dist/lib/general-settings/general-settings.component.js.map +1 -0
- package/dist/lib/module.d.ts +31 -28
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/module.js +64 -33
- package/dist/lib/module.js.map +1 -1
- package/dist/lib/settings/settings.component.d.ts +5 -14
- package/dist/lib/settings/settings.component.d.ts.map +1 -1
- package/dist/lib/settings/settings.component.js +141 -417
- package/dist/lib/settings/settings.component.js.map +1 -1
- package/dist/lib/sql-logging/sql-logging.component.d.ts +1 -1
- package/package.json +19 -20
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { OnInit, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { UserEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Displays read-only account information for the current user.
|
|
6
|
+
* Shows name, email, role, creation date, and last login.
|
|
7
|
+
*/
|
|
8
|
+
export declare class AccountInfoComponent implements OnInit {
|
|
9
|
+
private cdr;
|
|
10
|
+
IsLoading: boolean;
|
|
11
|
+
CurrentUser: UserEntity | null;
|
|
12
|
+
ErrorMessage: string;
|
|
13
|
+
constructor(cdr: ChangeDetectorRef);
|
|
14
|
+
ngOnInit(): Promise<void>;
|
|
15
|
+
private LoadAccountInfo;
|
|
16
|
+
/**
|
|
17
|
+
* Formats a date for display
|
|
18
|
+
*/
|
|
19
|
+
FormatDate(date: Date | null | undefined): string;
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AccountInfoComponent, never>;
|
|
21
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AccountInfoComponent, "mj-account-info", never, {}, {}, never, never, false, never>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=account-info.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-info.component.d.ts","sourceRoot":"","sources":["../../../src/lib/account-info/account-info.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;;AAE3D;;;GAGG;AACH,qBAKa,oBAAqB,YAAW,MAAM;IAKrC,OAAO,CAAC,GAAG;IAJvB,SAAS,UAAQ;IACjB,WAAW,EAAE,UAAU,GAAG,IAAI,CAAQ;IACtC,YAAY,SAAM;gBAEE,GAAG,EAAE,iBAAiB;IAEpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAIjB,eAAe;IA0B7B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM;yCAxCtC,oBAAoB;2CAApB,oBAAoB;CAiDhC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { Metadata } from '@memberjunction/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@memberjunction/ng-shared-generic";
|
|
5
|
+
function AccountInfoComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
6
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
7
|
+
i0.ɵɵelement(1, "mj-loading", 3);
|
|
8
|
+
i0.ɵɵelementEnd();
|
|
9
|
+
} }
|
|
10
|
+
function AccountInfoComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
11
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
12
|
+
i0.ɵɵelement(1, "i", 4);
|
|
13
|
+
i0.ɵɵelementStart(2, "span");
|
|
14
|
+
i0.ɵɵtext(3);
|
|
15
|
+
i0.ɵɵelementEnd()();
|
|
16
|
+
} if (rf & 2) {
|
|
17
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
18
|
+
i0.ɵɵadvance(3);
|
|
19
|
+
i0.ɵɵtextInterpolate(ctx_r0.ErrorMessage);
|
|
20
|
+
} }
|
|
21
|
+
function AccountInfoComponent_Conditional_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
+
i0.ɵɵelementStart(0, "div", 5)(1, "div", 6);
|
|
23
|
+
i0.ɵɵelement(2, "i", 13);
|
|
24
|
+
i0.ɵɵelementStart(3, "span");
|
|
25
|
+
i0.ɵɵtext(4, "Status");
|
|
26
|
+
i0.ɵɵelementEnd()();
|
|
27
|
+
i0.ɵɵelementStart(5, "div", 8)(6, "span", 14);
|
|
28
|
+
i0.ɵɵtext(7);
|
|
29
|
+
i0.ɵɵelementEnd()()();
|
|
30
|
+
} if (rf & 2) {
|
|
31
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
32
|
+
i0.ɵɵadvance(6);
|
|
33
|
+
i0.ɵɵclassProp("active", ctx_r0.CurrentUser.IsActive)("inactive", !ctx_r0.CurrentUser.IsActive);
|
|
34
|
+
i0.ɵɵadvance();
|
|
35
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.CurrentUser.IsActive ? "Active" : "Inactive", " ");
|
|
36
|
+
} }
|
|
37
|
+
function AccountInfoComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "div", 5)(2, "div", 6);
|
|
39
|
+
i0.ɵɵelement(3, "i", 7);
|
|
40
|
+
i0.ɵɵelementStart(4, "span");
|
|
41
|
+
i0.ɵɵtext(5, "Full Name");
|
|
42
|
+
i0.ɵɵelementEnd()();
|
|
43
|
+
i0.ɵɵelementStart(6, "div", 8);
|
|
44
|
+
i0.ɵɵtext(7);
|
|
45
|
+
i0.ɵɵelementEnd()();
|
|
46
|
+
i0.ɵɵelementStart(8, "div", 5)(9, "div", 6);
|
|
47
|
+
i0.ɵɵelement(10, "i", 9);
|
|
48
|
+
i0.ɵɵelementStart(11, "span");
|
|
49
|
+
i0.ɵɵtext(12, "Email");
|
|
50
|
+
i0.ɵɵelementEnd()();
|
|
51
|
+
i0.ɵɵelementStart(13, "div", 8);
|
|
52
|
+
i0.ɵɵtext(14);
|
|
53
|
+
i0.ɵɵelementEnd()();
|
|
54
|
+
i0.ɵɵelementStart(15, "div", 5)(16, "div", 6);
|
|
55
|
+
i0.ɵɵelement(17, "i", 10);
|
|
56
|
+
i0.ɵɵelementStart(18, "span");
|
|
57
|
+
i0.ɵɵtext(19, "Account Type");
|
|
58
|
+
i0.ɵɵelementEnd()();
|
|
59
|
+
i0.ɵɵelementStart(20, "div", 8)(21, "span", 11);
|
|
60
|
+
i0.ɵɵtext(22);
|
|
61
|
+
i0.ɵɵelementEnd()()();
|
|
62
|
+
i0.ɵɵelementStart(23, "div", 5)(24, "div", 6);
|
|
63
|
+
i0.ɵɵelement(25, "i", 12);
|
|
64
|
+
i0.ɵɵelementStart(26, "span");
|
|
65
|
+
i0.ɵɵtext(27, "Account Created");
|
|
66
|
+
i0.ɵɵelementEnd()();
|
|
67
|
+
i0.ɵɵelementStart(28, "div", 8);
|
|
68
|
+
i0.ɵɵtext(29);
|
|
69
|
+
i0.ɵɵelementEnd()();
|
|
70
|
+
i0.ɵɵtemplate(30, AccountInfoComponent_Conditional_2_Conditional_30_Template, 8, 5, "div", 5);
|
|
71
|
+
i0.ɵɵelementEnd();
|
|
72
|
+
} if (rf & 2) {
|
|
73
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
74
|
+
i0.ɵɵadvance(7);
|
|
75
|
+
i0.ɵɵtextInterpolate(ctx_r0.CurrentUser.Name || "Not set");
|
|
76
|
+
i0.ɵɵadvance(7);
|
|
77
|
+
i0.ɵɵtextInterpolate(ctx_r0.CurrentUser.Email || "Not set");
|
|
78
|
+
i0.ɵɵadvance(7);
|
|
79
|
+
i0.ɵɵclassMap("type-" + (ctx_r0.CurrentUser.Type || "user").toLowerCase());
|
|
80
|
+
i0.ɵɵadvance();
|
|
81
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.CurrentUser.Type || "User", " ");
|
|
82
|
+
i0.ɵɵadvance(7);
|
|
83
|
+
i0.ɵɵtextInterpolate(ctx_r0.FormatDate(ctx_r0.CurrentUser.__mj_CreatedAt));
|
|
84
|
+
i0.ɵɵadvance();
|
|
85
|
+
i0.ɵɵconditional(ctx_r0.CurrentUser.IsActive !== undefined ? 30 : -1);
|
|
86
|
+
} }
|
|
87
|
+
/**
|
|
88
|
+
* Displays read-only account information for the current user.
|
|
89
|
+
* Shows name, email, role, creation date, and last login.
|
|
90
|
+
*/
|
|
91
|
+
export class AccountInfoComponent {
|
|
92
|
+
cdr;
|
|
93
|
+
IsLoading = true;
|
|
94
|
+
CurrentUser = null;
|
|
95
|
+
ErrorMessage = '';
|
|
96
|
+
constructor(cdr) {
|
|
97
|
+
this.cdr = cdr;
|
|
98
|
+
}
|
|
99
|
+
async ngOnInit() {
|
|
100
|
+
await this.LoadAccountInfo();
|
|
101
|
+
}
|
|
102
|
+
async LoadAccountInfo() {
|
|
103
|
+
this.IsLoading = true;
|
|
104
|
+
this.ErrorMessage = '';
|
|
105
|
+
try {
|
|
106
|
+
const md = new Metadata();
|
|
107
|
+
const userInfo = md.CurrentUser;
|
|
108
|
+
// Load full user entity for additional details
|
|
109
|
+
const user = await md.GetEntityObject('Users');
|
|
110
|
+
const loaded = await user.Load(userInfo.ID);
|
|
111
|
+
if (loaded) {
|
|
112
|
+
this.CurrentUser = user;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
this.ErrorMessage = 'Unable to load account information.';
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
this.ErrorMessage = 'Failed to load account information.';
|
|
120
|
+
console.error('Error loading account info:', error);
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
this.IsLoading = false;
|
|
124
|
+
this.cdr.detectChanges();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Formats a date for display
|
|
129
|
+
*/
|
|
130
|
+
FormatDate(date) {
|
|
131
|
+
if (!date)
|
|
132
|
+
return 'N/A';
|
|
133
|
+
return new Date(date).toLocaleDateString('en-US', {
|
|
134
|
+
year: 'numeric',
|
|
135
|
+
month: 'long',
|
|
136
|
+
day: 'numeric'
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
static ɵfac = function AccountInfoComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AccountInfoComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
140
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AccountInfoComponent, selectors: [["mj-account-info"]], decls: 3, vars: 3, consts: [[1, "loading-container"], [1, "error-message"], [1, "account-info"], ["text", "Loading account info..."], [1, "fa-solid", "fa-exclamation-circle"], [1, "info-row"], [1, "info-label"], [1, "fa-solid", "fa-user"], [1, "info-value"], [1, "fa-solid", "fa-envelope"], [1, "fa-solid", "fa-shield-halved"], [1, "type-badge"], [1, "fa-solid", "fa-calendar-plus"], [1, "fa-solid", "fa-circle-check"], [1, "status-badge"]], template: function AccountInfoComponent_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵtemplate(0, AccountInfoComponent_Conditional_0_Template, 2, 0, "div", 0)(1, AccountInfoComponent_Conditional_1_Template, 4, 1, "div", 1)(2, AccountInfoComponent_Conditional_2_Template, 31, 7, "div", 2);
|
|
142
|
+
} if (rf & 2) {
|
|
143
|
+
i0.ɵɵconditional(ctx.IsLoading ? 0 : -1);
|
|
144
|
+
i0.ɵɵadvance();
|
|
145
|
+
i0.ɵɵconditional(ctx.ErrorMessage && !ctx.IsLoading ? 1 : -1);
|
|
146
|
+
i0.ɵɵadvance();
|
|
147
|
+
i0.ɵɵconditional(ctx.CurrentUser && !ctx.IsLoading ? 2 : -1);
|
|
148
|
+
} }, dependencies: [i1.LoadingComponent], styles: [".loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 2rem;\n}\n\n.error-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 1rem;\n background-color: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n border-radius: 8px;\n font-size: 0.875rem;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1rem;\n}\n\n.account-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.info-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 0;\n border-bottom: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.info-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.info-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n color: var(--mj-text-secondary, #6b7280);\n font-size: 0.875rem;\n}\n\n.info-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 1rem;\n text-align: center;\n color: var(--mj-text-tertiary, #9ca3af);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary, #1f2937);\n text-align: right;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.25rem 0.75rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.type-owner[_ngcontent-%COMP%] {\n background-color: var(--mj-warning-bg, #fef3c7);\n color: var(--mj-warning-text, #d97706);\n}\n\n.type-admin[_ngcontent-%COMP%] {\n background-color: var(--mj-info-bg, #dbeafe);\n color: var(--mj-info-text, #2563eb);\n}\n\n.type-user[_ngcontent-%COMP%] {\n background-color: var(--mj-neutral-bg, #f3f4f6);\n color: var(--mj-neutral-text, #4b5563);\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.25rem 0.75rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background-color: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background-color: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n@media (max-width: 480px) {\n .info-row[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.5rem;\n }\n\n .info-value[_ngcontent-%COMP%] {\n text-align: left;\n padding-left: 1.75rem;\n }\n}"] });
|
|
149
|
+
}
|
|
150
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AccountInfoComponent, [{
|
|
151
|
+
type: Component,
|
|
152
|
+
args: [{ selector: 'mj-account-info', template: "@if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading account info...\"></mj-loading>\n </div>\n}\n\n@if (ErrorMessage && !IsLoading) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n}\n\n@if (CurrentUser && !IsLoading) {\n <div class=\"account-info\">\n <div class=\"info-row\">\n <div class=\"info-label\">\n <i class=\"fa-solid fa-user\"></i>\n <span>Full Name</span>\n </div>\n <div class=\"info-value\">{{ CurrentUser.Name || 'Not set' }}</div>\n </div>\n\n <div class=\"info-row\">\n <div class=\"info-label\">\n <i class=\"fa-solid fa-envelope\"></i>\n <span>Email</span>\n </div>\n <div class=\"info-value\">{{ CurrentUser.Email || 'Not set' }}</div>\n </div>\n\n <div class=\"info-row\">\n <div class=\"info-label\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span>Account Type</span>\n </div>\n <div class=\"info-value\">\n <span class=\"type-badge\" [class]=\"'type-' + (CurrentUser.Type || 'user').toLowerCase()\">\n {{ CurrentUser.Type || 'User' }}\n </span>\n </div>\n </div>\n\n <div class=\"info-row\">\n <div class=\"info-label\">\n <i class=\"fa-solid fa-calendar-plus\"></i>\n <span>Account Created</span>\n </div>\n <div class=\"info-value\">{{ FormatDate(CurrentUser.__mj_CreatedAt) }}</div>\n </div>\n\n @if (CurrentUser.IsActive !== undefined) {\n <div class=\"info-row\">\n <div class=\"info-label\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>Status</span>\n </div>\n <div class=\"info-value\">\n <span class=\"status-badge\" [class.active]=\"CurrentUser.IsActive\" [class.inactive]=\"!CurrentUser.IsActive\">\n {{ CurrentUser.IsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n }\n </div>\n}\n", styles: [".loading-container {\n display: flex;\n justify-content: center;\n padding: 2rem;\n}\n\n.error-message {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 1rem;\n background-color: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n border-radius: 8px;\n font-size: 0.875rem;\n}\n\n.error-message i {\n font-size: 1rem;\n}\n\n.account-info {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.info-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 0;\n border-bottom: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.info-row:last-child {\n border-bottom: none;\n}\n\n.info-label {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n color: var(--mj-text-secondary, #6b7280);\n font-size: 0.875rem;\n}\n\n.info-label i {\n width: 1rem;\n text-align: center;\n color: var(--mj-text-tertiary, #9ca3af);\n}\n\n.info-value {\n font-weight: 500;\n color: var(--mj-text-primary, #1f2937);\n text-align: right;\n}\n\n.type-badge {\n display: inline-block;\n padding: 0.25rem 0.75rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.type-owner {\n background-color: var(--mj-warning-bg, #fef3c7);\n color: var(--mj-warning-text, #d97706);\n}\n\n.type-admin {\n background-color: var(--mj-info-bg, #dbeafe);\n color: var(--mj-info-text, #2563eb);\n}\n\n.type-user {\n background-color: var(--mj-neutral-bg, #f3f4f6);\n color: var(--mj-neutral-text, #4b5563);\n}\n\n.status-badge {\n display: inline-block;\n padding: 0.25rem 0.75rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n}\n\n.status-badge.active {\n background-color: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.status-badge.inactive {\n background-color: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n@media (max-width: 480px) {\n .info-row {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.5rem;\n }\n\n .info-value {\n text-align: left;\n padding-left: 1.75rem;\n }\n}\n"] }]
|
|
153
|
+
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
154
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AccountInfoComponent, { className: "AccountInfoComponent", filePath: "src/lib/account-info/account-info.component.ts", lineNumber: 14 }); })();
|
|
155
|
+
//# sourceMappingURL=account-info.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-info.component.js","sourceRoot":"","sources":["../../../src/lib/account-info/account-info.component.ts","../../../src/lib/account-info/account-info.component.html"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Placeholder component for future appearance settings.
|
|
4
|
+
* Will include: theme selection, display density, font size.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AppearanceSettingsComponent {
|
|
7
|
+
PlannedFeatures: {
|
|
8
|
+
icon: string;
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
}[];
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AppearanceSettingsComponent, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppearanceSettingsComponent, "mj-appearance-settings", never, {}, {}, never, never, false, never>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=appearance-settings.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appearance-settings.component.d.ts","sourceRoot":"","sources":["../../../src/lib/appearance-settings/appearance-settings.component.ts"],"names":[],"mappings":";AAEA;;;GAGG;AACH,qBAKa,2BAA2B;IAEtC,eAAe;;;;QAgBb;yCAlBS,2BAA2B;2CAA3B,2BAA2B;CAmBvC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
const _forTrack0 = ($index, $item) => $item.title;
|
|
4
|
+
function AppearanceSettingsComponent_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
5
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "div", 11);
|
|
6
|
+
i0.ɵɵelement(2, "i");
|
|
7
|
+
i0.ɵɵelementEnd();
|
|
8
|
+
i0.ɵɵelementStart(3, "div", 12)(4, "span", 13);
|
|
9
|
+
i0.ɵɵtext(5);
|
|
10
|
+
i0.ɵɵelementEnd();
|
|
11
|
+
i0.ɵɵelementStart(6, "span", 14);
|
|
12
|
+
i0.ɵɵtext(7);
|
|
13
|
+
i0.ɵɵelementEnd()()();
|
|
14
|
+
} if (rf & 2) {
|
|
15
|
+
const feature_r1 = ctx.$implicit;
|
|
16
|
+
i0.ɵɵadvance(2);
|
|
17
|
+
i0.ɵɵclassMap(feature_r1.icon);
|
|
18
|
+
i0.ɵɵadvance(3);
|
|
19
|
+
i0.ɵɵtextInterpolate(feature_r1.title);
|
|
20
|
+
i0.ɵɵadvance(2);
|
|
21
|
+
i0.ɵɵtextInterpolate(feature_r1.description);
|
|
22
|
+
} }
|
|
23
|
+
/**
|
|
24
|
+
* Placeholder component for future appearance settings.
|
|
25
|
+
* Will include: theme selection, display density, font size.
|
|
26
|
+
*/
|
|
27
|
+
export class AppearanceSettingsComponent {
|
|
28
|
+
// Future planned features
|
|
29
|
+
PlannedFeatures = [
|
|
30
|
+
{
|
|
31
|
+
icon: 'fa-solid fa-moon',
|
|
32
|
+
title: 'Theme',
|
|
33
|
+
description: 'Switch between light, dark, or system theme'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
icon: 'fa-solid fa-text-height',
|
|
37
|
+
title: 'Font Size',
|
|
38
|
+
description: 'Adjust text size for better readability'
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
icon: 'fa-solid fa-expand',
|
|
42
|
+
title: 'Display Density',
|
|
43
|
+
description: 'Choose between comfortable and compact layouts'
|
|
44
|
+
}
|
|
45
|
+
];
|
|
46
|
+
static ɵfac = function AppearanceSettingsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AppearanceSettingsComponent)(); };
|
|
47
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppearanceSettingsComponent, selectors: [["mj-appearance-settings"]], decls: 19, vars: 0, consts: [[1, "appearance-settings"], [1, "section-title"], [1, "section-description"], [1, "coming-soon-banner"], [1, "banner-icon"], [1, "fa-solid", "fa-palette"], [1, "banner-content"], [1, "planned-features"], [1, "features-title"], [1, "features-grid"], [1, "feature-card"], [1, "feature-icon"], [1, "feature-info"], [1, "feature-title"], [1, "feature-desc"]], template: function AppearanceSettingsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "h2", 1);
|
|
49
|
+
i0.ɵɵtext(2, "Appearance");
|
|
50
|
+
i0.ɵɵelementEnd();
|
|
51
|
+
i0.ɵɵelementStart(3, "p", 2);
|
|
52
|
+
i0.ɵɵtext(4, "Customize how MemberJunction looks and feels");
|
|
53
|
+
i0.ɵɵelementEnd();
|
|
54
|
+
i0.ɵɵelementStart(5, "div", 3)(6, "div", 4);
|
|
55
|
+
i0.ɵɵelement(7, "i", 5);
|
|
56
|
+
i0.ɵɵelementEnd();
|
|
57
|
+
i0.ɵɵelementStart(8, "div", 6)(9, "h3");
|
|
58
|
+
i0.ɵɵtext(10, "Coming Soon");
|
|
59
|
+
i0.ɵɵelementEnd();
|
|
60
|
+
i0.ɵɵelementStart(11, "p");
|
|
61
|
+
i0.ɵɵtext(12, "We're working on bringing you more customization options.");
|
|
62
|
+
i0.ɵɵelementEnd()()();
|
|
63
|
+
i0.ɵɵelementStart(13, "div", 7)(14, "h4", 8);
|
|
64
|
+
i0.ɵɵtext(15, "Planned Features");
|
|
65
|
+
i0.ɵɵelementEnd();
|
|
66
|
+
i0.ɵɵelementStart(16, "div", 9);
|
|
67
|
+
i0.ɵɵrepeaterCreate(17, AppearanceSettingsComponent_For_18_Template, 8, 4, "div", 10, _forTrack0);
|
|
68
|
+
i0.ɵɵelementEnd()()();
|
|
69
|
+
} if (rf & 2) {
|
|
70
|
+
i0.ɵɵadvance(17);
|
|
71
|
+
i0.ɵɵrepeater(ctx.PlannedFeatures);
|
|
72
|
+
} }, styles: [".appearance-settings[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n.section-title[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary, #1a1a1a);\n}\n\n.section-description[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #666);\n margin: 0 0 1.5rem 0;\n}\n\n.coming-soon-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n padding: 2rem;\n background: linear-gradient(135deg, var(--mj-primary-light, #dbeafe) 0%, var(--mj-info-bg, #e0f2fe) 100%);\n border-radius: 16px;\n margin-bottom: 2rem;\n}\n\n.banner-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 4rem;\n height: 4rem;\n background: white;\n border-radius: 12px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n flex-shrink: 0;\n}\n\n.banner-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n color: var(--mj-primary-color, #3b82f6);\n}\n\n.banner-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--mj-text-primary, #1f2937);\n margin: 0 0 0.5rem 0;\n}\n\n.banner-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #4b5563);\n margin: 0;\n}\n\n.planned-features[_ngcontent-%COMP%] {\n margin-top: 1rem;\n}\n\n.features-title[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-secondary, #6b7280);\n margin: 0 0 1rem 0;\n}\n\n.features-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n\n.feature-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem 1.25rem;\n background: var(--mj-surface-color, #fff);\n border: 1px solid var(--mj-border-color, #e5e7eb);\n border-radius: 12px;\n opacity: 0.7;\n}\n\n.feature-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n background: var(--mj-surface-secondary, #f3f4f6);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.feature-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: var(--mj-text-secondary, #6b7280);\n}\n\n.feature-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.feature-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary, #1f2937);\n}\n\n.feature-desc[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #6b7280);\n}\n\n@media (max-width: 480px) {\n .coming-soon-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n}"] });
|
|
73
|
+
}
|
|
74
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppearanceSettingsComponent, [{
|
|
75
|
+
type: Component,
|
|
76
|
+
args: [{ selector: 'mj-appearance-settings', template: "<div class=\"appearance-settings\">\n <h2 class=\"section-title\">Appearance</h2>\n <p class=\"section-description\">Customize how MemberJunction looks and feels</p>\n\n <div class=\"coming-soon-banner\">\n <div class=\"banner-icon\">\n <i class=\"fa-solid fa-palette\"></i>\n </div>\n <div class=\"banner-content\">\n <h3>Coming Soon</h3>\n <p>We're working on bringing you more customization options.</p>\n </div>\n </div>\n\n <div class=\"planned-features\">\n <h4 class=\"features-title\">Planned Features</h4>\n <div class=\"features-grid\">\n @for (feature of PlannedFeatures; track feature.title) {\n <div class=\"feature-card\">\n <div class=\"feature-icon\">\n <i [class]=\"feature.icon\"></i>\n </div>\n <div class=\"feature-info\">\n <span class=\"feature-title\">{{ feature.title }}</span>\n <span class=\"feature-desc\">{{ feature.description }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [".appearance-settings {\n padding: 0;\n}\n\n.section-title {\n font-size: 1.5rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary, #1a1a1a);\n}\n\n.section-description {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #666);\n margin: 0 0 1.5rem 0;\n}\n\n.coming-soon-banner {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n padding: 2rem;\n background: linear-gradient(135deg, var(--mj-primary-light, #dbeafe) 0%, var(--mj-info-bg, #e0f2fe) 100%);\n border-radius: 16px;\n margin-bottom: 2rem;\n}\n\n.banner-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 4rem;\n height: 4rem;\n background: white;\n border-radius: 12px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n flex-shrink: 0;\n}\n\n.banner-icon i {\n font-size: 2rem;\n color: var(--mj-primary-color, #3b82f6);\n}\n\n.banner-content h3 {\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--mj-text-primary, #1f2937);\n margin: 0 0 0.5rem 0;\n}\n\n.banner-content p {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #4b5563);\n margin: 0;\n}\n\n.planned-features {\n margin-top: 1rem;\n}\n\n.features-title {\n font-size: 0.875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-secondary, #6b7280);\n margin: 0 0 1rem 0;\n}\n\n.features-grid {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n\n.feature-card {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem 1.25rem;\n background: var(--mj-surface-color, #fff);\n border: 1px solid var(--mj-border-color, #e5e7eb);\n border-radius: 12px;\n opacity: 0.7;\n}\n\n.feature-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n background: var(--mj-surface-secondary, #f3f4f6);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.feature-icon i {\n font-size: 1rem;\n color: var(--mj-text-secondary, #6b7280);\n}\n\n.feature-info {\n display: flex;\n flex-direction: column;\n}\n\n.feature-title {\n font-weight: 500;\n color: var(--mj-text-primary, #1f2937);\n}\n\n.feature-desc {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #6b7280);\n}\n\n@media (max-width: 480px) {\n .coming-soon-banner {\n flex-direction: column;\n text-align: center;\n }\n}\n"] }]
|
|
77
|
+
}], null, null); })();
|
|
78
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AppearanceSettingsComponent, { className: "AppearanceSettingsComponent", filePath: "src/lib/appearance-settings/appearance-settings.component.ts", lineNumber: 12 }); })();
|
|
79
|
+
//# sourceMappingURL=appearance-settings.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appearance-settings.component.js","sourceRoot":"","sources":["../../../src/lib/appearance-settings/appearance-settings.component.ts","../../../src/lib/appearance-settings/appearance-settings.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;;;;ICmBhC,AADF,+BAA0B,cACE;IACxB,oBAA8B;IAChC,iBAAM;IAEJ,AADF,+BAA0B,eACI;IAAA,YAAmB;IAAA,iBAAO;IACtD,gCAA2B;IAAA,YAAyB;IAExD,AADE,AADsD,iBAAO,EACvD,EACF;;;IANC,eAAsB;IAAtB,8BAAsB;IAGG,eAAmB;IAAnB,sCAAmB;IACpB,eAAyB;IAAzB,4CAAyB;;ADtBhE;;;GAGG;AAMH,MAAM,OAAO,2BAA2B;IACtC,0BAA0B;IAC1B,eAAe,GAAG;QAChB;YACE,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,6CAA6C;SAC3D;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,yCAAyC;SACvD;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,gDAAgD;SAC9D;KACF,CAAC;qHAlBS,2BAA2B;6DAA3B,2BAA2B;YCVtC,AADF,8BAAiC,YACL;YAAA,0BAAU;YAAA,iBAAK;YACzC,4BAA+B;YAAA,4DAA4C;YAAA,iBAAI;YAG7E,AADF,8BAAgC,aACL;YACvB,uBAAmC;YACrC,iBAAM;YAEJ,AADF,8BAA4B,SACtB;YAAA,4BAAW;YAAA,iBAAK;YACpB,0BAAG;YAAA,0EAAyD;YAEhE,AADE,AAD8D,iBAAI,EAC5D,EACF;YAGJ,AADF,+BAA8B,aACD;YAAA,iCAAgB;YAAA,iBAAK;YAChD,+BAA2B;YACzB,iGAUC;YAGP,AADE,AADE,iBAAM,EACF,EACF;;YAbA,gBAUC;YAVD,kCAUC;;;iFDhBM,2BAA2B;cALvC,SAAS;2BACE,wBAAwB;;kFAIvB,2BAA2B"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { OnInit, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { ApplicationManager, BaseApplication } from '@memberjunction/ng-base-application';
|
|
3
|
+
import { SharedService } from '@memberjunction/ng-shared';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Represents an app item in the configuration UI
|
|
7
|
+
*/
|
|
8
|
+
interface AppConfigItem {
|
|
9
|
+
App: BaseApplication;
|
|
10
|
+
UserAppId: string | null;
|
|
11
|
+
Sequence: number;
|
|
12
|
+
IsActive: boolean;
|
|
13
|
+
IsDirty: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Inline component for configuring user's application visibility and order.
|
|
17
|
+
* Allows users to:
|
|
18
|
+
* - Select which applications to show in the app switcher
|
|
19
|
+
* - Reorder applications via drag-and-drop
|
|
20
|
+
*/
|
|
21
|
+
export declare class ApplicationSettingsComponent implements OnInit {
|
|
22
|
+
private appManager;
|
|
23
|
+
private sharedService;
|
|
24
|
+
private cdr;
|
|
25
|
+
AllApps: AppConfigItem[];
|
|
26
|
+
ActiveApps: AppConfigItem[];
|
|
27
|
+
AvailableApps: AppConfigItem[];
|
|
28
|
+
IsLoading: boolean;
|
|
29
|
+
IsSaving: boolean;
|
|
30
|
+
ErrorMessage: string;
|
|
31
|
+
SuccessMessage: string;
|
|
32
|
+
private draggedItem;
|
|
33
|
+
private draggedIndex;
|
|
34
|
+
private dropTargetIndex;
|
|
35
|
+
constructor(appManager: ApplicationManager, sharedService: SharedService, cdr: ChangeDetectorRef);
|
|
36
|
+
ngOnInit(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Loads the user's current app configuration
|
|
39
|
+
*/
|
|
40
|
+
LoadConfiguration(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Builds app config items by matching system apps with user's UserApplication records
|
|
43
|
+
*/
|
|
44
|
+
private BuildAppConfigItems;
|
|
45
|
+
/**
|
|
46
|
+
* Separates apps into active and available lists based on IsActive state
|
|
47
|
+
*/
|
|
48
|
+
private RefreshAppLists;
|
|
49
|
+
/**
|
|
50
|
+
* Native drag start handler
|
|
51
|
+
*/
|
|
52
|
+
OnDragStart(event: DragEvent, item: AppConfigItem, index: number): void;
|
|
53
|
+
/**
|
|
54
|
+
* Native drag over handler - allows drop
|
|
55
|
+
*/
|
|
56
|
+
OnDragOver(event: DragEvent): void;
|
|
57
|
+
/**
|
|
58
|
+
* Native drag enter handler - tracks drop target
|
|
59
|
+
*/
|
|
60
|
+
OnDragEnter(event: DragEvent, index: number): void;
|
|
61
|
+
/**
|
|
62
|
+
* Native drag end handler - cleanup
|
|
63
|
+
*/
|
|
64
|
+
OnDragEnd(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Native drop handler - reorder items
|
|
67
|
+
*/
|
|
68
|
+
OnDrop(event: DragEvent): void;
|
|
69
|
+
/**
|
|
70
|
+
* Adds an app to the user's active list
|
|
71
|
+
*/
|
|
72
|
+
AddApp(item: AppConfigItem): void;
|
|
73
|
+
/**
|
|
74
|
+
* Removes an app from the user's active list
|
|
75
|
+
*/
|
|
76
|
+
RemoveApp(item: AppConfigItem): void;
|
|
77
|
+
/**
|
|
78
|
+
* Moves an app up in the order
|
|
79
|
+
*/
|
|
80
|
+
MoveUp(item: AppConfigItem): void;
|
|
81
|
+
/**
|
|
82
|
+
* Moves an app down in the order
|
|
83
|
+
*/
|
|
84
|
+
MoveDown(item: AppConfigItem): void;
|
|
85
|
+
/**
|
|
86
|
+
* Checks if there are any unsaved changes
|
|
87
|
+
*/
|
|
88
|
+
HasChanges(): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Saves the user's app configuration
|
|
91
|
+
*/
|
|
92
|
+
Save(): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Updates an existing UserApplication record
|
|
95
|
+
*/
|
|
96
|
+
private UpdateUserApplication;
|
|
97
|
+
/**
|
|
98
|
+
* Creates a new UserApplication record
|
|
99
|
+
*/
|
|
100
|
+
private CreateUserApplication;
|
|
101
|
+
/**
|
|
102
|
+
* Resets all changes and reloads the configuration
|
|
103
|
+
*/
|
|
104
|
+
Reset(): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Check if drop target is active
|
|
107
|
+
*/
|
|
108
|
+
IsDropTarget(index: number): boolean;
|
|
109
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ApplicationSettingsComponent, never>;
|
|
110
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ApplicationSettingsComponent, "mj-application-settings", never, {}, {}, never, never, false, never>;
|
|
111
|
+
}
|
|
112
|
+
export {};
|
|
113
|
+
//# sourceMappingURL=application-settings.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-settings.component.d.ts","sourceRoot":"","sources":["../../../src/lib/application-settings/application-settings.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAE1D;;GAEG;AACH,UAAU,aAAa;IACrB,GAAG,EAAE,eAAe,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAKa,4BAA6B,YAAW,MAAM;IAqBvD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,GAAG;IArBb,OAAO,EAAE,aAAa,EAAE,CAAM;IAG9B,UAAU,EAAE,aAAa,EAAE,CAAM;IAGjC,aAAa,EAAE,aAAa,EAAE,CAAM;IAEpC,SAAS,UAAS;IAClB,QAAQ,UAAS;IACjB,YAAY,SAAM;IAClB,cAAc,SAAM;IAGpB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,eAAe,CAAM;gBAGnB,UAAU,EAAE,kBAAkB,EAC9B,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,iBAAiB;IAG1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCxC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAUvE;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOlC;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlD;;OAEG;IACH,SAAS,IAAI,IAAI;IAMjB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAyB9B;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAOjC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAepC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAkBjC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAkBnC;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C3B;;OAEG;YACW,qBAAqB;IAgBnC;;OAEG;YACW,qBAAqB;IAmBnC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;yCA3VzB,4BAA4B;2CAA5B,4BAA4B;CA8VxC"}
|