@memberjunction/ng-dashboards 6.2.0-edge.4 → 6.2.0-edge.5
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/AI/components/vectors/sensitive-fields.d.ts +53 -0
- package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -0
- package/dist/AI/components/vectors/sensitive-fields.js +226 -0
- package/dist/AI/components/vectors/sensitive-fields.js.map +1 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts +126 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-document-rules.js +168 -0
- package/dist/AI/components/vectors/vector-document-rules.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +49 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +428 -230
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Communication/communication-agent-context.d.ts +11 -1
- package/dist/Communication/communication-agent-context.d.ts.map +1 -1
- package/dist/Communication/communication-agent-context.js +15 -0
- package/dist/Communication/communication-agent-context.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +5 -0
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts +27 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +722 -78
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +25 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +74 -5
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +1 -0
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.d.ts.map +1 -1
- package/dist/DevTools/class-registry.component.js +1 -0
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.d.ts.map +1 -1
- package/dist/DevTools/event-monitor.component.js +2 -0
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/grid-width-lab.component.d.ts.map +1 -1
- package/dist/DevTools/grid-width-lab.component.js +1 -0
- package/dist/DevTools/grid-width-lab.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +1 -0
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +1 -0
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.d.ts.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +1 -0
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/DevTools/tab-strip-lab.component.d.ts.map +1 -1
- package/dist/DevTools/tab-strip-lab.component.js +1 -0
- package/dist/DevTools/tab-strip-lab.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +5 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +8 -5
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +2 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +2 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +24 -2
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +16 -2
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +87 -33
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
- package/dist/LoginStudio/login-studio-inspector.component.d.ts +130 -0
- package/dist/LoginStudio/login-studio-inspector.component.d.ts.map +1 -0
- package/dist/LoginStudio/login-studio-inspector.component.js +781 -0
- package/dist/LoginStudio/login-studio-inspector.component.js.map +1 -0
- package/dist/LoginStudio/login-studio-resource.component.d.ts +153 -0
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -0
- package/dist/LoginStudio/login-studio-resource.component.js +857 -0
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -0
- package/dist/Workflows/components/workflow-runs-resource.component.js +4 -4
- package/dist/Workflows/components/workflow-runs-resource.component.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +2 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +11 -3
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +72 -69
|
@@ -11,91 +11,122 @@ import { RunView, CompositeKey } from '@memberjunction/core';
|
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
import * as i1 from "@memberjunction/ng-shared";
|
|
13
13
|
import * as i2 from "@angular/common";
|
|
14
|
-
import * as i3 from "@
|
|
15
|
-
import * as i4 from "@memberjunction/ng-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
import * as i3 from "@angular/forms";
|
|
15
|
+
import * as i4 from "@memberjunction/ng-shared-generic";
|
|
16
|
+
import * as i5 from "@memberjunction/ng-ui-components";
|
|
17
|
+
const _forTrack0 = ($index, $item) => $item.Entity.ID;
|
|
18
|
+
const _forTrack1 = ($index, $item) => $item.ID;
|
|
19
|
+
const _forTrack2 = ($index, $item) => $item.Value;
|
|
20
|
+
function CommunicationProvidersResourceComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
+
i0.ɵɵelementStart(0, "div", 7);
|
|
22
|
+
i0.ɵɵelement(1, "mj-loading", 8);
|
|
19
23
|
i0.ɵɵelementEnd();
|
|
20
24
|
} }
|
|
21
|
-
function
|
|
22
|
-
i0.ɵɵelementStart(0, "span",
|
|
23
|
-
i0.ɵɵelement(1, "i",
|
|
25
|
+
function CommunicationProvidersResourceComponent_Conditional_13_For_11_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
27
|
+
i0.ɵɵelement(1, "i", 46);
|
|
24
28
|
i0.ɵɵtext(2, " Scheduled ");
|
|
25
29
|
i0.ɵɵelementEnd();
|
|
26
30
|
} }
|
|
27
|
-
function
|
|
28
|
-
i0.ɵɵelementStart(0, "span",
|
|
29
|
-
i0.ɵɵelement(1, "i",
|
|
31
|
+
function CommunicationProvidersResourceComponent_Conditional_13_For_11_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
33
|
+
i0.ɵɵelement(1, "i", 46);
|
|
30
34
|
i0.ɵɵtext(2, " Drafts ");
|
|
31
35
|
i0.ɵɵelementEnd();
|
|
32
36
|
} }
|
|
33
|
-
function
|
|
34
|
-
i0.ɵɵelementStart(0, "span",
|
|
35
|
-
i0.ɵɵelement(1, "i",
|
|
37
|
+
function CommunicationProvidersResourceComponent_Conditional_13_For_11_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
39
|
+
i0.ɵɵelement(1, "i", 46);
|
|
36
40
|
i0.ɵɵtext(2, " Forward ");
|
|
37
41
|
i0.ɵɵelementEnd();
|
|
38
42
|
} }
|
|
39
|
-
function
|
|
40
|
-
i0.ɵɵelementStart(0, "span",
|
|
41
|
-
i0.ɵɵelement(1, "i",
|
|
43
|
+
function CommunicationProvidersResourceComponent_Conditional_13_For_11_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
45
|
+
i0.ɵɵelement(1, "i", 46);
|
|
42
46
|
i0.ɵɵtext(2, " Reply ");
|
|
43
47
|
i0.ɵɵelementEnd();
|
|
44
48
|
} }
|
|
45
|
-
function
|
|
49
|
+
function CommunicationProvidersResourceComponent_Conditional_13_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
46
50
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
47
|
-
i0.ɵɵelementStart(0, "div",
|
|
51
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "div", 22);
|
|
48
52
|
i0.ɵɵelement(3, "i");
|
|
49
53
|
i0.ɵɵelementEnd();
|
|
50
|
-
i0.ɵɵelementStart(4, "div",
|
|
54
|
+
i0.ɵɵelementStart(4, "div", 23)(5, "div", 24);
|
|
51
55
|
i0.ɵɵtext(6);
|
|
52
56
|
i0.ɵɵelementEnd();
|
|
53
|
-
i0.ɵɵelementStart(7, "div",
|
|
57
|
+
i0.ɵɵelementStart(7, "div", 25);
|
|
54
58
|
i0.ɵɵtext(8);
|
|
55
59
|
i0.ɵɵelementEnd()();
|
|
56
|
-
i0.ɵɵelementStart(9, "span",
|
|
60
|
+
i0.ɵɵelementStart(9, "span", 26);
|
|
57
61
|
i0.ɵɵtext(10);
|
|
58
62
|
i0.ɵɵelementEnd()();
|
|
59
|
-
i0.ɵɵelementStart(11, "div",
|
|
63
|
+
i0.ɵɵelementStart(11, "div", 27)(12, "div", 28)(13, "span", 29);
|
|
60
64
|
i0.ɵɵelement(14, "i");
|
|
61
65
|
i0.ɵɵtext(15, " Sending ");
|
|
62
66
|
i0.ɵɵelementEnd();
|
|
63
|
-
i0.ɵɵelementStart(16, "span",
|
|
67
|
+
i0.ɵɵelementStart(16, "span", 29);
|
|
64
68
|
i0.ɵɵelement(17, "i");
|
|
65
69
|
i0.ɵɵtext(18, " Receiving ");
|
|
66
70
|
i0.ɵɵelementEnd();
|
|
67
|
-
i0.ɵɵ
|
|
68
|
-
i0.ɵɵ
|
|
69
|
-
i0.ɵɵ
|
|
70
|
-
i0.ɵɵconditionalCreate(22, CommunicationProvidersResourceComponent_Conditional_9_For_2_Conditional_22_Template, 3, 0, "span", 19);
|
|
71
|
+
i0.ɵɵelementStart(19, "span", 29);
|
|
72
|
+
i0.ɵɵelement(20, "i");
|
|
73
|
+
i0.ɵɵtext(21, " Calendar ");
|
|
71
74
|
i0.ɵɵelementEnd();
|
|
72
|
-
i0.ɵɵelementStart(
|
|
73
|
-
i0.ɵɵ
|
|
75
|
+
i0.ɵɵelementStart(22, "span", 29);
|
|
76
|
+
i0.ɵɵelement(23, "i");
|
|
77
|
+
i0.ɵɵtext(24, " Free/Busy ");
|
|
78
|
+
i0.ɵɵelementEnd();
|
|
79
|
+
i0.ɵɵconditionalCreate(25, CommunicationProvidersResourceComponent_Conditional_13_For_11_Conditional_25_Template, 3, 0, "span", 30);
|
|
80
|
+
i0.ɵɵconditionalCreate(26, CommunicationProvidersResourceComponent_Conditional_13_For_11_Conditional_26_Template, 3, 0, "span", 30);
|
|
81
|
+
i0.ɵɵconditionalCreate(27, CommunicationProvidersResourceComponent_Conditional_13_For_11_Conditional_27_Template, 3, 0, "span", 30);
|
|
82
|
+
i0.ɵɵconditionalCreate(28, CommunicationProvidersResourceComponent_Conditional_13_For_11_Conditional_28_Template, 3, 0, "span", 30);
|
|
83
|
+
i0.ɵɵelementEnd();
|
|
84
|
+
i0.ɵɵelementStart(29, "div", 31)(30, "div", 32)(31, "span", 33);
|
|
85
|
+
i0.ɵɵelement(32, "i", 34);
|
|
86
|
+
i0.ɵɵtext(33, " Mailbox Scope");
|
|
87
|
+
i0.ɵɵelementEnd();
|
|
88
|
+
i0.ɵɵelementStart(34, "span", 35);
|
|
89
|
+
i0.ɵɵtext(35);
|
|
90
|
+
i0.ɵɵelementEnd()();
|
|
91
|
+
i0.ɵɵelementStart(36, "div", 32)(37, "span", 33);
|
|
92
|
+
i0.ɵɵelement(38, "i", 36);
|
|
93
|
+
i0.ɵɵtext(39, " Allowed Domains");
|
|
94
|
+
i0.ɵɵelementEnd();
|
|
95
|
+
i0.ɵɵelementStart(40, "span", 37);
|
|
96
|
+
i0.ɵɵtext(41);
|
|
97
|
+
i0.ɵɵelementEnd()()();
|
|
98
|
+
i0.ɵɵelementStart(42, "div", 38)(43, "div", 39)(44, "div", 40);
|
|
99
|
+
i0.ɵɵtext(45);
|
|
74
100
|
i0.ɵɵelementEnd();
|
|
75
|
-
i0.ɵɵelementStart(
|
|
76
|
-
i0.ɵɵtext(
|
|
101
|
+
i0.ɵɵelementStart(46, "div", 41);
|
|
102
|
+
i0.ɵɵtext(47, "Sent (24h)");
|
|
77
103
|
i0.ɵɵelementEnd()();
|
|
78
|
-
i0.ɵɵelementStart(
|
|
79
|
-
i0.ɵɵtext(
|
|
104
|
+
i0.ɵɵelementStart(48, "div", 39)(49, "div", 40);
|
|
105
|
+
i0.ɵɵtext(50);
|
|
80
106
|
i0.ɵɵelementEnd();
|
|
81
|
-
i0.ɵɵelementStart(
|
|
82
|
-
i0.ɵɵtext(
|
|
107
|
+
i0.ɵɵelementStart(51, "div", 41);
|
|
108
|
+
i0.ɵɵtext(52, "Success");
|
|
83
109
|
i0.ɵɵelementEnd()();
|
|
84
|
-
i0.ɵɵelementStart(
|
|
85
|
-
i0.ɵɵtext(
|
|
110
|
+
i0.ɵɵelementStart(53, "div", 39)(54, "div", 40);
|
|
111
|
+
i0.ɵɵtext(55);
|
|
86
112
|
i0.ɵɵelementEnd();
|
|
87
|
-
i0.ɵɵelementStart(
|
|
88
|
-
i0.ɵɵtext(
|
|
113
|
+
i0.ɵɵelementStart(56, "div", 41);
|
|
114
|
+
i0.ɵɵtext(57, "Failed");
|
|
89
115
|
i0.ɵɵelementEnd()()()();
|
|
90
|
-
i0.ɵɵelementStart(
|
|
91
|
-
i0.ɵɵlistener("click", function
|
|
92
|
-
i0.ɵɵelement(
|
|
93
|
-
i0.ɵɵtext(
|
|
94
|
-
i0.ɵɵelementEnd();
|
|
95
|
-
i0.ɵɵelementStart(
|
|
96
|
-
i0.ɵɵlistener("click", function
|
|
97
|
-
i0.ɵɵelement(
|
|
98
|
-
i0.ɵɵtext(
|
|
116
|
+
i0.ɵɵelementStart(58, "div", 42)(59, "button", 43);
|
|
117
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_For_11_Template_button_click_59_listener() { const card_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenGovernanceModal(card_r2.Entity)); });
|
|
118
|
+
i0.ɵɵelement(60, "i", 34);
|
|
119
|
+
i0.ɵɵtext(61, " Enterprise Scope ");
|
|
120
|
+
i0.ɵɵelementEnd();
|
|
121
|
+
i0.ɵɵelementStart(62, "button", 43);
|
|
122
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_For_11_Template_button_click_62_listener() { const card_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.configureProvider(card_r2.Entity)); });
|
|
123
|
+
i0.ɵɵelement(63, "i", 44);
|
|
124
|
+
i0.ɵɵtext(64, " Record ");
|
|
125
|
+
i0.ɵɵelementEnd();
|
|
126
|
+
i0.ɵɵelementStart(65, "button", 43);
|
|
127
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_For_11_Template_button_click_65_listener() { const card_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.viewProviderLogs(card_r2.Entity)); });
|
|
128
|
+
i0.ɵɵelement(66, "i", 45);
|
|
129
|
+
i0.ɵɵtext(67, " Analytics ");
|
|
99
130
|
i0.ɵɵelementEnd()()();
|
|
100
131
|
} if (rf & 2) {
|
|
101
132
|
const card_r2 = ctx.$implicit;
|
|
@@ -121,13 +152,27 @@ function CommunicationProvidersResourceComponent_Conditional_9_For_2_Template(rf
|
|
|
121
152
|
i0.ɵɵadvance();
|
|
122
153
|
i0.ɵɵclassMap(card_r2.Entity.SupportsReceiving ? "fa-solid fa-check" : "fa-solid fa-xmark");
|
|
123
154
|
i0.ɵɵadvance(2);
|
|
124
|
-
i0.ɵɵ
|
|
155
|
+
i0.ɵɵclassProp("supported", card_r2.Entity.SupportsCalendar)("unsupported", !card_r2.Entity.SupportsCalendar);
|
|
156
|
+
i0.ɵɵadvance();
|
|
157
|
+
i0.ɵɵclassMap(card_r2.Entity.SupportsCalendar ? "fa-regular fa-calendar-check" : "fa-solid fa-xmark");
|
|
158
|
+
i0.ɵɵadvance(2);
|
|
159
|
+
i0.ɵɵclassProp("supported", card_r2.Entity.SupportsFreeBusy)("unsupported", !card_r2.Entity.SupportsFreeBusy);
|
|
160
|
+
i0.ɵɵadvance();
|
|
161
|
+
i0.ɵɵclassMap(card_r2.Entity.SupportsFreeBusy ? "fa-solid fa-user-clock" : "fa-solid fa-xmark");
|
|
162
|
+
i0.ɵɵadvance(2);
|
|
163
|
+
i0.ɵɵconditional(card_r2.Entity.SupportsScheduledSending ? 25 : -1);
|
|
164
|
+
i0.ɵɵadvance();
|
|
165
|
+
i0.ɵɵconditional(card_r2.Entity.SupportsDrafts ? 26 : -1);
|
|
125
166
|
i0.ɵɵadvance();
|
|
126
|
-
i0.ɵɵconditional(card_r2.Entity.
|
|
167
|
+
i0.ɵɵconditional(card_r2.Entity.SupportsForwarding ? 27 : -1);
|
|
127
168
|
i0.ɵɵadvance();
|
|
128
|
-
i0.ɵɵconditional(card_r2.Entity.
|
|
169
|
+
i0.ɵɵconditional(card_r2.Entity.SupportsReplying ? 28 : -1);
|
|
170
|
+
i0.ɵɵadvance(6);
|
|
171
|
+
i0.ɵɵproperty("ngClass", card_r2.ScopeBadgeClass);
|
|
129
172
|
i0.ɵɵadvance();
|
|
130
|
-
i0.ɵɵ
|
|
173
|
+
i0.ɵɵtextInterpolate(card_r2.ScopeLabel);
|
|
174
|
+
i0.ɵɵadvance(6);
|
|
175
|
+
i0.ɵɵtextInterpolate(card_r2.Entity.AllowedEmailDomains || "All domains (unrestricted)");
|
|
131
176
|
i0.ɵɵadvance(4);
|
|
132
177
|
i0.ɵɵtextInterpolate(card_r2.SentCount);
|
|
133
178
|
i0.ɵɵadvance(5);
|
|
@@ -135,20 +180,329 @@ function CommunicationProvidersResourceComponent_Conditional_9_For_2_Template(rf
|
|
|
135
180
|
i0.ɵɵadvance(5);
|
|
136
181
|
i0.ɵɵtextInterpolate(card_r2.FailedCount);
|
|
137
182
|
} }
|
|
138
|
-
function
|
|
139
|
-
i0.ɵɵ
|
|
140
|
-
i0.ɵɵ
|
|
183
|
+
function CommunicationProvidersResourceComponent_Conditional_13_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
184
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
185
|
+
i0.ɵɵelementStart(0, "div", 17)(1, "div", 47);
|
|
186
|
+
i0.ɵɵelement(2, "i", 48);
|
|
187
|
+
i0.ɵɵelementEnd();
|
|
188
|
+
i0.ɵɵelementStart(3, "div", 49);
|
|
189
|
+
i0.ɵɵtext(4, "No Agent Utility Mailboxes Registered");
|
|
190
|
+
i0.ɵɵelementEnd();
|
|
191
|
+
i0.ɵɵelementStart(5, "div", 50);
|
|
192
|
+
i0.ɵɵtext(6, " Register shared or per-user agent email addresses (e.g., ");
|
|
193
|
+
i0.ɵɵelementStart(7, "code");
|
|
194
|
+
i0.ɵɵtext(8, "cos-exec@company.com");
|
|
195
|
+
i0.ɵɵelementEnd();
|
|
196
|
+
i0.ɵɵtext(9, " or ");
|
|
197
|
+
i0.ɵɵelementStart(10, "code");
|
|
198
|
+
i0.ɵɵtext(11, "sage@company.com");
|
|
199
|
+
i0.ɵɵelementEnd();
|
|
200
|
+
i0.ɵɵtext(12, ") in ");
|
|
201
|
+
i0.ɵɵelementStart(13, "strong");
|
|
202
|
+
i0.ɵɵtext(14, "MJ: AI Bridge Agent Identities");
|
|
203
|
+
i0.ɵɵelementEnd();
|
|
204
|
+
i0.ɵɵtext(15, " so agents can send briefings and calendar invites safely when ");
|
|
205
|
+
i0.ɵɵelementStart(16, "code");
|
|
206
|
+
i0.ɵɵtext(17, "EnterpriseScopeMode");
|
|
207
|
+
i0.ɵɵelementEnd();
|
|
208
|
+
i0.ɵɵtext(18, " is set to ");
|
|
209
|
+
i0.ɵɵelementStart(19, "code");
|
|
210
|
+
i0.ɵɵtext(20, "UtilityMailboxesOnly");
|
|
211
|
+
i0.ɵɵelementEnd();
|
|
212
|
+
i0.ɵɵtext(21, ". ");
|
|
213
|
+
i0.ɵɵelementEnd();
|
|
214
|
+
i0.ɵɵelementStart(22, "button", 2);
|
|
215
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_24_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.AddNewAgentIdentity()); });
|
|
216
|
+
i0.ɵɵelement(23, "i", 6);
|
|
217
|
+
i0.ɵɵtext(24, " Register Utility Mailbox ");
|
|
218
|
+
i0.ɵɵelementEnd()();
|
|
219
|
+
} }
|
|
220
|
+
function CommunicationProvidersResourceComponent_Conditional_13_Conditional_25_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
221
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
222
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 53)(2, "div", 54);
|
|
223
|
+
i0.ɵɵelement(3, "i", 55);
|
|
141
224
|
i0.ɵɵelementEnd();
|
|
225
|
+
i0.ɵɵelementStart(4, "div", 56)(5, "div", 57);
|
|
226
|
+
i0.ɵɵtext(6);
|
|
227
|
+
i0.ɵɵelementEnd();
|
|
228
|
+
i0.ɵɵelementStart(7, "div", 58);
|
|
229
|
+
i0.ɵɵtext(8);
|
|
230
|
+
i0.ɵɵelementEnd()();
|
|
231
|
+
i0.ɵɵelementStart(9, "span", 59);
|
|
232
|
+
i0.ɵɵtext(10);
|
|
233
|
+
i0.ɵɵelementEnd()();
|
|
234
|
+
i0.ɵɵelementStart(11, "div", 60)(12, "div", 61)(13, "span", 62);
|
|
235
|
+
i0.ɵɵtext(14, "Agent:");
|
|
236
|
+
i0.ɵɵelementEnd();
|
|
237
|
+
i0.ɵɵelementStart(15, "span", 63);
|
|
238
|
+
i0.ɵɵtext(16);
|
|
239
|
+
i0.ɵɵelementEnd()();
|
|
240
|
+
i0.ɵɵelementStart(17, "div", 61)(18, "span", 62);
|
|
241
|
+
i0.ɵɵtext(19, "Owner Scope:");
|
|
242
|
+
i0.ɵɵelementEnd();
|
|
243
|
+
i0.ɵɵelementStart(20, "span", 63);
|
|
244
|
+
i0.ɵɵtext(21);
|
|
245
|
+
i0.ɵɵelementEnd()();
|
|
246
|
+
i0.ɵɵelementStart(22, "div", 61)(23, "span", 62);
|
|
247
|
+
i0.ɵɵtext(24, "Bridge Provider:");
|
|
248
|
+
i0.ɵɵelementEnd();
|
|
249
|
+
i0.ɵɵelementStart(25, "span", 63);
|
|
250
|
+
i0.ɵɵtext(26);
|
|
251
|
+
i0.ɵɵelementEnd()()();
|
|
252
|
+
i0.ɵɵelementStart(27, "div", 64)(28, "button", 43);
|
|
253
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_25_For_2_Template_button_click_28_listener() { const identity_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenAgentIdentity(identity_r6)); });
|
|
254
|
+
i0.ɵɵelement(29, "i", 65);
|
|
255
|
+
i0.ɵɵtext(30, " Open Identity Record ");
|
|
256
|
+
i0.ɵɵelementEnd()()();
|
|
142
257
|
} if (rf & 2) {
|
|
143
|
-
const
|
|
258
|
+
const identity_r6 = ctx.$implicit;
|
|
259
|
+
i0.ɵɵclassProp("inactive", !identity_r6.IsActive);
|
|
260
|
+
i0.ɵɵadvance(6);
|
|
261
|
+
i0.ɵɵtextInterpolate(identity_r6.DisplayName || identity_r6.IdentityValue);
|
|
262
|
+
i0.ɵɵadvance(2);
|
|
263
|
+
i0.ɵɵtextInterpolate(identity_r6.IdentityValue);
|
|
264
|
+
i0.ɵɵadvance();
|
|
265
|
+
i0.ɵɵclassProp("active", identity_r6.IsActive)("disabled", !identity_r6.IsActive);
|
|
266
|
+
i0.ɵɵadvance();
|
|
267
|
+
i0.ɵɵtextInterpolate1(" ", identity_r6.IsActive ? "Active" : "Inactive", " ");
|
|
268
|
+
i0.ɵɵadvance(6);
|
|
269
|
+
i0.ɵɵtextInterpolate(identity_r6.Agent || "Unassigned");
|
|
270
|
+
i0.ɵɵadvance(5);
|
|
271
|
+
i0.ɵɵtextInterpolate(identity_r6.User ? "Dedicated: " + identity_r6.User : "Shared Org Utility Mailbox");
|
|
272
|
+
i0.ɵɵadvance(5);
|
|
273
|
+
i0.ɵɵtextInterpolate(identity_r6.Provider);
|
|
274
|
+
} }
|
|
275
|
+
function CommunicationProvidersResourceComponent_Conditional_13_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
276
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
277
|
+
i0.ɵɵrepeaterCreate(1, CommunicationProvidersResourceComponent_Conditional_13_Conditional_25_For_2_Template, 31, 12, "div", 51, _forTrack1);
|
|
278
|
+
i0.ɵɵelementEnd();
|
|
279
|
+
} if (rf & 2) {
|
|
280
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
144
281
|
i0.ɵɵadvance();
|
|
282
|
+
i0.ɵɵrepeater(ctx_r2.AgentUtilityMailboxes);
|
|
283
|
+
} }
|
|
284
|
+
function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
285
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
286
|
+
i0.ɵɵelementStart(0, "label", 89)(1, "input", 90);
|
|
287
|
+
i0.ɵɵlistener("change", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_For_20_Template_input_change_1_listener() { const opt_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnScopeModeChange(opt_r9.Value)); });
|
|
288
|
+
i0.ɵɵelementEnd();
|
|
289
|
+
i0.ɵɵelementStart(2, "div", 91)(3, "div", 92);
|
|
290
|
+
i0.ɵɵtext(4);
|
|
291
|
+
i0.ɵɵelementStart(5, "code");
|
|
292
|
+
i0.ɵɵtext(6);
|
|
293
|
+
i0.ɵɵelementEnd();
|
|
294
|
+
i0.ɵɵtext(7, ")");
|
|
295
|
+
i0.ɵɵelementEnd();
|
|
296
|
+
i0.ɵɵelementStart(8, "div", 93);
|
|
297
|
+
i0.ɵɵtext(9);
|
|
298
|
+
i0.ɵɵelementEnd()()();
|
|
299
|
+
} if (rf & 2) {
|
|
300
|
+
const opt_r9 = ctx.$implicit;
|
|
301
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
302
|
+
i0.ɵɵclassProp("selected", ctx_r2.DraftEnterpriseScopeMode === opt_r9.Value);
|
|
303
|
+
i0.ɵɵadvance();
|
|
304
|
+
i0.ɵɵproperty("value", opt_r9.Value)("checked", ctx_r2.DraftEnterpriseScopeMode === opt_r9.Value);
|
|
305
|
+
i0.ɵɵadvance(3);
|
|
306
|
+
i0.ɵɵtextInterpolate1("", opt_r9.Label, " (");
|
|
307
|
+
i0.ɵɵadvance(2);
|
|
308
|
+
i0.ɵɵtextInterpolate(opt_r9.Value);
|
|
309
|
+
i0.ɵɵadvance(3);
|
|
310
|
+
i0.ɵɵtextInterpolate(opt_r9.Summary);
|
|
311
|
+
} }
|
|
312
|
+
function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
313
|
+
i0.ɵɵelementStart(0, "div", 83);
|
|
314
|
+
i0.ɵɵelement(1, "i", 94);
|
|
315
|
+
i0.ɵɵtext(2);
|
|
316
|
+
i0.ɵɵelementEnd();
|
|
317
|
+
} if (rf & 2) {
|
|
318
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
319
|
+
i0.ɵɵadvance(2);
|
|
320
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r2.GovernanceSaveError, " ");
|
|
321
|
+
} }
|
|
322
|
+
function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
323
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
324
|
+
i0.ɵɵelement(1, "i", 95);
|
|
325
|
+
i0.ɵɵtext(2);
|
|
326
|
+
i0.ɵɵelementEnd();
|
|
327
|
+
} if (rf & 2) {
|
|
328
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
329
|
+
i0.ɵɵadvance(2);
|
|
330
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r2.GovernanceSaveMessage, " ");
|
|
331
|
+
} }
|
|
332
|
+
function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
333
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
334
|
+
i0.ɵɵelementStart(0, "div", 66);
|
|
335
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.CloseGovernanceModal()); });
|
|
336
|
+
i0.ɵɵelementStart(1, "div", 67);
|
|
337
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template_div_click_1_listener($event) { return $event.stopPropagation(); });
|
|
338
|
+
i0.ɵɵelementStart(2, "div", 68)(3, "div")(4, "div", 69);
|
|
339
|
+
i0.ɵɵelement(5, "i", 34);
|
|
340
|
+
i0.ɵɵtext(6);
|
|
341
|
+
i0.ɵɵelementEnd();
|
|
342
|
+
i0.ɵɵelementStart(7, "div", 70);
|
|
343
|
+
i0.ɵɵtext(8, " Configure which mailboxes and calendar scopes AI agents (including Chief of Staff) can access through this provider. ");
|
|
344
|
+
i0.ɵɵelementEnd()();
|
|
345
|
+
i0.ɵɵelementStart(9, "button", 71);
|
|
346
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.CloseGovernanceModal()); });
|
|
347
|
+
i0.ɵɵelement(10, "i", 72);
|
|
348
|
+
i0.ɵɵelementEnd()();
|
|
349
|
+
i0.ɵɵelementStart(11, "div", 73)(12, "div", 74)(13, "label", 75);
|
|
350
|
+
i0.ɵɵtext(14, "Enterprise Mailbox Scope Mode (");
|
|
351
|
+
i0.ɵɵelementStart(15, "code");
|
|
352
|
+
i0.ɵɵtext(16, "EnterpriseScopeMode");
|
|
353
|
+
i0.ɵɵelementEnd();
|
|
354
|
+
i0.ɵɵtext(17, ")");
|
|
355
|
+
i0.ɵɵelementEnd();
|
|
356
|
+
i0.ɵɵelementStart(18, "div", 76);
|
|
357
|
+
i0.ɵɵrepeaterCreate(19, CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_For_20_Template, 10, 7, "label", 77, _forTrack2);
|
|
358
|
+
i0.ɵɵelementEnd()();
|
|
359
|
+
i0.ɵɵelementStart(21, "div", 74)(22, "label", 75);
|
|
360
|
+
i0.ɵɵtext(23, "Allowed Email Domains (");
|
|
361
|
+
i0.ɵɵelementStart(24, "code");
|
|
362
|
+
i0.ɵɵtext(25, "AllowedEmailDomains");
|
|
363
|
+
i0.ɵɵelementEnd();
|
|
364
|
+
i0.ɵɵtext(26, ")");
|
|
365
|
+
i0.ɵɵelementEnd();
|
|
366
|
+
i0.ɵɵelementStart(27, "input", 78);
|
|
367
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template_input_ngModelChange_27_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.DraftAllowedEmailDomains, $event) || (ctx_r2.DraftAllowedEmailDomains = $event); return i0.ɵɵresetView($event); });
|
|
368
|
+
i0.ɵɵelementEnd();
|
|
369
|
+
i0.ɵɵelementStart(28, "div", 79);
|
|
370
|
+
i0.ɵɵtext(29, " Comma-separated list of corporate email domains permitted for user-scoped inbox & calendar access. Users signed in with an email outside these domains will be blocked by the server-side security gate. ");
|
|
371
|
+
i0.ɵɵelementEnd()();
|
|
372
|
+
i0.ɵɵelementStart(30, "div", 74)(31, "label", 75);
|
|
373
|
+
i0.ɵɵtext(32, "Calendar & Scheduling Capabilities");
|
|
374
|
+
i0.ɵɵelementEnd();
|
|
375
|
+
i0.ɵɵelementStart(33, "div", 80)(34, "label", 81)(35, "input", 82);
|
|
376
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template_input_ngModelChange_35_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.DraftSupportsCalendar, $event) || (ctx_r2.DraftSupportsCalendar = $event); return i0.ɵɵresetView($event); });
|
|
377
|
+
i0.ɵɵelementEnd();
|
|
378
|
+
i0.ɵɵelementStart(36, "span")(37, "strong");
|
|
379
|
+
i0.ɵɵtext(38, "Supports Calendar Events");
|
|
380
|
+
i0.ɵɵelementEnd();
|
|
381
|
+
i0.ɵɵtext(39, " (");
|
|
382
|
+
i0.ɵɵelementStart(40, "code");
|
|
383
|
+
i0.ɵɵtext(41, "SupportsCalendar");
|
|
384
|
+
i0.ɵɵelementEnd();
|
|
385
|
+
i0.ɵɵtext(42, " \u2014 read/create/update/respond/cancel events)");
|
|
386
|
+
i0.ɵɵelementEnd()();
|
|
387
|
+
i0.ɵɵelementStart(43, "label", 81)(44, "input", 82);
|
|
388
|
+
i0.ɵɵtwoWayListener("ngModelChange", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template_input_ngModelChange_44_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.DraftSupportsFreeBusy, $event) || (ctx_r2.DraftSupportsFreeBusy = $event); return i0.ɵɵresetView($event); });
|
|
389
|
+
i0.ɵɵelementEnd();
|
|
390
|
+
i0.ɵɵelementStart(45, "span")(46, "strong");
|
|
391
|
+
i0.ɵɵtext(47, "Supports Free/Busy & Meeting Time Finder");
|
|
392
|
+
i0.ɵɵelementEnd();
|
|
393
|
+
i0.ɵɵtext(48, " (");
|
|
394
|
+
i0.ɵɵelementStart(49, "code");
|
|
395
|
+
i0.ɵɵtext(50, "SupportsFreeBusy");
|
|
396
|
+
i0.ɵɵelementEnd();
|
|
397
|
+
i0.ɵɵtext(51, " \u2014 schedule availability & slot calculation)");
|
|
398
|
+
i0.ɵɵelementEnd()()()();
|
|
399
|
+
i0.ɵɵconditionalCreate(52, CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Conditional_52_Template, 3, 1, "div", 83);
|
|
400
|
+
i0.ɵɵconditionalCreate(53, CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Conditional_53_Template, 3, 1, "div", 84);
|
|
401
|
+
i0.ɵɵelementEnd();
|
|
402
|
+
i0.ɵɵelementStart(54, "div", 85)(55, "button", 86);
|
|
403
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template_button_click_55_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.CloseGovernanceModal()); });
|
|
404
|
+
i0.ɵɵtext(56, " Cancel ");
|
|
405
|
+
i0.ɵɵelementEnd();
|
|
406
|
+
i0.ɵɵelementStart(57, "button", 87);
|
|
407
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template_button_click_57_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SaveGovernanceConfig()); });
|
|
408
|
+
i0.ɵɵelement(58, "i", 88);
|
|
409
|
+
i0.ɵɵtext(59);
|
|
410
|
+
i0.ɵɵelementEnd()()()();
|
|
411
|
+
} if (rf & 2) {
|
|
412
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
413
|
+
i0.ɵɵadvance(6);
|
|
414
|
+
i0.ɵɵtextInterpolate1(" Enterprise Mailbox Governance \u2014 ", ctx_r2.ActiveGovernanceProvider.Name, " ");
|
|
415
|
+
i0.ɵɵadvance(13);
|
|
416
|
+
i0.ɵɵrepeater(ctx_r2.ScopeOptions);
|
|
417
|
+
i0.ɵɵadvance(8);
|
|
418
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r2.DraftAllowedEmailDomains);
|
|
419
|
+
i0.ɵɵadvance(8);
|
|
420
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r2.DraftSupportsCalendar);
|
|
421
|
+
i0.ɵɵadvance(9);
|
|
422
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r2.DraftSupportsFreeBusy);
|
|
423
|
+
i0.ɵɵadvance(8);
|
|
424
|
+
i0.ɵɵconditional(ctx_r2.GovernanceSaveError ? 52 : -1);
|
|
425
|
+
i0.ɵɵadvance();
|
|
426
|
+
i0.ɵɵconditional(ctx_r2.GovernanceSaveMessage ? 53 : -1);
|
|
427
|
+
i0.ɵɵadvance(2);
|
|
428
|
+
i0.ɵɵproperty("disabled", ctx_r2.IsSavingGovernance);
|
|
429
|
+
i0.ɵɵadvance(2);
|
|
430
|
+
i0.ɵɵproperty("disabled", ctx_r2.IsSavingGovernance);
|
|
431
|
+
i0.ɵɵadvance(2);
|
|
432
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r2.IsSavingGovernance ? "Saving..." : "Save Governance Settings", " ");
|
|
433
|
+
} }
|
|
434
|
+
function CommunicationProvidersResourceComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
435
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "div", 10);
|
|
436
|
+
i0.ɵɵelement(2, "i", 11);
|
|
437
|
+
i0.ɵɵtext(3, " Configured Communication & Calendar Providers ");
|
|
438
|
+
i0.ɵɵelementEnd();
|
|
439
|
+
i0.ɵɵelementStart(4, "div", 12);
|
|
440
|
+
i0.ɵɵtext(5, " Enterprise credentials default to ");
|
|
441
|
+
i0.ɵɵelementStart(6, "strong");
|
|
442
|
+
i0.ɵɵtext(7, "Utility Mailboxes Only");
|
|
443
|
+
i0.ɵɵelementEnd();
|
|
444
|
+
i0.ɵɵtext(8, " so agents cannot read or send from arbitrary user inboxes unless explicitly scoped. ");
|
|
445
|
+
i0.ɵɵelementEnd()();
|
|
446
|
+
i0.ɵɵelementStart(9, "div", 13);
|
|
447
|
+
i0.ɵɵrepeaterCreate(10, CommunicationProvidersResourceComponent_Conditional_13_For_11_Template, 68, 43, "div", 14, _forTrack0);
|
|
448
|
+
i0.ɵɵelementEnd();
|
|
449
|
+
i0.ɵɵelementStart(12, "div", 15)(13, "div", 10);
|
|
450
|
+
i0.ɵɵelement(14, "i", 16);
|
|
451
|
+
i0.ɵɵtext(15, " Agent Utility Mailboxes (MJ: AI Bridge Agent Identities) ");
|
|
452
|
+
i0.ɵɵelementEnd();
|
|
453
|
+
i0.ɵɵelementStart(16, "div", 12);
|
|
454
|
+
i0.ɵɵtext(17, " Dedicated agent and shared utility email identities that Chief of Staff and other AI agents can use in ");
|
|
455
|
+
i0.ɵɵelementStart(18, "code");
|
|
456
|
+
i0.ɵɵtext(19, "UtilityMailboxesOnly");
|
|
457
|
+
i0.ɵɵelementEnd();
|
|
458
|
+
i0.ɵɵtext(20, " or ");
|
|
459
|
+
i0.ɵɵelementStart(21, "code");
|
|
460
|
+
i0.ɵɵtext(22, "SendAsAgent");
|
|
461
|
+
i0.ɵɵelementEnd();
|
|
462
|
+
i0.ɵɵtext(23, " mode without exposing personal employee inboxes. ");
|
|
463
|
+
i0.ɵɵelementEnd()();
|
|
464
|
+
i0.ɵɵconditionalCreate(24, CommunicationProvidersResourceComponent_Conditional_13_Conditional_24_Template, 25, 0, "div", 17)(25, CommunicationProvidersResourceComponent_Conditional_13_Conditional_25_Template, 3, 0, "div", 18);
|
|
465
|
+
i0.ɵɵconditionalCreate(26, CommunicationProvidersResourceComponent_Conditional_13_Conditional_26_Template, 60, 9, "div", 19);
|
|
466
|
+
} if (rf & 2) {
|
|
467
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
468
|
+
i0.ɵɵadvance(10);
|
|
145
469
|
i0.ɵɵrepeater(ctx_r2.providerCards);
|
|
470
|
+
i0.ɵɵadvance(14);
|
|
471
|
+
i0.ɵɵconditional(ctx_r2.AgentUtilityMailboxes.length === 0 ? 24 : 25);
|
|
472
|
+
i0.ɵɵadvance(2);
|
|
473
|
+
i0.ɵɵconditional(ctx_r2.ActiveGovernanceProvider ? 26 : -1);
|
|
146
474
|
} }
|
|
147
475
|
let CommunicationProvidersResourceComponent = class CommunicationProvidersResourceComponent extends BaseResourceComponent {
|
|
148
476
|
cdr;
|
|
149
477
|
navService;
|
|
150
478
|
isLoading = false;
|
|
151
479
|
ProviderCards = [];
|
|
480
|
+
AgentUtilityMailboxes = [];
|
|
481
|
+
ScopeOptions = [
|
|
482
|
+
{
|
|
483
|
+
Value: 'UtilityMailboxesOnly',
|
|
484
|
+
Label: 'Utility Mailboxes Only (Recommended Default)',
|
|
485
|
+
Summary: 'Enterprise credentials only access dedicated Agent Utility Mailboxes registered in MJ: AI Bridge Agent Identities. Personal user inbox & calendar access is blocked at the server gate.',
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
Value: 'SecurityGroupScoped',
|
|
489
|
+
Label: 'Security Group / ApplicationAccessPolicy Scoped',
|
|
490
|
+
Summary: 'Enterprise credentials are restricted by an Exchange Online ApplicationAccessPolicy or Google Workspace OU/Group. Live preflight verification (VerifyMailboxAccess) confirms each user mailbox before enabling personal inbox/calendar tools.',
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
Value: 'TenantWide',
|
|
494
|
+
Label: 'Tenant-Wide App Access',
|
|
495
|
+
Summary: 'Enterprise app credentials can access any corporate mailbox matching AllowedEmailDomains (pinned strictly on the server to ContextUser.Email).',
|
|
496
|
+
},
|
|
497
|
+
];
|
|
498
|
+
ActiveGovernanceProvider = null;
|
|
499
|
+
DraftEnterpriseScopeMode = 'UtilityMailboxesOnly';
|
|
500
|
+
DraftAllowedEmailDomains = '';
|
|
501
|
+
DraftSupportsCalendar = false;
|
|
502
|
+
DraftSupportsFreeBusy = false;
|
|
503
|
+
IsSavingGovernance = false;
|
|
504
|
+
GovernanceSaveMessage = '';
|
|
505
|
+
GovernanceSaveError = '';
|
|
152
506
|
/** @deprecated Use {@link ProviderCards}. */
|
|
153
507
|
get providerCards() {
|
|
154
508
|
return this.ProviderCards;
|
|
@@ -178,7 +532,7 @@ let CommunicationProvidersResourceComponent = class CommunicationProvidersResour
|
|
|
178
532
|
const yesterday = new Date();
|
|
179
533
|
yesterday.setDate(yesterday.getDate() - 1);
|
|
180
534
|
const yesterdayIso = yesterday.toISOString();
|
|
181
|
-
const [providersResult, logsResult] = await Promise.all([
|
|
535
|
+
const [providersResult, logsResult, identitiesResult] = await Promise.all([
|
|
182
536
|
rv.RunView({
|
|
183
537
|
EntityName: 'MJ: Communication Providers',
|
|
184
538
|
OrderBy: 'Name ASC',
|
|
@@ -188,12 +542,21 @@ let CommunicationProvidersResourceComponent = class CommunicationProvidersResour
|
|
|
188
542
|
EntityName: 'MJ: Communication Logs',
|
|
189
543
|
ExtraFilter: `MessageDate >= '${yesterdayIso}'`,
|
|
190
544
|
ResultType: 'entity_object'
|
|
191
|
-
})
|
|
545
|
+
}),
|
|
546
|
+
rv.RunView({
|
|
547
|
+
EntityName: 'MJ: AI Bridge Agent Identities',
|
|
548
|
+
ExtraFilter: `IdentityType = 'Email'`,
|
|
549
|
+
OrderBy: 'DisplayName ASC, IdentityValue ASC',
|
|
550
|
+
ResultType: 'entity_object'
|
|
551
|
+
}),
|
|
192
552
|
]);
|
|
193
553
|
if (providersResult.Success) {
|
|
194
554
|
const logs = logsResult.Success ? logsResult.Results : [];
|
|
195
555
|
this.ProviderCards = providersResult.Results.map(p => this.buildProviderCard(p, logs));
|
|
196
556
|
}
|
|
557
|
+
if (identitiesResult.Success) {
|
|
558
|
+
this.AgentUtilityMailboxes = identitiesResult.Results;
|
|
559
|
+
}
|
|
197
560
|
}
|
|
198
561
|
catch (error) {
|
|
199
562
|
console.error('Error loading providers:', error);
|
|
@@ -214,9 +577,35 @@ let CommunicationProvidersResourceComponent = class CommunicationProvidersResour
|
|
|
214
577
|
SuccessRate: rate,
|
|
215
578
|
FailedCount: failed,
|
|
216
579
|
IconClass: this.getProviderIcon(provider.Name),
|
|
217
|
-
LogoClass: this.getProviderLogoClass(provider.Name)
|
|
580
|
+
LogoClass: this.getProviderLogoClass(provider.Name),
|
|
581
|
+
ScopeLabel: this.getScopeLabel(provider.EnterpriseScopeMode),
|
|
582
|
+
ScopeBadgeClass: this.getScopeBadgeClass(provider.EnterpriseScopeMode),
|
|
218
583
|
};
|
|
219
584
|
}
|
|
585
|
+
getScopeLabel(mode) {
|
|
586
|
+
switch (mode) {
|
|
587
|
+
case 'UtilityMailboxesOnly':
|
|
588
|
+
return 'Utility Mailboxes Only';
|
|
589
|
+
case 'SecurityGroupScoped':
|
|
590
|
+
return 'Security Group Scoped';
|
|
591
|
+
case 'TenantWide':
|
|
592
|
+
return 'Tenant-Wide';
|
|
593
|
+
default:
|
|
594
|
+
return mode;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
getScopeBadgeClass(mode) {
|
|
598
|
+
switch (mode) {
|
|
599
|
+
case 'UtilityMailboxesOnly':
|
|
600
|
+
return 'utility';
|
|
601
|
+
case 'SecurityGroupScoped':
|
|
602
|
+
return 'group';
|
|
603
|
+
case 'TenantWide':
|
|
604
|
+
return 'tenant';
|
|
605
|
+
default:
|
|
606
|
+
return 'utility';
|
|
607
|
+
}
|
|
608
|
+
}
|
|
220
609
|
getProviderIcon(name) {
|
|
221
610
|
const n = name.toLowerCase();
|
|
222
611
|
if (n.includes('sendgrid'))
|
|
@@ -245,6 +634,58 @@ let CommunicationProvidersResourceComponent = class CommunicationProvidersResour
|
|
|
245
634
|
return 'msgraph';
|
|
246
635
|
return '';
|
|
247
636
|
}
|
|
637
|
+
OpenGovernanceModal(provider) {
|
|
638
|
+
this.ActiveGovernanceProvider = provider;
|
|
639
|
+
this.DraftEnterpriseScopeMode = provider.EnterpriseScopeMode || 'UtilityMailboxesOnly';
|
|
640
|
+
this.DraftAllowedEmailDomains = provider.AllowedEmailDomains || '';
|
|
641
|
+
this.DraftSupportsCalendar = provider.SupportsCalendar;
|
|
642
|
+
this.DraftSupportsFreeBusy = provider.SupportsFreeBusy;
|
|
643
|
+
this.GovernanceSaveMessage = '';
|
|
644
|
+
this.GovernanceSaveError = '';
|
|
645
|
+
this.cdr.detectChanges();
|
|
646
|
+
}
|
|
647
|
+
CloseGovernanceModal() {
|
|
648
|
+
this.ActiveGovernanceProvider = null;
|
|
649
|
+
this.GovernanceSaveMessage = '';
|
|
650
|
+
this.GovernanceSaveError = '';
|
|
651
|
+
this.cdr.detectChanges();
|
|
652
|
+
}
|
|
653
|
+
OnScopeModeChange(mode) {
|
|
654
|
+
this.DraftEnterpriseScopeMode = mode;
|
|
655
|
+
this.cdr.detectChanges();
|
|
656
|
+
}
|
|
657
|
+
async SaveGovernanceConfig() {
|
|
658
|
+
if (!this.ActiveGovernanceProvider) {
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
try {
|
|
662
|
+
this.IsSavingGovernance = true;
|
|
663
|
+
this.GovernanceSaveMessage = '';
|
|
664
|
+
this.GovernanceSaveError = '';
|
|
665
|
+
this.cdr.detectChanges();
|
|
666
|
+
this.ActiveGovernanceProvider.EnterpriseScopeMode = this.DraftEnterpriseScopeMode;
|
|
667
|
+
const trimmedDomains = this.DraftAllowedEmailDomains.trim();
|
|
668
|
+
this.ActiveGovernanceProvider.AllowedEmailDomains = trimmedDomains.length > 0 ? trimmedDomains : null;
|
|
669
|
+
this.ActiveGovernanceProvider.SupportsCalendar = this.DraftSupportsCalendar;
|
|
670
|
+
this.ActiveGovernanceProvider.SupportsFreeBusy = this.DraftSupportsFreeBusy;
|
|
671
|
+
const saved = await this.ActiveGovernanceProvider.Save();
|
|
672
|
+
if (saved) {
|
|
673
|
+
this.GovernanceSaveMessage = 'Enterprise governance and calendar capabilities saved.';
|
|
674
|
+
await this.loadData();
|
|
675
|
+
}
|
|
676
|
+
else {
|
|
677
|
+
const msg = this.ActiveGovernanceProvider.LatestResult?.Message || 'Failed to save provider settings.';
|
|
678
|
+
this.GovernanceSaveError = msg;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
catch (err) {
|
|
682
|
+
this.GovernanceSaveError = err instanceof Error ? err.message : String(err);
|
|
683
|
+
}
|
|
684
|
+
finally {
|
|
685
|
+
this.IsSavingGovernance = false;
|
|
686
|
+
this.cdr.detectChanges();
|
|
687
|
+
}
|
|
688
|
+
}
|
|
248
689
|
ConfigureProvider(provider) {
|
|
249
690
|
const pk = new CompositeKey();
|
|
250
691
|
pk.LoadFromEntityInfoAndRecord(this.ProviderToUse.Entities.find(e => e.Name === 'MJ: Communication Providers'), provider);
|
|
@@ -268,6 +709,18 @@ let CommunicationProvidersResourceComponent = class CommunicationProvidersResour
|
|
|
268
709
|
addNewProvider() {
|
|
269
710
|
return this.AddNewProvider();
|
|
270
711
|
}
|
|
712
|
+
AddNewAgentIdentity() {
|
|
713
|
+
this.navService.OpenEntityRecord('MJ: AI Bridge Agent Identities', new CompositeKey());
|
|
714
|
+
}
|
|
715
|
+
OpenAgentIdentity(identity) {
|
|
716
|
+
const entityInfo = this.ProviderToUse.Entities.find(e => e.Name === 'MJ: AI Bridge Agent Identities');
|
|
717
|
+
if (!entityInfo) {
|
|
718
|
+
return;
|
|
719
|
+
}
|
|
720
|
+
const pk = new CompositeKey();
|
|
721
|
+
pk.LoadFromEntityInfoAndRecord(entityInfo, identity);
|
|
722
|
+
this.navService.OpenEntityRecord('MJ: AI Bridge Agent Identities', pk);
|
|
723
|
+
}
|
|
271
724
|
async GetResourceDisplayName(data) {
|
|
272
725
|
return 'Providers';
|
|
273
726
|
}
|
|
@@ -275,23 +728,29 @@ let CommunicationProvidersResourceComponent = class CommunicationProvidersResour
|
|
|
275
728
|
return 'fa-solid fa-server';
|
|
276
729
|
}
|
|
277
730
|
static ɵfac = function CommunicationProvidersResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CommunicationProvidersResourceComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.NavigationService)); };
|
|
278
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CommunicationProvidersResourceComponent, selectors: [["mj-communication-providers-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
731
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CommunicationProvidersResourceComponent, selectors: [["mj-communication-providers-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 14, vars: 2, consts: [["Title", "Providers & Enterprise Mailbox Governance", "Icon", "fa-solid fa-server", "Subtitle", "Manage messaging & calendar providers, enterprise mailbox scope boundaries, and dedicated Agent Utility Mailboxes"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "action-btn-label"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "loading-state"], ["text", "Loading providers and mailbox governance..."], [1, "section-heading"], [1, "section-heading-title"], [1, "fa-solid", "fa-plug"], [1, "section-heading-sub"], [1, "providers-grid"], [1, "provider-card", 3, "disabled"], [1, "section-heading", "utility-mailboxes-heading"], [1, "fa-solid", "fa-envelope-circle-check"], [1, "utility-empty-card"], [1, "utility-mailboxes-grid"], [1, "governance-modal-backdrop"], [1, "provider-card"], [1, "provider-card-header"], [1, "provider-card-logo", 3, "ngClass"], [1, "provider-card-title"], [1, "provider-card-name"], [1, "provider-card-desc"], [1, "provider-card-status", 3, "ngClass"], [1, "provider-card-body"], [1, "provider-capabilities"], [1, "capability-chip"], [1, "capability-chip", "supported"], [1, "governance-banner"], [1, "governance-row"], [1, "governance-label"], [1, "fa-solid", "fa-shield-halved"], [1, "scope-badge", 3, "ngClass"], [1, "fa-solid", "fa-globe"], [1, "governance-domains"], [1, "provider-card-stats"], [1, "provider-stat"], [1, "provider-stat-value"], [1, "provider-stat-label"], [1, "provider-card-footer"], [3, "click"], [1, "fa-solid", "fa-gear"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-check"], [1, "utility-empty-icon"], [1, "fa-solid", "fa-inbox"], [1, "utility-empty-title"], [1, "utility-empty-desc"], [1, "utility-mailbox-card", 3, "inactive"], [1, "utility-mailbox-card"], [1, "utility-mailbox-header"], [1, "utility-mailbox-icon"], [1, "fa-solid", "fa-at"], [1, "utility-mailbox-info"], [1, "utility-mailbox-title"], [1, "utility-mailbox-address"], [1, "provider-card-status"], [1, "utility-mailbox-meta"], [1, "utility-meta-row"], [1, "utility-meta-label"], [1, "utility-meta-val"], [1, "utility-mailbox-footer"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "governance-modal-backdrop", 3, "click"], [1, "governance-modal", 3, "click"], [1, "governance-modal-header"], [1, "governance-modal-title"], [1, "governance-modal-subtitle"], [1, "modal-close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "governance-modal-body"], [1, "form-group"], [1, "form-label"], [1, "scope-options-list"], [1, "scope-option-card", 3, "selected"], ["type", "text", "placeholder", "e.g. bluecypress.io, memberjunction.org (leave blank for any domain)", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "form-hint"], [1, "checkbox-row"], [1, "checkbox-item"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "governance-alert", "error"], [1, "governance-alert", "success"], [1, "governance-modal-footer"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], [1, "scope-option-card"], ["type", "radio", "name", "enterpriseScopeMode", 3, "change", "value", "checked"], [1, "scope-option-content"], [1, "scope-option-title"], [1, "scope-option-desc"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-circle-check"]], template: function CommunicationProvidersResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
279
732
|
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1)(3, "button", 2);
|
|
280
|
-
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Template_button_click_3_listener() { return ctx.
|
|
733
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Template_button_click_3_listener() { return ctx.AddNewAgentIdentity(); });
|
|
281
734
|
i0.ɵɵelement(4, "i", 3);
|
|
282
735
|
i0.ɵɵelementStart(5, "span", 4);
|
|
283
|
-
i0.ɵɵtext(6, "Add
|
|
736
|
+
i0.ɵɵtext(6, "Add Utility Mailbox");
|
|
737
|
+
i0.ɵɵelementEnd()();
|
|
738
|
+
i0.ɵɵelementStart(7, "button", 5);
|
|
739
|
+
i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Template_button_click_7_listener() { return ctx.addNewProvider(); });
|
|
740
|
+
i0.ɵɵelement(8, "i", 6);
|
|
741
|
+
i0.ɵɵelementStart(9, "span", 4);
|
|
742
|
+
i0.ɵɵtext(10, "Add Provider");
|
|
284
743
|
i0.ɵɵelementEnd()()()();
|
|
285
|
-
i0.ɵɵelementStart(
|
|
286
|
-
i0.ɵɵconditionalCreate(
|
|
287
|
-
i0.ɵɵconditionalCreate(
|
|
744
|
+
i0.ɵɵelementStart(11, "mj-page-body");
|
|
745
|
+
i0.ɵɵconditionalCreate(12, CommunicationProvidersResourceComponent_Conditional_12_Template, 2, 0, "div", 7);
|
|
746
|
+
i0.ɵɵconditionalCreate(13, CommunicationProvidersResourceComponent_Conditional_13_Template, 27, 2);
|
|
288
747
|
i0.ɵɵelementEnd()();
|
|
289
748
|
} if (rf & 2) {
|
|
290
|
-
i0.ɵɵadvance(
|
|
291
|
-
i0.ɵɵconditional(ctx.isLoading ?
|
|
749
|
+
i0.ɵɵadvance(12);
|
|
750
|
+
i0.ɵɵconditional(ctx.isLoading ? 12 : -1);
|
|
292
751
|
i0.ɵɵadvance();
|
|
293
|
-
i0.ɵɵconditional(!ctx.isLoading ?
|
|
294
|
-
} }, dependencies: [i2.NgClass, i3.LoadingComponent, i4.MJButtonDirective, i4.MJPageHeaderComponent, i4.MJPageLayoutComponent, i4.MJPageBodyComponent], styles: [".loading-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 80px 0;\n }\n\n \n .providers-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 16px;\n }\n .provider-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n transition: all 0.15s ease;\n }\n .provider-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 2px 8px var(--mj-shadow-md);\n border-color: var(--mj-border-strong);\n }\n .provider-card.disabled[_ngcontent-%COMP%] { opacity: 0.65; }\n\n .provider-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 20px 20px 16px;\n }\n .provider-card-logo[_ngcontent-%COMP%] {\n width: 48px; height: 48px;\n border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n font-size: 22px; flex-shrink: 0;\n background: var(--mj-bg-surface-sunken);\n }\n .provider-card-logo.sendgrid[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .provider-card-logo.twilio[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .provider-card-logo.gmail[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .provider-card-logo.msgraph[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .provider-card-title[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n .provider-card-name[_ngcontent-%COMP%] {\n font-size: 15px; font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .provider-card-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n }\n .provider-card-status[_ngcontent-%COMP%] {\n font-size: 10px; font-weight: 700;\n text-transform: uppercase; letter-spacing: 0.5px;\n padding: 3px 10px; border-radius: 10px;\n flex-shrink: 0;\n }\n .provider-card-status.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .provider-card-status.disabled[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n .provider-card-body[_ngcontent-%COMP%] { padding: 0 20px 16px; }\n\n .provider-capabilities[_ngcontent-%COMP%] {\n display: flex; flex-wrap: wrap;\n gap: 6px; margin-bottom: 16px;\n }\n .capability-chip[_ngcontent-%COMP%] {\n display: inline-flex; align-items: center;\n gap: 4px; padding: 4px 10px;\n border-radius: 12px; font-size: 11px; font-weight: 500;\n }\n .capability-chip.supported[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .capability-chip.unsupported[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n text-decoration: line-through;\n }\n\n .provider-card-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px; padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n }\n .provider-stat[_ngcontent-%COMP%] { text-align: center; }\n .provider-stat-value[_ngcontent-%COMP%] {\n font-size: 16px; font-weight: 800;\n color: var(--mj-text-primary);\n }\n .provider-stat-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase; letter-spacing: 0.3px;\n }\n\n .provider-card-footer[_ngcontent-%COMP%] {\n display: flex;\n border-top: 1px solid var(--mj-border-default);\n }\n .provider-card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1; padding: 12px;\n border: none; background: transparent;\n font-size: 12px; font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer; transition: background 0.15s;\n font-family: inherit;\n display: flex; align-items: center;\n justify-content: center; gap: 6px;\n }\n .provider-card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n .provider-card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] + button[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mj-border-default);\n }"] });
|
|
752
|
+
i0.ɵɵconditional(!ctx.isLoading ? 13 : -1);
|
|
753
|
+
} }, dependencies: [i2.NgClass, i3.DefaultValueAccessor, i3.CheckboxControlValueAccessor, i3.NgControlStatus, i3.NgModel, i4.LoadingComponent, i5.MJButtonDirective, i5.MJPageHeaderComponent, i5.MJPageLayoutComponent, i5.MJPageBodyComponent], styles: [".loading-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 80px 0;\n }\n\n .section-heading[_ngcontent-%COMP%] {\n margin-bottom: 14px;\n }\n .utility-mailboxes-heading[_ngcontent-%COMP%] {\n margin-top: 32px;\n }\n .section-heading-title[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .section-heading-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n }\n\n \n .providers-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 16px;\n }\n .provider-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n transition: all 0.15s ease;\n }\n .provider-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 2px 8px var(--mj-shadow-md);\n border-color: var(--mj-border-strong);\n }\n .provider-card.disabled[_ngcontent-%COMP%] { opacity: 0.65; }\n\n .provider-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 20px 20px 16px;\n }\n .provider-card-logo[_ngcontent-%COMP%] {\n width: 48px; height: 48px;\n border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n font-size: 22px; flex-shrink: 0;\n background: var(--mj-bg-surface-sunken);\n }\n .provider-card-logo.sendgrid[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .provider-card-logo.twilio[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .provider-card-logo.gmail[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .provider-card-logo.msgraph[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .provider-card-title[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n .provider-card-name[_ngcontent-%COMP%] {\n font-size: 15px; font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .provider-card-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n }\n .provider-card-status[_ngcontent-%COMP%] {\n font-size: 10px; font-weight: 700;\n text-transform: uppercase; letter-spacing: 0.5px;\n padding: 3px 10px; border-radius: 10px;\n flex-shrink: 0;\n }\n .provider-card-status.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .provider-card-status.disabled[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n .provider-card-body[_ngcontent-%COMP%] { padding: 0 20px 16px; }\n\n .provider-capabilities[_ngcontent-%COMP%] {\n display: flex; flex-wrap: wrap;\n gap: 6px; margin-bottom: 12px;\n }\n .capability-chip[_ngcontent-%COMP%] {\n display: inline-flex; align-items: center;\n gap: 4px; padding: 4px 10px;\n border-radius: 12px; font-size: 11px; font-weight: 500;\n }\n .capability-chip.supported[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .capability-chip.unsupported[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n text-decoration: line-through;\n }\n\n \n .governance-banner[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 10px 12px;\n margin-bottom: 12px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .governance-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n font-size: 11px;\n }\n .governance-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n }\n .governance-domains[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n }\n .scope-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 8px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n }\n .scope-badge.utility[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .scope-badge.group[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .scope-badge.tenant[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 18%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n }\n\n .provider-card-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px; padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n }\n .provider-stat[_ngcontent-%COMP%] { text-align: center; }\n .provider-stat-value[_ngcontent-%COMP%] {\n font-size: 16px; font-weight: 800;\n color: var(--mj-text-primary);\n }\n .provider-stat-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase; letter-spacing: 0.3px;\n }\n\n .provider-card-footer[_ngcontent-%COMP%] {\n display: flex;\n border-top: 1px solid var(--mj-border-default);\n }\n .provider-card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1; padding: 12px 8px;\n border: none; background: transparent;\n font-size: 12px; font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer; transition: background 0.15s;\n font-family: inherit;\n display: flex; align-items: center;\n justify-content: center; gap: 6px;\n }\n .provider-card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n .provider-card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] + button[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mj-border-default);\n }\n\n \n .utility-empty-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px dashed var(--mj-border-default);\n border-radius: 12px;\n padding: 28px 24px;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n }\n .utility-empty-icon[_ngcontent-%COMP%] {\n font-size: 26px;\n color: var(--mj-text-muted);\n }\n .utility-empty-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n .utility-empty-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n max-width: 620px;\n line-height: 1.5;\n }\n .utility-mailboxes-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 14px;\n }\n .utility-mailbox-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n }\n .utility-mailbox-card.inactive[_ngcontent-%COMP%] {\n opacity: 0.65;\n }\n .utility-mailbox-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n }\n .utility-mailbox-icon[_ngcontent-%COMP%] {\n width: 38px; height: 38px;\n border-radius: 10px;\n display: flex; align-items: center; justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n .utility-mailbox-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n .utility-mailbox-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n .utility-mailbox-address[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n .utility-mailbox-meta[_ngcontent-%COMP%] {\n padding: 0 16px 14px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .utility-meta-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n font-size: 11px;\n }\n .utility-meta-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n }\n .utility-meta-val[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n }\n .utility-mailbox-footer[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-border-default);\n }\n .utility-mailbox-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px;\n border: none;\n background: transparent;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n }\n .utility-mailbox-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n \n .governance-modal-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n padding: 20px;\n }\n .governance-modal[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 14px;\n width: 100%;\n max-width: 640px;\n box-shadow: 0 12px 32px var(--mj-shadow-lg);\n overflow: hidden;\n }\n .governance-modal-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n .governance-modal-title[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .governance-modal-subtitle[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n }\n .modal-close-btn[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 16px;\n padding: 4px 8px;\n }\n .governance-modal-body[_ngcontent-%COMP%] {\n padding: 20px 24px;\n display: flex;\n flex-direction: column;\n gap: 18px;\n }\n .form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .form-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n .scope-options-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .scope-option-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n background: var(--mj-bg-surface);\n }\n .scope-option-card.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n }\n .scope-option-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n .scope-option-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n line-height: 1.4;\n }\n .form-input[_ngcontent-%COMP%] {\n padding: 9px 12px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n font-family: inherit;\n }\n .form-hint[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n }\n .checkbox-row[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .checkbox-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--mj-text-primary);\n cursor: pointer;\n }\n .governance-alert[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .governance-alert.error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .governance-alert.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .governance-modal-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 14px 24px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }"] });
|
|
295
754
|
};
|
|
296
755
|
CommunicationProvidersResourceComponent = __decorate([
|
|
297
756
|
RegisterClass(BaseResourceComponent, 'CommunicationProvidersResource')
|
|
@@ -302,10 +761,13 @@ export { CommunicationProvidersResourceComponent };
|
|
|
302
761
|
args: [{ standalone: false, selector: 'mj-communication-providers-resource', template: `
|
|
303
762
|
<mj-page-layout>
|
|
304
763
|
<mj-page-header
|
|
305
|
-
Title="Providers"
|
|
764
|
+
Title="Providers & Enterprise Mailbox Governance"
|
|
306
765
|
Icon="fa-solid fa-server"
|
|
307
|
-
Subtitle="Manage
|
|
766
|
+
Subtitle="Manage messaging & calendar providers, enterprise mailbox scope boundaries, and dedicated Agent Utility Mailboxes">
|
|
308
767
|
<div actions>
|
|
768
|
+
<button mjButton variant="secondary" size="sm" (click)="AddNewAgentIdentity()">
|
|
769
|
+
<i class="fa-solid fa-robot"></i> <span class="action-btn-label">Add Utility Mailbox</span>
|
|
770
|
+
</button>
|
|
309
771
|
<button mjButton variant="primary" size="sm" (click)="addNewProvider()">
|
|
310
772
|
<i class="fa-solid fa-plus"></i> <span class="action-btn-label">Add Provider</span>
|
|
311
773
|
</button>
|
|
@@ -315,13 +777,23 @@ export { CommunicationProvidersResourceComponent };
|
|
|
315
777
|
<mj-page-body>
|
|
316
778
|
@if (isLoading) {
|
|
317
779
|
<div class="loading-state">
|
|
318
|
-
<mj-loading text="Loading providers..."></mj-loading>
|
|
780
|
+
<mj-loading text="Loading providers and mailbox governance..."></mj-loading>
|
|
319
781
|
</div>
|
|
320
782
|
}
|
|
321
|
-
|
|
783
|
+
|
|
322
784
|
@if (!isLoading) {
|
|
785
|
+
<!-- PROVIDERS GRID -->
|
|
786
|
+
<div class="section-heading">
|
|
787
|
+
<div class="section-heading-title">
|
|
788
|
+
<i class="fa-solid fa-plug"></i> Configured Communication & Calendar Providers
|
|
789
|
+
</div>
|
|
790
|
+
<div class="section-heading-sub">
|
|
791
|
+
Enterprise credentials default to <strong>Utility Mailboxes Only</strong> so agents cannot read or send from arbitrary user inboxes unless explicitly scoped.
|
|
792
|
+
</div>
|
|
793
|
+
</div>
|
|
794
|
+
|
|
323
795
|
<div class="providers-grid">
|
|
324
|
-
@for (card of providerCards; track card) {
|
|
796
|
+
@for (card of providerCards; track card.Entity.ID) {
|
|
325
797
|
<div class="provider-card" [class.disabled]="card.Entity.Status === 'Disabled'">
|
|
326
798
|
<div class="provider-card-header">
|
|
327
799
|
<div class="provider-card-logo" [ngClass]="card.LogoClass">
|
|
@@ -343,6 +815,12 @@ export { CommunicationProvidersResourceComponent };
|
|
|
343
815
|
<span class="capability-chip" [class.supported]="card.Entity.SupportsReceiving" [class.unsupported]="!card.Entity.SupportsReceiving">
|
|
344
816
|
<i [class]="card.Entity.SupportsReceiving ? 'fa-solid fa-check' : 'fa-solid fa-xmark'"></i> Receiving
|
|
345
817
|
</span>
|
|
818
|
+
<span class="capability-chip" [class.supported]="card.Entity.SupportsCalendar" [class.unsupported]="!card.Entity.SupportsCalendar">
|
|
819
|
+
<i [class]="card.Entity.SupportsCalendar ? 'fa-regular fa-calendar-check' : 'fa-solid fa-xmark'"></i> Calendar
|
|
820
|
+
</span>
|
|
821
|
+
<span class="capability-chip" [class.supported]="card.Entity.SupportsFreeBusy" [class.unsupported]="!card.Entity.SupportsFreeBusy">
|
|
822
|
+
<i [class]="card.Entity.SupportsFreeBusy ? 'fa-solid fa-user-clock' : 'fa-solid fa-xmark'"></i> Free/Busy
|
|
823
|
+
</span>
|
|
346
824
|
@if (card.Entity.SupportsScheduledSending) {
|
|
347
825
|
<span class="capability-chip supported">
|
|
348
826
|
<i class="fa-solid fa-check"></i> Scheduled
|
|
@@ -364,6 +842,19 @@ export { CommunicationProvidersResourceComponent };
|
|
|
364
842
|
</span>
|
|
365
843
|
}
|
|
366
844
|
</div>
|
|
845
|
+
|
|
846
|
+
<!-- ENTERPRISE GOVERNANCE SUMMARY BANNER -->
|
|
847
|
+
<div class="governance-banner">
|
|
848
|
+
<div class="governance-row">
|
|
849
|
+
<span class="governance-label"><i class="fa-solid fa-shield-halved"></i> Mailbox Scope</span>
|
|
850
|
+
<span class="scope-badge" [ngClass]="card.ScopeBadgeClass">{{card.ScopeLabel}}</span>
|
|
851
|
+
</div>
|
|
852
|
+
<div class="governance-row">
|
|
853
|
+
<span class="governance-label"><i class="fa-solid fa-globe"></i> Allowed Domains</span>
|
|
854
|
+
<span class="governance-domains">{{card.Entity.AllowedEmailDomains || 'All domains (unrestricted)'}}</span>
|
|
855
|
+
</div>
|
|
856
|
+
</div>
|
|
857
|
+
|
|
367
858
|
<div class="provider-card-stats">
|
|
368
859
|
<div class="provider-stat">
|
|
369
860
|
<div class="provider-stat-value">{{card.SentCount}}</div>
|
|
@@ -380,8 +871,11 @@ export { CommunicationProvidersResourceComponent };
|
|
|
380
871
|
</div>
|
|
381
872
|
</div>
|
|
382
873
|
<div class="provider-card-footer">
|
|
874
|
+
<button (click)="OpenGovernanceModal(card.Entity)">
|
|
875
|
+
<i class="fa-solid fa-shield-halved"></i> Enterprise Scope
|
|
876
|
+
</button>
|
|
383
877
|
<button (click)="configureProvider(card.Entity)">
|
|
384
|
-
<i class="fa-solid fa-gear"></i>
|
|
878
|
+
<i class="fa-solid fa-gear"></i> Record
|
|
385
879
|
</button>
|
|
386
880
|
<button (click)="viewProviderLogs(card.Entity)">
|
|
387
881
|
<i class="fa-solid fa-chart-line"></i> Analytics
|
|
@@ -390,10 +884,160 @@ export { CommunicationProvidersResourceComponent };
|
|
|
390
884
|
</div>
|
|
391
885
|
}
|
|
392
886
|
</div>
|
|
887
|
+
|
|
888
|
+
<!-- AGENT UTILITY MAILBOXES SECTION (MJ: AI Bridge Agent Identities) -->
|
|
889
|
+
<div class="section-heading utility-mailboxes-heading">
|
|
890
|
+
<div class="section-heading-title">
|
|
891
|
+
<i class="fa-solid fa-envelope-circle-check"></i> Agent Utility Mailboxes (MJ: AI Bridge Agent Identities)
|
|
892
|
+
</div>
|
|
893
|
+
<div class="section-heading-sub">
|
|
894
|
+
Dedicated agent and shared utility email identities that Chief of Staff and other AI agents can use in <code>UtilityMailboxesOnly</code> or <code>SendAsAgent</code> mode without exposing personal employee inboxes.
|
|
895
|
+
</div>
|
|
896
|
+
</div>
|
|
897
|
+
|
|
898
|
+
@if (AgentUtilityMailboxes.length === 0) {
|
|
899
|
+
<div class="utility-empty-card">
|
|
900
|
+
<div class="utility-empty-icon"><i class="fa-solid fa-inbox"></i></div>
|
|
901
|
+
<div class="utility-empty-title">No Agent Utility Mailboxes Registered</div>
|
|
902
|
+
<div class="utility-empty-desc">
|
|
903
|
+
Register shared or per-user agent email addresses (e.g., <code>cos-exec@company.com</code> or <code>sage@company.com</code>) in <strong>MJ: AI Bridge Agent Identities</strong> so agents can send briefings and calendar invites safely when <code>EnterpriseScopeMode</code> is set to <code>UtilityMailboxesOnly</code>.
|
|
904
|
+
</div>
|
|
905
|
+
<button mjButton variant="secondary" size="sm" (click)="AddNewAgentIdentity()">
|
|
906
|
+
<i class="fa-solid fa-plus"></i> Register Utility Mailbox
|
|
907
|
+
</button>
|
|
908
|
+
</div>
|
|
909
|
+
} @else {
|
|
910
|
+
<div class="utility-mailboxes-grid">
|
|
911
|
+
@for (identity of AgentUtilityMailboxes; track identity.ID) {
|
|
912
|
+
<div class="utility-mailbox-card" [class.inactive]="!identity.IsActive">
|
|
913
|
+
<div class="utility-mailbox-header">
|
|
914
|
+
<div class="utility-mailbox-icon">
|
|
915
|
+
<i class="fa-solid fa-at"></i>
|
|
916
|
+
</div>
|
|
917
|
+
<div class="utility-mailbox-info">
|
|
918
|
+
<div class="utility-mailbox-title">{{identity.DisplayName || identity.IdentityValue}}</div>
|
|
919
|
+
<div class="utility-mailbox-address">{{identity.IdentityValue}}</div>
|
|
920
|
+
</div>
|
|
921
|
+
<span class="provider-card-status" [class.active]="identity.IsActive" [class.disabled]="!identity.IsActive">
|
|
922
|
+
{{identity.IsActive ? 'Active' : 'Inactive'}}
|
|
923
|
+
</span>
|
|
924
|
+
</div>
|
|
925
|
+
<div class="utility-mailbox-meta">
|
|
926
|
+
<div class="utility-meta-row">
|
|
927
|
+
<span class="utility-meta-label">Agent:</span>
|
|
928
|
+
<span class="utility-meta-val">{{identity.Agent || 'Unassigned'}}</span>
|
|
929
|
+
</div>
|
|
930
|
+
<div class="utility-meta-row">
|
|
931
|
+
<span class="utility-meta-label">Owner Scope:</span>
|
|
932
|
+
<span class="utility-meta-val">{{identity.User ? ('Dedicated: ' + identity.User) : 'Shared Org Utility Mailbox'}}</span>
|
|
933
|
+
</div>
|
|
934
|
+
<div class="utility-meta-row">
|
|
935
|
+
<span class="utility-meta-label">Bridge Provider:</span>
|
|
936
|
+
<span class="utility-meta-val">{{identity.Provider}}</span>
|
|
937
|
+
</div>
|
|
938
|
+
</div>
|
|
939
|
+
<div class="utility-mailbox-footer">
|
|
940
|
+
<button (click)="OpenAgentIdentity(identity)">
|
|
941
|
+
<i class="fa-solid fa-arrow-up-right-from-square"></i> Open Identity Record
|
|
942
|
+
</button>
|
|
943
|
+
</div>
|
|
944
|
+
</div>
|
|
945
|
+
}
|
|
946
|
+
</div>
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
<!-- ENTERPRISE GOVERNANCE EDITOR MODAL -->
|
|
950
|
+
@if (ActiveGovernanceProvider) {
|
|
951
|
+
<div class="governance-modal-backdrop" (click)="CloseGovernanceModal()">
|
|
952
|
+
<div class="governance-modal" (click)="$event.stopPropagation()">
|
|
953
|
+
<div class="governance-modal-header">
|
|
954
|
+
<div>
|
|
955
|
+
<div class="governance-modal-title">
|
|
956
|
+
<i class="fa-solid fa-shield-halved"></i> Enterprise Mailbox Governance — {{ActiveGovernanceProvider.Name}}
|
|
957
|
+
</div>
|
|
958
|
+
<div class="governance-modal-subtitle">
|
|
959
|
+
Configure which mailboxes and calendar scopes AI agents (including Chief of Staff) can access through this provider.
|
|
960
|
+
</div>
|
|
961
|
+
</div>
|
|
962
|
+
<button class="modal-close-btn" (click)="CloseGovernanceModal()">
|
|
963
|
+
<i class="fa-solid fa-xmark"></i>
|
|
964
|
+
</button>
|
|
965
|
+
</div>
|
|
966
|
+
|
|
967
|
+
<div class="governance-modal-body">
|
|
968
|
+
<div class="form-group">
|
|
969
|
+
<label class="form-label">Enterprise Mailbox Scope Mode (<code>EnterpriseScopeMode</code>)</label>
|
|
970
|
+
<div class="scope-options-list">
|
|
971
|
+
@for (opt of ScopeOptions; track opt.Value) {
|
|
972
|
+
<label class="scope-option-card" [class.selected]="DraftEnterpriseScopeMode === opt.Value">
|
|
973
|
+
<input
|
|
974
|
+
type="radio"
|
|
975
|
+
name="enterpriseScopeMode"
|
|
976
|
+
[value]="opt.Value"
|
|
977
|
+
[checked]="DraftEnterpriseScopeMode === opt.Value"
|
|
978
|
+
(change)="OnScopeModeChange(opt.Value)" />
|
|
979
|
+
<div class="scope-option-content">
|
|
980
|
+
<div class="scope-option-title">{{opt.Label}} (<code>{{opt.Value}}</code>)</div>
|
|
981
|
+
<div class="scope-option-desc">{{opt.Summary}}</div>
|
|
982
|
+
</div>
|
|
983
|
+
</label>
|
|
984
|
+
}
|
|
985
|
+
</div>
|
|
986
|
+
</div>
|
|
987
|
+
|
|
988
|
+
<div class="form-group">
|
|
989
|
+
<label class="form-label">Allowed Email Domains (<code>AllowedEmailDomains</code>)</label>
|
|
990
|
+
<input
|
|
991
|
+
type="text"
|
|
992
|
+
class="form-input"
|
|
993
|
+
placeholder="e.g. bluecypress.io, memberjunction.org (leave blank for any domain)"
|
|
994
|
+
[(ngModel)]="DraftAllowedEmailDomains" />
|
|
995
|
+
<div class="form-hint">
|
|
996
|
+
Comma-separated list of corporate email domains permitted for user-scoped inbox & calendar access. Users signed in with an email outside these domains will be blocked by the server-side security gate.
|
|
997
|
+
</div>
|
|
998
|
+
</div>
|
|
999
|
+
|
|
1000
|
+
<div class="form-group">
|
|
1001
|
+
<label class="form-label">Calendar & Scheduling Capabilities</label>
|
|
1002
|
+
<div class="checkbox-row">
|
|
1003
|
+
<label class="checkbox-item">
|
|
1004
|
+
<input type="checkbox" [(ngModel)]="DraftSupportsCalendar" />
|
|
1005
|
+
<span><strong>Supports Calendar Events</strong> (<code>SupportsCalendar</code> — read/create/update/respond/cancel events)</span>
|
|
1006
|
+
</label>
|
|
1007
|
+
<label class="checkbox-item">
|
|
1008
|
+
<input type="checkbox" [(ngModel)]="DraftSupportsFreeBusy" />
|
|
1009
|
+
<span><strong>Supports Free/Busy & Meeting Time Finder</strong> (<code>SupportsFreeBusy</code> — schedule availability & slot calculation)</span>
|
|
1010
|
+
</label>
|
|
1011
|
+
</div>
|
|
1012
|
+
</div>
|
|
1013
|
+
|
|
1014
|
+
@if (GovernanceSaveError) {
|
|
1015
|
+
<div class="governance-alert error">
|
|
1016
|
+
<i class="fa-solid fa-triangle-exclamation"></i> {{GovernanceSaveError}}
|
|
1017
|
+
</div>
|
|
1018
|
+
}
|
|
1019
|
+
@if (GovernanceSaveMessage) {
|
|
1020
|
+
<div class="governance-alert success">
|
|
1021
|
+
<i class="fa-solid fa-circle-check"></i> {{GovernanceSaveMessage}}
|
|
1022
|
+
</div>
|
|
1023
|
+
}
|
|
1024
|
+
</div>
|
|
1025
|
+
|
|
1026
|
+
<div class="governance-modal-footer">
|
|
1027
|
+
<button mjButton variant="secondary" size="sm" (click)="CloseGovernanceModal()" [disabled]="IsSavingGovernance">
|
|
1028
|
+
Cancel
|
|
1029
|
+
</button>
|
|
1030
|
+
<button mjButton variant="primary" size="sm" (click)="SaveGovernanceConfig()" [disabled]="IsSavingGovernance">
|
|
1031
|
+
<i class="fa-solid fa-floppy-disk"></i> {{IsSavingGovernance ? 'Saving...' : 'Save Governance Settings'}}
|
|
1032
|
+
</button>
|
|
1033
|
+
</div>
|
|
1034
|
+
</div>
|
|
1035
|
+
</div>
|
|
1036
|
+
}
|
|
393
1037
|
}
|
|
394
1038
|
</mj-page-body>
|
|
395
1039
|
</mj-page-layout>
|
|
396
|
-
`, styles: ["\n .loading-state {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 80px 0;\n }\n\n /* GRID */\n .providers-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 16px;\n }\n .provider-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n transition: all 0.15s ease;\n }\n .provider-card:hover {\n box-shadow: 0 2px 8px var(--mj-shadow-md);\n border-color: var(--mj-border-strong);\n }\n .provider-card.disabled { opacity: 0.65; }\n\n .provider-card-header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 20px 20px 16px;\n }\n .provider-card-logo {\n width: 48px; height: 48px;\n border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n font-size: 22px; flex-shrink: 0;\n background: var(--mj-bg-surface-sunken);\n }\n .provider-card-logo.sendgrid {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .provider-card-logo.twilio {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .provider-card-logo.gmail {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .provider-card-logo.msgraph {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .provider-card-title { flex: 1; min-width: 0; }\n .provider-card-name {\n font-size: 15px; font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .provider-card-desc {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n }\n .provider-card-status {\n font-size: 10px; font-weight: 700;\n text-transform: uppercase; letter-spacing: 0.5px;\n padding: 3px 10px; border-radius: 10px;\n flex-shrink: 0;\n }\n .provider-card-status.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .provider-card-status.disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n .provider-card-body { padding: 0 20px 16px; }\n\n .provider-capabilities {\n display: flex; flex-wrap: wrap;\n gap: 6px; margin-bottom: 16px;\n }\n .capability-chip {\n display: inline-flex; align-items: center;\n gap: 4px; padding: 4px 10px;\n border-radius: 12px; font-size: 11px; font-weight: 500;\n }\n .capability-chip.supported {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .capability-chip.unsupported {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n text-decoration: line-through;\n }\n\n .provider-card-stats {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px; padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n }\n .provider-stat { text-align: center; }\n .provider-stat-value {\n font-size: 16px; font-weight: 800;\n color: var(--mj-text-primary);\n }\n .provider-stat-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase; letter-spacing: 0.3px;\n }\n\n .provider-card-footer {\n display: flex;\n border-top: 1px solid var(--mj-border-default);\n }\n .provider-card-footer button {\n flex: 1; padding: 12px;\n border: none; background: transparent;\n font-size: 12px; font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer; transition: background 0.15s;\n font-family: inherit;\n display: flex; align-items: center;\n justify-content: center; gap: 6px;\n }\n .provider-card-footer button:hover {\n background: var(--mj-bg-surface-sunken);\n }\n .provider-card-footer button + button {\n border-left: 1px solid var(--mj-border-default);\n }\n "] }]
|
|
1040
|
+
`, styles: ["\n .loading-state {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 80px 0;\n }\n\n .section-heading {\n margin-bottom: 14px;\n }\n .utility-mailboxes-heading {\n margin-top: 32px;\n }\n .section-heading-title {\n font-size: 15px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .section-heading-sub {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n }\n\n /* GRID */\n .providers-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 16px;\n }\n .provider-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n transition: all 0.15s ease;\n }\n .provider-card:hover {\n box-shadow: 0 2px 8px var(--mj-shadow-md);\n border-color: var(--mj-border-strong);\n }\n .provider-card.disabled { opacity: 0.65; }\n\n .provider-card-header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 20px 20px 16px;\n }\n .provider-card-logo {\n width: 48px; height: 48px;\n border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n font-size: 22px; flex-shrink: 0;\n background: var(--mj-bg-surface-sunken);\n }\n .provider-card-logo.sendgrid {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .provider-card-logo.twilio {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .provider-card-logo.gmail {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .provider-card-logo.msgraph {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .provider-card-title { flex: 1; min-width: 0; }\n .provider-card-name {\n font-size: 15px; font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .provider-card-desc {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n }\n .provider-card-status {\n font-size: 10px; font-weight: 700;\n text-transform: uppercase; letter-spacing: 0.5px;\n padding: 3px 10px; border-radius: 10px;\n flex-shrink: 0;\n }\n .provider-card-status.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .provider-card-status.disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n .provider-card-body { padding: 0 20px 16px; }\n\n .provider-capabilities {\n display: flex; flex-wrap: wrap;\n gap: 6px; margin-bottom: 12px;\n }\n .capability-chip {\n display: inline-flex; align-items: center;\n gap: 4px; padding: 4px 10px;\n border-radius: 12px; font-size: 11px; font-weight: 500;\n }\n .capability-chip.supported {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .capability-chip.unsupported {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n text-decoration: line-through;\n }\n\n /* GOVERNANCE BANNER */\n .governance-banner {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 10px 12px;\n margin-bottom: 12px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .governance-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n font-size: 11px;\n }\n .governance-label {\n color: var(--mj-text-muted);\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n }\n .governance-domains {\n color: var(--mj-text-primary);\n font-weight: 500;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n }\n .scope-badge {\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 8px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n }\n .scope-badge.utility {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .scope-badge.group {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .scope-badge.tenant {\n background: color-mix(in srgb, var(--mj-status-warning) 18%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n }\n\n .provider-card-stats {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px; padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n }\n .provider-stat { text-align: center; }\n .provider-stat-value {\n font-size: 16px; font-weight: 800;\n color: var(--mj-text-primary);\n }\n .provider-stat-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase; letter-spacing: 0.3px;\n }\n\n .provider-card-footer {\n display: flex;\n border-top: 1px solid var(--mj-border-default);\n }\n .provider-card-footer button {\n flex: 1; padding: 12px 8px;\n border: none; background: transparent;\n font-size: 12px; font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer; transition: background 0.15s;\n font-family: inherit;\n display: flex; align-items: center;\n justify-content: center; gap: 6px;\n }\n .provider-card-footer button:hover {\n background: var(--mj-bg-surface-sunken);\n }\n .provider-card-footer button + button {\n border-left: 1px solid var(--mj-border-default);\n }\n\n /* UTILITY MAILBOXES */\n .utility-empty-card {\n background: var(--mj-bg-surface-card);\n border: 1px dashed var(--mj-border-default);\n border-radius: 12px;\n padding: 28px 24px;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n }\n .utility-empty-icon {\n font-size: 26px;\n color: var(--mj-text-muted);\n }\n .utility-empty-title {\n font-size: 14px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n .utility-empty-desc {\n font-size: 12px;\n color: var(--mj-text-muted);\n max-width: 620px;\n line-height: 1.5;\n }\n .utility-mailboxes-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 14px;\n }\n .utility-mailbox-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n }\n .utility-mailbox-card.inactive {\n opacity: 0.65;\n }\n .utility-mailbox-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n }\n .utility-mailbox-icon {\n width: 38px; height: 38px;\n border-radius: 10px;\n display: flex; align-items: center; justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n .utility-mailbox-info {\n flex: 1;\n min-width: 0;\n }\n .utility-mailbox-title {\n font-size: 14px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n .utility-mailbox-address {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n .utility-mailbox-meta {\n padding: 0 16px 14px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .utility-meta-row {\n display: flex;\n justify-content: space-between;\n font-size: 11px;\n }\n .utility-meta-label {\n color: var(--mj-text-muted);\n }\n .utility-meta-val {\n color: var(--mj-text-primary);\n font-weight: 600;\n }\n .utility-mailbox-footer {\n border-top: 1px solid var(--mj-border-default);\n }\n .utility-mailbox-footer button {\n width: 100%;\n padding: 10px;\n border: none;\n background: transparent;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n }\n .utility-mailbox-footer button:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n /* MODAL */\n .governance-modal-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n padding: 20px;\n }\n .governance-modal {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 14px;\n width: 100%;\n max-width: 640px;\n box-shadow: 0 12px 32px var(--mj-shadow-lg);\n overflow: hidden;\n }\n .governance-modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n .governance-modal-title {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .governance-modal-subtitle {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n }\n .modal-close-btn {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 16px;\n padding: 4px 8px;\n }\n .governance-modal-body {\n padding: 20px 24px;\n display: flex;\n flex-direction: column;\n gap: 18px;\n }\n .form-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .form-label {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n .scope-options-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .scope-option-card {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n background: var(--mj-bg-surface);\n }\n .scope-option-card.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n }\n .scope-option-title {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n .scope-option-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n line-height: 1.4;\n }\n .form-input {\n padding: 9px 12px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n font-family: inherit;\n }\n .form-hint {\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n }\n .checkbox-row {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .checkbox-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--mj-text-primary);\n cursor: pointer;\n }\n .governance-alert {\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .governance-alert.error {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n .governance-alert.success {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .governance-modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 14px 24px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n "] }]
|
|
397
1041
|
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.NavigationService }], null); })();
|
|
398
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CommunicationProvidersResourceComponent, { className: "CommunicationProvidersResourceComponent", filePath: "src/Communication/communication-providers-resource.component.ts", lineNumber:
|
|
1042
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CommunicationProvidersResourceComponent, { className: "CommunicationProvidersResourceComponent", filePath: "src/Communication/communication-providers-resource.component.ts", lineNumber: 788 }); })();
|
|
399
1043
|
//# sourceMappingURL=communication-providers-resource.component.js.map
|