@memberjunction/ng-archive-manager 5.43.0 → 5.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/archive-config/archive-config-admin.component.js +65 -74
- package/dist/lib/archive-config/archive-config-admin.component.js.map +1 -1
- package/dist/lib/archive-manager.module.d.ts +2 -1
- package/dist/lib/archive-manager.module.d.ts.map +1 -1
- package/dist/lib/archive-manager.module.js +6 -2
- package/dist/lib/archive-manager.module.js.map +1 -1
- package/dist/lib/archive-restore/archive-restore-dialog.component.js +20 -27
- package/dist/lib/archive-restore/archive-restore-dialog.component.js.map +1 -1
- package/dist/lib/archive-run-viewer/archive-run-viewer.component.js +51 -56
- package/dist/lib/archive-run-viewer/archive-run-viewer.component.js.map +1 -1
- package/package.json +9 -7
|
@@ -5,6 +5,7 @@ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/forms";
|
|
7
7
|
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
8
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
8
9
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
9
10
|
function ArchiveConfigAdminComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
10
11
|
i0.ɵɵelementStart(0, "div", 1);
|
|
@@ -51,26 +52,18 @@ function ArchiveConfigAdminComponent_Conditional_2_For_10_Template(rf, ctx) { if
|
|
|
51
52
|
i0.ɵɵtextInterpolate1(" ", config_r4.DefaultMode);
|
|
52
53
|
} }
|
|
53
54
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
-
i0.ɵɵ
|
|
55
|
-
i0.ɵɵelement(1, "i", 23);
|
|
56
|
-
i0.ɵɵelementStart(2, "p");
|
|
57
|
-
i0.ɵɵtext(3, "No configurations found. Create one to get started.");
|
|
58
|
-
i0.ɵɵelementEnd()();
|
|
55
|
+
i0.ɵɵelement(0, "mj-empty-state", 10);
|
|
59
56
|
} }
|
|
60
57
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
-
i0.ɵɵ
|
|
62
|
-
i0.ɵɵelement(1, "i", 24);
|
|
63
|
-
i0.ɵɵelementStart(2, "p");
|
|
64
|
-
i0.ɵɵtext(3, "Select a configuration to view details");
|
|
65
|
-
i0.ɵɵelementEnd()();
|
|
58
|
+
i0.ɵɵelement(0, "mj-empty-state", 12);
|
|
66
59
|
} }
|
|
67
60
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
68
|
-
i0.ɵɵelementStart(0, "div",
|
|
69
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
61
|
+
i0.ɵɵelementStart(0, "div", 23);
|
|
62
|
+
i0.ɵɵelement(1, "mj-loading", 25);
|
|
70
63
|
i0.ɵɵelementEnd();
|
|
71
64
|
} }
|
|
72
65
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_For_27_Template(rf, ctx) { if (rf & 1) {
|
|
73
|
-
i0.ɵɵelementStart(0, "option",
|
|
66
|
+
i0.ɵɵelementStart(0, "option", 39);
|
|
74
67
|
i0.ɵɵtext(1);
|
|
75
68
|
i0.ɵɵelementEnd();
|
|
76
69
|
} if (rf & 2) {
|
|
@@ -80,7 +73,7 @@ function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_
|
|
|
80
73
|
i0.ɵɵtextInterpolate(account_r6.Name);
|
|
81
74
|
} }
|
|
82
75
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_For_51_Template(rf, ctx) { if (rf & 1) {
|
|
83
|
-
i0.ɵɵelementStart(0, "option",
|
|
76
|
+
i0.ɵɵelementStart(0, "option", 39);
|
|
84
77
|
i0.ɵɵtext(1);
|
|
85
78
|
i0.ɵɵelementEnd();
|
|
86
79
|
} if (rf & 2) {
|
|
@@ -90,7 +83,7 @@ function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_
|
|
|
90
83
|
i0.ɵɵtextInterpolate(mode_r7);
|
|
91
84
|
} }
|
|
92
85
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
93
|
-
i0.ɵɵelementStart(0, "option",
|
|
86
|
+
i0.ɵɵelementStart(0, "option", 39);
|
|
94
87
|
i0.ɵɵtext(1);
|
|
95
88
|
i0.ɵɵelementEnd();
|
|
96
89
|
} if (rf & 2) {
|
|
@@ -101,34 +94,34 @@ function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_
|
|
|
101
94
|
} }
|
|
102
95
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
103
96
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
104
|
-
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "input",
|
|
97
|
+
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "input", 59);
|
|
105
98
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_2_listener($event) { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; i0.ɵɵtwoWayBindingSet(entity_r9.EntityName, $event) || (entity_r9.EntityName = $event); return i0.ɵɵresetView($event); });
|
|
106
99
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_2_listener() { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OnEntityChanged(entity_r9)); });
|
|
107
100
|
i0.ɵɵelementEnd()();
|
|
108
|
-
i0.ɵɵelementStart(3, "td")(4, "select",
|
|
101
|
+
i0.ɵɵelementStart(3, "td")(4, "select", 60);
|
|
109
102
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_select_ngModelChange_4_listener($event) { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; i0.ɵɵtwoWayBindingSet(entity_r9.Mode, $event) || (entity_r9.Mode = $event); return i0.ɵɵresetView($event); });
|
|
110
103
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_select_ngModelChange_4_listener() { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OnEntityChanged(entity_r9)); });
|
|
111
|
-
i0.ɵɵrepeaterCreate(5, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_For_6_Template, 2, 2, "option",
|
|
104
|
+
i0.ɵɵrepeaterCreate(5, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_For_6_Template, 2, 2, "option", 39, i0.ɵɵrepeaterTrackByIdentity);
|
|
112
105
|
i0.ɵɵelementEnd()();
|
|
113
|
-
i0.ɵɵelementStart(7, "td")(8, "input",
|
|
106
|
+
i0.ɵɵelementStart(7, "td")(8, "input", 61);
|
|
114
107
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_8_listener($event) { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; i0.ɵɵtwoWayBindingSet(entity_r9.RetentionDays, $event) || (entity_r9.RetentionDays = $event); return i0.ɵɵresetView($event); });
|
|
115
108
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_8_listener() { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OnEntityChanged(entity_r9)); });
|
|
116
109
|
i0.ɵɵelementEnd()();
|
|
117
|
-
i0.ɵɵelementStart(9, "td")(10, "input",
|
|
110
|
+
i0.ɵɵelementStart(9, "td")(10, "input", 61);
|
|
118
111
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_10_listener($event) { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; i0.ɵɵtwoWayBindingSet(entity_r9.BatchSize, $event) || (entity_r9.BatchSize = $event); return i0.ɵɵresetView($event); });
|
|
119
112
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_10_listener() { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OnEntityChanged(entity_r9)); });
|
|
120
113
|
i0.ɵɵelementEnd()();
|
|
121
|
-
i0.ɵɵelementStart(11, "td")(12, "input",
|
|
114
|
+
i0.ɵɵelementStart(11, "td")(12, "input", 62);
|
|
122
115
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_12_listener($event) { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; i0.ɵɵtwoWayBindingSet(entity_r9.DateField, $event) || (entity_r9.DateField = $event); return i0.ɵɵresetView($event); });
|
|
123
116
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_12_listener() { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OnEntityChanged(entity_r9)); });
|
|
124
117
|
i0.ɵɵelementEnd()();
|
|
125
|
-
i0.ɵɵelementStart(13, "td")(14, "input",
|
|
118
|
+
i0.ɵɵelementStart(13, "td")(14, "input", 48);
|
|
126
119
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_14_listener($event) { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; i0.ɵɵtwoWayBindingSet(entity_r9.IsActive, $event) || (entity_r9.IsActive = $event); return i0.ɵɵresetView($event); });
|
|
127
120
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_input_ngModelChange_14_listener() { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OnEntityChanged(entity_r9)); });
|
|
128
121
|
i0.ɵɵelementEnd()();
|
|
129
|
-
i0.ɵɵelementStart(15, "td")(16, "button",
|
|
122
|
+
i0.ɵɵelementStart(15, "td")(16, "button", 63);
|
|
130
123
|
i0.ɵɵlistener("click", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_For_19_Template_button_click_16_listener() { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.RemoveEntity(entity_r9)); });
|
|
131
|
-
i0.ɵɵelement(17, "i",
|
|
124
|
+
i0.ɵɵelement(17, "i", 64);
|
|
132
125
|
i0.ɵɵelementEnd()()();
|
|
133
126
|
} if (rf & 2) {
|
|
134
127
|
const entity_r9 = ctx.$implicit;
|
|
@@ -149,7 +142,7 @@ function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_
|
|
|
149
142
|
i0.ɵɵtwoWayProperty("ngModel", entity_r9.IsActive);
|
|
150
143
|
} }
|
|
151
144
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
152
|
-
i0.ɵɵelementStart(0, "div",
|
|
145
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "table", 58)(2, "thead")(3, "tr")(4, "th");
|
|
153
146
|
i0.ɵɵtext(5, "Entity");
|
|
154
147
|
i0.ɵɵelementEnd();
|
|
155
148
|
i0.ɵɵelementStart(6, "th");
|
|
@@ -178,20 +171,18 @@ function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_
|
|
|
178
171
|
i0.ɵɵrepeater(ctx_r1.ConfigEntities);
|
|
179
172
|
} }
|
|
180
173
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_66_Template(rf, ctx) { if (rf & 1) {
|
|
181
|
-
i0.ɵɵ
|
|
182
|
-
i0.ɵɵtext(2, "No entities configured. Click \"Add Entity\" to add one.");
|
|
183
|
-
i0.ɵɵelementEnd()();
|
|
174
|
+
i0.ɵɵelement(0, "mj-empty-state", 53);
|
|
184
175
|
} }
|
|
185
176
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
-
i0.ɵɵelement(0, "i",
|
|
177
|
+
i0.ɵɵelement(0, "i", 66);
|
|
187
178
|
} }
|
|
188
179
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
189
|
-
i0.ɵɵelement(0, "i",
|
|
180
|
+
i0.ɵɵelement(0, "i", 67);
|
|
190
181
|
} }
|
|
191
182
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Template(rf, ctx) { if (rf & 1) {
|
|
192
|
-
i0.ɵɵelementStart(0, "div",
|
|
193
|
-
i0.ɵɵconditionalCreate(1, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Conditional_1_Template, 1, 0, "i",
|
|
194
|
-
i0.ɵɵconditionalCreate(2, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Conditional_2_Template, 1, 0, "i",
|
|
183
|
+
i0.ɵɵelementStart(0, "div", 65);
|
|
184
|
+
i0.ɵɵconditionalCreate(1, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Conditional_1_Template, 1, 0, "i", 66);
|
|
185
|
+
i0.ɵɵconditionalCreate(2, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Conditional_2_Template, 1, 0, "i", 67);
|
|
195
186
|
i0.ɵɵtext(3);
|
|
196
187
|
i0.ɵɵelementEnd();
|
|
197
188
|
} if (rf & 2) {
|
|
@@ -205,108 +196,108 @@ function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_
|
|
|
205
196
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.StatusMessage, " ");
|
|
206
197
|
} }
|
|
207
198
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_70_Template(rf, ctx) { if (rf & 1) {
|
|
208
|
-
i0.ɵɵelement(0, "i",
|
|
199
|
+
i0.ɵɵelement(0, "i", 68);
|
|
209
200
|
i0.ɵɵtext(1, " Saving... ");
|
|
210
201
|
} }
|
|
211
202
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_71_Template(rf, ctx) { if (rf & 1) {
|
|
212
|
-
i0.ɵɵelement(0, "i",
|
|
203
|
+
i0.ɵɵelement(0, "i", 69);
|
|
213
204
|
i0.ɵɵtext(1, " Save ");
|
|
214
205
|
} }
|
|
215
206
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
216
207
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
217
|
-
i0.ɵɵelementStart(0, "div",
|
|
208
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 26)(2, "div", 27)(3, "label", 28);
|
|
218
209
|
i0.ɵɵtext(4, "Name");
|
|
219
210
|
i0.ɵɵelementEnd();
|
|
220
|
-
i0.ɵɵelementStart(5, "input",
|
|
211
|
+
i0.ɵɵelementStart(5, "input", 29);
|
|
221
212
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedConfig.Name, $event) || (ctx_r1.SelectedConfig.Name = $event); return i0.ɵɵresetView($event); });
|
|
222
213
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
223
214
|
i0.ɵɵelementEnd()();
|
|
224
|
-
i0.ɵɵelementStart(6, "div",
|
|
215
|
+
i0.ɵɵelementStart(6, "div", 27)(7, "label");
|
|
225
216
|
i0.ɵɵtext(8, "Active");
|
|
226
217
|
i0.ɵɵelementEnd();
|
|
227
|
-
i0.ɵɵelementStart(9, "div",
|
|
218
|
+
i0.ɵɵelementStart(9, "div", 30)(10, "input", 31);
|
|
228
219
|
i0.ɵɵlistener("change", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_change_10_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); ctx_r1.SelectedConfig.Status = ctx_r1.SelectedConfig.Status === "Idle" ? "Disabled" : "Idle"; return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
229
220
|
i0.ɵɵelementEnd()()();
|
|
230
|
-
i0.ɵɵelementStart(11, "div",
|
|
221
|
+
i0.ɵɵelementStart(11, "div", 27)(12, "label", 32);
|
|
231
222
|
i0.ɵɵtext(13, "Description");
|
|
232
223
|
i0.ɵɵelementEnd();
|
|
233
|
-
i0.ɵɵelementStart(14, "textarea",
|
|
224
|
+
i0.ɵɵelementStart(14, "textarea", 33);
|
|
234
225
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_textarea_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedConfig.Description, $event) || (ctx_r1.SelectedConfig.Description = $event); return i0.ɵɵresetView($event); });
|
|
235
226
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_textarea_ngModelChange_14_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
236
227
|
i0.ɵɵelementEnd()()();
|
|
237
|
-
i0.ɵɵelementStart(15, "div",
|
|
238
|
-
i0.ɵɵelement(17, "i",
|
|
228
|
+
i0.ɵɵelementStart(15, "div", 26)(16, "h3");
|
|
229
|
+
i0.ɵɵelement(17, "i", 34);
|
|
239
230
|
i0.ɵɵtext(18, " Storage");
|
|
240
231
|
i0.ɵɵelementEnd();
|
|
241
|
-
i0.ɵɵelementStart(19, "div",
|
|
232
|
+
i0.ɵɵelementStart(19, "div", 35)(20, "div", 27)(21, "label", 36);
|
|
242
233
|
i0.ɵɵtext(22, "Storage Account");
|
|
243
234
|
i0.ɵɵelementEnd();
|
|
244
|
-
i0.ɵɵelementStart(23, "select",
|
|
235
|
+
i0.ɵɵelementStart(23, "select", 37);
|
|
245
236
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_select_ngModelChange_23_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedConfig.StorageAccountID, $event) || (ctx_r1.SelectedConfig.StorageAccountID = $event); return i0.ɵɵresetView($event); });
|
|
246
237
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_select_ngModelChange_23_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
247
|
-
i0.ɵɵelementStart(24, "option",
|
|
238
|
+
i0.ɵɵelementStart(24, "option", 38);
|
|
248
239
|
i0.ɵɵtext(25, "-- Select --");
|
|
249
240
|
i0.ɵɵelementEnd();
|
|
250
|
-
i0.ɵɵrepeaterCreate(26, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_For_27_Template, 2, 2, "option",
|
|
241
|
+
i0.ɵɵrepeaterCreate(26, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_For_27_Template, 2, 2, "option", 39, _forTrack0);
|
|
251
242
|
i0.ɵɵelementEnd()();
|
|
252
|
-
i0.ɵɵelementStart(28, "div",
|
|
243
|
+
i0.ɵɵelementStart(28, "div", 27)(29, "label", 40);
|
|
253
244
|
i0.ɵɵtext(30, "Root Path");
|
|
254
245
|
i0.ɵɵelementEnd();
|
|
255
|
-
i0.ɵɵelementStart(31, "input",
|
|
246
|
+
i0.ɵɵelementStart(31, "input", 41);
|
|
256
247
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_31_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedConfig.RootPath, $event) || (ctx_r1.SelectedConfig.RootPath = $event); return i0.ɵɵresetView($event); });
|
|
257
248
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_31_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
258
249
|
i0.ɵɵelementEnd()()()();
|
|
259
|
-
i0.ɵɵelementStart(32, "div",
|
|
250
|
+
i0.ɵɵelementStart(32, "div", 26)(33, "h3");
|
|
260
251
|
i0.ɵɵelement(34, "i", 22);
|
|
261
252
|
i0.ɵɵtext(35, " Defaults");
|
|
262
253
|
i0.ɵɵelementEnd();
|
|
263
|
-
i0.ɵɵelementStart(36, "div",
|
|
254
|
+
i0.ɵɵelementStart(36, "div", 35)(37, "div", 27)(38, "label", 42);
|
|
264
255
|
i0.ɵɵtext(39, "Retention Days");
|
|
265
256
|
i0.ɵɵelementEnd();
|
|
266
|
-
i0.ɵɵelementStart(40, "input",
|
|
257
|
+
i0.ɵɵelementStart(40, "input", 43);
|
|
267
258
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_40_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedConfig.DefaultRetentionDays, $event) || (ctx_r1.SelectedConfig.DefaultRetentionDays = $event); return i0.ɵɵresetView($event); });
|
|
268
259
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_40_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
269
260
|
i0.ɵɵelementEnd()();
|
|
270
|
-
i0.ɵɵelementStart(41, "div",
|
|
261
|
+
i0.ɵɵelementStart(41, "div", 27)(42, "label", 44);
|
|
271
262
|
i0.ɵɵtext(43, "Batch Size");
|
|
272
263
|
i0.ɵɵelementEnd();
|
|
273
|
-
i0.ɵɵelementStart(44, "input",
|
|
264
|
+
i0.ɵɵelementStart(44, "input", 45);
|
|
274
265
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_44_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedConfig.DefaultBatchSize, $event) || (ctx_r1.SelectedConfig.DefaultBatchSize = $event); return i0.ɵɵresetView($event); });
|
|
275
266
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_44_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
276
267
|
i0.ɵɵelementEnd()()();
|
|
277
|
-
i0.ɵɵelementStart(45, "div",
|
|
268
|
+
i0.ɵɵelementStart(45, "div", 35)(46, "div", 27)(47, "label", 46);
|
|
278
269
|
i0.ɵɵtext(48, "Archive Mode");
|
|
279
270
|
i0.ɵɵelementEnd();
|
|
280
|
-
i0.ɵɵelementStart(49, "select",
|
|
271
|
+
i0.ɵɵelementStart(49, "select", 47);
|
|
281
272
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_select_ngModelChange_49_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedConfig.DefaultMode, $event) || (ctx_r1.SelectedConfig.DefaultMode = $event); return i0.ɵɵresetView($event); });
|
|
282
273
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_select_ngModelChange_49_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
283
|
-
i0.ɵɵrepeaterCreate(50, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_For_51_Template, 2, 2, "option",
|
|
274
|
+
i0.ɵɵrepeaterCreate(50, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_For_51_Template, 2, 2, "option", 39, i0.ɵɵrepeaterTrackByIdentity);
|
|
284
275
|
i0.ɵɵelementEnd()();
|
|
285
|
-
i0.ɵɵelementStart(52, "div",
|
|
276
|
+
i0.ɵɵelementStart(52, "div", 27)(53, "label");
|
|
286
277
|
i0.ɵɵtext(54, "Archive Record Changes");
|
|
287
278
|
i0.ɵɵelementEnd();
|
|
288
|
-
i0.ɵɵelementStart(55, "div",
|
|
279
|
+
i0.ɵɵelementStart(55, "div", 30)(56, "input", 48);
|
|
289
280
|
i0.ɵɵtwoWayListener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_56_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedConfig.ArchiveRelatedRecordChanges, $event) || (ctx_r1.SelectedConfig.ArchiveRelatedRecordChanges = $event); return i0.ɵɵresetView($event); });
|
|
290
281
|
i0.ɵɵlistener("ngModelChange", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_input_ngModelChange_56_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigFieldChanged()); });
|
|
291
282
|
i0.ɵɵelementEnd()()()()();
|
|
292
|
-
i0.ɵɵelementStart(57, "div",
|
|
293
|
-
i0.ɵɵelement(60, "i",
|
|
283
|
+
i0.ɵɵelementStart(57, "div", 26)(58, "div", 49)(59, "h3");
|
|
284
|
+
i0.ɵɵelement(60, "i", 50);
|
|
294
285
|
i0.ɵɵtext(61, " Entities");
|
|
295
286
|
i0.ɵɵelementEnd();
|
|
296
|
-
i0.ɵɵelementStart(62, "button",
|
|
287
|
+
i0.ɵɵelementStart(62, "button", 51);
|
|
297
288
|
i0.ɵɵlistener("click", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_button_click_62_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddEntity()); });
|
|
298
289
|
i0.ɵɵelement(63, "i", 7);
|
|
299
290
|
i0.ɵɵtext(64, " Add Entity ");
|
|
300
291
|
i0.ɵɵelementEnd()();
|
|
301
|
-
i0.ɵɵconditionalCreate(65, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_Template, 20, 0, "div",
|
|
302
|
-
i0.ɵɵconditionalCreate(66, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_66_Template,
|
|
292
|
+
i0.ɵɵconditionalCreate(65, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_65_Template, 20, 0, "div", 52);
|
|
293
|
+
i0.ɵɵconditionalCreate(66, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_66_Template, 1, 0, "mj-empty-state", 53);
|
|
303
294
|
i0.ɵɵelementEnd();
|
|
304
|
-
i0.ɵɵconditionalCreate(67, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Template, 4, 7, "div",
|
|
305
|
-
i0.ɵɵelementStart(68, "div",
|
|
295
|
+
i0.ɵɵconditionalCreate(67, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Template, 4, 7, "div", 54);
|
|
296
|
+
i0.ɵɵelementStart(68, "div", 55)(69, "button", 56);
|
|
306
297
|
i0.ɵɵlistener("click", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_button_click_69_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.Save()); });
|
|
307
298
|
i0.ɵɵconditionalCreate(70, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_70_Template, 2, 0)(71, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_71_Template, 2, 0);
|
|
308
299
|
i0.ɵɵelementEnd();
|
|
309
|
-
i0.ɵɵelementStart(72, "button",
|
|
300
|
+
i0.ɵɵelementStart(72, "button", 57);
|
|
310
301
|
i0.ɵɵlistener("click", function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template_button_click_72_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.Cancel()); });
|
|
311
302
|
i0.ɵɵtext(73, " Cancel ");
|
|
312
303
|
i0.ɵɵelementEnd()()();
|
|
@@ -348,8 +339,8 @@ function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_
|
|
|
348
339
|
i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
|
|
349
340
|
} }
|
|
350
341
|
function ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
351
|
-
i0.ɵɵconditionalCreate(0, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_0_Template, 2, 0, "div",
|
|
352
|
-
i0.ɵɵconditionalCreate(1, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template, 74, 15, "div",
|
|
342
|
+
i0.ɵɵconditionalCreate(0, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_0_Template, 2, 0, "div", 23);
|
|
343
|
+
i0.ɵɵconditionalCreate(1, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template, 74, 15, "div", 24);
|
|
353
344
|
} if (rf & 2) {
|
|
354
345
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
355
346
|
i0.ɵɵconditional(ctx_r1.IsDetailLoading ? 0 : -1);
|
|
@@ -368,10 +359,10 @@ function ArchiveConfigAdminComponent_Conditional_2_Template(rf, ctx) { if (rf &
|
|
|
368
359
|
i0.ɵɵelementEnd()();
|
|
369
360
|
i0.ɵɵelementStart(8, "div", 8);
|
|
370
361
|
i0.ɵɵrepeaterCreate(9, ArchiveConfigAdminComponent_Conditional_2_For_10_Template, 17, 11, "div", 9, _forTrack0);
|
|
371
|
-
i0.ɵɵconditionalCreate(11, ArchiveConfigAdminComponent_Conditional_2_Conditional_11_Template,
|
|
362
|
+
i0.ɵɵconditionalCreate(11, ArchiveConfigAdminComponent_Conditional_2_Conditional_11_Template, 1, 0, "mj-empty-state", 10);
|
|
372
363
|
i0.ɵɵelementEnd()();
|
|
373
364
|
i0.ɵɵelementStart(12, "div", 11);
|
|
374
|
-
i0.ɵɵconditionalCreate(13, ArchiveConfigAdminComponent_Conditional_2_Conditional_13_Template,
|
|
365
|
+
i0.ɵɵconditionalCreate(13, ArchiveConfigAdminComponent_Conditional_2_Conditional_13_Template, 1, 0, "mj-empty-state", 12);
|
|
375
366
|
i0.ɵɵconditionalCreate(14, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Template, 2, 2);
|
|
376
367
|
i0.ɵɵelementEnd()();
|
|
377
368
|
} if (rf & 2) {
|
|
@@ -716,7 +707,7 @@ export class ArchiveConfigAdminComponent extends BaseAngularComponent {
|
|
|
716
707
|
}
|
|
717
708
|
}
|
|
718
709
|
static ɵfac = /*@__PURE__*/ (() => { let ɵArchiveConfigAdminComponent_BaseFactory; return function ArchiveConfigAdminComponent_Factory(__ngFactoryType__) { return (ɵArchiveConfigAdminComponent_BaseFactory || (ɵArchiveConfigAdminComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ArchiveConfigAdminComponent)))(__ngFactoryType__ || ArchiveConfigAdminComponent); }; })();
|
|
719
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArchiveConfigAdminComponent, selectors: [["mj-archive-config-admin"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [[1, "config-admin"], [1, "config-loading"], [1, "config-layout"], ["text", "Loading configurations..."], [1, "config-list-panel"], [1, "config-list-header"], [1, "btn", "btn-primary", "btn-sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "config-card-list"], ["tabindex", "0", "role", "button", 1, "config-card", 3, "selected"], [1, "config-empty"], [1, "config-detail-panel"], [1, "config-detail-placeholder"], ["tabindex", "0", "role", "button", 1, "config-card", 3, "click", "keydown.enter"], [1, "config-card-header"], [1, "config-card-name"], [1, "config-status-badge"], [1, "config-card-meta"], [1, "fa-solid", "fa-database"], [1, "fa-solid", "fa-folder"], [1, "config-card-date"], [1, "config-status-mode"], [1, "fa-solid", "fa-sliders"], [1, "
|
|
710
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArchiveConfigAdminComponent, selectors: [["mj-archive-config-admin"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [[1, "config-admin"], [1, "config-loading"], [1, "config-layout"], ["text", "Loading configurations..."], [1, "config-list-panel"], [1, "config-list-header"], [1, "btn", "btn-primary", "btn-sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "config-card-list"], ["tabindex", "0", "role", "button", 1, "config-card", 3, "selected"], ["Size", "compact", "Icon", "fa-solid fa-folder-open", "Title", "No configurations found", "Message", "Create one to get started.", 1, "config-empty"], [1, "config-detail-panel"], ["Icon", "fa-solid fa-hand-pointer", "Title", "No configuration selected", "Message", "Select a configuration to view details", 1, "config-detail-placeholder"], ["tabindex", "0", "role", "button", 1, "config-card", 3, "click", "keydown.enter"], [1, "config-card-header"], [1, "config-card-name"], [1, "config-status-badge"], [1, "config-card-meta"], [1, "fa-solid", "fa-database"], [1, "fa-solid", "fa-folder"], [1, "config-card-date"], [1, "config-status-mode"], [1, "fa-solid", "fa-sliders"], [1, "config-detail-loading"], [1, "config-detail-content"], ["text", "Loading details...", "size", "small"], [1, "detail-section"], [1, "detail-field"], ["for", "config-name"], ["id", "config-name", "type", "text", 1, "detail-input", 3, "ngModelChange", "ngModel"], [1, "detail-checkbox"], ["type", "checkbox", 3, "change", "checked"], ["for", "config-desc"], ["id", "config-desc", "rows", "2", 1, "detail-input", "detail-textarea", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-hard-drive"], [1, "detail-row"], ["for", "config-storage"], ["id", "config-storage", 1, "detail-input", 3, "ngModelChange", "ngModel"], ["value", ""], [3, "value"], ["for", "config-path"], ["id", "config-path", "type", "text", 1, "detail-input", 3, "ngModelChange", "ngModel"], ["for", "config-retention"], ["id", "config-retention", "type", "number", 1, "detail-input", 3, "ngModelChange", "ngModel"], ["for", "config-batch"], ["id", "config-batch", "type", "number", 1, "detail-input", 3, "ngModelChange", "ngModel"], ["for", "config-mode"], ["id", "config-mode", 1, "detail-input", 3, "ngModelChange", "ngModel"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "detail-section-header"], [1, "fa-solid", "fa-table"], [1, "btn", "btn-sm", "btn-outline", 3, "click"], [1, "entity-table-wrapper"], ["Size", "compact", "Icon", "", "Title", "No entities configured. Click \"Add Entity\" to add one.", 1, "entity-empty"], [1, "config-status", 3, "status-success", "status-error"], [1, "detail-actions"], [1, "btn", "btn-primary", 3, "click", "disabled"], [1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "entity-table"], ["type", "text", "placeholder", "Entity name", 1, "entity-input", 3, "ngModelChange", "ngModel"], [1, "entity-input", 3, "ngModelChange", "ngModel"], ["type", "number", 1, "entity-input", "entity-input-sm", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "e.g. CreatedAt", 1, "entity-input", 3, "ngModelChange", "ngModel"], ["title", "Remove entity", "aria-label", "Remove entity", 1, "btn-icon", "btn-icon-danger", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "config-status"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-floppy-disk"]], template: function ArchiveConfigAdminComponent_Template(rf, ctx) { if (rf & 1) {
|
|
720
711
|
i0.ɵɵelementStart(0, "div", 0);
|
|
721
712
|
i0.ɵɵconditionalCreate(1, ArchiveConfigAdminComponent_Conditional_1_Template, 2, 0, "div", 1);
|
|
722
713
|
i0.ɵɵconditionalCreate(2, ArchiveConfigAdminComponent_Conditional_2_Template, 15, 3, "div", 2);
|
|
@@ -726,11 +717,11 @@ export class ArchiveConfigAdminComponent extends BaseAngularComponent {
|
|
|
726
717
|
i0.ɵɵconditional(ctx.IsLoading ? 1 : -1);
|
|
727
718
|
i0.ɵɵadvance();
|
|
728
719
|
i0.ɵɵconditional(!ctx.IsLoading ? 2 : -1);
|
|
729
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent], styles: [".config-admin[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n\n\n.config-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px;\n}\n\n\n\n.config-layout[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n.config-list-panel[_ngcontent-%COMP%] {\n width: 35%;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.config-list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n\n h2 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n}\n\n.config-card-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n\n\n.config-card[_ngcontent-%COMP%] {\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n cursor: pointer;\n transition: border-color 0.15s ease, background 0.15s ease;\n\n &:hover {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface-hover);\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n\n &.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n }\n}\n\n.config-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.config-card-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n}\n\n.config-status-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.status-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.config-card-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n\n i {\n margin-right: 4px;\n }\n}\n\n.config-card-date[_ngcontent-%COMP%] {\n margin-top: 6px;\n font-size: 0.73rem;\n color: var(--mj-text-muted);\n\n i {\n margin-right: 4px;\n }\n}\n\n.config-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: var(--mj-text-muted);\n text-align: center;\n\n i {\n font-size: 2rem;\n margin-bottom: 12px;\n }\n\n p {\n margin: 0;\n font-size: 0.85rem;\n }\n}\n\n\n\n.config-detail-panel[_ngcontent-%COMP%] {\n width: 65%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.config-detail-placeholder[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n color: var(--mj-text-muted);\n\n i {\n font-size: 1.5rem;\n margin-bottom: 8px;\n }\n\n p {\n margin: 0;\n font-size: 0.85rem;\n }\n}\n\n.config-detail-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.config-detail-content[_ngcontent-%COMP%] {\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n\n\n.detail-section[_ngcontent-%COMP%] {\n h3 {\n margin: 0 0 12px;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n}\n\n.detail-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n\n h3 {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n }\n}\n\n.detail-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-bottom: 10px;\n\n .detail-field {\n flex: 1;\n }\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 10px;\n\n label {\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n }\n}\n\n.detail-input[_ngcontent-%COMP%] {\n padding: 7px 10px;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n outline: none;\n transition: border-color 0.15s ease;\n\n &:focus {\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n }\n}\n\n.detail-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n font-family: inherit;\n}\n\n.detail-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding-top: 2px;\n\n input[type=\"checkbox\"] {\n appearance: none;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n position: relative;\n\n &:checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n\n &::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 6px;\n height: 10px;\n border: solid var(--mj-text-inverse, white);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n }\n}\n\n\n\n.entity-table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.entity-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.82rem;\n\n th {\n padding: 8px 10px;\n text-align: left;\n font-weight: 600;\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n}\n\n.entity-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 4px 6px;\n font-size: 0.82rem;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 3px;\n outline: none;\n\n &:focus {\n border-color: var(--mj-border-focus);\n }\n}\n\n.entity-input-sm[_ngcontent-%COMP%] {\n width: 70px;\n}\n\n\n\n.entity-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n appearance: none;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n position: relative;\n\n &:checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n\n &::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 6px;\n height: 10px;\n border: solid var(--mj-text-inverse, white);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n}\n\n.entity-empty[_ngcontent-%COMP%] {\n text-align: center;\n padding: 20px;\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n border: 1px dashed var(--mj-border-default);\n border-radius: 6px;\n\n p {\n margin: 0;\n }\n}\n\n\n\n.config-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 0.85rem;\n\n i {\n font-size: 1rem;\n }\n}\n\n.status-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n\n\n.detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n font-size: 0.85rem;\n font-weight: 500;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease, opacity 0.15s ease;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n.btn-sm[_ngcontent-%COMP%] {\n padding: 5px 10px;\n font-size: 0.78rem;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n\n &:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n &:active:not(:disabled) {\n background: var(--mj-brand-primary-active);\n }\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n\n &:hover:not(:disabled) {\n background: var(--mj-bg-surface-active);\n }\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n background: transparent;\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n\n &:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n }\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 6px;\n border-radius: 4px;\n transition: color 0.15s ease, background 0.15s ease;\n}\n\n.btn-icon-danger[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n\n &:hover {\n color: var(--mj-status-error);\n background: var(--mj-status-error-bg);\n }\n}"], changeDetection: 0 });
|
|
720
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent, i3.MJEmptyStateComponent], styles: [".config-admin[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n\n\n.config-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px;\n}\n\n\n\n.config-layout[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n.config-list-panel[_ngcontent-%COMP%] {\n width: 35%;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.config-list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n\n h2 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n}\n\n.config-card-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n\n\n.config-card[_ngcontent-%COMP%] {\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n cursor: pointer;\n transition: border-color 0.15s ease, background 0.15s ease;\n\n &:hover {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface-hover);\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n\n &.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n }\n}\n\n.config-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.config-card-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n}\n\n.config-status-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.status-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.config-card-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n\n i {\n margin-right: 4px;\n }\n}\n\n.config-card-date[_ngcontent-%COMP%] {\n margin-top: 6px;\n font-size: 0.73rem;\n color: var(--mj-text-muted);\n\n i {\n margin-right: 4px;\n }\n}\n\n.config-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: var(--mj-text-muted);\n text-align: center;\n\n i {\n font-size: 2rem;\n margin-bottom: 12px;\n }\n\n p {\n margin: 0;\n font-size: 0.85rem;\n }\n}\n\n\n\n.config-detail-panel[_ngcontent-%COMP%] {\n width: 65%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.config-detail-placeholder[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n color: var(--mj-text-muted);\n\n i {\n font-size: 1.5rem;\n margin-bottom: 8px;\n }\n\n p {\n margin: 0;\n font-size: 0.85rem;\n }\n}\n\n.config-detail-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.config-detail-content[_ngcontent-%COMP%] {\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n\n\n.detail-section[_ngcontent-%COMP%] {\n h3 {\n margin: 0 0 12px;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n}\n\n.detail-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n\n h3 {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n }\n}\n\n.detail-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-bottom: 10px;\n\n .detail-field {\n flex: 1;\n }\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 10px;\n\n label {\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n }\n}\n\n.detail-input[_ngcontent-%COMP%] {\n padding: 7px 10px;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n outline: none;\n transition: border-color 0.15s ease;\n\n &:focus {\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n }\n}\n\n.detail-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n font-family: inherit;\n}\n\n.detail-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding-top: 2px;\n\n input[type=\"checkbox\"] {\n appearance: none;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n position: relative;\n\n &:checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n\n &::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 6px;\n height: 10px;\n border: solid var(--mj-text-inverse, white);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n }\n}\n\n\n\n.entity-table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.entity-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.82rem;\n\n th {\n padding: 8px 10px;\n text-align: left;\n font-weight: 600;\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n}\n\n.entity-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 4px 6px;\n font-size: 0.82rem;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 3px;\n outline: none;\n\n &:focus {\n border-color: var(--mj-border-focus);\n }\n}\n\n.entity-input-sm[_ngcontent-%COMP%] {\n width: 70px;\n}\n\n\n\n.entity-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n appearance: none;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n position: relative;\n\n &:checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n\n &::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 6px;\n height: 10px;\n border: solid var(--mj-text-inverse, white);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n}\n\n.entity-empty[_ngcontent-%COMP%] {\n text-align: center;\n padding: 20px;\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n border: 1px dashed var(--mj-border-default);\n border-radius: 6px;\n\n p {\n margin: 0;\n }\n}\n\n\n\n.config-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 0.85rem;\n\n i {\n font-size: 1rem;\n }\n}\n\n.status-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n\n\n.detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n font-size: 0.85rem;\n font-weight: 500;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease, opacity 0.15s ease;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n.btn-sm[_ngcontent-%COMP%] {\n padding: 5px 10px;\n font-size: 0.78rem;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n\n &:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n &:active:not(:disabled) {\n background: var(--mj-brand-primary-active);\n }\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n\n &:hover:not(:disabled) {\n background: var(--mj-bg-surface-active);\n }\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n background: transparent;\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n\n &:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n }\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 6px;\n border-radius: 4px;\n transition: color 0.15s ease, background 0.15s ease;\n}\n\n.btn-icon-danger[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n\n &:hover {\n color: var(--mj-status-error);\n background: var(--mj-status-error-bg);\n }\n}"], changeDetection: 0 });
|
|
730
721
|
}
|
|
731
722
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArchiveConfigAdminComponent, [{
|
|
732
723
|
type: Component,
|
|
733
|
-
args: [{ standalone: false, selector: 'mj-archive-config-admin', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"config-admin\">\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"config-loading\">\n <mj-loading text=\"Loading configurations...\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading) {\n <div class=\"config-layout\">\n <!-- Left panel: Config list -->\n <div class=\"config-list-panel\">\n <div class=\"config-list-header\">\n <h2>Archive Configurations</h2>\n <button class=\"btn btn-primary btn-sm\" (click)=\"AddConfiguration()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Configuration\n </button>\n </div>\n\n <div class=\"config-card-list\">\n @for (config of Configs; track config.ID) {\n <div\n class=\"config-card\"\n [class.selected]=\"IsSelectedConfig(config)\"\n (click)=\"SelectConfig(config)\"\n (keydown.enter)=\"SelectConfig(config)\"\n tabindex=\"0\"\n role=\"button\">\n <div class=\"config-card-header\">\n <span class=\"config-card-name\">{{ config.Name }}</span>\n <span\n class=\"config-status-badge\"\n [class.status-active]=\"config.Status === 'Idle' || config.Status === 'Running'\"\n [class.status-inactive]=\"config.Status === 'Disabled' || config.Status === 'Error'\">\n {{ GetStatusLabel(config.Status) }}\n </span>\n </div>\n <div class=\"config-card-meta\">\n <span><i class=\"fa-solid fa-database\"></i> {{ config.StorageAccountName || 'No storage' }}</span>\n <span><i class=\"fa-solid fa-folder\"></i> {{ config.RootPath }}</span>\n </div>\n <div class=\"config-card-date\">\n <span class=\"config-status-mode\"><i class=\"fa-solid fa-sliders\"></i> {{ config.DefaultMode }}</span>\n </div>\n </div>\n }\n\n @if (Configs.length === 0) {\n <div class=\"config-empty\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No configurations found. Create one to get started.</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Right panel: Detail -->\n <div class=\"config-detail-panel\">\n @if (!SelectedConfig) {\n <div class=\"config-detail-placeholder\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n <p>Select a configuration to view details</p>\n </div>\n }\n\n @if (SelectedConfig) {\n @if (IsDetailLoading) {\n <div class=\"config-detail-loading\">\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsDetailLoading) {\n <div class=\"config-detail-content\">\n <!-- Header section -->\n <div class=\"detail-section\">\n <div class=\"detail-field\">\n <label for=\"config-name\">Name</label>\n <input\n id=\"config-name\"\n type=\"text\"\n [(ngModel)]=\"SelectedConfig.Name\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\" />\n </div>\n <div class=\"detail-field\">\n <label>Active</label>\n <div class=\"detail-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"SelectedConfig.Status === 'Idle'\"\n (change)=\"SelectedConfig.Status = SelectedConfig.Status === 'Idle' ? 'Disabled' : 'Idle'; OnConfigFieldChanged()\" />\n </div>\n </div>\n <div class=\"detail-field\">\n <label for=\"config-desc\">Description</label>\n <textarea\n id=\"config-desc\"\n [(ngModel)]=\"SelectedConfig.Description\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input detail-textarea\"\n rows=\"2\"></textarea>\n </div>\n </div>\n\n <!-- Storage section -->\n <div class=\"detail-section\">\n <h3><i class=\"fa-solid fa-hard-drive\"></i> Storage</h3>\n <div class=\"detail-row\">\n <div class=\"detail-field\">\n <label for=\"config-storage\">Storage Account</label>\n <select\n id=\"config-storage\"\n [(ngModel)]=\"SelectedConfig.StorageAccountID\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\">\n <option value=\"\">-- Select --</option>\n @for (account of StorageAccounts; track account.ID) {\n <option [value]=\"account.ID\">{{ account.Name }}</option>\n }\n </select>\n </div>\n <div class=\"detail-field\">\n <label for=\"config-path\">Root Path</label>\n <input\n id=\"config-path\"\n type=\"text\"\n [(ngModel)]=\"SelectedConfig.RootPath\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\" />\n </div>\n </div>\n </div>\n\n <!-- Defaults section -->\n <div class=\"detail-section\">\n <h3><i class=\"fa-solid fa-sliders\"></i> Defaults</h3>\n <div class=\"detail-row\">\n <div class=\"detail-field\">\n <label for=\"config-retention\">Retention Days</label>\n <input\n id=\"config-retention\"\n type=\"number\"\n [(ngModel)]=\"SelectedConfig.DefaultRetentionDays\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\" />\n </div>\n <div class=\"detail-field\">\n <label for=\"config-batch\">Batch Size</label>\n <input\n id=\"config-batch\"\n type=\"number\"\n [(ngModel)]=\"SelectedConfig.DefaultBatchSize\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\" />\n </div>\n </div>\n <div class=\"detail-row\">\n <div class=\"detail-field\">\n <label for=\"config-mode\">Archive Mode</label>\n <select\n id=\"config-mode\"\n [(ngModel)]=\"SelectedConfig.DefaultMode\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\">\n @for (mode of ArchiveModes; track mode) {\n <option [value]=\"mode\">{{ mode }}</option>\n }\n </select>\n </div>\n <div class=\"detail-field\">\n <label>Archive Record Changes</label>\n <div class=\"detail-checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"SelectedConfig.ArchiveRelatedRecordChanges\"\n (ngModelChange)=\"OnConfigFieldChanged()\" />\n </div>\n </div>\n </div>\n </div>\n\n <!-- Entities section -->\n <div class=\"detail-section\">\n <div class=\"detail-section-header\">\n <h3><i class=\"fa-solid fa-table\"></i> Entities</h3>\n <button class=\"btn btn-sm btn-outline\" (click)=\"AddEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n\n @if (ConfigEntities.length > 0) {\n <div class=\"entity-table-wrapper\">\n <table class=\"entity-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th>Mode</th>\n <th>Retention</th>\n <th>Batch</th>\n <th>Date Field</th>\n <th>Active</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (entity of ConfigEntities; track entity.ID) {\n <tr>\n <td>\n <input\n type=\"text\"\n [(ngModel)]=\"entity.EntityName\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input\"\n placeholder=\"Entity name\" />\n </td>\n <td>\n <select\n [(ngModel)]=\"entity.Mode\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input\">\n @for (mode of ArchiveModes; track mode) {\n <option [value]=\"mode\">{{ mode }}</option>\n }\n </select>\n </td>\n <td>\n <input\n type=\"number\"\n [(ngModel)]=\"entity.RetentionDays\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input entity-input-sm\" />\n </td>\n <td>\n <input\n type=\"number\"\n [(ngModel)]=\"entity.BatchSize\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input entity-input-sm\" />\n </td>\n <td>\n <input\n type=\"text\"\n [(ngModel)]=\"entity.DateField\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input\"\n placeholder=\"e.g. CreatedAt\" />\n </td>\n <td>\n <input\n type=\"checkbox\"\n [(ngModel)]=\"entity.IsActive\"\n (ngModelChange)=\"OnEntityChanged(entity)\" />\n </td>\n <td>\n <button\n class=\"btn-icon btn-icon-danger\"\n (click)=\"RemoveEntity(entity)\"\n title=\"Remove entity\"\n aria-label=\"Remove entity\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n\n @if (ConfigEntities.length === 0) {\n <div class=\"entity-empty\">\n <p>No entities configured. Click \"Add Entity\" to add one.</p>\n </div>\n }\n </div>\n\n <!-- Status message -->\n @if (StatusMessage) {\n <div class=\"config-status\" [class.status-success]=\"StatusType === 'success'\" [class.status-error]=\"StatusType === 'error'\">\n @if (StatusType === 'success') {\n <i class=\"fa-solid fa-circle-check\"></i>\n }\n @if (StatusType === 'error') {\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n }\n {{ StatusMessage }}\n </div>\n }\n\n <!-- Action bar (Save on LEFT per MJ convention) -->\n <div class=\"detail-actions\">\n <button\n class=\"btn btn-primary\"\n [disabled]=\"IsSaving\"\n (click)=\"Save()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n }\n </button>\n <button class=\"btn btn-secondary\" [disabled]=\"IsSaving\" (click)=\"Cancel()\">\n Cancel\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n</div>\n", styles: [".config-admin {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n/* Loading */\n.config-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px;\n}\n\n/* Layout: 35% / 65% split */\n.config-layout {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* Left panel: Config list */\n.config-list-panel {\n width: 35%;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.config-list-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n\n h2 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n}\n\n.config-card-list {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Config card */\n.config-card {\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n cursor: pointer;\n transition: border-color 0.15s ease, background 0.15s ease;\n\n &:hover {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface-hover);\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n\n &.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n }\n}\n\n.config-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.config-card-name {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n}\n\n.config-status-badge {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.status-active {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.config-card-meta {\n display: flex;\n gap: 14px;\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n\n i {\n margin-right: 4px;\n }\n}\n\n.config-card-date {\n margin-top: 6px;\n font-size: 0.73rem;\n color: var(--mj-text-muted);\n\n i {\n margin-right: 4px;\n }\n}\n\n.config-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: var(--mj-text-muted);\n text-align: center;\n\n i {\n font-size: 2rem;\n margin-bottom: 12px;\n }\n\n p {\n margin: 0;\n font-size: 0.85rem;\n }\n}\n\n/* Right panel: Detail */\n.config-detail-panel {\n width: 65%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.config-detail-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n color: var(--mj-text-muted);\n\n i {\n font-size: 1.5rem;\n margin-bottom: 8px;\n }\n\n p {\n margin: 0;\n font-size: 0.85rem;\n }\n}\n\n.config-detail-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.config-detail-content {\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n/* Detail sections */\n.detail-section {\n h3 {\n margin: 0 0 12px;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n}\n\n.detail-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n\n h3 {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n }\n}\n\n.detail-row {\n display: flex;\n gap: 16px;\n margin-bottom: 10px;\n\n .detail-field {\n flex: 1;\n }\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 10px;\n\n label {\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n }\n}\n\n.detail-input {\n padding: 7px 10px;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n outline: none;\n transition: border-color 0.15s ease;\n\n &:focus {\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n }\n}\n\n.detail-textarea {\n resize: vertical;\n font-family: inherit;\n}\n\n.detail-checkbox {\n display: flex;\n align-items: center;\n padding-top: 2px;\n\n input[type=\"checkbox\"] {\n appearance: none;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n position: relative;\n\n &:checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n\n &::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 6px;\n height: 10px;\n border: solid var(--mj-text-inverse, white);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n }\n}\n\n/* Entity table */\n.entity-table-wrapper {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.entity-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.82rem;\n\n th {\n padding: 8px 10px;\n text-align: left;\n font-weight: 600;\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n}\n\n.entity-input {\n width: 100%;\n padding: 4px 6px;\n font-size: 0.82rem;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 3px;\n outline: none;\n\n &:focus {\n border-color: var(--mj-border-focus);\n }\n}\n\n.entity-input-sm {\n width: 70px;\n}\n\n/* Checkbox styling within entity table */\n.entity-table td input[type=\"checkbox\"] {\n appearance: none;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n position: relative;\n\n &:checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n\n &::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 6px;\n height: 10px;\n border: solid var(--mj-text-inverse, white);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n}\n\n.entity-empty {\n text-align: center;\n padding: 20px;\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n border: 1px dashed var(--mj-border-default);\n border-radius: 6px;\n\n p {\n margin: 0;\n }\n}\n\n/* Status message */\n.config-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 0.85rem;\n\n i {\n font-size: 1rem;\n }\n}\n\n.status-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n/* Action bar */\n.detail-actions {\n display: flex;\n gap: 10px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n/* Buttons */\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n font-size: 0.85rem;\n font-weight: 500;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease, opacity 0.15s ease;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n.btn-sm {\n padding: 5px 10px;\n font-size: 0.78rem;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n\n &:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n &:active:not(:disabled) {\n background: var(--mj-brand-primary-active);\n }\n}\n\n.btn-secondary {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n\n &:hover:not(:disabled) {\n background: var(--mj-bg-surface-active);\n }\n}\n\n.btn-outline {\n background: transparent;\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n\n &:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n }\n}\n\n.btn-icon {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 6px;\n border-radius: 4px;\n transition: color 0.15s ease, background 0.15s ease;\n}\n\n.btn-icon-danger {\n color: var(--mj-text-muted);\n\n &:hover {\n color: var(--mj-status-error);\n background: var(--mj-status-error-bg);\n }\n}\n"] }]
|
|
724
|
+
args: [{ standalone: false, selector: 'mj-archive-config-admin', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"config-admin\">\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"config-loading\">\n <mj-loading text=\"Loading configurations...\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading) {\n <div class=\"config-layout\">\n <!-- Left panel: Config list -->\n <div class=\"config-list-panel\">\n <div class=\"config-list-header\">\n <h2>Archive Configurations</h2>\n <button class=\"btn btn-primary btn-sm\" (click)=\"AddConfiguration()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Configuration\n </button>\n </div>\n\n <div class=\"config-card-list\">\n @for (config of Configs; track config.ID) {\n <div\n class=\"config-card\"\n [class.selected]=\"IsSelectedConfig(config)\"\n (click)=\"SelectConfig(config)\"\n (keydown.enter)=\"SelectConfig(config)\"\n tabindex=\"0\"\n role=\"button\">\n <div class=\"config-card-header\">\n <span class=\"config-card-name\">{{ config.Name }}</span>\n <span\n class=\"config-status-badge\"\n [class.status-active]=\"config.Status === 'Idle' || config.Status === 'Running'\"\n [class.status-inactive]=\"config.Status === 'Disabled' || config.Status === 'Error'\">\n {{ GetStatusLabel(config.Status) }}\n </span>\n </div>\n <div class=\"config-card-meta\">\n <span><i class=\"fa-solid fa-database\"></i> {{ config.StorageAccountName || 'No storage' }}</span>\n <span><i class=\"fa-solid fa-folder\"></i> {{ config.RootPath }}</span>\n </div>\n <div class=\"config-card-date\">\n <span class=\"config-status-mode\"><i class=\"fa-solid fa-sliders\"></i> {{ config.DefaultMode }}</span>\n </div>\n </div>\n }\n\n @if (Configs.length === 0) {\n <mj-empty-state class=\"config-empty\" Size=\"compact\"\n Icon=\"fa-solid fa-folder-open\"\n Title=\"No configurations found\"\n Message=\"Create one to get started.\" />\n }\n </div>\n </div>\n\n <!-- Right panel: Detail -->\n <div class=\"config-detail-panel\">\n @if (!SelectedConfig) {\n <mj-empty-state class=\"config-detail-placeholder\"\n Icon=\"fa-solid fa-hand-pointer\"\n Title=\"No configuration selected\"\n Message=\"Select a configuration to view details\" />\n }\n\n @if (SelectedConfig) {\n @if (IsDetailLoading) {\n <div class=\"config-detail-loading\">\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsDetailLoading) {\n <div class=\"config-detail-content\">\n <!-- Header section -->\n <div class=\"detail-section\">\n <div class=\"detail-field\">\n <label for=\"config-name\">Name</label>\n <input\n id=\"config-name\"\n type=\"text\"\n [(ngModel)]=\"SelectedConfig.Name\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\" />\n </div>\n <div class=\"detail-field\">\n <label>Active</label>\n <div class=\"detail-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"SelectedConfig.Status === 'Idle'\"\n (change)=\"SelectedConfig.Status = SelectedConfig.Status === 'Idle' ? 'Disabled' : 'Idle'; OnConfigFieldChanged()\" />\n </div>\n </div>\n <div class=\"detail-field\">\n <label for=\"config-desc\">Description</label>\n <textarea\n id=\"config-desc\"\n [(ngModel)]=\"SelectedConfig.Description\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input detail-textarea\"\n rows=\"2\"></textarea>\n </div>\n </div>\n\n <!-- Storage section -->\n <div class=\"detail-section\">\n <h3><i class=\"fa-solid fa-hard-drive\"></i> Storage</h3>\n <div class=\"detail-row\">\n <div class=\"detail-field\">\n <label for=\"config-storage\">Storage Account</label>\n <select\n id=\"config-storage\"\n [(ngModel)]=\"SelectedConfig.StorageAccountID\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\">\n <option value=\"\">-- Select --</option>\n @for (account of StorageAccounts; track account.ID) {\n <option [value]=\"account.ID\">{{ account.Name }}</option>\n }\n </select>\n </div>\n <div class=\"detail-field\">\n <label for=\"config-path\">Root Path</label>\n <input\n id=\"config-path\"\n type=\"text\"\n [(ngModel)]=\"SelectedConfig.RootPath\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\" />\n </div>\n </div>\n </div>\n\n <!-- Defaults section -->\n <div class=\"detail-section\">\n <h3><i class=\"fa-solid fa-sliders\"></i> Defaults</h3>\n <div class=\"detail-row\">\n <div class=\"detail-field\">\n <label for=\"config-retention\">Retention Days</label>\n <input\n id=\"config-retention\"\n type=\"number\"\n [(ngModel)]=\"SelectedConfig.DefaultRetentionDays\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\" />\n </div>\n <div class=\"detail-field\">\n <label for=\"config-batch\">Batch Size</label>\n <input\n id=\"config-batch\"\n type=\"number\"\n [(ngModel)]=\"SelectedConfig.DefaultBatchSize\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\" />\n </div>\n </div>\n <div class=\"detail-row\">\n <div class=\"detail-field\">\n <label for=\"config-mode\">Archive Mode</label>\n <select\n id=\"config-mode\"\n [(ngModel)]=\"SelectedConfig.DefaultMode\"\n (ngModelChange)=\"OnConfigFieldChanged()\"\n class=\"detail-input\">\n @for (mode of ArchiveModes; track mode) {\n <option [value]=\"mode\">{{ mode }}</option>\n }\n </select>\n </div>\n <div class=\"detail-field\">\n <label>Archive Record Changes</label>\n <div class=\"detail-checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"SelectedConfig.ArchiveRelatedRecordChanges\"\n (ngModelChange)=\"OnConfigFieldChanged()\" />\n </div>\n </div>\n </div>\n </div>\n\n <!-- Entities section -->\n <div class=\"detail-section\">\n <div class=\"detail-section-header\">\n <h3><i class=\"fa-solid fa-table\"></i> Entities</h3>\n <button class=\"btn btn-sm btn-outline\" (click)=\"AddEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n\n @if (ConfigEntities.length > 0) {\n <div class=\"entity-table-wrapper\">\n <table class=\"entity-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th>Mode</th>\n <th>Retention</th>\n <th>Batch</th>\n <th>Date Field</th>\n <th>Active</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (entity of ConfigEntities; track entity.ID) {\n <tr>\n <td>\n <input\n type=\"text\"\n [(ngModel)]=\"entity.EntityName\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input\"\n placeholder=\"Entity name\" />\n </td>\n <td>\n <select\n [(ngModel)]=\"entity.Mode\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input\">\n @for (mode of ArchiveModes; track mode) {\n <option [value]=\"mode\">{{ mode }}</option>\n }\n </select>\n </td>\n <td>\n <input\n type=\"number\"\n [(ngModel)]=\"entity.RetentionDays\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input entity-input-sm\" />\n </td>\n <td>\n <input\n type=\"number\"\n [(ngModel)]=\"entity.BatchSize\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input entity-input-sm\" />\n </td>\n <td>\n <input\n type=\"text\"\n [(ngModel)]=\"entity.DateField\"\n (ngModelChange)=\"OnEntityChanged(entity)\"\n class=\"entity-input\"\n placeholder=\"e.g. CreatedAt\" />\n </td>\n <td>\n <input\n type=\"checkbox\"\n [(ngModel)]=\"entity.IsActive\"\n (ngModelChange)=\"OnEntityChanged(entity)\" />\n </td>\n <td>\n <button\n class=\"btn-icon btn-icon-danger\"\n (click)=\"RemoveEntity(entity)\"\n title=\"Remove entity\"\n aria-label=\"Remove entity\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n\n @if (ConfigEntities.length === 0) {\n <mj-empty-state class=\"entity-empty\" Size=\"compact\"\n Icon=\"\" Title=\"No entities configured. Click "Add Entity" to add one.\" />\n }\n </div>\n\n <!-- Status message -->\n @if (StatusMessage) {\n <div class=\"config-status\" [class.status-success]=\"StatusType === 'success'\" [class.status-error]=\"StatusType === 'error'\">\n @if (StatusType === 'success') {\n <i class=\"fa-solid fa-circle-check\"></i>\n }\n @if (StatusType === 'error') {\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n }\n {{ StatusMessage }}\n </div>\n }\n\n <!-- Action bar (Save on LEFT per MJ convention) -->\n <div class=\"detail-actions\">\n <button\n class=\"btn btn-primary\"\n [disabled]=\"IsSaving\"\n (click)=\"Save()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n }\n </button>\n <button class=\"btn btn-secondary\" [disabled]=\"IsSaving\" (click)=\"Cancel()\">\n Cancel\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n</div>\n", styles: [".config-admin {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n/* Loading */\n.config-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px;\n}\n\n/* Layout: 35% / 65% split */\n.config-layout {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* Left panel: Config list */\n.config-list-panel {\n width: 35%;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.config-list-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n\n h2 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n}\n\n.config-card-list {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Config card */\n.config-card {\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n cursor: pointer;\n transition: border-color 0.15s ease, background 0.15s ease;\n\n &:hover {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface-hover);\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n\n &.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n }\n}\n\n.config-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.config-card-name {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n}\n\n.config-status-badge {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.status-active {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.config-card-meta {\n display: flex;\n gap: 14px;\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n\n i {\n margin-right: 4px;\n }\n}\n\n.config-card-date {\n margin-top: 6px;\n font-size: 0.73rem;\n color: var(--mj-text-muted);\n\n i {\n margin-right: 4px;\n }\n}\n\n.config-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: var(--mj-text-muted);\n text-align: center;\n\n i {\n font-size: 2rem;\n margin-bottom: 12px;\n }\n\n p {\n margin: 0;\n font-size: 0.85rem;\n }\n}\n\n/* Right panel: Detail */\n.config-detail-panel {\n width: 65%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.config-detail-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n color: var(--mj-text-muted);\n\n i {\n font-size: 1.5rem;\n margin-bottom: 8px;\n }\n\n p {\n margin: 0;\n font-size: 0.85rem;\n }\n}\n\n.config-detail-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.config-detail-content {\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n/* Detail sections */\n.detail-section {\n h3 {\n margin: 0 0 12px;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n}\n\n.detail-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n\n h3 {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n }\n}\n\n.detail-row {\n display: flex;\n gap: 16px;\n margin-bottom: 10px;\n\n .detail-field {\n flex: 1;\n }\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 10px;\n\n label {\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n }\n}\n\n.detail-input {\n padding: 7px 10px;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n outline: none;\n transition: border-color 0.15s ease;\n\n &:focus {\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n }\n}\n\n.detail-textarea {\n resize: vertical;\n font-family: inherit;\n}\n\n.detail-checkbox {\n display: flex;\n align-items: center;\n padding-top: 2px;\n\n input[type=\"checkbox\"] {\n appearance: none;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n position: relative;\n\n &:checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n\n &::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 6px;\n height: 10px;\n border: solid var(--mj-text-inverse, white);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n }\n}\n\n/* Entity table */\n.entity-table-wrapper {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.entity-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.82rem;\n\n th {\n padding: 8px 10px;\n text-align: left;\n font-weight: 600;\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n}\n\n.entity-input {\n width: 100%;\n padding: 4px 6px;\n font-size: 0.82rem;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 3px;\n outline: none;\n\n &:focus {\n border-color: var(--mj-border-focus);\n }\n}\n\n.entity-input-sm {\n width: 70px;\n}\n\n/* Checkbox styling within entity table */\n.entity-table td input[type=\"checkbox\"] {\n appearance: none;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n position: relative;\n\n &:checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n\n &::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 6px;\n height: 10px;\n border: solid var(--mj-text-inverse, white);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n }\n}\n\n.entity-empty {\n text-align: center;\n padding: 20px;\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n border: 1px dashed var(--mj-border-default);\n border-radius: 6px;\n\n p {\n margin: 0;\n }\n}\n\n/* Status message */\n.config-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 0.85rem;\n\n i {\n font-size: 1rem;\n }\n}\n\n.status-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n/* Action bar */\n.detail-actions {\n display: flex;\n gap: 10px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n/* Buttons */\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n font-size: 0.85rem;\n font-weight: 500;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease, opacity 0.15s ease;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n.btn-sm {\n padding: 5px 10px;\n font-size: 0.78rem;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n\n &:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n &:active:not(:disabled) {\n background: var(--mj-brand-primary-active);\n }\n}\n\n.btn-secondary {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n\n &:hover:not(:disabled) {\n background: var(--mj-bg-surface-active);\n }\n}\n\n.btn-outline {\n background: transparent;\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n\n &:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n }\n}\n\n.btn-icon {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 6px;\n border-radius: 4px;\n transition: color 0.15s ease, background 0.15s ease;\n}\n\n.btn-icon-danger {\n color: var(--mj-text-muted);\n\n &:hover {\n color: var(--mj-status-error);\n background: var(--mj-status-error-bg);\n }\n}\n"] }]
|
|
734
725
|
}], null, null); })();
|
|
735
726
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ArchiveConfigAdminComponent, { className: "ArchiveConfigAdminComponent", filePath: "src/lib/archive-config/archive-config-admin.component.ts", lineNumber: 66 }); })();
|
|
736
727
|
//# sourceMappingURL=archive-config-admin.component.js.map
|