@memberjunction/ng-record-changes 5.43.0 → 5.45.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.
@@ -28,25 +28,21 @@ function RestorePreviewPanelComponent_Conditional_1_Conditional_13_Template(rf,
28
28
  i0.ɵɵtextInterpolate2("", ctx_r1.DriftCount, " field", ctx_r1.DriftCount === 1 ? "" : "s", " from this snapshot no longer exist on the entity and will be skipped.");
29
29
  } }
30
30
  function RestorePreviewPanelComponent_Conditional_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
31
- i0.ɵɵelementStart(0, "div", 9);
32
- i0.ɵɵelement(1, "i", 21);
33
- i0.ɵɵelementStart(2, "p");
34
- i0.ɵɵtext(3, "No fields could be parsed from this snapshot.");
35
- i0.ɵɵelementEnd()();
31
+ i0.ɵɵelement(0, "mj-empty-state", 9);
36
32
  } }
37
33
  function RestorePreviewPanelComponent_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
38
34
  const _r3 = i0.ɵɵgetCurrentView();
39
- i0.ɵɵelementStart(0, "div", 10)(1, "span", 22);
35
+ i0.ɵɵelementStart(0, "div", 10)(1, "span", 21);
40
36
  i0.ɵɵtext(2);
41
37
  i0.ɵɵelementEnd();
42
- i0.ɵɵelementStart(3, "div", 23)(4, "button", 24);
38
+ i0.ɵɵelementStart(3, "div", 22)(4, "button", 23);
43
39
  i0.ɵɵlistener("click", function RestorePreviewPanelComponent_Conditional_1_Conditional_15_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SelectAll()); });
44
40
  i0.ɵɵtext(5, "Select all changed");
45
41
  i0.ɵɵelementEnd();
46
- i0.ɵɵelementStart(6, "span", 25);
42
+ i0.ɵɵelementStart(6, "span", 24);
47
43
  i0.ɵɵtext(7, "\u00B7");
48
44
  i0.ɵɵelementEnd();
49
- i0.ɵɵelementStart(8, "button", 24);
45
+ i0.ɵɵelementStart(8, "button", 23);
50
46
  i0.ɵɵlistener("click", function RestorePreviewPanelComponent_Conditional_1_Conditional_15_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.DeselectAll()); });
51
47
  i0.ɵɵtext(9, "Deselect all");
52
48
  i0.ɵɵelementEnd()()();
@@ -60,26 +56,26 @@ function RestorePreviewPanelComponent_Conditional_1_Conditional_15_Template(rf,
60
56
  i0.ɵɵproperty("disabled", ctx_r1.IsRestoring);
61
57
  } }
62
58
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_7_Template(rf, ctx) { if (rf & 1) {
63
- i0.ɵɵelementStart(0, "th", 33);
59
+ i0.ɵɵelementStart(0, "th", 32);
64
60
  i0.ɵɵtext(1, "Current Value");
65
61
  i0.ɵɵelementEnd();
66
- i0.ɵɵelementStart(2, "th", 34);
62
+ i0.ɵɵelementStart(2, "th", 33);
67
63
  i0.ɵɵtext(3, "Restore To");
68
64
  i0.ɵɵelementEnd();
69
65
  } }
70
66
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_8_Template(rf, ctx) { if (rf & 1) {
71
- i0.ɵɵelementStart(0, "th", 30);
67
+ i0.ɵɵelementStart(0, "th", 29);
72
68
  i0.ɵɵtext(1, "Will be created with");
73
69
  i0.ɵɵelementEnd();
74
70
  } }
75
71
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
76
- i0.ɵɵelement(0, "i", 37);
72
+ i0.ɵɵelement(0, "i", 36);
77
73
  } }
78
74
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
79
- i0.ɵɵelementStart(0, "td", 33);
75
+ i0.ɵɵelementStart(0, "td", 32);
80
76
  i0.ɵɵtext(1);
81
77
  i0.ɵɵelementEnd();
82
- i0.ɵɵelementStart(2, "td", 34);
78
+ i0.ɵɵelementStart(2, "td", 33);
83
79
  i0.ɵɵtext(3);
84
80
  i0.ɵɵelementEnd();
85
81
  } if (rf & 2) {
@@ -93,7 +89,7 @@ function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Condit
93
89
  i0.ɵɵtextInterpolate1(" ", row_r5.RestoreValue || "(empty)", " ");
94
90
  } }
95
91
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_10_Template(rf, ctx) { if (rf & 1) {
96
- i0.ɵɵelementStart(0, "td", 30);
92
+ i0.ɵɵelementStart(0, "td", 29);
97
93
  i0.ɵɵtext(1);
98
94
  i0.ɵɵelementEnd();
99
95
  } if (rf & 2) {
@@ -103,32 +99,32 @@ function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Condit
103
99
  i0.ɵɵtextInterpolate1(" ", row_r5.RestoreValue || "(empty)", " ");
104
100
  } }
105
101
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
106
- i0.ɵɵelement(0, "i", 41);
102
+ i0.ɵɵelement(0, "i", 40);
107
103
  } }
108
104
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
109
- i0.ɵɵelement(0, "i", 42);
105
+ i0.ɵɵelement(0, "i", 41);
110
106
  } }
111
107
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
112
- i0.ɵɵelement(0, "i", 43);
108
+ i0.ɵɵelement(0, "i", 42);
113
109
  } }
114
110
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelement(0, "i", 44);
111
+ i0.ɵɵelement(0, "i", 43);
116
112
  } }
117
113
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Template(rf, ctx) { if (rf & 1) {
118
114
  const _r4 = i0.ɵɵgetCurrentView();
119
- i0.ɵɵelementStart(0, "tr")(1, "td", 28)(2, "button", 36);
115
+ i0.ɵɵelementStart(0, "tr")(1, "td", 27)(2, "button", 35);
120
116
  i0.ɵɵlistener("click", function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r4); const row_r5 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleRow(row_r5)); });
121
- i0.ɵɵconditionalCreate(3, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_3_Template, 1, 0, "i", 37);
117
+ i0.ɵɵconditionalCreate(3, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_3_Template, 1, 0, "i", 36);
122
118
  i0.ɵɵelementEnd()();
123
- i0.ɵɵelementStart(4, "td", 29)(5, "div", 38);
119
+ i0.ɵɵelementStart(4, "td", 28)(5, "div", 37);
124
120
  i0.ɵɵtext(6);
125
121
  i0.ɵɵelementEnd();
126
- i0.ɵɵelementStart(7, "div", 39);
122
+ i0.ɵɵelementStart(7, "div", 38);
127
123
  i0.ɵɵtext(8);
128
124
  i0.ɵɵelementEnd()();
129
- i0.ɵɵconditionalCreate(9, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_9_Template, 4, 6)(10, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_10_Template, 2, 3, "td", 40);
130
- i0.ɵɵelementStart(11, "td", 31);
131
- i0.ɵɵconditionalCreate(12, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_12_Template, 1, 0, "i", 41)(13, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_13_Template, 1, 0, "i", 42)(14, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_14_Template, 1, 0, "i", 43)(15, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_15_Template, 1, 0, "i", 44);
125
+ i0.ɵɵconditionalCreate(9, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_9_Template, 4, 6)(10, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_10_Template, 2, 3, "td", 39);
126
+ i0.ɵɵelementStart(11, "td", 30);
127
+ i0.ɵɵconditionalCreate(12, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_12_Template, 1, 0, "i", 40)(13, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_13_Template, 1, 0, "i", 41)(14, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_14_Template, 1, 0, "i", 42)(15, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Conditional_15_Template, 1, 0, "i", 43);
132
128
  i0.ɵɵelementEnd()();
133
129
  } if (rf & 2) {
134
130
  const row_r5 = i0.ɵɵnextContext().$implicit;
@@ -150,7 +146,7 @@ function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Condit
150
146
  i0.ɵɵconditional(row_r5.IsMissingInSchema ? 12 : row_r5.IsImmutable ? 13 : row_r5.IsChanged ? 14 : 15);
151
147
  } }
152
148
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Template(rf, ctx) { if (rf & 1) {
153
- i0.ɵɵconditionalCreate(0, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Template, 16, 19, "tr", 35);
149
+ i0.ɵɵconditionalCreate(0, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Conditional_0_Template, 16, 19, "tr", 34);
154
150
  } if (rf & 2) {
155
151
  const row_r5 = ctx.$implicit;
156
152
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -158,9 +154,9 @@ function RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Templa
158
154
  } }
