@memberjunction/ng-dashboards 5.35.0 → 5.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.js +3 -3
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +22 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +157 -137
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2075 -2068
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +4 -4
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1411 -1424
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +137 -142
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +111 -116
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +13 -65
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +13 -65
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +13 -65
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +13 -65
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +74 -67
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-categories-resource.component.js +152 -159
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +151 -155
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +20 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +131 -125
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +7 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +7 -3
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +97 -99
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +842 -855
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +502 -517
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +78 -89
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1120 -1128
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +606 -661
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +102 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1179 -504
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1527 -327
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +19 -19
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +58 -60
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1007 -1252
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +31 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +543 -629
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +50 -49
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +1 -1
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +16 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -7
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +13 -4
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +16 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +13 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +1 -1
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +13 -1
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
|
@@ -12,33 +12,22 @@ import { IntegrationDataService, ResolveIntegrationIcon } from '../../services/i
|
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
import * as i1 from "@memberjunction/ng-ui-components";
|
|
14
14
|
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
15
|
-
function SchedulesComponent_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
-
i0.ɵɵelement(0, "mj-stat-badge", 8);
|
|
17
|
-
} if (rf & 2) {
|
|
18
|
-
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
19
|
-
i0.ɵɵproperty("Count", ctx_r0.LockedCount);
|
|
20
|
-
} }
|
|
21
15
|
function SchedulesComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
22
16
|
i0.ɵɵelementStart(0, "div", 1);
|
|
23
|
-
i0.ɵɵelement(1, "mj-stat-badge", 6)
|
|
24
|
-
i0.ɵɵconditionalCreate(3, SchedulesComponent_Conditional_2_Conditional_3_Template, 1, 1, "mj-stat-badge", 8);
|
|
17
|
+
i0.ɵɵelement(1, "mj-stat-badge", 6);
|
|
25
18
|
i0.ɵɵelementEnd();
|
|
26
19
|
} if (rf & 2) {
|
|
27
20
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
28
21
|
i0.ɵɵadvance();
|
|
29
|
-
i0.ɵɵproperty("Count", ctx_r0.
|
|
30
|
-
i0.ɵɵadvance();
|
|
31
|
-
i0.ɵɵproperty("Count", ctx_r0.ScheduledCount);
|
|
32
|
-
i0.ɵɵadvance();
|
|
33
|
-
i0.ɵɵconditional(ctx_r0.LockedCount > 0 ? 3 : -1);
|
|
22
|
+
i0.ɵɵproperty("Count", ctx_r0.LockedCount);
|
|
34
23
|
} }
|
|
35
24
|
function SchedulesComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
36
25
|
i0.ɵɵelementStart(0, "div", 4);
|
|
37
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
26
|
+
i0.ɵɵelement(1, "mj-loading", 7);
|
|
38
27
|
i0.ɵɵelementEnd();
|
|
39
28
|
} }
|
|
40
29
|
function SchedulesComponent_Conditional_7_Conditional_1_For_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
-
i0.ɵɵelementStart(0, "span",
|
|
30
|
+
i0.ɵɵelementStart(0, "span", 20);
|
|
42
31
|
i0.ɵɵtext(1);
|
|
43
32
|
i0.ɵɵelementEnd();
|
|
44
33
|
} if (rf & 2) {
|
|
@@ -49,26 +38,26 @@ function SchedulesComponent_Conditional_7_Conditional_1_For_9_Conditional_0_Temp
|
|
|
49
38
|
i0.ɵɵtextInterpolate1(" ", hour_r2, ":00 ");
|
|
50
39
|
} }
|
|
51
40
|
function SchedulesComponent_Conditional_7_Conditional_1_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
-
i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_7_Conditional_1_For_9_Conditional_0_Template, 2, 3, "span",
|
|
41
|
+
i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_7_Conditional_1_For_9_Conditional_0_Template, 2, 3, "span", 19);
|
|
53
42
|
} if (rf & 2) {
|
|
54
43
|
const hour_r2 = ctx.$implicit;
|
|
55
44
|
i0.ɵɵconditional(hour_r2 % 4 === 0 ? 0 : -1);
|
|
56
45
|
} }
|
|
57
46
|
function SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
-
i0.ɵɵelement(0, "div",
|
|
47
|
+
i0.ɵɵelement(0, "div", 28);
|
|
59
48
|
} if (rf & 2) {
|
|
60
49
|
const hour_r3 = i0.ɵɵnextContext().$implicit;
|
|
61
50
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
62
51
|
i0.ɵɵstyleProp("left", ctx_r0.ComputeTimelinePosition(hour_r3, 0), "%");
|
|
63
52
|
} }
|
|
64
53
|
function SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
-
i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Conditional_0_Template, 1, 2, "div",
|
|
54
|
+
i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Conditional_0_Template, 1, 2, "div", 27);
|
|
66
55
|
} if (rf & 2) {
|
|
67
56
|
const hour_r3 = ctx.$implicit;
|
|
68
57
|
i0.ɵɵconditional(hour_r3 % 4 === 0 ? 0 : -1);
|
|
69
58
|
} }
|
|
70
59
|
function SchedulesComponent_Conditional_7_Conditional_1_For_11_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
71
|
-
i0.ɵɵelement(0, "div",
|
|
60
|
+
i0.ɵɵelement(0, "div", 29);
|
|
72
61
|
} if (rf & 2) {
|
|
73
62
|
const marker_r4 = ctx.$implicit;
|
|
74
63
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
@@ -77,20 +66,20 @@ function SchedulesComponent_Conditional_7_Conditional_1_For_11_For_8_Template(rf
|
|
|
77
66
|
i0.ɵɵproperty("title", marker_r4.Hour + ":" + ("" + marker_r4.Minute).padStart(2, "0"));
|
|
78
67
|
} }
|
|
79
68
|
function SchedulesComponent_Conditional_7_Conditional_1_For_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
-
i0.ɵɵelementStart(0, "div",
|
|
81
|
-
i0.ɵɵelement(1, "i",
|
|
69
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
70
|
+
i0.ɵɵelement(1, "i", 30);
|
|
82
71
|
i0.ɵɵelementEnd();
|
|
83
72
|
} }
|
|
84
73
|
function SchedulesComponent_Conditional_7_Conditional_1_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
85
|
-
i0.ɵɵelementStart(0, "div",
|
|
74
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 21);
|
|
86
75
|
i0.ɵɵtext(2);
|
|
87
76
|
i0.ɵɵelementEnd();
|
|
88
|
-
i0.ɵɵelementStart(3, "div",
|
|
77
|
+
i0.ɵɵelementStart(3, "div", 22);
|
|
89
78
|
i0.ɵɵrepeaterCreate(4, SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Template, 1, 1, null, null, i0.ɵɵcomponentInstance().TrackHour, true);
|
|
90
|
-
i0.ɵɵelement(6, "div",
|
|
91
|
-
i0.ɵɵrepeaterCreate(7, SchedulesComponent_Conditional_7_Conditional_1_For_11_For_8_Template, 1, 5, "div",
|
|
92
|
-
i0.ɵɵconditionalCreate(9, SchedulesComponent_Conditional_7_Conditional_1_For_11_Conditional_9_Template, 2, 0, "div",
|
|
93
|
-
i0.ɵɵelement(10, "div",
|
|
79
|
+
i0.ɵɵelement(6, "div", 23);
|
|
80
|
+
i0.ɵɵrepeaterCreate(7, SchedulesComponent_Conditional_7_Conditional_1_For_11_For_8_Template, 1, 5, "div", 24, i0.ɵɵcomponentInstance().TrackMarker, true);
|
|
81
|
+
i0.ɵɵconditionalCreate(9, SchedulesComponent_Conditional_7_Conditional_1_For_11_Conditional_9_Template, 2, 0, "div", 25);
|
|
82
|
+
i0.ɵɵelement(10, "div", 26);
|
|
94
83
|
i0.ɵɵelementEnd()();
|
|
95
84
|
} if (rf & 2) {
|
|
96
85
|
const row_r5 = ctx.$implicit;
|
|
@@ -107,16 +96,16 @@ function SchedulesComponent_Conditional_7_Conditional_1_For_11_Template(rf, ctx)
|
|
|
107
96
|
i0.ɵɵconditional(row_r5.IsLocked ? 9 : -1);
|
|
108
97
|
} }
|
|
109
98
|
function SchedulesComponent_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
-
i0.ɵɵelementStart(0, "div",
|
|
111
|
-
i0.ɵɵelement(2, "i",
|
|
99
|
+
i0.ɵɵelementStart(0, "div", 8)(1, "div", 12);
|
|
100
|
+
i0.ɵɵelement(2, "i", 13);
|
|
112
101
|
i0.ɵɵtext(3, " Next 24 Hours ");
|
|
113
102
|
i0.ɵɵelementEnd();
|
|
114
|
-
i0.ɵɵelementStart(4, "div",
|
|
115
|
-
i0.ɵɵelement(6, "div",
|
|
116
|
-
i0.ɵɵelementStart(7, "div",
|
|
103
|
+
i0.ɵɵelementStart(4, "div", 14)(5, "div", 15);
|
|
104
|
+
i0.ɵɵelement(6, "div", 16);
|
|
105
|
+
i0.ɵɵelementStart(7, "div", 17);
|
|
117
106
|
i0.ɵɵrepeaterCreate(8, SchedulesComponent_Conditional_7_Conditional_1_For_9_Template, 1, 1, null, null, i0.ɵɵcomponentInstance().TrackHour, true);
|
|
118
107
|
i0.ɵɵelementEnd()();
|
|
119
|
-
i0.ɵɵrepeaterCreate(10, SchedulesComponent_Conditional_7_Conditional_1_For_11_Template, 11, 3, "div",
|
|
108
|
+
i0.ɵɵrepeaterCreate(10, SchedulesComponent_Conditional_7_Conditional_1_For_11_Template, 11, 3, "div", 18, i0.ɵɵcomponentInstance().TrackTimelineByID, true);
|
|
120
109
|
i0.ɵɵelementEnd()();
|
|
121
110
|
} if (rf & 2) {
|
|
122
111
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -126,24 +115,24 @@ function SchedulesComponent_Conditional_7_Conditional_1_Template(rf, ctx) { if (
|
|
|
126
115
|
i0.ɵɵrepeater(ctx_r0.TimelineMarkers);
|
|
127
116
|
} }
|
|
128
117
|
function SchedulesComponent_Conditional_7_For_4_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
-
i0.ɵɵelementStart(0, "span",
|
|
118
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
130
119
|
i0.ɵɵtext(1, "Active");
|
|
131
120
|
i0.ɵɵelementEnd();
|
|
132
121
|
} }
|
|
133
122
|
function SchedulesComponent_Conditional_7_For_4_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
-
i0.ɵɵelementStart(0, "span",
|
|
123
|
+
i0.ɵɵelementStart(0, "span", 39);
|
|
135
124
|
i0.ɵɵtext(1, "Inactive");
|
|
136
125
|
i0.ɵɵelementEnd();
|
|
137
126
|
} }
|
|
138
127
|
function SchedulesComponent_Conditional_7_For_4_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
-
i0.ɵɵelementStart(0, "span",
|
|
140
|
-
i0.ɵɵelement(1, "i",
|
|
128
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
129
|
+
i0.ɵɵelement(1, "i", 30);
|
|
141
130
|
i0.ɵɵtext(2, " Running ");
|
|
142
131
|
i0.ɵɵelementEnd();
|
|
143
132
|
} }
|
|
144
133
|
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
145
134
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
146
|
-
i0.ɵɵelementStart(0, "button",
|
|
135
|
+
i0.ɵɵelementStart(0, "button", 63);
|
|
147
136
|
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_For_3_Template_button_click_0_listener() { const preset_r11 = i0.ɵɵrestoreView(_r10).$implicit; const schedule_r7 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetInterval(schedule_r7.ID, preset_r11.Minutes)); });
|
|
148
137
|
i0.ɵɵtext(1);
|
|
149
138
|
i0.ɵɵelementEnd();
|
|
@@ -157,13 +146,13 @@ function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_For
|
|
|
157
146
|
} }
|
|
158
147
|
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
159
148
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
160
|
-
i0.ɵɵelementStart(0, "div",
|
|
161
|
-
i0.ɵɵrepeaterCreate(2, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_For_3_Template, 2, 3, "button",
|
|
149
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 58);
|
|
150
|
+
i0.ɵɵrepeaterCreate(2, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_For_3_Template, 2, 3, "button", 59, i0.ɵɵcomponentInstance().TrackPresetByMinutes, true);
|
|
162
151
|
i0.ɵɵelementEnd();
|
|
163
|
-
i0.ɵɵelementStart(4, "div",
|
|
152
|
+
i0.ɵɵelementStart(4, "div", 60)(5, "input", 61);
|
|
164
153
|
i0.ɵɵlistener("change", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r9); const schedule_r7 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetCustomInterval(schedule_r7.ID, $event)); });
|
|
165
154
|
i0.ɵɵelementEnd();
|
|
166
|
-
i0.ɵɵelementStart(6, "span",
|
|
155
|
+
i0.ɵɵelementStart(6, "span", 62);
|
|
167
156
|
i0.ɵɵtext(7, "min");
|
|
168
157
|
i0.ɵɵelementEnd()()();
|
|
169
158
|
} if (rf & 2) {
|
|
@@ -176,7 +165,7 @@ function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_Tem
|
|
|
176
165
|
} }
|
|
177
166
|
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
178
167
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
179
|
-
i0.ɵɵelementStart(0, "button",
|
|
168
|
+
i0.ɵɵelementStart(0, "button", 63);
|
|
180
169
|
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_For_3_Template_button_click_0_listener() { const preset_r14 = i0.ɵɵrestoreView(_r13).$implicit; const schedule_r7 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetCronExpression(schedule_r7.ID, preset_r14.Expression)); });
|
|
181
170
|
i0.ɵɵtext(1);
|
|
182
171
|
i0.ɵɵelementEnd();
|
|
@@ -189,7 +178,7 @@ function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_For
|
|
|
189
178
|
i0.ɵɵtextInterpolate1(" ", preset_r14.Label, " ");
|
|
190
179
|
} }
|
|
191
180
|
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
192
|
-
i0.ɵɵelementStart(0, "span",
|
|
181
|
+
i0.ɵɵelementStart(0, "span", 67);
|
|
193
182
|
i0.ɵɵtext(1);
|
|
194
183
|
i0.ɵɵelementEnd();
|
|
195
184
|
} if (rf & 2) {
|
|
@@ -200,13 +189,13 @@ function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Con
|
|
|
200
189
|
} }
|
|
201
190
|
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
202
191
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
203
|
-
i0.ɵɵelementStart(0, "div",
|
|
204
|
-
i0.ɵɵrepeaterCreate(2, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_For_3_Template, 2, 3, "button",
|
|
192
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 64);
|
|
193
|
+
i0.ɵɵrepeaterCreate(2, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_For_3_Template, 2, 3, "button", 59, i0.ɵɵcomponentInstance().TrackCronPresetByExpr, true);
|
|
205
194
|
i0.ɵɵelementEnd();
|
|
206
|
-
i0.ɵɵelementStart(4, "div",
|
|
195
|
+
i0.ɵɵelementStart(4, "div", 65)(5, "input", 66);
|
|
207
196
|
i0.ɵɵlistener("change", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r12); const schedule_r7 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnCronInputChange(schedule_r7.ID, $event)); });
|
|
208
197
|
i0.ɵɵelementEnd();
|
|
209
|
-
i0.ɵɵconditionalCreate(6, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Conditional_6_Template, 2, 1, "span",
|
|
198
|
+
i0.ɵɵconditionalCreate(6, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Conditional_6_Template, 2, 1, "span", 67);
|
|
210
199
|
i0.ɵɵelementEnd()();
|
|
211
200
|
} if (rf & 2) {
|
|
212
201
|
const schedule_r7 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -220,20 +209,20 @@ function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Tem
|
|
|
220
209
|
} }
|
|
221
210
|
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
222
211
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
223
|
-
i0.ɵɵelementStart(0, "div",
|
|
212
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 56)(2, "button", 57);
|
|
224
213
|
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r8); const schedule_r7 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetScheduleType(schedule_r7.ID, "Manual")); });
|
|
225
214
|
i0.ɵɵtext(3, " Manual ");
|
|
226
215
|
i0.ɵɵelementEnd();
|
|
227
|
-
i0.ɵɵelementStart(4, "button",
|
|
216
|
+
i0.ɵɵelementStart(4, "button", 57);
|
|
228
217
|
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r8); const schedule_r7 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetScheduleType(schedule_r7.ID, "Interval")); });
|
|
229
218
|
i0.ɵɵtext(5, " Interval ");
|
|
230
219
|
i0.ɵɵelementEnd();
|
|
231
|
-
i0.ɵɵelementStart(6, "button",
|
|
220
|
+
i0.ɵɵelementStart(6, "button", 57);
|
|
232
221
|
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r8); const schedule_r7 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetScheduleType(schedule_r7.ID, "Cron")); });
|
|
233
222
|
i0.ɵɵtext(7, " Cron ");
|
|
234
223
|
i0.ɵɵelementEnd()()();
|
|
235
|
-
i0.ɵɵconditionalCreate(8, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_Template, 8, 1, "div",
|
|
236
|
-
i0.ɵɵconditionalCreate(9, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Template, 7, 2, "div",
|
|
224
|
+
i0.ɵɵconditionalCreate(8, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_Template, 8, 1, "div", 42);
|
|
225
|
+
i0.ɵɵconditionalCreate(9, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Template, 7, 2, "div", 42);
|
|
237
226
|
} if (rf & 2) {
|
|
238
227
|
const schedule_r7 = i0.ɵɵnextContext().$implicit;
|
|
239
228
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -249,27 +238,27 @@ function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template(rf, ctx)
|
|
|
249
238
|
i0.ɵɵconditional(ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Cron" ? 9 : -1);
|
|
250
239
|
} }
|
|
251
240
|
function SchedulesComponent_Conditional_7_For_4_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
252
|
-
i0.ɵɵelementStart(0, "span",
|
|
253
|
-
i0.ɵɵelement(1, "i",
|
|
241
|
+
i0.ɵɵelementStart(0, "span", 51);
|
|
242
|
+
i0.ɵɵelement(1, "i", 30);
|
|
254
243
|
i0.ɵɵtext(2, " Running ");
|
|
255
244
|
i0.ɵɵelementEnd();
|
|
256
245
|
} }
|
|
257
246
|
function SchedulesComponent_Conditional_7_For_4_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
258
|
-
i0.ɵɵelementStart(0, "span",
|
|
247
|
+
i0.ɵɵelementStart(0, "span", 52);
|
|
259
248
|
i0.ɵɵtext(1, "Idle");
|
|
260
249
|
i0.ɵɵelementEnd();
|
|
261
250
|
} }
|
|
262
251
|
function SchedulesComponent_Conditional_7_For_4_Conditional_38_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
263
|
-
i0.ɵɵelement(0, "i",
|
|
252
|
+
i0.ɵɵelement(0, "i", 30);
|
|
264
253
|
i0.ɵɵtext(1, " Saving... ");
|
|
265
254
|
} }
|
|
266
255
|
function SchedulesComponent_Conditional_7_For_4_Conditional_38_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
267
|
-
i0.ɵɵelement(0, "i",
|
|
256
|
+
i0.ɵɵelement(0, "i", 69);
|
|
268
257
|
i0.ɵɵtext(1, " Save ");
|
|
269
258
|
} }
|
|
270
259
|
function SchedulesComponent_Conditional_7_For_4_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
271
260
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
272
|
-
i0.ɵɵelementStart(0, "button",
|
|
261
|
+
i0.ɵɵelementStart(0, "button", 68);
|
|
273
262
|
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_38_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const schedule_r7 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SaveSchedule(schedule_r7.ID)); });
|
|
274
263
|
i0.ɵɵconditionalCreate(1, SchedulesComponent_Conditional_7_For_4_Conditional_38_Conditional_1_Template, 2, 0)(2, SchedulesComponent_Conditional_7_For_4_Conditional_38_Conditional_2_Template, 2, 0);
|
|
275
264
|
i0.ɵɵelementEnd();
|
|
@@ -281,56 +270,56 @@ function SchedulesComponent_Conditional_7_For_4_Conditional_38_Template(rf, ctx)
|
|
|
281
270
|
i0.ɵɵconditional(ctx_r0.IsSaving(schedule_r7.ID) ? 1 : 2);
|
|
282
271
|
} }
|
|
283
272
|
function SchedulesComponent_Conditional_7_For_4_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
284
|
-
i0.ɵɵelement(0, "i",
|
|
273
|
+
i0.ɵɵelement(0, "i", 30);
|
|
285
274
|
i0.ɵɵtext(1, " Running... ");
|
|
286
275
|
} }
|
|
287
276
|
function SchedulesComponent_Conditional_7_For_4_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
288
|
-
i0.ɵɵelement(0, "i",
|
|
277
|
+
i0.ɵɵelement(0, "i", 70);
|
|
289
278
|
i0.ɵɵtext(1, " Run Now ");
|
|
290
279
|
} }
|
|
291
280
|
function SchedulesComponent_Conditional_7_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
292
281
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
293
|
-
i0.ɵɵelementStart(0, "div",
|
|
282
|
+
i0.ɵɵelementStart(0, "div", 31)(1, "div", 32)(2, "div", 33);
|
|
294
283
|
i0.ɵɵelement(3, "i");
|
|
295
284
|
i0.ɵɵelementEnd();
|
|
296
|
-
i0.ɵɵelementStart(4, "div",
|
|
285
|
+
i0.ɵɵelementStart(4, "div", 34)(5, "div", 35);
|
|
297
286
|
i0.ɵɵtext(6);
|
|
298
287
|
i0.ɵɵelementEnd();
|
|
299
|
-
i0.ɵɵelementStart(7, "div",
|
|
288
|
+
i0.ɵɵelementStart(7, "div", 36);
|
|
300
289
|
i0.ɵɵtext(8);
|
|
301
290
|
i0.ɵɵelementEnd();
|
|
302
|
-
i0.ɵɵelementStart(9, "div",
|
|
303
|
-
i0.ɵɵconditionalCreate(10, SchedulesComponent_Conditional_7_For_4_Conditional_10_Template, 2, 0, "span",
|
|
304
|
-
i0.ɵɵconditionalCreate(12, SchedulesComponent_Conditional_7_For_4_Conditional_12_Template, 3, 0, "span",
|
|
291
|
+
i0.ɵɵelementStart(9, "div", 37);
|
|
292
|
+
i0.ɵɵconditionalCreate(10, SchedulesComponent_Conditional_7_For_4_Conditional_10_Template, 2, 0, "span", 38)(11, SchedulesComponent_Conditional_7_For_4_Conditional_11_Template, 2, 0, "span", 39);
|
|
293
|
+
i0.ɵɵconditionalCreate(12, SchedulesComponent_Conditional_7_For_4_Conditional_12_Template, 3, 0, "span", 40);
|
|
305
294
|
i0.ɵɵelementEnd()()();
|
|
306
|
-
i0.ɵɵelementStart(13, "div",
|
|
295
|
+
i0.ɵɵelementStart(13, "div", 41)(14, "div", 42)(15, "label", 43);
|
|
307
296
|
i0.ɵɵtext(16, " Auto-sync ");
|
|
308
|
-
i0.ɵɵelementStart(17, "button",
|
|
297
|
+
i0.ɵɵelementStart(17, "button", 44);
|
|
309
298
|
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Template_button_click_17_listener() { const schedule_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleScheduleEnabled(schedule_r7.ID)); });
|
|
310
|
-
i0.ɵɵelement(18, "span",
|
|
299
|
+
i0.ɵɵelement(18, "span", 45);
|
|
311
300
|
i0.ɵɵelementEnd()()();
|
|
312
301
|
i0.ɵɵconditionalCreate(19, SchedulesComponent_Conditional_7_For_4_Conditional_19_Template, 10, 8);
|
|
313
302
|
i0.ɵɵelementEnd();
|
|
314
|
-
i0.ɵɵelementStart(20, "div",
|
|
303
|
+
i0.ɵɵelementStart(20, "div", 46)(21, "div", 47)(22, "div", 48)(23, "span", 49);
|
|
315
304
|
i0.ɵɵtext(24, "Next run");
|
|
316
305
|
i0.ɵɵelementEnd();
|
|
317
|
-
i0.ɵɵelementStart(25, "span",
|
|
306
|
+
i0.ɵɵelementStart(25, "span", 50);
|
|
318
307
|
i0.ɵɵtext(26);
|
|
319
308
|
i0.ɵɵelementEnd()();
|
|
320
|
-
i0.ɵɵelementStart(27, "div",
|
|
309
|
+
i0.ɵɵelementStart(27, "div", 48)(28, "span", 49);
|
|
321
310
|
i0.ɵɵtext(29, "Last run");
|
|
322
311
|
i0.ɵɵelementEnd();
|
|
323
|
-
i0.ɵɵelementStart(30, "span",
|
|
312
|
+
i0.ɵɵelementStart(30, "span", 50);
|
|
324
313
|
i0.ɵɵtext(31);
|
|
325
314
|
i0.ɵɵelementEnd()();
|
|
326
|
-
i0.ɵɵelementStart(32, "div",
|
|
315
|
+
i0.ɵɵelementStart(32, "div", 48)(33, "span", 49);
|
|
327
316
|
i0.ɵɵtext(34, "Status");
|
|
328
317
|
i0.ɵɵelementEnd();
|
|
329
|
-
i0.ɵɵconditionalCreate(35, SchedulesComponent_Conditional_7_For_4_Conditional_35_Template, 3, 0, "span",
|
|
318
|
+
i0.ɵɵconditionalCreate(35, SchedulesComponent_Conditional_7_For_4_Conditional_35_Template, 3, 0, "span", 51)(36, SchedulesComponent_Conditional_7_For_4_Conditional_36_Template, 2, 0, "span", 52);
|
|
330
319
|
i0.ɵɵelementEnd()();
|
|
331
|
-
i0.ɵɵelementStart(37, "div",
|
|
332
|
-
i0.ɵɵconditionalCreate(38, SchedulesComponent_Conditional_7_For_4_Conditional_38_Template, 3, 2, "button",
|
|
333
|
-
i0.ɵɵelementStart(39, "button",
|
|
320
|
+
i0.ɵɵelementStart(37, "div", 53);
|
|
321
|
+
i0.ɵɵconditionalCreate(38, SchedulesComponent_Conditional_7_For_4_Conditional_38_Template, 3, 2, "button", 54);
|
|
322
|
+
i0.ɵɵelementStart(39, "button", 55);
|
|
334
323
|
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Template_button_click_39_listener() { const schedule_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.RunNow(schedule_r7.ID)); });
|
|
335
324
|
i0.ɵɵconditionalCreate(40, SchedulesComponent_Conditional_7_For_4_Conditional_40_Template, 2, 0)(41, SchedulesComponent_Conditional_7_For_4_Conditional_41_Template, 2, 0);
|
|
336
325
|
i0.ɵɵelementEnd()()()();
|
|
@@ -367,18 +356,18 @@ function SchedulesComponent_Conditional_7_For_4_Template(rf, ctx) { if (rf & 1)
|
|
|
367
356
|
i0.ɵɵconditional(ctx_r0.IsRunning(schedule_r7.ID) ? 40 : 41);
|
|
368
357
|
} }
|
|
369
358
|
function SchedulesComponent_Conditional_7_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
370
|
-
i0.ɵɵelementStart(0, "div",
|
|
371
|
-
i0.ɵɵelement(1, "i",
|
|
359
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
360
|
+
i0.ɵɵelement(1, "i", 71);
|
|
372
361
|
i0.ɵɵelementStart(2, "p");
|
|
373
362
|
i0.ɵɵtext(3, "No integrations found");
|
|
374
363
|
i0.ɵɵelementEnd()();
|
|
375
364
|
} }
|
|
376
365
|
function SchedulesComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
377
366
|
i0.ɵɵelementStart(0, "div", 5);
|
|
378
|
-
i0.ɵɵconditionalCreate(1, SchedulesComponent_Conditional_7_Conditional_1_Template, 12, 0, "div",
|
|
379
|
-
i0.ɵɵelementStart(2, "div",
|
|
380
|
-
i0.ɵɵrepeaterCreate(3, SchedulesComponent_Conditional_7_For_4_Template, 42, 18, "div",
|
|
381
|
-
i0.ɵɵconditionalCreate(5, SchedulesComponent_Conditional_7_Conditional_5_Template, 4, 0, "div",
|
|
367
|
+
i0.ɵɵconditionalCreate(1, SchedulesComponent_Conditional_7_Conditional_1_Template, 12, 0, "div", 8);
|
|
368
|
+
i0.ɵɵelementStart(2, "div", 9);
|
|
369
|
+
i0.ɵɵrepeaterCreate(3, SchedulesComponent_Conditional_7_For_4_Template, 42, 18, "div", 10, i0.ɵɵcomponentInstance().TrackByID, true);
|
|
370
|
+
i0.ɵɵconditionalCreate(5, SchedulesComponent_Conditional_7_Conditional_5_Template, 4, 0, "div", 11);
|
|
382
371
|
i0.ɵɵelementEnd()();
|
|
383
372
|
} if (rf & 2) {
|
|
384
373
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -904,9 +893,9 @@ let SchedulesComponent = class SchedulesComponent extends BaseResourceComponent
|
|
|
904
893
|
return `${hours}h ${minutes}m`;
|
|
905
894
|
}
|
|
906
895
|
static ɵfac = /*@__PURE__*/ (() => { let ɵSchedulesComponent_BaseFactory; return function SchedulesComponent_Factory(__ngFactoryType__) { return (ɵSchedulesComponent_BaseFactory || (ɵSchedulesComponent_BaseFactory = i0.ɵɵgetInheritedFactory(SchedulesComponent)))(__ngFactoryType__ || SchedulesComponent); }; })();
|
|
907
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulesComponent, selectors: [["app-integration-schedules"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 3, consts: [["Title", "Integration Schedules", "Icon", "fa-solid fa-calendar-check", "Subtitle", "When and how often integrations sync"], ["meta", ""], ["actions", ""], [3, "Clicked", "Loading"], [1, "loading-container"], [1, "schedules-root"], [
|
|
896
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulesComponent, selectors: [["app-integration-schedules"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 3, consts: [["Title", "Integration Schedules", "Icon", "fa-solid fa-calendar-check", "Subtitle", "When and how often integrations sync"], ["meta", ""], ["actions", ""], [3, "Clicked", "Loading"], [1, "loading-container"], [1, "schedules-root"], ["Icon", "fa-solid fa-spinner fa-spin", "Label", "running", "Variant", "running", 3, "Count"], ["text", "Loading schedules..."], [1, "timeline-section"], [1, "cards-section"], [1, "schedule-card", 3, "schedule-card-disabled"], [1, "empty-state"], [1, "timeline-title"], [1, "fa-regular", "fa-clock"], [1, "timeline-container"], [1, "timeline-grid-labels"], [1, "timeline-label-spacer"], [1, "timeline-grid-track"], [1, "timeline-row"], [1, "timeline-hour-label", 3, "left"], [1, "timeline-hour-label"], [1, "timeline-row-label", 3, "title"], [1, "timeline-track-container"], [1, "timeline-track"], [1, "timeline-marker", 3, "timeline-marker-next", "left", "title"], [1, "timeline-locked-indicator"], [1, "timeline-now-line"], [1, "timeline-grid-line", 3, "left"], [1, "timeline-grid-line"], [1, "timeline-marker", 3, "title"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "schedule-card"], [1, "card-info"], [1, "card-icon"], [1, "card-details"], [1, "card-name"], [1, "card-company"], [1, "card-badges"], [1, "badge", "badge-success"], [1, "badge", "badge-gray"], [1, "badge", "badge-running"], [1, "card-config"], [1, "config-row"], [1, "toggle-label"], ["role", "switch", 1, "toggle-switch", 3, "click"], [1, "toggle-knob"], [1, "card-status"], [1, "status-items"], [1, "status-item"], [1, "status-label"], [1, "status-value"], [1, "status-value", "status-running"], [1, "status-value", "status-idle"], [1, "card-actions"], [1, "btn", "btn-primary", "btn-save", 3, "disabled"], [1, "btn", "btn-outline", "btn-run", 3, "click", "disabled"], [1, "type-pills"], [1, "type-pill", 3, "click"], [1, "interval-presets"], [1, "preset-btn", 3, "preset-btn-active"], [1, "custom-interval"], ["type", "number", "placeholder", "Custom min", "min", "1", 1, "interval-input", 3, "change", "value"], [1, "interval-unit"], [1, "preset-btn", 3, "click"], [1, "cron-presets"], [1, "cron-input-row"], ["type", "text", "placeholder", "* * * * *", 1, "cron-input", 3, "change", "value"], [1, "cron-description"], [1, "btn", "btn-primary", "btn-save", 3, "click", "disabled"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-calendar-xmark"]], template: function SchedulesComponent_Template(rf, ctx) { if (rf & 1) {
|
|
908
897
|
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0);
|
|
909
|
-
i0.ɵɵconditionalCreate(2, SchedulesComponent_Conditional_2_Template,
|
|
898
|
+
i0.ɵɵconditionalCreate(2, SchedulesComponent_Conditional_2_Template, 2, 1, "div", 1);
|
|
910
899
|
i0.ɵɵelementStart(3, "div", 2)(4, "mj-refresh-button", 3);
|
|
911
900
|
i0.ɵɵlistener("Clicked", function SchedulesComponent_Template_mj_refresh_button_Clicked_4_listener() { return ctx.LoadData(); });
|
|
912
901
|
i0.ɵɵelementEnd()()();
|
|
@@ -915,7 +904,7 @@ let SchedulesComponent = class SchedulesComponent extends BaseResourceComponent
|
|
|
915
904
|
i0.ɵɵelementEnd()();
|
|
916
905
|
} if (rf & 2) {
|
|
917
906
|
i0.ɵɵadvance(2);
|
|
918
|
-
i0.ɵɵconditional(
|
|
907
|
+
i0.ɵɵconditional(ctx.LockedCount > 0 ? 2 : -1);
|
|
919
908
|
i0.ɵɵadvance(2);
|
|
920
909
|
i0.ɵɵproperty("Loading", ctx.IsLoading);
|
|
921
910
|
i0.ɵɵadvance(2);
|
|
@@ -928,7 +917,7 @@ SchedulesComponent = __decorate([
|
|
|
928
917
|
export { SchedulesComponent };
|
|
929
918
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulesComponent, [{
|
|
930
919
|
type: Component,
|
|
931
|
-
args: [{ standalone: false, selector: 'app-integration-schedules', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integration Schedules\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"When and how often integrations sync\">\n @if (!IsLoading && Schedules.length > 0) {\n <div meta>\n <mj-stat-badge\n [Count]=\"Schedules.length\"\n [Label]=\"Schedules.length === 1 ? 'integration' : 'integrations'\">\n </mj-stat-badge>\n <mj-stat-badge [Count]=\"ScheduledCount\" Label=\"scheduled\"></mj-stat-badge>\n @if (LockedCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-spinner fa-spin\"\n [Count]=\"LockedCount\"\n Label=\"running\"\n Variant=\"running\">\n </mj-stat-badge>\n }\n </div>\n }\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n<!-- Loading state -->\n@if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading schedules...\"></mj-loading>\n </div>\n} @else {\n <div class=\"schedules-root\">\n\n\n <!-- ================================================================= -->\n <!-- TIMELINE (24-hour visual) -->\n <!-- ================================================================= -->\n @if (TimelineMarkers.length > 0) {\n <div class=\"timeline-section\">\n <div class=\"timeline-title\">\n <i class=\"fa-regular fa-clock\"></i>\n Next 24 Hours\n </div>\n <div class=\"timeline-container\">\n <!-- Hour grid labels -->\n <div class=\"timeline-grid-labels\">\n <div class=\"timeline-label-spacer\"></div>\n <div class=\"timeline-grid-track\">\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <span class=\"timeline-hour-label\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n {{ hour }}:00\n </span>\n }\n }\n </div>\n </div>\n\n <!-- Integration rows -->\n @for (row of TimelineMarkers; track TrackTimelineByID($index, row)) {\n <div class=\"timeline-row\">\n <div class=\"timeline-row-label\" [title]=\"row.IntegrationName\">\n {{ row.IntegrationName }}\n </div>\n <div class=\"timeline-track-container\">\n <!-- Hour grid lines -->\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <div class=\"timeline-grid-line\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n </div>\n }\n }\n\n <!-- Track bar -->\n <div class=\"timeline-track\"></div>\n\n <!-- Markers -->\n @for (marker of row.Markers; track TrackMarker($index, marker)) {\n <div class=\"timeline-marker\"\n [class.timeline-marker-next]=\"marker.IsNext\"\n [style.left.%]=\"ComputeTimelinePosition(marker.Hour, marker.Minute)\"\n [title]=\"marker.Hour + ':' + ('' + marker.Minute).padStart(2, '0')\">\n </div>\n }\n\n <!-- Locked indicator -->\n @if (row.IsLocked) {\n <div class=\"timeline-locked-indicator\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n }\n\n <!-- Current time line -->\n <div class=\"timeline-now-line\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ================================================================= -->\n <!-- SCHEDULE CARDS -->\n <!-- ================================================================= -->\n <div class=\"cards-section\">\n @for (schedule of Schedules; track TrackByID($index, schedule)) {\n <div class=\"schedule-card\" [class.schedule-card-disabled]=\"!schedule.IsActive\">\n\n <!-- LEFT: Icon + Info -->\n <div class=\"card-info\">\n <div class=\"card-icon\">\n <i [class]=\"GetIntegrationIcon(schedule.Integration || schedule.Name)\"></i>\n </div>\n <div class=\"card-details\">\n <div class=\"card-name\">{{ schedule.Integration || schedule.Name }}</div>\n <div class=\"card-company\">{{ schedule.Company }}</div>\n <div class=\"card-badges\">\n @if (schedule.IsActive) {\n <span class=\"badge badge-success\">Active</span>\n } @else {\n <span class=\"badge badge-gray\">Inactive</span>\n }\n @if (schedule.IsLocked) {\n <span class=\"badge badge-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- CENTER: Schedule Configuration -->\n <div class=\"card-config\">\n <!-- Schedule toggle -->\n <div class=\"config-row\">\n <label class=\"toggle-label\">\n Auto-sync\n <button class=\"toggle-switch\"\n [class.toggle-on]=\"GetEffectiveScheduleEnabled(schedule)\"\n (click)=\"ToggleScheduleEnabled(schedule.ID)\"\n [attr.aria-checked]=\"GetEffectiveScheduleEnabled(schedule)\"\n role=\"switch\">\n <span class=\"toggle-knob\"></span>\n </button>\n </label>\n </div>\n\n @if (GetEffectiveScheduleEnabled(schedule)) {\n <!-- Schedule type pills -->\n <div class=\"config-row\">\n <div class=\"type-pills\">\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Manual'\"\n (click)=\"SetScheduleType(schedule.ID, 'Manual')\">\n Manual\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Interval'\"\n (click)=\"SetScheduleType(schedule.ID, 'Interval')\">\n Interval\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Cron'\"\n (click)=\"SetScheduleType(schedule.ID, 'Cron')\">\n Cron\n </button>\n </div>\n </div>\n\n <!-- Interval config -->\n @if (GetEffectiveScheduleType(schedule) === 'Interval') {\n <div class=\"config-row\">\n <div class=\"interval-presets\">\n @for (preset of IntervalPresets; track TrackPresetByMinutes($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"IsIntervalSelected(schedule, preset.Minutes)\"\n (click)=\"SetInterval(schedule.ID, preset.Minutes)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"custom-interval\">\n <input type=\"number\"\n class=\"interval-input\"\n placeholder=\"Custom min\"\n min=\"1\"\n [value]=\"GetEffectiveInterval(schedule)\"\n (change)=\"SetCustomInterval(schedule.ID, $event)\" />\n <span class=\"interval-unit\">min</span>\n </div>\n </div>\n }\n\n <!-- Cron config -->\n @if (GetEffectiveScheduleType(schedule) === 'Cron') {\n <div class=\"config-row\">\n <div class=\"cron-presets\">\n @for (preset of CronPresets; track TrackCronPresetByExpr($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"GetEffectiveCron(schedule) === preset.Expression\"\n (click)=\"SetCronExpression(schedule.ID, preset.Expression)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"cron-input-row\">\n <input type=\"text\"\n class=\"cron-input\"\n placeholder=\"* * * * *\"\n [value]=\"GetEffectiveCron(schedule) ?? ''\"\n (change)=\"OnCronInputChange(schedule.ID, $event)\" />\n @if (GetEffectiveCron(schedule)) {\n <span class=\"cron-description\">\n {{ GetCronDescription(GetEffectiveCron(schedule)) }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- RIGHT: Status + Actions -->\n <div class=\"card-status\">\n <div class=\"status-items\">\n <div class=\"status-item\">\n <span class=\"status-label\">Next run</span>\n <span class=\"status-value\">{{ GetNextRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Last run</span>\n <span class=\"status-value\">{{ GetLastRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Status</span>\n @if (schedule.IsLocked) {\n <span class=\"status-value status-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n } @else {\n <span class=\"status-value status-idle\">Idle</span>\n }\n </div>\n </div>\n\n <div class=\"card-actions\">\n @if (HasChanges(schedule.ID)) {\n <button class=\"btn btn-primary btn-save\"\n [disabled]=\"IsSaving(schedule.ID)\"\n (click)=\"SaveSchedule(schedule.ID)\">\n @if (IsSaving(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Save\n }\n </button>\n }\n <button class=\"btn btn-outline btn-run\"\n [disabled]=\"IsRunning(schedule.ID) || schedule.IsLocked\"\n (click)=\"RunNow(schedule.ID)\">\n @if (IsRunning(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Run Now\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n @if (Schedules.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <p>No integrations found</p>\n </div>\n }\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ==========================================================================\n Schedules Component\n ========================================================================== */\n\n:host {\n display: block;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n.schedules-root {\n padding: 24px;\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 300px;\n}\n\n/* --------------------------------------------------------------------------\n Header\n -------------------------------------------------------------------------- */\n\n/* --------------------------------------------------------------------------\n Buttons (shared)\n -------------------------------------------------------------------------- */\n\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n border: none;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-color-info-700);\n}\n\n.btn-outline {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-outline:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-text-disabled);\n}\n\n/* --------------------------------------------------------------------------\n Timeline Section\n -------------------------------------------------------------------------- */\n\n.timeline-section {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 20px 24px;\n margin-bottom: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n}\n\n.timeline-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.timeline-title i {\n color: var(--mj-text-muted);\n}\n\n.timeline-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Grid labels row */\n.timeline-grid-labels {\n display: flex;\n align-items: flex-end;\n height: 20px;\n margin-bottom: 4px;\n}\n\n.timeline-label-spacer {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n}\n\n.timeline-grid-track {\n flex: 1;\n position: relative;\n height: 20px;\n}\n\n.timeline-hour-label {\n position: absolute;\n font-size: 10px;\n color: var(--mj-text-disabled);\n transform: translateX(-50%);\n white-space: nowrap;\n}\n\n/* Individual timeline rows */\n.timeline-row {\n display: flex;\n align-items: center;\n height: 28px;\n}\n\n.timeline-row-label {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-right: 16px;\n}\n\n.timeline-track-container {\n flex: 1;\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.timeline-track {\n position: absolute;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n}\n\n.timeline-grid-line {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1px;\n background: var(--mj-border-subtle);\n z-index: 0;\n}\n\n/* Markers */\n.timeline-marker {\n position: absolute;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-text-disabled);\n transform: translate(-50%, 0);\n z-index: 2;\n transition: all 0.2s ease;\n}\n\n.timeline-marker:hover {\n transform: translate(-50%, 0) scale(1.4);\n}\n\n.timeline-marker-next {\n width: 12px;\n height: 12px;\n background: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);\n}\n\n/* Now line */\n.timeline-now-line {\n position: absolute;\n left: 0;\n top: -2px;\n bottom: -2px;\n width: 2px;\n background: var(--mj-status-error);\n z-index: 3;\n border-radius: 1px;\n}\n\n/* Locked indicator */\n.timeline-locked-indicator {\n position: absolute;\n left: -4px;\n font-size: 12px;\n color: var(--mj-color-warning-600);\n z-index: 4;\n animation: pulse-opacity 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-opacity {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n/* --------------------------------------------------------------------------\n Schedule Cards\n -------------------------------------------------------------------------- */\n\n.cards-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.schedule-card {\n display: flex;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: box-shadow 0.2s ease;\n gap: 32px;\n}\n\n.schedule-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n}\n\n.schedule-card-disabled {\n opacity: 0.6;\n}\n\n/* Card: Left (info) */\n.card-info {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n min-width: 220px;\n flex-shrink: 0;\n}\n\n.card-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: var(--mj-status-info-bg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.card-icon i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.card-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.card-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.card-company {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.card-badges {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.badge-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-color-success-600);\n}\n\n.badge-gray {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.badge-running {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n/* Card: Center (config) */\n.card-config {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.config-row {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Toggle switch */\n.toggle-label {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.toggle-switch {\n position: relative;\n width: 40px;\n height: 22px;\n border-radius: 11px;\n background: var(--mj-color-neutral-300);\n border: none;\n cursor: pointer;\n transition: background 0.2s ease;\n padding: 0;\n flex-shrink: 0;\n}\n\n.toggle-switch.toggle-on {\n background: var(--mj-brand-primary);\n}\n\n.toggle-knob {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease;\n}\n\n.toggle-on .toggle-knob {\n transform: translateX(18px);\n}\n\n/* Type pills */\n.type-pills {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-hover);\n border-radius: 8px;\n padding: 3px;\n width: fit-content;\n}\n\n.type-pill {\n padding: 5px 14px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: transparent;\n border: none;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.type-pill:hover {\n color: var(--mj-text-secondary);\n}\n\n.type-pill-active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n/* Interval presets */\n.interval-presets {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.preset-btn {\n padding: 4px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-hover);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.preset-btn:hover {\n border-color: var(--mj-text-disabled);\n color: var(--mj-text-secondary);\n}\n\n.preset-btn-active {\n background: var(--mj-status-info-bg);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* Custom interval input */\n.custom-interval {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 4px;\n}\n\n.interval-input {\n width: 100px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.interval-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.interval-unit {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n/* Cron config */\n.cron-presets {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.cron-input-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.cron-input {\n width: 180px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.cron-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.cron-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Card: Right (status) */\n.card-status {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 16px;\n min-width: 180px;\n flex-shrink: 0;\n}\n\n.status-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n text-align: right;\n}\n\n.status-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.status-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-value {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.status-running {\n color: var(--mj-color-warning-600);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n}\n\n.status-idle {\n color: var(--mj-color-success-600);\n}\n\n/* Card actions */\n.card-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-save {\n animation: slideIn 0.2s ease;\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.btn-run {\n font-size: 12px;\n padding: 6px 12px;\n}\n\n/* --------------------------------------------------------------------------\n Empty State\n -------------------------------------------------------------------------- */\n\n.empty-state {\n text-align: center;\n padding: 60px 24px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n}\n\n.empty-state p {\n font-size: 15px;\n margin: 0;\n}\n\n/* --------------------------------------------------------------------------\n Responsive\n -------------------------------------------------------------------------- */\n\n@media (max-width: 900px) {\n .schedule-card {\n flex-direction: column;\n gap: 20px;\n }\n\n .card-info {\n min-width: 0;\n width: 100%;\n }\n\n .card-config {\n width: 100%;\n }\n\n .card-status {\n align-items: flex-start;\n width: 100%;\n min-width: 0;\n }\n\n .status-items {\n text-align: left;\n flex-direction: row;\n gap: 20px;\n flex-wrap: wrap;\n }\n\n .status-running {\n justify-content: flex-start;\n }\n\n .card-actions {\n width: 100%;\n }\n\n .card-actions .btn {\n flex: 1;\n justify-content: center;\n }\n}\n\n@media (max-width: 768px) {\n .timeline-section {\n display: none;\n }\n\n .schedules-root {\n padding: 16px;\n }\n}\n"] }]
|
|
920
|
+
args: [{ standalone: false, selector: 'app-integration-schedules', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integration Schedules\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"When and how often integrations sync\">\n <!-- [meta] retains the conditional \"running\" status pill (genuine\n signal); integrations/scheduled count badges dropped per chrome\n slot discipline audit Task B \u2014 both mirrored the visible list. -->\n @if (LockedCount > 0) {\n <div meta>\n <mj-stat-badge\n Icon=\"fa-solid fa-spinner fa-spin\"\n [Count]=\"LockedCount\"\n Label=\"running\"\n Variant=\"running\">\n </mj-stat-badge>\n </div>\n }\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n<!-- Loading state -->\n@if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading schedules...\"></mj-loading>\n </div>\n} @else {\n <div class=\"schedules-root\">\n\n\n <!-- ================================================================= -->\n <!-- TIMELINE (24-hour visual) -->\n <!-- ================================================================= -->\n @if (TimelineMarkers.length > 0) {\n <div class=\"timeline-section\">\n <div class=\"timeline-title\">\n <i class=\"fa-regular fa-clock\"></i>\n Next 24 Hours\n </div>\n <div class=\"timeline-container\">\n <!-- Hour grid labels -->\n <div class=\"timeline-grid-labels\">\n <div class=\"timeline-label-spacer\"></div>\n <div class=\"timeline-grid-track\">\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <span class=\"timeline-hour-label\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n {{ hour }}:00\n </span>\n }\n }\n </div>\n </div>\n\n <!-- Integration rows -->\n @for (row of TimelineMarkers; track TrackTimelineByID($index, row)) {\n <div class=\"timeline-row\">\n <div class=\"timeline-row-label\" [title]=\"row.IntegrationName\">\n {{ row.IntegrationName }}\n </div>\n <div class=\"timeline-track-container\">\n <!-- Hour grid lines -->\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <div class=\"timeline-grid-line\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n </div>\n }\n }\n\n <!-- Track bar -->\n <div class=\"timeline-track\"></div>\n\n <!-- Markers -->\n @for (marker of row.Markers; track TrackMarker($index, marker)) {\n <div class=\"timeline-marker\"\n [class.timeline-marker-next]=\"marker.IsNext\"\n [style.left.%]=\"ComputeTimelinePosition(marker.Hour, marker.Minute)\"\n [title]=\"marker.Hour + ':' + ('' + marker.Minute).padStart(2, '0')\">\n </div>\n }\n\n <!-- Locked indicator -->\n @if (row.IsLocked) {\n <div class=\"timeline-locked-indicator\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n }\n\n <!-- Current time line -->\n <div class=\"timeline-now-line\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ================================================================= -->\n <!-- SCHEDULE CARDS -->\n <!-- ================================================================= -->\n <div class=\"cards-section\">\n @for (schedule of Schedules; track TrackByID($index, schedule)) {\n <div class=\"schedule-card\" [class.schedule-card-disabled]=\"!schedule.IsActive\">\n\n <!-- LEFT: Icon + Info -->\n <div class=\"card-info\">\n <div class=\"card-icon\">\n <i [class]=\"GetIntegrationIcon(schedule.Integration || schedule.Name)\"></i>\n </div>\n <div class=\"card-details\">\n <div class=\"card-name\">{{ schedule.Integration || schedule.Name }}</div>\n <div class=\"card-company\">{{ schedule.Company }}</div>\n <div class=\"card-badges\">\n @if (schedule.IsActive) {\n <span class=\"badge badge-success\">Active</span>\n } @else {\n <span class=\"badge badge-gray\">Inactive</span>\n }\n @if (schedule.IsLocked) {\n <span class=\"badge badge-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- CENTER: Schedule Configuration -->\n <div class=\"card-config\">\n <!-- Schedule toggle -->\n <div class=\"config-row\">\n <label class=\"toggle-label\">\n Auto-sync\n <button class=\"toggle-switch\"\n [class.toggle-on]=\"GetEffectiveScheduleEnabled(schedule)\"\n (click)=\"ToggleScheduleEnabled(schedule.ID)\"\n [attr.aria-checked]=\"GetEffectiveScheduleEnabled(schedule)\"\n role=\"switch\">\n <span class=\"toggle-knob\"></span>\n </button>\n </label>\n </div>\n\n @if (GetEffectiveScheduleEnabled(schedule)) {\n <!-- Schedule type pills -->\n <div class=\"config-row\">\n <div class=\"type-pills\">\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Manual'\"\n (click)=\"SetScheduleType(schedule.ID, 'Manual')\">\n Manual\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Interval'\"\n (click)=\"SetScheduleType(schedule.ID, 'Interval')\">\n Interval\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Cron'\"\n (click)=\"SetScheduleType(schedule.ID, 'Cron')\">\n Cron\n </button>\n </div>\n </div>\n\n <!-- Interval config -->\n @if (GetEffectiveScheduleType(schedule) === 'Interval') {\n <div class=\"config-row\">\n <div class=\"interval-presets\">\n @for (preset of IntervalPresets; track TrackPresetByMinutes($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"IsIntervalSelected(schedule, preset.Minutes)\"\n (click)=\"SetInterval(schedule.ID, preset.Minutes)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"custom-interval\">\n <input type=\"number\"\n class=\"interval-input\"\n placeholder=\"Custom min\"\n min=\"1\"\n [value]=\"GetEffectiveInterval(schedule)\"\n (change)=\"SetCustomInterval(schedule.ID, $event)\" />\n <span class=\"interval-unit\">min</span>\n </div>\n </div>\n }\n\n <!-- Cron config -->\n @if (GetEffectiveScheduleType(schedule) === 'Cron') {\n <div class=\"config-row\">\n <div class=\"cron-presets\">\n @for (preset of CronPresets; track TrackCronPresetByExpr($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"GetEffectiveCron(schedule) === preset.Expression\"\n (click)=\"SetCronExpression(schedule.ID, preset.Expression)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"cron-input-row\">\n <input type=\"text\"\n class=\"cron-input\"\n placeholder=\"* * * * *\"\n [value]=\"GetEffectiveCron(schedule) ?? ''\"\n (change)=\"OnCronInputChange(schedule.ID, $event)\" />\n @if (GetEffectiveCron(schedule)) {\n <span class=\"cron-description\">\n {{ GetCronDescription(GetEffectiveCron(schedule)) }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- RIGHT: Status + Actions -->\n <div class=\"card-status\">\n <div class=\"status-items\">\n <div class=\"status-item\">\n <span class=\"status-label\">Next run</span>\n <span class=\"status-value\">{{ GetNextRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Last run</span>\n <span class=\"status-value\">{{ GetLastRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Status</span>\n @if (schedule.IsLocked) {\n <span class=\"status-value status-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n } @else {\n <span class=\"status-value status-idle\">Idle</span>\n }\n </div>\n </div>\n\n <div class=\"card-actions\">\n @if (HasChanges(schedule.ID)) {\n <button class=\"btn btn-primary btn-save\"\n [disabled]=\"IsSaving(schedule.ID)\"\n (click)=\"SaveSchedule(schedule.ID)\">\n @if (IsSaving(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Save\n }\n </button>\n }\n <button class=\"btn btn-outline btn-run\"\n [disabled]=\"IsRunning(schedule.ID) || schedule.IsLocked\"\n (click)=\"RunNow(schedule.ID)\">\n @if (IsRunning(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Run Now\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n @if (Schedules.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <p>No integrations found</p>\n </div>\n }\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ==========================================================================\n Schedules Component\n ========================================================================== */\n\n:host {\n display: block;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n.schedules-root {\n padding: 24px;\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 300px;\n}\n\n/* --------------------------------------------------------------------------\n Header\n -------------------------------------------------------------------------- */\n\n/* --------------------------------------------------------------------------\n Buttons (shared)\n -------------------------------------------------------------------------- */\n\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n border: none;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-color-info-700);\n}\n\n.btn-outline {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-outline:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-text-disabled);\n}\n\n/* --------------------------------------------------------------------------\n Timeline Section\n -------------------------------------------------------------------------- */\n\n.timeline-section {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 20px 24px;\n margin-bottom: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n}\n\n.timeline-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.timeline-title i {\n color: var(--mj-text-muted);\n}\n\n.timeline-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Grid labels row */\n.timeline-grid-labels {\n display: flex;\n align-items: flex-end;\n height: 20px;\n margin-bottom: 4px;\n}\n\n.timeline-label-spacer {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n}\n\n.timeline-grid-track {\n flex: 1;\n position: relative;\n height: 20px;\n}\n\n.timeline-hour-label {\n position: absolute;\n font-size: 10px;\n color: var(--mj-text-disabled);\n transform: translateX(-50%);\n white-space: nowrap;\n}\n\n/* Individual timeline rows */\n.timeline-row {\n display: flex;\n align-items: center;\n height: 28px;\n}\n\n.timeline-row-label {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-right: 16px;\n}\n\n.timeline-track-container {\n flex: 1;\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.timeline-track {\n position: absolute;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n}\n\n.timeline-grid-line {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1px;\n background: var(--mj-border-subtle);\n z-index: 0;\n}\n\n/* Markers */\n.timeline-marker {\n position: absolute;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-text-disabled);\n transform: translate(-50%, 0);\n z-index: 2;\n transition: all 0.2s ease;\n}\n\n.timeline-marker:hover {\n transform: translate(-50%, 0) scale(1.4);\n}\n\n.timeline-marker-next {\n width: 12px;\n height: 12px;\n background: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);\n}\n\n/* Now line */\n.timeline-now-line {\n position: absolute;\n left: 0;\n top: -2px;\n bottom: -2px;\n width: 2px;\n background: var(--mj-status-error);\n z-index: 3;\n border-radius: 1px;\n}\n\n/* Locked indicator */\n.timeline-locked-indicator {\n position: absolute;\n left: -4px;\n font-size: 12px;\n color: var(--mj-color-warning-600);\n z-index: 4;\n animation: pulse-opacity 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-opacity {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n/* --------------------------------------------------------------------------\n Schedule Cards\n -------------------------------------------------------------------------- */\n\n.cards-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.schedule-card {\n display: flex;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: box-shadow 0.2s ease;\n gap: 32px;\n}\n\n.schedule-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n}\n\n.schedule-card-disabled {\n opacity: 0.6;\n}\n\n/* Card: Left (info) */\n.card-info {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n min-width: 220px;\n flex-shrink: 0;\n}\n\n.card-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: var(--mj-status-info-bg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.card-icon i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.card-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.card-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.card-company {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.card-badges {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.badge-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-color-success-600);\n}\n\n.badge-gray {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.badge-running {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n/* Card: Center (config) */\n.card-config {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.config-row {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Toggle switch */\n.toggle-label {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.toggle-switch {\n position: relative;\n width: 40px;\n height: 22px;\n border-radius: 11px;\n background: var(--mj-color-neutral-300);\n border: none;\n cursor: pointer;\n transition: background 0.2s ease;\n padding: 0;\n flex-shrink: 0;\n}\n\n.toggle-switch.toggle-on {\n background: var(--mj-brand-primary);\n}\n\n.toggle-knob {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease;\n}\n\n.toggle-on .toggle-knob {\n transform: translateX(18px);\n}\n\n/* Type pills */\n.type-pills {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-hover);\n border-radius: 8px;\n padding: 3px;\n width: fit-content;\n}\n\n.type-pill {\n padding: 5px 14px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: transparent;\n border: none;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.type-pill:hover {\n color: var(--mj-text-secondary);\n}\n\n.type-pill-active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n/* Interval presets */\n.interval-presets {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.preset-btn {\n padding: 4px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-hover);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.preset-btn:hover {\n border-color: var(--mj-text-disabled);\n color: var(--mj-text-secondary);\n}\n\n.preset-btn-active {\n background: var(--mj-status-info-bg);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* Custom interval input */\n.custom-interval {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 4px;\n}\n\n.interval-input {\n width: 100px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.interval-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.interval-unit {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n/* Cron config */\n.cron-presets {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.cron-input-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.cron-input {\n width: 180px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.cron-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.cron-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Card: Right (status) */\n.card-status {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 16px;\n min-width: 180px;\n flex-shrink: 0;\n}\n\n.status-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n text-align: right;\n}\n\n.status-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.status-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-value {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.status-running {\n color: var(--mj-color-warning-600);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n}\n\n.status-idle {\n color: var(--mj-color-success-600);\n}\n\n/* Card actions */\n.card-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-save {\n animation: slideIn 0.2s ease;\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.btn-run {\n font-size: 12px;\n padding: 6px 12px;\n}\n\n/* --------------------------------------------------------------------------\n Empty State\n -------------------------------------------------------------------------- */\n\n.empty-state {\n text-align: center;\n padding: 60px 24px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n}\n\n.empty-state p {\n font-size: 15px;\n margin: 0;\n}\n\n/* --------------------------------------------------------------------------\n Responsive\n -------------------------------------------------------------------------- */\n\n@media (max-width: 900px) {\n .schedule-card {\n flex-direction: column;\n gap: 20px;\n }\n\n .card-info {\n min-width: 0;\n width: 100%;\n }\n\n .card-config {\n width: 100%;\n }\n\n .card-status {\n align-items: flex-start;\n width: 100%;\n min-width: 0;\n }\n\n .status-items {\n text-align: left;\n flex-direction: row;\n gap: 20px;\n flex-wrap: wrap;\n }\n\n .status-running {\n justify-content: flex-start;\n }\n\n .card-actions {\n width: 100%;\n }\n\n .card-actions .btn {\n flex: 1;\n justify-content: center;\n }\n}\n\n@media (max-width: 768px) {\n .timeline-section {\n display: none;\n }\n\n .schedules-root {\n padding: 16px;\n }\n}\n"] }]
|
|
932
921
|
}], null, null); })();
|
|
933
922
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulesComponent, { className: "SchedulesComponent", filePath: "src/Integration/components/schedules/schedules.component.ts", lineNumber: 63 }); })();
|
|
934
923
|
export function LoadSchedulesComponent() {
|