@memberjunction/ng-base-forms 6.1.0-edge.2 → 6.1.0-edge.3

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 (125) hide show
  1. package/LICENSE +180 -4
  2. package/README.md +4 -1
  3. package/dist/lib/base-form-component.d.ts +93 -3
  4. package/dist/lib/base-form-component.d.ts.map +1 -1
  5. package/dist/lib/base-form-component.js +240 -9
  6. package/dist/lib/base-form-component.js.map +1 -1
  7. package/dist/lib/chrome/base-form-policy.d.ts +26 -0
  8. package/dist/lib/chrome/base-form-policy.d.ts.map +1 -0
  9. package/dist/lib/chrome/base-form-policy.js +9 -0
  10. package/dist/lib/chrome/base-form-policy.js.map +1 -0
  11. package/dist/lib/chrome/clipped-title.d.ts +8 -0
  12. package/dist/lib/chrome/clipped-title.d.ts.map +1 -0
  13. package/dist/lib/chrome/clipped-title.js +18 -0
  14. package/dist/lib/chrome/clipped-title.js.map +1 -0
  15. package/dist/lib/chrome/form-chrome-coordinator.service.d.ts +35 -0
  16. package/dist/lib/chrome/form-chrome-coordinator.service.d.ts.map +1 -0
  17. package/dist/lib/chrome/form-chrome-coordinator.service.js +96 -0
  18. package/dist/lib/chrome/form-chrome-coordinator.service.js.map +1 -0
  19. package/dist/lib/chrome/form-chrome-rail-pref.d.ts +24 -0
  20. package/dist/lib/chrome/form-chrome-rail-pref.d.ts.map +1 -0
  21. package/dist/lib/chrome/form-chrome-rail-pref.js +52 -0
  22. package/dist/lib/chrome/form-chrome-rail-pref.js.map +1 -0
  23. package/dist/lib/chrome/form-chrome.d.ts +59 -0
  24. package/dist/lib/chrome/form-chrome.d.ts.map +1 -0
  25. package/dist/lib/chrome/form-chrome.js +37 -0
  26. package/dist/lib/chrome/form-chrome.js.map +1 -0
  27. package/dist/lib/chrome/load-form-chrome-rules.d.ts +8 -0
  28. package/dist/lib/chrome/load-form-chrome-rules.d.ts.map +1 -0
  29. package/dist/lib/chrome/load-form-chrome-rules.js +70 -0
  30. package/dist/lib/chrome/load-form-chrome-rules.js.map +1 -0
  31. package/dist/lib/chrome/resolve-form-chrome.d.ts +114 -0
  32. package/dist/lib/chrome/resolve-form-chrome.d.ts.map +1 -0
  33. package/dist/lib/chrome/resolve-form-chrome.js +713 -0
  34. package/dist/lib/chrome/resolve-form-chrome.js.map +1 -0
  35. package/dist/lib/container/record-form-container.component.d.ts +170 -6
  36. package/dist/lib/container/record-form-container.component.d.ts.map +1 -1
  37. package/dist/lib/container/record-form-container.component.js +1194 -62
  38. package/dist/lib/container/record-form-container.component.js.map +1 -1
  39. package/dist/lib/explorer-entity-data-grid.component.d.ts +54 -1
  40. package/dist/lib/explorer-entity-data-grid.component.d.ts.map +1 -1
  41. package/dist/lib/explorer-entity-data-grid.component.js +143 -7
  42. package/dist/lib/explorer-entity-data-grid.component.js.map +1 -1
  43. package/dist/lib/form-record-refresh.coordinator.d.ts +27 -0
  44. package/dist/lib/form-record-refresh.coordinator.d.ts.map +1 -0
  45. package/dist/lib/form-record-refresh.coordinator.js +33 -0
  46. package/dist/lib/form-record-refresh.coordinator.js.map +1 -0
  47. package/dist/lib/form-state.interface.d.ts +4 -0
  48. package/dist/lib/form-state.interface.d.ts.map +1 -1
  49. package/dist/lib/form-state.interface.js.map +1 -1
  50. package/dist/lib/form-state.service.d.ts +5 -0
  51. package/dist/lib/form-state.service.d.ts.map +1 -1
  52. package/dist/lib/form-state.service.js +23 -2
  53. package/dist/lib/form-state.service.js.map +1 -1
  54. package/dist/lib/host/entity-form-host.component.d.ts +5 -1
  55. package/dist/lib/host/entity-form-host.component.d.ts.map +1 -1
  56. package/dist/lib/host/entity-form-host.component.js +16 -2
  57. package/dist/lib/host/entity-form-host.component.js.map +1 -1
  58. package/dist/lib/isa-related-panel/isa-related-panel.component.d.ts +6 -2
  59. package/dist/lib/isa-related-panel/isa-related-panel.component.d.ts.map +1 -1
  60. package/dist/lib/isa-related-panel/isa-related-panel.component.js +15 -1
  61. package/dist/lib/isa-related-panel/isa-related-panel.component.js.map +1 -1
  62. package/dist/lib/panel/collapsible-panel.component.d.ts +24 -2
  63. package/dist/lib/panel/collapsible-panel.component.d.ts.map +1 -1
  64. package/dist/lib/panel/collapsible-panel.component.js +104 -10
  65. package/dist/lib/panel/collapsible-panel.component.js.map +1 -1
  66. package/dist/lib/panel-slot/base-form-panel.d.ts +85 -1
  67. package/dist/lib/panel-slot/base-form-panel.d.ts.map +1 -1
  68. package/dist/lib/panel-slot/base-form-panel.js +72 -3
  69. package/dist/lib/panel-slot/base-form-panel.js.map +1 -1
  70. package/dist/lib/panel-slot/collect-form-panel-registrations.d.ts +8 -0
  71. package/dist/lib/panel-slot/collect-form-panel-registrations.d.ts.map +1 -0
  72. package/dist/lib/panel-slot/collect-form-panel-registrations.js +19 -0
  73. package/dist/lib/panel-slot/collect-form-panel-registrations.js.map +1 -0
  74. package/dist/lib/panel-slot/form-contribution.d.ts +79 -0
  75. package/dist/lib/panel-slot/form-contribution.d.ts.map +1 -0
  76. package/dist/lib/panel-slot/form-contribution.js +253 -0
  77. package/dist/lib/panel-slot/form-contribution.js.map +1 -0
  78. package/dist/lib/panel-slot/form-contributions.component.d.ts +27 -0
  79. package/dist/lib/panel-slot/form-contributions.component.d.ts.map +1 -0
  80. package/dist/lib/panel-slot/form-contributions.component.js +83 -0
  81. package/dist/lib/panel-slot/form-contributions.component.js.map +1 -0
  82. package/dist/lib/panel-slot/form-panel-slot.component.d.ts +2 -0
  83. package/dist/lib/panel-slot/form-panel-slot.component.d.ts.map +1 -1
  84. package/dist/lib/panel-slot/form-panel-slot.component.js +35 -4
  85. package/dist/lib/panel-slot/form-panel-slot.component.js.map +1 -1
  86. package/dist/lib/panel-slot/related-entity-grid-panel.component.d.ts +22 -0
  87. package/dist/lib/panel-slot/related-entity-grid-panel.component.d.ts.map +1 -0
  88. package/dist/lib/panel-slot/related-entity-grid-panel.component.js +78 -0
  89. package/dist/lib/panel-slot/related-entity-grid-panel.component.js.map +1 -0
  90. package/dist/lib/related-grid-height.d.ts +20 -0
  91. package/dist/lib/related-grid-height.d.ts.map +1 -0
  92. package/dist/lib/related-grid-height.js +30 -0
  93. package/dist/lib/related-grid-height.js.map +1 -0
  94. package/dist/lib/section-manager/section-manager.component.d.ts +20 -1
  95. package/dist/lib/section-manager/section-manager.component.d.ts.map +1 -1
  96. package/dist/lib/section-manager/section-manager.component.js +204 -25
  97. package/dist/lib/section-manager/section-manager.component.js.map +1 -1
  98. package/dist/lib/toolbar/form-toolbar.component.d.ts +55 -4
  99. package/dist/lib/toolbar/form-toolbar.component.d.ts.map +1 -1
  100. package/dist/lib/toolbar/form-toolbar.component.js +734 -306
  101. package/dist/lib/toolbar/form-toolbar.component.js.map +1 -1
  102. package/dist/lib/types/form-events.d.ts +35 -0
  103. package/dist/lib/types/form-events.d.ts.map +1 -1
  104. package/dist/lib/types/form-events.js +45 -0
  105. package/dist/lib/types/form-events.js.map +1 -1
  106. package/dist/lib/types/form-toolbar-item.d.ts +145 -0
  107. package/dist/lib/types/form-toolbar-item.d.ts.map +1 -0
  108. package/dist/lib/types/form-toolbar-item.js +2 -0
  109. package/dist/lib/types/form-toolbar-item.js.map +1 -0
  110. package/dist/lib/types/form-types.d.ts +8 -0
  111. package/dist/lib/types/form-types.d.ts.map +1 -1
  112. package/dist/lib/types/form-types.js.map +1 -1
  113. package/dist/lib/types/toolbar-config.d.ts +7 -2
  114. package/dist/lib/types/toolbar-config.d.ts.map +1 -1
  115. package/dist/lib/types/toolbar-config.js +6 -0
  116. package/dist/lib/types/toolbar-config.js.map +1 -1
  117. package/dist/module.d.ts +17 -14
  118. package/dist/module.d.ts.map +1 -1
  119. package/dist/module.js +14 -0
  120. package/dist/module.js.map +1 -1
  121. package/dist/public-api.d.ts +13 -0
  122. package/dist/public-api.d.ts.map +1 -1
  123. package/dist/public-api.js +14 -0
  124. package/dist/public-api.js.map +1 -1
  125. package/package.json +19 -18
@@ -1,9 +1,13 @@
1
1
  import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, inject } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
2
4
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
5
  import { UUIDsEqual } from '@memberjunction/global';
4
6
  import { DEFAULT_TOOLBAR_CONFIG } from '../types/toolbar-config';
7
+ import { IsAccordionFormChrome } from '../chrome/form-chrome';
5
8
  import { DiscoverISADescendants, BuildDescendantTree } from '../isa-related-panel/isa-hierarchy-utils';
6
- import { BeforeSaveEventArgs, BeforeDeleteEventArgs, BeforeCancelEventArgs, BeforeHistoryViewEventArgs, BeforeListManagementEventArgs } from '../types/form-events';
9
+ import { FormRecordRefreshCoordinator } from '../form-record-refresh.coordinator';
10
+ import { BeforeSaveEventArgs, BeforeDeleteEventArgs, BeforeRefreshEventArgs, BeforeCancelEventArgs, BeforeHistoryViewEventArgs, BeforeListManagementEventArgs } from '../types/form-events';
7
11
  import * as i0 from "@angular/core";
8
12
  import * as i1 from "@angular/common";
9
13
  const _c0 = [[["", "toolbar-additional-controls", ""]]];
@@ -13,8 +17,8 @@ const _forTrack0 = ($index, $item) => $item.Key;
13
17
  const _forTrack1 = ($index, $item) => $item.ID;
14
18
  const _forTrack2 = ($index, $item) => $item.EntityName;
15
19
  function MjFormToolbarComponent_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelement(0, "i", 11);
17
- i0.ɵɵelementStart(1, "span", 12)(2, "strong");
20
+ i0.ɵɵelement(0, "i", 12);
21
+ i0.ɵɵelementStart(1, "span", 13)(2, "strong");
18
22
  i0.ɵɵtext(3);
19
23
  i0.ɵɵelementEnd();
20
24
  i0.ɵɵtext(4);
@@ -27,8 +31,8 @@ function MjFormToolbarComponent_Conditional_0_Conditional_1_Template(rf, ctx) {
27
31
  i0.ɵɵtextInterpolate2(" field", ctx_r1.DirtyFieldDisplayNames.length === 1 ? "" : "s", " modified \u2014 ", ctx_r1.DirtyFieldDisplayNames.join(", "), " ");
28
32
  } }
29
33
  function MjFormToolbarComponent_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelement(0, "i", 13);
31
- i0.ɵɵelementStart(1, "span", 14);
34
+ i0.ɵɵelement(0, "i", 14);
35
+ i0.ɵɵelementStart(1, "span", 15);
32
36
  i0.ɵɵtext(2);
33
37
  i0.ɵɵelementEnd();
34
38
  } if (rf & 2) {
@@ -36,176 +40,217 @@ function MjFormToolbarComponent_Conditional_0_Conditional_2_Template(rf, ctx) {
36
40
  i0.ɵɵadvance(2);
37
41
  i0.ɵɵtextInterpolate1("Editing: ", ctx_r1.RecordDisplayName);
38
42
  } }
39
- function MjFormToolbarComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
40
- const _r1 = i0.ɵɵgetCurrentView();
41
- i0.ɵɵelementStart(0, "div", 1);
42
- i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_0_Conditional_1_Template, 5, 3)(2, MjFormToolbarComponent_Conditional_0_Conditional_2_Template, 3, 1);
43
- i0.ɵɵelement(3, "div", 4);
44
- i0.ɵɵelementStart(4, "div", 5)(5, "button", 6);
45
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_0_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSave()); });
46
- i0.ɵɵelement(6, "i", 7);
47
- i0.ɵɵelementStart(7, "span", 8);
48
- i0.ɵɵtext(8, "Save Changes");
49
- i0.ɵɵelementEnd()();
50
- i0.ɵɵelementStart(9, "button", 9);
51
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_0_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnCancel()); });
52
- i0.ɵɵelement(10, "i", 10);
53
- i0.ɵɵelementStart(11, "span", 8);
54
- i0.ɵɵtext(12, "Discard");
55
- i0.ɵɵelementEnd()()()();
56
- } if (rf & 2) {
57
- const ctx_r1 = i0.ɵɵnextContext();
58
- i0.ɵɵadvance();
59
- i0.ɵɵconditional(ctx_r1.DirtyFieldDisplayNames.length > 0 ? 1 : 2);
60
- i0.ɵɵadvance(4);
61
- i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
62
- i0.ɵɵadvance(4);
63
- i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
64
- } }
65
- function MjFormToolbarComponent_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
66
- const _r3 = i0.ɵɵgetCurrentView();
67
- i0.ɵɵelementStart(0, "button", 27);
68
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnEdit()); });
69
- i0.ɵɵelement(1, "i", 13);
70
- i0.ɵɵelementEnd();
43
+ function MjFormToolbarComponent_Conditional_0_For_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelement(0, "i", 17);
71
45
  } }
72
- function MjFormToolbarComponent_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
73
- const _r4 = i0.ɵɵgetCurrentView();
74
- i0.ɵɵelementStart(0, "button", 28);
75
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDeleteClick()); });
76
- i0.ɵɵelement(1, "i", 29);
77
- i0.ɵɵelementEnd();
46
+ function MjFormToolbarComponent_Conditional_0_For_6_Conditional_2_Template(rf, ctx) { if (rf & 1) {
47
+ i0.ɵɵelement(0, "i");
48
+ } if (rf & 2) {
49
+ const item_r4 = i0.ɵɵnextContext().$implicit;
50
+ i0.ɵɵclassMap(item_r4.Icon);
78
51
  } }
79
- function MjFormToolbarComponent_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
80
- const _r5 = i0.ɵɵgetCurrentView();
81
- i0.ɵɵelementStart(0, "button", 30);
82
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFavoriteToggle()); });
83
- i0.ɵɵelement(1, "i");
52
+ function MjFormToolbarComponent_Conditional_0_For_6_Conditional_3_Template(rf, ctx) { if (rf & 1) {
53
+ i0.ɵɵelementStart(0, "span", 9);
54
+ i0.ɵɵtext(1);
84
55
  i0.ɵɵelementEnd();
85
56
  } if (rf & 2) {
86
- const ctx_r1 = i0.ɵɵnextContext(2);
87
- i0.ɵɵproperty("title", ctx_r1.IsFavorite ? "Remove Favorite" : "Make Favorite");
57
+ const item_r4 = i0.ɵɵnextContext().$implicit;
88
58
  i0.ɵɵadvance();
89
- i0.ɵɵclassMap(ctx_r1.IsFavorite ? "fa-solid fa-star mj-icon--favorite" : "fa-regular fa-star");
59
+ i0.ɵɵtextInterpolate(item_r4.Text);
90
60
  } }
91
- function MjFormToolbarComponent_Conditional_1_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
92
- i0.ɵɵelementStart(0, "span", 33);
61
+ function MjFormToolbarComponent_Conditional_0_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
62
+ i0.ɵɵelementStart(0, "span", 19);
93
63
  i0.ɵɵtext(1);
94
64
  i0.ɵɵelementEnd();
95
65
  } if (rf & 2) {
96
- const ctx_r1 = i0.ɵɵnextContext(3);
66
+ const item_r4 = i0.ɵɵnextContext().$implicit;
97
67
  i0.ɵɵadvance();
98
- i0.ɵɵtextInterpolate1("v", ctx_r1.VersionCount);
68
+ i0.ɵɵtextInterpolate(item_r4.Badge);
99
69
  } }
100
- function MjFormToolbarComponent_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
101
- const _r6 = i0.ɵɵgetCurrentView();
102
- i0.ɵɵelementStart(0, "button", 31);
103
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnHistory()); });
104
- i0.ɵɵelement(1, "i", 32);
105
- i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_1_Conditional_5_Conditional_2_Template, 2, 1, "span", 33);
70
+ function MjFormToolbarComponent_Conditional_0_For_6_Template(rf, ctx) { if (rf & 1) {
71
+ const _r3 = i0.ɵɵgetCurrentView();
72
+ i0.ɵɵelementStart(0, "button", 16);
73
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_0_For_6_Template_button_click_0_listener($event) { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnToolbarItemClick(item_r4, $event)); });
74
+ i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_0_For_6_Conditional_1_Template, 1, 0, "i", 17)(2, MjFormToolbarComponent_Conditional_0_For_6_Conditional_2_Template, 1, 2, "i", 18);
75
+ i0.ɵɵconditionalCreate(3, MjFormToolbarComponent_Conditional_0_For_6_Conditional_3_Template, 2, 1, "span", 9);
76
+ i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_Conditional_0_For_6_Conditional_4_Template, 2, 1, "span", 19);
106
77
  i0.ɵɵelementEnd();
107
78
  } if (rf & 2) {
79
+ const item_r4 = ctx.$implicit;
108
80
  const ctx_r1 = i0.ɵɵnextContext(2);
109
- i0.ɵɵproperty("title", ctx_r1.VersionCount > 0 ? ctx_r1.VersionCount + " version(s) tracked" : "Record Changes");
81
+ i0.ɵɵclassMap(item_r4.CssClass);
82
+ i0.ɵɵclassProp("mj-forms-btn--primary", item_r4.Variant === "primary")("mj-forms-btn--secondary", item_r4.Variant === "secondary")("mj-forms-btn--accent", item_r4.Variant === "accent")("mj-forms-btn--danger", item_r4.Variant === "danger")("mj-forms-btn--ghost", item_r4.Variant === "ghost");
83
+ i0.ɵɵproperty("disabled", item_r4.Disabled || item_r4.IsLoading || ctx_r1.IsSaving)("title", item_r4.Description);
84
+ i0.ɵɵadvance();
85
+ i0.ɵɵconditional(item_r4.IsLoading ? 1 : item_r4.Icon ? 2 : -1);
110
86
  i0.ɵɵadvance(2);
111
- i0.ɵɵconditional(ctx_r1.VersionCount > 0 ? 2 : -1);
87
+ i0.ɵɵconditional(item_r4.Text ? 3 : -1);
88
+ i0.ɵɵadvance();
89
+ i0.ɵɵconditional(item_r4.Badge != null ? 4 : -1);
90
+ } }
91
+ function MjFormToolbarComponent_Conditional_0_For_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
92
+ i0.ɵɵelement(0, "i", 17);
93
+ } }
94
+ function MjFormToolbarComponent_Conditional_0_For_16_Conditional_2_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelement(0, "i");
96
+ } if (rf & 2) {
97
+ const item_r6 = i0.ɵɵnextContext().$implicit;
98
+ i0.ɵɵclassMap(item_r6.Icon);
112
99
  } }
113
- function MjFormToolbarComponent_Conditional_1_Conditional_6_Conditional_2_Template(rf, ctx) { if (rf & 1) {
114
- i0.ɵɵelementStart(0, "span", 36);
100
+ function MjFormToolbarComponent_Conditional_0_For_16_Conditional_3_Template(rf, ctx) { if (rf & 1) {
101
+ i0.ɵɵelementStart(0, "span", 9);
115
102
  i0.ɵɵtext(1);
116
103
  i0.ɵɵelementEnd();
117
104
  } if (rf & 2) {
118
- const ctx_r1 = i0.ɵɵnextContext(3);
105
+ const item_r6 = i0.ɵɵnextContext().$implicit;
119
106
  i0.ɵɵadvance();
120
- i0.ɵɵtextInterpolate(ctx_r1.ListCount);
107
+ i0.ɵɵtextInterpolate(item_r6.Text);
121
108
  } }
122
- function MjFormToolbarComponent_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
123
- const _r7 = i0.ɵɵgetCurrentView();
124
- i0.ɵɵelementStart(0, "button", 34);
125
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnListManagement()); });
126
- i0.ɵɵelement(1, "i", 35);
127
- i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_1_Conditional_6_Conditional_2_Template, 2, 1, "span", 36);
109
+ function MjFormToolbarComponent_Conditional_0_For_16_Conditional_4_Template(rf, ctx) { if (rf & 1) {
110
+ i0.ɵɵelementStart(0, "span", 19);
111
+ i0.ɵɵtext(1);
112
+ i0.ɵɵelementEnd();
113
+ } if (rf & 2) {
114
+ const item_r6 = i0.ɵɵnextContext().$implicit;
115
+ i0.ɵɵadvance();
116
+ i0.ɵɵtextInterpolate(item_r6.Badge);
117
+ } }
118
+ function MjFormToolbarComponent_Conditional_0_For_16_Template(rf, ctx) { if (rf & 1) {
119
+ const _r5 = i0.ɵɵgetCurrentView();
120
+ i0.ɵɵelementStart(0, "button", 16);
121
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_0_For_16_Template_button_click_0_listener($event) { const item_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnToolbarItemClick(item_r6, $event)); });
122
+ i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_0_For_16_Conditional_1_Template, 1, 0, "i", 17)(2, MjFormToolbarComponent_Conditional_0_For_16_Conditional_2_Template, 1, 2, "i", 18);
123
+ i0.ɵɵconditionalCreate(3, MjFormToolbarComponent_Conditional_0_For_16_Conditional_3_Template, 2, 1, "span", 9);
124
+ i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_Conditional_0_For_16_Conditional_4_Template, 2, 1, "span", 19);
128
125
  i0.ɵɵelementEnd();
