@memberjunction/ng-dashboards 6.2.0-edge.4 → 6.2.0-edge.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +28 -0
  2. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
  3. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  4. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +15 -7
  5. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  6. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
  7. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  8. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +209 -57
  9. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  10. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
  11. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
  12. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
  13. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +28 -16
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
  18. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  19. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +30 -6
  20. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  21. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
  22. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  23. package/dist/AI/components/tags/tags-resource.component.js +15 -7
  24. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  25. package/dist/AI/components/vectors/sensitive-fields.d.ts +58 -0
  26. package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -0
  27. package/dist/AI/components/vectors/sensitive-fields.js +251 -0
  28. package/dist/AI/components/vectors/sensitive-fields.js.map +1 -0
  29. package/dist/AI/components/vectors/vector-document-rules.d.ts +139 -0
  30. package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -0
  31. package/dist/AI/components/vectors/vector-document-rules.js +182 -0
  32. package/dist/AI/components/vectors/vector-document-rules.js.map +1 -0
  33. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +83 -14
  34. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  35. package/dist/AI/components/vectors/vector-management-resource.component.js +546 -271
  36. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  37. package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
  38. package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
  39. package/dist/AI/components/vectors/vector-store-selection.js +57 -0
  40. package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
  41. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +236 -0
  42. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
  43. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +374 -0
  44. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
  45. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +195 -0
  46. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +1 -0
  47. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +2910 -0
  48. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +1 -0
  49. package/dist/ChiefOfStaff/index.d.ts +3 -0
  50. package/dist/ChiefOfStaff/index.d.ts.map +1 -0
  51. package/dist/ChiefOfStaff/index.js +3 -0
  52. package/dist/ChiefOfStaff/index.js.map +1 -0
  53. package/dist/Communication/communication-agent-context.d.ts +11 -1
  54. package/dist/Communication/communication-agent-context.d.ts.map +1 -1
  55. package/dist/Communication/communication-agent-context.js +15 -0
  56. package/dist/Communication/communication-agent-context.js.map +1 -1
  57. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  58. package/dist/Communication/communication-dashboard.component.js +5 -0
  59. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  60. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  61. package/dist/Communication/communication-logs-resource.component.js +2 -1
  62. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  63. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  64. package/dist/Communication/communication-monitor-resource.component.js +23 -18
  65. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  66. package/dist/Communication/communication-providers-resource.component.d.ts +27 -1
  67. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  68. package/dist/Communication/communication-providers-resource.component.js +722 -78
  69. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  70. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  71. package/dist/Communication/communication-runs-resource.component.js +11 -10
  72. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  73. package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
  74. package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
  75. package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
  76. package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
  77. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +49 -0
  78. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  79. package/dist/DataExplorer/data-explorer-dashboard.component.js +220 -55
  80. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  81. package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
  82. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  83. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  84. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  85. package/dist/DevTools/app-state-inspector.component.js +1 -0
  86. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  87. package/dist/DevTools/class-registry.component.d.ts.map +1 -1
  88. package/dist/DevTools/class-registry.component.js +1 -0
  89. package/dist/DevTools/class-registry.component.js.map +1 -1
  90. package/dist/DevTools/event-monitor.component.d.ts.map +1 -1
  91. package/dist/DevTools/event-monitor.component.js +2 -0
  92. package/dist/DevTools/event-monitor.component.js.map +1 -1
  93. package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
  94. package/dist/DevTools/graphql-console.component.js.map +1 -1
  95. package/dist/DevTools/grid-width-lab.component.d.ts.map +1 -1
  96. package/dist/DevTools/grid-width-lab.component.js +1 -0
  97. package/dist/DevTools/grid-width-lab.component.js.map +1 -1
  98. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  99. package/dist/DevTools/layout-inspector.component.js +1 -0
  100. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  101. package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -1
  102. package/dist/DevTools/lazy-module-status.component.js +1 -0
  103. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  104. package/dist/DevTools/settings-explorer.component.d.ts.map +1 -1
  105. package/dist/DevTools/settings-explorer.component.js +1 -0
  106. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  107. package/dist/DevTools/tab-strip-lab.component.d.ts.map +1 -1
  108. package/dist/DevTools/tab-strip-lab.component.js +1 -0
  109. package/dist/DevTools/tab-strip-lab.component.js.map +1 -1
  110. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +5 -0
  111. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  112. package/dist/EntityAdmin/entity-admin-dashboard.component.js +8 -5
  113. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  114. package/dist/Integration/components/overview/overview.component.js +2 -2
  115. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +2 -2
  116. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  117. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -1
  118. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
  119. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +24 -2
  120. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
  121. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +16 -2
  122. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
  123. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +87 -33
  124. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  125. package/dist/LoginStudio/login-studio-inspector.component.d.ts +130 -0
  126. package/dist/LoginStudio/login-studio-inspector.component.d.ts.map +1 -0
  127. package/dist/LoginStudio/login-studio-inspector.component.js +781 -0
  128. package/dist/LoginStudio/login-studio-inspector.component.js.map +1 -0
  129. package/dist/LoginStudio/login-studio-resource.component.d.ts +161 -0
  130. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -0
  131. package/dist/LoginStudio/login-studio-resource.component.js +890 -0
  132. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -0
  133. package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
  134. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  135. package/dist/MCP/mcp-dashboard.component.js +118 -65
  136. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  137. package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
  138. package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
  139. package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
  140. package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
  141. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
  142. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  143. package/dist/PredictiveStudio/components/ps-experiments.component.js +256 -521
  144. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  145. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
  146. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
  147. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +122 -249
  148. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
  149. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
  150. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  151. package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
  152. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  153. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
  154. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  155. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +335 -326
  156. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  157. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
  158. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
  159. package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
  160. package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
  161. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
  162. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  163. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +51 -2
  164. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  165. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
  166. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
  167. package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
  168. package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
  169. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
  170. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
  171. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
  172. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
  173. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
  174. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  175. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +185 -103
  176. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  177. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
  178. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  179. package/dist/Workflows/components/workflow-runs-resource.component.js +4 -4
  180. package/dist/Workflows/components/workflow-runs-resource.component.js.map +1 -1
  181. package/dist/ai-dashboards.module.d.ts +22 -21
  182. package/dist/ai-dashboards.module.d.ts.map +1 -1
  183. package/dist/ai-dashboards.module.js +8 -2
  184. package/dist/ai-dashboards.module.js.map +1 -1
  185. package/dist/core-dashboards.module.d.ts +2 -1
  186. package/dist/core-dashboards.module.d.ts.map +1 -1
  187. package/dist/core-dashboards.module.js +11 -3
  188. package/dist/core-dashboards.module.js.map +1 -1
  189. package/dist/public-api.d.ts +3 -0
  190. package/dist/public-api.d.ts.map +1 -1
  191. package/dist/public-api.js +4 -0
  192. package/dist/public-api.js.map +1 -1
  193. package/package.json +72 -69
  194. package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
  195. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
  196. package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
  197. package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
  198. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
  199. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
  200. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
  201. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
  202. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
  203. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
  204. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
  205. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
