@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.
@@ -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.ɵɵelementStart(0, "div", 10);
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.ɵɵelementStart(0, "div", 12);
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", 25);
69
- i0.ɵɵelement(1, "mj-loading", 27);
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", 41);
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", 41);
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", 41);
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", 61);
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", 62);
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", 41, i0.ɵɵrepeaterTrackByIdentity);
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", 63);
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", 63);
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", 64);
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", 50);
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", 65);
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", 66);
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", 54)(1, "table", 60)(2, "thead")(3, "tr")(4, "th");
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.ɵɵelementStart(0, "div", 55)(1, "p");
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", 68);
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", 69);
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", 67);
193
- i0.ɵɵconditionalCreate(1, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Conditional_1_Template, 1, 0, "i", 68);
194
- i0.ɵɵconditionalCreate(2, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_67_Conditional_2_Template, 1, 0, "i", 69);
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", 70);
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", 71);
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", 26)(1, "div", 28)(2, "div", 29)(3, "label", 30);
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", 31);
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", 29)(7, "label");
215
+ i0.ɵɵelementStart(6, "div", 27)(7, "label");
225
216
  i0.ɵɵtext(8, "Active");
226
217
  i0.ɵɵelementEnd();
227
- i0.ɵɵelementStart(9, "div", 32)(10, "input", 33);
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", 29)(12, "label", 34);
221
+ i0.ɵɵelementStart(11, "div", 27)(12, "label", 32);
231
222
  i0.ɵɵtext(13, "Description");
232
223
  i0.ɵɵelementEnd();
233
- i0.ɵɵelementStart(14, "textarea", 35);
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", 28)(16, "h3");
238
- i0.ɵɵelement(17, "i", 36);
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", 37)(20, "div", 29)(21, "label", 38);
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", 39);
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", 40);
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", 41, _forTrack0);
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", 29)(29, "label", 42);
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", 43);
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", 28)(33, "h3");
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", 37)(37, "div", 29)(38, "label", 44);
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", 45);
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", 29)(42, "label", 46);
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", 47);
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", 37)(46, "div", 29)(47, "label", 48);
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", 49);
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", 41, i0.ɵɵrepeaterTrackByIdentity);
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", 29)(53, "label");
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", 32)(56, "input", 50);
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", 28)(58, "div", 51)(59, "h3");
293
- i0.ɵɵelement(60, "i", 52);
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", 53);
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", 54);
302
- i0.ɵɵconditionalCreate(66, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Conditional_66_Template, 3, 0, "div", 55);
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", 56);
305
- i0.ɵɵelementStart(68, "div", 57)(69, "button", 58);
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", 59);
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", 25);
352
- i0.ɵɵconditionalCreate(1, ArchiveConfigAdminComponent_Conditional_2_Conditional_14_Conditional_1_Template, 74, 15, "div", 26);
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, 4, 0, "div", 10);
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, 4, 0, "div", 12);
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, "fa-solid", "fa-folder-open"], [1, "fa-solid", "fa-hand-pointer"], [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"], [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) {
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 &quot;Add Entity&quot; 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