129
126
  } if (rf & 2) {
127
+ const item_r6 = ctx.$implicit;
130
128
  const ctx_r1 = i0.ɵɵnextContext(2);
131
- i0.ɵɵproperty("title", ctx_r1.ListCount > 0 ? "Member of " + ctx_r1.ListCount + " list(s)" : "Add to a list");
129
+ i0.ɵɵclassMap(item_r6.CssClass);
130
+ i0.ɵɵclassProp("mj-forms-btn--primary", item_r6.Variant === "primary")("mj-forms-btn--secondary", item_r6.Variant === "secondary")("mj-forms-btn--accent", item_r6.Variant === "accent")("mj-forms-btn--danger", item_r6.Variant === "danger")("mj-forms-btn--ghost", item_r6.Variant === "ghost");
131
+ i0.ɵɵproperty("disabled", item_r6.Disabled || item_r6.IsLoading || ctx_r1.IsSaving)("title", item_r6.Description);
132
+ i0.ɵɵadvance();
133
+ i0.ɵɵconditional(item_r6.IsLoading ? 1 : item_r6.Icon ? 2 : -1);
132
134
  i0.ɵɵadvance(2);
133
- i0.ɵɵconditional(ctx_r1.ListCount > 0 ? 2 : -1);
135
+ i0.ɵɵconditional(item_r6.Text ? 3 : -1);
136
+ i0.ɵɵadvance();
137
+ i0.ɵɵconditional(item_r6.Badge != null ? 4 : -1);
134
138
  } }
135
- function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
136
- i0.ɵɵelementStart(0, "span", 36);
137
- i0.ɵɵtext(1);
138
- i0.ɵɵelementEnd();
139
+ function MjFormToolbarComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
140
+ const _r1 = i0.ɵɵgetCurrentView();
141
+ i0.ɵɵelementStart(0, "div", 1);
142
+ i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_0_Conditional_1_Template, 5, 3)(2, MjFormToolbarComponent_Conditional_0_Conditional_2_Template, 3, 1);
143
+ i0.ɵɵelement(3, "div", 4);
144
+ i0.ɵɵelementStart(4, "div", 5);
145
+ i0.ɵɵrepeaterCreate(5, MjFormToolbarComponent_Conditional_0_For_6_Template, 5, 17, "button", 6, _forTrack0);
146
+ i0.ɵɵelementStart(7, "button", 7);
147
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSave()); });
148
+ i0.ɵɵelement(8, "i", 8);
149
+ i0.ɵɵelementStart(9, "span", 9);
150
+ i0.ɵɵtext(10, "Save Changes");
151
+ i0.ɵɵelementEnd()();
152
+ i0.ɵɵelementStart(11, "button", 10);
153
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_0_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnCancel()); });
154
+ i0.ɵɵelement(12, "i", 11);
155
+ i0.ɵɵelementStart(13, "span", 9);
156
+ i0.ɵɵtext(14, "Discard");
157
+ i0.ɵɵelementEnd()();
158
+ i0.ɵɵrepeaterCreate(15, MjFormToolbarComponent_Conditional_0_For_16_Template, 5, 17, "button", 6, _forTrack0);
159
+ i0.ɵɵelementEnd()();
139
160
  } if (rf & 2) {
140
- const ctx_r1 = i0.ɵɵnextContext(3);
161
+ const ctx_r1 = i0.ɵɵnextContext();
141
162
  i0.ɵɵadvance();
142
- i0.ɵɵtextInterpolate(ctx_r1.TagCount);
163
+ i0.ɵɵconditional(ctx_r1.DirtyFieldDisplayNames.length > 0 ? 1 : 2);
164
+ i0.ɵɵadvance(4);
165
+ i0.ɵɵrepeater(ctx_r1.ResolvedEditBeforeSaveItems);
166
+ i0.ɵɵadvance(2);
167
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
168
+ i0.ɵɵadvance(4);
169
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
170
+ i0.ɵɵadvance(4);
171
+ i0.ɵɵrepeater(ctx_r1.ResolvedEditAfterSaveItems);
143
172
  } }
144
- function MjFormToolbarComponent_Conditional_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
145
- const _r8 = i0.ɵɵgetCurrentView();
146
- i0.ɵɵelementStart(0, "button", 30);
147
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnTagsPanel()); });
148
- i0.ɵɵelement(1, "i", 37);
149
- i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_2_Template, 2, 1, "span", 36);
173
+ function MjFormToolbarComponent_Conditional_1_For_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
174
+ i0.ɵɵelement(0, "i", 17);
175
+ } }
176
+ function MjFormToolbarComponent_Conditional_1_For_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
177
+ i0.ɵɵelement(0, "i");
178
+ } if (rf & 2) {
179
+ const item_r8 = i0.ɵɵnextContext().$implicit;
180
+ i0.ɵɵclassMap(item_r8.Icon);
181
+ } }
182
+ function MjFormToolbarComponent_Conditional_1_For_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
183
+ i0.ɵɵelementStart(0, "span", 9);
184
+ i0.ɵɵtext(1);
150
185
  i0.ɵɵelementEnd();
151
186
  } if (rf & 2) {
152
- const ctx_r1 = i0.ɵɵnextContext(2);
153
- i0.ɵɵproperty("title", ctx_r1.TagCount > 0 ? ctx_r1.TagCount + " tag(s)" : "View tags");
154
- i0.ɵɵadvance(2);
155
- i0.ɵɵconditional(ctx_r1.TagCount > 0 ? 2 : -1);
187
+ const item_r8 = i0.ɵɵnextContext().$implicit;
188
+ i0.ɵɵadvance();
189
+ i0.ɵɵtextInterpolate(item_r8.Text);
156
190
  } }
157
- function MjFormToolbarComponent_Conditional_1_For_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
158
- const _r9 = i0.ɵɵgetCurrentView();
159
- i0.ɵɵelementStart(0, "button", 39);
160
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_For_9_Conditional_0_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const button_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnCustomButtonClick(button_r10)); });
161
- i0.ɵɵelement(1, "i");
191
+ function MjFormToolbarComponent_Conditional_1_For_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
192
+ i0.ɵɵelementStart(0, "span");
193
+ i0.ɵɵtext(1);
162
194
  i0.ɵɵelementEnd();
163
195
  } if (rf & 2) {
164
- const button_r10 = i0.ɵɵnextContext().$implicit;
165
- i0.ɵɵclassMap(button_r10.CssClass || "");
166
- i0.ɵɵproperty("disabled", button_r10.Disabled || false)("title", button_r10.Description);
196
+ const item_r8 = i0.ɵɵnextContext().$implicit;
197
+ i0.ɵɵclassMap(item_r8.Key === "history" ? "mj-version-count-badge" : "mj-list-count-badge");
167
198
  i0.ɵɵadvance();
168
- i0.ɵɵclassMap(button_r10.Icon);
199
+ i0.ɵɵtextInterpolate(item_r8.Badge);
169
200
  } }
170
- function MjFormToolbarComponent_Conditional_1_For_9_Template(rf, ctx) { if (rf & 1) {
171
- i0.ɵɵconditionalCreate(0, MjFormToolbarComponent_Conditional_1_For_9_Conditional_0_Template, 2, 6, "button", 38);
201
+ function MjFormToolbarComponent_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
202
+ const _r7 = i0.ɵɵgetCurrentView();
203
+ i0.ɵɵelementStart(0, "button", 16);
204
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_For_3_Template_button_click_0_listener($event) { const item_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnToolbarItemClick(item_r8, $event)); });
205
+ i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_1_For_3_Conditional_1_Template, 1, 0, "i", 17)(2, MjFormToolbarComponent_Conditional_1_For_3_Conditional_2_Template, 1, 2, "i", 18);
206
+ i0.ɵɵconditionalCreate(3, MjFormToolbarComponent_Conditional_1_For_3_Conditional_3_Template, 2, 1, "span", 9);
207
+ i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_Conditional_1_For_3_Conditional_4_Template, 2, 3, "span", 18);
208
+ i0.ɵɵelementEnd();
172
209
  } if (rf & 2) {
173
- const button_r10 = ctx.$implicit;
174
- i0.ɵɵconditional(button_r10.Visible !== false ? 0 : -1);
210
+ const item_r8 = ctx.$implicit;
211
+ i0.ɵɵclassMap(item_r8.CssClass);
212
+ i0.ɵɵclassProp("mj-forms-btn--primary", item_r8.Variant === "primary")("mj-forms-btn--secondary", item_r8.Variant === "secondary")("mj-forms-btn--accent", item_r8.Variant === "accent")("mj-forms-btn--danger", item_r8.Variant === "danger")("mj-forms-btn--ghost", item_r8.Variant === "ghost")("mj-forms-btn--history", item_r8.Key === "history")("mj-forms-btn--list", item_r8.Key === "list")("mj-forms-btn--tags", item_r8.Key === "tags")("mj-forms-btn--attachments", item_r8.Key === "attachments");
213
+ i0.ɵɵproperty("disabled", item_r8.Disabled || item_r8.IsLoading)("title", item_r8.Description);
214
+ i0.ɵɵadvance();
215
+ i0.ɵɵconditional(item_r8.IsLoading ? 1 : item_r8.Icon ? 2 : -1);
216
+ i0.ɵɵadvance(2);
217
+ i0.ɵɵconditional(item_r8.Text ? 3 : -1);
218
+ i0.ɵɵadvance();
219
+ i0.ɵɵconditional(item_r8.Badge != null ? 4 : -1);
175
220
  } }
176
- function MjFormToolbarComponent_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
177
- i0.ɵɵelement(0, "div", 22);
221
+ function MjFormToolbarComponent_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
222
+ i0.ɵɵelement(0, "div", 23);
178
223
  } }
179
- function MjFormToolbarComponent_Conditional_1_Conditional_11_For_2_Template(rf, ctx) { if (rf & 1) {
180
- const _r11 = i0.ɵɵgetCurrentView();
181
- i0.ɵɵelementStart(0, "a", 42);
182
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_11_For_2_Template_a_click_0_listener($event) { const parent_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnParentBadgeClick(parent_r12, $event)); });
183
- i0.ɵɵelement(1, "i", 43);
224
+ function MjFormToolbarComponent_Conditional_1_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
225
+ const _r9 = i0.ɵɵgetCurrentView();
226
+ i0.ɵɵelementStart(0, "a", 30);
227
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_5_For_2_Template_a_click_0_listener($event) { const parent_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnParentBadgeClick(parent_r10, $event)); });
228
+ i0.ɵɵelement(1, "i", 31);
184
229
  i0.ɵɵtext(2);
185
230
  i0.ɵɵelementEnd();
186
- i0.ɵɵelementStart(3, "span", 44);
187
- i0.ɵɵelement(4, "i", 45);
231
+ i0.ɵɵelementStart(3, "span", 32);
232
+ i0.ɵɵelement(4, "i", 33);
188
233
  i0.ɵɵelementEnd();
189
234
  } if (rf & 2) {
190
- const parent_r12 = ctx.$implicit;
191
- i0.ɵɵproperty("title", "Navigate to parent: " + parent_r12.Name);
235
+ const parent_r10 = ctx.$implicit;
236
+ i0.ɵɵproperty("title", "Navigate to parent: " + parent_r10.Name);
192
237
  i0.ɵɵadvance(2);
193
- i0.ɵɵtextInterpolate1(" ", parent_r12.Name, " ");
238
+ i0.ɵɵtextInterpolate1(" ", parent_r10.Name, " ");
194
239
  } }
195
- function MjFormToolbarComponent_Conditional_1_Conditional_11_Conditional_5_Template(rf, ctx) { if (rf & 1) {
196
- i0.ɵɵelementContainer(0, 41);
240
+ function MjFormToolbarComponent_Conditional_1_Conditional_5_Conditional_5_Template(rf, ctx) { if (rf & 1) {
241
+ i0.ɵɵelementContainer(0, 29);
197
242
  } if (rf & 2) {
198
243
  const ctx_r1 = i0.ɵɵnextContext(3);
199
- const descendantTreeTpl_r13 = i0.ɵɵreference(5);
200
- i0.ɵɵproperty("ngTemplateOutlet", descendantTreeTpl_r13)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c2, ctx_r1.DescendantTree));
244
+ const descendantTreeTpl_r11 = i0.ɵɵreference(5);
245
+ i0.ɵɵproperty("ngTemplateOutlet", descendantTreeTpl_r11)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c2, ctx_r1.DescendantTree));
201
246
  } }
202
- function MjFormToolbarComponent_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
203
- i0.ɵɵelementStart(0, "div", 23);
204
- i0.ɵɵrepeaterCreate(1, MjFormToolbarComponent_Conditional_1_Conditional_11_For_2_Template, 5, 2, null, null, _forTrack1);
205
- i0.ɵɵelementStart(3, "span", 40);
247
+ function MjFormToolbarComponent_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
248
+ i0.ɵɵelementStart(0, "div", 24);
249
+ i0.ɵɵrepeaterCreate(1, MjFormToolbarComponent_Conditional_1_Conditional_5_For_2_Template, 5, 2, null, null, _forTrack1);
250
+ i0.ɵɵelementStart(3, "span", 28);
206
251
  i0.ɵɵtext(4);
207
252
  i0.ɵɵelementEnd();
208
- i0.ɵɵconditionalCreate(5, MjFormToolbarComponent_Conditional_1_Conditional_11_Conditional_5_Template, 1, 4, "ng-container", 41);
253
+ i0.ɵɵconditionalCreate(5, MjFormToolbarComponent_Conditional_1_Conditional_5_Conditional_5_Template, 1, 4, "ng-container", 29);
209
254
  i0.ɵɵelementEnd();
210
255
  } if (rf & 2) {
211
256
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -216,52 +261,52 @@ function MjFormToolbarComponent_Conditional_1_Conditional_11_Template(rf, ctx) {
216
261
  i0.ɵɵadvance();
217
262
  i0.ɵɵconditional(ctx_r1.DescendantTree.length > 0 ? 5 : -1);
218
263
  } }
219
- function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_Conditional_9_Template(rf, ctx) { if (rf & 1) {
220
- i0.ɵɵelement(0, "i", 58);
264
+ function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_Conditional_9_Template(rf, ctx) { if (rf & 1) {
265
+ i0.ɵɵelement(0, "i", 46);
221
266
  } }
222
- function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_For_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
223
- i0.ɵɵelement(0, "i", 58);
267
+ function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_For_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
268
+ i0.ɵɵelement(0, "i", 46);
224
269
  } }
225
- function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_For_11_Template(rf, ctx) { if (rf & 1) {
226
- const _r16 = i0.ɵɵgetCurrentView();
227
- i0.ɵɵelementStart(0, "div", 60);
228
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_For_11_Template_div_click_0_listener() { const v_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnVariantClick(v_r17.ID)); });
229
- i0.ɵɵelementStart(1, "div", 54)(2, "span", 55);
270
+ function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_For_11_Template(rf, ctx) { if (rf & 1) {
271
+ const _r14 = i0.ɵɵgetCurrentView();
272
+ i0.ɵɵelementStart(0, "div", 48);
273
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_For_11_Template_div_click_0_listener() { const v_r15 = i0.ɵɵrestoreView(_r14).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnVariantClick(v_r15.ID)); });
274
+ i0.ɵɵelementStart(1, "div", 42)(2, "span", 43);
230
275
  i0.ɵɵtext(3);
231
276
  i0.ɵɵelementEnd();
232
- i0.ɵɵelementStart(4, "span", 57);
277
+ i0.ɵɵelementStart(4, "span", 45);
233
278
  i0.ɵɵtext(5);
234
279
  i0.ɵɵelementEnd()();
235
- i0.ɵɵconditionalCreate(6, MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_For_11_Conditional_6_Template, 1, 0, "i", 58);
280
+ i0.ɵɵconditionalCreate(6, MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_For_11_Conditional_6_Template, 1, 0, "i", 46);
236
281
  i0.ɵɵelementEnd();
237
282
  } if (rf & 2) {
238
- const v_r17 = ctx.$implicit;
283
+ const v_r15 = ctx.$implicit;
239
284
  const ctx_r1 = i0.ɵɵnextContext(4);
240
- i0.ɵɵclassProp("current", v_r17.ID === ctx_r1.CurrentVariantID)("inactive", v_r17.Status !== "Active");
285
+ i0.ɵɵclassProp("current", v_r15.ID === ctx_r1.CurrentVariantID)("inactive", v_r15.Status !== "Active");
241
286
  i0.ɵɵadvance(3);
242
- i0.ɵɵtextInterpolate(v_r17.Label);
287
+ i0.ɵɵtextInterpolate(v_r15.Label);
243
288
  i0.ɵɵadvance(2);
244
- i0.ɵɵtextInterpolate(ctx_r1.VariantSubtitle(v_r17));
289
+ i0.ɵɵtextInterpolate(ctx_r1.VariantSubtitle(v_r15));
245
290
  i0.ɵɵadvance();
246
- i0.ɵɵconditional(v_r17.ID === ctx_r1.CurrentVariantID ? 6 : -1);
291
+ i0.ɵɵconditional(v_r15.ID === ctx_r1.CurrentVariantID ? 6 : -1);
247
292
  } }
248
- function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_Template(rf, ctx) { if (rf & 1) {
249
- const _r15 = i0.ɵɵgetCurrentView();
250
- i0.ɵɵelementStart(0, "div", 52);
251
- i0.ɵɵlistener("mousedown", function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r15); return i0.ɵɵresetView($event.preventDefault()); })("click", function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r15); return i0.ɵɵresetView($event.stopPropagation()); });
252
- i0.ɵɵelementStart(1, "div", 53);
253
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnVariantClick(null)); });
254
- i0.ɵɵelementStart(2, "div", 54)(3, "span", 55);
293
+ function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_Template(rf, ctx) { if (rf & 1) {
294
+ const _r13 = i0.ɵɵgetCurrentView();
295
+ i0.ɵɵelementStart(0, "div", 40);
296
+ i0.ɵɵlistener("mousedown", function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r13); return i0.ɵɵresetView($event.preventDefault()); })("click", function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r13); return i0.ɵɵresetView($event.stopPropagation()); });
297
+ i0.ɵɵelementStart(1, "div", 41);
298
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnVariantClick(null)); });
299
+ i0.ɵɵelementStart(2, "div", 42)(3, "span", 43);
255
300
  i0.ɵɵtext(4, " Default form ");
256
- i0.ɵɵelementStart(5, "span", 56);
301
+ i0.ɵɵelementStart(5, "span", 44);
257
302
  i0.ɵɵtext(6, "(default)");
258
303
  i0.ɵɵelementEnd()();
259
- i0.ɵɵelementStart(7, "span", 57);
304
+ i0.ɵɵelementStart(7, "span", 45);
260
305
  i0.ɵɵtext(8, "CodeGen-generated Angular fallback");
261
306
  i0.ɵɵelementEnd()();
262
- i0.ɵɵconditionalCreate(9, MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_Conditional_9_Template, 1, 0, "i", 58);
307
+ i0.ɵɵconditionalCreate(9, MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_Conditional_9_Template, 1, 0, "i", 46);
263
308
  i0.ɵɵelementEnd();
264
- i0.ɵɵrepeaterCreate(10, MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_For_11_Template, 7, 7, "div", 59, _forTrack1);
309
+ i0.ɵɵrepeaterCreate(10, MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_For_11_Template, 7, 7, "div", 47, _forTrack1);
265
310
  i0.ɵɵelementEnd();
266
311
  } if (rf & 2) {
267
312
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -272,17 +317,17 @@ function MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_Templ
272
317
  i0.ɵɵadvance();
273
318
  i0.ɵɵrepeater(ctx_r1.Variants);
274
319
  } }
275
- function MjFormToolbarComponent_Conditional_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
276
- const _r14 = i0.ɵɵgetCurrentView();
277
- i0.ɵɵelementStart(0, "div", 46)(1, "button", 47);
278
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_13_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleVariantMenu()); })("blur", function MjFormToolbarComponent_Conditional_1_Conditional_13_Template_button_blur_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseVariantMenu()); });
279
- i0.ɵɵelement(2, "i", 48);
280
- i0.ɵɵelementStart(3, "span", 49);
320
+ function MjFormToolbarComponent_Conditional_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
321
+ const _r12 = i0.ɵɵgetCurrentView();
322
+ i0.ɵɵelementStart(0, "div", 34)(1, "button", 35);
323
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleVariantMenu()); })("blur", function MjFormToolbarComponent_Conditional_1_Conditional_7_Template_button_blur_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseVariantMenu()); });
324
+ i0.ɵɵelement(2, "i", 36);
325
+ i0.ɵɵelementStart(3, "span", 37);
281
326
  i0.ɵɵtext(4);
282
327
  i0.ɵɵelementEnd();
283
- i0.ɵɵelement(5, "i", 50);
328
+ i0.ɵɵelement(5, "i", 38);
284
329
  i0.ɵɵelementEnd();
285
- i0.ɵɵconditionalCreate(6, MjFormToolbarComponent_Conditional_1_Conditional_13_Conditional_6_Template, 12, 3, "div", 51);
330
+ i0.ɵɵconditionalCreate(6, MjFormToolbarComponent_Conditional_1_Conditional_7_Conditional_6_Template, 12, 3, "div", 39);
286
331
  i0.ɵɵelementEnd();