@@ -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 "@memberjunction/ng-shared-generic";
15
- import * as i4 from "@memberjunction/ng-ui-components";
16
- function CommunicationProvidersResourceComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
17
- i0.ɵɵelementStart(0, "div", 5);
18
- i0.ɵɵelement(1, "mj-loading", 7);
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 CommunicationProvidersResourceComponent_Conditional_9_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "span", 19);
23
- i0.ɵɵelement(1, "i", 28);
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 CommunicationProvidersResourceComponent_Conditional_9_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
28
- i0.ɵɵelementStart(0, "span", 19);
29
- i0.ɵɵelement(1, "i", 28);
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 CommunicationProvidersResourceComponent_Conditional_9_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementStart(0, "span", 19);
35
- i0.ɵɵelement(1, "i", 28);
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 CommunicationProvidersResourceComponent_Conditional_9_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelementStart(0, "span", 19);
41
- i0.ɵɵelement(1, "i", 28);
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 CommunicationProvidersResourceComponent_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
49
+ function CommunicationProvidersResourceComponent_Conditional_13_For_11_Template(rf, ctx) { if (rf & 1) {
46
50
  const _r1 = i0.ɵɵgetCurrentView();
47
- i0.ɵɵelementStart(0, "div", 9)(1, "div", 10)(2, "div", 11);
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", 12)(5, "div", 13);
54
+ i0.ɵɵelementStart(4, "div", 23)(5, "div", 24);
51
55
  i0.ɵɵtext(6);
52
56
  i0.ɵɵelementEnd();
53
- i0.ɵɵelementStart(7, "div", 14);
57
+ i0.ɵɵelementStart(7, "div", 25);
54
58
  i0.ɵɵtext(8);
55
59
  i0.ɵɵelementEnd()();
56
- i0.ɵɵelementStart(9, "span", 15);
60
+ i0.ɵɵelementStart(9, "span", 26);
57
61
  i0.ɵɵtext(10);
58
62
  i0.ɵɵelementEnd()();
59
- i0.ɵɵelementStart(11, "div", 16)(12, "div", 17)(13, "span", 18);
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", 18);
67
+ i0.ɵɵelementStart(16, "span", 29);
64
68
  i0.ɵɵelement(17, "i");
65
69
  i0.ɵɵtext(18, " Receiving ");
66
70
  i0.ɵɵelementEnd();
67
- i0.ɵɵconditionalCreate(19, CommunicationProvidersResourceComponent_Conditional_9_For_2_Conditional_19_Template, 3, 0, "span", 19);
68
- i0.ɵɵconditionalCreate(20, CommunicationProvidersResourceComponent_Conditional_9_For_2_Conditional_20_Template, 3, 0, "span", 19);
69
- i0.ɵɵconditionalCreate(21, CommunicationProvidersResourceComponent_Conditional_9_For_2_Conditional_21_Template, 3, 0, "span", 19);
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(23, "div", 20)(24, "div", 21)(25, "div", 22);
73
- i0.ɵɵtext(26);
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(27, "div", 23);
76
- i0.ɵɵtext(28, "Sent (24h)");
101
+ i0.ɵɵelementStart(46, "div", 41);
102
+ i0.ɵɵtext(47, "Sent (24h)");
77
103
  i0.ɵɵelementEnd()();
78
- i0.ɵɵelementStart(29, "div", 21)(30, "div", 22);
79
- i0.ɵɵtext(31);
104
+ i0.ɵɵelementStart(48, "div", 39)(49, "div", 40);
105
+ i0.ɵɵtext(50);
80
106
  i0.ɵɵelementEnd();
81
- i0.ɵɵelementStart(32, "div", 23);
82
- i0.ɵɵtext(33, "Success");
107
+ i0.ɵɵelementStart(51, "div", 41);
108
+ i0.ɵɵtext(52, "Success");
83
109
  i0.ɵɵelementEnd()();
84
- i0.ɵɵelementStart(34, "div", 21)(35, "div", 22);
85
- i0.ɵɵtext(36);
110
+ i0.ɵɵelementStart(53, "div", 39)(54, "div", 40);
111
+ i0.ɵɵtext(55);
86
112
  i0.ɵɵelementEnd();
87
- i0.ɵɵelementStart(37, "div", 23);
88
- i0.ɵɵtext(38, "Failed");
113
+ i0.ɵɵelementStart(56, "div", 41);
114
+ i0.ɵɵtext(57, "Failed");
89
115
  i0.ɵɵelementEnd()()()();
90
- i0.ɵɵelementStart(39, "div", 24)(40, "button", 25);
91
- i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_9_For_2_Template_button_click_40_listener() { const card_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.configureProvider(card_r2.Entity)); });
92
- i0.ɵɵelement(41, "i", 26);
93
- i0.ɵɵtext(42, " Configure ");
94
- i0.ɵɵelementEnd();
95
- i0.ɵɵelementStart(43, "button", 25);
96
- i0.ɵɵlistener("click", function CommunicationProvidersResourceComponent_Conditional_9_For_2_Template_button_click_43_listener() { const card_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.viewProviderLogs(card_r2.Entity)); });
97
- i0.ɵɵelement(44, "i", 27);
98
- i0.ɵɵtext(45, " Analytics ");
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.ɵɵconditional(card_r2.Entity.SupportsScheduledSending ? 19 : -1);
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.SupportsDrafts ? 20 : -1);
167
+ i0.ɵɵconditional(card_r2.Entity.SupportsForwarding ? 27 : -1);
127
168
  i0.ɵɵadvance();