159
155
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_13_Template(rf, ctx) { if (rf & 1) {
160
156
  const _r6 = i0.ɵɵgetCurrentView();
161
- i0.ɵɵelementStart(0, "button", 45);
157
+ i0.ɵɵelementStart(0, "button", 44);
162
158
  i0.ɵɵlistener("click", function RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleUnchanged()); });
163
- i0.ɵɵelement(1, "i", 46);
159
+ i0.ɵɵelement(1, "i", 45);
164
160
  i0.ɵɵelementStart(2, "span");
165
161
  i0.ɵɵtext(3);
166
162
  i0.ɵɵelementEnd()();
@@ -172,18 +168,18 @@ function RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_1
172
168
  i0.ɵɵtextInterpolate3("", ctx_r1.ShowUnchanged ? "Hide" : "Show", " ", ctx_r1.UnchangedCount, " unchanged field", ctx_r1.UnchangedCount === 1 ? "" : "s");
173
169
  } }
174
170
  function RestorePreviewPanelComponent_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
175
- i0.ɵɵelementStart(0, "div", 26)(1, "table", 27)(2, "thead")(3, "tr");
176
- i0.ɵɵelement(4, "th", 28);
177
- i0.ɵɵelementStart(5, "th", 29);
171
+ i0.ɵɵelementStart(0, "div", 25)(1, "table", 26)(2, "thead")(3, "tr");
172
+ i0.ɵɵelement(4, "th", 27);
173
+ i0.ɵɵelementStart(5, "th", 28);
178
174
  i0.ɵɵtext(6, "Field");
179
175
  i0.ɵɵelementEnd();
180
- i0.ɵɵconditionalCreate(7, RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_7_Template, 4, 0)(8, RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_8_Template, 2, 0, "th", 30);
181
- i0.ɵɵelement(9, "th", 31);
176
+ i0.ɵɵconditionalCreate(7, RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_7_Template, 4, 0)(8, RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_8_Template, 2, 0, "th", 29);
177
+ i0.ɵɵelement(9, "th", 30);
182
178
  i0.ɵɵelementEnd()();
183
179
  i0.ɵɵelementStart(10, "tbody");
184
180
  i0.ɵɵrepeaterCreate(11, RestorePreviewPanelComponent_Conditional_1_Conditional_16_For_12_Template, 1, 1, null, null, _forTrack0);
185
181
  i0.ɵɵelementEnd()()();
186
- i0.ɵɵconditionalCreate(13, RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_13_Template, 4, 7, "button", 32);
182
+ i0.ɵɵconditionalCreate(13, RestorePreviewPanelComponent_Conditional_1_Conditional_16_Conditional_13_Template, 4, 7, "button", 31);
187
183
  } if (rf & 2) {
188
184
  const ctx_r1 = i0.ɵɵnextContext(2);
189
185
  i0.ɵɵadvance(7);
@@ -194,22 +190,22 @@ function RestorePreviewPanelComponent_Conditional_1_Conditional_16_Template(rf,
194
190
  i0.ɵɵconditional(ctx_r1.UnchangedCount > 0 && ctx_r1.Mode === "live" ? 13 : -1);
195
191
  } }
196
192
  function RestorePreviewPanelComponent_Conditional_1_Conditional_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
197
- i0.ɵɵelementStart(0, "span", 48);
193
+ i0.ɵɵelementStart(0, "span", 47);
198
194
  i0.ɵɵtext(1, "*");
199
195
  i0.ɵɵelementEnd();
200
196
  } }
201
197
  function RestorePreviewPanelComponent_Conditional_1_Conditional_17_Conditional_4_Template(rf, ctx) { if (rf & 1) {
202
- i0.ɵɵelementStart(0, "span", 49);
198
+ i0.ɵɵelementStart(0, "span", 48);
203
199
  i0.ɵɵtext(1, "(optional)");
204
200
  i0.ɵɵelementEnd();
205
201
  } }
206
202
  function RestorePreviewPanelComponent_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
207
203
  const _r7 = i0.ɵɵgetCurrentView();
208
- i0.ɵɵelementStart(0, "div", 11)(1, "label", 47);
204
+ i0.ɵɵelementStart(0, "div", 11)(1, "label", 46);
209
205
  i0.ɵɵtext(2, " Reason for restore ");
210
- i0.ɵɵconditionalCreate(3, RestorePreviewPanelComponent_Conditional_1_Conditional_17_Conditional_3_Template, 2, 0, "span", 48)(4, RestorePreviewPanelComponent_Conditional_1_Conditional_17_Conditional_4_Template, 2, 0, "span", 49);
206
+ i0.ɵɵconditionalCreate(3, RestorePreviewPanelComponent_Conditional_1_Conditional_17_Conditional_3_Template, 2, 0, "span", 47)(4, RestorePreviewPanelComponent_Conditional_1_Conditional_17_Conditional_4_Template, 2, 0, "span", 48);
211
207
  i0.ɵɵelementEnd();
212
- i0.ɵɵelementStart(5, "textarea", 50);
208
+ i0.ɵɵelementStart(5, "textarea", 49);
213
209
  i0.ɵɵtwoWayListener("ngModelChange", function RestorePreviewPanelComponent_Conditional_1_Conditional_17_Template_textarea_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.Reason, $event) || (ctx_r1.Reason = $event); return i0.ɵɵresetView($event); });
214
210
  i0.ɵɵelementEnd()();