287
332
  } if (rf & 2) {
288
333
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -294,19 +339,19 @@ function MjFormToolbarComponent_Conditional_1_Conditional_13_Template(rf, ctx) {
294
339
  i0.ɵɵadvance(2);
295
340
  i0.ɵɵconditional(ctx_r1.VariantMenuOpen ? 6 : -1);
296
341
  } }
297
- function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
298
- const _r19 = i0.ɵɵgetCurrentView();
299
- i0.ɵɵelementStart(0, "button", 67);
300
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnClearFilter()); });
301
- i0.ɵɵelement(1, "i", 68);
342
+ function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
343
+ const _r17 = i0.ɵɵgetCurrentView();
344
+ i0.ɵɵelementStart(0, "button", 55);
345
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnClearFilter()); });
346
+ i0.ɵɵelement(1, "i", 56);
302
347
  i0.ɵɵelementEnd();
303
348
  } }
304
- function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
305
- const _r18 = i0.ɵɵgetCurrentView();
306
- i0.ɵɵelementStart(0, "div", 61)(1, "input", 65);
307
- i0.ɵɵlistener("input", function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_1_Template_input_input_1_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnFilterInput($event)); });
349
+ function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
350
+ const _r16 = i0.ɵɵgetCurrentView();
351
+ i0.ɵɵelementStart(0, "div", 49)(1, "input", 53);
352
+ i0.ɵɵlistener("input", function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_1_Template_input_input_1_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnFilterInput($event)); });
308
353
  i0.ɵɵelementEnd();
309
- i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_1_Conditional_2_Template, 2, 0, "button", 66);
354
+ i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_1_Conditional_2_Template, 2, 0, "button", 54);
310
355
  i0.ɵɵelementEnd();
311
356
  } if (rf & 2) {
312
357
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -316,15 +361,15 @@ function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_1_Templ
316
361
  i0.ɵɵadvance();
317
362
  i0.ɵɵconditional(ctx_r1.SearchFilter ? 2 : -1);
318
363
  } }
319
- function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_2_Template(rf, ctx) { if (rf & 1) {
320
- const _r20 = i0.ɵɵgetCurrentView();
321
- i0.ɵɵelementStart(0, "button", 69);
322
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnExpandAll()); });
323
- i0.ɵɵelement(1, "i", 70);
364
+ function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_2_Template(rf, ctx) { if (rf & 1) {
365
+ const _r18 = i0.ɵɵgetCurrentView();
366
+ i0.ɵɵelementStart(0, "button", 57);
367
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnExpandAll()); });
368
+ i0.ɵɵelement(1, "i", 58);
324
369
  i0.ɵɵelementEnd();
325
- i0.ɵɵelementStart(2, "button", 71);
326
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnCollapseAll()); });
327
- i0.ɵɵelement(3, "i", 72);
370
+ i0.ɵɵelementStart(2, "button", 59);
371
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnCollapseAll()); });
372
+ i0.ɵɵelement(3, "i", 60);
328
373
  i0.ɵɵelementEnd();
329
374
  } if (rf & 2) {
330
375
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -332,24 +377,24 @@ function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_2_Templ
332
377
  i0.ɵɵadvance(2);
333
378
  i0.ɵɵproperty("disabled", ctx_r1.ExpandedSectionCount === 0);
334
379
  } }
335
- function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_3_Template(rf, ctx) { if (rf & 1) {
336
- const _r21 = i0.ɵɵgetCurrentView();
337
- i0.ɵɵelementStart(0, "button", 73);
338
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnResetSectionOrder()); });
339
- i0.ɵɵelement(1, "i", 74);
380
+ function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
381
+ const _r19 = i0.ɵɵgetCurrentView();
382
+ i0.ɵɵelementStart(0, "button", 61);
383
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnResetSectionOrder()); });
384
+ i0.ɵɵelement(1, "i", 62);
340
385
  i0.ɵɵelementEnd();
341
386
  } }
342
- function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_4_Template(rf, ctx) { if (rf & 1) {
343
- const _r22 = i0.ɵɵgetCurrentView();
344
- i0.ɵɵelementStart(0, "button", 75);
345
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnManageSections()); });
346
- i0.ɵɵelement(1, "i", 76);
387
+ function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_4_Template(rf, ctx) { if (rf & 1) {
388
+ const _r20 = i0.ɵɵgetCurrentView();
389
+ i0.ɵɵelementStart(0, "button", 63);
390
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnManageSections()); });
391
+ i0.ɵɵelement(1, "i", 64);
347
392
  i0.ɵɵelementEnd();
348
393
  } }
349
- function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_5_Template(rf, ctx) { if (rf & 1) {
350
- const _r23 = i0.ɵɵgetCurrentView();
351
- i0.ɵɵelementStart(0, "button", 77);
352
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnToggleWidthMode()); });
394
+ function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_5_Template(rf, ctx) { if (rf & 1) {
395
+ const _r21 = i0.ɵɵgetCurrentView();
396
+ i0.ɵɵelementStart(0, "button", 65);
397
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnToggleWidthMode()); });
353
398
  i0.ɵɵelement(1, "i");
354
399
  i0.ɵɵelementEnd();
355
400
  } if (rf & 2) {
@@ -358,20 +403,20 @@ function MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_5_Templ
358
403
  i0.ɵɵadvance();
359
404
  i0.ɵɵclassMap(ctx_r1.WidthMode === "centered" ? "fa-solid fa-arrows-left-right-to-line" : "fa-solid fa-compress");
360
405
  } }
361
- function MjFormToolbarComponent_Conditional_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
362
- i0.ɵɵelementStart(0, "div", 25);
363
- i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_1_Template, 3, 4, "div", 61);
364
- i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_2_Template, 4, 2);
365
- i0.ɵɵconditionalCreate(3, MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_3_Template, 2, 0, "button", 62);
366
- i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_4_Template, 2, 0, "button", 63);
367
- i0.ɵɵconditionalCreate(5, MjFormToolbarComponent_Conditional_1_Conditional_14_Conditional_5_Template, 2, 3, "button", 64);
406
+ function MjFormToolbarComponent_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
407
+ i0.ɵɵelementStart(0, "div", 26);
408
+ i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_1_Template, 3, 4, "div", 49);
409
+ i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_2_Template, 4, 2);
410
+ i0.ɵɵconditionalCreate(3, MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_3_Template, 2, 0, "button", 50);
411
+ i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_4_Template, 2, 0, "button", 51);
412
+ i0.ɵɵconditionalCreate(5, MjFormToolbarComponent_Conditional_1_Conditional_8_Conditional_5_Template, 2, 3, "button", 52);
368
413
  i0.ɵɵelementEnd();
369
414
  } if (rf & 2) {
370
415
  const ctx_r1 = i0.ɵɵnextContext(2);
371
416
  i0.ɵɵadvance();
372
417
  i0.ɵɵconditional(ctx_r1.Config.ShowSectionFilter ? 1 : -1);
373
418
  i0.ɵɵadvance();
374
- i0.ɵɵconditional(ctx_r1.Config.ShowExpandCollapseAllButtons ? 2 : -1);
419
+ i0.ɵɵconditional(ctx_r1.ShowExpandCollapseAll ? 2 : -1);
375
420
  i0.ɵɵadvance();
376
421
  i0.ɵɵconditional(ctx_r1.HasCustomSectionOrder ? 3 : -1);
377
422
  i0.ɵɵadvance();
@@ -379,85 +424,67 @@ function MjFormToolbarComponent_Conditional_1_Conditional_14_Template(rf, ctx) {
379
424
  i0.ɵɵadvance();
380
425
  i0.ɵɵconditional(ctx_r1.Config.ShowWidthToggle ? 5 : -1);
381
426
  } }
382
- function MjFormToolbarComponent_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
383
- i0.ɵɵelementContainer(0, 26);
427
+ function MjFormToolbarComponent_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
428
+ i0.ɵɵelementContainer(0, 27);
384
429
  } if (rf & 2) {
385
430
  const ctx_r1 = i0.ɵɵnextContext(2);
386
431
  i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.AdditionalActionsTemplate);
387
432
  } }
388
433
  function MjFormToolbarComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
389
- i0.ɵɵelementStart(0, "div", 15)(1, "div", 16);
390
- i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_1_Conditional_2_Template, 2, 0, "button", 17);
391
- i0.ɵɵconditionalCreate(3, MjFormToolbarComponent_Conditional_1_Conditional_3_Template, 2, 0, "button", 18);
392
- i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_Conditional_1_Conditional_4_Template, 2, 3, "button", 19);
393
- i0.ɵɵconditionalCreate(5, MjFormToolbarComponent_Conditional_1_Conditional_5_Template, 3, 2, "button", 20);
394
- i0.ɵɵconditionalCreate(6, MjFormToolbarComponent_Conditional_1_Conditional_6_Template, 3, 2, "button", 21);
395
- i0.ɵɵconditionalCreate(7, MjFormToolbarComponent_Conditional_1_Conditional_7_Template, 3, 2, "button", 19);
396
- i0.ɵɵrepeaterCreate(8, MjFormToolbarComponent_Conditional_1_For_9_Template, 1, 1, null, null, _forTrack0);
434
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 21);
435
+ i0.ɵɵrepeaterCreate(2, MjFormToolbarComponent_Conditional_1_For_3_Template, 5, 25, "button", 22, _forTrack0);
397
436
  i0.ɵɵelementEnd();
398
- i0.ɵɵconditionalCreate(10, MjFormToolbarComponent_Conditional_1_Conditional_10_Template, 1, 0, "div", 22);
399
- i0.ɵɵconditionalCreate(11, MjFormToolbarComponent_Conditional_1_Conditional_11_Template, 6, 2, "div", 23);
400
- i0.ɵɵelement(12, "div", 4);
401
- i0.ɵɵconditionalCreate(13, MjFormToolbarComponent_Conditional_1_Conditional_13_Template, 7, 5, "div", 24);
402
- i0.ɵɵconditionalCreate(14, MjFormToolbarComponent_Conditional_1_Conditional_14_Template, 6, 5, "div", 25);
403
- i0.ɵɵconditionalCreate(15, MjFormToolbarComponent_Conditional_1_Conditional_15_Template, 1, 1, "ng-container", 26);
404
- i0.ɵɵprojection(16);
437
+ i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_Conditional_1_Conditional_4_Template, 1, 0, "div", 23);
438
+ i0.ɵɵconditionalCreate(5, MjFormToolbarComponent_Conditional_1_Conditional_5_Template, 6, 2, "div", 24);
439
+ i0.ɵɵelement(6, "div", 4);
440
+ i0.ɵɵconditionalCreate(7, MjFormToolbarComponent_Conditional_1_Conditional_7_Template, 7, 5, "div", 25);
441
+ i0.ɵɵconditionalCreate(8, MjFormToolbarComponent_Conditional_1_Conditional_8_Template, 6, 5, "div", 26);
442
+ i0.ɵɵconditionalCreate(9, MjFormToolbarComponent_Conditional_1_Conditional_9_Template, 1, 1, "ng-container", 27);
443
+ i0.ɵɵprojection(10);
405
444
  i0.ɵɵelementEnd();
406
445
  } if (rf & 2) {
407
446
  const ctx_r1 = i0.ɵɵnextContext();
408
447
  i0.ɵɵclassProp("mj-forms-toolbar--sticky", ctx_r1.Config.StickyToolbar);
409
448
  i0.ɵɵadvance(2);
410
- i0.ɵɵconditional(ctx_r1.Config.ShowEditButton && ctx_r1.UserCanEdit ? 2 : -1);
411
- i0.ɵɵadvance();
412
- i0.ɵɵconditional(ctx_r1.Config.ShowDeleteButton && ctx_r1.UserCanDelete ? 3 : -1);
413
- i0.ɵɵadvance();
414
- i0.ɵɵconditional(ctx_r1.Config.ShowFavoriteButton && ctx_r1.FavoriteInitDone ? 4 : -1);
415
- i0.ɵɵadvance();
416
- i0.ɵɵconditional(ctx_r1.Config.ShowHistoryButton && ctx_r1.TracksChanges ? 5 : -1);
417
- i0.ɵɵadvance();
418
- i0.ɵɵconditional(ctx_r1.Config.ShowListButton ? 6 : -1);
419
- i0.ɵɵadvance();
420
- i0.ɵɵconditional(ctx_r1.Config.ShowTagsButton ? 7 : -1);
421
- i0.ɵɵadvance();
422
- i0.ɵɵrepeater(ctx_r1.Config.CustomButtons);
449
+ i0.ɵɵrepeater(ctx_r1.ResolvedActionItems);
423
450
  i0.ɵɵadvance(2);
424
- i0.ɵɵconditional(ctx_r1.Config.ShowEntityHierarchy && ctx_r1.IsInHierarchy ? 10 : -1);
451
+ i0.ɵɵconditional(ctx_r1.Config.ShowEntityHierarchy && ctx_r1.IsInHierarchy ? 4 : -1);
425
452
  i0.ɵɵadvance();
426
- i0.ɵɵconditional(ctx_r1.Config.ShowEntityHierarchy && ctx_r1.IsInHierarchy ? 11 : -1);
453
+ i0.ɵɵconditional(ctx_r1.Config.ShowEntityHierarchy && ctx_r1.IsInHierarchy ? 5 : -1);
427
454
  i0.ɵɵadvance(2);
428
- i0.ɵɵconditional(ctx_r1.ShowVariantPickerButton ? 13 : -1);
455
+ i0.ɵɵconditional(ctx_r1.ShowVariantPickerButton ? 7 : -1);
429
456
  i0.ɵɵadvance();
430
- i0.ɵɵconditional(ctx_r1.Config.ShowSectionControls ? 14 : -1);
457
+ i0.ɵɵconditional(ctx_r1.Config.ShowSectionControls ? 8 : -1);
431
458
  i0.ɵɵadvance();
432
- i0.ɵɵconditional(ctx_r1.AdditionalActionsTemplate ? 15 : -1);
459
+ i0.ɵɵconditional(ctx_r1.AdditionalActionsTemplate ? 9 : -1);
433
460
  } }
434
461
  function MjFormToolbarComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
435
- const _r24 = i0.ɵɵgetCurrentView();
436
- i0.ɵɵelementStart(0, "div", 78);
437
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiscardCancel()); });
438
- i0.ɵɵelementStart(1, "div", 79);
439
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r24); return i0.ɵɵresetView($event.stopPropagation()); });
440
- i0.ɵɵelementStart(2, "div", 80)(3, "h3");
462
+ const _r22 = i0.ɵɵgetCurrentView();
463
+ i0.ɵɵelementStart(0, "div", 66);
464
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiscardCancel()); });
465
+ i0.ɵɵelementStart(1, "div", 67);
466
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r22); return i0.ɵɵresetView($event.stopPropagation()); });
467
+ i0.ɵɵelementStart(2, "div", 68)(3, "h3");
441
468
  i0.ɵɵtext(4, "Discard Changes?");
442
469
  i0.ɵɵelementEnd();
443
- i0.ɵɵelementStart(5, "button", 81);
444
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiscardCancel()); });
445
- i0.ɵɵelement(6, "i", 68);
470
+ i0.ɵɵelementStart(5, "button", 69);
471
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiscardCancel()); });
472
+ i0.ɵɵelement(6, "i", 56);
446
473
  i0.ɵɵelementEnd()();
447
- i0.ɵɵelementStart(7, "div", 82)(8, "p");
474
+ i0.ɵɵelementStart(7, "div", 70)(8, "p");
448
475
  i0.ɵɵtext(9, "You have ");
449
476
  i0.ɵɵelementStart(10, "strong");
450
477
  i0.ɵɵtext(11);
451
478
  i0.ɵɵelementEnd();
452
479
  i0.ɵɵtext(12);
453
480
  i0.ɵɵelementEnd()();
454
- i0.ɵɵelementStart(13, "div", 83)(14, "button", 84);
455
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiscardConfirm()); });
456
- i0.ɵɵelement(15, "i", 10);
481
+ i0.ɵɵelementStart(13, "div", 71)(14, "button", 72);
482
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiscardConfirm()); });
483
+ i0.ɵɵelement(15, "i", 11);
457
484
  i0.ɵɵtext(16, " Discard Changes ");
458
485
  i0.ɵɵelementEnd();
459
- i0.ɵɵelementStart(17, "button", 85);
460
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiscardCancel()); });
486
+ i0.ɵɵelementStart(17, "button", 73);
487
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiscardCancel()); });
461
488
  i0.ɵɵtext(18, " Keep Editing ");
462
489
  i0.ɵɵelementEnd()()()();
463
490
  } if (rf & 2) {
@@ -468,99 +495,99 @@ function MjFormToolbarComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
468
495
  i0.ɵɵtextInterpolate2(" unsaved change", ctx_r1.DirtyFieldDisplayNames.length === 1 ? "" : "s", ". Are you sure you want to discard ", ctx_r1.DirtyFieldDisplayNames.length === 1 ? "it" : "them", "?");
469
496
  } }
470
497
  function MjFormToolbarComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
471
- const _r25 = i0.ɵɵgetCurrentView();
472
- i0.ɵɵelementStart(0, "div", 78);
473
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteCancel()); });
474
- i0.ɵɵelementStart(1, "div", 79);
475
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r25); return i0.ɵɵresetView($event.stopPropagation()); });
476
- i0.ɵɵelementStart(2, "div", 80)(3, "h3");
498
+ const _r23 = i0.ɵɵgetCurrentView();
499
+ i0.ɵɵelementStart(0, "div", 66);
500
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteCancel()); });
501
+ i0.ɵɵelementStart(1, "div", 67);
502
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r23); return i0.ɵɵresetView($event.stopPropagation()); });
503
+ i0.ɵɵelementStart(2, "div", 68)(3, "h3");
477
504
  i0.ɵɵtext(4, "Confirm Deletion");
478
505
  i0.ɵɵelementEnd();
479
- i0.ɵɵelementStart(5, "button", 81);
480
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteCancel()); });
481
- i0.ɵɵelement(6, "i", 68);
506
+ i0.ɵɵelementStart(5, "button", 69);
507
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteCancel()); });
508
+ i0.ɵɵelement(6, "i", 56);
482
509
  i0.ɵɵelementEnd()();
483
- i0.ɵɵelementStart(7, "div", 82)(8, "p");
510
+ i0.ɵɵelementStart(7, "div", 70)(8, "p");
484
511
  i0.ɵɵtext(9, "Are you sure you want to delete this record? This action cannot be undone.");
485
512
  i0.ɵɵelementEnd()();
486
- i0.ɵɵelementStart(10, "div", 83)(11, "button", 84);
487
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteConfirm()); });
488
- i0.ɵɵelement(12, "i", 86);
513
+ i0.ɵɵelementStart(10, "div", 71)(11, "button", 72);
514
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteConfirm()); });
515
+ i0.ɵɵelement(12, "i", 74);
489
516
  i0.ɵɵtext(13, " Delete ");
490
517
  i0.ɵɵelementEnd();
491
- i0.ɵɵelementStart(14, "button", 85);
492
- i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteCancel()); });
518
+ i0.ɵɵelementStart(14, "button", 73);
519
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteCancel()); });
493
520
  i0.ɵɵtext(15, " Cancel ");
494
521
  i0.ɵɵelementEnd()()()();
495
522
  } }
496
523
  function MjFormToolbarComponent_ng_template_4_Conditional_0_Conditional_5_Template(rf, ctx) { if (rf & 1) {
497
- i0.ɵɵelementContainer(0, 41);
524
+ i0.ɵɵelementContainer(0, 29);
498
525
  } if (rf & 2) {
499
- const items_r27 = i0.ɵɵnextContext(2).items;
526
+ const items_r25 = i0.ɵɵnextContext(2).items;
500
527
  i0.ɵɵnextContext();
501
- const descendantTreeTpl_r13 = i0.ɵɵreference(5);
502
- i0.ɵɵproperty("ngTemplateOutlet", descendantTreeTpl_r13)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c2, items_r27[0].Children));
528
+ const descendantTreeTpl_r11 = i0.ɵɵreference(5);
529
+ i0.ɵɵproperty("ngTemplateOutlet", descendantTreeTpl_r11)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c2, items_r25[0].Children));
503
530
  } }
504
531
  function MjFormToolbarComponent_ng_template_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
505
- const _r26 = i0.ɵɵgetCurrentView();
506
- i0.ɵɵelementStart(0, "span", 44);
507
- i0.ɵɵelement(1, "i", 45);
532
+ const _r24 = i0.ɵɵgetCurrentView();
533
+ i0.ɵɵelementStart(0, "span", 32);
534
+ i0.ɵɵelement(1, "i", 33);
508
535
  i0.ɵɵelementEnd();
509
- i0.ɵɵelementStart(2, "a", 88);
510
- i0.ɵɵlistener("click", function MjFormToolbarComponent_ng_template_4_Conditional_0_Template_a_click_2_listener($event) { i0.ɵɵrestoreView(_r26); const items_r27 = i0.ɵɵnextContext().items; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDescendantBadgeClick(items_r27[0].EntityName, $event)); });
511
- i0.ɵɵelement(3, "i", 89);
536
+ i0.ɵɵelementStart(2, "a", 76);
537
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_ng_template_4_Conditional_0_Template_a_click_2_listener($event) { i0.ɵɵrestoreView(_r24); const items_r25 = i0.ɵɵnextContext().items; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDescendantBadgeClick(items_r25[0].EntityName, $event)); });
538
+ i0.ɵɵelement(3, "i", 77);
512
539
  i0.ɵɵtext(4);
513
540
  i0.ɵɵelementEnd();
514
- i0.ɵɵconditionalCreate(5, MjFormToolbarComponent_ng_template_4_Conditional_0_Conditional_5_Template, 1, 4, "ng-container", 41);
541
+ i0.ɵɵconditionalCreate(5, MjFormToolbarComponent_ng_template_4_Conditional_0_Conditional_5_Template, 1, 4, "ng-container", 29);
515
542
  } if (rf & 2) {
516
- const items_r27 = i0.ɵɵnextContext().items;
543
+ const items_r25 = i0.ɵɵnextContext().items;
517
544
  i0.ɵɵadvance(2);
518
- i0.ɵɵproperty("title", "Navigate to: " + items_r27[0].EntityName);
545
+ i0.ɵɵproperty("title", "Navigate to: " + items_r25[0].EntityName);
519
546
  i0.ɵɵadvance(2);
520
- i0.ɵɵtextInterpolate1(" ", items_r27[0].EntityName, " ");
547
+ i0.ɵɵtextInterpolate1(" ", items_r25[0].EntityName, " ");
521
548
  i0.ɵɵadvance();
522
- i0.ɵɵconditional(items_r27[0].Children.length > 0 ? 5 : -1);
549
+ i0.ɵɵconditional(items_r25[0].Children.length > 0 ? 5 : -1);
523
550
  } }
