@memberjunction/ng-base-forms 4.0.0 → 4.2.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.
Files changed (77) hide show
  1. package/dist/lib/base-form-component.d.ts +103 -215
  2. package/dist/lib/base-form-component.d.ts.map +1 -1
  3. package/dist/lib/base-form-component.js +384 -541
  4. package/dist/lib/base-form-component.js.map +1 -1
  5. package/dist/lib/container/record-form-container.component.d.ts +165 -0
  6. package/dist/lib/container/record-form-container.component.d.ts.map +1 -0
  7. package/dist/lib/container/record-form-container.component.js +534 -0
  8. package/dist/lib/container/record-form-container.component.js.map +1 -0
  9. package/dist/lib/explorer-entity-data-grid.component.d.ts +7 -5
  10. package/dist/lib/explorer-entity-data-grid.component.d.ts.map +1 -1
  11. package/dist/lib/explorer-entity-data-grid.component.js +15 -9
  12. package/dist/lib/explorer-entity-data-grid.component.js.map +1 -1
  13. package/dist/lib/field/form-field.component.d.ts +268 -0
  14. package/dist/lib/field/form-field.component.d.ts.map +1 -0
  15. package/dist/lib/field/form-field.component.js +1194 -0
  16. package/dist/lib/field/form-field.component.js.map +1 -0
  17. package/dist/lib/form-state.interface.d.ts +2 -0
  18. package/dist/lib/form-state.interface.d.ts.map +1 -1
  19. package/dist/lib/form-state.interface.js.map +1 -1
  20. package/dist/lib/form-state.service.d.ts +14 -0
  21. package/dist/lib/form-state.service.d.ts.map +1 -1
  22. package/dist/lib/form-state.service.js +19 -0
  23. package/dist/lib/form-state.service.js.map +1 -1
  24. package/dist/lib/panel/collapsible-panel.component.d.ts +139 -0
  25. package/dist/lib/panel/collapsible-panel.component.d.ts.map +1 -0
  26. package/dist/lib/panel/collapsible-panel.component.js +468 -0
  27. package/dist/lib/panel/collapsible-panel.component.js.map +1 -0
  28. package/dist/lib/toolbar/form-toolbar.component.d.ts +170 -0
  29. package/dist/lib/toolbar/form-toolbar.component.d.ts.map +1 -0
  30. package/dist/lib/toolbar/form-toolbar.component.js +830 -0
  31. package/dist/lib/toolbar/form-toolbar.component.js.map +1 -0
  32. package/dist/lib/types/form-events.d.ts +90 -0
  33. package/dist/lib/types/form-events.d.ts.map +1 -0
  34. package/dist/lib/types/form-events.js +45 -0
  35. package/dist/lib/types/form-events.js.map +1 -0
  36. package/dist/lib/types/form-types.d.ts +150 -0
  37. package/dist/lib/types/form-types.d.ts.map +1 -0
  38. package/dist/lib/types/form-types.js +12 -0
  39. package/dist/lib/types/form-types.js.map +1 -0
  40. package/dist/lib/types/navigation-events.d.ts +88 -0
  41. package/dist/lib/types/navigation-events.d.ts.map +1 -0
  42. package/dist/lib/types/navigation-events.js +2 -0
  43. package/dist/lib/types/navigation-events.js.map +1 -0
  44. package/dist/lib/types/toolbar-config.d.ts +66 -0
  45. package/dist/lib/types/toolbar-config.d.ts.map +1 -0
  46. package/dist/lib/types/toolbar-config.js +38 -0
  47. package/dist/lib/types/toolbar-config.js.map +1 -0
  48. package/dist/module.d.ts +28 -20
  49. package/dist/module.d.ts.map +1 -1
  50. package/dist/module.js +47 -74
  51. package/dist/module.js.map +1 -1
  52. package/dist/public-api.d.ts +20 -8
  53. package/dist/public-api.d.ts.map +1 -1
  54. package/dist/public-api.js +24 -9
  55. package/dist/public-api.js.map +1 -1
  56. package/package.json +20 -23
  57. package/README.md +0 -449
  58. package/dist/lib/base-field-component.d.ts +0 -152
  59. package/dist/lib/base-field-component.d.ts.map +0 -1
  60. package/dist/lib/base-field-component.js +0 -669
  61. package/dist/lib/base-field-component.js.map +0 -1
  62. package/dist/lib/base-form-context.d.ts +0 -23
  63. package/dist/lib/base-form-context.d.ts.map +0 -1
  64. package/dist/lib/base-form-context.js +0 -10
  65. package/dist/lib/base-form-context.js.map +0 -1
  66. package/dist/lib/collapsible-panel.component.d.ts +0 -68
  67. package/dist/lib/collapsible-panel.component.d.ts.map +0 -1
  68. package/dist/lib/collapsible-panel.component.js +0 -330
  69. package/dist/lib/collapsible-panel.component.js.map +0 -1
  70. package/dist/lib/form-section-controls.component.d.ts +0 -35
  71. package/dist/lib/form-section-controls.component.d.ts.map +0 -1
  72. package/dist/lib/form-section-controls.component.js +0 -273
  73. package/dist/lib/form-section-controls.component.js.map +0 -1
  74. package/dist/lib/link-field.component.d.ts +0 -62
  75. package/dist/lib/link-field.component.d.ts.map +0 -1
  76. package/dist/lib/link-field.component.js +0 -392
  77. package/dist/lib/link-field.component.js.map +0 -1