215
211
  } if (rf & 2) {
@@ -252,7 +248,7 @@ function RestorePreviewPanelComponent_Conditional_1_Template(rf, ctx) { if (rf &
252
248
  i0.ɵɵconditionalCreate(12, RestorePreviewPanelComponent_Conditional_1_Conditional_12_Template, 4, 1, "span");
253
249
  i0.ɵɵelementEnd()()();
254
250
  i0.ɵɵconditionalCreate(13, RestorePreviewPanelComponent_Conditional_1_Conditional_13_Template, 4, 2, "div", 8);
255
- i0.ɵɵconditionalCreate(14, RestorePreviewPanelComponent_Conditional_1_Conditional_14_Template, 4, 0, "div", 9);
251
+ i0.ɵɵconditionalCreate(14, RestorePreviewPanelComponent_Conditional_1_Conditional_14_Template, 1, 0, "mj-empty-state", 9);
256
252
  i0.ɵɵconditionalCreate(15, RestorePreviewPanelComponent_Conditional_1_Conditional_15_Template, 10, 4, "div", 10);
257
253
  i0.ɵɵconditionalCreate(16, RestorePreviewPanelComponent_Conditional_1_Conditional_16_Template, 14, 2);
258
254
  i0.ɵɵconditionalCreate(17, RestorePreviewPanelComponent_Conditional_1_Conditional_17_Template, 6, 3, "div", 11);
@@ -732,7 +728,7 @@ export class RestorePreviewPanelComponent extends BaseAngularComponent {
732
728
  }).format(new Date(date));
733
729
  }
734
730
  static ɵfac = function RestorePreviewPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || RestorePreviewPanelComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
735
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RestorePreviewPanelComponent, selectors: [["mj-restore-preview-panel"]], inputs: { Visible: "Visible", Mode: "Mode", RecordChange: "RecordChange", LiveRecord: "LiveRecord", EntityName: "EntityName", RequireReason: "RequireReason", HideReason: "HideReason" }, outputs: { BeforeRestoreCommit: "BeforeRestoreCommit", RestoreConfirmed: "RestoreConfirmed", RestoreCancelled: "RestoreCancelled" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 7, consts: [[3, "Closed", "Mode", "Title", "Visible", "Resizable", "MinWidthPx", "MaxWidthRatio"], [1, "rpp-container"], [1, "rpp-header"], [1, "rpp-header-icon"], ["aria-hidden", "true", 1, "fa-solid", "fa-clock-rotate-left"], [1, "rpp-header-text"], [1, "rpp-header-title"], [1, "rpp-header-meta"], [1, "rpp-banner", "rpp-banner-warning"], [1, "rpp-empty"], [1, "rpp-action-bar"], [1, "rpp-reason-section"], [1, "rpp-footer"], [1, "rpp-footer-info"], ["aria-hidden", "true", 1, "fa-solid", "fa-shield-halved"], [1, "rpp-footer-actions"], ["type", "button", 1, "rpp-btn", "rpp-btn-primary", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "fa-spin"], ["aria-hidden", "true", 1, "fa-solid", "fa-rotate-left"], ["type", "button", 1, "rpp-btn", "rpp-btn-secondary", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-triangle-exclamation"], ["aria-hidden", "true", 1, "fa-solid", "fa-circle-info"], [1, "rpp-action-bar-label"], [1, "rpp-action-bar-buttons"], ["type", "button", 1, "rpp-link-btn", 3, "click", "disabled"], [1, "rpp-action-bar-sep"], [1, "rpp-table-wrap"], [1, "rpp-table"], [1, "rpp-col-check"], [1, "rpp-col-field"], ["colspan", "2", 1, "rpp-col-restore"], [1, "rpp-col-flag"], ["type", "button", 1, "rpp-disclosure"], [1, "rpp-col-current"], [1, "rpp-col-restore"], [3, "rpp-row-changed", "rpp-row-unchanged", "rpp-row-immutable", "rpp-row-drift"], ["type", "button", 1, "rpp-checkbox", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-check"], [1, "rpp-field-display"], [1, "rpp-field-name"], ["colspan", "2", 1, "rpp-col-restore", 3, "rpp-empty-cell"], ["title", "This field no longer exists on the entity and will be skipped", "aria-hidden", "true", 1, "fa-solid", "fa-triangle-exclamation", "rpp-flag-drift"], ["title", "Read-only or system field \u2014 cannot be modified", "aria-hidden", "true", 1, "fa-solid", "fa-lock", "rpp-flag-immutable"], ["title", "Will be changed", "aria-hidden", "true", 1, "fa-solid", "fa-circle-exclamation", "rpp-flag-changed"], ["title", "Already matches", "aria-hidden", "true", 1, "fa-solid", "fa-check", "rpp-flag-ok"], ["type", "button", 1, "rpp-disclosure", 3, "click"], ["aria-hidden", "true", 1, "fa-solid"], ["for", "rpp-reason-input"], [1, "rpp-required"], [1, "rpp-optional"], ["id", "rpp-reason-input", "placeholder", "e.g., Reverting incorrect Q2 entries", "rows", "2", 1, "rpp-reason-textarea", 3, "ngModelChange", "ngModel", "disabled"]], template: function RestorePreviewPanelComponent_Template(rf, ctx) { if (rf & 1) {
731
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RestorePreviewPanelComponent, selectors: [["mj-restore-preview-panel"]], inputs: { Visible: "Visible", Mode: "Mode", RecordChange: "RecordChange", LiveRecord: "LiveRecord", EntityName: "EntityName", RequireReason: "RequireReason", HideReason: "HideReason" }, outputs: { BeforeRestoreCommit: "BeforeRestoreCommit", RestoreConfirmed: "RestoreConfirmed", RestoreCancelled: "RestoreCancelled" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 7, consts: [[3, "Closed", "Mode", "Title", "Visible", "Resizable", "MinWidthPx", "MaxWidthRatio"], [1, "rpp-container"], [1, "rpp-header"], [1, "rpp-header-icon"], ["aria-hidden", "true", 1, "fa-solid", "fa-clock-rotate-left"], [1, "rpp-header-text"], [1, "rpp-header-title"], [1, "rpp-header-meta"], [1, "rpp-banner", "rpp-banner-warning"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No fields could be parsed from this snapshot.", 1, "rpp-empty"], [1, "rpp-action-bar"], [1, "rpp-reason-section"], [1, "rpp-footer"], [1, "rpp-footer-info"], ["aria-hidden", "true", 1, "fa-solid", "fa-shield-halved"], [1, "rpp-footer-actions"], ["type", "button", 1, "rpp-btn", "rpp-btn-primary", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "fa-spin"], ["aria-hidden", "true", 1, "fa-solid", "fa-rotate-left"], ["type", "button", 1, "rpp-btn", "rpp-btn-secondary", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-triangle-exclamation"], [1, "rpp-action-bar-label"], [1, "rpp-action-bar-buttons"], ["type", "button", 1, "rpp-link-btn", 3, "click", "disabled"], [1, "rpp-action-bar-sep"], [1, "rpp-table-wrap"], [1, "rpp-table"], [1, "rpp-col-check"], [1, "rpp-col-field"], ["colspan", "2", 1, "rpp-col-restore"], [1, "rpp-col-flag"], ["type", "button", 1, "rpp-disclosure"], [1, "rpp-col-current"], [1, "rpp-col-restore"], [3, "rpp-row-changed", "rpp-row-unchanged", "rpp-row-immutable", "rpp-row-drift"], ["type", "button", 1, "rpp-checkbox", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-check"], [1, "rpp-field-display"], [1, "rpp-field-name"], ["colspan", "2", 1, "rpp-col-restore", 3, "rpp-empty-cell"], ["title", "This field no longer exists on the entity and will be skipped", "aria-hidden", "true", 1, "fa-solid", "fa-triangle-exclamation", "rpp-flag-drift"], ["title", "Read-only or system field \u2014 cannot be modified", "aria-hidden", "true", 1, "fa-solid", "fa-lock", "rpp-flag-immutable"], ["title", "Will be changed", "aria-hidden", "true", 1, "fa-solid", "fa-circle-exclamation", "rpp-flag-changed"], ["title", "Already matches", "aria-hidden", "true", 1, "fa-solid", "fa-check", "rpp-flag-ok"], ["type", "button", 1, "rpp-disclosure", 3, "click"], ["aria-hidden", "true", 1, "fa-solid"], ["for", "rpp-reason-input"], [1, "rpp-required"], [1, "rpp-optional"], ["id", "rpp-reason-input", "placeholder", "e.g., Reverting incorrect Q2 entries", "rows", "2", 1, "rpp-reason-textarea", 3, "ngModelChange", "ngModel", "disabled"]], template: function RestorePreviewPanelComponent_Template(rf, ctx) { if (rf & 1) {
736
732
  i0.ɵɵelementStart(0, "mj-slide-panel", 0);
737
733
  i0.ɵɵlistener("Closed", function RestorePreviewPanelComponent_Template_mj_slide_panel_Closed_0_listener() { return ctx.Cancel(); });
738
734
  i0.ɵɵconditionalCreate(1, RestorePreviewPanelComponent_Conditional_1_Template, 30, 13);
@@ -741,11 +737,11 @@ export class RestorePreviewPanelComponent extends BaseAngularComponent {
741
737
  i0.ɵɵproperty("Mode", "slide")("Title", ctx.HeaderTitle)("Visible", ctx.Visible)("Resizable", true)("MinWidthPx", 500)("MaxWidthRatio", 0.7);
742
738
  i0.ɵɵadvance();
743
739
  i0.ɵɵconditional(ctx.RecordChange ? 1 : -1);
744
- } }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MjSlidePanelComponent], styles: ["/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Restore Preview Panel\n * Slide-in panel that previews a restore operation field-by-field.\n * All colors use --mj-* design tokens so it adapts to dark mode and\n * white-label themes.\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.rpp-container {\n padding: 18px 20px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n/* \u2500\u2500\u2500 Header summary \u2500\u2500\u2500 */\n\n.rpp-header {\n display: flex;\n align-items: flex-start;\n gap: 14px;\n padding-bottom: 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.rpp-header-icon {\n width: 38px;\n height: 38px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 16px;\n}\n\n.rpp-header-text {\n flex: 1;\n min-width: 0;\n}\n\n.rpp-header-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.rpp-header-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 14px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.rpp-header-meta strong {\n color: var(--mj-text-secondary);\n font-weight: 500;\n margin-right: 4px;\n}\n\n/* \u2500\u2500\u2500 Banners \u2500\u2500\u2500 */\n\n.rpp-banner {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid;\n}\n\n.rpp-banner-warning {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n border-color: var(--mj-status-warning-border);\n}\n\n/* \u2500\u2500\u2500 Empty state \u2500\u2500\u2500 */\n\n.rpp-empty {\n text-align: center;\n padding: 30px 20px;\n color: var(--mj-text-muted);\n}\n\n.rpp-empty i {\n font-size: 24px;\n margin-bottom: 8px;\n}\n\n.rpp-empty p {\n margin: 0;\n font-size: 13px;\n}\n\n/* \u2500\u2500\u2500 Action bar (select all / deselect all) \u2500\u2500\u2500 */\n\n.rpp-action-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n font-size: 12px;\n}\n\n.rpp-action-bar-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.rpp-action-bar-buttons {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpp-action-bar-sep {\n color: var(--mj-text-disabled);\n}\n\n.rpp-link-btn {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.rpp-link-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.rpp-link-btn:disabled {\n color: var(--mj-text-disabled);\n cursor: not-allowed;\n}\n\n/* \u2500\u2500\u2500 Diff table \u2500\u2500\u2500 */\n\n.rpp-table-wrap {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.rpp-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n background: var(--mj-bg-surface);\n}\n\n.rpp-table thead th {\n text-align: left;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n font-weight: 600;\n}\n\n.rpp-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: top;\n}\n\n.rpp-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.rpp-row-changed { background: var(--mj-bg-surface); }\n.rpp-row-unchanged {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n.rpp-row-immutable { opacity: 0.7; }\n.rpp-row-drift { background: color-mix(in srgb, var(--mj-status-warning) 5%, var(--mj-bg-surface)); }\n\n/* Column widths */\n.rpp-col-check { width: 36px; padding: 8px 4px 8px 12px; }\n.rpp-col-field { width: 28%; min-width: 140px; }\n.rpp-col-current,\n.rpp-col-restore { word-break: break-word; }\n.rpp-col-flag { width: 28px; text-align: right; padding-right: 12px; }\n\n/* \u2500\u2500\u2500 Field cell \u2500\u2500\u2500 */\n\n.rpp-field-display {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.rpp-field-name {\n color: var(--mj-text-disabled);\n font-size: 11px;\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n}\n\n.rpp-row-unchanged .rpp-field-display { color: var(--mj-text-muted); }\n\n/* \u2500\u2500\u2500 Value cells \u2500\u2500\u2500 */\n\n.rpp-col-current { color: var(--mj-text-secondary); }\n.rpp-col-restore {\n color: var(--mj-text-primary);\n font-weight: 500;\n background: linear-gradient(90deg,\n color-mix(in srgb, var(--mj-brand-primary) 6%, transparent),\n transparent 80%);\n}\n\n.rpp-empty-cell {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n/* \u2500\u2500\u2500 Checkbox \u2500\u2500\u2500 */\n\n.rpp-checkbox {\n width: 18px;\n height: 18px;\n border: 1.5px solid var(--mj-border-strong);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n color: var(--mj-text-inverse, #fff);\n transition: background-color 0.1s, border-color 0.1s;\n}\n\n.rpp-checkbox:hover:not(:disabled) {\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-checkbox.checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-checkbox.checked i {\n font-size: 11px;\n}\n\n.rpp-checkbox.disabled,\n.rpp-checkbox:disabled {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n cursor: not-allowed;\n}\n\n/* \u2500\u2500\u2500 Flag icons \u2500\u2500\u2500 */\n\n.rpp-flag-changed { color: var(--mj-status-warning); }\n.rpp-flag-ok { color: var(--mj-text-disabled); }\n.rpp-flag-drift { color: var(--mj-status-warning); }\n.rpp-flag-immutable { color: var(--mj-text-disabled); }\n\n/* \u2500\u2500\u2500 Unchanged disclosure \u2500\u2500\u2500 */\n\n.rpp-disclosure {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n padding: 8px 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n text-align: left;\n}\n\n.rpp-disclosure:hover {\n color: var(--mj-text-primary);\n}\n\n.rpp-disclosure i {\n font-size: 10px;\n width: 12px;\n}\n\n/* \u2500\u2500\u2500 Reason section \u2500\u2500\u2500 */\n\n.rpp-reason-section {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.rpp-reason-section label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.rpp-required {\n color: var(--mj-status-error);\n margin-left: 4px;\n}\n\n.rpp-optional {\n color: var(--mj-text-disabled);\n font-weight: 400;\n margin-left: 4px;\n}\n\n.rpp-reason-textarea {\n width: 100%;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n padding: 8px 10px;\n font-family: inherit;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n resize: vertical;\n min-height: 50px;\n box-sizing: border-box;\n}\n\n.rpp-reason-textarea:focus {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -1px;\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-reason-textarea:disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n\n/* \u2500\u2500\u2500 Footer \u2500\u2500\u2500 */\n\n.rpp-footer {\n position: sticky;\n bottom: 0;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n padding: 12px 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n}\n\n.rpp-footer-info {\n display: flex;\n align-items: center;\n gap: 7px;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.rpp-footer-info i {\n color: var(--mj-brand-primary);\n}\n\n.rpp-footer-actions {\n display: flex;\n gap: 10px;\n}\n\n.rpp-btn {\n padding: 8px 16px;\n border-radius: 7px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n border: 1px solid transparent;\n display: inline-flex;\n align-items: center;\n gap: 7px;\n font-family: inherit;\n}\n\n.rpp-btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.rpp-btn-primary:disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n border-color: var(--mj-border-default);\n cursor: not-allowed;\n}\n\n.rpp-btn-secondary {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n font-weight: 500;\n}\n\n.rpp-btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.rpp-btn-secondary:disabled {\n color: var(--mj-text-disabled);\n cursor: not-allowed;\n}\n"], encapsulation: 2, changeDetection: 0 });
740
+ } }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MjSlidePanelComponent, i2.MJEmptyStateComponent], styles: ["/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Restore Preview Panel\n * Slide-in panel that previews a restore operation field-by-field.\n * All colors use --mj-* design tokens so it adapts to dark mode and\n * white-label themes.\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.rpp-container {\n padding: 18px 20px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n/* \u2500\u2500\u2500 Header summary \u2500\u2500\u2500 */\n\n.rpp-header {\n display: flex;\n align-items: flex-start;\n gap: 14px;\n padding-bottom: 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.rpp-header-icon {\n width: 38px;\n height: 38px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 16px;\n}\n\n.rpp-header-text {\n flex: 1;\n min-width: 0;\n}\n\n.rpp-header-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.rpp-header-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 14px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.rpp-header-meta strong {\n color: var(--mj-text-secondary);\n font-weight: 500;\n margin-right: 4px;\n}\n\n/* \u2500\u2500\u2500 Banners \u2500\u2500\u2500 */\n\n.rpp-banner {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid;\n}\n\n.rpp-banner-warning {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n border-color: var(--mj-status-warning-border);\n}\n\n/* \u2500\u2500\u2500 Empty state \u2500\u2500\u2500 */\n\n.rpp-empty {\n text-align: center;\n padding: 30px 20px;\n color: var(--mj-text-muted);\n}\n\n.rpp-empty i {\n font-size: 24px;\n margin-bottom: 8px;\n}\n\n.rpp-empty p {\n margin: 0;\n font-size: 13px;\n}\n\n/* \u2500\u2500\u2500 Action bar (select all / deselect all) \u2500\u2500\u2500 */\n\n.rpp-action-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n font-size: 12px;\n}\n\n.rpp-action-bar-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.rpp-action-bar-buttons {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpp-action-bar-sep {\n color: var(--mj-text-disabled);\n}\n\n.rpp-link-btn {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.rpp-link-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.rpp-link-btn:disabled {\n color: var(--mj-text-disabled);\n cursor: not-allowed;\n}\n\n/* \u2500\u2500\u2500 Diff table \u2500\u2500\u2500 */\n\n.rpp-table-wrap {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.rpp-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n background: var(--mj-bg-surface);\n}\n\n.rpp-table thead th {\n text-align: left;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n font-weight: 600;\n}\n\n.rpp-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: top;\n}\n\n.rpp-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.rpp-row-changed { background: var(--mj-bg-surface); }\n.rpp-row-unchanged {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n.rpp-row-immutable { opacity: 0.7; }\n.rpp-row-drift { background: color-mix(in srgb, var(--mj-status-warning) 5%, var(--mj-bg-surface)); }\n\n/* Column widths */\n.rpp-col-check { width: 36px; padding: 8px 4px 8px 12px; }\n.rpp-col-field { width: 28%; min-width: 140px; }\n.rpp-col-current,\n.rpp-col-restore { word-break: break-word; }\n.rpp-col-flag { width: 28px; text-align: right; padding-right: 12px; }\n\n/* \u2500\u2500\u2500 Field cell \u2500\u2500\u2500 */\n\n.rpp-field-display {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.rpp-field-name {\n color: var(--mj-text-disabled);\n font-size: 11px;\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n}\n\n.rpp-row-unchanged .rpp-field-display { color: var(--mj-text-muted); }\n\n/* \u2500\u2500\u2500 Value cells \u2500\u2500\u2500 */\n\n.rpp-col-current { color: var(--mj-text-secondary); }\n.rpp-col-restore {\n color: var(--mj-text-primary);\n font-weight: 500;\n background: linear-gradient(90deg,\n color-mix(in srgb, var(--mj-brand-primary) 6%, transparent),\n transparent 80%);\n}\n\n.rpp-empty-cell {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n/* \u2500\u2500\u2500 Checkbox \u2500\u2500\u2500 */\n\n.rpp-checkbox {\n width: 18px;\n height: 18px;\n border: 1.5px solid var(--mj-border-strong);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n color: var(--mj-text-inverse, #fff);\n transition: background-color 0.1s, border-color 0.1s;\n}\n\n.rpp-checkbox:hover:not(:disabled) {\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-checkbox.checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-checkbox.checked i {\n font-size: 11px;\n}\n\n.rpp-checkbox.disabled,\n.rpp-checkbox:disabled {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n cursor: not-allowed;\n}\n\n/* \u2500\u2500\u2500 Flag icons \u2500\u2500\u2500 */\n\n.rpp-flag-changed { color: var(--mj-status-warning); }\n.rpp-flag-ok { color: var(--mj-text-disabled); }\n.rpp-flag-drift { color: var(--mj-status-warning); }\n.rpp-flag-immutable { color: var(--mj-text-disabled); }\n\n/* \u2500\u2500\u2500 Unchanged disclosure \u2500\u2500\u2500 */\n\n.rpp-disclosure {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n padding: 8px 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n text-align: left;\n}\n\n.rpp-disclosure:hover {\n color: var(--mj-text-primary);\n}\n\n.rpp-disclosure i {\n font-size: 10px;\n width: 12px;\n}\n\n/* \u2500\u2500\u2500 Reason section \u2500\u2500\u2500 */\n\n.rpp-reason-section {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.rpp-reason-section label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.rpp-required {\n color: var(--mj-status-error);\n margin-left: 4px;\n}\n\n.rpp-optional {\n color: var(--mj-text-disabled);\n font-weight: 400;\n margin-left: 4px;\n}\n\n.rpp-reason-textarea {\n width: 100%;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n padding: 8px 10px;\n font-family: inherit;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n resize: vertical;\n min-height: 50px;\n box-sizing: border-box;\n}\n\n.rpp-reason-textarea:focus {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -1px;\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-reason-textarea:disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n\n/* \u2500\u2500\u2500 Footer \u2500\u2500\u2500 */\n\n.rpp-footer {\n position: sticky;\n bottom: 0;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n padding: 12px 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n}\n\n.rpp-footer-info {\n display: flex;\n align-items: center;\n gap: 7px;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.rpp-footer-info i {\n color: var(--mj-brand-primary);\n}\n\n.rpp-footer-actions {\n display: flex;\n gap: 10px;\n}\n\n.rpp-btn {\n padding: 8px 16px;\n border-radius: 7px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n border: 1px solid transparent;\n display: inline-flex;\n align-items: center;\n gap: 7px;\n font-family: inherit;\n}\n\n.rpp-btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.rpp-btn-primary:disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n border-color: var(--mj-border-default);\n cursor: not-allowed;\n}\n\n.rpp-btn-secondary {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n font-weight: 500;\n}\n\n.rpp-btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.rpp-btn-secondary:disabled {\n color: var(--mj-text-disabled);\n cursor: not-allowed;\n}\n"], encapsulation: 2, changeDetection: 0 });
745
741
  }
