@memberjunction/ng-dashboards 6.2.0-edge.6 → 6.2.0-edge.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -16
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
- package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +6 -6
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +3 -2
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +12 -6
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +4 -2
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/Actions/action-result-code.d.ts +80 -0
- package/dist/Actions/action-result-code.d.ts.map +1 -0
- package/dist/Actions/action-result-code.js +163 -0
- package/dist/Actions/action-result-code.js.map +1 -0
- package/dist/Actions/components/actions-overview.component.d.ts +8 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +12 -9
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +65 -42
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +5 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +92 -130
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +189 -274
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
- package/dist/ChiefOfStaff/index.d.ts +4 -1
- package/dist/ChiefOfStaff/index.d.ts.map +1 -1
- package/dist/ChiefOfStaff/index.js +4 -1
- package/dist/ChiefOfStaff/index.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +3 -3
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +3 -3
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +3 -0
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +21 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +32 -5
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +2 -2
- package/dist/DevTools/lazy-module-status.component.js +2 -2
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +5 -0
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +2 -2
- package/dist/Integration/services/integration-data.service.d.ts +1 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +4 -3
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.js +1 -0
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +1 -0
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +3 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js +1 -0
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +1 -0
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.js +22 -4
- package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
- package/dist/VideoStudio/index.d.ts +12 -0
- package/dist/VideoStudio/index.d.ts.map +1 -0
- package/dist/VideoStudio/index.js +12 -0
- package/dist/VideoStudio/index.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.js +992 -0
- package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
- package/dist/ai-dashboards.module.d.ts +25 -22
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +23 -7
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +7 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +9 -2
- package/dist/public-api.js.map +1 -1
- package/dist/shared/action-scheduled-job.d.ts.map +1 -1
- package/dist/shared/action-scheduled-job.js +2 -0
- package/dist/shared/action-scheduled-job.js.map +1 -1
- package/dist/video-studio-dashboards.module.d.ts +40 -0
- package/dist/video-studio-dashboards.module.d.ts.map +1 -0
- package/dist/video-studio-dashboards.module.js +159 -0
- package/dist/video-studio-dashboards.module.js.map +1 -0
- package/package.json +77 -71
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +0 -195
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +0 -1
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +0 -2910
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +0 -1
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
8
|
+
import { CompositeKey } from '@memberjunction/core';
|
|
9
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
10
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
11
|
+
import { BuildPolicyDraftFromEntity, CHIEF_OF_STAFF_AGENT_NAME, } from './chief-of-staff-agent-context';
|
|
12
|
+
import { BaseChiefOfStaffPage } from './chief-of-staff-page-base';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/forms";
|
|
15
|
+
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
16
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
17
|
+
const _forTrack0 = ($index, $item) => $item.Value;
|
|
18
|
+
function ChiefOfStaffGovernanceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
20
|
+
i0.ɵɵelementStart(0, "div", 6)(1, "div", 7);
|
|
21
|
+
i0.ɵɵelement(2, "i", 8);
|
|
22
|
+
i0.ɵɵelementStart(3, "span");
|
|
23
|
+
i0.ɵɵtext(4);
|
|
24
|
+
i0.ɵɵelementEnd()();
|
|
25
|
+
i0.ɵɵelementStart(5, "button", 9);
|
|
26
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_5_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.DismissBanner()); });
|
|
27
|
+
i0.ɵɵelement(6, "i", 10);
|
|
28
|
+
i0.ɵɵelementEnd()();
|
|
29
|
+
} if (rf & 2) {
|
|
30
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
31
|
+
i0.ɵɵclassProp("cos-banner--success", ctx_r1.FeedbackBanner.Type === "success")("cos-banner--error", ctx_r1.FeedbackBanner.Type === "error");
|
|
32
|
+
i0.ɵɵadvance(2);
|
|
33
|
+
i0.ɵɵclassProp("fa-circle-check", ctx_r1.FeedbackBanner.Type === "success")("fa-circle-exclamation", ctx_r1.FeedbackBanner.Type === "error");
|
|
34
|
+
i0.ɵɵadvance(2);
|
|
35
|
+
i0.ɵɵtextInterpolate(ctx_r1.FeedbackBanner.Message);
|
|
36
|
+
} }
|
|
37
|
+
function ChiefOfStaffGovernanceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
39
|
+
i0.ɵɵelement(1, "mj-loading", 11);
|
|
40
|
+
i0.ɵɵelementEnd();
|
|
41
|
+
} }
|
|
42
|
+
function ChiefOfStaffGovernanceComponent_Conditional_7_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
44
|
+
i0.ɵɵelementStart(0, "button", 47);
|
|
45
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenPolicyEntityRecord()); });
|
|
46
|
+
i0.ɵɵelement(1, "i", 48);
|
|
47
|
+
i0.ɵɵtext(2, " Open Policy Record ");
|
|
48
|
+
i0.ɵɵelementEnd();
|
|
49
|
+
} }
|
|
50
|
+
function ChiefOfStaffGovernanceComponent_Conditional_7_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
52
|
+
i0.ɵɵelementStart(0, "button", 49);
|
|
53
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ResetDraftPolicy()); });
|
|
54
|
+
i0.ɵɵtext(1, " Reset Changes ");
|
|
55
|
+
i0.ɵɵelementEnd();
|
|
56
|
+
} if (rf & 2) {
|
|
57
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
58
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsSavingPolicy);
|
|
59
|
+
} }
|
|
60
|
+
function ChiefOfStaffGovernanceComponent_Conditional_7_For_26_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
62
|
+
i0.ɵɵelementStart(0, "button", 42);
|
|
63
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_For_26_Template_button_click_0_listener() { const st_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetPolicyStatus(st_r7)); });
|
|
64
|
+
i0.ɵɵtext(1);
|
|
65
|
+
i0.ɵɵelementEnd();
|
|
66
|
+
} if (rf & 2) {
|
|
67
|
+
const st_r7 = ctx.$implicit;
|
|
68
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
69
|
+
i0.ɵɵproperty("variant", ctx_r1.DraftPolicy.Status === st_r7 ? "primary" : "outline");
|
|
70
|
+
i0.ɵɵadvance();
|
|
71
|
+
i0.ɵɵtextInterpolate1(" ", st_r7, " ");
|
|
72
|
+
} }
|
|
73
|
+
function ChiefOfStaffGovernanceComponent_Conditional_7_For_29_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
i0.ɵɵelement(0, "i", 53);
|
|
75
|
+
} }
|
|
76
|
+
function ChiefOfStaffGovernanceComponent_Conditional_7_For_29_Template(rf, ctx) { if (rf & 1) {
|
|
77
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
78
|
+
i0.ɵɵelementStart(0, "div", 50);
|
|
79
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_For_29_Template_div_click_0_listener() { const mode_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetCoordinationMode(mode_r9.Value)); });
|
|
80
|
+
i0.ɵɵelementStart(1, "div", 51)(2, "span", 52);
|
|
81
|
+
i0.ɵɵtext(3);
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
i0.ɵɵconditionalCreate(4, ChiefOfStaffGovernanceComponent_Conditional_7_For_29_Conditional_4_Template, 1, 0, "i", 53);
|
|
84
|
+
i0.ɵɵelementEnd();
|
|
85
|
+
i0.ɵɵelementStart(5, "p", 54);
|
|
86
|
+
i0.ɵɵtext(6);
|
|
87
|
+
i0.ɵɵelementEnd()();
|
|
88
|
+
} if (rf & 2) {
|
|
89
|
+
const mode_r9 = ctx.$implicit;
|
|
90
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
91
|
+
i0.ɵɵclassProp("cos-mode-card--selected", ctx_r1.DraftPolicy.CoordinationMode === mode_r9.Value);
|
|
92
|
+
i0.ɵɵadvance(3);
|
|
93
|
+
i0.ɵɵtextInterpolate(mode_r9.Label);
|
|
94
|
+
i0.ɵɵadvance();
|
|
95
|
+
i0.ɵɵconditional(ctx_r1.DraftPolicy.CoordinationMode === mode_r9.Value ? 4 : -1);
|
|
96
|
+
i0.ɵɵadvance(2);
|
|
97
|
+
i0.ɵɵtextInterpolate(mode_r9.Description);
|
|
98
|
+
} }
|
|
99
|
+
function ChiefOfStaffGovernanceComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
100
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
101
|
+
i0.ɵɵelementStart(0, "div", 5)(1, "div", 12)(2, "div")(3, "h3", 13);
|
|
102
|
+
i0.ɵɵelement(4, "i", 14);
|
|
103
|
+
i0.ɵɵtext(5, " Chief of Staff Governance Policy ");
|
|
104
|
+
i0.ɵɵelementEnd();
|
|
105
|
+
i0.ɵɵelementStart(6, "p", 15);
|
|
106
|
+
i0.ɵɵtext(7, " Backed by ");
|
|
107
|
+
i0.ɵɵelementStart(8, "code");
|
|
108
|
+
i0.ɵɵtext(9, "MJ: AI Agent User Policies");
|
|
109
|
+
i0.ɵɵelementEnd();
|
|
110
|
+
i0.ɵɵtext(10, " \u2014 controls coordination autonomy, communication channels, and approval guardrails for your Chief of Staff. ");
|
|
111
|
+
i0.ɵɵelementEnd()();
|
|
112
|
+
i0.ɵɵelementStart(11, "div", 16);
|
|
113
|
+
i0.ɵɵconditionalCreate(12, ChiefOfStaffGovernanceComponent_Conditional_7_Conditional_12_Template, 3, 0, "button", 17);
|
|
114
|
+
i0.ɵɵconditionalCreate(13, ChiefOfStaffGovernanceComponent_Conditional_7_Conditional_13_Template, 2, 1, "button", 18);
|
|
115
|
+
i0.ɵɵelementStart(14, "button", 19);
|
|
116
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SaveGovernancePolicy()); });
|
|
117
|
+
i0.ɵɵelement(15, "i", 20);
|
|
118
|
+
i0.ɵɵtext(16);
|
|
119
|
+
i0.ɵɵelementEnd()()();
|
|
120
|
+
i0.ɵɵelementStart(17, "section", 21)(18, "div", 22)(19, "div")(20, "h4", 23);
|
|
121
|
+
i0.ɵɵtext(21, "1. Autonomy & Coordination Mode");
|
|
122
|
+
i0.ɵɵelementEnd();
|
|
123
|
+
i0.ɵɵelementStart(22, "p", 24);
|
|
124
|
+
i0.ɵɵtext(23, " Select how proactively your Chief of Staff operates across your workspace ");
|
|
125
|
+
i0.ɵɵelementEnd()();
|
|
126
|
+
i0.ɵɵelementStart(24, "div", 25);
|
|
127
|
+
i0.ɵɵrepeaterCreate(25, ChiefOfStaffGovernanceComponent_Conditional_7_For_26_Template, 2, 2, "button", 26, i0.ɵɵrepeaterTrackByIdentity);
|
|
128
|
+
i0.ɵɵelementEnd()();
|
|
129
|
+
i0.ɵɵelementStart(27, "div", 27);
|
|
130
|
+
i0.ɵɵrepeaterCreate(28, ChiefOfStaffGovernanceComponent_Conditional_7_For_29_Template, 7, 5, "div", 28, _forTrack0);
|
|
131
|
+
i0.ɵɵelementEnd();
|
|
132
|
+
i0.ɵɵelementStart(30, "div", 29)(31, "label", 30)(32, "span", 31);
|
|
133
|
+
i0.ɵɵtext(33, "Custom Display Name");
|
|
134
|
+
i0.ɵɵelementEnd();
|
|
135
|
+
i0.ɵɵelementStart(34, "input", 32);
|
|
136
|
+
i0.ɵɵlistener("input", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_input_input_34_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDisplayNameInput($event)); });
|
|
137
|
+
i0.ɵɵelementEnd()();
|
|
138
|
+
i0.ɵɵelementStart(35, "label", 30)(36, "span", 31);
|
|
139
|
+
i0.ɵɵtext(37, "Default Data Access Mode");
|
|
140
|
+
i0.ɵɵelementEnd();
|
|
141
|
+
i0.ɵɵelementStart(38, "mj-dropdown", 33);
|
|
142
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ngModelChange_38_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.DraftPolicy.DefaultDataAccessMode, $event) || (ctx_r1.DraftPolicy.DefaultDataAccessMode = $event); return i0.ɵɵresetView($event); });
|
|
143
|
+
i0.ɵɵlistener("ValueChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ValueChange_38_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.MarkPolicyDirty()); });
|
|
144
|
+
i0.ɵɵelementEnd()()()();
|
|
145
|
+
i0.ɵɵelementStart(39, "section", 21)(40, "div", 22)(41, "div")(42, "h4", 23);
|
|
146
|
+
i0.ɵɵtext(43, "2. Communication Channel Permissions");
|
|
147
|
+
i0.ɵɵelementEnd();
|
|
148
|
+
i0.ɵɵelementStart(44, "p", 24);
|
|
149
|
+
i0.ɵɵtext(45, " Configure what your Chief of Staff is permitted to do on each channel ");
|
|
150
|
+
i0.ɵɵelementEnd()()();
|
|
151
|
+
i0.ɵɵelementStart(46, "div", 29)(47, "label", 30)(48, "span", 31);
|
|
152
|
+
i0.ɵɵelement(49, "i", 34);
|
|
153
|
+
i0.ɵɵtext(50, " Email Channel Mode ");
|
|
154
|
+
i0.ɵɵelementEnd();
|
|
155
|
+
i0.ɵɵelementStart(51, "mj-dropdown", 33);
|
|
156
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ngModelChange_51_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.DraftPolicy.EmailChannelMode, $event) || (ctx_r1.DraftPolicy.EmailChannelMode = $event); return i0.ɵɵresetView($event); });
|
|
157
|
+
i0.ɵɵlistener("ValueChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ValueChange_51_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.MarkPolicyDirty()); });
|
|
158
|
+
i0.ɵɵelementEnd()();
|
|
159
|
+
i0.ɵɵelementStart(52, "label", 30)(53, "span", 31);
|
|
160
|
+
i0.ɵɵelement(54, "i", 35);
|
|
161
|
+
i0.ɵɵtext(55, " Calendar Channel Mode ");
|
|
162
|
+
i0.ɵɵelementEnd();
|
|
163
|
+
i0.ɵɵelementStart(56, "mj-dropdown", 33);
|
|
164
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ngModelChange_56_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.DraftPolicy.CalendarChannelMode, $event) || (ctx_r1.DraftPolicy.CalendarChannelMode = $event); return i0.ɵɵresetView($event); });
|
|
165
|
+
i0.ɵɵlistener("ValueChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ValueChange_56_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.MarkPolicyDirty()); });
|
|
166
|
+
i0.ɵɵelementEnd()();
|
|
167
|
+
i0.ɵɵelementStart(57, "label", 30)(58, "span", 31);
|
|
168
|
+
i0.ɵɵelement(59, "i", 36);
|
|
169
|
+
i0.ɵɵtext(60, " Phone Channel Mode ");
|
|
170
|
+
i0.ɵɵelementEnd();
|
|
171
|
+
i0.ɵɵelementStart(61, "mj-dropdown", 33);
|
|
172
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ngModelChange_61_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.DraftPolicy.PhoneChannelMode, $event) || (ctx_r1.DraftPolicy.PhoneChannelMode = $event); return i0.ɵɵresetView($event); });
|
|
173
|
+
i0.ɵɵlistener("ValueChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ValueChange_61_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.MarkPolicyDirty()); });
|
|
174
|
+
i0.ɵɵelementEnd()();
|
|
175
|
+
i0.ɵɵelementStart(62, "label", 30)(63, "span", 31);
|
|
176
|
+
i0.ɵɵelement(64, "i", 37);
|
|
177
|
+
i0.ɵɵtext(65, " Messaging Channel Mode ");
|
|
178
|
+
i0.ɵɵelementEnd();
|
|
179
|
+
i0.ɵɵelementStart(66, "mj-dropdown", 33);
|
|
180
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ngModelChange_66_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.DraftPolicy.MessagingChannelMode, $event) || (ctx_r1.DraftPolicy.MessagingChannelMode = $event); return i0.ɵɵresetView($event); });
|
|
181
|
+
i0.ɵɵlistener("ValueChange", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_mj_dropdown_ValueChange_66_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.MarkPolicyDirty()); });
|
|
182
|
+
i0.ɵɵelementEnd()()()();
|
|
183
|
+
i0.ɵɵelementStart(67, "section", 21)(68, "div", 22)(69, "div")(70, "h4", 23);
|
|
184
|
+
i0.ɵɵtext(71, "3. Approval Guardrails & Standing Instructions");
|
|
185
|
+
i0.ɵɵelementEnd();
|
|
186
|
+
i0.ɵɵelementStart(72, "p", 24);
|
|
187
|
+
i0.ɵɵtext(73, " Enforce mandatory human-in-the-loop approval gates before sensitive actions execute ");
|
|
188
|
+
i0.ɵɵelementEnd()()();
|
|
189
|
+
i0.ɵɵelementStart(74, "div", 38)(75, "div", 39);
|
|
190
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_div_click_75_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleApprovalGuardrail("RequireApprovalForExternalComms")); });
|
|
191
|
+
i0.ɵɵelementStart(76, "div")(77, "div", 40);
|
|
192
|
+
i0.ɵɵtext(78, "Require Approval for External Communications");
|
|
193
|
+
i0.ɵɵelementEnd();
|
|
194
|
+
i0.ɵɵelementStart(79, "div", 41);
|
|
195
|
+
i0.ɵɵtext(80, " Always create an approval request before sending emails or messages to external recipients. ");
|
|
196
|
+
i0.ɵɵelementEnd()();
|
|
197
|
+
i0.ɵɵelementStart(81, "button", 42);
|
|
198
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_button_click_81_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.ToggleApprovalGuardrail("RequireApprovalForExternalComms"); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
199
|
+
i0.ɵɵtext(82);
|
|
200
|
+
i0.ɵɵelementEnd()();
|
|
201
|
+
i0.ɵɵelementStart(83, "div", 39);
|
|
202
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_div_click_83_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleApprovalGuardrail("RequireApprovalForFinancials")); });
|
|
203
|
+
i0.ɵɵelementStart(84, "div")(85, "div", 40);
|
|
204
|
+
i0.ɵɵtext(86, "Require Approval for Financial Commitments");
|
|
205
|
+
i0.ɵɵelementEnd();
|
|
206
|
+
i0.ɵɵelementStart(87, "div", 41);
|
|
207
|
+
i0.ɵɵtext(88, " Require explicit approval for any financial transaction above the auto-approve threshold. ");
|
|
208
|
+
i0.ɵɵelementEnd()();
|
|
209
|
+
i0.ɵɵelementStart(89, "button", 42);
|
|
210
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_button_click_89_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.ToggleApprovalGuardrail("RequireApprovalForFinancials"); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
211
|
+
i0.ɵɵtext(90);
|
|
212
|
+
i0.ɵɵelementEnd()();
|
|
213
|
+
i0.ɵɵelementStart(91, "div", 39);
|
|
214
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_div_click_91_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleApprovalGuardrail("RequireApprovalForDestructiveActions")); });
|
|
215
|
+
i0.ɵɵelementStart(92, "div")(93, "div", 40);
|
|
216
|
+
i0.ɵɵtext(94, "Require Approval for Destructive Actions");
|
|
217
|
+
i0.ɵɵelementEnd();
|
|
218
|
+
i0.ɵɵelementStart(95, "div", 41);
|
|
219
|
+
i0.ɵɵtext(96, " Require human confirmation before deleting records, canceling events, or revoking access. ");
|
|
220
|
+
i0.ɵɵelementEnd()();
|
|
221
|
+
i0.ɵɵelementStart(97, "button", 42);
|
|
222
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_button_click_97_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.ToggleApprovalGuardrail("RequireApprovalForDestructiveActions"); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
223
|
+
i0.ɵɵtext(98);
|
|
224
|
+
i0.ɵɵelementEnd()();
|
|
225
|
+
i0.ɵɵelementStart(99, "div", 39);
|
|
226
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_div_click_99_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleApprovalGuardrail("AllowInterAgentCoordination")); });
|
|
227
|
+
i0.ɵɵelementStart(100, "div")(101, "div", 40);
|
|
228
|
+
i0.ɵɵtext(102, "Allow Inter-Agent Delegation & Coordination");
|
|
229
|
+
i0.ɵɵelementEnd();
|
|
230
|
+
i0.ɵɵelementStart(103, "div", 41);
|
|
231
|
+
i0.ɵɵtext(104, " Permit your Chief of Staff to invoke specialist sub-agents and coordinate with peer agents. ");
|
|
232
|
+
i0.ɵɵelementEnd()();
|
|
233
|
+
i0.ɵɵelementStart(105, "button", 42);
|
|
234
|
+
i0.ɵɵlistener("click", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_button_click_105_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.ToggleApprovalGuardrail("AllowInterAgentCoordination"); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
235
|
+
i0.ɵɵtext(106);
|
|
236
|
+
i0.ɵɵelementEnd()()();
|
|
237
|
+
i0.ɵɵelementStart(107, "div", 43)(108, "label", 30)(109, "span", 31);
|
|
238
|
+
i0.ɵɵtext(110, "Auto-Approve Financial Threshold (USD)");
|
|
239
|
+
i0.ɵɵelementEnd();
|
|
240
|
+
i0.ɵɵelementStart(111, "input", 44);
|
|
241
|
+
i0.ɵɵlistener("input", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_input_input_111_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnThresholdInputEvent($event)); });
|
|
242
|
+
i0.ɵɵelementEnd()();
|
|
243
|
+
i0.ɵɵelementStart(112, "label", 45)(113, "span", 31);
|
|
244
|
+
i0.ɵɵtext(114, "Standing Executive Instructions Override");
|
|
245
|
+
i0.ɵɵelementEnd();
|
|
246
|
+
i0.ɵɵelementStart(115, "textarea", 46);
|
|
247
|
+
i0.ɵɵlistener("input", function ChiefOfStaffGovernanceComponent_Conditional_7_Template_textarea_input_115_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnInstructionsOverrideInput($event)); });
|
|
248
|
+
i0.ɵɵelementEnd()()()()();
|
|
249
|
+
} if (rf & 2) {
|
|
250
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
251
|
+
i0.ɵɵadvance(12);
|
|
252
|
+
i0.ɵɵconditional(ctx_r1.PolicyEntity ? 12 : -1);
|
|
253
|
+
i0.ɵɵadvance();
|
|
254
|
+
i0.ɵɵconditional(ctx_r1.PolicyDirty ? 13 : -1);
|
|
255
|
+
i0.ɵɵadvance();
|
|
256
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsSavingPolicy || !ctx_r1.PolicyDirty);
|
|
257
|
+
i0.ɵɵadvance(2);
|
|
258
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.IsSavingPolicy ? "Saving..." : "Save Policy Changes", " ");
|
|
259
|
+
i0.ɵɵadvance(9);
|
|
260
|
+
i0.ɵɵrepeater(ctx_r1.StatusOptions);
|
|
261
|
+
i0.ɵɵadvance(3);
|
|
262
|
+
i0.ɵɵrepeater(ctx_r1.CoordinationModeOptions);
|
|
263
|
+
i0.ɵɵadvance(6);
|
|
264
|
+
i0.ɵɵproperty("value", ctx_r1.DraftPolicy.DisplayNameOverride);
|
|
265
|
+
i0.ɵɵadvance(4);
|
|
266
|
+
i0.ɵɵproperty("Data", ctx_r1.DataAccessModeOptions)("ValuePrimitive", true);
|
|
267
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.DraftPolicy.DefaultDataAccessMode);
|
|
268
|
+
i0.ɵɵadvance(13);
|
|
269
|
+
i0.ɵɵproperty("Data", ctx_r1.EmailChannelOptions)("ValuePrimitive", true);
|
|
270
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.DraftPolicy.EmailChannelMode);
|
|
271
|
+
i0.ɵɵadvance(5);
|
|
272
|
+
i0.ɵɵproperty("Data", ctx_r1.CalendarChannelOptions)("ValuePrimitive", true);
|
|
273
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.DraftPolicy.CalendarChannelMode);
|
|
274
|
+
i0.ɵɵadvance(5);
|
|
275
|
+
i0.ɵɵproperty("Data", ctx_r1.PhoneChannelOptions)("ValuePrimitive", true);
|
|
276
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.DraftPolicy.PhoneChannelMode);
|
|
277
|
+
i0.ɵɵadvance(5);
|
|
278
|
+
i0.ɵɵproperty("Data", ctx_r1.MessagingChannelOptions)("ValuePrimitive", true);
|
|
279
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.DraftPolicy.MessagingChannelMode);
|
|
280
|
+
i0.ɵɵadvance(15);
|
|
281
|
+
i0.ɵɵproperty("variant", ctx_r1.DraftPolicy.RequireApprovalForExternalComms ? "primary" : "outline");
|
|
282
|
+
i0.ɵɵadvance();
|
|
283
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DraftPolicy.RequireApprovalForExternalComms ? "Required" : "Not Required", " ");
|
|
284
|
+
i0.ɵɵadvance(7);
|
|
285
|
+
i0.ɵɵproperty("variant", ctx_r1.DraftPolicy.RequireApprovalForFinancials ? "primary" : "outline");
|
|
286
|
+
i0.ɵɵadvance();
|
|
287
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DraftPolicy.RequireApprovalForFinancials ? "Required" : "Not Required", " ");
|
|
288
|
+
i0.ɵɵadvance(7);
|
|
289
|
+
i0.ɵɵproperty("variant", ctx_r1.DraftPolicy.RequireApprovalForDestructiveActions ? "primary" : "outline");
|
|
290
|
+
i0.ɵɵadvance();
|
|
291
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DraftPolicy.RequireApprovalForDestructiveActions ? "Required" : "Not Required", " ");
|
|
292
|
+
i0.ɵɵadvance(7);
|
|
293
|
+
i0.ɵɵproperty("variant", ctx_r1.DraftPolicy.AllowInterAgentCoordination ? "primary" : "outline");
|
|
294
|
+
i0.ɵɵadvance();
|
|
295
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DraftPolicy.AllowInterAgentCoordination ? "Allowed" : "Blocked", " ");
|
|
296
|
+
i0.ɵɵadvance(5);
|
|
297
|
+
i0.ɵɵproperty("value", ctx_r1.DraftPolicy.AutoApproveAmountThreshold ?? "");
|
|
298
|
+
i0.ɵɵadvance(4);
|
|
299
|
+
i0.ɵɵproperty("value", ctx_r1.DraftPolicy.InstructionsOverride);
|
|
300
|
+
} }
|
|
301
|
+
/**
|
|
302
|
+
* The Chief of Staff application's Governance page: edits the user's
|
|
303
|
+
* `MJ: AI Agent User Policies` record (autonomy, channels, approval guardrails and standing
|
|
304
|
+
* instructions) as a draft, saved explicitly.
|
|
305
|
+
*/
|
|
306
|
+
let ChiefOfStaffGovernanceComponent = class ChiefOfStaffGovernanceComponent extends BaseChiefOfStaffPage {
|
|
307
|
+
Page = 'governance';
|
|
308
|
+
IsSavingPolicy = false;
|
|
309
|
+
PolicyDirty = false;
|
|
310
|
+
StatusOptions = ['Active', 'Paused', 'Disabled'];
|
|
311
|
+
CoordinationModeOptions = [
|
|
312
|
+
{
|
|
313
|
+
Value: 'Observer',
|
|
314
|
+
Label: 'Observer',
|
|
315
|
+
Description: 'Monitors signals and prepares briefings; never initiates changes.',
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
Value: 'Coordinator',
|
|
319
|
+
Label: 'Coordinator',
|
|
320
|
+
Description: 'Tracks priorities, drafts communications, and requests approval before high-impact actions.',
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
Value: 'Autonomous',
|
|
324
|
+
Label: 'Autonomous',
|
|
325
|
+
Description: 'Executes within policy guardrails and auto-approval thresholds.',
|
|
326
|
+
},
|
|
327
|
+
];
|
|
328
|
+
DataAccessModeOptions = [
|
|
329
|
+
{ Value: 'ReadOnly', Label: 'Read Only' },
|
|
330
|
+
{ Value: 'AllowListOnly', Label: 'Allow-List Only' },
|
|
331
|
+
{ Value: 'UserCeiling', Label: 'User Ceiling (Full Delegated Access)' },
|
|
332
|
+
];
|
|
333
|
+
EmailChannelOptions = [
|
|
334
|
+
{ Value: 'Disabled', Label: 'Disabled' },
|
|
335
|
+
{ Value: 'ReadOnly', Label: 'Read Only' },
|
|
336
|
+
{ Value: 'DraftOnly', Label: 'Draft Only' },
|
|
337
|
+
{ Value: 'SendAsAgent', Label: 'Send as Chief of Staff' },
|
|
338
|
+
{ Value: 'SendAsUser', Label: 'Send on Behalf of User' },
|
|
339
|
+
];
|
|
340
|
+
CalendarChannelOptions = [
|
|
341
|
+
{ Value: 'Disabled', Label: 'Disabled' },
|
|
342
|
+
{ Value: 'ReadOnly', Label: 'Read Only' },
|
|
343
|
+
{ Value: 'ProposeWithApproval', Label: 'Propose with Approval' },
|
|
344
|
+
{ Value: 'Autonomous', Label: 'Autonomous Scheduling' },
|
|
345
|
+
];
|
|
346
|
+
PhoneChannelOptions = [
|
|
347
|
+
{ Value: 'Disabled', Label: 'Disabled' },
|
|
348
|
+
{ Value: 'InboundOnly', Label: 'Inbound Only' },
|
|
349
|
+
{ Value: 'OutboundWithApproval', Label: 'Outbound with Approval' },
|
|
350
|
+
{ Value: 'OutboundAutonomous', Label: 'Outbound Autonomous' },
|
|
351
|
+
];
|
|
352
|
+
MessagingChannelOptions = [
|
|
353
|
+
{ Value: 'Disabled', Label: 'Disabled' },
|
|
354
|
+
{ Value: 'Enabled', Label: 'Enabled' },
|
|
355
|
+
];
|
|
356
|
+
/** A reload replaces the draft with the saved policy. */
|
|
357
|
+
OnDataLoaded() {
|
|
358
|
+
this.PolicyDirty = false;
|
|
359
|
+
}
|
|
360
|
+
OpenPolicyEntityRecord() {
|
|
361
|
+
if (this.PolicyEntity) {
|
|
362
|
+
this.navigationService.OpenEntityRecord('MJ: AI Agent User Policies', CompositeKey.FromID(this.PolicyEntity.ID));
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
MarkPolicyDirty() {
|
|
366
|
+
this.PolicyDirty = true;
|
|
367
|
+
this.cdr.markForCheck();
|
|
368
|
+
}
|
|
369
|
+
SetCoordinationMode(mode) {
|
|
370
|
+
this.DraftPolicy.CoordinationMode = mode;
|
|
371
|
+
this.MarkPolicyDirty();
|
|
372
|
+
}
|
|
373
|
+
SetPolicyStatus(status) {
|
|
374
|
+
this.DraftPolicy.Status = status;
|
|
375
|
+
this.MarkPolicyDirty();
|
|
376
|
+
}
|
|
377
|
+
ToggleApprovalGuardrail(field) {
|
|
378
|
+
this.DraftPolicy[field] = !this.DraftPolicy[field];
|
|
379
|
+
this.MarkPolicyDirty();
|
|
380
|
+
}
|
|
381
|
+
OnDisplayNameInput(event) {
|
|
382
|
+
if (event.target instanceof HTMLInputElement) {
|
|
383
|
+
this.DraftPolicy.DisplayNameOverride = event.target.value;
|
|
384
|
+
this.MarkPolicyDirty();
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
OnThresholdInputEvent(event) {
|
|
388
|
+
if (event.target instanceof HTMLInputElement) {
|
|
389
|
+
this.OnThresholdInput(event.target.value);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
OnInstructionsOverrideInput(event) {
|
|
393
|
+
if (event.target instanceof HTMLTextAreaElement) {
|
|
394
|
+
this.DraftPolicy.InstructionsOverride = event.target.value;
|
|
395
|
+
this.MarkPolicyDirty();
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
OnThresholdInput(rawValue) {
|
|
399
|
+
const trimmed = rawValue.trim();
|
|
400
|
+
if (!trimmed) {
|
|
401
|
+
this.DraftPolicy.AutoApproveAmountThreshold = null;
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
const parsed = Number(trimmed);
|
|
405
|
+
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
406
|
+
this.DraftPolicy.AutoApproveAmountThreshold = parsed;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
this.MarkPolicyDirty();
|
|
410
|
+
}
|
|
411
|
+
ResetDraftPolicy() {
|
|
412
|
+
this.DraftPolicy = BuildPolicyDraftFromEntity(this.PolicyEntity);
|
|
413
|
+
this.PolicyDirty = false;
|
|
414
|
+
this.cdr.markForCheck();
|
|
415
|
+
}
|
|
416
|
+
async SaveGovernancePolicy() {
|
|
417
|
+
if (this.IsSavingPolicy) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
this.IsSavingPolicy = true;
|
|
421
|
+
this.cdr.markForCheck();
|
|
422
|
+
try {
|
|
423
|
+
let entity = this.PolicyEntity;
|
|
424
|
+
if (!entity) {
|
|
425
|
+
entity = await this.ProviderToUse.GetEntityObject('MJ: AI Agent User Policies', this.ProviderToUse.CurrentUser);
|
|
426
|
+
entity.NewRecord();
|
|
427
|
+
if (!this.chiefOfStaffAgentId) {
|
|
428
|
+
throw new Error(`The "${CHIEF_OF_STAFF_AGENT_NAME}" agent id has not been resolved; reload the page.`);
|
|
429
|
+
}
|
|
430
|
+
entity.AgentID = this.chiefOfStaffAgentId;
|
|
431
|
+
const currentUserId = this.ProviderToUse.CurrentUser?.ID;
|
|
432
|
+
if (currentUserId) {
|
|
433
|
+
entity.UserID = currentUserId;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
entity.DisplayNameOverride =
|
|
437
|
+
this.DraftPolicy.DisplayNameOverride.trim().length > 0
|
|
438
|
+
? this.DraftPolicy.DisplayNameOverride.trim()
|
|
439
|
+
: null;
|
|
440
|
+
entity.Status = this.DraftPolicy.Status;
|
|
441
|
+
entity.OnboardingStatus = this.DraftPolicy.OnboardingStatus;
|
|
442
|
+
entity.CoordinationMode = this.DraftPolicy.CoordinationMode;
|
|
443
|
+
entity.DefaultDataAccessMode = this.DraftPolicy.DefaultDataAccessMode;
|
|
444
|
+
entity.EmailChannelMode = this.DraftPolicy.EmailChannelMode;
|
|
445
|
+
entity.CalendarChannelMode = this.DraftPolicy.CalendarChannelMode;
|
|
446
|
+
entity.PhoneChannelMode = this.DraftPolicy.PhoneChannelMode;
|
|
447
|
+
entity.MessagingChannelMode = this.DraftPolicy.MessagingChannelMode;
|
|
448
|
+
entity.AllowInterAgentCoordination = this.DraftPolicy.AllowInterAgentCoordination;
|
|
449
|
+
entity.RequireApprovalForExternalComms =
|
|
450
|
+
this.DraftPolicy.RequireApprovalForExternalComms;
|
|
451
|
+
entity.RequireApprovalForFinancials = this.DraftPolicy.RequireApprovalForFinancials;
|
|
452
|
+
entity.RequireApprovalForDestructiveActions =
|
|
453
|
+
this.DraftPolicy.RequireApprovalForDestructiveActions;
|
|
454
|
+
entity.AutoApproveAmountThreshold = this.DraftPolicy.AutoApproveAmountThreshold;
|
|
455
|
+
entity.InstructionsOverride =
|
|
456
|
+
this.DraftPolicy.InstructionsOverride.trim().length > 0
|
|
457
|
+
? this.DraftPolicy.InstructionsOverride.trim()
|
|
458
|
+
: null;
|
|
459
|
+
const saved = await entity.Save();
|
|
460
|
+
if (saved) {
|
|
461
|
+
this.PolicyEntity = entity;
|
|
462
|
+
this.DraftPolicy = BuildPolicyDraftFromEntity(entity);
|
|
463
|
+
this.PolicyDirty = false;
|
|
464
|
+
this.showBanner('success', 'Chief of Staff governance policy saved.');
|
|
465
|
+
this.publishAgentContext();
|
|
466
|
+
}
|
|
467
|
+
else {
|
|
468
|
+
const errText = entity.LatestResult?.CompleteMessage ?? 'Failed to save governance policy.';
|
|
469
|
+
this.showBanner('error', errText);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
catch (err) {
|
|
473
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
474
|
+
this.showBanner('error', `Failed to save governance policy: ${msg}`);
|
|
475
|
+
}
|
|
476
|
+
finally {
|
|
477
|
+
this.IsSavingPolicy = false;
|
|
478
|
+
this.cdr.markForCheck();
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵChiefOfStaffGovernanceComponent_BaseFactory; return function ChiefOfStaffGovernanceComponent_Factory(__ngFactoryType__) { return (ɵChiefOfStaffGovernanceComponent_BaseFactory || (ɵChiefOfStaffGovernanceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ChiefOfStaffGovernanceComponent)))(__ngFactoryType__ || ChiefOfStaffGovernanceComponent); }; })();
|
|
482
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChiefOfStaffGovernanceComponent, selectors: [["mj-chief-of-staff-governance"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 4, consts: [["Title", "Governance", "Subtitle", "How much your Chief of Staff may do on its own, and what needs your approval", "Icon", "fa-solid fa-shield-halved"], ["toolbar", ""], [3, "Clicked", "Loading", "ShowLabel"], ["role", "status", 1, "cos-banner", 3, "cos-banner--success", "cos-banner--error"], [1, "cos-loading"], [1, "cos-governance-container"], ["role", "status", 1, "cos-banner"], [1, "cos-banner__content"], [1, "fa-solid"], ["mjButton", "", "variant", "flat", "size", "sm", "aria-label", "Dismiss notification", 3, "click"], [1, "fa-solid", "fa-xmark"], ["text", "Loading governance policy..."], [1, "cos-governance-header"], [1, "cos-governance-header__title"], [1, "fa-solid", "fa-shield-halved"], [1, "cos-governance-header__subtitle"], [1, "cos-governance-header__actions"], ["mjButton", "", "variant", "outline", "size", "sm"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "disabled"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], [1, "cos-panel"], [1, "cos-panel__header"], [1, "cos-panel__title"], [1, "cos-panel__subtitle"], ["role", "group", "aria-label", "Agent Status", 1, "cos-status-segmented"], ["mjButton", "", "size", "sm", 3, "variant"], [1, "cos-mode-cards"], [1, "cos-mode-card", 3, "cos-mode-card--selected"], [1, "cos-form-grid"], [1, "cos-form-field"], [1, "cos-form-field__label"], ["type", "text", "placeholder", "e.g., Chief of Staff", 1, "cos-input", 3, "input", "value"], ["TextField", "Label", "ValueField", "Value", 3, "ngModelChange", "ValueChange", "Data", "ValuePrimitive", "ngModel"], [1, "fa-solid", "fa-envelope"], [1, "fa-regular", "fa-calendar"], [1, "fa-solid", "fa-phone"], [1, "fa-solid", "fa-comments"], [1, "cos-toggle-list"], [1, "cos-toggle-row", 3, "click"], [1, "cos-toggle-row__title"], [1, "cos-toggle-row__desc"], ["mjButton", "", "size", "sm", 3, "click", "variant"], [1, "cos-form-grid", "cos-form-grid--spaced"], ["type", "number", "min", "0", "step", "50", "placeholder", "0.00", 1, "cos-input", 3, "input", "value"], [1, "cos-form-field", "cos-form-field--full"], ["rows", "3", "placeholder", "Optional standing instructions injected into every Chief of Staff run (e.g., preferred briefing style, VIP contacts, scheduling windows)...", 1, "cos-textarea", 3, "input", "value"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click", "disabled"], [1, "cos-mode-card", 3, "click"], [1, "cos-mode-card__top"], [1, "cos-mode-card__title"], [1, "fa-solid", "fa-circle-check", "cos-mode-card__check"], [1, "cos-mode-card__desc"]], template: function ChiefOfStaffGovernanceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
483
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0);
|
|
484
|
+
i0.ɵɵelementContainerStart(2, 1);
|
|
485
|
+
i0.ɵɵelementStart(3, "mj-refresh-button", 2);
|
|
486
|
+
i0.ɵɵlistener("Clicked", function ChiefOfStaffGovernanceComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.LoadChiefOfStaffData(); });
|
|
487
|
+
i0.ɵɵelementEnd();
|
|
488
|
+
i0.ɵɵelementContainerEnd();
|
|
489
|
+
i0.ɵɵelementEnd();
|
|
490
|
+
i0.ɵɵelementStart(4, "mj-page-body");
|
|
491
|
+
i0.ɵɵconditionalCreate(5, ChiefOfStaffGovernanceComponent_Conditional_5_Template, 7, 9, "div", 3);
|
|
492
|
+
i0.ɵɵconditionalCreate(6, ChiefOfStaffGovernanceComponent_Conditional_6_Template, 2, 0, "div", 4)(7, ChiefOfStaffGovernanceComponent_Conditional_7_Template, 116, 30, "div", 5);
|
|
493
|
+
i0.ɵɵelementEnd()();
|
|
494
|
+
} if (rf & 2) {
|
|
495
|
+
i0.ɵɵadvance(3);
|
|
496
|
+
i0.ɵɵproperty("Loading", ctx.IsLoading)("ShowLabel", true);
|
|
497
|
+
i0.ɵɵadvance(2);
|
|
498
|
+
i0.ɵɵconditional(ctx.FeedbackBanner ? 5 : -1);
|
|
499
|
+
i0.ɵɵadvance();
|
|
500
|
+
i0.ɵɵconditional(ctx.IsLoading ? 6 : 7);
|
|
501
|
+
} }, dependencies: [i1.NgControlStatus, i1.NgModel, i2.LoadingComponent, i3.MJButtonDirective, i3.MJDropdownComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJRefreshButtonComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.cos-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 280px;\n}\n\n.cos-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 16px;\n margin-bottom: 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n font-size: 13px;\n}\n\n.cos-banner__content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.cos-banner--success[_ngcontent-%COMP%] {\n background-color: var(--mj-status-success-bg);\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.cos-banner--error[_ngcontent-%COMP%] {\n background-color: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n\n.cos-kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 16px;\n margin-top: 16px;\n margin-bottom: 20px;\n}\n\n.cos-kpi-card[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px 18px;\n cursor: pointer;\n transition: border-color 0.15s ease, transform 0.15s ease;\n}\n\n.cos-kpi-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.cos-kpi-card__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n}\n\n.cos-kpi-card__label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.cos-kpi-card__icon[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 15px;\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.cos-kpi-card__icon--brand[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.cos-kpi-card__icon--success[_ngcontent-%COMP%] {\n background-color: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.cos-kpi-card__icon--warning[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning-bg);\n color: var(--mj-status-warning);\n}\n\n.cos-kpi-card__value[_ngcontent-%COMP%] {\n font-size: 26px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cos-kpi-card__sub[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n\n.cos-overview-columns[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(380px, 1fr));\n gap: 20px;\n margin-top: 16px;\n}\n\n.cos-stack[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n.cos-panel[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n}\n\n.cos-panel__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.cos-panel__title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cos-panel__subtitle[_ngcontent-%COMP%] {\n margin: 4px 0 0;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n\n\n\n\n\n\n.cos-meta-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.cos-status-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.cos-status-chip--active[_ngcontent-%COMP%], \n.cos-status-chip--approved[_ngcontent-%COMP%] {\n background-color: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.cos-status-chip--requested[_ngcontent-%COMP%], \n.cos-status-chip--paused[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning-bg);\n color: var(--mj-status-warning);\n}\n\n.cos-status-chip--rejected[_ngcontent-%COMP%], \n.cos-status-chip--disabled[_ngcontent-%COMP%] {\n background-color: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n\n.cos-status-chip--fired[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-subtle);\n color: var(--mj-text-secondary);\n}\n\n.cos-routine-card--fired[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n.cos-routine-card__fired-note[_ngcontent-%COMP%] {\n margin-left: 8px;\n color: var(--mj-text-secondary);\n font-size: 0.85em;\n}\n\n.cos-routines-toggle[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 8px;\n}\n\n\n\n\n\n\n.cos-request-card[_ngcontent-%COMP%] {\n padding: 14px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background-color: var(--mj-bg-surface);\n cursor: pointer;\n transition: border-color 0.15s ease;\n}\n\n.cos-request-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.cos-request-card__top[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n.cos-request-card__badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.cos-priority-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.cos-priority-tag.priority-critical[_ngcontent-%COMP%], \n.cos-priority-tag.priority-high[_ngcontent-%COMP%] {\n background-color: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.cos-priority-tag.priority-normal[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning-bg);\n color: var(--mj-status-warning);\n}\n\n.cos-priority-tag.priority-low[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.cos-timestamp[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.cos-request-card__text[_ngcontent-%COMP%] {\n margin: 0 0 12px;\n font-size: 13px;\n color: var(--mj-text-primary);\n line-height: 1.45;\n}\n\n\n.cos-email-draft[_ngcontent-%COMP%] {\n margin-top: 10px;\n cursor: default;\n}\n\n.cos-email-draft__meta[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n font-size: 0.9em;\n color: var(--mj-text-secondary);\n word-break: break-word;\n}\n\n.cos-email-draft__body[_ngcontent-%COMP%] {\n margin: 8px 0 0;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--mj-text-primary);\n}\n\n.cos-request-card__actions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.cos-resolved-section[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.cos-resolved-section__title[_ngcontent-%COMP%] {\n margin: 0 0 10px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n}\n\n.cos-resolved-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 8px 10px;\n border-radius: 6px;\n background-color: var(--mj-bg-surface-sunken);\n cursor: pointer;\n}\n\n.cos-resolved-row__main[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n\n.cos-resolved-row__text[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n.cos-routine-mini[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 14px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-subtle);\n background-color: var(--mj-bg-surface);\n}\n\n.cos-routine-mini__title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cos-routine-mini__name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cos-routine-mini__meta[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.cos-routine-card[_ngcontent-%COMP%] {\n padding: 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background-color: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.cos-routine-card__title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.cos-routine-card__name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cos-routine-card__desc[_ngcontent-%COMP%] {\n margin: 4px 0 0;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.cos-routine-card__schedule[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n padding: 10px 12px;\n border-radius: 6px;\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.cos-routine-card__actions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n\n.cos-governance-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 18px;\n margin-top: 16px;\n}\n\n.cos-governance-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n padding: 16px 20px;\n border-radius: 10px;\n background-color: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n}\n\n.cos-governance-header__title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cos-governance-header__subtitle[_ngcontent-%COMP%] {\n margin: 4px 0 0;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.cos-governance-header__actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cos-status-segmented[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n}\n\n.cos-mode-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.cos-mode-card[_ngcontent-%COMP%] {\n padding: 14px 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background-color: var(--mj-bg-surface);\n cursor: pointer;\n transition: border-color 0.15s ease, background-color 0.15s ease;\n}\n\n.cos-mode-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.cos-mode-card--selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.cos-mode-card__top[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.cos-mode-card__title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cos-mode-card__check[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.cos-mode-card__desc[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.45;\n}\n\n.cos-form-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n gap: 14px;\n}\n\n.cos-form-grid--spaced[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.cos-form-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.cos-form-field--full[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.cos-form-field__label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.cos-input[_ngcontent-%COMP%], \n.cos-textarea[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 10px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background-color: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n font-family: inherit;\n box-sizing: border-box;\n}\n\n.cos-input[_ngcontent-%COMP%]:focus, \n.cos-textarea[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.cos-toggle-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.cos-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 12px 14px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-subtle);\n background-color: var(--mj-bg-surface);\n cursor: pointer;\n}\n\n.cos-toggle-row__title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cos-toggle-row__desc[_ngcontent-%COMP%] {\n margin-top: 2px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n\n\n\n\n@keyframes _ngcontent-%COMP%_cosDrawerSlideIn {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n\n.cos-briefing-reader[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.cos-briefing-reader[_ngcontent-%COMP%] mj-conversation-chat-area[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-height: 0;\n}\n\n\n\n\n\n\n"], changeDetection: 0 });
|
|
502
|
+
};
|
|
503
|
+
ChiefOfStaffGovernanceComponent = __decorate([
|
|
504
|
+
RegisterClass(BaseResourceComponent, 'ChiefOfStaffGovernance')
|
|
505
|
+
], ChiefOfStaffGovernanceComponent);
|
|
506
|
+
export { ChiefOfStaffGovernanceComponent };
|
|
507
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ChiefOfStaffGovernanceComponent, [{
|
|
508
|
+
type: Component,
|
|
509
|
+
args: [{ standalone: false, selector: 'mj-chief-of-staff-governance', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Governance\"\n Subtitle=\"How much your Chief of Staff may do on its own, and what needs your approval\"\n Icon=\"fa-solid fa-shield-halved\">\n\n\n <ng-container toolbar>\n <mj-refresh-button\n [Loading]=\"IsLoading\"\n [ShowLabel]=\"true\"\n (Clicked)=\"LoadChiefOfStaffData()\">\n </mj-refresh-button>\n </ng-container>\n </mj-page-header>\n\n <mj-page-body>\n @if (FeedbackBanner) {\n <div class=\"cos-banner\"\n [class.cos-banner--success]=\"FeedbackBanner.Type === 'success'\"\n [class.cos-banner--error]=\"FeedbackBanner.Type === 'error'\"\n role=\"status\">\n <div class=\"cos-banner__content\">\n <i class=\"fa-solid\"\n [class.fa-circle-check]=\"FeedbackBanner.Type === 'success'\"\n [class.fa-circle-exclamation]=\"FeedbackBanner.Type === 'error'\"></i>\n <span>{{ FeedbackBanner.Message }}</span>\n </div>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"DismissBanner()\" aria-label=\"Dismiss notification\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n\n @if (IsLoading) {\n <div class=\"cos-loading\">\n <mj-loading text=\"Loading governance policy...\"></mj-loading>\n </div>\n } @else {\n <div class=\"cos-governance-container\">\n <div class=\"cos-governance-header\">\n <div>\n <h3 class=\"cos-governance-header__title\">\n <i class=\"fa-solid fa-shield-halved\"></i> Chief of Staff Governance Policy\n </h3>\n <p class=\"cos-governance-header__subtitle\">\n Backed by <code>MJ: AI Agent User Policies</code> \u2014 controls coordination autonomy, communication channels, and approval guardrails for your Chief of Staff.\n </p>\n </div>\n <div class=\"cos-governance-header__actions\">\n @if (PolicyEntity) {\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"OpenPolicyEntityRecord()\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Policy Record\n </button>\n }\n @if (PolicyDirty) {\n <button mjButton variant=\"outline\" size=\"sm\"\n [disabled]=\"IsSavingPolicy\"\n (click)=\"ResetDraftPolicy()\">\n Reset Changes\n </button>\n }\n <button mjButton variant=\"primary\" size=\"sm\"\n [disabled]=\"IsSavingPolicy || !PolicyDirty\"\n (click)=\"SaveGovernancePolicy()\">\n <i class=\"fa-solid fa-floppy-disk\"></i>\n {{ IsSavingPolicy ? 'Saving...' : 'Save Policy Changes' }}\n </button>\n </div>\n </div>\n\n <!-- Section 1: Coordination Mode -->\n <section class=\"cos-panel\">\n <div class=\"cos-panel__header\">\n <div>\n <h4 class=\"cos-panel__title\">1. Autonomy & Coordination Mode</h4>\n <p class=\"cos-panel__subtitle\">\n Select how proactively your Chief of Staff operates across your workspace\n </p>\n </div>\n <div class=\"cos-status-segmented\" role=\"group\" aria-label=\"Agent Status\">\n @for (st of StatusOptions; track st) {\n <button mjButton\n [variant]=\"DraftPolicy.Status === st ? 'primary' : 'outline'\"\n size=\"sm\"\n (click)=\"SetPolicyStatus(st)\">\n {{ st }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"cos-mode-cards\">\n @for (mode of CoordinationModeOptions; track mode.Value) {\n <div class=\"cos-mode-card\"\n [class.cos-mode-card--selected]=\"DraftPolicy.CoordinationMode === mode.Value\"\n (click)=\"SetCoordinationMode(mode.Value)\">\n <div class=\"cos-mode-card__top\">\n <span class=\"cos-mode-card__title\">{{ mode.Label }}</span>\n @if (DraftPolicy.CoordinationMode === mode.Value) {\n <i class=\"fa-solid fa-circle-check cos-mode-card__check\"></i>\n }\n </div>\n <p class=\"cos-mode-card__desc\">{{ mode.Description }}</p>\n </div>\n }\n </div>\n\n <div class=\"cos-form-grid\">\n <label class=\"cos-form-field\">\n <span class=\"cos-form-field__label\">Custom Display Name</span>\n <input class=\"cos-input\"\n type=\"text\"\n [value]=\"DraftPolicy.DisplayNameOverride\"\n placeholder=\"e.g., Chief of Staff\"\n (input)=\"OnDisplayNameInput($event)\" />\n </label>\n\n <label class=\"cos-form-field\">\n <span class=\"cos-form-field__label\">Default Data Access Mode</span>\n <mj-dropdown [Data]=\"DataAccessModeOptions\" TextField=\"Label\" ValueField=\"Value\" [ValuePrimitive]=\"true\"\n [(ngModel)]=\"DraftPolicy.DefaultDataAccessMode\" (ValueChange)=\"MarkPolicyDirty()\">\n </mj-dropdown>\n </label>\n </div>\n </section>\n\n <!-- Section 2: Communication Channel Permissions -->\n <section class=\"cos-panel\">\n <div class=\"cos-panel__header\">\n <div>\n <h4 class=\"cos-panel__title\">2. Communication Channel Permissions</h4>\n <p class=\"cos-panel__subtitle\">\n Configure what your Chief of Staff is permitted to do on each channel\n </p>\n </div>\n </div>\n\n <div class=\"cos-form-grid\">\n <label class=\"cos-form-field\">\n <span class=\"cos-form-field__label\">\n <i class=\"fa-solid fa-envelope\"></i> Email Channel Mode\n </span>\n <mj-dropdown [Data]=\"EmailChannelOptions\" TextField=\"Label\" ValueField=\"Value\" [ValuePrimitive]=\"true\"\n [(ngModel)]=\"DraftPolicy.EmailChannelMode\" (ValueChange)=\"MarkPolicyDirty()\">\n </mj-dropdown>\n </label>\n\n <label class=\"cos-form-field\">\n <span class=\"cos-form-field__label\">\n <i class=\"fa-regular fa-calendar\"></i> Calendar Channel Mode\n </span>\n <mj-dropdown [Data]=\"CalendarChannelOptions\" TextField=\"Label\" ValueField=\"Value\" [ValuePrimitive]=\"true\"\n [(ngModel)]=\"DraftPolicy.CalendarChannelMode\" (ValueChange)=\"MarkPolicyDirty()\">\n </mj-dropdown>\n </label>\n\n <label class=\"cos-form-field\">\n <span class=\"cos-form-field__label\">\n <i class=\"fa-solid fa-phone\"></i> Phone Channel Mode\n </span>\n <mj-dropdown [Data]=\"PhoneChannelOptions\" TextField=\"Label\" ValueField=\"Value\" [ValuePrimitive]=\"true\"\n [(ngModel)]=\"DraftPolicy.PhoneChannelMode\" (ValueChange)=\"MarkPolicyDirty()\">\n </mj-dropdown>\n </label>\n\n <label class=\"cos-form-field\">\n <span class=\"cos-form-field__label\">\n <i class=\"fa-solid fa-comments\"></i> Messaging Channel Mode\n </span>\n <mj-dropdown [Data]=\"MessagingChannelOptions\" TextField=\"Label\" ValueField=\"Value\" [ValuePrimitive]=\"true\"\n [(ngModel)]=\"DraftPolicy.MessagingChannelMode\" (ValueChange)=\"MarkPolicyDirty()\">\n </mj-dropdown>\n </label>\n </div>\n </section>\n\n <!-- Section 3: Approval Guardrails & Financial Threshold -->\n <section class=\"cos-panel\">\n <div class=\"cos-panel__header\">\n <div>\n <h4 class=\"cos-panel__title\">3. Approval Guardrails & Standing Instructions</h4>\n <p class=\"cos-panel__subtitle\">\n Enforce mandatory human-in-the-loop approval gates before sensitive actions execute\n </p>\n </div>\n </div>\n\n <div class=\"cos-toggle-list\">\n <div class=\"cos-toggle-row\" (click)=\"ToggleApprovalGuardrail('RequireApprovalForExternalComms')\">\n <div>\n <div class=\"cos-toggle-row__title\">Require Approval for External Communications</div>\n <div class=\"cos-toggle-row__desc\">\n Always create an approval request before sending emails or messages to external recipients.\n </div>\n </div>\n <button mjButton\n [variant]=\"DraftPolicy.RequireApprovalForExternalComms ? 'primary' : 'outline'\"\n size=\"sm\"\n (click)=\"ToggleApprovalGuardrail('RequireApprovalForExternalComms'); $event.stopPropagation()\">\n {{ DraftPolicy.RequireApprovalForExternalComms ? 'Required' : 'Not Required' }}\n </button>\n </div>\n\n <div class=\"cos-toggle-row\" (click)=\"ToggleApprovalGuardrail('RequireApprovalForFinancials')\">\n <div>\n <div class=\"cos-toggle-row__title\">Require Approval for Financial Commitments</div>\n <div class=\"cos-toggle-row__desc\">\n Require explicit approval for any financial transaction above the auto-approve threshold.\n </div>\n </div>\n <button mjButton\n [variant]=\"DraftPolicy.RequireApprovalForFinancials ? 'primary' : 'outline'\"\n size=\"sm\"\n (click)=\"ToggleApprovalGuardrail('RequireApprovalForFinancials'); $event.stopPropagation()\">\n {{ DraftPolicy.RequireApprovalForFinancials ? 'Required' : 'Not Required' }}\n </button>\n </div>\n\n <div class=\"cos-toggle-row\" (click)=\"ToggleApprovalGuardrail('RequireApprovalForDestructiveActions')\">\n <div>\n <div class=\"cos-toggle-row__title\">Require Approval for Destructive Actions</div>\n <div class=\"cos-toggle-row__desc\">\n Require human confirmation before deleting records, canceling events, or revoking access.\n </div>\n </div>\n <button mjButton\n [variant]=\"DraftPolicy.RequireApprovalForDestructiveActions ? 'primary' : 'outline'\"\n size=\"sm\"\n (click)=\"ToggleApprovalGuardrail('RequireApprovalForDestructiveActions'); $event.stopPropagation()\">\n {{ DraftPolicy.RequireApprovalForDestructiveActions ? 'Required' : 'Not Required' }}\n </button>\n </div>\n\n <div class=\"cos-toggle-row\" (click)=\"ToggleApprovalGuardrail('AllowInterAgentCoordination')\">\n <div>\n <div class=\"cos-toggle-row__title\">Allow Inter-Agent Delegation & Coordination</div>\n <div class=\"cos-toggle-row__desc\">\n Permit your Chief of Staff to invoke specialist sub-agents and coordinate with peer agents.\n </div>\n </div>\n <button mjButton\n [variant]=\"DraftPolicy.AllowInterAgentCoordination ? 'primary' : 'outline'\"\n size=\"sm\"\n (click)=\"ToggleApprovalGuardrail('AllowInterAgentCoordination'); $event.stopPropagation()\">\n {{ DraftPolicy.AllowInterAgentCoordination ? 'Allowed' : 'Blocked' }}\n </button>\n </div>\n </div>\n\n <div class=\"cos-form-grid cos-form-grid--spaced\">\n <label class=\"cos-form-field\">\n <span class=\"cos-form-field__label\">Auto-Approve Financial Threshold (USD)</span>\n <input class=\"cos-input\"\n type=\"number\"\n min=\"0\"\n step=\"50\"\n [value]=\"DraftPolicy.AutoApproveAmountThreshold ?? ''\"\n placeholder=\"0.00\"\n (input)=\"OnThresholdInputEvent($event)\" />\n </label>\n\n <label class=\"cos-form-field cos-form-field--full\">\n <span class=\"cos-form-field__label\">Standing Executive Instructions Override</span>\n <textarea class=\"cos-textarea\"\n rows=\"3\"\n [value]=\"DraftPolicy.InstructionsOverride\"\n placeholder=\"Optional standing instructions injected into every Chief of Staff run (e.g., preferred briefing style, VIP contacts, scheduling windows)...\"\n (input)=\"OnInstructionsOverrideInput($event)\"></textarea>\n </label>\n </div>\n </section>\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: [":host {\n display: block;\n height: 100%;\n}\n\n.cos-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 280px;\n}\n\n.cos-banner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 16px;\n margin-bottom: 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n font-size: 13px;\n}\n\n.cos-banner__content {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.cos-banner--success {\n background-color: var(--mj-status-success-bg);\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.cos-banner--error {\n background-color: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n/* KPI Grid */\n.cos-kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 16px;\n margin-top: 16px;\n margin-bottom: 20px;\n}\n\n.cos-kpi-card {\n background-color: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px 18px;\n cursor: pointer;\n transition: border-color 0.15s ease, transform 0.15s ease;\n}\n\n.cos-kpi-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.cos-kpi-card__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n}\n\n.cos-kpi-card__label {\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.cos-kpi-card__icon {\n width: 34px;\n height: 34px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 15px;\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.cos-kpi-card__icon--brand {\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.cos-kpi-card__icon--success {\n background-color: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.cos-kpi-card__icon--warning {\n background-color: var(--mj-status-warning-bg);\n color: var(--mj-status-warning);\n}\n\n.cos-kpi-card__value {\n font-size: 26px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cos-kpi-card__sub {\n margin-top: 4px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n/* Columns & Panels */\n.cos-overview-columns {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(380px, 1fr));\n gap: 20px;\n margin-top: 16px;\n}\n\n.cos-stack {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n.cos-panel {\n background-color: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n}\n\n.cos-panel__header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.cos-panel__title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cos-panel__subtitle {\n margin: 4px 0 0;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n/* Priority Mini Cards */\n\n/* Progress Bars */\n\n/* Health & Status Badges */\n\n.cos-meta-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.cos-status-chip {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.cos-status-chip--active,\n.cos-status-chip--approved {\n background-color: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.cos-status-chip--requested,\n.cos-status-chip--paused {\n background-color: var(--mj-status-warning-bg);\n color: var(--mj-status-warning);\n}\n\n.cos-status-chip--rejected,\n.cos-status-chip--disabled {\n background-color: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n/* A one-time wake that has run: done, not broken. */\n.cos-status-chip--fired {\n background-color: var(--mj-bg-subtle);\n color: var(--mj-text-secondary);\n}\n\n.cos-routine-card--fired {\n opacity: 0.8;\n}\n\n.cos-routine-card__fired-note {\n margin-left: 8px;\n color: var(--mj-text-secondary);\n font-size: 0.85em;\n}\n\n.cos-routines-toggle {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 8px;\n}\n\n/* Filter Bar & Full Priority Cards */\n\n/* Subtasks / Milestones */\n\n/* Requests & Routines */\n.cos-request-card {\n padding: 14px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background-color: var(--mj-bg-surface);\n cursor: pointer;\n transition: border-color 0.15s ease;\n}\n\n.cos-request-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.cos-request-card__top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n.cos-request-card__badges {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.cos-priority-tag {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.cos-priority-tag.priority-critical,\n.cos-priority-tag.priority-high {\n background-color: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.cos-priority-tag.priority-normal {\n background-color: var(--mj-status-warning-bg);\n color: var(--mj-status-warning);\n}\n\n.cos-priority-tag.priority-low {\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.cos-timestamp {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.cos-request-card__text {\n margin: 0 0 12px;\n font-size: 13px;\n color: var(--mj-text-primary);\n line-height: 1.45;\n}\n\n/* An outbound email waiting for approval: a bare mj-accordion-panel inside the card */\n.cos-email-draft {\n margin-top: 10px;\n cursor: default;\n}\n\n.cos-email-draft__meta {\n display: flex;\n flex-direction: column;\n gap: 2px;\n font-size: 0.9em;\n color: var(--mj-text-secondary);\n word-break: break-word;\n}\n\n.cos-email-draft__body {\n margin: 8px 0 0;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--mj-text-primary);\n}\n\n.cos-request-card__actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.cos-resolved-section {\n margin-top: 20px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.cos-resolved-section__title {\n margin: 0 0 10px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n}\n\n.cos-resolved-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 8px 10px;\n border-radius: 6px;\n background-color: var(--mj-bg-surface-sunken);\n cursor: pointer;\n}\n\n.cos-resolved-row__main {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n\n.cos-resolved-row__text {\n font-size: 12px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Routine Cards */\n.cos-routine-mini {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 14px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-subtle);\n background-color: var(--mj-bg-surface);\n}\n\n.cos-routine-mini__title-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cos-routine-mini__name {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cos-routine-mini__meta {\n margin-top: 4px;\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.cos-routine-card {\n padding: 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background-color: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.cos-routine-card__title-row {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.cos-routine-card__name {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cos-routine-card__desc {\n margin: 4px 0 0;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.cos-routine-card__schedule {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n padding: 10px 12px;\n border-radius: 6px;\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.cos-routine-card__actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* Governance Tab */\n.cos-governance-container {\n display: flex;\n flex-direction: column;\n gap: 18px;\n margin-top: 16px;\n}\n\n.cos-governance-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n padding: 16px 20px;\n border-radius: 10px;\n background-color: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n}\n\n.cos-governance-header__title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cos-governance-header__subtitle {\n margin: 4px 0 0;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.cos-governance-header__actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.cos-status-segmented {\n display: flex;\n gap: 6px;\n}\n\n.cos-mode-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.cos-mode-card {\n padding: 14px 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background-color: var(--mj-bg-surface);\n cursor: pointer;\n transition: border-color 0.15s ease, background-color 0.15s ease;\n}\n\n.cos-mode-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.cos-mode-card--selected {\n border-color: var(--mj-brand-primary);\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.cos-mode-card__top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.cos-mode-card__title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cos-mode-card__check {\n color: var(--mj-brand-primary);\n}\n\n.cos-mode-card__desc {\n margin: 0;\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.45;\n}\n\n.cos-form-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n gap: 14px;\n}\n\n.cos-form-grid--spaced {\n margin-top: 16px;\n}\n\n.cos-form-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.cos-form-field--full {\n grid-column: 1 / -1;\n}\n\n.cos-form-field__label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.cos-input,\n.cos-textarea {\n width: 100%;\n padding: 8px 10px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background-color: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n font-family: inherit;\n box-sizing: border-box;\n}\n\n.cos-input:focus,\n.cos-textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.cos-toggle-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.cos-toggle-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 12px 14px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-subtle);\n background-color: var(--mj-bg-surface);\n cursor: pointer;\n}\n\n.cos-toggle-row__title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cos-toggle-row__desc {\n margin-top: 2px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n/* ========================================================================= */\n/* Task / Priority Detail & Quick-Edit Drawer */\n/* ========================================================================= */\n\n@keyframes cosDrawerSlideIn {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n/* Briefing reader: the embedded chat area fills the slide panel body. */\n.cos-briefing-reader {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.cos-briefing-reader mj-conversation-chat-area {\n flex: 1 1 auto;\n min-height: 0;\n}\n\n/* Assignees on objective cards and milestone rows. */\n\n/* An unassigned milestone shows who holds it by default (its creator or the objective's owner):\n outlined rather than filled, so a real assignment still stands out. */\n\n/* To-dos & reminders */\n\n"] }]
|
|
510
|
+
}], null, null); })();
|
|
511
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChiefOfStaffGovernanceComponent, { className: "ChiefOfStaffGovernanceComponent", filePath: "src/ChiefOfStaff/chief-of-staff-governance.component.ts", lineNumber: 33 }); })();
|
|
512
|
+
export function LoadChiefOfStaffGovernance() {
|
|
513
|
+
// Intentionally empty: forces inclusion of the @RegisterClass side effect.
|
|
514
|
+
}
|
|
515
|
+
//# sourceMappingURL=chief-of-staff-governance.component.js.map
|