@@ -0,0 +1,534 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, inject, ContentChildren, ViewEncapsulation } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { DEFAULT_TOOLBAR_CONFIG } from '../types/toolbar-config';
5
+ import { MjCollapsiblePanelComponent } from '../panel/collapsible-panel.component';
6
+ import { BeforeHistoryViewEventArgs, BeforeListManagementEventArgs } from '../types/form-events';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@memberjunction/ng-record-changes";
9
+ import * as i2 from "@memberjunction/ng-list-management";
10
+ import * as i3 from "../toolbar/form-toolbar.component";
11
+ const _c0 = [[["", "before-toolbar", ""]], [["", "before-panels", ""]], [["", "field-panels", ""]], [["", "after-panels", ""]], "*"];
12
+ const _c1 = ["[before-toolbar]", "[before-panels]", "[field-panels]", "[after-panels]", "*"];
13
+ const _c2 = a0 => [a0];
14
+ const _c3 = (a0, a1, a2) => ({ mode: "manage", entityId: a0, entityName: a1, recordIds: a2, allowCreate: true });
15
+ function MjRecordFormContainerComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
16
+ const _r1 = i0.ɵɵgetCurrentView();
17
+ i0.ɵɵelementStart(0, "div", 5)(1, "div", 9);
18
+ i0.ɵɵelement(2, "i", 10);
19
+ i0.ɵɵelementEnd();
20
+ i0.ɵɵelementStart(3, "h3", 11);
21
+ i0.ɵɵtext(4, "No sections found");
22
+ i0.ɵɵelementEnd();
23
+ i0.ɵɵelementStart(5, "p", 12);
24
+ i0.ɵɵtext(6, " No sections match \"");
25
+ i0.ɵɵelementStart(7, "strong");
26
+ i0.ɵɵtext(8);
27
+ i0.ɵɵelementEnd();
28
+ i0.ɵɵtext(9, "\". ");
29
+ i0.ɵɵelement(10, "br");
30
+ i0.ɵɵtext(11, "Try a different search term or ");
31
+ i0.ɵɵelementStart(12, "a", 13);
32
+ i0.ɵɵlistener("click", function MjRecordFormContainerComponent_Conditional_8_Template_a_click_12_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.OnFilterChange(""); return i0.ɵɵresetView($event.preventDefault()); });
33
+ i0.ɵɵtext(13, "clear the search");
34
+ i0.ɵɵelementEnd();
35
+ i0.ɵɵtext(14, ". ");
36
+ i0.ɵɵelementEnd()();
37
+ } if (rf & 2) {
38
+ const ctx_r1 = i0.ɵɵnextContext();
39
+ i0.ɵɵadvance(8);
40
+ i0.ɵɵtextInterpolate(ctx_r1.EffectiveSearchFilter);
41
+ } }
42
+ function MjRecordFormContainerComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
43
+ const _r3 = i0.ɵɵgetCurrentView();
44
+ i0.ɵɵelementStart(0, "mj-record-changes", 14);
45
+ i0.ɵɵlistener("dialogClosed", function MjRecordFormContainerComponent_Conditional_12_Template_mj_record_changes_dialogClosed_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRecordChangesClosed()); });
46
+ i0.ɵɵelementEnd();
47
+ } if (rf & 2) {
48
+ const ctx_r1 = i0.ɵɵnextContext();
49
+ i0.ɵɵproperty("record", ctx_r1.EffectiveRecord);
50
+ } }
51
+ function MjRecordFormContainerComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
52
+ const _r4 = i0.ɵɵgetCurrentView();
53
+ i0.ɵɵelementStart(0, "mj-list-management-dialog", 15);
54
+ i0.ɵɵlistener("complete", function MjRecordFormContainerComponent_Conditional_13_Template_mj_list_management_dialog_complete_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementClosed()); })("cancel", function MjRecordFormContainerComponent_Conditional_13_Template_mj_list_management_dialog_cancel_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementClosed()); });
55
+ i0.ɵɵelementEnd();
56
+ } if (rf & 2) {
57
+ const ctx_r1 = i0.ɵɵnextContext();
58
+ i0.ɵɵproperty("visible", ctx_r1.ShowListManagement)("config", i0.ɵɵpureFunction3(4, _c3, ctx_r1.EffectiveRecord.EntityInfo.ID, ctx_r1.EffectiveRecord.EntityInfo.Name, i0.ɵɵpureFunction1(2, _c2, ctx_r1.EffectiveRecord.PrimaryKey.Values()[0])));
59
+ } }
60
+ /**
61
+ * Top-level container that composes the toolbar, content slots, and sticky behavior.
62
+ *
63
+ * **Two usage modes:**
64
+ *
65
+ * 1. **With FormComponent** (generated forms): Pass `[FormComponent]="this"` and the
66
+ * container derives all state from the BaseFormComponent instance. Save/Cancel/Edit
67
+ * are handled internally by calling FormComponent methods.
68
+ *
69
+ * 2. **Standalone**: Pass individual @Input properties and handle all @Output events.
70
+ *
71
+ * @example Generated form usage:
72
+ * ```html
73
+ * <mj-record-form-container [Record]="record" [FormComponent]="this"
74
+ * (Navigate)="OnFormNavigate($event)"
75
+ * (DeleteRequested)="OnDeleteRequested()"
76
+ * (FavoriteToggled)="OnFavoriteToggled()"
77
+ * (HistoryRequested)="OnHistoryRequested()"
78
+ * (ListManagementRequested)="OnListManagementRequested()">
79
+ *
80
+ * <mj-collapsible-panel field-panels ...>
81
+ * <mj-form-field ...></mj-form-field>
82
+ * </mj-collapsible-panel>
83
+ *
84
+ * <mj-collapsible-panel after-panels ...>
85
+ * <!-- related entity grid -->
86
+ * </mj-collapsible-panel>
87
+ * </mj-record-form-container>
88
+ * ```
89
+ */
90
+ export class MjRecordFormContainerComponent {
91
+ cdr = inject(ChangeDetectorRef);
92
+ destroy$ = new Subject();
93
+ panelNavReset$ = new Subject();
94
+ // ---- Internal State ----
95
+ /** Controls visibility of record changes drawer */
96
+ ShowRecordChanges = false;
97
+ /** Controls visibility of list management dialog */
98
+ ShowListManagement = false;
99
+ // ---- Primary Inputs ----
100
+ /** The entity record being displayed/edited */
101
+ Record;
102
+ /**
103
+ * Reference to the parent form component (e.g. BaseFormComponent subclass).
104
+ * When provided, the container derives toolbar state from this reference and
105
+ * handles Save/Cancel/Edit internally by calling its methods.
106
+ */
107
+ FormComponent = null;
108
+ // ---- Fallback Inputs (used when FormComponent is NOT provided) ----
109
+ EntityInfo = null;
110
+ EditMode = false;
111
+ UserCanEdit = false;
112
+ UserCanDelete = false;
113
+ IsFavorite = false;
114
+ FavoriteInitDone = false;
115
+ IsDirty = false;
116
+ DirtyFieldNames = [];
117
+ ListCount = 0;
118
+ IsSaving = false;
119
+ ToolbarConfig = DEFAULT_TOOLBAR_CONFIG;
120
+ WidthMode = 'centered';
121
+ // ---- Outputs ----
122
+ /** Emitted for all navigation actions (the host app maps these to its routing) */
123
+ Navigate = new EventEmitter();
124
+ /** Emitted when edit mode changes (only in standalone mode; FormComponent mode handled internally) */
125
+ EditModeChange = new EventEmitter();
126
+ /** Emitted BEFORE save - can be cancelled by setting event.Cancel = true */
127
+ BeforeSave = new EventEmitter();
128
+ /** Emitted when save is requested (only in standalone mode) */
129
+ SaveRequested = new EventEmitter();
130
+ /** Emitted BEFORE cancel - can be cancelled by setting event.Cancel = true */
131
+ BeforeCancel = new EventEmitter();
132
+ /** Emitted when cancel is requested (only in standalone mode) */
133
+ CancelRequested = new EventEmitter();
134
+ /** Emitted BEFORE delete - can be cancelled by setting event.Cancel = true */
135
+ BeforeDelete = new EventEmitter();
136
+ /** Emitted when delete is confirmed (host app handles actual deletion) */
137
+ DeleteRequested = new EventEmitter();
138
+ /** Emitted when favorite toggle is requested */
139
+ FavoriteToggled = new EventEmitter();
140
+ /** Emitted BEFORE history view - can be cancelled by setting event.Cancel = true */
141
+ BeforeHistoryView = new EventEmitter();
142
+ /** Emitted when history view is requested */
143
+ HistoryRequested = new EventEmitter();
144
+ /** Emitted BEFORE list management - can be cancelled by setting event.Cancel = true */
145
+ BeforeListManagement = new EventEmitter();
146
+ /** Emitted when list management is requested */
147
+ ListManagementRequested = new EventEmitter();
148
+ /** Emitted when show-changes is requested */
149
+ ShowChangesRequested = new EventEmitter();
150
+ /** Emitted when a custom toolbar button is clicked */
151
+ CustomButtonClick = new EventEmitter();
152
+ // ---- Content Children ----
153
+ Panels;
154
+ // ---- FormComponent accessor ----
155
+ /** Typed accessor for the form component reference */
156
+ get fc() {
157
+ return this.FormComponent;
158
+ }
159
+ // ---- Effective state (bridges FormComponent → toolbar inputs) ----
160
+ get EffectiveRecord() {
161
+ return this.fc?.record ?? this.Record;
162
+ }
163
+ get EffectiveEditMode() {
164
+ return this.fc?.EditMode ?? this.EditMode;
165
+ }
166
+ get EffectiveUserCanEdit() {
167
+ return this.fc?.UserCanEdit ?? this.UserCanEdit;
168
+ }
169
+ get EffectiveUserCanDelete() {
170
+ return this.fc?.UserCanDelete ?? this.UserCanDelete;
171
+ }
172
+ get EffectiveIsFavorite() {
173
+ return this.fc?.IsFavorite ?? this.IsFavorite;
174
+ }
175
+ get EffectiveFavoriteInitDone() {
176
+ return this.fc?.FavoriteInitDone ?? this.FavoriteInitDone;
177
+ }
178
+ get EffectiveEntityInfo() {
179
+ return this.fc?.EntityInfo ?? this.EntityInfo;
180
+ }
181
+ get EffectiveIsDirty() {
182
+ if (this.fc) {
183
+ return this.fc.record?.Dirty ?? false;
184
+ }
185
+ return this.IsDirty;
186
+ }
187
+ get EffectiveDirtyFieldNames() {
188
+ if (this.fc?.record?.Fields) {
189
+ return this.fc.record.Fields.filter(f => f.Dirty).map(f => f.Name);
190
+ }
191
+ return this.DirtyFieldNames;
192
+ }
193
+ get EffectiveIsSaving() {
194
+ return this.IsSaving;
195
+ }
196
+ get EffectiveWidthMode() {
197
+ if (this.fc?.getFormWidthMode) {
198
+ return this.fc.getFormWidthMode();
199
+ }
200
+ return this.WidthMode;
201
+ }
202
+ get EffectiveSearchFilter() {
203
+ return this.fc?.searchFilter ?? '';
204
+ }
205
+ get EffectiveShowEmptyFields() {
206
+ return this.fc?.showEmptyFields ?? false;
207
+ }
208
+ get EffectiveHasCustomSectionOrder() {
209
+ if (this.fc?.hasCustomSectionOrder) {
210
+ return this.fc.hasCustomSectionOrder();
211
+ }
212
+ return false;
213
+ }
214
+ // ---- Section counts ----
215
+ get TotalSectionCount() {
216
+ if (this.fc?.getTotalSectionCount) {
217
+ return this.fc.getTotalSectionCount();
218
+ }
219
+ return this.Panels?.length ?? 0;
220
+ }
221
+ get VisibleSectionCount() {
222
+ if (this.fc?.getVisibleSectionCount) {
223
+ return this.fc.getVisibleSectionCount();
224
+ }
225
+ if (!this.Panels)
226
+ return 0;
227
+ return this.Panels.filter(p => p.IsVisible).length;
228
+ }
229
+ get ExpandedSectionCount() {
230
+ if (this.fc?.getExpandedCount) {
231
+ return this.fc.getExpandedCount();
232
+ }
233
+ if (!this.Panels)
234
+ return 0;
235
+ return this.Panels.filter(p => p.Expanded && p.IsVisible).length;
236
+ }
237
+ // ---- Lifecycle ----
238
+ ngAfterContentInit() {
239
+ // Subscribe to panel Navigate events and relay them
240
+ this.SubscribeToPanelNavigateEvents();
241
+ // Watch for panel changes to update counts and re-subscribe
242
+ this.Panels.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {
243
+ this.SubscribeToPanelNavigateEvents();
244
+ this.cdr.markForCheck();
245
+ });
246
+ // Watch for changes to record dirty state
247
+ this.watchRecordChanges();
248
+ }
249
+ ngOnDestroy() {
250
+ this.panelNavReset$.next();
251
+ this.panelNavReset$.complete();
252
+ this.destroy$.next();
253
+ this.destroy$.complete();
254
+ }
255
+ /**
256
+ * Subscribes to Navigate events from all child collapsible panels
257
+ * and relays them through this container's Navigate output.
258
+ */
259
+ SubscribeToPanelNavigateEvents() {
260
+ this.panelNavReset$.next(); // tear down previous subscriptions
261
+ this.Panels.forEach(panel => {
262
+ panel.Navigate.pipe(takeUntil(this.panelNavReset$)).subscribe((event) => {
263
+ this.Navigate.emit(event);
264
+ });
265
+ });
266
+ }
267
+ /**
268
+ * Monitor record dirty state changes and trigger change detection.
269
+ * This ensures the edit banner updates when fields are modified.
270
+ */
271
+ watchRecordChanges() {
272
+ // Poll for dirty state changes (BaseEntity doesn't expose observables)
273
+ const checkInterval = setInterval(() => {
274
+ if (this.EffectiveRecord?.Dirty !== undefined) {
275
+ this.cdr.markForCheck();
276
+ }
277
+ }, 200);
278
+ // Cleanup on destroy
279
+ this.destroy$.subscribe(() => clearInterval(checkInterval));
280
+ }
281
+ // ---- Toolbar Event Handlers ----
282
+ /**
283
+ * Navigation events are always re-emitted for the host app to handle.
284
+ */
285
+ OnNavigate(event) {
286
+ this.Navigate.emit(event);
287
+ }
288
+ /**
289
+ * Edit mode change: delegate to FormComponent if available, otherwise re-emit.
290
+ */
291
+ OnEditModeChange(editMode) {
292
+ if (this.fc) {
293
+ if (editMode) {
294
+ this.fc.StartEditMode();
295
+ }
296
+ else {
297
+ this.fc.EndEditMode();
298
+ }
299
+ this.cdr.markForCheck();
300
+ }
301
+ else {
302
+ this.EditModeChange.emit(editMode);
303
+ }
304
+ }
305
+ /**
306
+ * Save: delegate to FormComponent if available, otherwise re-emit.
307
+ */
308
+ async OnSaveRequested() {
309
+ if (this.fc?.SaveRecord) {
310
+ // Mark as saving to prevent double-click
311
+ this.IsSaving = true;
312
+ this.cdr.markForCheck();
313
+ try {
314
+ await this.fc.SaveRecord(true);
315
+ }
316
+ finally {
317
+ // Use microtask timing to avoid ExpressionChangedAfterItHasBeenCheckedError
318
+ await Promise.resolve();
319
+ this.IsSaving = false;
320
+ this.cdr.markForCheck();
321
+ }
322
+ }
323
+ else {
324
+ this.SaveRequested.emit();
325
+ }
326
+ }
327
+ /**
328
+ * Cancel: delegate to FormComponent if available, otherwise re-emit.
329
+ */
330
+ OnCancelRequested() {
331
+ if (this.fc?.CancelEdit) {
332
+ this.fc.CancelEdit();
333
+ this.cdr.markForCheck();
334
+ }
335
+ else {
336
+ this.CancelRequested.emit();
337
+ }
338
+ }
339
+ /**
340
+ * Delete, Favorite, History, Lists, ShowChanges: always re-emit for host app.
341
+ */
342
+ OnDeleteRequested() {
343
+ this.DeleteRequested.emit();
344
+ }
345
+ OnFavoriteToggled() {
346
+ this.FavoriteToggled.emit();
347
+ }
348
+ OnHistoryRequested() {
349
+ // Check if event should be cancelled
350
+ const beforeEvent = new BeforeHistoryViewEventArgs();
351
+ this.BeforeHistoryView.emit(beforeEvent);
352
+ if (beforeEvent.Cancel)
353
+ return;
354
+ // If not cancelled, show built-in record changes drawer
355
+ this.ShowRecordChanges = true;
356
+ this.cdr.markForCheck();
357
+ // Also emit for backward compatibility
358
+ this.HistoryRequested.emit();
359
+ }
360
+ OnListManagementRequested() {
361
+ // Check if event should be cancelled
362
+ const beforeEvent = new BeforeListManagementEventArgs();
363
+ this.BeforeListManagement.emit(beforeEvent);
364
+ if (beforeEvent.Cancel)
365
+ return;
366
+ // If not cancelled, show built-in list management dialog
367
+ this.ShowListManagement = true;
368
+ this.cdr.markForCheck();
369
+ // Also emit for backward compatibility
370
+ this.ListManagementRequested.emit();
371
+ }
372
+ OnRecordChangesClosed() {
373
+ this.ShowRecordChanges = false;
374
+ this.cdr.markForCheck();
375
+ }
376
+ OnListManagementClosed() {
377
+ this.ShowListManagement = false;
378
+ this.cdr.markForCheck();
379
+ }
380
+ OnShowChangesRequested() {
381
+ if (this.fc?.ShowChanges) {
382
+ this.fc.ShowChanges();
383
+ }
384
+ else {
385
+ this.ShowChangesRequested.emit();
386
+ }
387
+ }
388
+ // ---- Section Control Handlers ----
389
+ OnFilterChange(filter) {
390
+ if (this.fc?.onFilterChange) {
391
+ this.fc.onFilterChange(filter);
392
+ this.cdr.markForCheck();
393
+ }
394
+ }
395
+ OnExpandAll() {
396
+ if (this.fc?.expandAllSections) {
397
+ this.fc.expandAllSections();
398
+ this.cdr.markForCheck();
399
+ }
400
+ }
401
+ OnCollapseAll() {
402
+ if (this.fc?.collapseAllSections) {
403
+ this.fc.collapseAllSections();
404
+ this.cdr.markForCheck();
405
+ }
406
+ }
407
+ OnShowEmptyFieldsChange(show) {
408
+ if (this.fc) {
409
+ this.fc.showEmptyFields = show;
410
+ this.cdr.markForCheck();
411
+ }
412
+ }
413
+ OnWidthModeChange(mode) {
414
+ if (this.fc?.setFormWidthMode) {
415
+ this.fc.setFormWidthMode(mode);
416
+ this.cdr.markForCheck();
417
+ }
418
+ else {
419
+ this.WidthMode = mode;
420
+ this.cdr.markForCheck();
421
+ }
422
+ }
423
+ OnResetSectionOrder() {
424
+ if (this.fc?.resetSectionOrder) {
425
+ this.fc.resetSectionOrder();
426
+ this.cdr.markForCheck();
427
+ }
428
+ }
429
+ static ɵfac = function MjRecordFormContainerComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MjRecordFormContainerComponent)(); };
430
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MjRecordFormContainerComponent, selectors: [["mj-record-form-container"]], contentQueries: function MjRecordFormContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
431
+ i0.ɵɵcontentQuery(dirIndex, MjCollapsiblePanelComponent, 5);
432
+ } if (rf & 2) {
433
+ let _t;
434
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.Panels = _t);
435
+ } }, inputs: { Record: "Record", FormComponent: "FormComponent", EntityInfo: "EntityInfo", EditMode: "EditMode", UserCanEdit: "UserCanEdit", UserCanDelete: "UserCanDelete", IsFavorite: "IsFavorite", FavoriteInitDone: "FavoriteInitDone", IsDirty: "IsDirty", DirtyFieldNames: "DirtyFieldNames", ListCount: "ListCount", IsSaving: "IsSaving", ToolbarConfig: "ToolbarConfig", WidthMode: "WidthMode" }, outputs: { Navigate: "Navigate", EditModeChange: "EditModeChange", BeforeSave: "BeforeSave", SaveRequested: "SaveRequested", BeforeCancel: "BeforeCancel", CancelRequested: "CancelRequested", BeforeDelete: "BeforeDelete", DeleteRequested: "DeleteRequested", FavoriteToggled: "FavoriteToggled", BeforeHistoryView: "BeforeHistoryView", HistoryRequested: "HistoryRequested", BeforeListManagement: "BeforeListManagement", ListManagementRequested: "ListManagementRequested", ShowChangesRequested: "ShowChangesRequested", CustomButtonClick: "CustomButtonClick" }, standalone: false, ngContentSelectors: _c1, decls: 14, vars: 26, consts: [[3, "Navigate", "EditModeChange", "BeforeSave", "SaveRequested", "BeforeCancel", "CancelRequested", "BeforeDelete", "DeleteRequested", "FavoriteToggled", "BeforeHistoryView", "HistoryRequested", "BeforeListManagement", "ListManagementRequested", "ShowChangesRequested", "CustomButtonClick", "FilterChange", "ExpandAllRequested", "CollapseAllRequested", "ShowEmptyFieldsChange", "WidthModeChange", "ResetSectionOrderRequested", "Record", "EditMode", "UserCanEdit", "UserCanDelete", "IsFavorite", "FavoriteInitDone", "IsDirty", "DirtyFieldNames", "ListCount", "EntityInfo", "Config", "IsSaving", "VisibleSectionCount", "TotalSectionCount", "ExpandedSectionCount", "SearchFilter", "ShowEmptyFields", "WidthMode", "HasCustomSectionOrder"], [1, "mj-forms-scroll-area"], [1, "mj-forms-panels-container"], [1, "mj-before-panels"], [1, "mj-forms-field-panels"], [1, "mj-forms-empty-search-state"], [1, "mj-after-panels"], [3, "record"], [3, "visible", "config"], [1, "mj-forms-empty-search-icon"], [1, "fa-solid", "fa-magnifying-glass"], [1, "mj-forms-empty-search-title"], [1, "mj-forms-empty-search-message"], ["href", "#", 1, "mj-forms-empty-search-link", 3, "click"], [3, "dialogClosed", "record"], [3, "complete", "cancel", "visible", "config"]], template: function MjRecordFormContainerComponent_Template(rf, ctx) { if (rf & 1) {
436
+ i0.ɵɵprojectionDef(_c0);
437
+ i0.ɵɵprojection(0);
438
+ i0.ɵɵelementStart(1, "mj-form-toolbar", 0);
439
+ i0.ɵɵlistener("Navigate", function MjRecordFormContainerComponent_Template_mj_form_toolbar_Navigate_1_listener($event) { return ctx.OnNavigate($event); })("EditModeChange", function MjRecordFormContainerComponent_Template_mj_form_toolbar_EditModeChange_1_listener($event) { return ctx.OnEditModeChange($event); })("BeforeSave", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeSave_1_listener($event) { return ctx.BeforeSave.emit($event); })("SaveRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_SaveRequested_1_listener() { return ctx.OnSaveRequested(); })("BeforeCancel", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeCancel_1_listener($event) { return ctx.BeforeCancel.emit($event); })("CancelRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_CancelRequested_1_listener() { return ctx.OnCancelRequested(); })("BeforeDelete", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeDelete_1_listener($event) { return ctx.BeforeDelete.emit($event); })("DeleteRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_DeleteRequested_1_listener() { return ctx.OnDeleteRequested(); })("FavoriteToggled", function MjRecordFormContainerComponent_Template_mj_form_toolbar_FavoriteToggled_1_listener() { return ctx.OnFavoriteToggled(); })("BeforeHistoryView", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeHistoryView_1_listener($event) { return ctx.BeforeHistoryView.emit($event); })("HistoryRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_HistoryRequested_1_listener() { return ctx.OnHistoryRequested(); })("BeforeListManagement", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeListManagement_1_listener($event) { return ctx.BeforeListManagement.emit($event); })("ListManagementRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ListManagementRequested_1_listener() { return ctx.OnListManagementRequested(); })("ShowChangesRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ShowChangesRequested_1_listener() { return ctx.OnShowChangesRequested(); })("CustomButtonClick", function MjRecordFormContainerComponent_Template_mj_form_toolbar_CustomButtonClick_1_listener($event) { return ctx.CustomButtonClick.emit($event); })("FilterChange", function MjRecordFormContainerComponent_Template_mj_form_toolbar_FilterChange_1_listener($event) { return ctx.OnFilterChange($event); })("ExpandAllRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ExpandAllRequested_1_listener() { return ctx.OnExpandAll(); })("CollapseAllRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_CollapseAllRequested_1_listener() { return ctx.OnCollapseAll(); })("ShowEmptyFieldsChange", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ShowEmptyFieldsChange_1_listener($event) { return ctx.OnShowEmptyFieldsChange($event); })("WidthModeChange", function MjRecordFormContainerComponent_Template_mj_form_toolbar_WidthModeChange_1_listener($event) { return ctx.OnWidthModeChange($event); })("ResetSectionOrderRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ResetSectionOrderRequested_1_listener() { return ctx.OnResetSectionOrder(); });
440
+ i0.ɵɵelementEnd();
441
+ i0.ɵɵelementStart(2, "div", 1)(3, "div", 2)(4, "div", 3);
442
+ i0.ɵɵprojection(5, 1);
443
+ i0.ɵɵelementEnd();
444
+ i0.ɵɵelementStart(6, "div", 4);
445
+ i0.ɵɵprojection(7, 2);
446
+ i0.ɵɵconditionalCreate(8, MjRecordFormContainerComponent_Conditional_8_Template, 15, 1, "div", 5);
447
+ i0.ɵɵelementEnd();
448
+ i0.ɵɵelementStart(9, "div", 6);
449
+ i0.ɵɵprojection(10, 3);
450
+ i0.ɵɵelementEnd();
451
+ i0.ɵɵprojection(11, 4);
452
+ i0.ɵɵelementEnd()();
453
+ i0.ɵɵconditionalCreate(12, MjRecordFormContainerComponent_Conditional_12_Template, 1, 1, "mj-record-changes", 7);
454
+ i0.ɵɵconditionalCreate(13, MjRecordFormContainerComponent_Conditional_13_Template, 1, 8, "mj-list-management-dialog", 8);
455
+ } if (rf & 2) {
456
+ i0.ɵɵadvance();
457
+ i0.ɵɵproperty("Record", ctx.EffectiveRecord)("EditMode", ctx.EffectiveEditMode)("UserCanEdit", ctx.EffectiveUserCanEdit)("UserCanDelete", ctx.EffectiveUserCanDelete)("IsFavorite", ctx.EffectiveIsFavorite)("FavoriteInitDone", ctx.EffectiveFavoriteInitDone)("IsDirty", ctx.EffectiveIsDirty)("DirtyFieldNames", ctx.EffectiveDirtyFieldNames)("ListCount", ctx.ListCount)("EntityInfo", ctx.EffectiveEntityInfo)("Config", ctx.ToolbarConfig)("IsSaving", ctx.EffectiveIsSaving)("VisibleSectionCount", ctx.VisibleSectionCount)("TotalSectionCount", ctx.TotalSectionCount)("ExpandedSectionCount", ctx.ExpandedSectionCount)("SearchFilter", ctx.EffectiveSearchFilter)("ShowEmptyFields", ctx.EffectiveShowEmptyFields)("WidthMode", ctx.EffectiveWidthMode)("HasCustomSectionOrder", ctx.EffectiveHasCustomSectionOrder);
458
+ i0.ɵɵadvance(2);
459
+ i0.ɵɵclassProp("mj-forms-panels--full-width", ctx.EffectiveWidthMode === "full-width")("mj-forms-panels--edit-mode", ctx.EffectiveEditMode);
460
+ i0.ɵɵadvance(5);
461
+ i0.ɵɵconditional(ctx.EffectiveSearchFilter && ctx.VisibleSectionCount === 0 ? 8 : -1);
462
+ i0.ɵɵadvance(4);
463
+ i0.ɵɵconditional(ctx.ShowRecordChanges && ctx.EffectiveRecord ? 12 : -1);
464
+ i0.ɵɵadvance();
465
+ i0.ɵɵconditional(ctx.ShowListManagement && ctx.EffectiveRecord ? 13 : -1);
466
+ } }, dependencies: [i1.RecordChangesComponent, i2.ListManagementDialogComponent, i3.MjFormToolbarComponent], styles: ["/* ============================================\n RECORD FORM CONTAINER\n Top-level wrapper: toolbar + scrollable content\n ============================================ */\nmj-record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n position: relative;\n overflow: hidden;\n}\n\n/* ViewEncapsulation.None fallback \u2014 ensure the element itself constrains overflow */\nmj-record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n position: relative;\n overflow: hidden;\n}\n\n/* ============================================\n SCROLL AREA (full-width so mouse wheel works anywhere)\n ============================================ */\n.mj-forms-scroll-area {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n background: #eef0f3;\n}\n\n/* ============================================\n PANELS CONTAINER (centered content within scroll area)\n ============================================ */\n.mj-forms-panels-container {\n padding: 24px 32px 48px;\n max-width: 920px;\n margin: 0 auto;\n width: 100%;\n box-sizing: border-box;\n}\n\n.mj-forms-panels--full-width {\n max-width: none;\n padding-left: 24px;\n padding-right: 24px;\n}\n\n/* Field panels area - vertical flex with gap between sections */\n.mj-forms-field-panels {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* After panels area - typically related entity grids */\n.mj-after-panels {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 24px;\n}\n\n/* Only show margin-top when after-panels has content */\n.mj-after-panels:empty {\n margin-top: 0;\n}\n\n/* Hide related entity panels in edit mode */\n.mj-forms-panels--edit-mode .mj-before-panels,\n.mj-forms-panels--edit-mode .mj-after-panels {\n display: none;\n}\n\n/* ============================================\n EMPTY SEARCH STATE\n ============================================ */\n.mj-forms-empty-search-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n min-height: 400px;\n}\n\n.mj-forms-empty-search-icon {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 24px;\n}\n\n.mj-forms-empty-search-icon i {\n font-size: 32px;\n color: #9ca3af;\n}\n\n.mj-forms-empty-search-title {\n font-size: 20px;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 12px 0;\n}\n\n.mj-forms-empty-search-message {\n font-size: 14px;\n color: #6b7280;\n line-height: 1.6;\n max-width: 400px;\n margin: 0;\n}\n\n.mj-forms-empty-search-message strong {\n color: #374151;\n font-weight: 600;\n}\n\n.mj-forms-empty-search-link {\n color: #667eea;\n text-decoration: none;\n font-weight: 500;\n}\n\n.mj-forms-empty-search-link:hover {\n text-decoration: underline;\n}\n\n/* ============================================\n RESPONSIVE\n ============================================ */\n@media (max-width: 768px) {\n .mj-forms-panels-container {\n padding: 16px 12px 32px;\n }\n}\n"], encapsulation: 2, changeDetection: 0 });
467
+ }
468
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MjRecordFormContainerComponent, [{
469
+ type: Component,
470
+ args: [{ standalone: false, selector: 'mj-record-form-container', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- ============================================\n BEFORE-TOOLBAR SLOT\n ============================================ -->\n<ng-content select=\"[before-toolbar]\"></ng-content>\n\n<!-- ============================================\n TOOLBAR (bridges FormComponent state \u2192 toolbar inputs)\n ============================================ -->\n<mj-form-toolbar\n [Record]=\"EffectiveRecord\"\n [EditMode]=\"EffectiveEditMode\"\n [UserCanEdit]=\"EffectiveUserCanEdit\"\n [UserCanDelete]=\"EffectiveUserCanDelete\"\n [IsFavorite]=\"EffectiveIsFavorite\"\n [FavoriteInitDone]=\"EffectiveFavoriteInitDone\"\n [IsDirty]=\"EffectiveIsDirty\"\n [DirtyFieldNames]=\"EffectiveDirtyFieldNames\"\n [ListCount]=\"ListCount\"\n [EntityInfo]=\"EffectiveEntityInfo\"\n [Config]=\"ToolbarConfig\"\n [IsSaving]=\"EffectiveIsSaving\"\n [VisibleSectionCount]=\"VisibleSectionCount\"\n [TotalSectionCount]=\"TotalSectionCount\"\n [ExpandedSectionCount]=\"ExpandedSectionCount\"\n [SearchFilter]=\"EffectiveSearchFilter\"\n [ShowEmptyFields]=\"EffectiveShowEmptyFields\"\n [WidthMode]=\"EffectiveWidthMode\"\n [HasCustomSectionOrder]=\"EffectiveHasCustomSectionOrder\"\n (Navigate)=\"OnNavigate($event)\"\n (EditModeChange)=\"OnEditModeChange($event)\"\n (BeforeSave)=\"BeforeSave.emit($event)\"\n (SaveRequested)=\"OnSaveRequested()\"\n (BeforeCancel)=\"BeforeCancel.emit($event)\"\n (CancelRequested)=\"OnCancelRequested()\"\n (BeforeDelete)=\"BeforeDelete.emit($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (BeforeHistoryView)=\"BeforeHistoryView.emit($event)\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (BeforeListManagement)=\"BeforeListManagement.emit($event)\"\n (ListManagementRequested)=\"OnListManagementRequested()\"\n (ShowChangesRequested)=\"OnShowChangesRequested()\"\n (CustomButtonClick)=\"CustomButtonClick.emit($event)\"\n (FilterChange)=\"OnFilterChange($event)\"\n (ExpandAllRequested)=\"OnExpandAll()\"\n (CollapseAllRequested)=\"OnCollapseAll()\"\n (ShowEmptyFieldsChange)=\"OnShowEmptyFieldsChange($event)\"\n (WidthModeChange)=\"OnWidthModeChange($event)\"\n (ResetSectionOrderRequested)=\"OnResetSectionOrder()\">\n</mj-form-toolbar>\n\n<!-- ============================================\n SCROLL AREA (full-width so mouse wheel works anywhere)\n ============================================ -->\n<div class=\"mj-forms-scroll-area\">\n <div class=\"mj-forms-panels-container\"\n [class.mj-forms-panels--full-width]=\"EffectiveWidthMode === 'full-width'\"\n [class.mj-forms-panels--edit-mode]=\"EffectiveEditMode\">\n <!-- Before-panels slot (related entities displayed before fields) -->\n <div class=\"mj-before-panels\">\n <ng-content select=\"[before-panels]\"></ng-content>\n </div>\n\n <!-- Field panels slot -->\n <div class=\"mj-forms-field-panels\">\n <ng-content select=\"[field-panels]\"></ng-content>\n\n <!-- Empty state when no sections match search -->\n @if (EffectiveSearchFilter && VisibleSectionCount === 0) {\n <div class=\"mj-forms-empty-search-state\">\n <div class=\"mj-forms-empty-search-icon\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n </div>\n <h3 class=\"mj-forms-empty-search-title\">No sections found</h3>\n <p class=\"mj-forms-empty-search-message\">\n No sections match \"<strong>{{ EffectiveSearchFilter }}</strong>\".\n <br>Try a different search term or <a href=\"#\" (click)=\"OnFilterChange(''); $event.preventDefault()\" class=\"mj-forms-empty-search-link\">clear the search</a>.\n </p>\n </div>\n }\n </div>\n\n <!-- After-panels slot (related entities displayed after fields) -->\n <div class=\"mj-after-panels\">\n <ng-content select=\"[after-panels]\"></ng-content>\n </div>\n\n <!-- Catch-all for any other projected content -->\n <ng-content></ng-content>\n </div>\n</div>\n\n<!-- ============================================\n RECORD CHANGES DRAWER (shown when history button clicked)\n ============================================ -->\n@if (ShowRecordChanges && EffectiveRecord) {\n <mj-record-changes\n [record]=\"EffectiveRecord\"\n (dialogClosed)=\"OnRecordChangesClosed()\">\n </mj-record-changes>\n}\n\n<!-- ============================================\n LIST MANAGEMENT DIALOG (shown when lists button clicked)\n ============================================ -->\n@if (ShowListManagement && EffectiveRecord) {\n <mj-list-management-dialog\n [visible]=\"ShowListManagement\"\n [config]=\"{\n mode: 'manage',\n entityId: EffectiveRecord.EntityInfo.ID,\n entityName: EffectiveRecord.EntityInfo.Name,\n recordIds: [EffectiveRecord.PrimaryKey.Values()[0]],\n allowCreate: true\n }\"\n (complete)=\"OnListManagementClosed()\"\n (cancel)=\"OnListManagementClosed()\">\n </mj-list-management-dialog>\n}\n", styles: ["/* ============================================\n RECORD FORM CONTAINER\n Top-level wrapper: toolbar + scrollable content\n ============================================ */\nmj-record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n position: relative;\n overflow: hidden;\n}\n\n/* ViewEncapsulation.None fallback \u2014 ensure the element itself constrains overflow */\nmj-record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n position: relative;\n overflow: hidden;\n}\n\n/* ============================================\n SCROLL AREA (full-width so mouse wheel works anywhere)\n ============================================ */\n.mj-forms-scroll-area {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n background: #eef0f3;\n}\n\n/* ============================================\n PANELS CONTAINER (centered content within scroll area)\n ============================================ */\n.mj-forms-panels-container {\n padding: 24px 32px 48px;\n max-width: 920px;\n margin: 0 auto;\n width: 100%;\n box-sizing: border-box;\n}\n\n.mj-forms-panels--full-width {\n max-width: none;\n padding-left: 24px;\n padding-right: 24px;\n}\n\n/* Field panels area - vertical flex with gap between sections */\n.mj-forms-field-panels {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* After panels area - typically related entity grids */\n.mj-after-panels {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 24px;\n}\n\n/* Only show margin-top when after-panels has content */\n.mj-after-panels:empty {\n margin-top: 0;\n}\n\n/* Hide related entity panels in edit mode */\n.mj-forms-panels--edit-mode .mj-before-panels,\n.mj-forms-panels--edit-mode .mj-after-panels {\n display: none;\n}\n\n/* ============================================\n EMPTY SEARCH STATE\n ============================================ */\n.mj-forms-empty-search-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n min-height: 400px;\n}\n\n.mj-forms-empty-search-icon {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 24px;\n}\n\n.mj-forms-empty-search-icon i {\n font-size: 32px;\n color: #9ca3af;\n}\n\n.mj-forms-empty-search-title {\n font-size: 20px;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 12px 0;\n}\n\n.mj-forms-empty-search-message {\n font-size: 14px;\n color: #6b7280;\n line-height: 1.6;\n max-width: 400px;\n margin: 0;\n}\n\n.mj-forms-empty-search-message strong {\n color: #374151;\n font-weight: 600;\n}\n\n.mj-forms-empty-search-link {\n color: #667eea;\n text-decoration: none;\n font-weight: 500;\n}\n\n.mj-forms-empty-search-link:hover {\n text-decoration: underline;\n}\n\n/* ============================================\n RESPONSIVE\n ============================================ */\n@media (max-width: 768px) {\n .mj-forms-panels-container {\n padding: 16px 12px 32px;\n }\n}\n"] }]
471
+ }], null, { Record: [{
472
+ type: Input
473
+ }], FormComponent: [{
474
+ type: Input
475
+ }], EntityInfo: [{
476
+ type: Input
477
+ }], EditMode: [{
478
+ type: Input
479
+ }], UserCanEdit: [{
480
+ type: Input
481
+ }], UserCanDelete: [{
482
+ type: Input
483
+ }], IsFavorite: [{
484
+ type: Input
485
+ }], FavoriteInitDone: [{
486
+ type: Input
487
+ }], IsDirty: [{
488
+ type: Input
489
+ }], DirtyFieldNames: [{
490
+ type: Input
491
+ }], ListCount: [{
492
+ type: Input
493
+ }], IsSaving: [{
494
+ type: Input
495
+ }], ToolbarConfig: [{
496
+ type: Input
497
+ }], WidthMode: [{
498
+ type: Input
499
+ }], Navigate: [{
500
+ type: Output
501
+ }], EditModeChange: [{
502
+ type: Output
503
+ }], BeforeSave: [{
504
+ type: Output
505
+ }], SaveRequested: [{
506
+ type: Output
507
+ }], BeforeCancel: [{
508
+ type: Output
509
+ }], CancelRequested: [{
510
+ type: Output
511
+ }], BeforeDelete: [{
512
+ type: Output
513
+ }], DeleteRequested: [{
514
+ type: Output
515
+ }], FavoriteToggled: [{
516
+ type: Output
517
+ }], BeforeHistoryView: [{
518
+ type: Output
519
+ }], HistoryRequested: [{
520
+ type: Output
521
+ }], BeforeListManagement: [{
522
+ type: Output
523
+ }], ListManagementRequested: [{
524
+ type: Output
525
+ }], ShowChangesRequested: [{
526
+ type: Output
527
+ }], CustomButtonClick: [{
528
+ type: Output
529
+ }], Panels: [{
530
+ type: ContentChildren,
531
+ args: [MjCollapsiblePanelComponent, { descendants: true }]
532
+ }] }); })();
533
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MjRecordFormContainerComponent, { className: "MjRecordFormContainerComponent", filePath: "src/lib/container/record-form-container.component.ts", lineNumber: 62 }); })();
534
+ //# sourceMappingURL=record-form-container.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-form-container.component.js","sourceRoot":"","sources":["../../../src/lib/container/record-form-container.component.ts","../../../src/lib/container/record-form-container.component.html"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { RunViewParams } from '@memberjunction/core';
3
3
  import { EntityDataGridComponent, AfterRowDoubleClickEventArgs, AfterRowClickEventArgs, AfterDataLoadEventArgs, GridToolbarConfig, GridSelectionMode } from '@memberjunction/ng-entity-viewer';