746
742
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RestorePreviewPanelComponent, [{
747
743
  type: Component,
748
- args: [{ standalone: false, selector: 'mj-restore-preview-panel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<mj-slide-panel\n [Mode]=\"'slide'\"\n [Title]=\"HeaderTitle\"\n [Visible]=\"Visible\"\n [Resizable]=\"true\"\n [MinWidthPx]=\"500\"\n [MaxWidthRatio]=\"0.7\"\n (Closed)=\"Cancel()\">\n\n @if (RecordChange) {\n <div class=\"rpp-container\">\n\n <!-- Header summary block -->\n <div class=\"rpp-header\">\n <div class=\"rpp-header-icon\">\n <i class=\"fa-solid fa-clock-rotate-left\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"rpp-header-text\">\n <div class=\"rpp-header-title\">{{ HeaderTitle }}</div>\n <div class=\"rpp-header-meta\">\n <span><strong>Version:</strong> {{ formatTimestamp(VersionTimestamp) }}</span>\n @if (VersionUser) {\n <span><strong>By:</strong> {{ VersionUser }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- Drift warning -->\n @if (DriftCount > 0) {\n <div class=\"rpp-banner rpp-banner-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\" aria-hidden=\"true\"></i>\n <span>{{ DriftCount }} field{{ DriftCount === 1 ? '' : 's' }} from this snapshot no longer exist on the entity and will be skipped.</span>\n </div>\n }\n\n <!-- Empty state -->\n @if (Rows.length === 0) {\n <div class=\"rpp-empty\">\n <i class=\"fa-solid fa-circle-info\" aria-hidden=\"true\"></i>\n <p>No fields could be parsed from this snapshot.</p>\n </div>\n }\n\n <!-- Action bar (select all / deselect all) -->\n @if (Rows.length > 0 && Mode !== 'undelete') {\n <div class=\"rpp-action-bar\">\n <span class=\"rpp-action-bar-label\">{{ ChangedCount }} field{{ ChangedCount === 1 ? '' : 's' }} differ from current</span>\n <div class=\"rpp-action-bar-buttons\">\n <button class=\"rpp-link-btn\" type=\"button\" (click)=\"SelectAll()\" [disabled]=\"IsRestoring\">Select all changed</button>\n <span class=\"rpp-action-bar-sep\">\u00B7</span>\n <button class=\"rpp-link-btn\" type=\"button\" (click)=\"DeselectAll()\" [disabled]=\"IsRestoring\">Deselect all</button>\n </div>\n </div>\n }\n\n <!-- Diff table -->\n @if (Rows.length > 0) {\n <div class=\"rpp-table-wrap\">\n <table class=\"rpp-table\">\n <thead>\n <tr>\n <th class=\"rpp-col-check\"></th>\n <th class=\"rpp-col-field\">Field</th>\n @if (Mode === 'live') {\n <th class=\"rpp-col-current\">Current Value</th>\n <th class=\"rpp-col-restore\">Restore To</th>\n } @else {\n <th class=\"rpp-col-restore\" colspan=\"2\">Will be created with</th>\n }\n <th class=\"rpp-col-flag\"></th>\n </tr>\n </thead>\n <tbody>\n @for (row of Rows; track row.FieldName) {\n @if (row.IsChanged || ShowUnchanged) {\n <tr [class.rpp-row-changed]=\"row.IsChanged\"\n [class.rpp-row-unchanged]=\"!row.IsChanged\"\n [class.rpp-row-immutable]=\"row.IsImmutable\"\n [class.rpp-row-drift]=\"row.IsMissingInSchema\">\n <td class=\"rpp-col-check\">\n <button type=\"button\"\n class=\"rpp-checkbox\"\n [class.checked]=\"row.Selected\"\n [class.disabled]=\"row.IsImmutable || row.IsMissingInSchema\"\n [disabled]=\"row.IsImmutable || row.IsMissingInSchema || IsRestoring\"\n [attr.aria-label]=\"'Toggle ' + row.DisplayName\"\n (click)=\"ToggleRow(row)\">\n @if (row.Selected) {\n <i class=\"fa-solid fa-check\" aria-hidden=\"true\"></i>\n }\n </button>\n </td>\n <td class=\"rpp-col-field\">\n <div class=\"rpp-field-display\">{{ row.DisplayName }}</div>\n <div class=\"rpp-field-name\">{{ row.FieldName }}</div>\n </td>\n @if (Mode === 'live') {\n <td class=\"rpp-col-current\" [class.rpp-empty-cell]=\"!row.CurrentValue\">\n {{ row.CurrentValue || '(empty)' }}\n </td>\n <td class=\"rpp-col-restore\" [class.rpp-empty-cell]=\"!row.RestoreValue\">\n {{ row.RestoreValue || '(empty)' }}\n </td>\n } @else {\n <td class=\"rpp-col-restore\" colspan=\"2\" [class.rpp-empty-cell]=\"!row.RestoreValue\">\n {{ row.RestoreValue || '(empty)' }}\n </td>\n }\n <td class=\"rpp-col-flag\">\n @if (row.IsMissingInSchema) {\n <i class=\"fa-solid fa-triangle-exclamation rpp-flag-drift\"\n title=\"This field no longer exists on the entity and will be skipped\"\n aria-hidden=\"true\"></i>\n } @else if (row.IsImmutable) {\n <i class=\"fa-solid fa-lock rpp-flag-immutable\"\n title=\"Read-only or system field \u2014 cannot be modified\"\n aria-hidden=\"true\"></i>\n } @else if (row.IsChanged) {\n <i class=\"fa-solid fa-circle-exclamation rpp-flag-changed\"\n title=\"Will be changed\"\n aria-hidden=\"true\"></i>\n } @else {\n <i class=\"fa-solid fa-check rpp-flag-ok\"\n title=\"Already matches\"\n aria-hidden=\"true\"></i>\n }\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- Unchanged disclosure -->\n @if (UnchangedCount > 0 && Mode === 'live') {\n <button class=\"rpp-disclosure\" type=\"button\" (click)=\"ToggleUnchanged()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-right]=\"!ShowUnchanged\"\n [class.fa-chevron-down]=\"ShowUnchanged\"\n aria-hidden=\"true\"></i>\n <span>{{ ShowUnchanged ? 'Hide' : 'Show' }} {{ UnchangedCount }} unchanged field{{ UnchangedCount === 1 ? '' : 's' }}</span>\n </button>\n }\n }\n\n <!-- Reason text area -->\n @if (!HideReason && Rows.length > 0) {\n <div class=\"rpp-reason-section\">\n <label for=\"rpp-reason-input\">\n Reason for restore\n @if (RequireReason) {\n <span class=\"rpp-required\">*</span>\n } @else {\n <span class=\"rpp-optional\">(optional)</span>\n }\n </label>\n <textarea id=\"rpp-reason-input\"\n [(ngModel)]=\"Reason\"\n [disabled]=\"IsRestoring\"\n placeholder=\"e.g., Reverting incorrect Q2 entries\"\n class=\"rpp-reason-textarea\"\n rows=\"2\"></textarea>\n </div>\n }\n </div>\n\n <!-- Footer actions -->\n <div class=\"rpp-footer\">\n <div class=\"rpp-footer-info\">\n <i class=\"fa-solid fa-shield-halved\" aria-hidden=\"true\"></i>\n @if (Mode === 'live') {\n <span>A snapshot of the current state is saved automatically before the restore.</span>\n } @else {\n <span>A new \"Created\" entry will be added to this record's history, linked back to the original deletion.</span>\n }\n </div>\n <div class=\"rpp-footer-actions\">\n <button type=\"button\"\n class=\"rpp-btn rpp-btn-primary\"\n [disabled]=\"IsRestoreDisabled\"\n (click)=\"ConfirmRestore()\">\n @if (IsRestoring) {\n <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n } @else {\n <i class=\"fa-solid fa-rotate-left\" aria-hidden=\"true\"></i>\n }\n {{ RestoreButtonLabel }}\n </button>\n <button type=\"button\"\n class=\"rpp-btn rpp-btn-secondary\"\n [disabled]=\"IsRestoring\"\n (click)=\"Cancel()\">Cancel</button>\n </div>\n </div>\n }\n</mj-slide-panel>\n", styles: ["/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Restore Preview Panel\n * Slide-in panel that previews a restore operation field-by-field.\n * All colors use --mj-* design tokens so it adapts to dark mode and\n * white-label themes.\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.rpp-container {\n padding: 18px 20px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n/* \u2500\u2500\u2500 Header summary \u2500\u2500\u2500 */\n\n.rpp-header {\n display: flex;\n align-items: flex-start;\n gap: 14px;\n padding-bottom: 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.rpp-header-icon {\n width: 38px;\n height: 38px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 16px;\n}\n\n.rpp-header-text {\n flex: 1;\n min-width: 0;\n}\n\n.rpp-header-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.rpp-header-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 14px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.rpp-header-meta strong {\n color: var(--mj-text-secondary);\n font-weight: 500;\n margin-right: 4px;\n}\n\n/* \u2500\u2500\u2500 Banners \u2500\u2500\u2500 */\n\n.rpp-banner {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid;\n}\n\n.rpp-banner-warning {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n border-color: var(--mj-status-warning-border);\n}\n\n/* \u2500\u2500\u2500 Empty state \u2500\u2500\u2500 */\n\n.rpp-empty {\n text-align: center;\n padding: 30px 20px;\n color: var(--mj-text-muted);\n}\n\n.rpp-empty i {\n font-size: 24px;\n margin-bottom: 8px;\n}\n\n.rpp-empty p {\n margin: 0;\n font-size: 13px;\n}\n\n/* \u2500\u2500\u2500 Action bar (select all / deselect all) \u2500\u2500\u2500 */\n\n.rpp-action-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n font-size: 12px;\n}\n\n.rpp-action-bar-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.rpp-action-bar-buttons {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpp-action-bar-sep {\n color: var(--mj-text-disabled);\n}\n\n.rpp-link-btn {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.rpp-link-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.rpp-link-btn:disabled {\n color: var(--mj-text-disabled);\n cursor: not-allowed;\n}\n\n/* \u2500\u2500\u2500 Diff table \u2500\u2500\u2500 */\n\n.rpp-table-wrap {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.rpp-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n background: var(--mj-bg-surface);\n}\n\n.rpp-table thead th {\n text-align: left;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n font-weight: 600;\n}\n\n.rpp-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: top;\n}\n\n.rpp-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.rpp-row-changed { background: var(--mj-bg-surface); }\n.rpp-row-unchanged {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n.rpp-row-immutable { opacity: 0.7; }\n.rpp-row-drift { background: color-mix(in srgb, var(--mj-status-warning) 5%, var(--mj-bg-surface)); }\n\n/* Column widths */\n.rpp-col-check { width: 36px; padding: 8px 4px 8px 12px; }\n.rpp-col-field { width: 28%; min-width: 140px; }\n.rpp-col-current,\n.rpp-col-restore { word-break: break-word; }\n.rpp-col-flag { width: 28px; text-align: right; padding-right: 12px; }\n\n/* \u2500\u2500\u2500 Field cell \u2500\u2500\u2500 */\n\n.rpp-field-display {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.rpp-field-name {\n color: var(--mj-text-disabled);\n font-size: 11px;\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n}\n\n.rpp-row-unchanged .rpp-field-display { color: var(--mj-text-muted); }\n\n/* \u2500\u2500\u2500 Value cells \u2500\u2500\u2500 */\n\n.rpp-col-current { color: var(--mj-text-secondary); }\n.rpp-col-restore {\n color: var(--mj-text-primary);\n font-weight: 500;\n background: linear-gradient(90deg,\n color-mix(in srgb, var(--mj-brand-primary) 6%, transparent),\n transparent 80%);\n}\n\n.rpp-empty-cell {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n/* \u2500\u2500\u2500 Checkbox \u2500\u2500\u2500 */\n\n.rpp-checkbox {\n width: 18px;\n height: 18px;\n border: 1.5px solid var(--mj-border-strong);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n color: var(--mj-text-inverse, #fff);\n transition: background-color 0.1s, border-color 0.1s;\n}\n\n.rpp-checkbox:hover:not(:disabled) {\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-checkbox.checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-checkbox.checked i {\n font-size: 11px;\n}\n\n.rpp-checkbox.disabled,\n.rpp-checkbox:disabled {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n cursor: not-allowed;\n}\n\n/* \u2500\u2500\u2500 Flag icons \u2500\u2500\u2500 */\n\n.rpp-flag-changed { color: var(--mj-status-warning); }\n.rpp-flag-ok { color: var(--mj-text-disabled); }\n.rpp-flag-drift { color: var(--mj-status-warning); }\n.rpp-flag-immutable { color: var(--mj-text-disabled); }\n\n/* \u2500\u2500\u2500 Unchanged disclosure \u2500\u2500\u2500 */\n\n.rpp-disclosure {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n padding: 8px 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n text-align: left;\n}\n\n.rpp-disclosure:hover {\n color: var(--mj-text-primary);\n}\n\n.rpp-disclosure i {\n font-size: 10px;\n width: 12px;\n}\n\n/* \u2500\u2500\u2500 Reason section \u2500\u2500\u2500 */\n\n.rpp-reason-section {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.rpp-reason-section label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.rpp-required {\n color: var(--mj-status-error);\n margin-left: 4px;\n}\n\n.rpp-optional {\n color: var(--mj-text-disabled);\n font-weight: 400;\n margin-left: 4px;\n}\n\n.rpp-reason-textarea {\n width: 100%;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n padding: 8px 10px;\n font-family: inherit;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n resize: vertical;\n min-height: 50px;\n box-sizing: border-box;\n}\n\n.rpp-reason-textarea:focus {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -1px;\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-reason-textarea:disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n\n/* \u2500\u2500\u2500 Footer \u2500\u2500\u2500 */\n\n.rpp-footer {\n position: sticky;\n bottom: 0;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n padding: 12px 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n}\n\n.rpp-footer-info {\n display: flex;\n align-items: center;\n gap: 7px;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.rpp-footer-info i {\n color: var(--mj-brand-primary);\n}\n\n.rpp-footer-actions {\n display: flex;\n gap: 10px;\n}\n\n.rpp-btn {\n padding: 8px 16px;\n border-radius: 7px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n border: 1px solid transparent;\n display: inline-flex;\n align-items: center;\n gap: 7px;\n font-family: inherit;\n}\n\n.rpp-btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.rpp-btn-primary:disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n border-color: var(--mj-border-default);\n cursor: not-allowed;\n}\n\n.rpp-btn-secondary {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n font-weight: 500;\n}\n\n.rpp-btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.rpp-btn-secondary:disabled {\n color: var(--mj-text-disabled);\n cursor: not-allowed;\n}\n"] }]
744
+ args: [{ standalone: false, selector: 'mj-restore-preview-panel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<mj-slide-panel\n [Mode]=\"'slide'\"\n [Title]=\"HeaderTitle\"\n [Visible]=\"Visible\"\n [Resizable]=\"true\"\n [MinWidthPx]=\"500\"\n [MaxWidthRatio]=\"0.7\"\n (Closed)=\"Cancel()\">\n\n @if (RecordChange) {\n <div class=\"rpp-container\">\n\n <!-- Header summary block -->\n <div class=\"rpp-header\">\n <div class=\"rpp-header-icon\">\n <i class=\"fa-solid fa-clock-rotate-left\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"rpp-header-text\">\n <div class=\"rpp-header-title\">{{ HeaderTitle }}</div>\n <div class=\"rpp-header-meta\">\n <span><strong>Version:</strong> {{ formatTimestamp(VersionTimestamp) }}</span>\n @if (VersionUser) {\n <span><strong>By:</strong> {{ VersionUser }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- Drift warning -->\n @if (DriftCount > 0) {\n <div class=\"rpp-banner rpp-banner-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\" aria-hidden=\"true\"></i>\n <span>{{ DriftCount }} field{{ DriftCount === 1 ? '' : 's' }} from this snapshot no longer exist on the entity and will be skipped.</span>\n </div>\n }\n\n <!-- Empty state -->\n @if (Rows.length === 0) {\n <mj-empty-state class=\"rpp-empty\" Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No fields could be parsed from this snapshot.\" />\n }\n\n <!-- Action bar (select all / deselect all) -->\n @if (Rows.length > 0 && Mode !== 'undelete') {\n <div class=\"rpp-action-bar\">\n <span class=\"rpp-action-bar-label\">{{ ChangedCount }} field{{ ChangedCount === 1 ? '' : 's' }} differ from current</span>\n <div class=\"rpp-action-bar-buttons\">\n <button class=\"rpp-link-btn\" type=\"button\" (click)=\"SelectAll()\" [disabled]=\"IsRestoring\">Select all changed</button>\n <span class=\"rpp-action-bar-sep\">\u00B7</span>\n <button class=\"rpp-link-btn\" type=\"button\" (click)=\"DeselectAll()\" [disabled]=\"IsRestoring\">Deselect all</button>\n </div>\n </div>\n }\n\n <!-- Diff table -->\n @if (Rows.length > 0) {\n <div class=\"rpp-table-wrap\">\n <table class=\"rpp-table\">\n <thead>\n <tr>\n <th class=\"rpp-col-check\"></th>\n <th class=\"rpp-col-field\">Field</th>\n @if (Mode === 'live') {\n <th class=\"rpp-col-current\">Current Value</th>\n <th class=\"rpp-col-restore\">Restore To</th>\n } @else {\n <th class=\"rpp-col-restore\" colspan=\"2\">Will be created with</th>\n }\n <th class=\"rpp-col-flag\"></th>\n </tr>\n </thead>\n <tbody>\n @for (row of Rows; track row.FieldName) {\n @if (row.IsChanged || ShowUnchanged) {\n <tr [class.rpp-row-changed]=\"row.IsChanged\"\n [class.rpp-row-unchanged]=\"!row.IsChanged\"\n [class.rpp-row-immutable]=\"row.IsImmutable\"\n [class.rpp-row-drift]=\"row.IsMissingInSchema\">\n <td class=\"rpp-col-check\">\n <button type=\"button\"\n class=\"rpp-checkbox\"\n [class.checked]=\"row.Selected\"\n [class.disabled]=\"row.IsImmutable || row.IsMissingInSchema\"\n [disabled]=\"row.IsImmutable || row.IsMissingInSchema || IsRestoring\"\n [attr.aria-label]=\"'Toggle ' + row.DisplayName\"\n (click)=\"ToggleRow(row)\">\n @if (row.Selected) {\n <i class=\"fa-solid fa-check\" aria-hidden=\"true\"></i>\n }\n </button>\n </td>\n <td class=\"rpp-col-field\">\n <div class=\"rpp-field-display\">{{ row.DisplayName }}</div>\n <div class=\"rpp-field-name\">{{ row.FieldName }}</div>\n </td>\n @if (Mode === 'live') {\n <td class=\"rpp-col-current\" [class.rpp-empty-cell]=\"!row.CurrentValue\">\n {{ row.CurrentValue || '(empty)' }}\n </td>\n <td class=\"rpp-col-restore\" [class.rpp-empty-cell]=\"!row.RestoreValue\">\n {{ row.RestoreValue || '(empty)' }}\n </td>\n } @else {\n <td class=\"rpp-col-restore\" colspan=\"2\" [class.rpp-empty-cell]=\"!row.RestoreValue\">\n {{ row.RestoreValue || '(empty)' }}\n </td>\n }\n <td class=\"rpp-col-flag\">\n @if (row.IsMissingInSchema) {\n <i class=\"fa-solid fa-triangle-exclamation rpp-flag-drift\"\n title=\"This field no longer exists on the entity and will be skipped\"\n aria-hidden=\"true\"></i>\n } @else if (row.IsImmutable) {\n <i class=\"fa-solid fa-lock rpp-flag-immutable\"\n title=\"Read-only or system field \u2014 cannot be modified\"\n aria-hidden=\"true\"></i>\n } @else if (row.IsChanged) {\n <i class=\"fa-solid fa-circle-exclamation rpp-flag-changed\"\n title=\"Will be changed\"\n aria-hidden=\"true\"></i>\n } @else {\n <i class=\"fa-solid fa-check rpp-flag-ok\"\n title=\"Already matches\"\n aria-hidden=\"true\"></i>\n }\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- Unchanged disclosure -->\n @if (UnchangedCount > 0 && Mode === 'live') {\n <button class=\"rpp-disclosure\" type=\"button\" (click)=\"ToggleUnchanged()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-right]=\"!ShowUnchanged\"\n [class.fa-chevron-down]=\"ShowUnchanged\"\n aria-hidden=\"true\"></i>\n <span>{{ ShowUnchanged ? 'Hide' : 'Show' }} {{ UnchangedCount }} unchanged field{{ UnchangedCount === 1 ? '' : 's' }}</span>\n </button>\n }\n }\n\n <!-- Reason text area -->\n @if (!HideReason && Rows.length > 0) {\n <div class=\"rpp-reason-section\">\n <label for=\"rpp-reason-input\">\n Reason for restore\n @if (RequireReason) {\n <span class=\"rpp-required\">*</span>\n } @else {\n <span class=\"rpp-optional\">(optional)</span>\n }\n </label>\n <textarea id=\"rpp-reason-input\"\n [(ngModel)]=\"Reason\"\n [disabled]=\"IsRestoring\"\n placeholder=\"e.g., Reverting incorrect Q2 entries\"\n class=\"rpp-reason-textarea\"\n rows=\"2\"></textarea>\n </div>\n }\n </div>\n\n <!-- Footer actions -->\n <div class=\"rpp-footer\">\n <div class=\"rpp-footer-info\">\n <i class=\"fa-solid fa-shield-halved\" aria-hidden=\"true\"></i>\n @if (Mode === 'live') {\n <span>A snapshot of the current state is saved automatically before the restore.</span>\n } @else {\n <span>A new \"Created\" entry will be added to this record's history, linked back to the original deletion.</span>\n }\n </div>\n <div class=\"rpp-footer-actions\">\n <button type=\"button\"\n class=\"rpp-btn rpp-btn-primary\"\n [disabled]=\"IsRestoreDisabled\"\n (click)=\"ConfirmRestore()\">\n @if (IsRestoring) {\n <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n } @else {\n <i class=\"fa-solid fa-rotate-left\" aria-hidden=\"true\"></i>\n }\n {{ RestoreButtonLabel }}\n </button>\n <button type=\"button\"\n class=\"rpp-btn rpp-btn-secondary\"\n [disabled]=\"IsRestoring\"\n (click)=\"Cancel()\">Cancel</button>\n </div>\n </div>\n }\n</mj-slide-panel>\n", styles: ["/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Restore Preview Panel\n * Slide-in panel that previews a restore operation field-by-field.\n * All colors use --mj-* design tokens so it adapts to dark mode and\n * white-label themes.\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.rpp-container {\n padding: 18px 20px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n/* \u2500\u2500\u2500 Header summary \u2500\u2500\u2500 */\n\n.rpp-header {\n display: flex;\n align-items: flex-start;\n gap: 14px;\n padding-bottom: 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.rpp-header-icon {\n width: 38px;\n height: 38px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 16px;\n}\n\n.rpp-header-text {\n flex: 1;\n min-width: 0;\n}\n\n.rpp-header-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.rpp-header-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 14px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.rpp-header-meta strong {\n color: var(--mj-text-secondary);\n font-weight: 500;\n margin-right: 4px;\n}\n\n/* \u2500\u2500\u2500 Banners \u2500\u2500\u2500 */\n\n.rpp-banner {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid;\n}\n\n.rpp-banner-warning {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n border-color: var(--mj-status-warning-border);\n}\n\n/* \u2500\u2500\u2500 Empty state \u2500\u2500\u2500 */\n\n.rpp-empty {\n text-align: center;\n padding: 30px 20px;\n color: var(--mj-text-muted);\n}\n\n.rpp-empty i {\n font-size: 24px;\n margin-bottom: 8px;\n}\n\n.rpp-empty p {\n margin: 0;\n font-size: 13px;\n}\n\n/* \u2500\u2500\u2500 Action bar (select all / deselect all) \u2500\u2500\u2500 */\n\n.rpp-action-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n font-size: 12px;\n}\n\n.rpp-action-bar-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.rpp-action-bar-buttons {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpp-action-bar-sep {\n color: var(--mj-text-disabled);\n}\n\n.rpp-link-btn {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.rpp-link-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.rpp-link-btn:disabled {\n color: var(--mj-text-disabled);\n cursor: not-allowed;\n}\n\n/* \u2500\u2500\u2500 Diff table \u2500\u2500\u2500 */\n\n.rpp-table-wrap {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.rpp-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n background: var(--mj-bg-surface);\n}\n\n.rpp-table thead th {\n text-align: left;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n font-weight: 600;\n}\n\n.rpp-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: top;\n}\n\n.rpp-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.rpp-row-changed { background: var(--mj-bg-surface); }\n.rpp-row-unchanged {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n.rpp-row-immutable { opacity: 0.7; }\n.rpp-row-drift { background: color-mix(in srgb, var(--mj-status-warning) 5%, var(--mj-bg-surface)); }\n\n/* Column widths */\n.rpp-col-check { width: 36px; padding: 8px 4px 8px 12px; }\n.rpp-col-field { width: 28%; min-width: 140px; }\n.rpp-col-current,\n.rpp-col-restore { word-break: break-word; }\n.rpp-col-flag { width: 28px; text-align: right; padding-right: 12px; }\n\n/* \u2500\u2500\u2500 Field cell \u2500\u2500\u2500 */\n\n.rpp-field-display {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.rpp-field-name {\n color: var(--mj-text-disabled);\n font-size: 11px;\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n}\n\n.rpp-row-unchanged .rpp-field-display { color: var(--mj-text-muted); }\n\n/* \u2500\u2500\u2500 Value cells \u2500\u2500\u2500 */\n\n.rpp-col-current { color: var(--mj-text-secondary); }\n.rpp-col-restore {\n color: var(--mj-text-primary);\n font-weight: 500;\n background: linear-gradient(90deg,\n color-mix(in srgb, var(--mj-brand-primary) 6%, transparent),\n transparent 80%);\n}\n\n.rpp-empty-cell {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n/* \u2500\u2500\u2500 Checkbox \u2500\u2500\u2500 */\n\n.rpp-checkbox {\n width: 18px;\n height: 18px;\n border: 1.5px solid var(--mj-border-strong);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n color: var(--mj-text-inverse, #fff);\n transition: background-color 0.1s, border-color 0.1s;\n}\n\n.rpp-checkbox:hover:not(:disabled) {\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-checkbox.checked {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-checkbox.checked i {\n font-size: 11px;\n}\n\n.rpp-checkbox.disabled,\n.rpp-checkbox:disabled {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n cursor: not-allowed;\n}\n\n/* \u2500\u2500\u2500 Flag icons \u2500\u2500\u2500 */\n\n.rpp-flag-changed { color: var(--mj-status-warning); }\n.rpp-flag-ok { color: var(--mj-text-disabled); }\n.rpp-flag-drift { color: var(--mj-status-warning); }\n.rpp-flag-immutable { color: var(--mj-text-disabled); }\n\n/* \u2500\u2500\u2500 Unchanged disclosure \u2500\u2500\u2500 */\n\n.rpp-disclosure {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n padding: 8px 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n text-align: left;\n}\n\n.rpp-disclosure:hover {\n color: var(--mj-text-primary);\n}\n\n.rpp-disclosure i {\n font-size: 10px;\n width: 12px;\n}\n\n/* \u2500\u2500\u2500 Reason section \u2500\u2500\u2500 */\n\n.rpp-reason-section {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.rpp-reason-section label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.rpp-required {\n color: var(--mj-status-error);\n margin-left: 4px;\n}\n\n.rpp-optional {\n color: var(--mj-text-disabled);\n font-weight: 400;\n margin-left: 4px;\n}\n\n.rpp-reason-textarea {\n width: 100%;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n padding: 8px 10px;\n font-family: inherit;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n resize: vertical;\n min-height: 50px;\n box-sizing: border-box;\n}\n\n.rpp-reason-textarea:focus {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -1px;\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-reason-textarea:disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n\n/* \u2500\u2500\u2500 Footer \u2500\u2500\u2500 */\n\n.rpp-footer {\n position: sticky;\n bottom: 0;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n padding: 12px 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n}\n\n.rpp-footer-info {\n display: flex;\n align-items: center;\n gap: 7px;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.rpp-footer-info i {\n color: var(--mj-brand-primary);\n}\n\n.rpp-footer-actions {\n display: flex;\n gap: 10px;\n}\n\n.rpp-btn {\n padding: 8px 16px;\n border-radius: 7px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n border: 1px solid transparent;\n display: inline-flex;\n align-items: center;\n gap: 7px;\n font-family: inherit;\n}\n\n.rpp-btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n border-color: var(--mj-brand-primary);\n}\n\n.rpp-btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.rpp-btn-primary:disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n border-color: var(--mj-border-default);\n cursor: not-allowed;\n}\n\n.rpp-btn-secondary {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n font-weight: 500;\n}\n\n.rpp-btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.rpp-btn-secondary:disabled {\n color: var(--mj-text-disabled);\n cursor: not-allowed;\n}\n"] }]
749
745
  }], () => [{ type: i0.ChangeDetectorRef }], { Visible: [{
750
746
  type: Input
751
747
  }], Mode: [{