524
551
  function MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
525
- i0.ɵɵelementContainer(0, 41);
552
+ i0.ɵɵelementContainer(0, 29);
526
553
  } if (rf & 2) {
527
- const item_r29 = i0.ɵɵnextContext().$implicit;
554
+ const item_r27 = i0.ɵɵnextContext().$implicit;
528
555
  i0.ɵɵnextContext(3);
529
- const descendantTreeTpl_r13 = i0.ɵɵreference(5);
530
- i0.ɵɵproperty("ngTemplateOutlet", descendantTreeTpl_r13)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c2, item_r29.Children));
556
+ const descendantTreeTpl_r11 = i0.ɵɵreference(5);
557
+ i0.ɵɵproperty("ngTemplateOutlet", descendantTreeTpl_r11)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c2, item_r27.Children));
531
558
  } }
532
559
  function MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
533
- const _r28 = i0.ɵɵgetCurrentView();
534
- i0.ɵɵelementStart(0, "div", 90)(1, "a", 88);
535
- i0.ɵɵlistener("click", function MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Template_a_click_1_listener($event) { const item_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDescendantBadgeClick(item_r29.EntityName, $event)); });
536
- i0.ɵɵelement(2, "i", 89);
560
+ const _r26 = i0.ɵɵgetCurrentView();
561
+ i0.ɵɵelementStart(0, "div", 78)(1, "a", 76);
562
+ i0.ɵɵlistener("click", function MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Template_a_click_1_listener($event) { const item_r27 = i0.ɵɵrestoreView(_r26).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDescendantBadgeClick(item_r27.EntityName, $event)); });
563
+ i0.ɵɵelement(2, "i", 77);
537
564
  i0.ɵɵtext(3);
538
565
  i0.ɵɵelementEnd();
539
- i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Conditional_4_Template, 1, 4, "ng-container", 41);
566
+ i0.ɵɵconditionalCreate(4, MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Conditional_4_Template, 1, 4, "ng-container", 29);
540
567
  i0.ɵɵelementEnd();
541
568
  } if (rf & 2) {
542
- const item_r29 = ctx.$implicit;
569
+ const item_r27 = ctx.$implicit;
543
570
  i0.ɵɵadvance();
544
- i0.ɵɵproperty("title", "Navigate to: " + item_r29.EntityName);
571
+ i0.ɵɵproperty("title", "Navigate to: " + item_r27.EntityName);
545
572
  i0.ɵɵadvance(2);
546
- i0.ɵɵtextInterpolate1(" ", item_r29.EntityName, " ");
573
+ i0.ɵɵtextInterpolate1(" ", item_r27.EntityName, " ");
547
574
  i0.ɵɵadvance();
548
- i0.ɵɵconditional(item_r29.Children.length > 0 ? 4 : -1);
575
+ i0.ɵɵconditional(item_r27.Children.length > 0 ? 4 : -1);
549
576
  } }
550
577
  function MjFormToolbarComponent_ng_template_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
551
- i0.ɵɵelementStart(0, "div", 87);
552
- i0.ɵɵrepeaterCreate(1, MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Template, 5, 3, "div", 90, _forTrack2);
578
+ i0.ɵɵelementStart(0, "div", 75);
579
+ i0.ɵɵrepeaterCreate(1, MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Template, 5, 3, "div", 78, _forTrack2);
553
580
  i0.ɵɵelementEnd();
554
581
  } if (rf & 2) {
555
- const items_r27 = i0.ɵɵnextContext().items;
582
+ const items_r25 = i0.ɵɵnextContext().items;
556
583
  i0.ɵɵadvance();
557
- i0.ɵɵrepeater(items_r27);
584
+ i0.ɵɵrepeater(items_r25);
558
585
  } }
559
586
  function MjFormToolbarComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
560
- i0.ɵɵconditionalCreate(0, MjFormToolbarComponent_ng_template_4_Conditional_0_Template, 6, 3)(1, MjFormToolbarComponent_ng_template_4_Conditional_1_Template, 3, 0, "div", 87);
587
+ i0.ɵɵconditionalCreate(0, MjFormToolbarComponent_ng_template_4_Conditional_0_Template, 6, 3)(1, MjFormToolbarComponent_ng_template_4_Conditional_1_Template, 3, 0, "div", 75);
561
588
  } if (rf & 2) {
562
- const items_r27 = ctx.items;
563
- i0.ɵɵconditional(items_r27.length === 1 ? 0 : items_r27.length > 1 ? 1 : -1);
589
+ const items_r25 = ctx.items;
590
+ i0.ɵɵconditional(items_r25.length === 1 ? 0 : items_r25.length > 1 ? 1 : -1);
564
591
  } }
565
592
  /**
566
593
  * Configurable form toolbar component.
@@ -586,6 +613,8 @@ function MjFormToolbarComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
586
613
  */