4
+ import { FormNavigationEvent } from './types/navigation-events';
4
5
  import * as i0 from "@angular/core";
5
6
  /**
6
- * MJ Explorer wrapper for EntityDataGridComponent that provides Explorer-specific
7
- * navigation behavior. Double-clicking a row opens the record in a new tab using
8
- * SharedService.OpenEntityRecord.
7
+ * Wrapper for EntityDataGridComponent that emits navigation events on row double-click.
8
+ * The host application subscribes to Navigate events and maps them to its routing system.
9
9
  *
10
10
  * This component is used by CodeGen for related entity grids in forms.
11
11
  */
@@ -19,17 +19,19 @@ export declare class ExplorerEntityDataGridComponent {
19
19
  ToolbarConfig: GridToolbarConfig;
20
20
  SelectionMode: GridSelectionMode;
21
21
  /**
22
- * When true, double-clicking a row opens the record in MJ Explorer.
22
+ * When true, double-clicking a row emits a Navigate event.
23
23
  * Defaults to true.
24
24
  */
25
25
  NavigateOnDoubleClick: boolean;
26
26
  AfterRowDoubleClick: EventEmitter<AfterRowDoubleClickEventArgs>;
27
27
  AfterRowClick: EventEmitter<AfterRowClickEventArgs>;
28
28
  AfterDataLoad: EventEmitter<AfterDataLoadEventArgs>;
29
+ /** Emitted when a row is double-clicked and NavigateOnDoubleClick is true */
30
+ Navigate: EventEmitter<FormNavigationEvent>;
29
31
  onRowDoubleClick(event: AfterRowDoubleClickEventArgs): void;
30
32
  onRowClick(event: AfterRowClickEventArgs): void;
31
33
  onDataLoad(event: AfterDataLoadEventArgs): void;
32
34
  static ɵfac: i0.ɵɵFactoryDeclaration<ExplorerEntityDataGridComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<ExplorerEntityDataGridComponent, "mj-explorer-entity-data-grid", never, { "Params": { "alias": "Params"; "required": false; }; "NewRecordValues": { "alias": "NewRecordValues"; "required": false; }; "AllowLoad": { "alias": "AllowLoad"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; "Height": { "alias": "Height"; "required": false; }; "ToolbarConfig": { "alias": "ToolbarConfig"; "required": false; }; "SelectionMode": { "alias": "SelectionMode"; "required": false; }; "NavigateOnDoubleClick": { "alias": "NavigateOnDoubleClick"; "required": false; }; }, { "AfterRowDoubleClick": "AfterRowDoubleClick"; "AfterRowClick": "AfterRowClick"; "AfterDataLoad": "AfterDataLoad"; }, never, never, false, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<ExplorerEntityDataGridComponent, "mj-explorer-entity-data-grid", never, { "Params": { "alias": "Params"; "required": false; }; "NewRecordValues": { "alias": "NewRecordValues"; "required": false; }; "AllowLoad": { "alias": "AllowLoad"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; "Height": { "alias": "Height"; "required": false; }; "ToolbarConfig": { "alias": "ToolbarConfig"; "required": false; }; "SelectionMode": { "alias": "SelectionMode"; "required": false; }; "NavigateOnDoubleClick": { "alias": "NavigateOnDoubleClick"; "required": false; }; }, { "AfterRowDoubleClick": "AfterRowDoubleClick"; "AfterRowClick": "AfterRowClick"; "AfterDataLoad": "AfterDataLoad"; "Navigate": "Navigate"; }, never, never, false, never>;
34
36
  }
35
37
  //# sourceMappingURL=explorer-entity-data-grid.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"explorer-entity-data-grid.component.d.ts","sourceRoot":"","sources":["../../src/lib/explorer-entity-data-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACH,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACpB,MAAM,kCAAkC,CAAC;;AAE1C;;;;;;GAMG;AACH,qBA0Ba,+BAA+B;IAChB,SAAS,EAAG,uBAAuB,CAAC;IAGnD,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC9C,SAAS,EAAE,OAAO,CAAQ;IAC1B,WAAW,EAAE,OAAO,CAAQ;IAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAU;IACjD,aAAa,EAAE,iBAAiB,CAAM;IACtC,aAAa,EAAE,iBAAiB,CAAY;IAErD;;;OAGG;IACM,qBAAqB,EAAE,OAAO,CAAQ;IAGrC,mBAAmB,6CAAoD;IACvE,aAAa,uCAA8C;IAC3D,aAAa,uCAA8C;IAErE,gBAAgB,CAAC,KAAK,EAAE,4BAA4B,GAAG,IAAI;IAe3D,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAK/C,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;yCA3CtC,+BAA+B;2CAA/B,+BAA+B;CA+C3C"}
1
+ {"version":3,"file":"explorer-entity-data-grid.component.d.ts","sourceRoot":"","sources":["../../src/lib/explorer-entity-data-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,aAAa,EAAgB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACH,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;;AAEhE;;;;;GAKG;AACH,qBA0Ba,+BAA+B;IAChB,SAAS,EAAG,uBAAuB,CAAC;IAGnD,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC9C,SAAS,EAAE,OAAO,CAAQ;IAC1B,WAAW,EAAE,OAAO,CAAQ;IAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAU;IACjD,aAAa,EAAE,iBAAiB,CAAM;IACtC,aAAa,EAAE,iBAAiB,CAAY;IAErD;;;OAGG;IACM,qBAAqB,EAAE,OAAO,CAAQ;IAGrC,mBAAmB,6CAAoD;IACvE,aAAa,uCAA8C;IAC3D,aAAa,uCAA8C;IAErE,6EAA6E;IACnE,QAAQ,oCAA2C;IAE7D,gBAAgB,CAAC,KAAK,EAAE,4BAA4B,GAAG,IAAI;IAmB3D,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAK/C,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;yCAlDtC,+BAA+B;2CAA/B,+BAA+B;CAsD3C"}