128
- i0.ɵɵconditional(card_r2.Entity.SupportsForwarding ? 21 : -1);
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.ɵɵconditional(card_r2.Entity.SupportsReplying ? 22 : -1);
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 CommunicationProvidersResourceComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
139
- i0.ɵɵelementStart(0, "div", 6);
140
- i0.ɵɵrepeaterCreate(1, CommunicationProvidersResourceComponent_Conditional_9_For_2_Template, 46, 28, "div", 8, i0.ɵɵrepeaterTrackByIdentity);
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 ctx_r2 = i0.ɵɵnextContext();
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: 10, vars: 2, consts: [["Title", "Providers", "Icon", "fa-solid fa-server", "Subtitle", "Manage your messaging service integrations"], ["actions", ""], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "action-btn-label"], [1, "loading-state"], [1, "providers-grid"], ["text", "Loading providers..."], [1, "provider-card", 3, "disabled"], [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, "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"]], template: function CommunicationProvidersResourceComponent_Template(rf, ctx) { if (rf & 1) {
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.addNewProvider(); });
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 Provider");
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(7, "mj-page-body");
286
- i0.ɵɵconditionalCreate(8, CommunicationProvidersResourceComponent_Conditional_8_Template, 2, 0, "div", 5);
287
- i0.ɵɵconditionalCreate(9, CommunicationProvidersResourceComponent_Conditional_9_Template, 3, 0, "div", 6);
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(8);
291
- i0.ɵɵconditional(ctx.isLoading ? 8 : -1);
749
+ i0.ɵɵadvance(12);
750
+ i0.ɵɵconditional(ctx.isLoading ? 12 : -1);
292
751
  i0.ɵɵadvance();
293
- i0.ɵɵconditional(!ctx.isLoading ? 9 : -1);
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 your messaging service integrations">
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> Configure
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&#64;company.com</code> or <code>sage&#64;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 &amp; 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 &amp; 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 &amp; Meeting Time Finder</strong> (<code>SupportsFreeBusy</code> — schedule availability &amp; 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: 258 }); })();
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