587
614
  export class MjFormToolbarComponent extends BaseAngularComponent {
588
615
  cdr = inject(ChangeDetectorRef);
616
+ recordRefresh = inject(FormRecordRefreshCoordinator, { optional: true });
617
+ destroy$ = new Subject();
589
618
  // ---- Deprecated form reference (backward compat) ----
590
619
  _formRef;
591
620
  /**
@@ -620,6 +649,12 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
620
649
  TagCount = 0;
621
650
  /** Whether the tags panel is currently open */
622
651
  IsTagsPanelOpen = false;
652
+ /** Number of attachments linked to this record */
653
+ AttachmentCount = 0;
654
+ /** Whether the attachments feature is available for this record */
655
+ AttachmentsAvailable = false;
656
+ /** Whether the attachments panel is currently open */
657
+ IsAttachmentsPanelOpen = false;
623
658
  /** Number of record change versions for this record (displayed as "vN" badge on history button) */
624
659
  VersionCount = 0;
625
660
  /** Entity info for IS-A hierarchy and metadata */
@@ -628,6 +663,8 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
628
663
  Config = DEFAULT_TOOLBAR_CONFIG;
629
664
  /** Whether to show the toolbar in a saving/loading state */
630
665
  IsSaving = false;
666
+ /** Whether a refresh from database operation is currently in progress */
667
+ IsRefreshing = false;
631
668
  // Section controls inputs
632
669
  VisibleSectionCount = 0;
633
670
  TotalSectionCount = 0;
@@ -636,6 +673,14 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
636
673
  ShowEmptyFields = false;
637
674
  WidthMode = 'centered';
638
675
  HasCustomSectionOrder = false;
676
+ /**
677
+ * Form chrome layout. Expand/collapse-all only render for accordion.
678
+ * Left-nav and right-nav show one section at a time.
679
+ */
680
+ ChromeLayout = 'accordion';
681
+ get ShowExpandCollapseAll() {
682
+ return this.Config.ShowExpandCollapseAllButtons && IsAccordionFormChrome(this.ChromeLayout);
683
+ }
639
684
  /** Optional template for additional toolbar actions */
640
685
  AdditionalActionsTemplate = null;
641
686
  /**
@@ -650,9 +695,17 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
650
695
  * {@link VariantPickerItem} on the container for the canonical shape.
651
696
  */
652
697
  Variants = [];
698
+ /** Dynamic toolbar items registered by FormComponent or BaseFormPanels */
699
+ RegisteredItems = [];
700
+ /** Toolbar item property overrides */
701
+ ItemOverrides = null;
702
+ /** Reference to the form component instance for event payloads */
703
+ FormComponent = null;
653
704
  /** The currently-applied variant ID, or null when the Default form is active. */
654
705
  CurrentVariantID = null;
655
706
  // ---- Outputs ----
707
+ /** Emitted when any toolbar item (standard or custom) is clicked */
708
+ ToolbarItemClick = new EventEmitter();
656
709
  /** Emitted for all navigation actions (record links, hierarchy clicks, etc.) */
657
710
  Navigate = new EventEmitter();
658
711
  /** Request to enter or exit edit mode */
@@ -669,6 +722,10 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
669
722
  BeforeDelete = new EventEmitter();
670
723
  /** Request to delete the current record */
671
724
  DeleteRequested = new EventEmitter();
725
+ /** Emitted BEFORE refresh - can be cancelled by setting event.Cancel = true */
726
+ BeforeRefresh = new EventEmitter();
727
+ /** Request to refresh the current record from the database */
728
+ RefreshRequested = new EventEmitter();
672
729
  /** Request to toggle favorite status */
673
730
  FavoriteToggled = new EventEmitter();
674
731
  /** Emitted BEFORE history view - can be cancelled by setting event.Cancel = true */
@@ -681,6 +738,8 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
681
738
  ListManagementRequested = new EventEmitter();
682
739
  /** Emitted when the Tags button is clicked */
683
740
  TagsPanelToggled = new EventEmitter();
741
+ /** Emitted when the Attachments button is clicked */
742
+ AttachmentsPanelToggled = new EventEmitter();
684
743
  /** Request to show dirty field changes */
685
744
  ShowChangesRequested = new EventEmitter();
686
745
  /**
@@ -707,6 +766,15 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
707
766
  _lastRecordForChains = null;
708
767
  _chainsLoading = false;
709
768
  // ---- Lifecycle ----
769
+ ngOnInit() {
770
+ this.recordRefresh?.Refreshed$.pipe(takeUntil(this.destroy$)).subscribe(() => {
771
+ this.InvalidateHierarchy();
772
+ });
773
+ }
774
+ ngOnDestroy() {
775
+ this.destroy$.next();
776
+ this.destroy$.complete();
777
+ }
710
778
  ngDoCheck() {
711
779
  if (this._formRef) {
712
780
  this.SyncFromFormRef();
@@ -853,6 +921,16 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
853
921
  return this.Record.PrimaryKey.ToConcatenatedString();
854
922
  }
855
923
  // ---- Descendant Chain Computation ----
924
+ /**
925
+ * Force a recompute of the IS-A descendant breadcrumb. Needed after
926
+ * in-place record refresh because the Record object identity does not
927
+ * change, so {@link CheckDescendantChains} would otherwise skip.
928
+ */
929
+ InvalidateHierarchy() {
930
+ this._lastRecordForChains = null;
931
+ this.ComputeDescendantChains();
932
+ this.cdr.markForCheck();
933
+ }
856
934
  /**
857
935
  * Check if descendant chains need recomputation (called from DoCheck).
858
936
  * Only triggers async computation when the record identity changes.
@@ -976,6 +1054,18 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
976
1054
  this.ShowDeleteDialog = false;
977
1055
  this.cdr.markForCheck();
978
1056
  }
1057
+ OnRefresh() {
1058
+ if (this.IsRefreshing || this.IsSaving)
1059
+ return;
1060
+ // Emit Before event - handler can cancel by setting event.Cancel = true
1061
+ const beforeEvent = new BeforeRefreshEventArgs();
1062
+ this.BeforeRefresh.emit(beforeEvent);
1063
+ if (beforeEvent.Cancel)
1064
+ return;
1065
+ if (this.DispatchToFormRef('RefreshRecord'))
1066
+ return;
1067
+ this.RefreshRequested.emit();
1068
+ }
979
1069
  OnFavoriteToggle() {
980
1070
  if (this.DispatchToFormRef('OnFavoriteToggled'))
981
1071
  return;
@@ -1006,6 +1096,11 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1006
1096
  return;
1007
1097
  this.TagsPanelToggled.emit();
1008
1098
  }
1099
+ OnAttachmentsPanel() {
1100
+ if (this.DispatchToFormRef('HandleAttachmentsPanel'))
1101
+ return;
1102
+ this.AttachmentsPanelToggled.emit();
1103
+ }
1009
1104
  OnCustomButtonClick(button) {
1010
1105
  if (button.Disabled)
1011
1106
  return;
@@ -1014,6 +1109,315 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1014
1109
  Button: button
1015
1110
  });
1016
1111
  }
1112
+ /**
1113
+ * Resolves all standard and custom toolbar items into their active runtime state,
1114
+ * evaluated against the current Record and EditMode.
1115
+ */
1116
+ get ResolvedToolbarItems() {
1117
+ const rawItems = [];
1118
+ // 1. Standard Built-in Items
1119
+ rawItems.push({
1120
+ Key: 'edit',
1121
+ Text: '',
1122
+ Description: 'Edit this Record',
1123
+ Icon: 'fa-solid fa-pen-to-square',
1124
+ Variant: 'default',
1125
+ Mode: 'read',
1126
+ Placement: 'actions',
1127
+ Order: 10,
1128
+ Visible: this.Config.ShowEditButton && this.UserCanEdit,
1129
+ Disabled: false,
1130
+ }, {
1131
+ Key: 'delete',
1132
+ Text: '',
1133
+ Description: 'Delete this Record',
1134
+ Icon: 'fa-regular fa-trash-can',
1135
+ Variant: 'default',
1136
+ Mode: 'read',
1137
+ Placement: 'actions',
1138
+ Order: 20,
1139
+ Visible: this.Config.ShowDeleteButton && this.UserCanDelete,
1140
+ Disabled: false,
1141
+ }, {
1142
+ Key: 'refresh',
1143
+ Text: '',
1144
+ Description: 'Refresh record from database',
1145
+ Icon: 'fa-solid fa-arrows-rotate',
1146
+ Variant: 'default',
1147
+ Mode: 'read',
1148
+ Placement: 'actions',
1149
+ Order: 25,
1150
+ Visible: this.Config.ShowRefreshButton !== false && (this.Record?.IsSaved ?? false),
1151
+ Disabled: this.IsSaving || this.IsRefreshing,
1152
+ IsLoading: this.IsRefreshing,
1153
+ }, {
1154
+ Key: 'favorite',
1155
+ Text: '',
1156
+ Description: this.IsFavorite ? 'Remove Favorite' : 'Make Favorite',
1157
+ Icon: this.IsFavorite ? 'fa-solid fa-star mj-icon--favorite' : 'fa-regular fa-star',
1158
+ Variant: 'default',
1159
+ Mode: 'read',
1160
+ Placement: 'actions',
1161
+ Order: 30,
1162
+ Visible: this.Config.ShowFavoriteButton && this.FavoriteInitDone,
1163
+ Disabled: false,
1164
+ }, {
1165
+ Key: 'history',
1166
+ Text: '',
1167
+ Description: this.VersionCount > 0 ? `${this.VersionCount} version(s) tracked` : 'Record Changes',
1168
+ Icon: 'fa-regular fa-clock',
1169
+ Badge: this.VersionCount > 0 ? `v${this.VersionCount}` : undefined,
1170
+ Variant: 'default',
1171
+ Mode: 'read',
1172
+ Placement: 'actions',
1173
+ Order: 40,
1174
+ Visible: this.Config.ShowHistoryButton && this.TracksChanges,
1175
+ Disabled: false,
1176
+ }, {
1177
+ Key: 'list',
1178
+ Text: '',
1179
+ Description: this.ListCount > 0 ? `Member of ${this.ListCount} list(s)` : 'Add to a list',
1180
+ Icon: 'fa-regular fa-bookmark',
1181
+ Badge: this.ListCount > 0 ? this.ListCount : undefined,
1182
+ Variant: 'default',
1183
+ Mode: 'read',
1184
+ Placement: 'actions',
1185
+ Order: 50,
1186
+ Visible: this.Config.ShowListButton,
1187
+ Disabled: false,
1188
+ }, {
1189
+ Key: 'tags',
1190
+ Text: '',
1191
+ Description: this.TagCount > 0 ? `${this.TagCount} tag(s)` : 'View tags',
1192
+ Icon: 'fa-solid fa-tags',
1193
+ Badge: this.TagCount > 0 ? this.TagCount : undefined,
1194
+ Variant: 'default',
1195
+ Mode: 'read',
1196
+ Placement: 'actions',
1197
+ Order: 60,
1198
+ Visible: this.Config.ShowTagsButton,
1199
+ Disabled: false,
1200
+ }, {
1201
+ Key: 'attachments',
1202
+ Text: '',
1203
+ Description: this.AttachmentCount > 0 ? `${this.AttachmentCount} attachment${this.AttachmentCount === 1 ? '' : 's'}` : 'Attachments',
1204
+ Icon: 'fa-solid fa-paperclip',
1205
+ Badge: this.AttachmentCount > 0 ? this.AttachmentCount : undefined,
1206
+ Variant: 'default',
1207
+ Mode: 'read',
1208
+ Placement: 'actions',
1209
+ Order: 70,
1210
+ Visible: this.Config.ShowAttachmentsButton && this.AttachmentsAvailable,
1211
+ Disabled: false,
1212
+ CssClass: this.IsAttachmentsPanelOpen ? 'active' : '',
1213
+ });
1214
+ // 2. Legacy Custom Buttons from Config.CustomButtons (if not already registered dynamically)
1215
+ if (this.Config.CustomButtons && this.Config.CustomButtons.length > 0) {
1216
+ for (const cb of this.Config.CustomButtons) {
1217
+ if (!this.RegisteredItems.some(r => r.Key === cb.Key)) {
1218
+ rawItems.push({
1219
+ Key: cb.Key,
1220
+ Text: cb.Name || '',
1221
+ Description: cb.Description || '',
1222
+ Icon: cb.Icon || '',
1223
+ Variant: 'default',
1224
+ Mode: 'read',
1225
+ Placement: 'actions',
1226
+ Order: 100,
1227
+ Visible: cb.Visible !== false,
1228
+ Disabled: cb.Disabled || false,
1229
+ CssClass: cb.CssClass || '',
1230
+ });
1231
+ }
1232
+ }
1233
+ }
1234
+ // 3. Dynamically Registered Items (from BaseFormComponent / BaseFormPanel)
1235
+ if (this.RegisteredItems && this.RegisteredItems.length > 0) {
1236
+ for (const item of this.RegisteredItems) {
1237
+ const existingIdx = rawItems.findIndex(r => r.Key === item.Key);
1238
+ if (existingIdx >= 0) {
1239
+ rawItems[existingIdx] = { ...rawItems[existingIdx], ...item };
1240
+ }
1241
+ else {
1242
+ rawItems.push({ ...item });
1243
+ }
1244
+ }
1245
+ }
1246
+ // 4. Resolve states, evaluate predicates, apply overrides
1247
+ const resolved = [];
1248
+ const standardKeys = new Set(['edit', 'delete', 'refresh', 'favorite', 'history', 'list', 'tags', 'attachments']);
1249
+ for (const item of rawItems) {
1250
+ const overrides = this.ItemOverrides?.get(item.Key);
1251
+ const merged = overrides ? { ...item, ...overrides } : item;
1252
+ // Mode check
1253
+ const mode = merged.Mode ?? 'read';
1254
+ if (mode === 'read' && this.EditMode)
1255
+ continue;
1256
+ if (mode === 'edit' && !this.EditMode)
1257
+ continue;
1258
+ // Visibility evaluation
1259
+ let visible = true;
1260
+ if (typeof merged.Visible === 'function') {
1261
+ try {
1262
+ visible = merged.Visible(this.Record, this.EditMode);
1263
+ }
1264
+ catch {
1265
+ visible = false;
1266
+ }
1267
+ }
1268
+ else if (typeof merged.Visible === 'boolean') {
1269
+ visible = merged.Visible;
1270
+ }
1271
+ if (!visible)
1272
+ continue;
1273
+ // Disabled evaluation
1274
+ let disabled = false;
1275
+ let disabledReason;
1276
+ if (typeof merged.Disabled === 'function') {
1277
+ try {
1278
+ const res = merged.Disabled(this.Record, this.EditMode);
1279
+ if (typeof res === 'string') {
1280
+ disabled = true;
1281
+ disabledReason = res;
1282
+ }
1283
+ else {
1284
+ disabled = !!res;
1285
+ }
1286
+ }
1287
+ catch {
1288
+ disabled = true;
1289
+ }
1290
+ }
1291
+ else if (typeof merged.Disabled === 'string') {
1292
+ disabled = true;
1293
+ disabledReason = merged.Disabled;
1294
+ }
1295
+ else if (typeof merged.Disabled === 'boolean') {
1296
+ disabled = merged.Disabled;
1297
+ }
1298
+ // Loading evaluation
1299
+ let isLoading = false;
1300
+ if (typeof merged.IsLoading === 'function') {
1301
+ try {
1302
+ isLoading = merged.IsLoading(this.Record, this.EditMode);
1303
+ }
1304
+ catch {
1305
+ isLoading = false;
1306
+ }
1307
+ }
1308
+ else if (typeof merged.IsLoading === 'boolean') {
1309
+ isLoading = merged.IsLoading;
1310
+ }
1311
+ // Badge evaluation
1312
+ let badge;
1313
+ if (typeof merged.Badge === 'function') {
1314
+ try {
1315
+ const b = merged.Badge(this.Record);
1316
+ badge = b != null ? b : undefined;
1317
+ }
1318
+ catch {
1319
+ badge = undefined;
1320
+ }
1321
+ }
1322
+ else if (merged.Badge != null) {
1323
+ badge = merged.Badge;
1324
+ }
1325
+ const description = disabled && disabledReason ? disabledReason : (merged.Description ?? '');
1326
+ resolved.push({
1327
+ Key: merged.Key,
1328
+ Text: merged.Text ?? '',
1329
+ Description: description,
1330
+ Icon: merged.Icon ?? '',
1331
+ Variant: merged.Variant ?? 'default',
1332
+ Mode: mode,
1333
+ Placement: merged.Placement ?? 'actions',
1334
+ Order: merged.Order ?? 100,
1335
+ Visible: true,
1336
+ Disabled: disabled,
1337
+ DisabledReason: disabledReason,
1338
+ Badge: badge,
1339
+ IsLoading: isLoading,
1340
+ CssClass: merged.CssClass ?? '',
1341
+ IsStandard: standardKeys.has(merged.Key),
1342
+ Config: merged,
1343
+ });
1344
+ }
1345
+ return resolved.sort((a, b) => a.Order - b.Order);
1346
+ }
1347
+ get ResolvedActionItems() {
1348
+ return this.ResolvedToolbarItems.filter(item => item.Placement === 'actions');
1349
+ }
1350
+ get ResolvedEditBeforeSaveItems() {
1351
+ return this.ResolvedActionItems.filter(item => (item.Order ?? 100) < 50);
1352
+ }
1353
+ get ResolvedEditAfterSaveItems() {
1354
+ return this.ResolvedActionItems.filter(item => (item.Order ?? 100) >= 50);
1355
+ }
1356
+ get ResolvedRightItems() {
1357
+ return this.ResolvedToolbarItems.filter(item => item.Placement === 'right');
1358
+ }
1359
+ async OnToolbarItemClick(item, event) {
1360
+ if (item.Disabled || item.IsLoading) {
1361
+ return;
1362
+ }
1363
+ const clickArgs = {
1364
+ ItemKey: item.Key,
1365
+ Item: item.Config,
1366
+ Record: this.Record,
1367
+ EditMode: this.EditMode,
1368
+ FormComponent: this.FormComponent,
1369
+ Cancel: false
1370
+ };
1371
+ if (item.IsStandard) {
1372
+ switch (item.Key) {
1373
+ case 'edit':
1374
+ this.OnEdit();
1375
+ break;
1376
+ case 'delete':
1377
+ this.OnDeleteClick();
1378
+ break;
1379
+ case 'refresh':
1380
+ this.OnRefresh();
1381
+ break;
1382
+ case 'favorite':
1383
+ this.OnFavoriteToggle();
1384
+ break;
1385
+ case 'history':
1386
+ this.OnHistory();
1387
+ break;
1388
+ case 'list':
1389
+ this.OnListManagement();
1390
+ break;
1391
+ case 'tags':
1392
+ this.OnTagsPanel();
1393
+ break;
1394
+ case 'attachments':
1395
+ this.OnAttachmentsPanel();
1396
+ break;
1397
+ }
1398
+ }
1399
+ this.ToolbarItemClick.emit(clickArgs);
1400
+ this.CustomButtonClick.emit({
1401
+ ButtonKey: item.Key,
1402
+ Button: {
1403
+ Key: item.Key,
1404
+ Name: item.Text,
1405
+ Description: item.Description,
1406
+ Icon: item.Icon,
1407
+ Visible: item.Visible,
1408
+ Disabled: item.Disabled,
1409
+ CssClass: item.CssClass
1410
+ }
1411
+ });
1412
+ if (!clickArgs.Cancel && item.Config.OnClick) {
1413
+ try {
1414
+ await item.Config.OnClick(clickArgs);
1415
+ }
1416
+ catch (err) {
1417
+ console.error(`[FormToolbar] Error executing OnClick for toolbar item '${item.Key}':`, err);
1418
+ }
1419
+ }
1420
+ }
1017
1421
  OnShowChanges() {
1018
1422
  if (this.DispatchToFormRef('ShowChanges'))
1019
1423
  return;
@@ -1167,10 +1571,10 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1167
1571
  this.ManageSectionsRequested.emit();
1168
1572
  }
1169
1573
  static ɵfac = /*@__PURE__*/ (() => { let ɵMjFormToolbarComponent_BaseFactory; return function MjFormToolbarComponent_Factory(__ngFactoryType__) { return (ɵMjFormToolbarComponent_BaseFactory || (ɵMjFormToolbarComponent_BaseFactory = i0.ɵɵgetInheritedFactory(MjFormToolbarComponent)))(__ngFactoryType__ || MjFormToolbarComponent); }; })();
1170
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MjFormToolbarComponent, selectors: [["mj-form-toolbar"]], inputs: { Form: "Form", _deprecatedForm: [0, "form", "_deprecatedForm"], Record: "Record", EditMode: "EditMode", UserCanEdit: "UserCanEdit", UserCanDelete: "UserCanDelete", IsFavorite: "IsFavorite", FavoriteInitDone: "FavoriteInitDone", IsDirty: "IsDirty", DirtyFieldNames: "DirtyFieldNames", ListCount: "ListCount", TagCount: "TagCount", IsTagsPanelOpen: "IsTagsPanelOpen", VersionCount: "VersionCount", EntityInfo: "EntityInfo", Config: "Config", IsSaving: "IsSaving", VisibleSectionCount: "VisibleSectionCount", TotalSectionCount: "TotalSectionCount", ExpandedSectionCount: "ExpandedSectionCount", SearchFilter: "SearchFilter", ShowEmptyFields: "ShowEmptyFields", WidthMode: "WidthMode", HasCustomSectionOrder: "HasCustomSectionOrder", AdditionalActionsTemplate: "AdditionalActionsTemplate", Variants: "Variants", CurrentVariantID: "CurrentVariantID" }, 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", TagsPanelToggled: "TagsPanelToggled", ShowChangesRequested: "ShowChangesRequested", VariantPicked: "VariantPicked", CustomButtonClick: "CustomButtonClick", FilterChange: "FilterChange", ExpandAllRequested: "ExpandAllRequested", CollapseAllRequested: "CollapseAllRequested", ShowEmptyFieldsChange: "ShowEmptyFieldsChange", WidthModeChange: "WidthModeChange", ResetSectionOrderRequested: "ResetSectionOrderRequested", ManageSectionsRequested: "ManageSectionsRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c1, decls: 6, vars: 4, consts: [["descendantTreeTpl", ""], [1, "mj-forms-edit-banner"], [1, "mj-forms-toolbar", 3, "mj-forms-toolbar--sticky"], [1, "mj-dialog-overlay"], [1, "mj-forms-toolbar-spacer"], [1, "mj-forms-edit-banner-actions"], ["title", "Save Changes", 1, "mj-forms-btn", "mj-forms-btn--primary", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], [1, "mj-forms-btn-text"], ["title", "Discard Changes", 1, "mj-forms-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-left"], [1, "fa-solid", "fa-circle-exclamation", "mj-forms-edit-banner-icon--dirty"], [1, "mj-forms-edit-banner-dirty"], [1, "fa-solid", "fa-pen-to-square"], [1, "mj-forms-edit-banner-text"], [1, "mj-forms-toolbar"], [1, "mj-forms-toolbar-group"], ["title", "Edit this Record", 1, "mj-forms-btn"], ["title", "Delete this Record", 1, "mj-forms-btn"], [1, "mj-forms-btn", 3, "title"], [1, "mj-forms-btn", "mj-forms-btn--history", 3, "title"], [1, "mj-forms-btn", "mj-forms-btn--list", 3, "title"], [1, "mj-forms-toolbar-separator"], [1, "mj-entity-hierarchy"], [1, "mj-form-variant-picker-host", 3, "open"], [1, "mj-forms-toolbar-group", "mj-section-controls"], [3, "ngTemplateOutlet"], ["title", "Edit this Record", 1, "mj-forms-btn", 3, "click"], ["title", "Delete this Record", 1, "mj-forms-btn", 3, "click"], [1, "fa-regular", "fa-trash-can"], [1, "mj-forms-btn", 3, "click", "title"], [1, "mj-forms-btn", "mj-forms-btn--history", 3, "click", "title"], [1, "fa-regular", "fa-clock"], [1, "mj-version-count-badge"], [1, "mj-forms-btn", "mj-forms-btn--list", 3, "click", "title"], [1, "fa-regular", "fa-bookmark"], [1, "mj-list-count-badge"], [1, "fa-solid", "fa-tags"], [1, "mj-forms-btn", 3, "class", "disabled", "title"], [1, "mj-forms-btn", 3, "click", "disabled", "title"], [1, "mj-entity-badge", "mj-entity-badge--current"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "mj-entity-badge", "mj-entity-badge--parent", 3, "click", "title"], [1, "fa-solid", "fa-arrow-up"], [1, "mj-hierarchy-arrow"], [1, "fa-solid", "fa-chevron-right"], [1, "mj-form-variant-picker-host"], ["type", "button", 1, "mj-forms-btn", "mj-form-variant-picker-trigger", 3, "click", "blur", "title"], [1, "fa-solid", "fa-pen-ruler"], [1, "mj-form-variant-picker-current-label"], [1, "fa-solid", "fa-chevron-down", "chev"], [1, "mj-form-variant-picker-menu"], [1, "mj-form-variant-picker-menu", 3, "mousedown", "click"], [1, "mj-form-variant-picker-row", "mj-form-variant-picker-default", 3, "click"], [1, "mj-form-variant-picker-row-main"], [1, "mj-form-variant-picker-row-title"], [1, "mj-form-variant-picker-default-tag"], [1, "mj-form-variant-picker-row-sub"], [1, "fa-solid", "fa-check", "mj-form-variant-picker-check"], [1, "mj-form-variant-picker-row", 3, "current", "inactive"], [1, "mj-form-variant-picker-row", 3, "click"], [1, "mj-forms-search-wrapper"], ["title", "Reset section order", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only"], ["title", "Manage section order", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only"], [1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "title"], ["type", "text", "placeholder", "Search sections...", 1, "mj-section-search", 3, "input", "value"], ["title", "Clear search", 1, "mj-clear-search"], ["title", "Clear search", 1, "mj-clear-search", 3, "click"], [1, "fa-solid", "fa-xmark"], ["title", "Expand all sections", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all sections", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-up"], ["title", "Reset section order", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click"], [1, "fa-solid", "fa-arrow-rotate-left"], ["title", "Manage section order", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click"], [1, "fa-solid", "fa-bars-staggered"], [1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click", "title"], [1, "mj-dialog-overlay", 3, "click"], [1, "mj-dialog", 3, "click"], [1, "mj-dialog-header"], [1, "mj-dialog-close", 3, "click"], [1, "mj-dialog-body"], [1, "mj-dialog-footer"], [1, "mj-forms-btn", "mj-forms-btn--danger", 3, "click"], [1, "mj-forms-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "mj-descendant-chains"], [1, "mj-entity-badge", "mj-entity-badge--child", 3, "click", "title"], [1, "fa-solid", "fa-arrow-down"], [1, "mj-descendant-chain"]], template: function MjFormToolbarComponent_Template(rf, ctx) { if (rf & 1) {
1574
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MjFormToolbarComponent, selectors: [["mj-form-toolbar"]], inputs: { Form: "Form", _deprecatedForm: [0, "form", "_deprecatedForm"], Record: "Record", EditMode: "EditMode", UserCanEdit: "UserCanEdit", UserCanDelete: "UserCanDelete", IsFavorite: "IsFavorite", FavoriteInitDone: "FavoriteInitDone", IsDirty: "IsDirty", DirtyFieldNames: "DirtyFieldNames", ListCount: "ListCount", TagCount: "TagCount", IsTagsPanelOpen: "IsTagsPanelOpen", AttachmentCount: "AttachmentCount", AttachmentsAvailable: "AttachmentsAvailable", IsAttachmentsPanelOpen: "IsAttachmentsPanelOpen", VersionCount: "VersionCount", EntityInfo: "EntityInfo", Config: "Config", IsSaving: "IsSaving", IsRefreshing: "IsRefreshing", VisibleSectionCount: "VisibleSectionCount", TotalSectionCount: "TotalSectionCount", ExpandedSectionCount: "ExpandedSectionCount", SearchFilter: "SearchFilter", ShowEmptyFields: "ShowEmptyFields", WidthMode: "WidthMode", HasCustomSectionOrder: "HasCustomSectionOrder", ChromeLayout: "ChromeLayout", AdditionalActionsTemplate: "AdditionalActionsTemplate", Variants: "Variants", RegisteredItems: "RegisteredItems", ItemOverrides: "ItemOverrides", FormComponent: "FormComponent", CurrentVariantID: "CurrentVariantID" }, outputs: { ToolbarItemClick: "ToolbarItemClick", Navigate: "Navigate", EditModeChange: "EditModeChange", BeforeSave: "BeforeSave", SaveRequested: "SaveRequested", BeforeCancel: "BeforeCancel", CancelRequested: "CancelRequested", BeforeDelete: "BeforeDelete", DeleteRequested: "DeleteRequested", BeforeRefresh: "BeforeRefresh", RefreshRequested: "RefreshRequested", FavoriteToggled: "FavoriteToggled", BeforeHistoryView: "BeforeHistoryView", HistoryRequested: "HistoryRequested", BeforeListManagement: "BeforeListManagement", ListManagementRequested: "ListManagementRequested", TagsPanelToggled: "TagsPanelToggled", AttachmentsPanelToggled: "AttachmentsPanelToggled", ShowChangesRequested: "ShowChangesRequested", VariantPicked: "VariantPicked", CustomButtonClick: "CustomButtonClick", FilterChange: "FilterChange", ExpandAllRequested: "ExpandAllRequested", CollapseAllRequested: "CollapseAllRequested", ShowEmptyFieldsChange: "ShowEmptyFieldsChange", WidthModeChange: "WidthModeChange", ResetSectionOrderRequested: "ResetSectionOrderRequested", ManageSectionsRequested: "ManageSectionsRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c1, decls: 6, vars: 4, consts: [["descendantTreeTpl", ""], [1, "mj-forms-edit-banner"], [1, "mj-forms-toolbar", 3, "mj-forms-toolbar--sticky"], [1, "mj-dialog-overlay"], [1, "mj-forms-toolbar-spacer"], [1, "mj-forms-edit-banner-actions"], [1, "mj-forms-btn", 3, "mj-forms-btn--primary", "mj-forms-btn--secondary", "mj-forms-btn--accent", "mj-forms-btn--danger", "mj-forms-btn--ghost", "class", "disabled", "title"], ["title", "Save Changes", 1, "mj-forms-btn", "mj-forms-btn--primary", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], [1, "mj-forms-btn-text"], ["title", "Discard Changes", 1, "mj-forms-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-left"], [1, "fa-solid", "fa-circle-exclamation", "mj-forms-edit-banner-icon--dirty"], [1, "mj-forms-edit-banner-dirty"], [1, "fa-solid", "fa-pen-to-square"], [1, "mj-forms-edit-banner-text"], [1, "mj-forms-btn", 3, "click", "disabled", "title"], [1, "fa-solid", "fa-spinner", "fa-spin"], [3, "class"], [1, "mj-list-count-badge"], [1, "mj-forms-toolbar"], [1, "mj-forms-toolbar-group"], [1, "mj-forms-btn", 3, "mj-forms-btn--primary", "mj-forms-btn--secondary", "mj-forms-btn--accent", "mj-forms-btn--danger", "mj-forms-btn--ghost", "mj-forms-btn--history", "mj-forms-btn--list", "mj-forms-btn--tags", "mj-forms-btn--attachments", "class", "disabled", "title"], [1, "mj-forms-toolbar-separator"], [1, "mj-entity-hierarchy"], [1, "mj-form-variant-picker-host", 3, "open"], [1, "mj-forms-toolbar-group", "mj-section-controls"], [3, "ngTemplateOutlet"], [1, "mj-entity-badge", "mj-entity-badge--current"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "mj-entity-badge", "mj-entity-badge--parent", 3, "click", "title"], [1, "fa-solid", "fa-arrow-up"], [1, "mj-hierarchy-arrow"], [1, "fa-solid", "fa-chevron-right"], [1, "mj-form-variant-picker-host"], ["type", "button", 1, "mj-forms-btn", "mj-form-variant-picker-trigger", 3, "click", "blur", "title"], [1, "fa-solid", "fa-pen-ruler"], [1, "mj-form-variant-picker-current-label"], [1, "fa-solid", "fa-chevron-down", "chev"], [1, "mj-form-variant-picker-menu"], [1, "mj-form-variant-picker-menu", 3, "mousedown", "click"], [1, "mj-form-variant-picker-row", "mj-form-variant-picker-default", 3, "click"], [1, "mj-form-variant-picker-row-main"], [1, "mj-form-variant-picker-row-title"], [1, "mj-form-variant-picker-default-tag"], [1, "mj-form-variant-picker-row-sub"], [1, "fa-solid", "fa-check", "mj-form-variant-picker-check"], [1, "mj-form-variant-picker-row", 3, "current", "inactive"], [1, "mj-form-variant-picker-row", 3, "click"], [1, "mj-forms-search-wrapper"], ["title", "Reset section order", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only"], ["title", "Manage section order", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only"], [1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "title"], ["type", "text", "placeholder", "Search sections...", 1, "mj-section-search", 3, "input", "value"], ["title", "Clear search", 1, "mj-clear-search"], ["title", "Clear search", 1, "mj-clear-search", 3, "click"], [1, "fa-solid", "fa-xmark"], ["title", "Expand all sections", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all sections", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-up"], ["title", "Reset section order", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click"], [1, "fa-solid", "fa-arrow-rotate-left"], ["title", "Manage section order", 1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click"], [1, "fa-solid", "fa-bars-staggered"], [1, "mj-forms-btn", "mj-forms-btn--ghost", "mj-forms-btn--icon-only", 3, "click", "title"], [1, "mj-dialog-overlay", 3, "click"], [1, "mj-dialog", 3, "click"], [1, "mj-dialog-header"], [1, "mj-dialog-close", 3, "click"], [1, "mj-dialog-body"], [1, "mj-dialog-footer"], [1, "mj-forms-btn", "mj-forms-btn--danger", 3, "click"], [1, "mj-forms-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "mj-descendant-chains"], [1, "mj-entity-badge", "mj-entity-badge--child", 3, "click", "title"], [1, "fa-solid", "fa-arrow-down"], [1, "mj-descendant-chain"]], template: function MjFormToolbarComponent_Template(rf, ctx) { if (rf & 1) {
1171
1575
  i0.ɵɵprojectionDef(_c0);
1172
- i0.ɵɵconditionalCreate(0, MjFormToolbarComponent_Conditional_0_Template, 13, 3, "div", 1);
1173
- i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_1_Template, 17, 13, "div", 2);
1576
+ i0.ɵɵconditionalCreate(0, MjFormToolbarComponent_Conditional_0_Template, 17, 3, "div", 1);
1577
+ i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_1_Template, 11, 7, "div", 2);
1174
1578
  i0.ɵɵconditionalCreate(2, MjFormToolbarComponent_Conditional_2_Template, 19, 3, "div", 3);
1175
1579
  i0.ɵɵconditionalCreate(3, MjFormToolbarComponent_Conditional_3_Template, 16, 0, "div", 3);
1176
1580
  i0.ɵɵtemplate(4, MjFormToolbarComponent_ng_template_4_Template, 2, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
@@ -1182,11 +1586,11 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1182
1586
  i0.ɵɵconditional(ctx.ShowDiscardDialog ? 2 : -1);
1183
1587
  i0.ɵɵadvance();
1184
1588
  i0.ɵɵconditional(ctx.ShowDeleteDialog ? 3 : -1);
1185
- } }, dependencies: [i1.NgTemplateOutlet], styles: ["\n\n\n\n[_nghost-%COMP%] {\n display: block;\n}\n\n\n\n\n\n.mj-forms-edit-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 2px solid var(--mj-brand-primary);\n font-size: 13px;\n color: var(--mj-brand-primary);\n font-weight: var(--mj-font-medium);\n}\n\n.mj-forms-edit-banner[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n.mj-forms-edit-banner-icon--dirty[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-size: var(--mj-text-base);\n}\n\n.mj-forms-edit-banner-text[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n.mj-forms-edit-banner-dirty[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.mj-forms-edit-banner-dirty[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-weight: var(--mj-font-bold);\n}\n\n.mj-forms-edit-banner-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n\n\n.mj-forms-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 22px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n flex-wrap: wrap;\n z-index: 40;\n}\n\n.mj-forms-toolbar--sticky[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n}\n\n.mj-forms-toolbar--disabled[_ngcontent-%COMP%] {\n pointer-events: none;\n opacity: 0.7;\n}\n\n.mj-forms-toolbar-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.mj-forms-toolbar-separator[_ngcontent-%COMP%] {\n width: 1px;\n height: 24px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n.mj-forms-toolbar-spacer[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n\n\n\n\n.mj-forms-btn[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: var(--mj-font-medium);\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all var(--mj-transition-base) ease;\n white-space: nowrap;\n font-family: inherit;\n line-height: 1;\n}\n\n.mj-forms-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.mj-forms-btn[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n box-shadow: none;\n}\n\n.mj-forms-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mj-forms-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 15px;\n line-height: 1;\n}\n\n.mj-forms-btn--primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.mj-forms-btn--primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.mj-forms-btn--danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n}\n\n.mj-forms-btn--danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n}\n\n.mj-forms-btn--ghost[_ngcontent-%COMP%] {\n border-color: transparent;\n background: transparent;\n}\n\n.mj-forms-btn--ghost[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n border-color: transparent;\n}\n\n.mj-forms-btn--icon-only[_ngcontent-%COMP%] {\n padding: 7px 9px;\n}\n\n.mj-forms-btn--sm[_ngcontent-%COMP%] {\n padding: 5px 12px;\n font-size: var(--mj-text-xs);\n}\n\n.mj-forms-btn--sm[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n}\n\n.mj-forms-btn-text[_ngcontent-%COMP%] {\n margin-left: 2px;\n}\n\n.mj-icon--favorite[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n\n\n.mj-forms-btn--list[_ngcontent-%COMP%] {\n position: relative;\n}\n\n\n\n.mj-forms-btn--history[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.mj-version-count-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n right: -10px;\n padding: 0 5px;\n font-size: 10px;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n background: linear-gradient(135deg, var(--mj-status-success) 0%, color-mix(in srgb, var(--mj-status-success) 85%, black) 100%);\n border-radius: var(--mj-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 16px;\n border: 2px solid var(--mj-bg-surface-card);\n white-space: nowrap;\n line-height: 1;\n}\n\n.mj-list-count-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n font-size: 10px;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n background: linear-gradient(135deg, var(--mj-status-info) 0%, color-mix(in srgb, var(--mj-status-info) 85%, black) 100%);\n border-radius: var(--mj-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-bg-surface-card);\n}\n\n\n\n\n\n.mj-entity-hierarchy[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.mj-entity-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all var(--mj-transition-base) ease;\n text-decoration: none;\n border: 1px solid transparent;\n}\n\n.mj-entity-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.mj-entity-badge--parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-accent) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-accent);\n border-color: color-mix(in srgb, var(--mj-brand-accent) 25%, transparent);\n}\n\n.mj-entity-badge--parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-accent) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-accent);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-accent) 15%, transparent);\n}\n\n.mj-entity-badge--current[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n font-size: 13px;\n color: var(--mj-text-primary);\n padding: 4px 8px;\n background: var(--mj-bg-surface-hover);\n border-radius: var(--mj-radius-sm);\n cursor: default;\n}\n\n.mj-entity-badge--child[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.mj-entity-badge--child[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-info) 18%, var(--mj-bg-surface));\n border-color: var(--mj-status-info);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-status-info) 15%, transparent);\n}\n\n.mj-entity-badge--overlapping[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-status-warning) 85%, black);\n border-color: color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n}\n\n.mj-entity-badge--overlapping[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 18%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-status-warning) 15%, transparent);\n}\n\n.mj-entity-badge-group[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.mj-child-count[_ngcontent-%COMP%] {\n background: var(--mj-status-info);\n color: var(--mj-text-inverse);\n font-size: 10px;\n padding: 1px 5px;\n border-radius: var(--mj-radius-full);\n font-weight: var(--mj-font-bold);\n}\n\n.mj-entity-badge--leaf[_ngcontent-%COMP%] {\n border-style: dashed;\n}\n\n.mj-entity-badge--root[_ngcontent-%COMP%] {\n border-style: dashed;\n}\n\n.mj-hierarchy-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n\n\n.mj-descendant-chains[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n position: relative;\n padding-left: 20px;\n}\n\n\n\n.mj-descendant-chains[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -4px;\n top: 50%;\n width: 4px;\n border-top: 1.5px solid var(--mj-text-muted);\n}\n\n.mj-descendant-chain[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n position: relative;\n padding: 2px 0;\n}\n\n\n\n.mj-descendant-chain[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -20px;\n top: 50%;\n width: 18px;\n border-top: 1.5px solid var(--mj-text-muted);\n}\n\n\n\n.mj-descendant-chain[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: -20px;\n top: 0;\n bottom: 0;\n border-left: 1.5px solid var(--mj-text-muted);\n}\n\n\n\n.mj-descendant-chain[_ngcontent-%COMP%]:first-child::after {\n top: 50%;\n}\n\n\n\n.mj-descendant-chain[_ngcontent-%COMP%]:last-child::after {\n bottom: 50%;\n}\n\n\n\n\n\n\n\n\n.mj-section-controls[_ngcontent-%COMP%] {\n gap: 6px;\n}\n\n.mj-forms-search-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.mj-section-search[_ngcontent-%COMP%] {\n max-width: 180px;\n font-size: 13px;\n padding: 6px 28px 6px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n outline: none;\n font-family: inherit;\n transition: all var(--mj-transition-base);\n}\n\n.mj-section-search[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n\n\n.mj-section-search--active[_ngcontent-%COMP%] {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n color: color-mix(in srgb, var(--mj-status-warning) 80%, black);\n font-weight: var(--mj-font-semibold);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n.mj-section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.mj-clear-search[_ngcontent-%COMP%] {\n position: absolute;\n right: 4px;\n padding: 4px;\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: var(--mj-text-xs);\n line-height: 1;\n}\n\n.mj-clear-search[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n\n\n\n\n.mj-dialog-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: _ngcontent-%COMP%_mj-fade-in 150ms ease;\n}\n\n.mj-dialog[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-lg);\n min-width: 400px;\n max-width: 550px;\n animation: _ngcontent-%COMP%_mj-slide-up 200ms ease;\n}\n\n.mj-dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.mj-dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: var(--mj-font-semibold);\n}\n\n.mj-dialog-close[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n font-size: var(--mj-text-base);\n transition: color var(--mj-transition-base);\n}\n\n.mj-dialog-close[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.mj-dialog-body[_ngcontent-%COMP%] {\n padding: 20px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n line-height: 1.6;\n}\n\n.mj-dialog-body[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.mj-dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n@keyframes _ngcontent-%COMP%_mj-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes _ngcontent-%COMP%_mj-slide-up {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n\n\n\n\n\n\n\n\n.mj-form-variant-picker-host[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n}\n\n.mj-form-variant-picker-trigger[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n max-width: 240px;\n}\n\n.mj-form-variant-picker-trigger[_ngcontent-%COMP%] .chev[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n}\n\n.mj-form-variant-picker-current-label[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 160px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.mj-form-variant-picker-host.open[_ngcontent-%COMP%] .mj-form-variant-picker-trigger[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-focus);\n}\n\n.mj-form-variant-picker-menu[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 50;\n min-width: 280px;\n max-height: 360px;\n overflow-y: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n padding: 4px 0;\n}\n\n.mj-form-variant-picker-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n color: var(--mj-text-primary);\n font-size: 13px;\n transition: background 120ms;\n}\n\n.mj-form-variant-picker-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.mj-form-variant-picker-row.current[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.mj-form-variant-picker-row.inactive[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.mj-form-variant-picker-row-main[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.mj-form-variant-picker-row-title[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.mj-form-variant-picker-row-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.mj-form-variant-picker-default-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-left: 4px;\n}\n\n.mj-form-variant-picker-default[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.mj-form-variant-picker-check[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n margin-top: 2px;\n}"], changeDetection: 0 });
1589
+ } }, dependencies: [i1.NgTemplateOutlet], styles: ["\n\n\n\n[_nghost-%COMP%] {\n display: block;\n}\n\n\n\n\n\n.mj-forms-edit-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 2px solid var(--mj-brand-primary);\n font-size: 13px;\n color: var(--mj-brand-primary);\n font-weight: var(--mj-font-medium);\n}\n\n.mj-forms-edit-banner[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n.mj-forms-edit-banner-icon--dirty[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-size: var(--mj-text-base);\n}\n\n.mj-forms-edit-banner-text[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n.mj-forms-edit-banner-dirty[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.mj-forms-edit-banner-dirty[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-weight: var(--mj-font-bold);\n}\n\n.mj-forms-edit-banner-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n\n\n.mj-forms-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 22px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n flex-wrap: wrap;\n z-index: 40;\n}\n\n.mj-forms-toolbar--sticky[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n}\n\n.mj-forms-toolbar--disabled[_ngcontent-%COMP%] {\n pointer-events: none;\n opacity: 0.7;\n}\n\n.mj-forms-toolbar-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.mj-forms-toolbar-separator[_ngcontent-%COMP%] {\n width: 1px;\n height: 24px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n.mj-forms-toolbar-spacer[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n\n\n\n\n.mj-forms-btn[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: var(--mj-font-medium);\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all var(--mj-transition-base) ease;\n white-space: nowrap;\n font-family: inherit;\n line-height: 1;\n}\n\n.mj-forms-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.mj-forms-btn[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n box-shadow: none;\n}\n\n.mj-forms-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mj-forms-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 15px;\n line-height: 1;\n}\n\n.mj-forms-btn--primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.mj-forms-btn--primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.mj-forms-btn--secondary[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n}\n\n.mj-forms-btn--secondary[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.mj-forms-btn--accent[_ngcontent-%COMP%] {\n background: var(--mj-brand-accent, #6366f1);\n color: var(--mj-text-inverse, #ffffff);\n border-color: var(--mj-brand-accent, #6366f1);\n}\n\n.mj-forms-btn--accent[_ngcontent-%COMP%]:hover {\n filter: brightness(1.1);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-accent, #6366f1) 30%, transparent);\n}\n\n.mj-forms-btn--danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n}\n\n.mj-forms-btn--danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n}\n\n.mj-forms-btn--ghost[_ngcontent-%COMP%] {\n border-color: transparent;\n background: transparent;\n}\n\n.mj-forms-btn--ghost[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n border-color: transparent;\n}\n\n.mj-forms-btn--icon-only[_ngcontent-%COMP%] {\n padding: 7px 9px;\n}\n\n.mj-forms-btn--sm[_ngcontent-%COMP%] {\n padding: 5px 12px;\n font-size: var(--mj-text-xs);\n}\n\n.mj-forms-btn--sm[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n}\n\n.mj-forms-btn-text[_ngcontent-%COMP%] {\n margin-left: 2px;\n}\n\n.mj-icon--favorite[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n\n\n.mj-forms-btn--list[_ngcontent-%COMP%] {\n position: relative;\n}\n\n\n\n.mj-forms-btn--history[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.mj-version-count-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n right: -10px;\n padding: 0 5px;\n font-size: 10px;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n background: linear-gradient(135deg, var(--mj-status-success) 0%, color-mix(in srgb, var(--mj-status-success) 85%, black) 100%);\n border-radius: var(--mj-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 16px;\n border: 2px solid var(--mj-bg-surface-card);\n white-space: nowrap;\n line-height: 1;\n}\n\n.mj-list-count-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n font-size: 10px;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n background: linear-gradient(135deg, var(--mj-status-info) 0%, color-mix(in srgb, var(--mj-status-info) 85%, black) 100%);\n border-radius: var(--mj-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-bg-surface-card);\n}\n\n\n\n\n\n.mj-entity-hierarchy[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.mj-entity-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all var(--mj-transition-base) ease;\n text-decoration: none;\n border: 1px solid transparent;\n}\n\n.mj-entity-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.mj-entity-badge--parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-accent) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-accent);\n border-color: color-mix(in srgb, var(--mj-brand-accent) 25%, transparent);\n}\n\n.mj-entity-badge--parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-accent) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-accent);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-accent) 15%, transparent);\n}\n\n.mj-entity-badge--current[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n font-size: 13px;\n color: var(--mj-text-primary);\n padding: 4px 8px;\n background: var(--mj-bg-surface-hover);\n border-radius: var(--mj-radius-sm);\n cursor: default;\n}\n\n.mj-entity-badge--child[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.mj-entity-badge--child[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-info) 18%, var(--mj-bg-surface));\n border-color: var(--mj-status-info);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-status-info) 15%, transparent);\n}\n\n.mj-entity-badge--overlapping[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-status-warning) 85%, black);\n border-color: color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n}\n\n.mj-entity-badge--overlapping[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 18%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-status-warning) 15%, transparent);\n}\n\n.mj-entity-badge-group[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.mj-child-count[_ngcontent-%COMP%] {\n background: var(--mj-status-info);\n color: var(--mj-text-inverse);\n font-size: 10px;\n padding: 1px 5px;\n border-radius: var(--mj-radius-full);\n font-weight: var(--mj-font-bold);\n}\n\n.mj-entity-badge--leaf[_ngcontent-%COMP%] {\n border-style: dashed;\n}\n\n.mj-entity-badge--root[_ngcontent-%COMP%] {\n border-style: dashed;\n}\n\n.mj-hierarchy-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n\n\n.mj-descendant-chains[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n position: relative;\n padding-left: 20px;\n}\n\n\n\n.mj-descendant-chains[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -4px;\n top: 50%;\n width: 4px;\n border-top: 1.5px solid var(--mj-text-muted);\n}\n\n.mj-descendant-chain[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n position: relative;\n padding: 2px 0;\n}\n\n\n\n.mj-descendant-chain[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -20px;\n top: 50%;\n width: 18px;\n border-top: 1.5px solid var(--mj-text-muted);\n}\n\n\n\n.mj-descendant-chain[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: -20px;\n top: 0;\n bottom: 0;\n border-left: 1.5px solid var(--mj-text-muted);\n}\n\n\n\n.mj-descendant-chain[_ngcontent-%COMP%]:first-child::after {\n top: 50%;\n}\n\n\n\n.mj-descendant-chain[_ngcontent-%COMP%]:last-child::after {\n bottom: 50%;\n}\n\n\n\n\n\n\n\n\n.mj-section-controls[_ngcontent-%COMP%] {\n gap: 6px;\n}\n\n.mj-forms-search-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.mj-section-search[_ngcontent-%COMP%] {\n max-width: 180px;\n font-size: 13px;\n padding: 6px 28px 6px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n outline: none;\n font-family: inherit;\n transition: all var(--mj-transition-base);\n}\n\n.mj-section-search[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n\n\n.mj-section-search--active[_ngcontent-%COMP%] {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n color: color-mix(in srgb, var(--mj-status-warning) 80%, black);\n font-weight: var(--mj-font-semibold);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n.mj-section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.mj-clear-search[_ngcontent-%COMP%] {\n position: absolute;\n right: 4px;\n padding: 4px;\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: var(--mj-text-xs);\n line-height: 1;\n}\n\n.mj-clear-search[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n\n\n\n\n.mj-dialog-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: _ngcontent-%COMP%_mj-fade-in 150ms ease;\n}\n\n.mj-dialog[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-lg);\n min-width: 400px;\n max-width: 550px;\n animation: _ngcontent-%COMP%_mj-slide-up 200ms ease;\n}\n\n.mj-dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.mj-dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: var(--mj-font-semibold);\n}\n\n.mj-dialog-close[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n font-size: var(--mj-text-base);\n transition: color var(--mj-transition-base);\n}\n\n.mj-dialog-close[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.mj-dialog-body[_ngcontent-%COMP%] {\n padding: 20px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n line-height: 1.6;\n}\n\n.mj-dialog-body[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.mj-dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n@keyframes _ngcontent-%COMP%_mj-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes _ngcontent-%COMP%_mj-slide-up {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n\n\n\n\n\n\n\n\n.mj-form-variant-picker-host[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n}\n\n.mj-form-variant-picker-trigger[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n max-width: 240px;\n}\n\n.mj-form-variant-picker-trigger[_ngcontent-%COMP%] .chev[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n}\n\n.mj-form-variant-picker-current-label[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 160px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.mj-form-variant-picker-host.open[_ngcontent-%COMP%] .mj-form-variant-picker-trigger[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-focus);\n}\n\n.mj-form-variant-picker-menu[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 50;\n min-width: 280px;\n max-height: 360px;\n overflow-y: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n padding: 4px 0;\n}\n\n.mj-form-variant-picker-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n color: var(--mj-text-primary);\n font-size: 13px;\n transition: background 120ms;\n}\n\n.mj-form-variant-picker-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.mj-form-variant-picker-row.current[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.mj-form-variant-picker-row.inactive[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.mj-form-variant-picker-row-main[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.mj-form-variant-picker-row-title[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.mj-form-variant-picker-row-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.mj-form-variant-picker-default-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-left: 4px;\n}\n\n.mj-form-variant-picker-default[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.mj-form-variant-picker-check[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n margin-top: 2px;\n}"], changeDetection: 0 });
1186
1590
  }
