@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.
- package/LICENSE +180 -4
- package/README.md +4 -1
- package/dist/lib/base-form-component.d.ts +93 -3
- package/dist/lib/base-form-component.d.ts.map +1 -1
- package/dist/lib/base-form-component.js +240 -9
- package/dist/lib/base-form-component.js.map +1 -1
- package/dist/lib/chrome/base-form-policy.d.ts +26 -0
- package/dist/lib/chrome/base-form-policy.d.ts.map +1 -0
- package/dist/lib/chrome/base-form-policy.js +9 -0
- package/dist/lib/chrome/base-form-policy.js.map +1 -0
- package/dist/lib/chrome/clipped-title.d.ts +8 -0
- package/dist/lib/chrome/clipped-title.d.ts.map +1 -0
- package/dist/lib/chrome/clipped-title.js +18 -0
- package/dist/lib/chrome/clipped-title.js.map +1 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.d.ts +35 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.js +96 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.js.map +1 -0
- package/dist/lib/chrome/form-chrome-rail-pref.d.ts +24 -0
- package/dist/lib/chrome/form-chrome-rail-pref.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome-rail-pref.js +52 -0
- package/dist/lib/chrome/form-chrome-rail-pref.js.map +1 -0
- package/dist/lib/chrome/form-chrome.d.ts +59 -0
- package/dist/lib/chrome/form-chrome.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome.js +37 -0
- package/dist/lib/chrome/form-chrome.js.map +1 -0
- package/dist/lib/chrome/load-form-chrome-rules.d.ts +8 -0
- package/dist/lib/chrome/load-form-chrome-rules.d.ts.map +1 -0
- package/dist/lib/chrome/load-form-chrome-rules.js +70 -0
- package/dist/lib/chrome/load-form-chrome-rules.js.map +1 -0
- package/dist/lib/chrome/resolve-form-chrome.d.ts +114 -0
- package/dist/lib/chrome/resolve-form-chrome.d.ts.map +1 -0
- package/dist/lib/chrome/resolve-form-chrome.js +713 -0
- package/dist/lib/chrome/resolve-form-chrome.js.map +1 -0
- package/dist/lib/container/record-form-container.component.d.ts +170 -6
- package/dist/lib/container/record-form-container.component.d.ts.map +1 -1
- package/dist/lib/container/record-form-container.component.js +1194 -62
- package/dist/lib/container/record-form-container.component.js.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.d.ts +54 -1
- package/dist/lib/explorer-entity-data-grid.component.d.ts.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.js +143 -7
- package/dist/lib/explorer-entity-data-grid.component.js.map +1 -1
- package/dist/lib/form-record-refresh.coordinator.d.ts +27 -0
- package/dist/lib/form-record-refresh.coordinator.d.ts.map +1 -0
- package/dist/lib/form-record-refresh.coordinator.js +33 -0
- package/dist/lib/form-record-refresh.coordinator.js.map +1 -0
- package/dist/lib/form-state.interface.d.ts +4 -0
- package/dist/lib/form-state.interface.d.ts.map +1 -1
- package/dist/lib/form-state.interface.js.map +1 -1
- package/dist/lib/form-state.service.d.ts +5 -0
- package/dist/lib/form-state.service.d.ts.map +1 -1
- package/dist/lib/form-state.service.js +23 -2
- package/dist/lib/form-state.service.js.map +1 -1
- package/dist/lib/host/entity-form-host.component.d.ts +5 -1
- package/dist/lib/host/entity-form-host.component.d.ts.map +1 -1
- package/dist/lib/host/entity-form-host.component.js +16 -2
- package/dist/lib/host/entity-form-host.component.js.map +1 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.d.ts +6 -2
- package/dist/lib/isa-related-panel/isa-related-panel.component.d.ts.map +1 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.js +15 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.js.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.d.ts +24 -2
- package/dist/lib/panel/collapsible-panel.component.d.ts.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.js +104 -10
- package/dist/lib/panel/collapsible-panel.component.js.map +1 -1
- package/dist/lib/panel-slot/base-form-panel.d.ts +85 -1
- package/dist/lib/panel-slot/base-form-panel.d.ts.map +1 -1
- package/dist/lib/panel-slot/base-form-panel.js +72 -3
- package/dist/lib/panel-slot/base-form-panel.js.map +1 -1
- package/dist/lib/panel-slot/collect-form-panel-registrations.d.ts +8 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.d.ts.map +1 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.js +19 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.js.map +1 -0
- package/dist/lib/panel-slot/form-contribution.d.ts +79 -0
- package/dist/lib/panel-slot/form-contribution.d.ts.map +1 -0
- package/dist/lib/panel-slot/form-contribution.js +253 -0
- package/dist/lib/panel-slot/form-contribution.js.map +1 -0
- package/dist/lib/panel-slot/form-contributions.component.d.ts +27 -0
- package/dist/lib/panel-slot/form-contributions.component.d.ts.map +1 -0
- package/dist/lib/panel-slot/form-contributions.component.js +83 -0
- package/dist/lib/panel-slot/form-contributions.component.js.map +1 -0
- package/dist/lib/panel-slot/form-panel-slot.component.d.ts +2 -0
- package/dist/lib/panel-slot/form-panel-slot.component.d.ts.map +1 -1
- package/dist/lib/panel-slot/form-panel-slot.component.js +35 -4
- package/dist/lib/panel-slot/form-panel-slot.component.js.map +1 -1
- package/dist/lib/panel-slot/related-entity-grid-panel.component.d.ts +22 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.d.ts.map +1 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.js +78 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.js.map +1 -0
- package/dist/lib/related-grid-height.d.ts +20 -0
- package/dist/lib/related-grid-height.d.ts.map +1 -0
- package/dist/lib/related-grid-height.js +30 -0
- package/dist/lib/related-grid-height.js.map +1 -0
- package/dist/lib/section-manager/section-manager.component.d.ts +20 -1
- package/dist/lib/section-manager/section-manager.component.d.ts.map +1 -1
- package/dist/lib/section-manager/section-manager.component.js +204 -25
- package/dist/lib/section-manager/section-manager.component.js.map +1 -1
- package/dist/lib/toolbar/form-toolbar.component.d.ts +55 -4
- package/dist/lib/toolbar/form-toolbar.component.d.ts.map +1 -1
- package/dist/lib/toolbar/form-toolbar.component.js +734 -306
- package/dist/lib/toolbar/form-toolbar.component.js.map +1 -1
- package/dist/lib/types/form-events.d.ts +35 -0
- package/dist/lib/types/form-events.d.ts.map +1 -1
- package/dist/lib/types/form-events.js +45 -0
- package/dist/lib/types/form-events.js.map +1 -1
- package/dist/lib/types/form-toolbar-item.d.ts +145 -0
- package/dist/lib/types/form-toolbar-item.d.ts.map +1 -0
- package/dist/lib/types/form-toolbar-item.js +2 -0
- package/dist/lib/types/form-toolbar-item.js.map +1 -0
- package/dist/lib/types/form-types.d.ts +8 -0
- package/dist/lib/types/form-types.d.ts.map +1 -1
- package/dist/lib/types/form-types.js.map +1 -1
- package/dist/lib/types/toolbar-config.d.ts +7 -2
- package/dist/lib/types/toolbar-config.d.ts.map +1 -1
- package/dist/lib/types/toolbar-config.js +6 -0
- package/dist/lib/types/toolbar-config.js.map +1 -1
- package/dist/module.d.ts +17 -14
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +14 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +13 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +14 -0
- package/dist/public-api.js.map +1 -1
- 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 {
|
|
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",
|
|
17
|
-
i0.ɵɵelementStart(1, "span",
|
|
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",
|
|
31
|
-
i0.ɵɵelementStart(1, "span",
|
|
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
|
|
40
|
-
|
|
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
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
i0.ɵɵ
|
|
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
|
|
80
|
-
|
|
81
|
-
i0.ɵɵ
|
|
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
|
|
87
|
-
i0.ɵɵproperty("title", ctx_r1.IsFavorite ? "Remove Favorite" : "Make Favorite");
|
|
57
|
+
const item_r4 = i0.ɵɵnextContext().$implicit;
|
|
88
58
|
i0.ɵɵadvance();
|
|
89
|
-
i0.ɵɵ
|
|
59
|
+
i0.ɵɵtextInterpolate(item_r4.Text);
|
|
90
60
|
} }
|
|
91
|
-
function
|
|
92
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
66
|
+
const item_r4 = i0.ɵɵnextContext().$implicit;
|
|
97
67
|
i0.ɵɵadvance();
|
|
98
|
-
i0.ɵɵ
|
|
68
|
+
i0.ɵɵtextInterpolate(item_r4.Badge);
|
|
99
69
|
} }
|
|
100
|
-
function
|
|
101
|
-
const
|
|
102
|
-
i0.ɵɵelementStart(0, "button",
|
|
103
|
-
i0.ɵɵlistener("click", function
|
|
104
|
-
i0.ɵɵ
|
|
105
|
-
i0.ɵɵconditionalCreate(
|
|
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.ɵɵ
|
|
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(
|
|
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
|
|
114
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
105
|
+
const item_r6 = i0.ɵɵnextContext().$implicit;
|
|
119
106
|
i0.ɵɵadvance();
|
|
120
|
-
i0.ɵɵtextInterpolate(
|
|
107
|
+
i0.ɵɵtextInterpolate(item_r6.Text);
|
|
121
108
|
} }
|
|
122
|
-
function
|
|
123
|
-
|
|
124
|
-
i0.ɵɵ
|
|
125
|
-
i0.ɵɵ
|
|
126
|
-
|
|
127
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
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(
|
|
135
|
+
i0.ɵɵconditional(item_r6.Text ? 3 : -1);
|
|
136
|
+
i0.ɵɵadvance();
|
|
137
|
+
i0.ɵɵconditional(item_r6.Badge != null ? 4 : -1);
|
|
134
138
|
} }
|
|
135
|
-
function
|
|
136
|
-
i0.ɵɵ
|
|
137
|
-
i0.ɵɵ
|
|
138
|
-
i0.ɵɵ
|
|
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(
|
|
161
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
141
162
|
i0.ɵɵadvance();
|
|
142
|
-
i0.ɵɵ
|
|
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
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
i0.ɵɵelement(
|
|
149
|
-
|
|
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
|
|
153
|
-
i0.ɵɵ
|
|
154
|
-
i0.ɵɵ
|
|
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
|
|
158
|
-
|
|
159
|
-
i0.ɵɵ
|
|
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
|
|
165
|
-
i0.ɵɵclassMap(
|
|
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.ɵɵ
|
|
199
|
+
i0.ɵɵtextInterpolate(item_r8.Badge);
|
|
169
200
|
} }
|
|
170
|
-
function
|
|
171
|
-
i0.ɵɵ
|
|
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
|
|
174
|
-
i0.ɵɵ
|
|
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
|
|
177
|
-
i0.ɵɵelement(0, "div",
|
|
221
|
+
function MjFormToolbarComponent_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
222
|
+
i0.ɵɵelement(0, "div", 23);
|
|
178
223
|
} }
|
|
179
|
-
function
|
|
180
|
-
const
|
|
181
|
-
i0.ɵɵelementStart(0, "a",
|
|
182
|
-
i0.ɵɵlistener("click", function
|
|
183
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
187
|
-
i0.ɵɵelement(4, "i",
|
|
231
|
+
i0.ɵɵelementStart(3, "span", 32);
|
|
232
|
+
i0.ɵɵelement(4, "i", 33);
|
|
188
233
|
i0.ɵɵelementEnd();
|
|
189
234
|
} if (rf & 2) {
|
|
190
|
-
const
|
|
191
|
-
i0.ɵɵproperty("title", "Navigate to parent: " +
|
|
235
|
+
const parent_r10 = ctx.$implicit;
|
|
236
|
+
i0.ɵɵproperty("title", "Navigate to parent: " + parent_r10.Name);
|
|
192
237
|
i0.ɵɵadvance(2);
|
|
193
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
238
|
+
i0.ɵɵtextInterpolate1(" ", parent_r10.Name, " ");
|
|
194
239
|
} }
|
|
195
|
-
function
|
|
196
|
-
i0.ɵɵelementContainer(0,
|
|
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
|
|
200
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
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
|
|
203
|
-
i0.ɵɵelementStart(0, "div",
|
|
204
|
-
i0.ɵɵrepeaterCreate(1,
|
|
205
|
-
i0.ɵɵelementStart(3, "span",
|
|
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,
|
|
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
|
|
220
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
223
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
226
|
-
const
|
|
227
|
-
i0.ɵɵelementStart(0, "div",
|
|
228
|
-
i0.ɵɵlistener("click", function
|
|
229
|
-
i0.ɵɵelementStart(1, "div",
|
|
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",
|
|
277
|
+
i0.ɵɵelementStart(4, "span", 45);
|
|
233
278
|
i0.ɵɵtext(5);
|
|
234
279
|
i0.ɵɵelementEnd()();
|
|
235
|
-
i0.ɵɵconditionalCreate(6,
|
|
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
|
|
283
|
+
const v_r15 = ctx.$implicit;
|
|
239
284
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
240
|
-
i0.ɵɵclassProp("current",
|
|
285
|
+
i0.ɵɵclassProp("current", v_r15.ID === ctx_r1.CurrentVariantID)("inactive", v_r15.Status !== "Active");
|
|
241
286
|
i0.ɵɵadvance(3);
|
|
242
|
-
i0.ɵɵtextInterpolate(
|
|
287
|
+
i0.ɵɵtextInterpolate(v_r15.Label);
|
|
243
288
|
i0.ɵɵadvance(2);
|
|
244
|
-
i0.ɵɵtextInterpolate(ctx_r1.VariantSubtitle(
|
|
289
|
+
i0.ɵɵtextInterpolate(ctx_r1.VariantSubtitle(v_r15));
|
|
245
290
|
i0.ɵɵadvance();
|
|
246
|
-
i0.ɵɵconditional(
|
|
291
|
+
i0.ɵɵconditional(v_r15.ID === ctx_r1.CurrentVariantID ? 6 : -1);
|
|
247
292
|
} }
|
|
248
|
-
function
|
|
249
|
-
const
|
|
250
|
-
i0.ɵɵelementStart(0, "div",
|
|
251
|
-
i0.ɵɵlistener("mousedown", function
|
|
252
|
-
i0.ɵɵelementStart(1, "div",
|
|
253
|
-
i0.ɵɵlistener("click", function
|
|
254
|
-
i0.ɵɵelementStart(2, "div",
|
|
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",
|
|
301
|
+
i0.ɵɵelementStart(5, "span", 44);
|
|
257
302
|
i0.ɵɵtext(6, "(default)");
|
|
258
303
|
i0.ɵɵelementEnd()();
|
|
259
|
-
i0.ɵɵelementStart(7, "span",
|
|
304
|
+
i0.ɵɵelementStart(7, "span", 45);
|
|
260
305
|
i0.ɵɵtext(8, "CodeGen-generated Angular fallback");
|
|
261
306
|
i0.ɵɵelementEnd()();
|
|
262
|
-
i0.ɵɵconditionalCreate(9,
|
|
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,
|
|
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
|
|
276
|
-
const
|
|
277
|
-
i0.ɵɵelementStart(0, "div",
|
|
278
|
-
i0.ɵɵlistener("click", function
|
|
279
|
-
i0.ɵɵelement(2, "i",
|
|
280
|
-
i0.ɵɵelementStart(3, "span",
|
|
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",
|
|
328
|
+
i0.ɵɵelement(5, "i", 38);
|
|
284
329
|
i0.ɵɵelementEnd();
|
|
285
|
-
i0.ɵɵconditionalCreate(6,
|
|
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
|
|
298
|
-
const
|
|
299
|
-
i0.ɵɵelementStart(0, "button",
|
|
300
|
-
i0.ɵɵlistener("click", function
|
|
301
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
305
|
-
const
|
|
306
|
-
i0.ɵɵelementStart(0, "div",
|
|
307
|
-
i0.ɵɵlistener("input", function
|
|
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,
|
|
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
|
|
320
|
-
const
|
|
321
|
-
i0.ɵɵelementStart(0, "button",
|
|
322
|
-
i0.ɵɵlistener("click", function
|
|
323
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
326
|
-
i0.ɵɵlistener("click", function
|
|
327
|
-
i0.ɵɵelement(3, "i",
|
|
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
|
|
336
|
-
const
|
|
337
|
-
i0.ɵɵelementStart(0, "button",
|
|
338
|
-
i0.ɵɵlistener("click", function
|
|
339
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
343
|
-
const
|
|
344
|
-
i0.ɵɵelementStart(0, "button",
|
|
345
|
-
i0.ɵɵlistener("click", function
|
|
346
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
350
|
-
const
|
|
351
|
-
i0.ɵɵelementStart(0, "button",
|
|
352
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
362
|
-
i0.ɵɵelementStart(0, "div",
|
|
363
|
-
i0.ɵɵconditionalCreate(1,
|
|
364
|
-
i0.ɵɵconditionalCreate(2,
|
|
365
|
-
i0.ɵɵconditionalCreate(3,
|
|
366
|
-
i0.ɵɵconditionalCreate(4,
|
|
367
|
-
i0.ɵɵconditionalCreate(5,
|
|
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.
|
|
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
|
|
383
|
-
i0.ɵɵelementContainer(0,
|
|
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",
|
|
390
|
-
i0.ɵɵ
|
|
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(
|
|
399
|
-
i0.ɵɵconditionalCreate(
|
|
400
|
-
i0.ɵɵelement(
|
|
401
|
-
i0.ɵɵconditionalCreate(
|
|
402
|
-
i0.ɵɵconditionalCreate(
|
|
403
|
-
i0.ɵɵconditionalCreate(
|
|
404
|
-
i0.ɵɵprojection(
|
|
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.ɵɵ
|
|
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 ?
|
|
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 ?
|
|
453
|
+
i0.ɵɵconditional(ctx_r1.Config.ShowEntityHierarchy && ctx_r1.IsInHierarchy ? 5 : -1);
|
|
427
454
|
i0.ɵɵadvance(2);
|
|
428
|
-
i0.ɵɵconditional(ctx_r1.ShowVariantPickerButton ?
|
|
455
|
+
i0.ɵɵconditional(ctx_r1.ShowVariantPickerButton ? 7 : -1);
|
|
429
456
|
i0.ɵɵadvance();
|
|
430
|
-
i0.ɵɵconditional(ctx_r1.Config.ShowSectionControls ?
|
|
457
|
+
i0.ɵɵconditional(ctx_r1.Config.ShowSectionControls ? 8 : -1);
|
|
431
458
|
i0.ɵɵadvance();
|
|
432
|
-
i0.ɵɵconditional(ctx_r1.AdditionalActionsTemplate ?
|
|
459
|
+
i0.ɵɵconditional(ctx_r1.AdditionalActionsTemplate ? 9 : -1);
|
|
433
460
|
} }
|
|
434
461
|
function MjFormToolbarComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
435
|
-
const
|
|
436
|
-
i0.ɵɵelementStart(0, "div",
|
|
437
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_div_click_0_listener() { i0.ɵɵrestoreView(
|
|
438
|
-
i0.ɵɵelementStart(1, "div",
|
|
439
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(
|
|
440
|
-
i0.ɵɵelementStart(2, "div",
|
|
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",
|
|
444
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(
|
|
445
|
-
i0.ɵɵelement(6, "i",
|
|
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",
|
|
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",
|
|
455
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(
|
|
456
|
-
i0.ɵɵelement(15, "i",
|
|
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",
|
|
460
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(
|
|
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
|
|
472
|
-
i0.ɵɵelementStart(0, "div",
|
|
473
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_div_click_0_listener() { i0.ɵɵrestoreView(
|
|
474
|
-
i0.ɵɵelementStart(1, "div",
|
|
475
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(
|
|
476
|
-
i0.ɵɵelementStart(2, "div",
|
|
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",
|
|
480
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(
|
|
481
|
-
i0.ɵɵelement(6, "i",
|
|
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",
|
|
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",
|
|
487
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_11_listener() { i0.ɵɵrestoreView(
|
|
488
|
-
i0.ɵɵelement(12, "i",
|
|
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",
|
|
492
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_Conditional_3_Template_button_click_14_listener() { i0.ɵɵrestoreView(
|
|
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,
|
|
524
|
+
i0.ɵɵelementContainer(0, 29);
|
|
498
525
|
} if (rf & 2) {
|
|
499
|
-
const
|
|
526
|
+
const items_r25 = i0.ɵɵnextContext(2).items;
|
|
500
527
|
i0.ɵɵnextContext();
|
|
501
|
-
const
|
|
502
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
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
|
|
506
|
-
i0.ɵɵelementStart(0, "span",
|
|
507
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
510
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_ng_template_4_Conditional_0_Template_a_click_2_listener($event) { i0.ɵɵrestoreView(
|
|
511
|
-
i0.ɵɵelement(3, "i",
|
|
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",
|
|
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
|
|
543
|
+
const items_r25 = i0.ɵɵnextContext().items;
|
|
517
544
|
i0.ɵɵadvance(2);
|
|
518
|
-
i0.ɵɵproperty("title", "Navigate to: " +
|
|
545
|
+
i0.ɵɵproperty("title", "Navigate to: " + items_r25[0].EntityName);
|
|
519
546
|
i0.ɵɵadvance(2);
|
|
520
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
547
|
+
i0.ɵɵtextInterpolate1(" ", items_r25[0].EntityName, " ");
|
|
521
548
|
i0.ɵɵadvance();
|
|
522
|
-
i0.ɵɵconditional(
|
|
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,
|
|
552
|
+
i0.ɵɵelementContainer(0, 29);
|
|
526
553
|
} if (rf & 2) {
|
|
527
|
-
const
|
|
554
|
+
const item_r27 = i0.ɵɵnextContext().$implicit;
|
|
528
555
|
i0.ɵɵnextContext(3);
|
|
529
|
-
const
|
|
530
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
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
|
|
534
|
-
i0.ɵɵelementStart(0, "div",
|
|
535
|
-
i0.ɵɵlistener("click", function MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Template_a_click_1_listener($event) { const
|
|
536
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
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
|
|
569
|
+
const item_r27 = ctx.$implicit;
|
|
543
570
|
i0.ɵɵadvance();
|
|
544
|
-
i0.ɵɵproperty("title", "Navigate to: " +
|
|
571
|
+
i0.ɵɵproperty("title", "Navigate to: " + item_r27.EntityName);
|
|
545
572
|
i0.ɵɵadvance(2);
|
|
546
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
573
|
+
i0.ɵɵtextInterpolate1(" ", item_r27.EntityName, " ");
|
|
547
574
|
i0.ɵɵadvance();
|
|
548
|
-
i0.ɵɵconditional(
|
|
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",
|
|
552
|
-
i0.ɵɵrepeaterCreate(1, MjFormToolbarComponent_ng_template_4_Conditional_1_For_2_Template, 5, 3, "div",
|
|
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
|
|
582
|
+
const items_r25 = i0.ɵɵnextContext().items;
|
|
556
583
|
i0.ɵɵadvance();
|
|
557
|
-
i0.ɵɵrepeater(
|
|
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",
|
|
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
|
|
563
|
-
i0.ɵɵconditional(
|
|
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-
|
|
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,
|
|
1173
|
-
i0.ɵɵconditionalCreate(1, MjFormToolbarComponent_Conditional_1_Template,
|
|
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 — {{ 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 — {{ 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:
|
|
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
|