1187
1591
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MjFormToolbarComponent, [{
1188
1592
  type: Component,
1189
- args: [{ standalone: false, selector: 'mj-form-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- ============================================\n EDIT MODE BANNER (shows above toolbar when editing)\n ============================================ -->\n@if (EditMode && Config.ShowEditBanner) {\n <div class=\"mj-forms-edit-banner\">\n @if (DirtyFieldDisplayNames.length > 0) {\n <i class=\"fa-solid fa-circle-exclamation mj-forms-edit-banner-icon--dirty\"></i>\n <span class=\"mj-forms-edit-banner-dirty\">\n <strong>{{ DirtyFieldDisplayNames.length }}</strong>\n field{{ DirtyFieldDisplayNames.length === 1 ? '' : 's' }} modified\n &mdash; {{ DirtyFieldDisplayNames.join(', ') }}\n </span>\n } @else {\n <i class=\"fa-solid fa-pen-to-square\"></i>\n <span class=\"mj-forms-edit-banner-text\">Editing: {{ RecordDisplayName }}</span>\n }\n <div class=\"mj-forms-toolbar-spacer\"></div>\n <div class=\"mj-forms-edit-banner-actions\">\n <button class=\"mj-forms-btn mj-forms-btn--primary\" (click)=\"OnSave()\" [disabled]=\"IsSaving\" title=\"Save Changes\">\n <i class=\"fa-solid fa-floppy-disk\"></i>\n <span class=\"mj-forms-btn-text\">Save Changes</span>\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnCancel()\" [disabled]=\"IsSaving\" title=\"Discard Changes\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n <span class=\"mj-forms-btn-text\">Discard</span>\n </button>\n </div>\n </div>\n}\n\n<!-- ============================================\n MAIN TOOLBAR (read mode only \u2014 hidden in edit mode)\n ============================================ -->\n@if (!EditMode) {\n <div class=\"mj-forms-toolbar\" [class.mj-forms-toolbar--sticky]=\"Config.StickyToolbar\">\n\n <!-- Action buttons -->\n <div class=\"mj-forms-toolbar-group\">\n @if (Config.ShowEditButton && UserCanEdit) {\n <button class=\"mj-forms-btn\" (click)=\"OnEdit()\" title=\"Edit this Record\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n }\n @if (Config.ShowDeleteButton && UserCanDelete) {\n <button class=\"mj-forms-btn\" (click)=\"OnDeleteClick()\" title=\"Delete this Record\">\n <i class=\"fa-regular fa-trash-can\"></i>\n </button>\n }\n @if (Config.ShowFavoriteButton && FavoriteInitDone) {\n <button class=\"mj-forms-btn\" (click)=\"OnFavoriteToggle()\" [title]=\"IsFavorite ? 'Remove Favorite' : 'Make Favorite'\">\n <i [class]=\"IsFavorite ? 'fa-solid fa-star mj-icon--favorite' : 'fa-regular fa-star'\"></i>\n </button>\n }\n @if (Config.ShowHistoryButton && TracksChanges) {\n <button class=\"mj-forms-btn mj-forms-btn--history\" (click)=\"OnHistory()\"\n [title]=\"VersionCount > 0 ? VersionCount + ' version(s) tracked' : 'Record Changes'\">\n <i class=\"fa-regular fa-clock\"></i>\n @if (VersionCount > 0) {\n <span class=\"mj-version-count-badge\">v{{ VersionCount }}</span>\n }\n </button>\n }\n @if (Config.ShowListButton) {\n <button class=\"mj-forms-btn mj-forms-btn--list\" (click)=\"OnListManagement()\"\n [title]=\"ListCount > 0 ? 'Member of ' + ListCount + ' list(s)' : 'Add to a list'\">\n <i class=\"fa-regular fa-bookmark\"></i>\n @if (ListCount > 0) {\n <span class=\"mj-list-count-badge\">{{ ListCount }}</span>\n }\n </button>\n }\n @if (Config.ShowTagsButton) {\n <button class=\"mj-forms-btn\" (click)=\"OnTagsPanel()\"\n [title]=\"TagCount > 0 ? TagCount + ' tag(s)' : 'View tags'\">\n <i class=\"fa-solid fa-tags\"></i>\n @if (TagCount > 0) {\n <span class=\"mj-list-count-badge\">{{ TagCount }}</span>\n }\n </button>\n }\n\n <!-- Custom toolbar buttons -->\n @for (button of Config.CustomButtons; track button.Key) {\n @if (button.Visible !== false) {\n <button class=\"mj-forms-btn\"\n [class]=\"button.CssClass || ''\"\n [disabled]=\"button.Disabled || false\"\n [title]=\"button.Description\"\n (click)=\"OnCustomButtonClick(button)\">\n <i [class]=\"button.Icon\"></i>\n </button>\n }\n }\n </div>\n\n <!-- Separator before hierarchy -->\n @if (Config.ShowEntityHierarchy && IsInHierarchy) {\n <div class=\"mj-forms-toolbar-separator\"></div>\n }\n\n <!-- IS-A Entity Hierarchy Breadcrumb (bidirectional: Root \u2192 ... \u2192 Current \u2192 ... \u2192 Leaf) -->\n @if (Config.ShowEntityHierarchy && IsInHierarchy) {\n <div class=\"mj-entity-hierarchy\">\n <!-- Parent chain (root \u2192 ... \u2192 immediate parent) -->\n @for (parent of ParentChain; track parent.ID) {\n <a class=\"mj-entity-badge mj-entity-badge--parent\"\n [title]=\"'Navigate to parent: ' + parent.Name\"\n (click)=\"OnParentBadgeClick(parent, $event)\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n {{ parent.Name }}\n </a>\n <span class=\"mj-hierarchy-arrow\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n }\n\n <!-- Current entity (always shown) -->\n <span class=\"mj-entity-badge mj-entity-badge--current\">{{ EntityInfo?.Name }}</span>\n\n <!-- Descendant tree (recursive: inline for single paths, branching for multiple) -->\n @if (DescendantTree.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: DescendantTree }\"></ng-container>\n }\n </div>\n }\n\n <!-- Spacer pushes section controls to the right -->\n <div class=\"mj-forms-toolbar-spacer\"></div>\n\n <!-- Form-variant picker: right-side toolbar button. Opens a dropdown\n with the Default (CodeGen Angular) form + every variant the host\n supplied. Persists the user's pick via the host's resolver (which\n goes through UserInfoEngine settings, not localStorage). Hidden\n entirely when the host disables ShowFormVariantPicker or supplied\n fewer than 2 variants. -->\n @if (ShowVariantPickerButton) {\n <div class=\"mj-form-variant-picker-host\"\n [class.open]=\"VariantMenuOpen\">\n <button class=\"mj-forms-btn mj-form-variant-picker-trigger\"\n type=\"button\"\n (click)=\"ToggleVariantMenu()\"\n (blur)=\"CloseVariantMenu()\"\n [title]=\"'Form variant: ' + CurrentVariantLabel + ' \u2014 click to change'\">\n <i class=\"fa-solid fa-pen-ruler\"></i>\n <span class=\"mj-form-variant-picker-current-label\">{{ CurrentVariantLabel }}</span>\n <i class=\"fa-solid fa-chevron-down chev\"></i>\n </button>\n @if (VariantMenuOpen) {\n <div class=\"mj-form-variant-picker-menu\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"mj-form-variant-picker-row mj-form-variant-picker-default\"\n [class.current]=\"!CurrentVariantID\"\n (click)=\"OnVariantClick(null)\">\n <div class=\"mj-form-variant-picker-row-main\">\n <span class=\"mj-form-variant-picker-row-title\">\n Default form <span class=\"mj-form-variant-picker-default-tag\">(default)</span>\n </span>\n <span class=\"mj-form-variant-picker-row-sub\">CodeGen-generated Angular fallback</span>\n </div>\n @if (!CurrentVariantID) {\n <i class=\"fa-solid fa-check mj-form-variant-picker-check\"></i>\n }\n </div>\n @for (v of Variants; track v.ID) {\n <div class=\"mj-form-variant-picker-row\"\n [class.current]=\"v.ID === CurrentVariantID\"\n [class.inactive]=\"v.Status !== 'Active'\"\n (click)=\"OnVariantClick(v.ID)\">\n <div class=\"mj-form-variant-picker-row-main\">\n <span class=\"mj-form-variant-picker-row-title\">{{ v.Label }}</span>\n <span class=\"mj-form-variant-picker-row-sub\">{{ VariantSubtitle(v) }}</span>\n </div>\n @if (v.ID === CurrentVariantID) {\n <i class=\"fa-solid fa-check mj-form-variant-picker-check\"></i>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Section Controls -->\n @if (Config.ShowSectionControls) {\n <div class=\"mj-forms-toolbar-group mj-section-controls\">\n @if (Config.ShowSectionFilter) {\n <div class=\"mj-forms-search-wrapper\">\n <input type=\"text\"\n class=\"mj-section-search\"\n [class.mj-section-search--active]=\"SearchFilter\"\n [value]=\"SearchFilter\"\n (input)=\"OnFilterInput($event)\"\n placeholder=\"Search sections...\">\n @if (SearchFilter) {\n <button class=\"mj-clear-search\" (click)=\"OnClearFilter()\" title=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n @if (Config.ShowExpandCollapseAllButtons) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n [disabled]=\"ExpandedSectionCount >= VisibleSectionCount\"\n (click)=\"OnExpandAll()\" title=\"Expand all sections\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n [disabled]=\"ExpandedSectionCount === 0\"\n (click)=\"OnCollapseAll()\" title=\"Collapse all sections\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n }\n @if (HasCustomSectionOrder) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\" (click)=\"OnResetSectionOrder()\" title=\"Reset section order\">\n <i class=\"fa-solid fa-arrow-rotate-left\"></i>\n </button>\n }\n @if (Config.ShowSectionManager) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n (click)=\"OnManageSections()\" title=\"Manage section order\">\n <i class=\"fa-solid fa-bars-staggered\"></i>\n </button>\n }\n @if (Config.ShowWidthToggle) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n (click)=\"OnToggleWidthMode()\"\n [title]=\"WidthMode === 'centered' ? 'Expand to full width' : 'Center content'\">\n <i [class]=\"WidthMode === 'centered' ? 'fa-solid fa-arrows-left-right-to-line' : 'fa-solid fa-compress'\"></i>\n </button>\n }\n </div>\n }\n\n <!-- Additional actions slot -->\n @if (AdditionalActionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"AdditionalActionsTemplate\"></ng-container>\n }\n <ng-content select=\"[toolbar-additional-controls]\"></ng-content>\n </div>\n}\n\n<!-- ============================================\n DISCARD CHANGES CONFIRMATION DIALOG\n ============================================ -->\n@if (ShowDiscardDialog) {\n <div class=\"mj-dialog-overlay\" (click)=\"OnDiscardCancel()\">\n <div class=\"mj-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"mj-dialog-header\">\n <h3>Discard Changes?</h3>\n <button class=\"mj-dialog-close\" (click)=\"OnDiscardCancel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"mj-dialog-body\">\n <p>You have <strong>{{ DirtyFieldDisplayNames.length }}</strong> unsaved change{{ DirtyFieldDisplayNames.length === 1 ? '' : 's' }}. Are you sure you want to discard {{ DirtyFieldDisplayNames.length === 1 ? 'it' : 'them' }}?</p>\n </div>\n <div class=\"mj-dialog-footer\">\n <button class=\"mj-forms-btn mj-forms-btn--danger\" (click)=\"OnDiscardConfirm()\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n Discard Changes\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnDiscardCancel()\">\n Keep Editing\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- ============================================\n DELETE CONFIRMATION DIALOG\n ============================================ -->\n@if (ShowDeleteDialog) {\n <div class=\"mj-dialog-overlay\" (click)=\"OnDeleteCancel()\">\n <div class=\"mj-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"mj-dialog-header\">\n <h3>Confirm Deletion</h3>\n <button class=\"mj-dialog-close\" (click)=\"OnDeleteCancel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"mj-dialog-body\">\n <p>Are you sure you want to delete this record? This action cannot be undone.</p>\n </div>\n <div class=\"mj-dialog-footer\">\n <button class=\"mj-forms-btn mj-forms-btn--danger\" (click)=\"OnDeleteConfirm()\">\n <i class=\"fa-solid fa-trash-can\"></i>\n Delete\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnDeleteCancel()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- Recursive template for IS-A descendant tree rendering.\n Single child at a level \u2192 inline with chevron.\n Multiple children at a level \u2192 tree branch with CSS connector lines. -->\n<ng-template #descendantTreeTpl let-items=\"items\">\n @if (items.length === 1) {\n <span class=\"mj-hierarchy-arrow\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <a class=\"mj-entity-badge mj-entity-badge--child\"\n [title]=\"'Navigate to: ' + items[0].EntityName\"\n (click)=\"OnDescendantBadgeClick(items[0].EntityName, $event)\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ items[0].EntityName }}\n </a>\n @if (items[0].Children.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: items[0].Children }\"></ng-container>\n }\n } @else if (items.length > 1) {\n <div class=\"mj-descendant-chains\">\n @for (item of items; track item.EntityName) {\n <div class=\"mj-descendant-chain\">\n <a class=\"mj-entity-badge mj-entity-badge--child\"\n [title]=\"'Navigate to: ' + item.EntityName\"\n (click)=\"OnDescendantBadgeClick(item.EntityName, $event)\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ item.EntityName }}\n </a>\n @if (item.Children.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: item.Children }\"></ng-container>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n", styles: ["/* ============================================\n FORM TOOLBAR \u2014 uses global --mj-* design tokens\n ============================================ */\n:host {\n display: block;\n}\n\n/* ============================================\n EDIT BANNER\n ============================================ */\n.mj-forms-edit-banner {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 2px solid var(--mj-brand-primary);\n font-size: 13px;\n color: var(--mj-brand-primary);\n font-weight: var(--mj-font-medium);\n}\n\n.mj-forms-edit-banner > i {\n font-size: var(--mj-text-sm);\n}\n\n.mj-forms-edit-banner-icon--dirty {\n color: var(--mj-status-warning);\n font-size: var(--mj-text-base);\n}\n\n.mj-forms-edit-banner-text {\n font-size: var(--mj-text-sm);\n}\n\n.mj-forms-edit-banner-dirty {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.mj-forms-edit-banner-dirty strong {\n color: var(--mj-status-warning);\n font-weight: var(--mj-font-bold);\n}\n\n.mj-forms-edit-banner-actions {\n display: flex;\n gap: 8px;\n}\n\n/* ============================================\n MAIN TOOLBAR\n ============================================ */\n.mj-forms-toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 22px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n flex-wrap: wrap;\n z-index: 40;\n}\n\n.mj-forms-toolbar--sticky {\n position: sticky;\n top: 0;\n}\n\n.mj-forms-toolbar--disabled {\n pointer-events: none;\n opacity: 0.7;\n}\n\n.mj-forms-toolbar-group {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.mj-forms-toolbar-separator {\n width: 1px;\n height: 24px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n.mj-forms-toolbar-spacer {\n flex: 1;\n}\n\n/* ============================================\n BUTTONS\n ============================================ */\n.mj-forms-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: var(--mj-font-medium);\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all var(--mj-transition-base) ease;\n white-space: nowrap;\n font-family: inherit;\n line-height: 1;\n}\n\n.mj-forms-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.mj-forms-btn:active {\n transform: translateY(0);\n box-shadow: none;\n}\n\n.mj-forms-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mj-forms-btn i {\n font-size: 15px;\n line-height: 1;\n}\n\n.mj-forms-btn--primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.mj-forms-btn--primary:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.mj-forms-btn--danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n}\n\n.mj-forms-btn--danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n}\n\n.mj-forms-btn--ghost {\n border-color: transparent;\n background: transparent;\n}\n\n.mj-forms-btn--ghost:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n border-color: transparent;\n}\n\n.mj-forms-btn--icon-only {\n padding: 7px 9px;\n}\n\n.mj-forms-btn--sm {\n padding: 5px 12px;\n font-size: var(--mj-text-xs);\n}\n\n.mj-forms-btn--sm i {\n font-size: var(--mj-text-xs);\n}\n\n.mj-forms-btn-text {\n margin-left: 2px;\n}\n\n.mj-icon--favorite {\n color: var(--mj-status-warning);\n}\n\n/* List button with count badge */\n.mj-forms-btn--list {\n position: relative;\n}\n\n/* History button with version badge */\n.mj-forms-btn--history {\n position: relative;\n}\n\n.mj-version-count-badge {\n position: absolute;\n top: -6px;\n right: -10px;\n padding: 0 5px;\n font-size: 10px;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n background: linear-gradient(135deg, var(--mj-status-success) 0%, color-mix(in srgb, var(--mj-status-success) 85%, black) 100%);\n border-radius: var(--mj-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 16px;\n border: 2px solid var(--mj-bg-surface-card);\n white-space: nowrap;\n line-height: 1;\n}\n\n.mj-list-count-badge {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n font-size: 10px;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n background: linear-gradient(135deg, var(--mj-status-info) 0%, color-mix(in srgb, var(--mj-status-info) 85%, black) 100%);\n border-radius: var(--mj-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-bg-surface-card);\n}\n\n/* ============================================\n IS-A ENTITY HIERARCHY\n ============================================ */\n.mj-entity-hierarchy {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.mj-entity-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all var(--mj-transition-base) ease;\n text-decoration: none;\n border: 1px solid transparent;\n}\n\n.mj-entity-badge i {\n font-size: 11px;\n}\n\n.mj-entity-badge--parent {\n background: color-mix(in srgb, var(--mj-brand-accent) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-accent);\n border-color: color-mix(in srgb, var(--mj-brand-accent) 25%, transparent);\n}\n\n.mj-entity-badge--parent:hover {\n background: color-mix(in srgb, var(--mj-brand-accent) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-accent);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-accent) 15%, transparent);\n}\n\n.mj-entity-badge--current {\n font-weight: var(--mj-font-semibold);\n font-size: 13px;\n color: var(--mj-text-primary);\n padding: 4px 8px;\n background: var(--mj-bg-surface-hover);\n border-radius: var(--mj-radius-sm);\n cursor: default;\n}\n\n.mj-entity-badge--child {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.mj-entity-badge--child:hover {\n background: color-mix(in srgb, var(--mj-status-info) 18%, var(--mj-bg-surface));\n border-color: var(--mj-status-info);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-status-info) 15%, transparent);\n}\n\n.mj-entity-badge--overlapping {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-status-warning) 85%, black);\n border-color: color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n}\n\n.mj-entity-badge--overlapping:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 18%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-status-warning) 15%, transparent);\n}\n\n.mj-entity-badge-group {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.mj-child-count {\n background: var(--mj-status-info);\n color: var(--mj-text-inverse);\n font-size: 10px;\n padding: 1px 5px;\n border-radius: var(--mj-radius-full);\n font-weight: var(--mj-font-bold);\n}\n\n.mj-entity-badge--leaf {\n border-style: dashed;\n}\n\n.mj-entity-badge--root {\n border-style: dashed;\n}\n\n.mj-hierarchy-arrow {\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n/* Descendant chain tree (connecting lines when multiple chains branch) */\n.mj-descendant-chains {\n display: flex;\n flex-direction: column;\n gap: 6px;\n position: relative;\n padding-left: 20px;\n}\n\n/* Horizontal connector from parent entity badge to tree trunk */\n.mj-descendant-chains::before {\n content: '';\n position: absolute;\n left: -4px;\n top: 50%;\n width: 4px;\n border-top: 1.5px solid var(--mj-text-muted);\n}\n\n.mj-descendant-chain {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n position: relative;\n padding: 2px 0;\n}\n\n/* Horizontal branch line from trunk to chain content */\n.mj-descendant-chain::before {\n content: '';\n position: absolute;\n left: -20px;\n top: 50%;\n width: 18px;\n border-top: 1.5px solid var(--mj-text-muted);\n}\n\n/* Vertical trunk segment (each chain draws its portion) */\n.mj-descendant-chain::after {\n content: '';\n position: absolute;\n left: -20px;\n top: 0;\n bottom: 0;\n border-left: 1.5px solid var(--mj-text-muted);\n}\n\n/* First chain: trunk starts from center */\n.mj-descendant-chain:first-child::after {\n top: 50%;\n}\n\n/* Last chain: trunk ends at center */\n.mj-descendant-chain:last-child::after {\n bottom: 50%;\n}\n\n/* (dirty summary removed \u2014 now inline in edit banner) */\n\n/* ============================================\n SECTION CONTROLS\n ============================================ */\n.mj-section-controls {\n gap: 6px;\n}\n\n.mj-forms-search-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.mj-section-search {\n max-width: 180px;\n font-size: 13px;\n padding: 6px 28px 6px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n outline: none;\n font-family: inherit;\n transition: all var(--mj-transition-base);\n}\n\n.mj-section-search:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n/* Active filter highlight \u2014 matches the yellow used on matched panel/field names */\n.mj-section-search--active {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n color: color-mix(in srgb, var(--mj-status-warning) 80%, black);\n font-weight: var(--mj-font-semibold);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n.mj-section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.mj-clear-search {\n position: absolute;\n right: 4px;\n padding: 4px;\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: var(--mj-text-xs);\n line-height: 1;\n}\n\n.mj-clear-search:hover {\n color: var(--mj-text-secondary);\n}\n\n/* ============================================\n DIALOG (lightweight inline)\n ============================================ */\n.mj-dialog-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: mj-fade-in 150ms ease;\n}\n\n.mj-dialog {\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-lg);\n min-width: 400px;\n max-width: 550px;\n animation: mj-slide-up 200ms ease;\n}\n\n.mj-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.mj-dialog-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: var(--mj-font-semibold);\n}\n\n.mj-dialog-close {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n font-size: var(--mj-text-base);\n transition: color var(--mj-transition-base);\n}\n\n.mj-dialog-close:hover {\n color: var(--mj-text-primary);\n}\n\n.mj-dialog-body {\n padding: 20px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n line-height: 1.6;\n}\n\n.mj-dialog-body p {\n margin: 0;\n}\n\n.mj-dialog-footer {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n@keyframes mj-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes mj-slide-up {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n\n/* ============================================================ */\n/* FORM-VARIANT PICKER (toolbar-embedded; right-side) */\n/* ============================================================ */\n\n.mj-form-variant-picker-host {\n position: relative;\n display: inline-flex;\n}\n\n.mj-form-variant-picker-trigger {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n max-width: 240px;\n}\n\n.mj-form-variant-picker-trigger .chev {\n font-size: 10px;\n opacity: 0.7;\n}\n\n.mj-form-variant-picker-current-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 160px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.mj-form-variant-picker-host.open .mj-form-variant-picker-trigger {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-focus);\n}\n\n.mj-form-variant-picker-menu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 50;\n min-width: 280px;\n max-height: 360px;\n overflow-y: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n padding: 4px 0;\n}\n\n.mj-form-variant-picker-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n color: var(--mj-text-primary);\n font-size: 13px;\n transition: background 120ms;\n}\n\n.mj-form-variant-picker-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.mj-form-variant-picker-row.current {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.mj-form-variant-picker-row.inactive {\n opacity: 0.6;\n}\n\n.mj-form-variant-picker-row-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.mj-form-variant-picker-row-title {\n font-weight: 600;\n}\n\n.mj-form-variant-picker-row-sub {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.mj-form-variant-picker-default-tag {\n font-size: 10px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-left: 4px;\n}\n\n.mj-form-variant-picker-default {\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.mj-form-variant-picker-check {\n color: var(--mj-brand-primary);\n font-size: 12px;\n margin-top: 2px;\n}\n"] }]
1593
+ args: [{ standalone: false, selector: 'mj-form-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- ============================================\n EDIT MODE BANNER (shows above toolbar when editing)\n ============================================ -->\n@if (EditMode && Config.ShowEditBanner) {\n <div class=\"mj-forms-edit-banner\">\n @if (DirtyFieldDisplayNames.length > 0) {\n <i class=\"fa-solid fa-circle-exclamation mj-forms-edit-banner-icon--dirty\"></i>\n <span class=\"mj-forms-edit-banner-dirty\">\n <strong>{{ DirtyFieldDisplayNames.length }}</strong>\n field{{ DirtyFieldDisplayNames.length === 1 ? '' : 's' }} modified\n &mdash; {{ DirtyFieldDisplayNames.join(', ') }}\n </span>\n } @else {\n <i class=\"fa-solid fa-pen-to-square\"></i>\n <span class=\"mj-forms-edit-banner-text\">Editing: {{ RecordDisplayName }}</span>\n }\n <div class=\"mj-forms-toolbar-spacer\"></div>\n <div class=\"mj-forms-edit-banner-actions\">\n @for (item of ResolvedEditBeforeSaveItems; track item.Key) {\n <button class=\"mj-forms-btn\"\n [class.mj-forms-btn--primary]=\"item.Variant === 'primary'\"\n [class.mj-forms-btn--secondary]=\"item.Variant === 'secondary'\"\n [class.mj-forms-btn--accent]=\"item.Variant === 'accent'\"\n [class.mj-forms-btn--danger]=\"item.Variant === 'danger'\"\n [class.mj-forms-btn--ghost]=\"item.Variant === 'ghost'\"\n [class]=\"item.CssClass\"\n [disabled]=\"item.Disabled || item.IsLoading || IsSaving\"\n [title]=\"item.Description\"\n (click)=\"OnToolbarItemClick(item, $event)\">\n @if (item.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (item.Icon) {\n <i [class]=\"item.Icon\"></i>\n }\n @if (item.Text) {\n <span class=\"mj-forms-btn-text\">{{ item.Text }}</span>\n }\n @if (item.Badge != null) {\n <span class=\"mj-list-count-badge\">{{ item.Badge }}</span>\n }\n </button>\n }\n <button class=\"mj-forms-btn mj-forms-btn--primary\" (click)=\"OnSave()\" [disabled]=\"IsSaving\" title=\"Save Changes\">\n <i class=\"fa-solid fa-floppy-disk\"></i>\n <span class=\"mj-forms-btn-text\">Save Changes</span>\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnCancel()\" [disabled]=\"IsSaving\" title=\"Discard Changes\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n <span class=\"mj-forms-btn-text\">Discard</span>\n </button>\n @for (item of ResolvedEditAfterSaveItems; track item.Key) {\n <button class=\"mj-forms-btn\"\n [class.mj-forms-btn--primary]=\"item.Variant === 'primary'\"\n [class.mj-forms-btn--secondary]=\"item.Variant === 'secondary'\"\n [class.mj-forms-btn--accent]=\"item.Variant === 'accent'\"\n [class.mj-forms-btn--danger]=\"item.Variant === 'danger'\"\n [class.mj-forms-btn--ghost]=\"item.Variant === 'ghost'\"\n [class]=\"item.CssClass\"\n [disabled]=\"item.Disabled || item.IsLoading || IsSaving\"\n [title]=\"item.Description\"\n (click)=\"OnToolbarItemClick(item, $event)\">\n @if (item.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (item.Icon) {\n <i [class]=\"item.Icon\"></i>\n }\n @if (item.Text) {\n <span class=\"mj-forms-btn-text\">{{ item.Text }}</span>\n }\n @if (item.Badge != null) {\n <span class=\"mj-list-count-badge\">{{ item.Badge }}</span>\n }\n </button>\n }\n </div>\n </div>\n}\n\n<!-- ============================================\n MAIN TOOLBAR (read mode only \u2014 hidden in edit mode)\n ============================================ -->\n@if (!EditMode) {\n <div class=\"mj-forms-toolbar\" [class.mj-forms-toolbar--sticky]=\"Config.StickyToolbar\">\n\n <!-- Action buttons -->\n <div class=\"mj-forms-toolbar-group\">\n @for (item of ResolvedActionItems; track item.Key) {\n <button class=\"mj-forms-btn\"\n [class.mj-forms-btn--primary]=\"item.Variant === 'primary'\"\n [class.mj-forms-btn--secondary]=\"item.Variant === 'secondary'\"\n [class.mj-forms-btn--accent]=\"item.Variant === 'accent'\"\n [class.mj-forms-btn--danger]=\"item.Variant === 'danger'\"\n [class.mj-forms-btn--ghost]=\"item.Variant === 'ghost'\"\n [class.mj-forms-btn--history]=\"item.Key === 'history'\"\n [class.mj-forms-btn--list]=\"item.Key === 'list'\"\n [class.mj-forms-btn--tags]=\"item.Key === 'tags'\"\n [class.mj-forms-btn--attachments]=\"item.Key === 'attachments'\"\n [class]=\"item.CssClass\"\n [disabled]=\"item.Disabled || item.IsLoading\"\n [title]=\"item.Description\"\n (click)=\"OnToolbarItemClick(item, $event)\">\n @if (item.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (item.Icon) {\n <i [class]=\"item.Icon\"></i>\n }\n @if (item.Text) {\n <span class=\"mj-forms-btn-text\">{{ item.Text }}</span>\n }\n @if (item.Badge != null) {\n <span [class]=\"item.Key === 'history' ? 'mj-version-count-badge' : 'mj-list-count-badge'\">{{ item.Badge }}</span>\n }\n </button>\n }\n </div>\n\n <!-- Separator before hierarchy -->\n @if (Config.ShowEntityHierarchy && IsInHierarchy) {\n <div class=\"mj-forms-toolbar-separator\"></div>\n }\n\n <!-- IS-A Entity Hierarchy Breadcrumb (bidirectional: Root \u2192 ... \u2192 Current \u2192 ... \u2192 Leaf) -->\n @if (Config.ShowEntityHierarchy && IsInHierarchy) {\n <div class=\"mj-entity-hierarchy\">\n <!-- Parent chain (root \u2192 ... \u2192 immediate parent) -->\n @for (parent of ParentChain; track parent.ID) {\n <a class=\"mj-entity-badge mj-entity-badge--parent\"\n [title]=\"'Navigate to parent: ' + parent.Name\"\n (click)=\"OnParentBadgeClick(parent, $event)\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n {{ parent.Name }}\n </a>\n <span class=\"mj-hierarchy-arrow\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n }\n\n <!-- Current entity (always shown) -->\n <span class=\"mj-entity-badge mj-entity-badge--current\">{{ EntityInfo?.Name }}</span>\n\n <!-- Descendant tree (recursive: inline for single paths, branching for multiple) -->\n @if (DescendantTree.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: DescendantTree }\"></ng-container>\n }\n </div>\n }\n\n <!-- Spacer pushes section controls to the right -->\n <div class=\"mj-forms-toolbar-spacer\"></div>\n\n <!-- Form-variant picker: right-side toolbar button. Opens a dropdown\n with the Default (CodeGen Angular) form + every variant the host\n supplied. Persists the user's pick via the host's resolver (which\n goes through UserInfoEngine settings, not localStorage). Hidden\n entirely when the host disables ShowFormVariantPicker or supplied\n fewer than 2 variants. -->\n @if (ShowVariantPickerButton) {\n <div class=\"mj-form-variant-picker-host\"\n [class.open]=\"VariantMenuOpen\">\n <button class=\"mj-forms-btn mj-form-variant-picker-trigger\"\n type=\"button\"\n (click)=\"ToggleVariantMenu()\"\n (blur)=\"CloseVariantMenu()\"\n [title]=\"'Form variant: ' + CurrentVariantLabel + ' \u2014 click to change'\">\n <i class=\"fa-solid fa-pen-ruler\"></i>\n <span class=\"mj-form-variant-picker-current-label\">{{ CurrentVariantLabel }}</span>\n <i class=\"fa-solid fa-chevron-down chev\"></i>\n </button>\n @if (VariantMenuOpen) {\n <div class=\"mj-form-variant-picker-menu\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"mj-form-variant-picker-row mj-form-variant-picker-default\"\n [class.current]=\"!CurrentVariantID\"\n (click)=\"OnVariantClick(null)\">\n <div class=\"mj-form-variant-picker-row-main\">\n <span class=\"mj-form-variant-picker-row-title\">\n Default form <span class=\"mj-form-variant-picker-default-tag\">(default)</span>\n </span>\n <span class=\"mj-form-variant-picker-row-sub\">CodeGen-generated Angular fallback</span>\n </div>\n @if (!CurrentVariantID) {\n <i class=\"fa-solid fa-check mj-form-variant-picker-check\"></i>\n }\n </div>\n @for (v of Variants; track v.ID) {\n <div class=\"mj-form-variant-picker-row\"\n [class.current]=\"v.ID === CurrentVariantID\"\n [class.inactive]=\"v.Status !== 'Active'\"\n (click)=\"OnVariantClick(v.ID)\">\n <div class=\"mj-form-variant-picker-row-main\">\n <span class=\"mj-form-variant-picker-row-title\">{{ v.Label }}</span>\n <span class=\"mj-form-variant-picker-row-sub\">{{ VariantSubtitle(v) }}</span>\n </div>\n @if (v.ID === CurrentVariantID) {\n <i class=\"fa-solid fa-check mj-form-variant-picker-check\"></i>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Section Controls -->\n @if (Config.ShowSectionControls) {\n <div class=\"mj-forms-toolbar-group mj-section-controls\">\n @if (Config.ShowSectionFilter) {\n <div class=\"mj-forms-search-wrapper\">\n <input type=\"text\"\n class=\"mj-section-search\"\n [class.mj-section-search--active]=\"SearchFilter\"\n [value]=\"SearchFilter\"\n (input)=\"OnFilterInput($event)\"\n placeholder=\"Search sections...\">\n @if (SearchFilter) {\n <button class=\"mj-clear-search\" (click)=\"OnClearFilter()\" title=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n @if (ShowExpandCollapseAll) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n [disabled]=\"ExpandedSectionCount >= VisibleSectionCount\"\n (click)=\"OnExpandAll()\" title=\"Expand all sections\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n [disabled]=\"ExpandedSectionCount === 0\"\n (click)=\"OnCollapseAll()\" title=\"Collapse all sections\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n }\n @if (HasCustomSectionOrder) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\" (click)=\"OnResetSectionOrder()\" title=\"Reset section order\">\n <i class=\"fa-solid fa-arrow-rotate-left\"></i>\n </button>\n }\n @if (Config.ShowSectionManager) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n (click)=\"OnManageSections()\" title=\"Manage section order\">\n <i class=\"fa-solid fa-bars-staggered\"></i>\n </button>\n }\n @if (Config.ShowWidthToggle) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n (click)=\"OnToggleWidthMode()\"\n [title]=\"WidthMode === 'centered' ? 'Expand to full width' : 'Center content'\">\n <i [class]=\"WidthMode === 'centered' ? 'fa-solid fa-arrows-left-right-to-line' : 'fa-solid fa-compress'\"></i>\n </button>\n }\n </div>\n }\n\n <!-- Additional actions slot -->\n @if (AdditionalActionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"AdditionalActionsTemplate\"></ng-container>\n }\n <ng-content select=\"[toolbar-additional-controls]\"></ng-content>\n </div>\n}\n\n<!-- ============================================\n DISCARD CHANGES CONFIRMATION DIALOG\n ============================================ -->\n@if (ShowDiscardDialog) {\n <div class=\"mj-dialog-overlay\" (click)=\"OnDiscardCancel()\">\n <div class=\"mj-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"mj-dialog-header\">\n <h3>Discard Changes?</h3>\n <button class=\"mj-dialog-close\" (click)=\"OnDiscardCancel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"mj-dialog-body\">\n <p>You have <strong>{{ DirtyFieldDisplayNames.length }}</strong> unsaved change{{ DirtyFieldDisplayNames.length === 1 ? '' : 's' }}. Are you sure you want to discard {{ DirtyFieldDisplayNames.length === 1 ? 'it' : 'them' }}?</p>\n </div>\n <div class=\"mj-dialog-footer\">\n <button class=\"mj-forms-btn mj-forms-btn--danger\" (click)=\"OnDiscardConfirm()\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n Discard Changes\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnDiscardCancel()\">\n Keep Editing\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- ============================================\n DELETE CONFIRMATION DIALOG\n ============================================ -->\n@if (ShowDeleteDialog) {\n <div class=\"mj-dialog-overlay\" (click)=\"OnDeleteCancel()\">\n <div class=\"mj-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"mj-dialog-header\">\n <h3>Confirm Deletion</h3>\n <button class=\"mj-dialog-close\" (click)=\"OnDeleteCancel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"mj-dialog-body\">\n <p>Are you sure you want to delete this record? This action cannot be undone.</p>\n </div>\n <div class=\"mj-dialog-footer\">\n <button class=\"mj-forms-btn mj-forms-btn--danger\" (click)=\"OnDeleteConfirm()\">\n <i class=\"fa-solid fa-trash-can\"></i>\n Delete\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnDeleteCancel()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- Recursive template for IS-A descendant tree rendering.\n Single child at a level \u2192 inline with chevron.\n Multiple children at a level \u2192 tree branch with CSS connector lines. -->\n<ng-template #descendantTreeTpl let-items=\"items\">\n @if (items.length === 1) {\n <span class=\"mj-hierarchy-arrow\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <a class=\"mj-entity-badge mj-entity-badge--child\"\n [title]=\"'Navigate to: ' + items[0].EntityName\"\n (click)=\"OnDescendantBadgeClick(items[0].EntityName, $event)\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ items[0].EntityName }}\n </a>\n @if (items[0].Children.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: items[0].Children }\"></ng-container>\n }\n } @else if (items.length > 1) {\n <div class=\"mj-descendant-chains\">\n @for (item of items; track item.EntityName) {\n <div class=\"mj-descendant-chain\">\n <a class=\"mj-entity-badge mj-entity-badge--child\"\n [title]=\"'Navigate to: ' + item.EntityName\"\n (click)=\"OnDescendantBadgeClick(item.EntityName, $event)\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ item.EntityName }}\n </a>\n @if (item.Children.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: item.Children }\"></ng-container>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n", styles: ["/* ============================================\n FORM TOOLBAR \u2014 uses global --mj-* design tokens\n ============================================ */\n:host {\n display: block;\n}\n\n/* ============================================\n EDIT BANNER\n ============================================ */\n.mj-forms-edit-banner {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 2px solid var(--mj-brand-primary);\n font-size: 13px;\n color: var(--mj-brand-primary);\n font-weight: var(--mj-font-medium);\n}\n\n.mj-forms-edit-banner > i {\n font-size: var(--mj-text-sm);\n}\n\n.mj-forms-edit-banner-icon--dirty {\n color: var(--mj-status-warning);\n font-size: var(--mj-text-base);\n}\n\n.mj-forms-edit-banner-text {\n font-size: var(--mj-text-sm);\n}\n\n.mj-forms-edit-banner-dirty {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.mj-forms-edit-banner-dirty strong {\n color: var(--mj-status-warning);\n font-weight: var(--mj-font-bold);\n}\n\n.mj-forms-edit-banner-actions {\n display: flex;\n gap: 8px;\n}\n\n/* ============================================\n MAIN TOOLBAR\n ============================================ */\n.mj-forms-toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 22px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n flex-wrap: wrap;\n z-index: 40;\n}\n\n.mj-forms-toolbar--sticky {\n position: sticky;\n top: 0;\n}\n\n.mj-forms-toolbar--disabled {\n pointer-events: none;\n opacity: 0.7;\n}\n\n.mj-forms-toolbar-group {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.mj-forms-toolbar-separator {\n width: 1px;\n height: 24px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n.mj-forms-toolbar-spacer {\n flex: 1;\n}\n\n/* ============================================\n BUTTONS\n ============================================ */\n.mj-forms-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: var(--mj-font-medium);\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all var(--mj-transition-base) ease;\n white-space: nowrap;\n font-family: inherit;\n line-height: 1;\n}\n\n.mj-forms-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.mj-forms-btn:active {\n transform: translateY(0);\n box-shadow: none;\n}\n\n.mj-forms-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mj-forms-btn i {\n font-size: 15px;\n line-height: 1;\n}\n\n.mj-forms-btn--primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.mj-forms-btn--primary:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.mj-forms-btn--secondary {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n}\n\n.mj-forms-btn--secondary:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.mj-forms-btn--accent {\n background: var(--mj-brand-accent, #6366f1);\n color: var(--mj-text-inverse, #ffffff);\n border-color: var(--mj-brand-accent, #6366f1);\n}\n\n.mj-forms-btn--accent:hover {\n filter: brightness(1.1);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-accent, #6366f1) 30%, transparent);\n}\n\n.mj-forms-btn--danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n}\n\n.mj-forms-btn--danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n}\n\n.mj-forms-btn--ghost {\n border-color: transparent;\n background: transparent;\n}\n\n.mj-forms-btn--ghost:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n border-color: transparent;\n}\n\n.mj-forms-btn--icon-only {\n padding: 7px 9px;\n}\n\n.mj-forms-btn--sm {\n padding: 5px 12px;\n font-size: var(--mj-text-xs);\n}\n\n.mj-forms-btn--sm i {\n font-size: var(--mj-text-xs);\n}\n\n.mj-forms-btn-text {\n margin-left: 2px;\n}\n\n.mj-icon--favorite {\n color: var(--mj-status-warning);\n}\n\n/* List button with count badge */\n.mj-forms-btn--list {\n position: relative;\n}\n\n/* History button with version badge */\n.mj-forms-btn--history {\n position: relative;\n}\n\n.mj-version-count-badge {\n position: absolute;\n top: -6px;\n right: -10px;\n padding: 0 5px;\n font-size: 10px;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n background: linear-gradient(135deg, var(--mj-status-success) 0%, color-mix(in srgb, var(--mj-status-success) 85%, black) 100%);\n border-radius: var(--mj-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 16px;\n border: 2px solid var(--mj-bg-surface-card);\n white-space: nowrap;\n line-height: 1;\n}\n\n.mj-list-count-badge {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n font-size: 10px;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n background: linear-gradient(135deg, var(--mj-status-info) 0%, color-mix(in srgb, var(--mj-status-info) 85%, black) 100%);\n border-radius: var(--mj-radius-full);\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-bg-surface-card);\n}\n\n/* ============================================\n IS-A ENTITY HIERARCHY\n ============================================ */\n.mj-entity-hierarchy {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.mj-entity-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all var(--mj-transition-base) ease;\n text-decoration: none;\n border: 1px solid transparent;\n}\n\n.mj-entity-badge i {\n font-size: 11px;\n}\n\n.mj-entity-badge--parent {\n background: color-mix(in srgb, var(--mj-brand-accent) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-accent);\n border-color: color-mix(in srgb, var(--mj-brand-accent) 25%, transparent);\n}\n\n.mj-entity-badge--parent:hover {\n background: color-mix(in srgb, var(--mj-brand-accent) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-accent);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-accent) 15%, transparent);\n}\n\n.mj-entity-badge--current {\n font-weight: var(--mj-font-semibold);\n font-size: 13px;\n color: var(--mj-text-primary);\n padding: 4px 8px;\n background: var(--mj-bg-surface-hover);\n border-radius: var(--mj-radius-sm);\n cursor: default;\n}\n\n.mj-entity-badge--child {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.mj-entity-badge--child:hover {\n background: color-mix(in srgb, var(--mj-status-info) 18%, var(--mj-bg-surface));\n border-color: var(--mj-status-info);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-status-info) 15%, transparent);\n}\n\n.mj-entity-badge--overlapping {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-status-warning) 85%, black);\n border-color: color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n}\n\n.mj-entity-badge--overlapping:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 18%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-status-warning) 15%, transparent);\n}\n\n.mj-entity-badge-group {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.mj-child-count {\n background: var(--mj-status-info);\n color: var(--mj-text-inverse);\n font-size: 10px;\n padding: 1px 5px;\n border-radius: var(--mj-radius-full);\n font-weight: var(--mj-font-bold);\n}\n\n.mj-entity-badge--leaf {\n border-style: dashed;\n}\n\n.mj-entity-badge--root {\n border-style: dashed;\n}\n\n.mj-hierarchy-arrow {\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n/* Descendant chain tree (connecting lines when multiple chains branch) */\n.mj-descendant-chains {\n display: flex;\n flex-direction: column;\n gap: 6px;\n position: relative;\n padding-left: 20px;\n}\n\n/* Horizontal connector from parent entity badge to tree trunk */\n.mj-descendant-chains::before {\n content: '';\n position: absolute;\n left: -4px;\n top: 50%;\n width: 4px;\n border-top: 1.5px solid var(--mj-text-muted);\n}\n\n.mj-descendant-chain {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n position: relative;\n padding: 2px 0;\n}\n\n/* Horizontal branch line from trunk to chain content */\n.mj-descendant-chain::before {\n content: '';\n position: absolute;\n left: -20px;\n top: 50%;\n width: 18px;\n border-top: 1.5px solid var(--mj-text-muted);\n}\n\n/* Vertical trunk segment (each chain draws its portion) */\n.mj-descendant-chain::after {\n content: '';\n position: absolute;\n left: -20px;\n top: 0;\n bottom: 0;\n border-left: 1.5px solid var(--mj-text-muted);\n}\n\n/* First chain: trunk starts from center */\n.mj-descendant-chain:first-child::after {\n top: 50%;\n}\n\n/* Last chain: trunk ends at center */\n.mj-descendant-chain:last-child::after {\n bottom: 50%;\n}\n\n/* (dirty summary removed \u2014 now inline in edit banner) */\n\n/* ============================================\n SECTION CONTROLS\n ============================================ */\n.mj-section-controls {\n gap: 6px;\n}\n\n.mj-forms-search-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.mj-section-search {\n max-width: 180px;\n font-size: 13px;\n padding: 6px 28px 6px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n outline: none;\n font-family: inherit;\n transition: all var(--mj-transition-base);\n}\n\n.mj-section-search:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n/* Active filter highlight \u2014 matches the yellow used on matched panel/field names */\n.mj-section-search--active {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n color: color-mix(in srgb, var(--mj-status-warning) 80%, black);\n font-weight: var(--mj-font-semibold);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n.mj-section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.mj-clear-search {\n position: absolute;\n right: 4px;\n padding: 4px;\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: var(--mj-text-xs);\n line-height: 1;\n}\n\n.mj-clear-search:hover {\n color: var(--mj-text-secondary);\n}\n\n/* ============================================\n DIALOG (lightweight inline)\n ============================================ */\n.mj-dialog-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: mj-fade-in 150ms ease;\n}\n\n.mj-dialog {\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-lg);\n min-width: 400px;\n max-width: 550px;\n animation: mj-slide-up 200ms ease;\n}\n\n.mj-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.mj-dialog-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: var(--mj-font-semibold);\n}\n\n.mj-dialog-close {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n font-size: var(--mj-text-base);\n transition: color var(--mj-transition-base);\n}\n\n.mj-dialog-close:hover {\n color: var(--mj-text-primary);\n}\n\n.mj-dialog-body {\n padding: 20px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n line-height: 1.6;\n}\n\n.mj-dialog-body p {\n margin: 0;\n}\n\n.mj-dialog-footer {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n@keyframes mj-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes mj-slide-up {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n\n/* ============================================================ */\n/* FORM-VARIANT PICKER (toolbar-embedded; right-side) */\n/* ============================================================ */\n\n.mj-form-variant-picker-host {\n position: relative;\n display: inline-flex;\n}\n\n.mj-form-variant-picker-trigger {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n max-width: 240px;\n}\n\n.mj-form-variant-picker-trigger .chev {\n font-size: 10px;\n opacity: 0.7;\n}\n\n.mj-form-variant-picker-current-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 160px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.mj-form-variant-picker-host.open .mj-form-variant-picker-trigger {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-focus);\n}\n\n.mj-form-variant-picker-menu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 50;\n min-width: 280px;\n max-height: 360px;\n overflow-y: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n padding: 4px 0;\n}\n\n.mj-form-variant-picker-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n color: var(--mj-text-primary);\n font-size: 13px;\n transition: background 120ms;\n}\n\n.mj-form-variant-picker-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.mj-form-variant-picker-row.current {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.mj-form-variant-picker-row.inactive {\n opacity: 0.6;\n}\n\n.mj-form-variant-picker-row-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.mj-form-variant-picker-row-title {\n font-weight: 600;\n}\n\n.mj-form-variant-picker-row-sub {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.mj-form-variant-picker-default-tag {\n font-size: 10px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-left: 4px;\n}\n\n.mj-form-variant-picker-default {\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.mj-form-variant-picker-check {\n color: var(--mj-brand-primary);\n font-size: 12px;\n margin-top: 2px;\n}\n"] }]
1190
1594
  }], null, { Form: [{
1191
1595
  type: Input
1192
1596
  }], _deprecatedForm: [{
@@ -1214,6 +1618,12 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1214
1618
  type: Input
1215
1619
  }], IsTagsPanelOpen: [{
1216
1620
  type: Input
1621
+ }], AttachmentCount: [{
1622
+ type: Input
1623
+ }], AttachmentsAvailable: [{
1624
+ type: Input
1625
+ }], IsAttachmentsPanelOpen: [{
1626
+ type: Input
1217
1627
  }], VersionCount: [{
1218
1628
  type: Input
1219
1629
  }], EntityInfo: [{
@@ -1222,6 +1632,8 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1222
1632
  type: Input
1223
1633
  }], IsSaving: [{
1224
1634
  type: Input
1635
+ }], IsRefreshing: [{
1636
+ type: Input
1225
1637
  }], VisibleSectionCount: [{
1226
1638
  type: Input
1227
1639
  }], TotalSectionCount: [{
@@ -1236,12 +1648,22 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1236
1648
  type: Input
1237
1649
  }], HasCustomSectionOrder: [{
1238
1650
  type: Input
1651
+ }], ChromeLayout: [{
1652
+ type: Input
1239
1653
  }], AdditionalActionsTemplate: [{
1240
1654
  type: Input
1241
1655
  }], Variants: [{
1242
1656
  type: Input
1657
+ }], RegisteredItems: [{
1658
+ type: Input
1659
+ }], ItemOverrides: [{
1660
+ type: Input
1661
+ }], FormComponent: [{
1662
+ type: Input
1243
1663
  }], CurrentVariantID: [{
1244
1664
  type: Input
1665
+ }], ToolbarItemClick: [{
1666
+ type: Output
1245
1667
  }], Navigate: [{
1246
1668
  type: Output
1247
1669
  }], EditModeChange: [{
@@ -1258,6 +1680,10 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1258
1680
  type: Output
1259
1681
  }], DeleteRequested: [{
1260
1682
  type: Output
1683
+ }], BeforeRefresh: [{
1684
+ type: Output
1685
+ }], RefreshRequested: [{
1686
+ type: Output
1261
1687
  }], FavoriteToggled: [{
1262
1688
  type: Output
1263
1689
  }], BeforeHistoryView: [{
@@ -1270,6 +1696,8 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1270
1696
  type: Output
1271
1697
  }], TagsPanelToggled: [{
1272
1698
  type: Output
1699
+ }], AttachmentsPanelToggled: [{
1700
+ type: Output
1273
1701
  }], ShowChangesRequested: [{
1274
1702
  type: Output
1275
1703
  }], VariantPicked: [{
@@ -1291,5 +1719,5 @@ export class MjFormToolbarComponent extends BaseAngularComponent {
1291
1719
  }], ManageSectionsRequested: [{
1292
1720
  type: Output
1293
1721
  }] }); })();
1294
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MjFormToolbarComponent, { className: "MjFormToolbarComponent", filePath: "src/lib/toolbar/form-toolbar.component.ts", lineNumber: 48 }); })();
1722
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MjFormToolbarComponent, { className: "MjFormToolbarComponent", filePath: "src/lib/toolbar/form-toolbar.component.ts", lineNumber: 54 }); })();
1295
1723
  //# sourceMappingURL=form-toolbar.component.js.map