@memberjunction/ng-explorer-settings 3.1.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts +15 -1
- package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts.map +1 -1
- package/dist/lib/application-management/application-dialog/application-dialog.component.js +329 -190
- package/dist/lib/application-management/application-dialog/application-dialog.component.js.map +1 -1
- package/dist/lib/application-management/application-management.component.d.ts.map +1 -1
- package/dist/lib/application-management/application-management.component.js +265 -184
- package/dist/lib/application-management/application-management.component.js.map +1 -1
- package/dist/lib/entity-permissions/entity-permissions.component.d.ts +1 -0
- package/dist/lib/entity-permissions/entity-permissions.component.d.ts.map +1 -1
- package/dist/lib/entity-permissions/entity-permissions.component.js +369 -192
- package/dist/lib/entity-permissions/entity-permissions.component.js.map +1 -1
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.d.ts.map +1 -1
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js +160 -143
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js.map +1 -1
- package/dist/lib/module.d.ts +17 -21
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/module.js +20 -39
- package/dist/lib/module.js.map +1 -1
- package/dist/lib/notification-preferences/notification-preferences.component.d.ts +113 -0
- package/dist/lib/notification-preferences/notification-preferences.component.d.ts.map +1 -0
- package/dist/lib/notification-preferences/notification-preferences.component.js +382 -0
- package/dist/lib/notification-preferences/notification-preferences.component.js.map +1 -0
- package/dist/lib/role-management/role-dialog/role-dialog.component.d.ts.map +1 -1
- package/dist/lib/role-management/role-dialog/role-dialog.component.js +93 -89
- package/dist/lib/role-management/role-dialog/role-dialog.component.js.map +1 -1
- package/dist/lib/role-management/role-management.component.d.ts +1 -0
- package/dist/lib/role-management/role-management.component.d.ts.map +1 -1
- package/dist/lib/role-management/role-management.component.js +275 -158
- package/dist/lib/role-management/role-management.component.js.map +1 -1
- package/dist/lib/settings/settings.component.d.ts +54 -1
- package/dist/lib/settings/settings.component.d.ts.map +1 -1
- package/dist/lib/settings/settings.component.js +528 -172
- package/dist/lib/settings/settings.component.js.map +1 -1
- package/dist/lib/shared/settings-card.component.d.ts.map +1 -1
- package/dist/lib/shared/settings-card.component.js +21 -18
- package/dist/lib/shared/settings-card.component.js.map +1 -1
- package/dist/lib/sql-logging/sql-logging.component.d.ts +70 -10
- package/dist/lib/sql-logging/sql-logging.component.d.ts.map +1 -1
- package/dist/lib/sql-logging/sql-logging.component.js +547 -205
- package/dist/lib/sql-logging/sql-logging.component.js.map +1 -1
- package/dist/lib/user-app-config/user-app-config.component.d.ts +21 -3
- package/dist/lib/user-app-config/user-app-config.component.d.ts.map +1 -1
- package/dist/lib/user-app-config/user-app-config.component.js +202 -147
- package/dist/lib/user-app-config/user-app-config.component.js.map +1 -1
- package/dist/lib/user-management/user-dialog/user-dialog.component.d.ts.map +1 -1
- package/dist/lib/user-management/user-dialog/user-dialog.component.js +120 -116
- package/dist/lib/user-management/user-dialog/user-dialog.component.js.map +1 -1
- package/dist/lib/user-management/user-management.component.d.ts +32 -2
- package/dist/lib/user-management/user-management.component.d.ts.map +1 -1
- package/dist/lib/user-management/user-management.component.js +822 -297
- package/dist/lib/user-management/user-management.component.js.map +1 -1
- package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts +31 -2
- package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts.map +1 -1
- package/dist/lib/user-profile-settings/user-profile-settings.component.js +213 -80
- package/dist/lib/user-profile-settings/user-profile-settings.component.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +21 -20
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, inject, HostListener
|
|
1
|
+
import { Component, Input, Output, EventEmitter, inject, HostListener } from '@angular/core';
|
|
2
2
|
import { FormBuilder, Validators } from '@angular/forms';
|
|
3
|
+
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
3
4
|
import { Metadata, RunView } from '@memberjunction/core';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/
|
|
6
|
-
import * as i2 from "@angular/
|
|
7
|
-
import * as i3 from "@
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "@angular/cdk/drag-drop";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
8
9
|
const _forTrack0 = ($index, $item) => $item.entity.ID;
|
|
9
10
|
const _forTrack1 = ($index, $item) => $item.ID;
|
|
10
11
|
const _c0 = () => ({ standalone: true });
|
|
11
|
-
function
|
|
12
|
-
i0.ɵɵelementStart(0, "div",
|
|
13
|
-
i0.ɵɵelement(2, "i",
|
|
12
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
13
|
+
i0.ɵɵelementStart(0, "div", 14)(1, "div", 27);
|
|
14
|
+
i0.ɵɵelement(2, "i", 28);
|
|
14
15
|
i0.ɵɵelementStart(3, "div");
|
|
15
16
|
i0.ɵɵtext(4);
|
|
16
17
|
i0.ɵɵelementEnd()()();
|
|
@@ -19,279 +20,378 @@ function ApplicationDialogComponent_kendo_window_0_Conditional_10_Template(rf, c
|
|
|
19
20
|
i0.ɵɵadvance(4);
|
|
20
21
|
i0.ɵɵtextInterpolate(ctx_r1.error);
|
|
21
22
|
} }
|
|
22
|
-
function
|
|
23
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_26_Conditional_6_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
23
24
|
i0.ɵɵtext(0, " Application name is required ");
|
|
24
25
|
} }
|
|
25
|
-
function
|
|
26
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_26_Conditional_6_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
26
27
|
i0.ɵɵtext(0, " Application name cannot exceed 100 characters ");
|
|
27
28
|
} }
|
|
28
|
-
function
|
|
29
|
-
i0.ɵɵelementStart(0, "div",
|
|
30
|
-
i0.ɵɵelement(1, "i",
|
|
31
|
-
i0.ɵɵtemplate(2,
|
|
29
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_26_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
31
|
+
i0.ɵɵelement(1, "i", 37);
|
|
32
|
+
i0.ɵɵtemplate(2, ApplicationDialogComponent_Conditional_0_Conditional_26_Conditional_6_Conditional_2_Template, 1, 0)(3, ApplicationDialogComponent_Conditional_0_Conditional_26_Conditional_6_Conditional_3_Template, 1, 0);
|
|
32
33
|
i0.ɵɵelementEnd();
|
|
34
|
+
} if (rf & 2) {
|
|
35
|
+
let tmp_3_0;
|
|
36
|
+
let tmp_4_0;
|
|
37
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
38
|
+
i0.ɵɵadvance(2);
|
|
39
|
+
i0.ɵɵconditional(((tmp_3_0 = ctx_r1.applicationForm.get("name")) == null ? null : tmp_3_0.errors == null ? null : tmp_3_0.errors["required"]) ? 2 : -1);
|
|
40
|
+
i0.ɵɵadvance();
|
|
41
|
+
i0.ɵɵconditional(((tmp_4_0 = ctx_r1.applicationForm.get("name")) == null ? null : tmp_4_0.errors == null ? null : tmp_4_0.errors["maxlength"]) ? 3 : -1);
|
|
42
|
+
} }
|
|
43
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 29)(2, "div", 30)(3, "label", 31);
|
|
45
|
+
i0.ɵɵtext(4, "Application Name");
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
i0.ɵɵelement(5, "input", 32);
|
|
48
|
+
i0.ɵɵtemplate(6, ApplicationDialogComponent_Conditional_0_Conditional_26_Conditional_6_Template, 4, 2, "div", 33);
|
|
49
|
+
i0.ɵɵelementEnd();
|
|
50
|
+
i0.ɵɵelementStart(7, "div", 30)(8, "label", 34);
|
|
51
|
+
i0.ɵɵtext(9, "Description");
|
|
52
|
+
i0.ɵɵelementEnd();
|
|
53
|
+
i0.ɵɵelement(10, "textarea", 35);
|
|
54
|
+
i0.ɵɵelementStart(11, "div", 36);
|
|
55
|
+
i0.ɵɵtext(12, " Provide a clear description of what this application does and its main features. ");
|
|
56
|
+
i0.ɵɵelementEnd()()()();
|
|
33
57
|
} if (rf & 2) {
|
|
34
58
|
let tmp_2_0;
|
|
35
59
|
let tmp_3_0;
|
|
60
|
+
let tmp_4_0;
|
|
36
61
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
37
|
-
i0.ɵɵadvance(
|
|
38
|
-
i0.ɵɵ
|
|
62
|
+
i0.ɵɵadvance(5);
|
|
63
|
+
i0.ɵɵclassProp("error", ((tmp_2_0 = ctx_r1.applicationForm.get("name")) == null ? null : tmp_2_0.invalid) && ((tmp_2_0 = ctx_r1.applicationForm.get("name")) == null ? null : tmp_2_0.touched));
|
|
64
|
+
i0.ɵɵattribute("aria-invalid", ((tmp_3_0 = ctx_r1.applicationForm.get("name")) == null ? null : tmp_3_0.invalid) && ((tmp_3_0 = ctx_r1.applicationForm.get("name")) == null ? null : tmp_3_0.touched));
|
|
39
65
|
i0.ɵɵadvance();
|
|
40
|
-
i0.ɵɵconditional(((
|
|
66
|
+
i0.ɵɵconditional(((tmp_4_0 = ctx_r1.applicationForm.get("name")) == null ? null : tmp_4_0.invalid) && ((tmp_4_0 = ctx_r1.applicationForm.get("name")) == null ? null : tmp_4_0.touched) ? 6 : -1);
|
|
41
67
|
} }
|
|
42
|
-
function
|
|
43
|
-
i0.ɵɵelement(0, "i",
|
|
68
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
+
i0.ɵɵelement(0, "i", 52);
|
|
44
70
|
} if (rf & 2) {
|
|
45
|
-
const
|
|
46
|
-
i0.ɵɵproperty("title",
|
|
47
|
-
i0.ɵɵattribute("
|
|
71
|
+
const config_r5 = i0.ɵɵnextContext().$implicit;
|
|
72
|
+
i0.ɵɵproperty("title", config_r5.entity.Description);
|
|
73
|
+
i0.ɵɵattribute("aria-label", "Entity description: " + config_r5.entity.Description);
|
|
48
74
|
} }
|
|
49
|
-
function
|
|
50
|
-
const
|
|
51
|
-
i0.ɵɵelementStart(0, "div",
|
|
52
|
-
i0.ɵɵelement(
|
|
75
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
77
|
+
i0.ɵɵelementStart(0, "div", 45);
|
|
78
|
+
i0.ɵɵelement(1, "i", 46);
|
|
79
|
+
i0.ɵɵelementStart(2, "div", 47)(3, "div", 48);
|
|
80
|
+
i0.ɵɵelement(4, "i", 49);
|
|
53
81
|
i0.ɵɵelementEnd();
|
|
54
|
-
i0.ɵɵelementStart(
|
|
55
|
-
i0.ɵɵtext(
|
|
56
|
-
i0.ɵɵtemplate(
|
|
82
|
+
i0.ɵɵelementStart(5, "div", 50)(6, "div", 51);
|
|
83
|
+
i0.ɵɵtext(7);
|
|
84
|
+
i0.ɵɵtemplate(8, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_For_5_Conditional_8_Template, 1, 2, "i", 52);
|
|
57
85
|
i0.ɵɵelementEnd()()();
|
|
58
|
-
i0.ɵɵelementStart(
|
|
59
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
60
|
-
i0.ɵɵlistener("change", function
|
|
86
|
+
i0.ɵɵelementStart(9, "div", 53)(10, "div", 54)(11, "label", 55)(12, "input", 56);
|
|
87
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_For_5_Template_input_ngModelChange_12_listener($event) { const config_r5 = i0.ɵɵrestoreView(_r4).$implicit; i0.ɵɵtwoWayBindingSet(config_r5.defaultForNewUser, $event) || (config_r5.defaultForNewUser = $event); return i0.ɵɵresetView($event); });
|
|
88
|
+
i0.ɵɵlistener("change", function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_For_5_Template_input_change_12_listener() { const config_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onDefaultForNewUserChange(config_r5)); });
|
|
61
89
|
i0.ɵɵelementEnd();
|
|
62
|
-
i0.ɵɵelementStart(
|
|
63
|
-
i0.ɵɵtext(
|
|
90
|
+
i0.ɵɵelementStart(13, "span", 57);
|
|
91
|
+
i0.ɵɵtext(14, "Default for new users");
|
|
64
92
|
i0.ɵɵelementEnd()()();
|
|
65
|
-
i0.ɵɵelementStart(
|
|
66
|
-
i0.ɵɵtext(
|
|
93
|
+
i0.ɵɵelementStart(15, "div", 58);
|
|
94
|
+
i0.ɵɵtext(16);
|
|
67
95
|
i0.ɵɵelementEnd()();
|
|
68
|
-
i0.ɵɵelementStart(
|
|
69
|
-
i0.ɵɵlistener("click", function
|
|
70
|
-
i0.ɵɵelement(
|
|
71
|
-
i0.ɵɵelementEnd();
|
|
72
|
-
i0.ɵɵelementStart(19, "button", 53);
|
|
73
|
-
i0.ɵɵlistener("click", function ApplicationDialogComponent_kendo_window_0_Conditional_40_For_5_Template_button_click_19_listener() { const ɵ$index_97_r5 = i0.ɵɵrestoreView(_r3).$index; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.moveEntityDown(ɵ$index_97_r5)); });
|
|
74
|
-
i0.ɵɵelement(20, "i", 54);
|
|
75
|
-
i0.ɵɵelementEnd();
|
|
76
|
-
i0.ɵɵelementStart(21, "button", 55);
|
|
77
|
-
i0.ɵɵlistener("click", function ApplicationDialogComponent_kendo_window_0_Conditional_40_For_5_Template_button_click_21_listener() { const config_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.removeEntity(config_r4)); });
|
|
78
|
-
i0.ɵɵelement(22, "i", 29);
|
|
96
|
+
i0.ɵɵelementStart(17, "div", 59)(18, "button", 60);
|
|
97
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_For_5_Template_button_click_18_listener() { const config_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.removeEntity(config_r5)); });
|
|
98
|
+
i0.ɵɵelement(19, "i", 11);
|
|
79
99
|
i0.ɵɵelementEnd()()();
|
|
80
100
|
} if (rf & 2) {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
i0.ɵɵ
|
|
85
|
-
i0.ɵɵadvance(6);
|
|
86
|
-
i0.ɵɵtextInterpolate1(" ", config_r4.entity.Name, " ");
|
|
101
|
+
const config_r5 = ctx.$implicit;
|
|
102
|
+
i0.ɵɵclassProp("is-new", config_r5.isNew)("has-changes", config_r5.hasChanges);
|
|
103
|
+
i0.ɵɵadvance(7);
|
|
104
|
+
i0.ɵɵtextInterpolate1(" ", config_r5.entity.Name, " ");
|
|
87
105
|
i0.ɵɵadvance();
|
|
88
|
-
i0.ɵɵconditional(
|
|
106
|
+
i0.ɵɵconditional(config_r5.entity.Description ? 8 : -1);
|
|
89
107
|
i0.ɵɵadvance(4);
|
|
90
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
108
|
+
i0.ɵɵtwoWayProperty("ngModel", config_r5.defaultForNewUser);
|
|
91
109
|
i0.ɵɵproperty("ngModelOptions", i0.ɵɵpureFunction0(11, _c0));
|
|
92
|
-
i0.ɵɵadvance(
|
|
93
|
-
i0.ɵɵ
|
|
94
|
-
i0.ɵɵadvance(
|
|
95
|
-
i0.ɵɵ
|
|
110
|
+
i0.ɵɵadvance(3);
|
|
111
|
+
i0.ɵɵattribute("aria-label", "Sequence " + config_r5.sequence);
|
|
112
|
+
i0.ɵɵadvance();
|
|
113
|
+
i0.ɵɵtextInterpolate(config_r5.sequence);
|
|
96
114
|
i0.ɵɵadvance(2);
|
|
97
|
-
i0.ɵɵ
|
|
115
|
+
i0.ɵɵattribute("aria-label", "Remove " + config_r5.entity.Name);
|
|
98
116
|
} }
|
|
99
|
-
function
|
|
100
|
-
i0.ɵɵ
|
|
117
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
118
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
119
|
+
i0.ɵɵelementStart(0, "div", 38)(1, "h4", 42);
|
|
101
120
|
i0.ɵɵtext(2);
|
|
102
121
|
i0.ɵɵelementEnd();
|
|
103
|
-
i0.ɵɵelementStart(3, "div",
|
|
104
|
-
i0.ɵɵ
|
|
122
|
+
i0.ɵɵelementStart(3, "div", 43);
|
|
123
|
+
i0.ɵɵlistener("cdkDropListDropped", function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_Template_div_cdkDropListDropped_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onEntityDrop($event)); });
|
|
124
|
+
i0.ɵɵrepeaterCreate(4, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_For_5_Template, 20, 12, "div", 44, _forTrack0);
|
|
105
125
|
i0.ɵɵelementEnd()();
|
|
106
126
|
} if (rf & 2) {
|
|
107
|
-
const ctx_r1 = i0.ɵɵnextContext(
|
|
127
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
108
128
|
i0.ɵɵadvance(2);
|
|
109
129
|
i0.ɵɵtextInterpolate1("Assigned Entities (", ctx_r1.applicationEntities.length, ")");
|
|
110
130
|
i0.ɵɵadvance(2);
|
|
111
131
|
i0.ɵɵrepeater(ctx_r1.applicationEntities);
|
|
112
132
|
} }
|
|
113
|
-
function
|
|
114
|
-
i0.ɵɵelementStart(0, "div",
|
|
115
|
-
i0.ɵɵelement(1, "i",
|
|
133
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
135
|
+
i0.ɵɵelement(1, "i", 23);
|
|
116
136
|
i0.ɵɵelementStart(2, "p");
|
|
117
137
|
i0.ɵɵtext(3, "No entities assigned to this application");
|
|
118
138
|
i0.ɵɵelementEnd();
|
|
119
|
-
i0.ɵɵelementStart(4, "p",
|
|
139
|
+
i0.ɵɵelementStart(4, "p", 61);
|
|
120
140
|
i0.ɵɵtext(5, "Add entities from the available list below");
|
|
121
141
|
i0.ɵɵelementEnd()();
|
|
122
142
|
} }
|
|
123
|
-
function
|
|
124
|
-
const
|
|
125
|
-
i0.ɵɵelementStart(0, "
|
|
126
|
-
i0.ɵɵlistener("click", function
|
|
127
|
-
i0.ɵɵ
|
|
128
|
-
i0.ɵɵ
|
|
129
|
-
|
|
143
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
145
|
+
i0.ɵɵelementStart(0, "button", 69);
|
|
146
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.clearEntitySearch()); });
|
|
147
|
+
i0.ɵɵelement(1, "i", 11);
|
|
148
|
+
i0.ɵɵelementEnd();
|
|
149
|
+
} }
|
|
150
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
152
|
+
i0.ɵɵelementStart(0, "button", 71);
|
|
153
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_8_For_2_Template_button_click_0_listener() { const entity_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addEntity(entity_r9)); });
|
|
154
|
+
i0.ɵɵelementStart(1, "div", 72);
|
|
155
|
+
i0.ɵɵelement(2, "i", 73);
|
|
156
|
+
i0.ɵɵelementStart(3, "span", 74);
|
|
130
157
|
i0.ɵɵtext(4);
|
|
131
158
|
i0.ɵɵelementEnd()()();
|
|
132
159
|
} if (rf & 2) {
|
|
133
|
-
const
|
|
160
|
+
const entity_r9 = ctx.$implicit;
|
|
161
|
+
i0.ɵɵattribute("aria-label", "Add " + entity_r9.Name);
|
|
134
162
|
i0.ɵɵadvance(4);
|
|
135
|
-
i0.ɵɵtextInterpolate(
|
|
163
|
+
i0.ɵɵtextInterpolate(entity_r9.Name);
|
|
136
164
|
} }
|
|
137
|
-
function
|
|
138
|
-
i0.ɵɵelementStart(0, "div",
|
|
139
|
-
i0.ɵɵ
|
|
165
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
166
|
+
i0.ɵɵelementStart(0, "div", 67);
|
|
167
|
+
i0.ɵɵrepeaterCreate(1, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_8_For_2_Template, 5, 2, "button", 70, _forTrack1);
|
|
140
168
|
i0.ɵɵelementEnd();
|
|
141
|
-
|
|
142
|
-
i0.ɵɵ
|
|
169
|
+
} if (rf & 2) {
|
|
170
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
171
|
+
i0.ɵɵadvance();
|
|
172
|
+
i0.ɵɵrepeater(ctx_r1.filteredAvailableEntities);
|
|
173
|
+
} }
|
|
174
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
175
|
+
i0.ɵɵelementStart(0, "div", 68);
|
|
176
|
+
i0.ɵɵelement(1, "i", 75);
|
|
177
|
+
i0.ɵɵelementStart(2, "p");
|
|
178
|
+
i0.ɵɵtext(3);
|
|
143
179
|
i0.ɵɵelementEnd()();
|
|
144
180
|
} if (rf & 2) {
|
|
145
|
-
const ctx_r1 = i0.ɵɵnextContext(
|
|
146
|
-
i0.ɵɵadvance(
|
|
147
|
-
i0.ɵɵtextInterpolate1("
|
|
148
|
-
i0.ɵɵadvance(2);
|
|
149
|
-
i0.ɵɵrepeater(ctx_r1.availableEntities);
|
|
181
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
182
|
+
i0.ɵɵadvance(3);
|
|
183
|
+
i0.ɵɵtextInterpolate1("No entities match \"", ctx_r1.entitySearchTerm, "\"");
|
|
150
184
|
} }
|
|
151
|
-
function
|
|
152
|
-
i0.ɵɵ
|
|
153
|
-
i0.ɵɵ
|
|
185
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
187
|
+
i0.ɵɵelementStart(0, "div", 40)(1, "div", 62)(2, "h4", 42);
|
|
188
|
+
i0.ɵɵtext(3);
|
|
189
|
+
i0.ɵɵelementEnd();
|
|
190
|
+
i0.ɵɵelementStart(4, "div", 63);
|
|
191
|
+
i0.ɵɵelement(5, "i", 64);
|
|
192
|
+
i0.ɵɵelementStart(6, "input", 65);
|
|
193
|
+
i0.ɵɵlistener("input", function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Template_input_input_6_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onEntitySearchChange($event)); });
|
|
194
|
+
i0.ɵɵelementEnd();
|
|
195
|
+
i0.ɵɵtemplate(7, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_7_Template, 2, 0, "button", 66);
|
|
196
|
+
i0.ɵɵelementEnd()();
|
|
197
|
+
i0.ɵɵtemplate(8, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_8_Template, 3, 0, "div", 67)(9, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Conditional_9_Template, 4, 1, "div", 68);
|
|
198
|
+
i0.ɵɵelementEnd();
|
|
199
|
+
} if (rf & 2) {
|
|
200
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
201
|
+
i0.ɵɵadvance(3);
|
|
202
|
+
i0.ɵɵtextInterpolate2("Available Entities (", ctx_r1.filteredAvailableEntities.length, " of ", ctx_r1.availableEntities.length, ")");
|
|
203
|
+
i0.ɵɵadvance(3);
|
|
204
|
+
i0.ɵɵproperty("value", ctx_r1.entitySearchTerm);
|
|
205
|
+
i0.ɵɵadvance();
|
|
206
|
+
i0.ɵɵconditional(ctx_r1.entitySearchTerm ? 7 : -1);
|
|
207
|
+
i0.ɵɵadvance();
|
|
208
|
+
i0.ɵɵconditional(ctx_r1.filteredAvailableEntities.length > 0 ? 8 : 9);
|
|
209
|
+
} }
|
|
210
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
211
|
+
i0.ɵɵelementStart(0, "div", 41);
|
|
212
|
+
i0.ɵɵelement(1, "i", 76);
|
|
154
213
|
i0.ɵɵelementStart(2, "p");
|
|
155
214
|
i0.ɵɵtext(3, "All entities have been assigned to this application");
|
|
156
215
|
i0.ɵɵelementEnd()();
|
|
157
216
|
} }
|
|
158
|
-
function
|
|
159
|
-
i0.ɵɵelementStart(0, "div",
|
|
160
|
-
i0.ɵɵ
|
|
161
|
-
i0.ɵɵtext(5, " System Information ");
|
|
162
|
-
i0.ɵɵelementEnd();
|
|
163
|
-
i0.ɵɵelementStart(6, "p", 13);
|
|
164
|
-
i0.ɵɵtext(7, "Application metadata and audit information");
|
|
217
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
218
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 29);
|
|
219
|
+
i0.ɵɵtemplate(2, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_2_Template, 6, 1, "div", 38)(3, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_3_Template, 6, 0, "div", 39)(4, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_4_Template, 10, 5, "div", 40)(5, ApplicationDialogComponent_Conditional_0_Conditional_36_Conditional_5_Template, 4, 0, "div", 41);
|
|
165
220
|
i0.ɵɵelementEnd()();
|
|
166
|
-
|
|
167
|
-
i0.ɵɵ
|
|
221
|
+
} if (rf & 2) {
|
|
222
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
223
|
+
i0.ɵɵadvance(2);
|
|
224
|
+
i0.ɵɵconditional(ctx_r1.applicationEntities.length > 0 ? 2 : 3);
|
|
225
|
+
i0.ɵɵadvance(2);
|
|
226
|
+
i0.ɵɵconditional(ctx_r1.availableEntities.length > 0 ? 4 : 5);
|
|
227
|
+
} }
|
|
228
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_37_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
229
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 29)(2, "div", 77)(3, "div", 78)(4, "span", 79);
|
|
230
|
+
i0.ɵɵtext(5, "Created");
|
|
168
231
|
i0.ɵɵelementEnd();
|
|
169
|
-
i0.ɵɵelementStart(
|
|
170
|
-
i0.ɵɵtext(
|
|
171
|
-
i0.ɵɵpipe(
|
|
232
|
+
i0.ɵɵelementStart(6, "span", 80);
|
|
233
|
+
i0.ɵɵtext(7);
|
|
234
|
+
i0.ɵɵpipe(8, "date");
|
|
172
235
|
i0.ɵɵelementEnd()();
|
|
173
|
-
i0.ɵɵelementStart(
|
|
174
|
-
i0.ɵɵtext(
|
|
236
|
+
i0.ɵɵelementStart(9, "div", 78)(10, "span", 79);
|
|
237
|
+
i0.ɵɵtext(11, "Last Updated");
|
|
175
238
|
i0.ɵɵelementEnd();
|
|
176
|
-
i0.ɵɵelementStart(
|
|
177
|
-
i0.ɵɵtext(
|
|
178
|
-
i0.ɵɵpipe(
|
|
239
|
+
i0.ɵɵelementStart(12, "span", 80);
|
|
240
|
+
i0.ɵɵtext(13);
|
|
241
|
+
i0.ɵɵpipe(14, "date");
|
|
179
242
|
i0.ɵɵelementEnd()();
|
|
180
|
-
i0.ɵɵelementStart(
|
|
181
|
-
i0.ɵɵtext(
|
|
243
|
+
i0.ɵɵelementStart(15, "div", 78)(16, "span", 79);
|
|
244
|
+
i0.ɵɵtext(17, "Application ID");
|
|
182
245
|
i0.ɵɵelementEnd();
|
|
183
|
-
i0.ɵɵelementStart(
|
|
184
|
-
i0.ɵɵtext(
|
|
246
|
+
i0.ɵɵelementStart(18, "span", 80);
|
|
247
|
+
i0.ɵɵtext(19);
|
|
185
248
|
i0.ɵɵelementEnd()();
|
|
186
|
-
i0.ɵɵelementStart(
|
|
187
|
-
i0.ɵɵtext(
|
|
249
|
+
i0.ɵɵelementStart(20, "div", 78)(21, "span", 79);
|
|
250
|
+
i0.ɵɵtext(22, "Total Entities");
|
|
188
251
|
i0.ɵɵelementEnd();
|
|
189
|
-
i0.ɵɵelementStart(
|
|
190
|
-
i0.ɵɵtext(
|
|
191
|
-
i0.ɵɵelementEnd()()()()()
|
|
252
|
+
i0.ɵɵelementStart(23, "span", 80);
|
|
253
|
+
i0.ɵɵtext(24);
|
|
254
|
+
i0.ɵɵelementEnd()()()()();
|
|
192
255
|
} if (rf & 2) {
|
|
193
|
-
const ctx_r1 = i0.ɵɵnextContext(
|
|
194
|
-
i0.ɵɵadvance(
|
|
195
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(
|
|
256
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
257
|
+
i0.ɵɵadvance(7);
|
|
258
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(8, 4, ctx_r1.data == null ? null : ctx_r1.data.application == null ? null : ctx_r1.data.application.__mj_CreatedAt, "medium"));
|
|
196
259
|
i0.ɵɵadvance(6);
|
|
197
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(
|
|
260
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(14, 7, ctx_r1.data == null ? null : ctx_r1.data.application == null ? null : ctx_r1.data.application.__mj_UpdatedAt, "medium"));
|
|
198
261
|
i0.ɵɵadvance(6);
|
|
199
262
|
i0.ɵɵtextInterpolate(ctx_r1.data == null ? null : ctx_r1.data.application == null ? null : ctx_r1.data.application.ID);
|
|
200
263
|
i0.ɵɵadvance(5);
|
|
201
264
|
i0.ɵɵtextInterpolate(ctx_r1.applicationEntities.length);
|
|
202
265
|
} }
|
|
203
|
-
function
|
|
204
|
-
i0.ɵɵ
|
|
266
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
267
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
268
|
+
i0.ɵɵelementStart(0, "fieldset", 15)(1, "legend", 16);
|
|
269
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Conditional_37_Template_legend_click_1_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleSection("systemInfo")); });
|
|
270
|
+
i0.ɵɵelementStart(2, "div", 17)(3, "span", 18);
|
|
271
|
+
i0.ɵɵelement(4, "i", 19);
|
|
272
|
+
i0.ɵɵtext(5, " System Information ");
|
|
273
|
+
i0.ɵɵelementEnd();
|
|
274
|
+
i0.ɵɵelement(6, "i", 20);
|
|
275
|
+
i0.ɵɵelementEnd();
|
|
276
|
+
i0.ɵɵelementStart(7, "span", 21);
|
|
277
|
+
i0.ɵɵtext(8, "Application metadata and audit information");
|
|
278
|
+
i0.ɵɵelementEnd()();
|
|
279
|
+
i0.ɵɵtemplate(9, ApplicationDialogComponent_Conditional_0_Conditional_37_Conditional_9_Template, 25, 10, "div", 22);
|
|
280
|
+
i0.ɵɵelementEnd();
|
|
281
|
+
} if (rf & 2) {
|
|
282
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
283
|
+
i0.ɵɵadvance(6);
|
|
284
|
+
i0.ɵɵclassProp("fa-chevron-up", ctx_r1.sectionExpanded.systemInfo)("fa-chevron-down", !ctx_r1.sectionExpanded.systemInfo);
|
|
285
|
+
i0.ɵɵadvance(3);
|
|
286
|
+
i0.ɵɵconditional(ctx_r1.sectionExpanded.systemInfo ? 9 : -1);
|
|
287
|
+
} }
|
|
288
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
+
i0.ɵɵelement(0, "i", 81);
|
|
205
290
|
i0.ɵɵtext(1, " Saving... ");
|
|
206
291
|
} }
|
|
207
|
-
function
|
|
208
|
-
i0.ɵɵelement(0, "i",
|
|
292
|
+
function ApplicationDialogComponent_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
293
|
+
i0.ɵɵelement(0, "i", 82);
|
|
209
294
|
i0.ɵɵtext(1);
|
|
210
295
|
} if (rf & 2) {
|
|
211
296
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
212
297
|
i0.ɵɵadvance();
|
|
213
298
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.isEditMode ? "Update Application" : "Create Application", " ");
|
|
214
299
|
} }
|
|
215
|
-
function
|
|
300
|
+
function ApplicationDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
216
301
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
217
|
-
i0.ɵɵelementStart(0, "
|
|
218
|
-
i0.ɵɵlistener("
|
|
219
|
-
i0.ɵɵelementStart(1, "
|
|
220
|
-
i0.ɵɵ
|
|
221
|
-
i0.ɵɵ
|
|
302
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
303
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
304
|
+
i0.ɵɵelementStart(1, "div", 2);
|
|
305
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
306
|
+
i0.ɵɵelementStart(2, "div", 3)(3, "div", 4)(4, "h2", 5);
|
|
307
|
+
i0.ɵɵelement(5, "i", 6);
|
|
308
|
+
i0.ɵɵtext(6);
|
|
222
309
|
i0.ɵɵelementEnd();
|
|
223
|
-
i0.ɵɵelementStart(
|
|
224
|
-
i0.ɵɵtext(
|
|
310
|
+
i0.ɵɵelementStart(7, "p", 7);
|
|
311
|
+
i0.ɵɵtext(8);
|
|
312
|
+
i0.ɵɵelementEnd()();
|
|
313
|
+
i0.ɵɵelementStart(9, "div", 8)(10, "button", 9);
|
|
314
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFullscreen()); });
|
|
315
|
+
i0.ɵɵelement(11, "i", 6);
|
|
316
|
+
i0.ɵɵelementEnd();
|
|
317
|
+
i0.ɵɵelementStart(12, "button", 10);
|
|
318
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
319
|
+
i0.ɵɵelement(13, "i", 11);
|
|
225
320
|
i0.ɵɵelementEnd()()();
|
|
226
|
-
i0.ɵɵelementStart(
|
|
227
|
-
i0.ɵɵlistener("ngSubmit", function
|
|
228
|
-
i0.ɵɵtemplate(
|
|
229
|
-
i0.ɵɵelementStart(
|
|
230
|
-
i0.ɵɵ
|
|
231
|
-
i0.ɵɵ
|
|
321
|
+
i0.ɵɵelementStart(14, "div", 12)(15, "form", 13);
|
|
322
|
+
i0.ɵɵlistener("ngSubmit", function ApplicationDialogComponent_Conditional_0_Template_form_ngSubmit_15_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSubmit()); });
|
|
323
|
+
i0.ɵɵtemplate(16, ApplicationDialogComponent_Conditional_0_Conditional_16_Template, 5, 1, "div", 14);
|
|
324
|
+
i0.ɵɵelementStart(17, "fieldset", 15)(18, "legend", 16);
|
|
325
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Template_legend_click_18_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSection("basicInfo")); });
|
|
326
|
+
i0.ɵɵelementStart(19, "div", 17)(20, "span", 18);
|
|
327
|
+
i0.ɵɵelement(21, "i", 19);
|
|
328
|
+
i0.ɵɵtext(22, " Application Information ");
|
|
232
329
|
i0.ɵɵelementEnd();
|
|
233
|
-
i0.ɵɵ
|
|
234
|
-
i0.ɵɵ
|
|
330
|
+
i0.ɵɵelement(23, "i", 20);
|
|
331
|
+
i0.ɵɵelementEnd();
|
|
332
|
+
i0.ɵɵelementStart(24, "span", 21);
|
|
333
|
+
i0.ɵɵtext(25, "Define the application's basic properties");
|
|
235
334
|
i0.ɵɵelementEnd()();
|
|
236
|
-
i0.ɵɵ
|
|
237
|
-
i0.ɵɵtext(22, "Application Name");
|
|
335
|
+
i0.ɵɵtemplate(26, ApplicationDialogComponent_Conditional_0_Conditional_26_Template, 13, 4, "div", 22);
|
|
238
336
|
i0.ɵɵelementEnd();
|
|
239
|
-
i0.ɵɵ
|
|
240
|
-
i0.ɵɵ
|
|
337
|
+
i0.ɵɵelementStart(27, "fieldset", 15)(28, "legend", 16);
|
|
338
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Template_legend_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSection("entities")); });
|
|
339
|
+
i0.ɵɵelementStart(29, "div", 17)(30, "span", 18);
|
|
340
|
+
i0.ɵɵelement(31, "i", 23);
|
|
341
|
+
i0.ɵɵtext(32, " Application Entities ");
|
|
241
342
|
i0.ɵɵelementEnd();
|
|
242
|
-
i0.ɵɵ
|
|
243
|
-
i0.ɵɵtext(27, "Description");
|
|
343
|
+
i0.ɵɵelement(33, "i", 20);
|
|
244
344
|
i0.ɵɵelementEnd();
|
|
245
|
-
i0.ɵɵ
|
|
246
|
-
i0.ɵɵ
|
|
247
|
-
i0.ɵɵ
|
|
248
|
-
i0.ɵɵ
|
|
249
|
-
i0.ɵɵelementStart(31, "div", 8)(32, "div", 9)(33, "div", 10)(34, "h3", 11);
|
|
250
|
-
i0.ɵɵelement(35, "i", 22);
|
|
251
|
-
i0.ɵɵtext(36, " Application Entities ");
|
|
345
|
+
i0.ɵɵelementStart(34, "span", 21);
|
|
346
|
+
i0.ɵɵtext(35, "Manage which entities are included in this application");
|
|
347
|
+
i0.ɵɵelementEnd()();
|
|
348
|
+
i0.ɵɵtemplate(36, ApplicationDialogComponent_Conditional_0_Conditional_36_Template, 6, 2, "div", 22);
|
|
252
349
|
i0.ɵɵelementEnd();
|
|
253
|
-
i0.ɵɵ
|
|
254
|
-
i0.ɵɵtext(38, "Manage which entities are included in this application");
|
|
350
|
+
i0.ɵɵtemplate(37, ApplicationDialogComponent_Conditional_0_Conditional_37_Template, 10, 5, "fieldset", 15);
|
|
255
351
|
i0.ɵɵelementEnd()();
|
|
256
|
-
i0.ɵɵelementStart(
|
|
257
|
-
i0.ɵɵ
|
|
258
|
-
i0.ɵɵ
|
|
259
|
-
i0.ɵɵtemplate(44, ApplicationDialogComponent_kendo_window_0_Conditional_44_Template, 32, 10, "div", 8);
|
|
260
|
-
i0.ɵɵelementStart(45, "div", 27)(46, "button", 28);
|
|
261
|
-
i0.ɵɵlistener("click", function ApplicationDialogComponent_kendo_window_0_Template_button_click_46_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
262
|
-
i0.ɵɵelement(47, "i", 29);
|
|
263
|
-
i0.ɵɵtext(48, " Cancel ");
|
|
352
|
+
i0.ɵɵelementStart(38, "div", 24)(39, "button", 25);
|
|
353
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Template_button_click_39_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSubmit()); });
|
|
354
|
+
i0.ɵɵtemplate(40, ApplicationDialogComponent_Conditional_0_Conditional_40_Template, 2, 0)(41, ApplicationDialogComponent_Conditional_0_Conditional_41_Template, 2, 1);
|
|
264
355
|
i0.ɵɵelementEnd();
|
|
265
|
-
i0.ɵɵelementStart(
|
|
266
|
-
i0.ɵɵ
|
|
267
|
-
i0.ɵɵ
|
|
356
|
+
i0.ɵɵelementStart(42, "button", 26);
|
|
357
|
+
i0.ɵɵlistener("click", function ApplicationDialogComponent_Conditional_0_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
358
|
+
i0.ɵɵtext(43, " Cancel ");
|
|
359
|
+
i0.ɵɵelementEnd()()()();
|
|
268
360
|
} if (rf & 2) {
|
|
269
|
-
let tmp_10_0;
|
|
270
|
-
let tmp_11_0;
|
|
271
361
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
272
|
-
i0.ɵɵ
|
|
273
|
-
i0.ɵɵ
|
|
362
|
+
i0.ɵɵadvance();
|
|
363
|
+
i0.ɵɵclassProp("fullscreen", ctx_r1.isFullscreen);
|
|
364
|
+
i0.ɵɵadvance();
|
|
365
|
+
i0.ɵɵclassProp("create-mode", !ctx_r1.isEditMode)("edit-mode", ctx_r1.isEditMode);
|
|
366
|
+
i0.ɵɵadvance(3);
|
|
367
|
+
i0.ɵɵclassProp("fa-plus", !ctx_r1.isEditMode)("fa-layer-group", ctx_r1.isEditMode);
|
|
368
|
+
i0.ɵɵadvance();
|
|
274
369
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.isEditMode ? "Edit Application" : "Create New Application", " ");
|
|
275
370
|
i0.ɵɵadvance(2);
|
|
276
371
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.isEditMode ? "Update application information and settings" : "Add a new application to the system", " ");
|
|
277
372
|
i0.ɵɵadvance(2);
|
|
373
|
+
i0.ɵɵattribute("aria-label", ctx_r1.isFullscreen ? "Exit fullscreen" : "Enter fullscreen");
|
|
374
|
+
i0.ɵɵadvance();
|
|
375
|
+
i0.ɵɵclassProp("fa-compress", ctx_r1.isFullscreen)("fa-expand", !ctx_r1.isFullscreen);
|
|
376
|
+
i0.ɵɵadvance(4);
|
|
278
377
|
i0.ɵɵproperty("formGroup", ctx_r1.applicationForm);
|
|
279
378
|
i0.ɵɵadvance();
|
|
280
|
-
i0.ɵɵconditional(ctx_r1.error ?
|
|
281
|
-
i0.ɵɵadvance(
|
|
282
|
-
i0.ɵɵclassProp("
|
|
379
|
+
i0.ɵɵconditional(ctx_r1.error ? 16 : -1);
|
|
380
|
+
i0.ɵɵadvance(7);
|
|
381
|
+
i0.ɵɵclassProp("fa-chevron-up", ctx_r1.sectionExpanded.basicInfo)("fa-chevron-down", !ctx_r1.sectionExpanded.basicInfo);
|
|
382
|
+
i0.ɵɵadvance(3);
|
|
383
|
+
i0.ɵɵconditional(ctx_r1.sectionExpanded.basicInfo ? 26 : -1);
|
|
384
|
+
i0.ɵɵadvance(7);
|
|
385
|
+
i0.ɵɵclassProp("fa-chevron-up", ctx_r1.sectionExpanded.entities)("fa-chevron-down", !ctx_r1.sectionExpanded.entities);
|
|
386
|
+
i0.ɵɵadvance(3);
|
|
387
|
+
i0.ɵɵconditional(ctx_r1.sectionExpanded.entities ? 36 : -1);
|
|
283
388
|
i0.ɵɵadvance();
|
|
284
|
-
i0.ɵɵconditional(
|
|
285
|
-
i0.ɵɵadvance(16);
|
|
286
|
-
i0.ɵɵconditional(ctx_r1.applicationEntities.length > 0 ? 40 : 41);
|
|
389
|
+
i0.ɵɵconditional(ctx_r1.isEditMode ? 37 : -1);
|
|
287
390
|
i0.ɵɵadvance(2);
|
|
288
|
-
i0.ɵɵconditional(ctx_r1.availableEntities.length > 0 ? 42 : 43);
|
|
289
|
-
i0.ɵɵadvance(2);
|
|
290
|
-
i0.ɵɵconditional(ctx_r1.isEditMode ? 44 : -1);
|
|
291
|
-
i0.ɵɵadvance(5);
|
|
292
391
|
i0.ɵɵproperty("disabled", ctx_r1.applicationForm.invalid || ctx_r1.isLoading);
|
|
392
|
+
i0.ɵɵattribute("aria-busy", ctx_r1.isLoading);
|
|
293
393
|
i0.ɵɵadvance();
|
|
294
|
-
i0.ɵɵconditional(ctx_r1.isLoading ?
|
|
394
|
+
i0.ɵɵconditional(ctx_r1.isLoading ? 40 : 41);
|
|
295
395
|
} }
|
|
296
396
|
export class ApplicationDialogComponent {
|
|
297
397
|
data = null;
|
|
@@ -306,6 +406,16 @@ export class ApplicationDialogComponent {
|
|
|
306
406
|
applicationEntities = [];
|
|
307
407
|
availableEntities = [];
|
|
308
408
|
allEntities = [];
|
|
409
|
+
// Search filter for available entities
|
|
410
|
+
entitySearchTerm = '';
|
|
411
|
+
// Section expansion state
|
|
412
|
+
sectionExpanded = {
|
|
413
|
+
basicInfo: true,
|
|
414
|
+
entities: true,
|
|
415
|
+
systemInfo: false
|
|
416
|
+
};
|
|
417
|
+
// Fullscreen state
|
|
418
|
+
isFullscreen = false;
|
|
309
419
|
constructor() {
|
|
310
420
|
this.applicationForm = this.fb.group({
|
|
311
421
|
name: ['', [Validators.required, Validators.maxLength(100)]],
|
|
@@ -362,9 +472,10 @@ export class ApplicationDialogComponent {
|
|
|
362
472
|
});
|
|
363
473
|
this.applicationEntities = [];
|
|
364
474
|
this.availableEntities = [...this.allEntities];
|
|
475
|
+
this.entitySearchTerm = '';
|
|
365
476
|
this.error = null;
|
|
366
477
|
}
|
|
367
|
-
onEscapeKey(
|
|
478
|
+
onEscapeKey() {
|
|
368
479
|
if (this.visible) {
|
|
369
480
|
this.onCancel();
|
|
370
481
|
}
|
|
@@ -478,6 +589,34 @@ export class ApplicationDialogComponent {
|
|
|
478
589
|
get hasEntityChanges() {
|
|
479
590
|
return this.applicationEntities.some(ae => ae.isNew || ae.hasChanges);
|
|
480
591
|
}
|
|
592
|
+
// Filtered available entities based on search term
|
|
593
|
+
get filteredAvailableEntities() {
|
|
594
|
+
if (!this.entitySearchTerm || !this.entitySearchTerm.trim()) {
|
|
595
|
+
return this.availableEntities;
|
|
596
|
+
}
|
|
597
|
+
const searchLower = this.entitySearchTerm.toLowerCase().trim();
|
|
598
|
+
return this.availableEntities.filter(entity => (entity.Name || '').toLowerCase().includes(searchLower) ||
|
|
599
|
+
(entity.Description || '').toLowerCase().includes(searchLower));
|
|
600
|
+
}
|
|
601
|
+
onEntitySearchChange(event) {
|
|
602
|
+
const value = event.target.value;
|
|
603
|
+
this.entitySearchTerm = value;
|
|
604
|
+
}
|
|
605
|
+
clearEntitySearch() {
|
|
606
|
+
this.entitySearchTerm = '';
|
|
607
|
+
}
|
|
608
|
+
toggleSection(section) {
|
|
609
|
+
this.sectionExpanded[section] = !this.sectionExpanded[section];
|
|
610
|
+
}
|
|
611
|
+
toggleFullscreen() {
|
|
612
|
+
this.isFullscreen = !this.isFullscreen;
|
|
613
|
+
}
|
|
614
|
+
onEntityDrop(event) {
|
|
615
|
+
if (event.previousIndex !== event.currentIndex) {
|
|
616
|
+
moveItemInArray(this.applicationEntities, event.previousIndex, event.currentIndex);
|
|
617
|
+
this.updateSequences();
|
|
618
|
+
}
|
|
619
|
+
}
|
|
481
620
|
async onSubmit() {
|
|
482
621
|
if (this.applicationForm.invalid) {
|
|
483
622
|
this.markFormGroupTouched(this.applicationForm);
|
|
@@ -558,16 +697,16 @@ export class ApplicationDialogComponent {
|
|
|
558
697
|
}
|
|
559
698
|
static ɵfac = function ApplicationDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ApplicationDialogComponent)(); };
|
|
560
699
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ApplicationDialogComponent, selectors: [["mj-application-dialog"]], hostBindings: function ApplicationDialogComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
561
|
-
i0.ɵɵlistener("keydown.escape", function ApplicationDialogComponent_keydown_escape_HostBindingHandler(
|
|
562
|
-
} }, inputs: { data: "data", visible: "visible" }, outputs: { result: "result" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["
|
|
563
|
-
i0.ɵɵtemplate(0,
|
|
700
|
+
i0.ɵɵlistener("keydown.escape", function ApplicationDialogComponent_keydown_escape_HostBindingHandler() { return ctx.onEscapeKey(); }, false, i0.ɵɵresolveDocument);
|
|
701
|
+
} }, inputs: { data: "data", visible: "visible" }, outputs: { result: "result" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["role", "presentation", 1, "modal-backdrop"], ["role", "presentation", 1, "modal-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", "aria-labelledby", "application-dialog-title", "aria-describedby", "application-dialog-description", 1, "modal-dialog", 3, "click"], [1, "modal-header"], [1, "modal-header-content"], ["id", "application-dialog-title", 1, "modal-title"], ["aria-hidden", "true", 1, "fa-solid"], ["id", "application-dialog-description", 1, "modal-subtitle"], [1, "modal-header-actions"], ["type", "button", 1, "modal-action-btn", 3, "click"], ["aria-label", "Close dialog", "type", "button", 1, "modal-close", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-times"], [1, "modal-body"], [3, "ngSubmit", "formGroup"], [1, "form-section"], [1, "form-section", "collapsible-section"], [1, "section-header", "clickable", 3, "click"], [1, "section-title-row"], [1, "section-title"], ["aria-hidden", "true", 1, "fa-solid", "fa-info-circle"], ["aria-hidden", "true", 1, "fa-solid", "chevron-icon"], [1, "section-description"], [1, "section-content"], ["aria-hidden", "true", 1, "fa-solid", "fa-database"], [1, "modal-footer"], ["type", "submit", 1, "mj-btn", "mj-btn-primary", 3, "click", "disabled"], ["type", "button", 1, "mj-btn", "mj-btn-secondary", 3, "click"], ["role", "alert", 1, "alert", "alert-error"], ["aria-hidden", "true", 1, "fa-solid", "fa-exclamation-triangle"], [1, "form-grid"], [1, "form-field"], ["for", "app-name", 1, "field-label", "required"], ["id", "app-name", "type", "text", "formControlName", "name", "placeholder", "My Application", "aria-describedby", "app-name-error", 1, "field-input"], ["id", "app-name-error", "role", "alert", 1, "field-error"], ["for", "app-description", 1, "field-label"], ["id", "app-description", "formControlName", "description", "placeholder", "Describe the application's purpose and functionality...", "rows", "4", 1, "field-textarea"], [1, "field-hint"], ["aria-hidden", "true", 1, "fa-solid", "fa-exclamation-circle"], [1, "assigned-entities"], [1, "no-entities"], [1, "available-entities"], [1, "all-assigned"], [1, "subsection-title"], ["role", "list", "cdkDropList", "", 1, "entities-list", 3, "cdkDropListDropped"], ["role", "listitem", "cdkDrag", "", 1, "entity-item", 3, "is-new", "has-changes"], ["role", "listitem", "cdkDrag", "", 1, "entity-item"], ["aria-hidden", "true", 1, "fa-solid", "fa-grip-vertical", "drag-handle"], [1, "entity-info"], [1, "entity-icon"], ["aria-hidden", "true", 1, "fa-solid", "fa-table"], [1, "entity-details"], [1, "entity-name"], [1, "fa-solid", "fa-info-circle", "entity-info-icon", 3, "title"], [1, "entity-config"], [1, "config-item"], [1, "config-label"], ["type", "checkbox", 1, "config-checkbox", 3, "ngModelChange", "change", "ngModel", "ngModelOptions"], [1, "checkbox-text"], [1, "sequence-badge"], [1, "entity-actions"], ["type", "button", "title", "Remove entity", 1, "btn-icon", "btn-danger", 3, "click"], [1, "empty-subtext"], [1, "available-entities-header"], [1, "entity-search"], ["aria-hidden", "true", 1, "fa-solid", "fa-search", "entity-search-icon"], ["type", "text", "placeholder", "Search entities...", "aria-label", "Search available entities", 1, "entity-search-input", 3, "input", "value"], ["type", "button", "aria-label", "Clear search", 1, "entity-search-clear"], ["role", "list", 1, "entities-grid"], [1, "no-search-results"], ["type", "button", "aria-label", "Clear search", 1, "entity-search-clear", 3, "click"], ["type", "button", "role", "listitem", 1, "entity-chip"], ["type", "button", "role", "listitem", 1, "entity-chip", 3, "click"], [1, "chip-content"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], [1, "chip-name"], ["aria-hidden", "true", 1, "fa-solid", "fa-search"], ["aria-hidden", "true", 1, "fa-solid", "fa-check-circle"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "fa-spin"], ["aria-hidden", "true", 1, "fa-solid", "fa-save"]], template: function ApplicationDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
702
|
+
i0.ɵɵtemplate(0, ApplicationDialogComponent_Conditional_0_Template, 44, 33, "div", 0);
|
|
564
703
|
} if (rf & 2) {
|
|
565
|
-
i0.ɵɵ
|
|
566
|
-
} }, dependencies: [i1.NgIf, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.NgModel, i2.FormGroupDirective, i2.FormControlName, i3.WindowComponent, i3.WindowTitleBarComponent, i3.WindowContainerDirective, i1.DatePipe], styles: ["/* Modern Dialog Styling - Matching Dashboard Design */\n:host ::ng-deep .k-window {\n border: none;\n border-radius: 12px;\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.30), 0 15px 12px rgba(0, 0, 0, 0.22);\n background: #ffffff;\n overflow: hidden;\n}\n\n:host ::ng-deep .k-window-titlebar {\n background: linear-gradient(135deg, #2196f3 0%, #1976d2 100%);\n border: none;\n padding: 24px 32px;\n min-height: 70px;\n}\n\n:host ::ng-deep .k-window-titlebar .k-window-title {\n display: none; /* Hide default title */\n}\n\n:host ::ng-deep .k-window-titlebar .k-window-actions {\n position: absolute;\n top: 24px;\n right: 24px;\n}\n\n:host ::ng-deep .k-window-titlebar .k-window-actions .k-button {\n background: rgba(255, 255, 255, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.2);\n color: #ffffff;\n border-radius: 6px;\n width: 32px;\n height: 32px;\n min-width: auto;\n}\n\n:host ::ng-deep .k-window-titlebar .k-window-actions .k-button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n}\n\n:host ::ng-deep .k-window-content {\n padding: 0;\n background: #ffffff;\n}\n\n/* Custom Title Bar */\n.dialog-header {\n position: relative;\n color: #ffffff;\n}\n\n.dialog-header .dialog-title {\n font-size: 18px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 16px;\n margin: 0;\n}\n\n.dialog-header .dialog-title i {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.15);\n border-radius: 6px;\n font-size: 14px;\n}\n\n.dialog-header .dialog-subtitle {\n margin: 4px 0 0 0;\n font-size: 12px;\n opacity: 0.85;\n font-weight: 400;\n}\n\n/* Modal Content Areas */\n.dialog-content {\n padding: 0;\n background: #ffffff;\n}\n\n.dialog-content .content-section {\n padding: 32px;\n}\n\n.dialog-content .content-section:not(:last-child) {\n border-bottom: 1px solid #e0e0e0;\n}\n\n.dialog-footer {\n padding: 24px 32px;\n background: #fafafa;\n border-top: 1px solid #e0e0e0;\n display: flex;\n justify-content: flex-end;\n gap: 16px;\n}\n\n/* Form Sections */\n.form-section .section-header {\n margin-bottom: 24px;\n}\n\n.form-section .section-header .section-title {\n font-size: 16px;\n font-weight: 600;\n color: #212121;\n margin: 0 0 4px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.form-section .section-header .section-title i {\n color: #2196f3;\n font-size: 14px;\n}\n\n.form-section .section-header .section-description {\n font-size: 12px;\n color: #666666;\n margin: 0;\n}\n\n.form-grid {\n display: grid;\n gap: 24px;\n}\n\n.form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n}\n\n@media (max-width: 640px) {\n .form-row {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n}\n\n/* Modern Form Fields */\n.form-field {\n margin-bottom: 24px;\n}\n\n.form-field:last-child {\n margin-bottom: 0;\n}\n\n.form-field .field-label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: #212121;\n margin-bottom: 8px;\n}\n\n.form-field .field-label.required::after {\n content: ' *';\n color: #f44336;\n}\n\n.form-field .field-input,\n.form-field .field-select,\n.form-field .field-textarea {\n width: 100%;\n padding: 0 16px;\n border: 1px solid #bdbdbd;\n border-radius: 6px;\n font-size: 14px;\n background: #ffffff;\n transition: all 0.15s ease;\n}\n\n.form-field .field-input:focus,\n.form-field .field-select:focus,\n.form-field .field-textarea:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n}\n\n.form-field .field-input.error,\n.form-field .field-select.error,\n.form-field .field-textarea.error {\n border-color: #f44336;\n}\n\n.form-field .field-input.error:focus,\n.form-field .field-select.error:focus,\n.form-field .field-textarea.error:focus {\n border-color: #f44336;\n box-shadow: 0 0 0 3px rgba(244, 67, 54, 0.1);\n}\n\n.form-field .field-input::placeholder,\n.form-field .field-select::placeholder,\n.form-field .field-textarea::placeholder {\n color: #9e9e9e;\n}\n\n.form-field .field-input,\n.form-field .field-select {\n height: 36px;\n}\n\n.form-field .field-textarea {\n min-height: 100px;\n padding: 16px;\n resize: vertical;\n line-height: 1.4;\n}\n\n.form-field .field-select {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23666' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 16px center;\n background-repeat: no-repeat;\n background-size: 16px;\n padding-right: calc(16px + 24px);\n appearance: none;\n cursor: pointer;\n}\n\n.form-field .field-error {\n margin-top: 8px;\n font-size: 11px;\n color: #f44336;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.form-field .field-error i {\n font-size: 10px;\n}\n\n.form-field .field-hint {\n margin-top: 8px;\n font-size: 11px;\n color: #666666;\n line-height: 1.4;\n}\n\n/* Alert Messages */\n.alert {\n padding: 16px 24px;\n border-radius: 8px;\n margin-bottom: 24px;\n display: flex;\n align-items: flex-start;\n gap: 16px;\n}\n\n.alert i {\n font-size: 16px;\n flex-shrink: 0;\n margin-top: 2px;\n}\n\n.alert.alert-error {\n background: rgba(244, 67, 54, 0.1);\n border: 1px solid rgba(244, 67, 54, 0.2);\n color: #c62828;\n}\n\n.alert.alert-error i {\n color: #f44336;\n}\n\n.alert.alert-warning {\n background: rgba(255, 193, 7, 0.1);\n border: 1px solid rgba(255, 193, 7, 0.2);\n color: #b7800d;\n}\n\n.alert.alert-warning i {\n color: #ffc107;\n}\n\n.alert.alert-info {\n background: rgba(0, 188, 212, 0.1);\n border: 1px solid rgba(0, 188, 212, 0.2);\n color: #00838f;\n}\n\n.alert.alert-info i {\n color: #00bcd4;\n}\n\n/* Button Styles */\n.dialog-footer .btn {\n padding: 8px 24px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n border: 1px solid transparent;\n cursor: pointer;\n transition: all 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-height: 36px;\n}\n\n.dialog-footer .btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.dialog-footer .btn:disabled i.fa-spinner {\n animation: spin 1s linear infinite;\n}\n\n.dialog-footer .btn.btn-secondary {\n background: #ffffff;\n color: #666666;\n border-color: #bdbdbd;\n}\n\n.dialog-footer .btn.btn-secondary:hover:not(:disabled) {\n background: #f8f9fa;\n border-color: #757575;\n color: #212121;\n}\n\n.dialog-footer .btn.btn-primary {\n background: #2196f3;\n color: #ffffff;\n}\n\n.dialog-footer .btn.btn-primary:hover:not(:disabled) {\n background: #1976d2;\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.2);\n transform: translateY(-1px);\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* Entity Management Styles */\n.subsection-title {\n font-size: 14px;\n font-weight: 600;\n color: #212121;\n margin: 0 0 16px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.assigned-entities {\n margin-bottom: 32px;\n}\n\n.assigned-entities .entities-list {\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n background: #ffffff;\n}\n\n.entity-item {\n display: flex;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #fafafa;\n transition: all 0.15s ease;\n}\n\n.entity-item:last-child {\n border-bottom: none;\n}\n\n.entity-item:hover {\n background: rgba(33, 150, 243, 0.02);\n}\n\n.entity-item.is-new {\n background: rgba(76, 175, 80, 0.05);\n border-left: 3px solid #4caf50;\n}\n\n.entity-item.has-changes {\n background: rgba(0, 188, 212, 0.05);\n border-left: 3px solid #00bcd4;\n}\n\n.entity-item .entity-info {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-item .entity-info .entity-icon {\n width: 40px;\n height: 40px;\n background: rgba(33, 150, 243, 0.1);\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #2196f3;\n flex-shrink: 0;\n}\n\n.entity-item .entity-info .entity-details {\n flex: 1;\n min-width: 0;\n}\n\n.entity-item .entity-info .entity-details .entity-name {\n font-weight: 500;\n color: #212121;\n margin-bottom: 2px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-item .entity-info .entity-details .entity-name .entity-info-icon {\n color: #00bcd4;\n font-size: 14px;\n cursor: help;\n opacity: 0.7;\n transition: all 0.15s ease;\n}\n\n.entity-item .entity-info .entity-details .entity-name .entity-info-icon:hover {\n opacity: 1;\n transform: scale(1.1);\n}\n\n.entity-item .entity-info .entity-details .entity-description {\n font-size: 12px;\n color: #666666;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.entity-item .entity-config {\n display: flex;\n align-items: center;\n gap: 24px;\n margin: 0 24px;\n}\n\n.entity-item .entity-config .config-item .config-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 12px;\n color: #666666;\n margin: 0;\n}\n\n.entity-item .entity-config .config-item .config-label .config-checkbox {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.entity-item .entity-config .sequence-badge {\n background: #2196f3;\n color: #ffffff;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n min-width: 24px;\n text-align: center;\n}\n\n.entity-item .entity-actions {\n display: flex;\n gap: 4px;\n}\n\n.no-entities,\n.all-assigned {\n text-align: center;\n padding: 32px;\n color: #666666;\n}\n\n.no-entities i,\n.all-assigned i {\n font-size: 2rem;\n color: #bdbdbd;\n margin-bottom: 16px;\n}\n\n.no-entities p,\n.all-assigned p {\n margin: 0 0 4px 0;\n font-weight: 500;\n}\n\n.no-entities .empty-subtext,\n.all-assigned .empty-subtext {\n font-size: 12px;\n color: #9e9e9e;\n margin: 0;\n}\n\n.available-entities .entities-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 8px;\n}\n\n@media (max-width: 640px) {\n .available-entities .entities-grid {\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n }\n}\n\n.entity-chip {\n padding: 16px;\n border: 1px solid #bdbdbd;\n border-radius: 8px;\n background: #ffffff;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.entity-chip .chip-content {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-chip .chip-content i {\n color: #2196f3;\n font-size: 14px;\n}\n\n.entity-chip .chip-content .chip-name {\n font-size: 12px;\n color: #212121;\n font-weight: 500;\n}\n\n.entity-chip:hover {\n border-color: #2196f3;\n background: rgba(33, 150, 243, 0.05);\n transform: translateY(-1px);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n}\n\n/* Info Grid for System Information */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n@media (max-width: 640px) {\n .info-grid {\n grid-template-columns: 1fr;\n }\n}\n\n.info-grid .info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-grid .info-item .info-label {\n font-size: 11px;\n color: #666666;\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.info-grid .info-item .info-value {\n font-size: 12px;\n color: #212121;\n font-weight: 500;\n}\n\n/* Enhanced Button Icons */\n.btn-icon {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n}\n\n.btn-icon:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.btn-icon.btn-neutral {\n background: rgba(189, 189, 189, 0.1);\n color: #666666;\n}\n\n.btn-icon.btn-neutral:hover:not(:disabled) {\n background: rgba(189, 189, 189, 0.2);\n color: #212121;\n transform: scale(1.05);\n}\n\n.btn-icon.btn-danger {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n}\n\n.btn-icon.btn-danger:hover:not(:disabled) {\n background: rgba(244, 67, 54, 0.2);\n transform: scale(1.05);\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n :host ::ng-deep .k-window {\n margin: 16px;\n max-width: none;\n width: calc(100vw - 24px) !important;\n height: calc(100vh - 24px) !important;\n }\n \n :host ::ng-deep .k-window-titlebar {\n padding: 16px 24px;\n min-height: 60px;\n }\n \n .dialog-content .content-section {\n padding: 24px 16px;\n }\n \n .dialog-footer {\n padding: 16px 24px;\n flex-direction: column-reverse;\n }\n \n .dialog-footer .btn {\n width: 100%;\n justify-content: center;\n }\n}"], encapsulation: 2 });
|
|
704
|
+
i0.ɵɵconditional(ctx.visible ? 0 : -1);
|
|
705
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.FormGroupDirective, i1.FormControlName, i2.CdkDropList, i2.CdkDrag, i3.DatePipe], styles: ["\n\n\n\n\n\n\n\n\n\n[_nghost-%COMP%] {\n \n\n --md-primary: #0076B6;\n --md-on-primary: #FFFFFF;\n --md-primary-container: #AAE7FD;\n --md-on-primary-container: #001F2A;\n\n \n\n --md-secondary: #F5A623;\n --md-on-secondary: #FFFFFF;\n --md-secondary-container: #FFECD6;\n --md-on-secondary-container: #2D1600;\n\n \n\n --md-tertiary: #4CAF50;\n --md-on-tertiary: #FFFFFF;\n --md-tertiary-container: #C8E6C9;\n --md-on-tertiary-container: #002204;\n\n \n\n --md-error: #D32F2F;\n --md-on-error: #FFFFFF;\n --md-error-container: #FFCDD2;\n --md-on-error-container: #410002;\n\n \n\n --md-surface: #FAFCFF;\n --md-surface-container-lowest: #FFFFFF;\n --md-surface-container-low: #F3F5F9;\n --md-surface-container: #EDF0F4;\n --md-surface-container-high: #E7EAEE;\n --md-surface-container-highest: #E1E3E8;\n --md-on-surface: #191C20;\n --md-on-surface-variant: #43474E;\n --md-outline: #74777F;\n --md-outline-variant: #C4C6D0;\n\n \n\n --md-elevation-1: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.08);\n --md-elevation-2: 0 2px 4px rgba(0, 0, 0, 0.1), 0 4px 8px rgba(0, 0, 0, 0.08);\n --md-elevation-3: 0 4px 8px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.08);\n --md-elevation-4: 0 6px 12px rgba(0, 0, 0, 0.1), 0 12px 24px rgba(0, 0, 0, 0.08);\n --md-elevation-5: 0 8px 16px rgba(0, 0, 0, 0.12), 0 16px 32px rgba(0, 0, 0, 0.1);\n\n \n\n --md-corner-extra-small: 4px;\n --md-corner-small: 8px;\n --md-corner-medium: 12px;\n --md-corner-large: 16px;\n --md-corner-extra-large: 28px;\n --md-corner-full: 9999px;\n}\n\n\n\n\n\n.modal-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.2s cubic-bezier(0, 0, 0.2, 1);\n padding: 1rem;\n}\n\n.modal-dialog[_ngcontent-%COMP%] {\n background: var(--md-surface);\n border-radius: var(--md-corner-extra-large);\n box-shadow: var(--md-elevation-5);\n max-width: 900px;\n width: 100%;\n max-height: 90vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_slideUp 0.3s cubic-bezier(0, 0, 0.2, 1);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n\n\n.modal-dialog.fullscreen[_ngcontent-%COMP%] {\n max-width: 100vw;\n width: 100vw;\n max-height: 100vh;\n height: 100vh;\n border-radius: 0;\n margin: 0;\n}\n\n\n\n\n\n.modal-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 1.5rem 1.5rem 1rem 1.5rem;\n background: #0076B6;\n color: var(--md-on-primary);\n flex-shrink: 0;\n}\n\n.modal-header-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.modal-header[_ngcontent-%COMP%] .modal-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 1.375rem;\n font-weight: 600;\n color: var(--md-on-primary);\n margin: 0;\n}\n\n.modal-header[_ngcontent-%COMP%] .modal-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.2);\n border-radius: var(--md-corner-medium);\n font-size: 1.125rem;\n flex-shrink: 0;\n}\n\n\n\n.modal-header.create-mode[_ngcontent-%COMP%] .modal-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n background: var(--md-on-primary);\n color: #0076B6;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n\n\n.modal-header.edit-mode[_ngcontent-%COMP%] .modal-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n background: rgba(255, 255, 255, 0.2);\n color: var(--md-on-primary);\n}\n\n\n\n.modal-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n align-items: center;\n flex-shrink: 0;\n margin-left: 0.5rem;\n}\n\n.modal-action-btn[_ngcontent-%COMP%] {\n padding: 0.625rem;\n border: none;\n background: transparent;\n color: var(--md-on-primary);\n font-size: 1.125rem;\n cursor: pointer;\n border-radius: var(--md-corner-full);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n min-width: 44px;\n min-height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.modal-action-btn[_ngcontent-%COMP%]:hover {\n background: rgba(255, 255, 255, 0.15);\n}\n\n.modal-action-btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--md-on-primary);\n outline-offset: 2px;\n}\n\n.modal-header[_ngcontent-%COMP%] .modal-subtitle[_ngcontent-%COMP%] {\n margin: 0.375rem 0 0 0;\n font-size: 0.8125rem;\n color: var(--md-on-primary);\n opacity: 0.85;\n}\n\n.modal-header[_ngcontent-%COMP%] .modal-close[_ngcontent-%COMP%] {\n padding: 0.625rem;\n border: none;\n background: transparent;\n color: var(--md-on-primary);\n font-size: 1.25rem;\n cursor: pointer;\n border-radius: var(--md-corner-full);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n min-width: 44px;\n min-height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin-left: 0.5rem;\n}\n\n.modal-header[_ngcontent-%COMP%] .modal-close[_ngcontent-%COMP%]:hover {\n background: rgba(255, 255, 255, 0.15);\n}\n\n.modal-header[_ngcontent-%COMP%] .modal-close[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--md-on-primary);\n outline-offset: 2px;\n}\n\n\n\n\n\n.modal-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n padding: 0;\n background: var(--md-surface);\n}\n\n\n\n\n\n.modal-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1.25rem 1.5rem;\n border-top: 1px solid var(--md-outline-variant);\n background: var(--md-surface-container-low);\n flex-shrink: 0;\n}\n\n\n\n\n\n.form-section[_ngcontent-%COMP%] {\n border: none;\n margin: 0;\n padding: 1.5rem;\n border-bottom: 1px solid var(--md-outline-variant);\n}\n\n.form-section[_ngcontent-%COMP%]:last-of-type {\n border-bottom: none;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n margin-bottom: 1.25rem;\n padding: 0;\n font-weight: normal;\n}\n\n.section-header[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 1.0625rem;\n font-weight: 600;\n color: var(--md-on-surface);\n}\n\n.section-header[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--md-primary);\n font-size: 0.875rem;\n}\n\n.section-header[_ngcontent-%COMP%] .section-description[_ngcontent-%COMP%] {\n font-size: 0.8125rem;\n color: var(--md-on-surface-variant);\n}\n\n\n\n\n\n.collapsible-section[_ngcontent-%COMP%] .section-header.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n transition: background-color 0.2s ease;\n padding: 0.75rem 0;\n margin: -0.75rem 0 0.75rem 0;\n}\n\n.collapsible-section[_ngcontent-%COMP%] .section-header.clickable[_ngcontent-%COMP%]:hover {\n opacity: 0.8;\n}\n\n.section-title-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n margin-bottom: 0.25rem;\n}\n\n.chevron-icon[_ngcontent-%COMP%] {\n color: var(--md-on-surface-variant);\n font-size: 0.875rem;\n transition: transform 0.2s ease;\n flex-shrink: 0;\n}\n\n.section-content[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_expandSection 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes _ngcontent-%COMP%_expandSection {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n\n\n.form-grid[_ngcontent-%COMP%] {\n display: grid;\n gap: 1.25rem;\n}\n\n.form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.25rem;\n}\n\n\n\n\n\n.form-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.form-field[_ngcontent-%COMP%] .field-label[_ngcontent-%COMP%] {\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--md-on-surface);\n}\n\n.form-field[_ngcontent-%COMP%] .field-label.required[_ngcontent-%COMP%]::after {\n content: ' *';\n color: var(--md-error);\n}\n\n.form-field[_ngcontent-%COMP%] .field-input[_ngcontent-%COMP%], \n.form-field[_ngcontent-%COMP%] .field-select[_ngcontent-%COMP%], \n.form-field[_ngcontent-%COMP%] .field-textarea[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 44px;\n padding: 0.75rem 1rem;\n border: 1px solid var(--md-outline);\n border-radius: var(--md-corner-small);\n font-size: 0.9375rem;\n background: var(--md-surface);\n color: var(--md-on-surface);\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n}\n\n.form-field[_ngcontent-%COMP%] .field-input[_ngcontent-%COMP%]:focus, \n.form-field[_ngcontent-%COMP%] .field-select[_ngcontent-%COMP%]:focus, \n.form-field[_ngcontent-%COMP%] .field-textarea[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--md-primary);\n box-shadow: 0 0 0 3px rgba(0, 118, 182, 0.12);\n}\n\n.form-field[_ngcontent-%COMP%] .field-input.error[_ngcontent-%COMP%], \n.form-field[_ngcontent-%COMP%] .field-select.error[_ngcontent-%COMP%], \n.form-field[_ngcontent-%COMP%] .field-textarea.error[_ngcontent-%COMP%] {\n border-color: var(--md-error);\n}\n\n.form-field[_ngcontent-%COMP%] .field-input.error[_ngcontent-%COMP%]:focus, \n.form-field[_ngcontent-%COMP%] .field-select.error[_ngcontent-%COMP%]:focus, \n.form-field[_ngcontent-%COMP%] .field-textarea.error[_ngcontent-%COMP%]:focus {\n border-color: var(--md-error);\n box-shadow: 0 0 0 3px rgba(211, 47, 47, 0.12);\n}\n\n.form-field[_ngcontent-%COMP%] .field-input[_ngcontent-%COMP%]::placeholder, \n.form-field[_ngcontent-%COMP%] .field-textarea[_ngcontent-%COMP%]::placeholder {\n color: var(--md-on-surface-variant);\n}\n\n.form-field[_ngcontent-%COMP%] .field-textarea[_ngcontent-%COMP%] {\n min-height: 100px;\n resize: vertical;\n line-height: 1.5;\n}\n\n.form-field[_ngcontent-%COMP%] .field-error[_ngcontent-%COMP%] {\n margin-top: 0.25rem;\n font-size: 0.8125rem;\n color: var(--md-error);\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.form-field[_ngcontent-%COMP%] .field-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.625rem;\n}\n\n.form-field[_ngcontent-%COMP%] .field-hint[_ngcontent-%COMP%] {\n font-size: 0.8125rem;\n color: var(--md-on-surface-variant);\n line-height: 1.4;\n}\n\n\n\n\n\n.alert[_ngcontent-%COMP%] {\n padding: 1rem 1.25rem;\n border-radius: var(--md-corner-small);\n margin-bottom: 1rem;\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n}\n\n.alert[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1rem;\n flex-shrink: 0;\n margin-top: 0.125rem;\n}\n\n.alert.alert-error[_ngcontent-%COMP%] {\n background: var(--md-error-container);\n border: 1px solid rgba(211, 47, 47, 0.2);\n color: var(--md-on-error-container);\n}\n\n.alert.alert-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--md-error);\n}\n\n\n\n\n\n.subsection-title[_ngcontent-%COMP%] {\n font-size: 0.9375rem;\n font-weight: 600;\n color: var(--md-on-surface);\n margin: 0 0 1rem 0;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.assigned-entities[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n}\n\n.assigned-entities[_ngcontent-%COMP%] .entities-list[_ngcontent-%COMP%] {\n border: 1px solid var(--md-outline-variant);\n border-radius: var(--md-corner-small);\n overflow: hidden;\n background: var(--md-surface);\n}\n\n.entity-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 1rem 1.25rem;\n border-bottom: 1px solid var(--md-surface-container);\n transition: all 0.15s ease;\n}\n\n.entity-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.entity-item[_ngcontent-%COMP%]:hover {\n background: var(--md-surface-container-low);\n}\n\n.entity-item.is-new[_ngcontent-%COMP%] {\n background: rgba(76, 175, 80, 0.08);\n border-left: 3px solid var(--md-tertiary);\n}\n\n.entity-item.has-changes[_ngcontent-%COMP%] {\n background: rgba(245, 166, 35, 0.08);\n border-left: 3px solid var(--md-secondary);\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex: 1;\n min-width: 0;\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] .entity-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n background: var(--md-primary-container);\n border-radius: var(--md-corner-small);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--md-primary);\n flex-shrink: 0;\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] .entity-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] .entity-details[_ngcontent-%COMP%] .entity-name[_ngcontent-%COMP%] {\n font-size: 0.9375rem;\n font-weight: 600;\n color: var(--md-on-surface);\n margin-bottom: 0.125rem;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] .entity-details[_ngcontent-%COMP%] .entity-name[_ngcontent-%COMP%] .entity-info-icon[_ngcontent-%COMP%] {\n color: var(--md-secondary);\n font-size: 0.875rem;\n cursor: help;\n opacity: 0.7;\n transition: all 0.15s ease;\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] .entity-details[_ngcontent-%COMP%] .entity-name[_ngcontent-%COMP%] .entity-info-icon[_ngcontent-%COMP%]:hover {\n opacity: 1;\n transform: scale(1.1);\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-config[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n margin: 0 1.5rem;\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-config[_ngcontent-%COMP%] .config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n font-size: 0.8125rem;\n color: var(--md-on-surface-variant);\n margin: 0;\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-config[_ngcontent-%COMP%] .config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] .config-checkbox[_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--md-primary);\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-config[_ngcontent-%COMP%] .sequence-badge[_ngcontent-%COMP%] {\n background: var(--md-primary);\n color: var(--md-on-primary);\n padding: 0.25rem 0.5rem;\n border-radius: var(--md-corner-extra-small);\n font-size: 0.75rem;\n font-weight: 600;\n min-width: 24px;\n text-align: center;\n}\n\n.entity-item[_ngcontent-%COMP%] .entity-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.25rem;\n}\n\n\n\n\n\n.drag-handle[_ngcontent-%COMP%] {\n color: var(--md-on-surface-variant);\n cursor: grab;\n margin-right: 0.75rem;\n font-size: 1rem;\n transition: color 0.2s ease;\n flex-shrink: 0;\n}\n\n.drag-handle[_ngcontent-%COMP%]:hover {\n color: var(--md-primary);\n}\n\n.drag-handle[_ngcontent-%COMP%]:active {\n cursor: grabbing;\n}\n\n.entity-item.cdk-drag-preview[_ngcontent-%COMP%] {\n box-shadow: var(--md-elevation-4);\n transform: rotate(1deg);\n opacity: 0.9;\n border-color: var(--md-primary);\n background: var(--md-surface);\n}\n\n.entity-item.cdk-drag-placeholder[_ngcontent-%COMP%] {\n opacity: 0.4;\n border-style: dashed;\n border-color: var(--md-primary);\n background: var(--md-surface-container-low);\n}\n\n.entity-item.cdk-drag-animating[_ngcontent-%COMP%] {\n transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);\n}\n\n.entities-list.cdk-drop-list-dragging[_ngcontent-%COMP%] .entity-item[_ngcontent-%COMP%]:not(.cdk-drag-placeholder) {\n transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);\n}\n\n\n\n\n\n.no-entities[_ngcontent-%COMP%], \n.all-assigned[_ngcontent-%COMP%] {\n text-align: center;\n padding: 2rem;\n color: var(--md-on-surface-variant);\n}\n\n.no-entities[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.all-assigned[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n color: var(--md-outline-variant);\n margin-bottom: 1rem;\n display: block;\n}\n\n.no-entities[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.all-assigned[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 0.25rem 0;\n font-size: 0.9375rem;\n}\n\n.no-entities[_ngcontent-%COMP%] .empty-subtext[_ngcontent-%COMP%], \n.all-assigned[_ngcontent-%COMP%] .empty-subtext[_ngcontent-%COMP%] {\n font-size: 0.8125rem;\n color: var(--md-on-surface-variant);\n margin: 0;\n}\n\n\n\n\n\n.available-entities-header[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n margin-bottom: 1rem;\n}\n\n@media (min-width: 640px) {\n .available-entities-header[_ngcontent-%COMP%] {\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n }\n}\n\n.available-entities-header[_ngcontent-%COMP%] .subsection-title[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n\n\n.entity-search[_ngcontent-%COMP%] {\n position: relative;\n min-width: 200px;\n max-width: 100%;\n width: 100%;\n}\n\n@media (min-width: 640px) {\n .entity-search[_ngcontent-%COMP%] {\n min-width: 280px;\n max-width: 400px;\n width: auto;\n }\n}\n\n@media (min-width: 768px) {\n .entity-search[_ngcontent-%COMP%] {\n min-width: 320px;\n max-width: 450px;\n }\n}\n\n.entity-search[_ngcontent-%COMP%] .entity-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 1rem;\n top: 50%;\n transform: translateY(-50%);\n color: var(--md-on-surface-variant);\n font-size: 1rem;\n pointer-events: none;\n transition: color 0.2s ease;\n}\n\n@media (min-width: 768px) {\n .entity-search[_ngcontent-%COMP%] .entity-search-icon[_ngcontent-%COMP%] {\n left: 1.125rem;\n font-size: 1.125rem;\n }\n}\n\n.entity-search[_ngcontent-%COMP%] .entity-search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0.875rem 2.75rem 0.875rem 2.75rem;\n border: 2px solid var(--md-outline);\n border-radius: var(--md-corner-full);\n font-size: 1rem;\n background: var(--md-surface);\n color: var(--md-on-surface);\n transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;\n min-height: 48px;\n box-shadow: var(--md-elevation-1);\n}\n\n@media (min-width: 768px) {\n .entity-search[_ngcontent-%COMP%] .entity-search-input[_ngcontent-%COMP%] {\n padding: 1rem 3rem 1rem 3rem;\n min-height: 52px;\n font-size: 1.0625rem;\n border-radius: var(--md-corner-full);\n }\n}\n\n.entity-search[_ngcontent-%COMP%] .entity-search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--md-on-surface-variant);\n}\n\n.entity-search[_ngcontent-%COMP%] .entity-search-input[_ngcontent-%COMP%]:hover {\n border-color: var(--md-primary);\n background: var(--md-surface-container-low);\n}\n\n.entity-search[_ngcontent-%COMP%] .entity-search-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--md-primary);\n box-shadow: var(--md-elevation-2), 0 0 0 3px rgba(0, 118, 182, 0.2);\n background: var(--md-surface);\n}\n\n.entity-search[_ngcontent-%COMP%]:focus-within .entity-search-icon[_ngcontent-%COMP%] {\n color: var(--md-primary);\n}\n\n.entity-search[_ngcontent-%COMP%] .entity-search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n padding: 0.375rem;\n border: none;\n background: transparent;\n color: var(--md-on-surface-variant);\n cursor: pointer;\n border-radius: var(--md-corner-full);\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n min-height: 28px;\n transition: all 0.15s ease;\n}\n\n@media (min-width: 768px) {\n .entity-search[_ngcontent-%COMP%] .entity-search-clear[_ngcontent-%COMP%] {\n right: 0.875rem;\n min-width: 32px;\n min-height: 32px;\n }\n}\n\n.entity-search[_ngcontent-%COMP%] .entity-search-clear[_ngcontent-%COMP%]:hover {\n background: var(--md-primary);\n color: var(--md-on-primary);\n}\n\n\n\n.no-search-results[_ngcontent-%COMP%] {\n text-align: center;\n padding: 1.5rem;\n color: var(--md-on-surface-variant);\n background: var(--md-surface-container-low);\n border-radius: var(--md-corner-small);\n}\n\n.no-search-results[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: var(--md-outline-variant);\n margin-bottom: 0.5rem;\n display: block;\n}\n\n.no-search-results[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.8125rem;\n}\n\n\n\n\n\n.available-entities[_ngcontent-%COMP%] .entities-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 0.5rem;\n}\n\n.entity-chip[_ngcontent-%COMP%] {\n padding: 0.75rem 1rem;\n border: 1px solid var(--md-outline-variant);\n border-radius: var(--md-corner-small);\n background: var(--md-surface);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.entity-chip[_ngcontent-%COMP%] .chip-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.entity-chip[_ngcontent-%COMP%] .chip-content[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--md-primary);\n font-size: 0.875rem;\n}\n\n.entity-chip[_ngcontent-%COMP%] .chip-content[_ngcontent-%COMP%] .chip-name[_ngcontent-%COMP%] {\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--md-on-surface);\n}\n\n.entity-chip[_ngcontent-%COMP%]:hover {\n border-color: var(--md-primary);\n background: var(--md-primary-container);\n transform: translateY(-1px);\n box-shadow: var(--md-elevation-1);\n}\n\n\n\n\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 1rem;\n}\n\n.info-grid[_ngcontent-%COMP%] .info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.info-grid[_ngcontent-%COMP%] .info-item[_ngcontent-%COMP%] .info-label[_ngcontent-%COMP%] {\n font-size: 0.6875rem;\n font-weight: 500;\n color: var(--md-on-surface-variant);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.info-grid[_ngcontent-%COMP%] .info-item[_ngcontent-%COMP%] .info-value[_ngcontent-%COMP%] {\n font-size: 0.9375rem;\n color: var(--md-on-surface);\n}\n\n\n\n\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: none;\n border-radius: var(--md-corner-full);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n}\n\n.btn-icon[_ngcontent-%COMP%]:disabled {\n opacity: 0.38;\n cursor: not-allowed;\n}\n\n.btn-icon.btn-neutral[_ngcontent-%COMP%] {\n background: var(--md-surface-container);\n color: var(--md-on-surface-variant);\n}\n\n.btn-icon.btn-neutral[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--md-primary);\n color: var(--md-on-primary);\n}\n\n.btn-icon.btn-danger[_ngcontent-%COMP%] {\n background: var(--md-error-container);\n color: var(--md-on-error-container);\n}\n\n.btn-icon.btn-danger[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #E57373;\n color: var(--md-on-error);\n}\n\n\n\n.btn-icon.btn-add[_ngcontent-%COMP%] {\n background: var(--md-primary);\n color: var(--md-on-primary);\n box-shadow: var(--md-elevation-1);\n}\n\n.btn-icon.btn-add[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #3395C8;\n box-shadow: var(--md-elevation-2);\n}\n\n.btn-icon.btn-add[_ngcontent-%COMP%]:active:not(:disabled) {\n background: #4BA5D4;\n transform: scale(0.95);\n}\n\n\n\n\n\n.icon-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.icon-wrapper-sm[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: var(--md-corner-small);\n font-size: 0.875rem;\n}\n\n.icon-wrapper-md[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: var(--md-corner-small);\n font-size: 1rem;\n}\n\n.icon-wrapper-lg[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: var(--md-corner-medium);\n font-size: 1.25rem;\n}\n\n.icon-wrapper-xl[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: var(--md-corner-medium);\n font-size: 1.5rem;\n}\n\n\n\n.icon-wrapper-primary[_ngcontent-%COMP%] {\n background: var(--md-primary-container);\n color: var(--md-primary);\n}\n\n.icon-wrapper-secondary[_ngcontent-%COMP%] {\n background: var(--md-secondary-container);\n color: #B5751A;\n}\n\n.icon-wrapper-tertiary[_ngcontent-%COMP%] {\n background: var(--md-tertiary-container);\n color: var(--md-tertiary);\n}\n\n.icon-wrapper-error[_ngcontent-%COMP%] {\n background: var(--md-error-container);\n color: var(--md-error);\n}\n\n\n\n.icon-wrapper-inverted[_ngcontent-%COMP%] {\n background: var(--md-on-primary);\n color: var(--md-primary);\n}\n\n\n\n\n\n.mj-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 0.75rem 1.5rem;\n font-size: 0.875rem;\n font-weight: 600;\n border: none;\n border-radius: var(--md-corner-full);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n white-space: nowrap;\n min-height: 44px;\n}\n\n.mj-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.38;\n cursor: not-allowed;\n}\n\n\n\n.mj-btn-primary[_ngcontent-%COMP%] {\n background: var(--md-primary);\n color: var(--md-on-primary);\n box-shadow: var(--md-elevation-1);\n}\n\n.mj-btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #3395C8;\n box-shadow: var(--md-elevation-2);\n}\n\n.mj-btn-primary[_ngcontent-%COMP%]:active:not(:disabled) {\n background: #4BA5D4;\n transform: scale(0.98);\n}\n\n\n\n.mj-btn-secondary[_ngcontent-%COMP%] {\n background: var(--md-surface);\n color: var(--md-primary);\n border: 1px solid var(--md-outline);\n}\n\n.mj-btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--md-primary);\n color: var(--md-on-primary);\n border-color: var(--md-primary);\n}\n\n.mj-btn-secondary[_ngcontent-%COMP%]:active:not(:disabled) {\n background: #005A8C;\n border-color: #005A8C;\n}\n\n\n\n\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes _ngcontent-%COMP%_slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n\n\n\n\n.field-input[_ngcontent-%COMP%]:focus-visible, \n.field-select[_ngcontent-%COMP%]:focus-visible, \n.field-textarea[_ngcontent-%COMP%]:focus-visible, \n.mj-btn[_ngcontent-%COMP%]:focus-visible, \n.btn-icon[_ngcontent-%COMP%]:focus-visible, \n.entity-chip[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--md-primary);\n outline-offset: 2px;\n}\n\n\n\n\n\n@media (prefers-reduced-motion: reduce) {\n *[_ngcontent-%COMP%], \n *[_ngcontent-%COMP%]::before, \n *[_ngcontent-%COMP%]::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n\n\n\n\n@media (max-width: 639px) {\n .modal-backdrop[_ngcontent-%COMP%] {\n padding: 0.5rem;\n }\n\n .modal-dialog[_ngcontent-%COMP%] {\n border-radius: var(--md-corner-extra-large);\n max-height: 95vh;\n }\n\n \n\n .modal-dialog.fullscreen[_ngcontent-%COMP%] {\n border-radius: 0;\n max-height: 100vh;\n }\n\n .modal-header[_ngcontent-%COMP%] {\n padding: 1.25rem 1rem 1rem 1rem;\n }\n\n .modal-header[_ngcontent-%COMP%] .modal-title[_ngcontent-%COMP%] {\n font-size: 1.125rem;\n }\n\n .modal-header[_ngcontent-%COMP%] .modal-close[_ngcontent-%COMP%] {\n border-radius: var(--md-corner-full);\n }\n\n \n\n .modal-header[_ngcontent-%COMP%] .modal-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n font-size: 1rem;\n }\n\n \n\n .icon-wrapper-lg[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n font-size: 1rem;\n }\n\n .icon-wrapper-xl[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n font-size: 1.25rem;\n }\n\n \n\n .btn-icon.btn-add[_ngcontent-%COMP%] {\n border-radius: var(--md-corner-full);\n }\n\n .form-section[_ngcontent-%COMP%] {\n padding: 1.25rem 1rem;\n }\n\n .form-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n\n .modal-footer[_ngcontent-%COMP%] {\n padding: 1rem;\n flex-direction: column;\n }\n\n .modal-footer[_ngcontent-%COMP%] .mj-btn[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: center;\n border-radius: var(--md-corner-full);\n }\n\n \n\n .entity-item[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 0.75rem;\n padding: 0.875rem 1rem;\n position: relative;\n }\n\n \n\n .drag-handle[_ngcontent-%COMP%] {\n position: static;\n margin-right: 0.75rem;\n margin-bottom: 0.5rem;\n font-size: 1.25rem;\n color: var(--md-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: 0.5rem;\n background: var(--md-surface-container-low);\n border-radius: var(--md-corner-small);\n cursor: grab;\n }\n\n .drag-handle[_ngcontent-%COMP%]:active {\n cursor: grabbing;\n background: var(--md-primary-container);\n }\n\n .entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] {\n gap: 0.75rem;\n }\n\n .entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] .entity-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n font-size: 0.875rem;\n border-radius: var(--md-corner-small);\n }\n\n .entity-item[_ngcontent-%COMP%] .entity-info[_ngcontent-%COMP%] .entity-details[_ngcontent-%COMP%] .entity-name[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n word-break: break-word;\n overflow-wrap: break-word;\n line-height: 1.3;\n flex-wrap: wrap;\n }\n\n .entity-item[_ngcontent-%COMP%] .entity-config[_ngcontent-%COMP%] {\n margin: 0;\n width: 100%;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 0.75rem;\n }\n\n .entity-item[_ngcontent-%COMP%] .entity-config[_ngcontent-%COMP%] .config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n font-size: 0.8125rem;\n }\n\n .entity-item[_ngcontent-%COMP%] .entity-actions[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: flex-end;\n gap: 0.5rem;\n }\n\n \n\n .available-entities[_ngcontent-%COMP%] .entities-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .entity-chip[_ngcontent-%COMP%] {\n padding: 0.625rem 0.875rem;\n border-radius: var(--md-corner-small);\n }\n\n .entity-chip[_ngcontent-%COMP%] .chip-content[_ngcontent-%COMP%] .chip-name[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n word-break: break-word;\n }\n\n \n\n .entity-search[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n\n .entity-search[_ngcontent-%COMP%] .entity-search-input[_ngcontent-%COMP%] {\n padding: 0.75rem 2.5rem 0.75rem 2.5rem;\n min-height: 44px;\n font-size: 0.9375rem;\n border-radius: var(--md-corner-full);\n }\n\n .entity-search[_ngcontent-%COMP%] .entity-search-icon[_ngcontent-%COMP%] {\n left: 0.875rem;\n font-size: 0.875rem;\n }\n\n .entity-search[_ngcontent-%COMP%] .entity-search-clear[_ngcontent-%COMP%] {\n right: 0.625rem;\n border-radius: var(--md-corner-full);\n }\n\n .info-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 1fr;\n }\n\n \n\n .btn-icon[_ngcontent-%COMP%] {\n border-radius: var(--md-corner-full);\n }\n}\n\n\n\n@media (min-width: 640px) {\n .modal-dialog[_ngcontent-%COMP%] {\n max-width: 650px;\n }\n\n .available-entities[_ngcontent-%COMP%] .entities-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n }\n}\n\n\n\n@media (min-width: 768px) {\n .modal-dialog[_ngcontent-%COMP%] {\n max-width: 800px;\n }\n\n .modal-header[_ngcontent-%COMP%] {\n padding: 1.5rem 2rem 1.25rem 2rem;\n }\n\n .form-section[_ngcontent-%COMP%] {\n padding: 1.75rem 2rem;\n }\n\n .modal-footer[_ngcontent-%COMP%] {\n padding: 1.25rem 2rem;\n }\n}\n\n\n\n@media (min-width: 1024px) {\n .modal-dialog[_ngcontent-%COMP%] {\n max-width: 900px;\n }\n\n .available-entities[_ngcontent-%COMP%] .entities-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n }\n}"] });
|
|
567
706
|
}
|
|
568
707
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ApplicationDialogComponent, [{
|
|
569
708
|
type: Component,
|
|
570
|
-
args: [{ selector: 'mj-application-dialog', encapsulation: ViewEncapsulation.None, template: "<kendo-window\n *ngIf=\"visible\"\n [width]=\"900\"\n [height]=\"700\"\n [resizable]=\"false\"\n [draggable]=\"true\"\n [keepContent]=\"true\"\n (close)=\"onCancel()\"\n kendoWindowContainer>\n \n <kendo-window-titlebar>\n <div class=\"dialog-header\">\n <h2 class=\"dialog-title\">\n <i class=\"fa-solid fa-grid-2\"></i>\n {{ isEditMode ? 'Edit Application' : 'Create New Application' }}\n </h2>\n <p class=\"dialog-subtitle\">\n {{ isEditMode ? 'Update application information and settings' : 'Add a new application to the system' }}\n </p>\n </div>\n </kendo-window-titlebar>\n\n <div class=\"dialog-content\">\n <form [formGroup]=\"applicationForm\" (ngSubmit)=\"onSubmit()\">\n \n @if (error) {\n <div class=\"content-section\">\n <div class=\"alert alert-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div>{{ error }}</div>\n </div>\n </div>\n }\n\n <!-- Basic Information Section -->\n <div class=\"content-section\">\n <div class=\"form-section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Application Information\n </h3>\n <p class=\"section-description\">Define the application's basic properties</p>\n </div>\n \n <div class=\"form-grid\">\n <div class=\"form-field\">\n <label class=\"field-label required\" for=\"name\">Application Name</label>\n <input \n id=\"name\"\n type=\"text\" \n class=\"field-input\" \n formControlName=\"name\"\n placeholder=\"My Application\"\n [class.error]=\"applicationForm.get('name')?.invalid && applicationForm.get('name')?.touched\"\n />\n @if (applicationForm.get('name')?.invalid && applicationForm.get('name')?.touched) {\n <div class=\"field-error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n @if (applicationForm.get('name')?.errors?.['required']) {\n Application name is required\n }\n @if (applicationForm.get('name')?.errors?.['maxlength']) {\n Application name cannot exceed 100 characters\n }\n </div>\n }\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\" for=\"description\">Description</label>\n <textarea \n id=\"description\"\n class=\"field-textarea\" \n formControlName=\"description\"\n placeholder=\"Describe the application's purpose and functionality...\"\n rows=\"6\"\n ></textarea>\n <div class=\"field-hint\">\n Provide a clear description of what this application does and its main features.\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Entity Management Section -->\n <div class=\"content-section\">\n <div class=\"form-section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-database\"></i>\n Application Entities\n </h3>\n <p class=\"section-description\">Manage which entities are included in this application</p>\n </div>\n \n <div class=\"form-grid\">\n <!-- Assigned Entities -->\n @if (applicationEntities.length > 0) {\n <div class=\"assigned-entities\">\n <h4 class=\"subsection-title\">Assigned Entities ({{ applicationEntities.length }})</h4>\n <div class=\"entities-list\">\n @for (config of applicationEntities; track config.entity.ID; let i = $index) {\n <div class=\"entity-item\" [class.is-new]=\"config.isNew\" [class.has-changes]=\"config.hasChanges\">\n <div class=\"entity-info\">\n <div class=\"entity-icon\">\n <i class=\"fa-solid fa-table\"></i>\n </div>\n <div class=\"entity-details\">\n <div class=\"entity-name\">\n {{ config.entity.Name }}\n @if (config.entity.Description) {\n <i class=\"fa-solid fa-info-circle entity-info-icon\" \n [title]=\"config.entity.Description\"\n [attr.data-tooltip]=\"config.entity.Description\"></i>\n }\n </div>\n </div>\n </div>\n \n <div class=\"entity-config\">\n <div class=\"config-item\">\n <label class=\"config-label\">\n <input \n type=\"checkbox\" \n [(ngModel)]=\"config.defaultForNewUser\"\n [ngModelOptions]=\"{standalone: true}\"\n (change)=\"onDefaultForNewUserChange(config)\"\n class=\"config-checkbox\"\n />\n <span class=\"checkbox-text\">Default for new users</span>\n </label>\n </div>\n <div class=\"sequence-badge\">{{ config.sequence }}</div>\n </div>\n \n <div class=\"entity-actions\">\n <button \n type=\"button\" \n class=\"btn-icon btn-neutral\"\n (click)=\"moveEntityUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\"\n >\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button \n type=\"button\" \n class=\"btn-icon btn-neutral\"\n (click)=\"moveEntityDown(i)\"\n [disabled]=\"i === applicationEntities.length - 1\"\n title=\"Move down\"\n >\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n <button \n type=\"button\" \n class=\"btn-icon btn-danger\"\n (click)=\"removeEntity(config)\"\n title=\"Remove entity\"\n >\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"no-entities\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No entities assigned to this application</p>\n <p class=\"empty-subtext\">Add entities from the available list below</p>\n </div>\n }\n \n <!-- Available Entities -->\n @if (availableEntities.length > 0) {\n <div class=\"available-entities\">\n <h4 class=\"subsection-title\">Available Entities ({{ availableEntities.length }})</h4>\n <div class=\"entities-grid\">\n @for (entity of availableEntities; track entity.ID) {\n <div class=\"entity-chip\" (click)=\"addEntity(entity)\">\n <div class=\"chip-content\">\n <i class=\"fa-solid fa-plus\"></i>\n <span class=\"chip-name\">{{ entity.Name }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"all-assigned\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>All entities have been assigned to this application</p>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Application Info Section -->\n @if (isEditMode) {\n <div class=\"content-section\">\n <div class=\"form-section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n System Information\n </h3>\n <p class=\"section-description\">Application metadata and audit information</p>\n </div>\n \n <div class=\"form-grid\">\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Created:</span>\n <span class=\"info-value\">{{ data?.application?.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Last Updated:</span>\n <span class=\"info-value\">{{ data?.application?.__mj_UpdatedAt | date:'medium' }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Application ID:</span>\n <span class=\"info-value\">{{ data?.application?.ID }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Total Entities:</span>\n <span class=\"info-value\">{{ applicationEntities.length }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <div class=\"dialog-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"onCancel()\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n <button \n type=\"submit\" \n class=\"btn btn-primary\" \n [disabled]=\"applicationForm.invalid || isLoading\"\n >\n @if (isLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n {{ isEditMode ? 'Update Application' : 'Create Application' }}\n }\n </button>\n </div>\n </form>\n </div>\n</kendo-window>", styles: ["/* Modern Dialog Styling - Matching Dashboard Design */\n:host ::ng-deep .k-window {\n border: none;\n border-radius: 12px;\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.30), 0 15px 12px rgba(0, 0, 0, 0.22);\n background: #ffffff;\n overflow: hidden;\n}\n\n:host ::ng-deep .k-window-titlebar {\n background: linear-gradient(135deg, #2196f3 0%, #1976d2 100%);\n border: none;\n padding: 24px 32px;\n min-height: 70px;\n}\n\n:host ::ng-deep .k-window-titlebar .k-window-title {\n display: none; /* Hide default title */\n}\n\n:host ::ng-deep .k-window-titlebar .k-window-actions {\n position: absolute;\n top: 24px;\n right: 24px;\n}\n\n:host ::ng-deep .k-window-titlebar .k-window-actions .k-button {\n background: rgba(255, 255, 255, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.2);\n color: #ffffff;\n border-radius: 6px;\n width: 32px;\n height: 32px;\n min-width: auto;\n}\n\n:host ::ng-deep .k-window-titlebar .k-window-actions .k-button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n}\n\n:host ::ng-deep .k-window-content {\n padding: 0;\n background: #ffffff;\n}\n\n/* Custom Title Bar */\n.dialog-header {\n position: relative;\n color: #ffffff;\n}\n\n.dialog-header .dialog-title {\n font-size: 18px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 16px;\n margin: 0;\n}\n\n.dialog-header .dialog-title i {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.15);\n border-radius: 6px;\n font-size: 14px;\n}\n\n.dialog-header .dialog-subtitle {\n margin: 4px 0 0 0;\n font-size: 12px;\n opacity: 0.85;\n font-weight: 400;\n}\n\n/* Modal Content Areas */\n.dialog-content {\n padding: 0;\n background: #ffffff;\n}\n\n.dialog-content .content-section {\n padding: 32px;\n}\n\n.dialog-content .content-section:not(:last-child) {\n border-bottom: 1px solid #e0e0e0;\n}\n\n.dialog-footer {\n padding: 24px 32px;\n background: #fafafa;\n border-top: 1px solid #e0e0e0;\n display: flex;\n justify-content: flex-end;\n gap: 16px;\n}\n\n/* Form Sections */\n.form-section .section-header {\n margin-bottom: 24px;\n}\n\n.form-section .section-header .section-title {\n font-size: 16px;\n font-weight: 600;\n color: #212121;\n margin: 0 0 4px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.form-section .section-header .section-title i {\n color: #2196f3;\n font-size: 14px;\n}\n\n.form-section .section-header .section-description {\n font-size: 12px;\n color: #666666;\n margin: 0;\n}\n\n.form-grid {\n display: grid;\n gap: 24px;\n}\n\n.form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n}\n\n@media (max-width: 640px) {\n .form-row {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n}\n\n/* Modern Form Fields */\n.form-field {\n margin-bottom: 24px;\n}\n\n.form-field:last-child {\n margin-bottom: 0;\n}\n\n.form-field .field-label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: #212121;\n margin-bottom: 8px;\n}\n\n.form-field .field-label.required::after {\n content: ' *';\n color: #f44336;\n}\n\n.form-field .field-input,\n.form-field .field-select,\n.form-field .field-textarea {\n width: 100%;\n padding: 0 16px;\n border: 1px solid #bdbdbd;\n border-radius: 6px;\n font-size: 14px;\n background: #ffffff;\n transition: all 0.15s ease;\n}\n\n.form-field .field-input:focus,\n.form-field .field-select:focus,\n.form-field .field-textarea:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n}\n\n.form-field .field-input.error,\n.form-field .field-select.error,\n.form-field .field-textarea.error {\n border-color: #f44336;\n}\n\n.form-field .field-input.error:focus,\n.form-field .field-select.error:focus,\n.form-field .field-textarea.error:focus {\n border-color: #f44336;\n box-shadow: 0 0 0 3px rgba(244, 67, 54, 0.1);\n}\n\n.form-field .field-input::placeholder,\n.form-field .field-select::placeholder,\n.form-field .field-textarea::placeholder {\n color: #9e9e9e;\n}\n\n.form-field .field-input,\n.form-field .field-select {\n height: 36px;\n}\n\n.form-field .field-textarea {\n min-height: 100px;\n padding: 16px;\n resize: vertical;\n line-height: 1.4;\n}\n\n.form-field .field-select {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23666' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 16px center;\n background-repeat: no-repeat;\n background-size: 16px;\n padding-right: calc(16px + 24px);\n appearance: none;\n cursor: pointer;\n}\n\n.form-field .field-error {\n margin-top: 8px;\n font-size: 11px;\n color: #f44336;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.form-field .field-error i {\n font-size: 10px;\n}\n\n.form-field .field-hint {\n margin-top: 8px;\n font-size: 11px;\n color: #666666;\n line-height: 1.4;\n}\n\n/* Alert Messages */\n.alert {\n padding: 16px 24px;\n border-radius: 8px;\n margin-bottom: 24px;\n display: flex;\n align-items: flex-start;\n gap: 16px;\n}\n\n.alert i {\n font-size: 16px;\n flex-shrink: 0;\n margin-top: 2px;\n}\n\n.alert.alert-error {\n background: rgba(244, 67, 54, 0.1);\n border: 1px solid rgba(244, 67, 54, 0.2);\n color: #c62828;\n}\n\n.alert.alert-error i {\n color: #f44336;\n}\n\n.alert.alert-warning {\n background: rgba(255, 193, 7, 0.1);\n border: 1px solid rgba(255, 193, 7, 0.2);\n color: #b7800d;\n}\n\n.alert.alert-warning i {\n color: #ffc107;\n}\n\n.alert.alert-info {\n background: rgba(0, 188, 212, 0.1);\n border: 1px solid rgba(0, 188, 212, 0.2);\n color: #00838f;\n}\n\n.alert.alert-info i {\n color: #00bcd4;\n}\n\n/* Button Styles */\n.dialog-footer .btn {\n padding: 8px 24px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n border: 1px solid transparent;\n cursor: pointer;\n transition: all 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-height: 36px;\n}\n\n.dialog-footer .btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.dialog-footer .btn:disabled i.fa-spinner {\n animation: spin 1s linear infinite;\n}\n\n.dialog-footer .btn.btn-secondary {\n background: #ffffff;\n color: #666666;\n border-color: #bdbdbd;\n}\n\n.dialog-footer .btn.btn-secondary:hover:not(:disabled) {\n background: #f8f9fa;\n border-color: #757575;\n color: #212121;\n}\n\n.dialog-footer .btn.btn-primary {\n background: #2196f3;\n color: #ffffff;\n}\n\n.dialog-footer .btn.btn-primary:hover:not(:disabled) {\n background: #1976d2;\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.2);\n transform: translateY(-1px);\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* Entity Management Styles */\n.subsection-title {\n font-size: 14px;\n font-weight: 600;\n color: #212121;\n margin: 0 0 16px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.assigned-entities {\n margin-bottom: 32px;\n}\n\n.assigned-entities .entities-list {\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n background: #ffffff;\n}\n\n.entity-item {\n display: flex;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #fafafa;\n transition: all 0.15s ease;\n}\n\n.entity-item:last-child {\n border-bottom: none;\n}\n\n.entity-item:hover {\n background: rgba(33, 150, 243, 0.02);\n}\n\n.entity-item.is-new {\n background: rgba(76, 175, 80, 0.05);\n border-left: 3px solid #4caf50;\n}\n\n.entity-item.has-changes {\n background: rgba(0, 188, 212, 0.05);\n border-left: 3px solid #00bcd4;\n}\n\n.entity-item .entity-info {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-item .entity-info .entity-icon {\n width: 40px;\n height: 40px;\n background: rgba(33, 150, 243, 0.1);\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #2196f3;\n flex-shrink: 0;\n}\n\n.entity-item .entity-info .entity-details {\n flex: 1;\n min-width: 0;\n}\n\n.entity-item .entity-info .entity-details .entity-name {\n font-weight: 500;\n color: #212121;\n margin-bottom: 2px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-item .entity-info .entity-details .entity-name .entity-info-icon {\n color: #00bcd4;\n font-size: 14px;\n cursor: help;\n opacity: 0.7;\n transition: all 0.15s ease;\n}\n\n.entity-item .entity-info .entity-details .entity-name .entity-info-icon:hover {\n opacity: 1;\n transform: scale(1.1);\n}\n\n.entity-item .entity-info .entity-details .entity-description {\n font-size: 12px;\n color: #666666;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.entity-item .entity-config {\n display: flex;\n align-items: center;\n gap: 24px;\n margin: 0 24px;\n}\n\n.entity-item .entity-config .config-item .config-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 12px;\n color: #666666;\n margin: 0;\n}\n\n.entity-item .entity-config .config-item .config-label .config-checkbox {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.entity-item .entity-config .sequence-badge {\n background: #2196f3;\n color: #ffffff;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n min-width: 24px;\n text-align: center;\n}\n\n.entity-item .entity-actions {\n display: flex;\n gap: 4px;\n}\n\n.no-entities,\n.all-assigned {\n text-align: center;\n padding: 32px;\n color: #666666;\n}\n\n.no-entities i,\n.all-assigned i {\n font-size: 2rem;\n color: #bdbdbd;\n margin-bottom: 16px;\n}\n\n.no-entities p,\n.all-assigned p {\n margin: 0 0 4px 0;\n font-weight: 500;\n}\n\n.no-entities .empty-subtext,\n.all-assigned .empty-subtext {\n font-size: 12px;\n color: #9e9e9e;\n margin: 0;\n}\n\n.available-entities .entities-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 8px;\n}\n\n@media (max-width: 640px) {\n .available-entities .entities-grid {\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n }\n}\n\n.entity-chip {\n padding: 16px;\n border: 1px solid #bdbdbd;\n border-radius: 8px;\n background: #ffffff;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.entity-chip .chip-content {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-chip .chip-content i {\n color: #2196f3;\n font-size: 14px;\n}\n\n.entity-chip .chip-content .chip-name {\n font-size: 12px;\n color: #212121;\n font-weight: 500;\n}\n\n.entity-chip:hover {\n border-color: #2196f3;\n background: rgba(33, 150, 243, 0.05);\n transform: translateY(-1px);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n}\n\n/* Info Grid for System Information */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n@media (max-width: 640px) {\n .info-grid {\n grid-template-columns: 1fr;\n }\n}\n\n.info-grid .info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-grid .info-item .info-label {\n font-size: 11px;\n color: #666666;\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.info-grid .info-item .info-value {\n font-size: 12px;\n color: #212121;\n font-weight: 500;\n}\n\n/* Enhanced Button Icons */\n.btn-icon {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n}\n\n.btn-icon:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.btn-icon.btn-neutral {\n background: rgba(189, 189, 189, 0.1);\n color: #666666;\n}\n\n.btn-icon.btn-neutral:hover:not(:disabled) {\n background: rgba(189, 189, 189, 0.2);\n color: #212121;\n transform: scale(1.05);\n}\n\n.btn-icon.btn-danger {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n}\n\n.btn-icon.btn-danger:hover:not(:disabled) {\n background: rgba(244, 67, 54, 0.2);\n transform: scale(1.05);\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n :host ::ng-deep .k-window {\n margin: 16px;\n max-width: none;\n width: calc(100vw - 24px) !important;\n height: calc(100vh - 24px) !important;\n }\n \n :host ::ng-deep .k-window-titlebar {\n padding: 16px 24px;\n min-height: 60px;\n }\n \n .dialog-content .content-section {\n padding: 24px 16px;\n }\n \n .dialog-footer {\n padding: 16px 24px;\n flex-direction: column-reverse;\n }\n \n .dialog-footer .btn {\n width: 100%;\n justify-content: center;\n }\n}"] }]
|
|
709
|
+
args: [{ selector: 'mj-application-dialog', template: "@if (visible) {\n <div class=\"modal-backdrop\" (click)=\"onCancel()\" role=\"presentation\">\n <div\n class=\"modal-dialog\"\n [class.fullscreen]=\"isFullscreen\"\n (click)=\"$event.stopPropagation()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"application-dialog-title\"\n aria-describedby=\"application-dialog-description\"\n >\n <!-- Modal Header -->\n <div class=\"modal-header\" [class.create-mode]=\"!isEditMode\" [class.edit-mode]=\"isEditMode\">\n <div class=\"modal-header-content\">\n <h2 class=\"modal-title\" id=\"application-dialog-title\">\n <i class=\"fa-solid\" [class.fa-plus]=\"!isEditMode\" [class.fa-layer-group]=\"isEditMode\" aria-hidden=\"true\"></i>\n {{ isEditMode ? 'Edit Application' : 'Create New Application' }}\n </h2>\n <p class=\"modal-subtitle\" id=\"application-dialog-description\">\n {{ isEditMode ? 'Update application information and settings' : 'Add a new application to the system' }}\n </p>\n </div>\n <div class=\"modal-header-actions\">\n <button\n class=\"modal-action-btn\"\n (click)=\"toggleFullscreen()\"\n [attr.aria-label]=\"isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'\"\n type=\"button\"\n >\n <i class=\"fa-solid\" [class.fa-compress]=\"isFullscreen\" [class.fa-expand]=\"!isFullscreen\" aria-hidden=\"true\"></i>\n </button>\n <button\n class=\"modal-close\"\n (click)=\"onCancel()\"\n aria-label=\"Close dialog\"\n type=\"button\"\n >\n <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n\n <!-- Modal Body -->\n <div class=\"modal-body\">\n <form [formGroup]=\"applicationForm\" (ngSubmit)=\"onSubmit()\">\n <!-- Error Alert -->\n @if (error) {\n <div class=\"form-section\">\n <div class=\"alert alert-error\" role=\"alert\">\n <i class=\"fa-solid fa-exclamation-triangle\" aria-hidden=\"true\"></i>\n <div>{{ error }}</div>\n </div>\n </div>\n }\n\n <!-- Basic Information Section -->\n <fieldset class=\"form-section collapsible-section\">\n <legend class=\"section-header clickable\" (click)=\"toggleSection('basicInfo')\">\n <div class=\"section-title-row\">\n <span class=\"section-title\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n Application Information\n </span>\n <i class=\"fa-solid chevron-icon\"\n [class.fa-chevron-up]=\"sectionExpanded.basicInfo\"\n [class.fa-chevron-down]=\"!sectionExpanded.basicInfo\"\n aria-hidden=\"true\"></i>\n </div>\n <span class=\"section-description\">Define the application's basic properties</span>\n </legend>\n\n @if (sectionExpanded.basicInfo) {\n <div class=\"section-content\">\n <div class=\"form-grid\">\n <div class=\"form-field\">\n <label class=\"field-label required\" for=\"app-name\">Application Name</label>\n <input\n id=\"app-name\"\n type=\"text\"\n class=\"field-input\"\n formControlName=\"name\"\n placeholder=\"My Application\"\n [class.error]=\"applicationForm.get('name')?.invalid && applicationForm.get('name')?.touched\"\n [attr.aria-invalid]=\"applicationForm.get('name')?.invalid && applicationForm.get('name')?.touched\"\n aria-describedby=\"app-name-error\"\n />\n @if (applicationForm.get('name')?.invalid && applicationForm.get('name')?.touched) {\n <div class=\"field-error\" id=\"app-name-error\" role=\"alert\">\n <i class=\"fa-solid fa-exclamation-circle\" aria-hidden=\"true\"></i>\n @if (applicationForm.get('name')?.errors?.['required']) {\n Application name is required\n }\n @if (applicationForm.get('name')?.errors?.['maxlength']) {\n Application name cannot exceed 100 characters\n }\n </div>\n }\n </div>\n\n <div class=\"form-field\">\n <label class=\"field-label\" for=\"app-description\">Description</label>\n <textarea\n id=\"app-description\"\n class=\"field-textarea\"\n formControlName=\"description\"\n placeholder=\"Describe the application's purpose and functionality...\"\n rows=\"4\"\n ></textarea>\n <div class=\"field-hint\">\n Provide a clear description of what this application does and its main features.\n </div>\n </div>\n </div>\n </div>\n }\n </fieldset>\n\n <!-- Entity Management Section -->\n <fieldset class=\"form-section collapsible-section\">\n <legend class=\"section-header clickable\" (click)=\"toggleSection('entities')\">\n <div class=\"section-title-row\">\n <span class=\"section-title\">\n <i class=\"fa-solid fa-database\" aria-hidden=\"true\"></i>\n Application Entities\n </span>\n <i class=\"fa-solid chevron-icon\"\n [class.fa-chevron-up]=\"sectionExpanded.entities\"\n [class.fa-chevron-down]=\"!sectionExpanded.entities\"\n aria-hidden=\"true\"></i>\n </div>\n <span class=\"section-description\">Manage which entities are included in this application</span>\n </legend>\n\n @if (sectionExpanded.entities) {\n <div class=\"section-content\">\n <div class=\"form-grid\">\n <!-- Assigned Entities -->\n @if (applicationEntities.length > 0) {\n <div class=\"assigned-entities\">\n <h4 class=\"subsection-title\">Assigned Entities ({{ applicationEntities.length }})</h4>\n <div class=\"entities-list\"\n role=\"list\"\n cdkDropList\n (cdkDropListDropped)=\"onEntityDrop($event)\">\n @for (config of applicationEntities; track config.entity.ID; let i = $index) {\n <div\n class=\"entity-item\"\n [class.is-new]=\"config.isNew\"\n [class.has-changes]=\"config.hasChanges\"\n role=\"listitem\"\n cdkDrag\n >\n <i class=\"fa-solid fa-grip-vertical drag-handle\" aria-hidden=\"true\"></i>\n <div class=\"entity-info\">\n <div class=\"entity-icon\">\n <i class=\"fa-solid fa-table\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"entity-details\">\n <div class=\"entity-name\">\n {{ config.entity.Name }}\n @if (config.entity.Description) {\n <i\n class=\"fa-solid fa-info-circle entity-info-icon\"\n [title]=\"config.entity.Description\"\n [attr.aria-label]=\"'Entity description: ' + config.entity.Description\"\n ></i>\n }\n </div>\n </div>\n </div>\n\n <div class=\"entity-config\">\n <div class=\"config-item\">\n <label class=\"config-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"config.defaultForNewUser\"\n [ngModelOptions]=\"{standalone: true}\"\n (change)=\"onDefaultForNewUserChange(config)\"\n class=\"config-checkbox\"\n />\n <span class=\"checkbox-text\">Default for new users</span>\n </label>\n </div>\n <div class=\"sequence-badge\" [attr.aria-label]=\"'Sequence ' + config.sequence\">{{ config.sequence }}</div>\n </div>\n\n <div class=\"entity-actions\">\n <button\n type=\"button\"\n class=\"btn-icon btn-danger\"\n (click)=\"removeEntity(config)\"\n title=\"Remove entity\"\n [attr.aria-label]=\"'Remove ' + config.entity.Name\"\n >\n <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"no-entities\">\n <i class=\"fa-solid fa-database\" aria-hidden=\"true\"></i>\n <p>No entities assigned to this application</p>\n <p class=\"empty-subtext\">Add entities from the available list below</p>\n </div>\n }\n\n <!-- Available Entities -->\n @if (availableEntities.length > 0) {\n <div class=\"available-entities\">\n <div class=\"available-entities-header\">\n <h4 class=\"subsection-title\">Available Entities ({{ filteredAvailableEntities.length }} of {{ availableEntities.length }})</h4>\n <div class=\"entity-search\">\n <i class=\"fa-solid fa-search entity-search-icon\" aria-hidden=\"true\"></i>\n <input\n type=\"text\"\n class=\"entity-search-input\"\n placeholder=\"Search entities...\"\n [value]=\"entitySearchTerm\"\n (input)=\"onEntitySearchChange($event)\"\n aria-label=\"Search available entities\"\n />\n @if (entitySearchTerm) {\n <button\n type=\"button\"\n class=\"entity-search-clear\"\n (click)=\"clearEntitySearch()\"\n aria-label=\"Clear search\"\n >\n <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n @if (filteredAvailableEntities.length > 0) {\n <div class=\"entities-grid\" role=\"list\">\n @for (entity of filteredAvailableEntities; track entity.ID) {\n <button\n type=\"button\"\n class=\"entity-chip\"\n (click)=\"addEntity(entity)\"\n role=\"listitem\"\n [attr.aria-label]=\"'Add ' + entity.Name\"\n >\n <div class=\"chip-content\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <span class=\"chip-name\">{{ entity.Name }}</span>\n </div>\n </button>\n }\n </div>\n } @else {\n <div class=\"no-search-results\">\n <i class=\"fa-solid fa-search\" aria-hidden=\"true\"></i>\n <p>No entities match \"{{ entitySearchTerm }}\"</p>\n </div>\n }\n </div>\n } @else {\n <div class=\"all-assigned\">\n <i class=\"fa-solid fa-check-circle\" aria-hidden=\"true\"></i>\n <p>All entities have been assigned to this application</p>\n </div>\n }\n </div>\n </div>\n }\n </fieldset>\n\n <!-- System Information Section (Edit Mode Only) -->\n @if (isEditMode) {\n <fieldset class=\"form-section collapsible-section\">\n <legend class=\"section-header clickable\" (click)=\"toggleSection('systemInfo')\">\n <div class=\"section-title-row\">\n <span class=\"section-title\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n System Information\n </span>\n <i class=\"fa-solid chevron-icon\"\n [class.fa-chevron-up]=\"sectionExpanded.systemInfo\"\n [class.fa-chevron-down]=\"!sectionExpanded.systemInfo\"\n aria-hidden=\"true\"></i>\n </div>\n <span class=\"section-description\">Application metadata and audit information</span>\n </legend>\n\n @if (sectionExpanded.systemInfo) {\n <div class=\"section-content\">\n <div class=\"form-grid\">\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Created</span>\n <span class=\"info-value\">{{ data?.application?.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Last Updated</span>\n <span class=\"info-value\">{{ data?.application?.__mj_UpdatedAt | date:'medium' }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Application ID</span>\n <span class=\"info-value\">{{ data?.application?.ID }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Total Entities</span>\n <span class=\"info-value\">{{ applicationEntities.length }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </fieldset>\n }\n </form>\n </div>\n\n <!-- Modal Footer - Primary and Cancel buttons on RIGHT -->\n <div class=\"modal-footer\">\n <button\n type=\"submit\"\n class=\"mj-btn mj-btn-primary\"\n [disabled]=\"applicationForm.invalid || isLoading\"\n (click)=\"onSubmit()\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (isLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\" aria-hidden=\"true\"></i>\n {{ isEditMode ? 'Update Application' : 'Create Application' }}\n }\n </button>\n <button type=\"button\" class=\"mj-btn mj-btn-secondary\" (click)=\"onCancel()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n}\n", styles: ["/* =============================================================================\n Application Dialog Component - MD3 Design System\n Following Material Design 3 color palette and design tokens\n ============================================================================= */\n\n/* -----------------------------------------------------------------------------\n CSS Custom Properties (Design Tokens)\n ----------------------------------------------------------------------------- */\n:host {\n /* Primary - Deep Blue */\n --md-primary: #0076B6;\n --md-on-primary: #FFFFFF;\n --md-primary-container: #AAE7FD;\n --md-on-primary-container: #001F2A;\n\n /* Secondary - Light Orange */\n --md-secondary: #F5A623;\n --md-on-secondary: #FFFFFF;\n --md-secondary-container: #FFECD6;\n --md-on-secondary-container: #2D1600;\n\n /* Tertiary - Light Green */\n --md-tertiary: #4CAF50;\n --md-on-tertiary: #FFFFFF;\n --md-tertiary-container: #C8E6C9;\n --md-on-tertiary-container: #002204;\n\n /* Error - Red */\n --md-error: #D32F2F;\n --md-on-error: #FFFFFF;\n --md-error-container: #FFCDD2;\n --md-on-error-container: #410002;\n\n /* Surface Colors */\n --md-surface: #FAFCFF;\n --md-surface-container-lowest: #FFFFFF;\n --md-surface-container-low: #F3F5F9;\n --md-surface-container: #EDF0F4;\n --md-surface-container-high: #E7EAEE;\n --md-surface-container-highest: #E1E3E8;\n --md-on-surface: #191C20;\n --md-on-surface-variant: #43474E;\n --md-outline: #74777F;\n --md-outline-variant: #C4C6D0;\n\n /* Elevation */\n --md-elevation-1: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.08);\n --md-elevation-2: 0 2px 4px rgba(0, 0, 0, 0.1), 0 4px 8px rgba(0, 0, 0, 0.08);\n --md-elevation-3: 0 4px 8px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.08);\n --md-elevation-4: 0 6px 12px rgba(0, 0, 0, 0.1), 0 12px 24px rgba(0, 0, 0, 0.08);\n --md-elevation-5: 0 8px 16px rgba(0, 0, 0, 0.12), 0 16px 32px rgba(0, 0, 0, 0.1);\n\n /* Corner Radii */\n --md-corner-extra-small: 4px;\n --md-corner-small: 8px;\n --md-corner-medium: 12px;\n --md-corner-large: 16px;\n --md-corner-extra-large: 28px;\n --md-corner-full: 9999px;\n}\n\n/* -----------------------------------------------------------------------------\n Modal Backdrop & Container\n ----------------------------------------------------------------------------- */\n.modal-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: fadeIn 0.2s cubic-bezier(0, 0, 0.2, 1);\n padding: 1rem;\n}\n\n.modal-dialog {\n background: var(--md-surface);\n border-radius: var(--md-corner-extra-large);\n box-shadow: var(--md-elevation-5);\n max-width: 900px;\n width: 100%;\n max-height: 90vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n animation: slideUp 0.3s cubic-bezier(0, 0, 0.2, 1);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n/* Fullscreen mode */\n.modal-dialog.fullscreen {\n max-width: 100vw;\n width: 100vw;\n max-height: 100vh;\n height: 100vh;\n border-radius: 0;\n margin: 0;\n}\n\n/* -----------------------------------------------------------------------------\n Modal Header\n ----------------------------------------------------------------------------- */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 1.5rem 1.5rem 1rem 1.5rem;\n background: #0076B6;\n color: var(--md-on-primary);\n flex-shrink: 0;\n}\n\n.modal-header-content {\n flex: 1;\n min-width: 0;\n}\n\n.modal-header .modal-title {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 1.375rem;\n font-weight: 600;\n color: var(--md-on-primary);\n margin: 0;\n}\n\n.modal-header .modal-title i {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.2);\n border-radius: var(--md-corner-medium);\n font-size: 1.125rem;\n flex-shrink: 0;\n}\n\n/* Create mode - Plus icon with inverted styling */\n.modal-header.create-mode .modal-title i {\n background: var(--md-on-primary);\n color: #0076B6;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n/* Edit mode - Grid icon with semi-transparent background */\n.modal-header.edit-mode .modal-title i {\n background: rgba(255, 255, 255, 0.2);\n color: var(--md-on-primary);\n}\n\n/* Modal Header Actions */\n.modal-header-actions {\n display: flex;\n gap: 0.5rem;\n align-items: center;\n flex-shrink: 0;\n margin-left: 0.5rem;\n}\n\n.modal-action-btn {\n padding: 0.625rem;\n border: none;\n background: transparent;\n color: var(--md-on-primary);\n font-size: 1.125rem;\n cursor: pointer;\n border-radius: var(--md-corner-full);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n min-width: 44px;\n min-height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.modal-action-btn:hover {\n background: rgba(255, 255, 255, 0.15);\n}\n\n.modal-action-btn:focus-visible {\n outline: 2px solid var(--md-on-primary);\n outline-offset: 2px;\n}\n\n.modal-header .modal-subtitle {\n margin: 0.375rem 0 0 0;\n font-size: 0.8125rem;\n color: var(--md-on-primary);\n opacity: 0.85;\n}\n\n.modal-header .modal-close {\n padding: 0.625rem;\n border: none;\n background: transparent;\n color: var(--md-on-primary);\n font-size: 1.25rem;\n cursor: pointer;\n border-radius: var(--md-corner-full);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n min-width: 44px;\n min-height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin-left: 0.5rem;\n}\n\n.modal-header .modal-close:hover {\n background: rgba(255, 255, 255, 0.15);\n}\n\n.modal-header .modal-close:focus-visible {\n outline: 2px solid var(--md-on-primary);\n outline-offset: 2px;\n}\n\n/* -----------------------------------------------------------------------------\n Modal Body\n ----------------------------------------------------------------------------- */\n.modal-body {\n flex: 1;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n padding: 0;\n background: var(--md-surface);\n}\n\n/* -----------------------------------------------------------------------------\n Modal Footer - Primary and Cancel buttons on RIGHT\n ----------------------------------------------------------------------------- */\n.modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1.25rem 1.5rem;\n border-top: 1px solid var(--md-outline-variant);\n background: var(--md-surface-container-low);\n flex-shrink: 0;\n}\n\n/* -----------------------------------------------------------------------------\n Form Sections (Fieldset)\n ----------------------------------------------------------------------------- */\n.form-section {\n border: none;\n margin: 0;\n padding: 1.5rem;\n border-bottom: 1px solid var(--md-outline-variant);\n}\n\n.form-section:last-of-type {\n border-bottom: none;\n}\n\n.section-header {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n margin-bottom: 1.25rem;\n padding: 0;\n font-weight: normal;\n}\n\n.section-header .section-title {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 1.0625rem;\n font-weight: 600;\n color: var(--md-on-surface);\n}\n\n.section-header .section-title i {\n color: var(--md-primary);\n font-size: 0.875rem;\n}\n\n.section-header .section-description {\n font-size: 0.8125rem;\n color: var(--md-on-surface-variant);\n}\n\n/* -----------------------------------------------------------------------------\n Collapsible Sections\n ----------------------------------------------------------------------------- */\n.collapsible-section .section-header.clickable {\n cursor: pointer;\n user-select: none;\n transition: background-color 0.2s ease;\n padding: 0.75rem 0;\n margin: -0.75rem 0 0.75rem 0;\n}\n\n.collapsible-section .section-header.clickable:hover {\n opacity: 0.8;\n}\n\n.section-title-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n margin-bottom: 0.25rem;\n}\n\n.chevron-icon {\n color: var(--md-on-surface-variant);\n font-size: 0.875rem;\n transition: transform 0.2s ease;\n flex-shrink: 0;\n}\n\n.section-content {\n animation: expandSection 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes expandSection {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* -----------------------------------------------------------------------------\n Form Grid Layout\n ----------------------------------------------------------------------------- */\n.form-grid {\n display: grid;\n gap: 1.25rem;\n}\n\n.form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.25rem;\n}\n\n/* -----------------------------------------------------------------------------\n Form Fields\n ----------------------------------------------------------------------------- */\n.form-field {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.form-field .field-label {\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--md-on-surface);\n}\n\n.form-field .field-label.required::after {\n content: ' *';\n color: var(--md-error);\n}\n\n.form-field .field-input,\n.form-field .field-select,\n.form-field .field-textarea {\n width: 100%;\n min-height: 44px;\n padding: 0.75rem 1rem;\n border: 1px solid var(--md-outline);\n border-radius: var(--md-corner-small);\n font-size: 0.9375rem;\n background: var(--md-surface);\n color: var(--md-on-surface);\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n}\n\n.form-field .field-input:focus,\n.form-field .field-select:focus,\n.form-field .field-textarea:focus {\n outline: none;\n border-color: var(--md-primary);\n box-shadow: 0 0 0 3px rgba(0, 118, 182, 0.12);\n}\n\n.form-field .field-input.error,\n.form-field .field-select.error,\n.form-field .field-textarea.error {\n border-color: var(--md-error);\n}\n\n.form-field .field-input.error:focus,\n.form-field .field-select.error:focus,\n.form-field .field-textarea.error:focus {\n border-color: var(--md-error);\n box-shadow: 0 0 0 3px rgba(211, 47, 47, 0.12);\n}\n\n.form-field .field-input::placeholder,\n.form-field .field-textarea::placeholder {\n color: var(--md-on-surface-variant);\n}\n\n.form-field .field-textarea {\n min-height: 100px;\n resize: vertical;\n line-height: 1.5;\n}\n\n.form-field .field-error {\n margin-top: 0.25rem;\n font-size: 0.8125rem;\n color: var(--md-error);\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.form-field .field-error i {\n font-size: 0.625rem;\n}\n\n.form-field .field-hint {\n font-size: 0.8125rem;\n color: var(--md-on-surface-variant);\n line-height: 1.4;\n}\n\n/* -----------------------------------------------------------------------------\n Alert Messages\n ----------------------------------------------------------------------------- */\n.alert {\n padding: 1rem 1.25rem;\n border-radius: var(--md-corner-small);\n margin-bottom: 1rem;\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n}\n\n.alert i {\n font-size: 1rem;\n flex-shrink: 0;\n margin-top: 0.125rem;\n}\n\n.alert.alert-error {\n background: var(--md-error-container);\n border: 1px solid rgba(211, 47, 47, 0.2);\n color: var(--md-on-error-container);\n}\n\n.alert.alert-error i {\n color: var(--md-error);\n}\n\n/* -----------------------------------------------------------------------------\n Entity Management Styles\n ----------------------------------------------------------------------------- */\n.subsection-title {\n font-size: 0.9375rem;\n font-weight: 600;\n color: var(--md-on-surface);\n margin: 0 0 1rem 0;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.assigned-entities {\n margin-bottom: 1.5rem;\n}\n\n.assigned-entities .entities-list {\n border: 1px solid var(--md-outline-variant);\n border-radius: var(--md-corner-small);\n overflow: hidden;\n background: var(--md-surface);\n}\n\n.entity-item {\n display: flex;\n align-items: center;\n padding: 1rem 1.25rem;\n border-bottom: 1px solid var(--md-surface-container);\n transition: all 0.15s ease;\n}\n\n.entity-item:last-child {\n border-bottom: none;\n}\n\n.entity-item:hover {\n background: var(--md-surface-container-low);\n}\n\n.entity-item.is-new {\n background: rgba(76, 175, 80, 0.08);\n border-left: 3px solid var(--md-tertiary);\n}\n\n.entity-item.has-changes {\n background: rgba(245, 166, 35, 0.08);\n border-left: 3px solid var(--md-secondary);\n}\n\n.entity-item .entity-info {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex: 1;\n min-width: 0;\n}\n\n.entity-item .entity-info .entity-icon {\n width: 40px;\n height: 40px;\n background: var(--md-primary-container);\n border-radius: var(--md-corner-small);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--md-primary);\n flex-shrink: 0;\n}\n\n.entity-item .entity-info .entity-details {\n flex: 1;\n min-width: 0;\n}\n\n.entity-item .entity-info .entity-details .entity-name {\n font-size: 0.9375rem;\n font-weight: 600;\n color: var(--md-on-surface);\n margin-bottom: 0.125rem;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.entity-item .entity-info .entity-details .entity-name .entity-info-icon {\n color: var(--md-secondary);\n font-size: 0.875rem;\n cursor: help;\n opacity: 0.7;\n transition: all 0.15s ease;\n}\n\n.entity-item .entity-info .entity-details .entity-name .entity-info-icon:hover {\n opacity: 1;\n transform: scale(1.1);\n}\n\n.entity-item .entity-config {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n margin: 0 1.5rem;\n}\n\n.entity-item .entity-config .config-item .config-label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n font-size: 0.8125rem;\n color: var(--md-on-surface-variant);\n margin: 0;\n}\n\n.entity-item .entity-config .config-item .config-label .config-checkbox {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--md-primary);\n}\n\n.entity-item .entity-config .sequence-badge {\n background: var(--md-primary);\n color: var(--md-on-primary);\n padding: 0.25rem 0.5rem;\n border-radius: var(--md-corner-extra-small);\n font-size: 0.75rem;\n font-weight: 600;\n min-width: 24px;\n text-align: center;\n}\n\n.entity-item .entity-actions {\n display: flex;\n gap: 0.25rem;\n}\n\n/* -----------------------------------------------------------------------------\n Drag and Drop Styles\n ----------------------------------------------------------------------------- */\n.drag-handle {\n color: var(--md-on-surface-variant);\n cursor: grab;\n margin-right: 0.75rem;\n font-size: 1rem;\n transition: color 0.2s ease;\n flex-shrink: 0;\n}\n\n.drag-handle:hover {\n color: var(--md-primary);\n}\n\n.drag-handle:active {\n cursor: grabbing;\n}\n\n.entity-item.cdk-drag-preview {\n box-shadow: var(--md-elevation-4);\n transform: rotate(1deg);\n opacity: 0.9;\n border-color: var(--md-primary);\n background: var(--md-surface);\n}\n\n.entity-item.cdk-drag-placeholder {\n opacity: 0.4;\n border-style: dashed;\n border-color: var(--md-primary);\n background: var(--md-surface-container-low);\n}\n\n.entity-item.cdk-drag-animating {\n transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);\n}\n\n.entities-list.cdk-drop-list-dragging .entity-item:not(.cdk-drag-placeholder) {\n transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);\n}\n\n/* -----------------------------------------------------------------------------\n Empty States\n ----------------------------------------------------------------------------- */\n.no-entities,\n.all-assigned {\n text-align: center;\n padding: 2rem;\n color: var(--md-on-surface-variant);\n}\n\n.no-entities i,\n.all-assigned i {\n font-size: 2rem;\n color: var(--md-outline-variant);\n margin-bottom: 1rem;\n display: block;\n}\n\n.no-entities p,\n.all-assigned p {\n margin: 0 0 0.25rem 0;\n font-size: 0.9375rem;\n}\n\n.no-entities .empty-subtext,\n.all-assigned .empty-subtext {\n font-size: 0.8125rem;\n color: var(--md-on-surface-variant);\n margin: 0;\n}\n\n/* -----------------------------------------------------------------------------\n Available Entities Section\n ----------------------------------------------------------------------------- */\n.available-entities-header {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n margin-bottom: 1rem;\n}\n\n@media (min-width: 640px) {\n .available-entities-header {\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n }\n}\n\n.available-entities-header .subsection-title {\n margin: 0;\n}\n\n/* Entity Search Bar - Enhanced prominent search */\n.entity-search {\n position: relative;\n min-width: 200px;\n max-width: 100%;\n width: 100%;\n}\n\n@media (min-width: 640px) {\n .entity-search {\n min-width: 280px;\n max-width: 400px;\n width: auto;\n }\n}\n\n@media (min-width: 768px) {\n .entity-search {\n min-width: 320px;\n max-width: 450px;\n }\n}\n\n.entity-search .entity-search-icon {\n position: absolute;\n left: 1rem;\n top: 50%;\n transform: translateY(-50%);\n color: var(--md-on-surface-variant);\n font-size: 1rem;\n pointer-events: none;\n transition: color 0.2s ease;\n}\n\n@media (min-width: 768px) {\n .entity-search .entity-search-icon {\n left: 1.125rem;\n font-size: 1.125rem;\n }\n}\n\n.entity-search .entity-search-input {\n width: 100%;\n padding: 0.875rem 2.75rem 0.875rem 2.75rem;\n border: 2px solid var(--md-outline);\n border-radius: var(--md-corner-full);\n font-size: 1rem;\n background: var(--md-surface);\n color: var(--md-on-surface);\n transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;\n min-height: 48px;\n box-shadow: var(--md-elevation-1);\n}\n\n@media (min-width: 768px) {\n .entity-search .entity-search-input {\n padding: 1rem 3rem 1rem 3rem;\n min-height: 52px;\n font-size: 1.0625rem;\n border-radius: var(--md-corner-full);\n }\n}\n\n.entity-search .entity-search-input::placeholder {\n color: var(--md-on-surface-variant);\n}\n\n.entity-search .entity-search-input:hover {\n border-color: var(--md-primary);\n background: var(--md-surface-container-low);\n}\n\n.entity-search .entity-search-input:focus {\n outline: none;\n border-color: var(--md-primary);\n box-shadow: var(--md-elevation-2), 0 0 0 3px rgba(0, 118, 182, 0.2);\n background: var(--md-surface);\n}\n\n.entity-search:focus-within .entity-search-icon {\n color: var(--md-primary);\n}\n\n.entity-search .entity-search-clear {\n position: absolute;\n right: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n padding: 0.375rem;\n border: none;\n background: transparent;\n color: var(--md-on-surface-variant);\n cursor: pointer;\n border-radius: var(--md-corner-full);\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n min-height: 28px;\n transition: all 0.15s ease;\n}\n\n@media (min-width: 768px) {\n .entity-search .entity-search-clear {\n right: 0.875rem;\n min-width: 32px;\n min-height: 32px;\n }\n}\n\n.entity-search .entity-search-clear:hover {\n background: var(--md-primary);\n color: var(--md-on-primary);\n}\n\n/* No Search Results State */\n.no-search-results {\n text-align: center;\n padding: 1.5rem;\n color: var(--md-on-surface-variant);\n background: var(--md-surface-container-low);\n border-radius: var(--md-corner-small);\n}\n\n.no-search-results i {\n font-size: 1.5rem;\n color: var(--md-outline-variant);\n margin-bottom: 0.5rem;\n display: block;\n}\n\n.no-search-results p {\n margin: 0;\n font-size: 0.8125rem;\n}\n\n/* -----------------------------------------------------------------------------\n Available Entities Grid\n ----------------------------------------------------------------------------- */\n.available-entities .entities-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 0.5rem;\n}\n\n.entity-chip {\n padding: 0.75rem 1rem;\n border: 1px solid var(--md-outline-variant);\n border-radius: var(--md-corner-small);\n background: var(--md-surface);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.entity-chip .chip-content {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.entity-chip .chip-content i {\n color: var(--md-primary);\n font-size: 0.875rem;\n}\n\n.entity-chip .chip-content .chip-name {\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--md-on-surface);\n}\n\n.entity-chip:hover {\n border-color: var(--md-primary);\n background: var(--md-primary-container);\n transform: translateY(-1px);\n box-shadow: var(--md-elevation-1);\n}\n\n/* -----------------------------------------------------------------------------\n Info Grid for System Information\n ----------------------------------------------------------------------------- */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 1rem;\n}\n\n.info-grid .info-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.info-grid .info-item .info-label {\n font-size: 0.6875rem;\n font-weight: 500;\n color: var(--md-on-surface-variant);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.info-grid .info-item .info-value {\n font-size: 0.9375rem;\n color: var(--md-on-surface);\n}\n\n/* -----------------------------------------------------------------------------\n Button Icon Styles\n ----------------------------------------------------------------------------- */\n.btn-icon {\n width: 36px;\n height: 36px;\n border: none;\n border-radius: var(--md-corner-full);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n}\n\n.btn-icon:disabled {\n opacity: 0.38;\n cursor: not-allowed;\n}\n\n.btn-icon.btn-neutral {\n background: var(--md-surface-container);\n color: var(--md-on-surface-variant);\n}\n\n.btn-icon.btn-neutral:hover:not(:disabled) {\n background: var(--md-primary);\n color: var(--md-on-primary);\n}\n\n.btn-icon.btn-danger {\n background: var(--md-error-container);\n color: var(--md-on-error-container);\n}\n\n.btn-icon.btn-danger:hover:not(:disabled) {\n background: #E57373;\n color: var(--md-on-error);\n}\n\n/* Add/Create Icon Button */\n.btn-icon.btn-add {\n background: var(--md-primary);\n color: var(--md-on-primary);\n box-shadow: var(--md-elevation-1);\n}\n\n.btn-icon.btn-add:hover:not(:disabled) {\n background: #3395C8;\n box-shadow: var(--md-elevation-2);\n}\n\n.btn-icon.btn-add:active:not(:disabled) {\n background: #4BA5D4;\n transform: scale(0.95);\n}\n\n/* -----------------------------------------------------------------------------\n Icon Wrapper - Prominent display icons\n ----------------------------------------------------------------------------- */\n.icon-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.icon-wrapper-sm {\n width: 32px;\n height: 32px;\n border-radius: var(--md-corner-small);\n font-size: 0.875rem;\n}\n\n.icon-wrapper-md {\n width: 40px;\n height: 40px;\n border-radius: var(--md-corner-small);\n font-size: 1rem;\n}\n\n.icon-wrapper-lg {\n width: 48px;\n height: 48px;\n border-radius: var(--md-corner-medium);\n font-size: 1.25rem;\n}\n\n.icon-wrapper-xl {\n width: 56px;\n height: 56px;\n border-radius: var(--md-corner-medium);\n font-size: 1.5rem;\n}\n\n/* Icon wrapper color variants */\n.icon-wrapper-primary {\n background: var(--md-primary-container);\n color: var(--md-primary);\n}\n\n.icon-wrapper-secondary {\n background: var(--md-secondary-container);\n color: #B5751A;\n}\n\n.icon-wrapper-tertiary {\n background: var(--md-tertiary-container);\n color: var(--md-tertiary);\n}\n\n.icon-wrapper-error {\n background: var(--md-error-container);\n color: var(--md-error);\n}\n\n/* Inverted icon wrapper (for dark backgrounds) */\n.icon-wrapper-inverted {\n background: var(--md-on-primary);\n color: var(--md-primary);\n}\n\n/* -----------------------------------------------------------------------------\n MJ Button System\n ----------------------------------------------------------------------------- */\n.mj-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 0.75rem 1.5rem;\n font-size: 0.875rem;\n font-weight: 600;\n border: none;\n border-radius: var(--md-corner-full);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n white-space: nowrap;\n min-height: 44px;\n}\n\n.mj-btn:disabled {\n opacity: 0.38;\n cursor: not-allowed;\n}\n\n/* Primary Button - Dark, lightens on hover */\n.mj-btn-primary {\n background: var(--md-primary);\n color: var(--md-on-primary);\n box-shadow: var(--md-elevation-1);\n}\n\n.mj-btn-primary:hover:not(:disabled) {\n background: #3395C8;\n box-shadow: var(--md-elevation-2);\n}\n\n.mj-btn-primary:active:not(:disabled) {\n background: #4BA5D4;\n transform: scale(0.98);\n}\n\n/* Secondary Button - Light, darkens on hover */\n.mj-btn-secondary {\n background: var(--md-surface);\n color: var(--md-primary);\n border: 1px solid var(--md-outline);\n}\n\n.mj-btn-secondary:hover:not(:disabled) {\n background: var(--md-primary);\n color: var(--md-on-primary);\n border-color: var(--md-primary);\n}\n\n.mj-btn-secondary:active:not(:disabled) {\n background: #005A8C;\n border-color: #005A8C;\n}\n\n/* -----------------------------------------------------------------------------\n Animations\n ----------------------------------------------------------------------------- */\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n/* -----------------------------------------------------------------------------\n Focus Indicators - Accessibility\n ----------------------------------------------------------------------------- */\n.field-input:focus-visible,\n.field-select:focus-visible,\n.field-textarea:focus-visible,\n.mj-btn:focus-visible,\n.btn-icon:focus-visible,\n.entity-chip:focus-visible {\n outline: 2px solid var(--md-primary);\n outline-offset: 2px;\n}\n\n/* -----------------------------------------------------------------------------\n Reduced Motion Support\n ----------------------------------------------------------------------------- */\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n/* -----------------------------------------------------------------------------\n Responsive Design - Mobile (< 640px)\n ----------------------------------------------------------------------------- */\n@media (max-width: 639px) {\n .modal-backdrop {\n padding: 0.5rem;\n }\n\n .modal-dialog {\n border-radius: var(--md-corner-extra-large);\n max-height: 95vh;\n }\n\n /* Fullscreen mode on mobile */\n .modal-dialog.fullscreen {\n border-radius: 0;\n max-height: 100vh;\n }\n\n .modal-header {\n padding: 1.25rem 1rem 1rem 1rem;\n }\n\n .modal-header .modal-title {\n font-size: 1.125rem;\n }\n\n .modal-header .modal-close {\n border-radius: var(--md-corner-full);\n }\n\n /* Modal title icon on mobile */\n .modal-header .modal-title i {\n width: 36px;\n height: 36px;\n font-size: 1rem;\n }\n\n /* Icon wrappers on mobile - slightly smaller */\n .icon-wrapper-lg {\n width: 40px;\n height: 40px;\n font-size: 1rem;\n }\n\n .icon-wrapper-xl {\n width: 48px;\n height: 48px;\n font-size: 1.25rem;\n }\n\n /* Add button on mobile */\n .btn-icon.btn-add {\n border-radius: var(--md-corner-full);\n }\n\n .form-section {\n padding: 1.25rem 1rem;\n }\n\n .form-row {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n\n .modal-footer {\n padding: 1rem;\n flex-direction: column;\n }\n\n .modal-footer .mj-btn {\n width: 100%;\n justify-content: center;\n border-radius: var(--md-corner-full);\n }\n\n /* Entity item mobile layout */\n .entity-item {\n flex-direction: column;\n align-items: stretch;\n gap: 0.75rem;\n padding: 0.875rem 1rem;\n position: relative;\n }\n\n /* Drag handle on mobile - Keep visible and touch-friendly */\n .drag-handle {\n position: static;\n margin-right: 0.75rem;\n margin-bottom: 0.5rem;\n font-size: 1.25rem;\n color: var(--md-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: 0.5rem;\n background: var(--md-surface-container-low);\n border-radius: var(--md-corner-small);\n cursor: grab;\n }\n\n .drag-handle:active {\n cursor: grabbing;\n background: var(--md-primary-container);\n }\n\n .entity-item .entity-info {\n gap: 0.75rem;\n }\n\n .entity-item .entity-info .entity-icon {\n width: 36px;\n height: 36px;\n font-size: 0.875rem;\n border-radius: var(--md-corner-small);\n }\n\n .entity-item .entity-info .entity-details .entity-name {\n font-size: 0.875rem;\n word-break: break-word;\n overflow-wrap: break-word;\n line-height: 1.3;\n flex-wrap: wrap;\n }\n\n .entity-item .entity-config {\n margin: 0;\n width: 100%;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 0.75rem;\n }\n\n .entity-item .entity-config .config-item .config-label {\n font-size: 0.8125rem;\n }\n\n .entity-item .entity-actions {\n width: 100%;\n justify-content: flex-end;\n gap: 0.5rem;\n }\n\n /* Entity chips in mobile */\n .available-entities .entities-grid {\n grid-template-columns: 1fr;\n }\n\n .entity-chip {\n padding: 0.625rem 0.875rem;\n border-radius: var(--md-corner-small);\n }\n\n .entity-chip .chip-content .chip-name {\n font-size: 0.75rem;\n word-break: break-word;\n }\n\n /* Entity search on mobile - still prominent */\n .entity-search {\n max-width: none;\n width: 100%;\n }\n\n .entity-search .entity-search-input {\n padding: 0.75rem 2.5rem 0.75rem 2.5rem;\n min-height: 44px;\n font-size: 0.9375rem;\n border-radius: var(--md-corner-full);\n }\n\n .entity-search .entity-search-icon {\n left: 0.875rem;\n font-size: 0.875rem;\n }\n\n .entity-search .entity-search-clear {\n right: 0.625rem;\n border-radius: var(--md-corner-full);\n }\n\n .info-grid {\n grid-template-columns: 1fr 1fr;\n }\n\n /* Icon buttons on mobile - keep rounded */\n .btn-icon {\n border-radius: var(--md-corner-full);\n }\n}\n\n/* Tablet Portrait (640px - 767px) */\n@media (min-width: 640px) {\n .modal-dialog {\n max-width: 650px;\n }\n\n .available-entities .entities-grid {\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n }\n}\n\n/* Tablet Landscape (768px - 1023px) */\n@media (min-width: 768px) {\n .modal-dialog {\n max-width: 800px;\n }\n\n .modal-header {\n padding: 1.5rem 2rem 1.25rem 2rem;\n }\n\n .form-section {\n padding: 1.75rem 2rem;\n }\n\n .modal-footer {\n padding: 1.25rem 2rem;\n }\n}\n\n/* Laptop (1024px+) */\n@media (min-width: 1024px) {\n .modal-dialog {\n max-width: 900px;\n }\n\n .available-entities .entities-grid {\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n }\n}\n"] }]
|
|
571
710
|
}], () => [], { data: [{
|
|
572
711
|
type: Input
|
|
573
712
|
}], visible: [{
|
|
@@ -576,7 +715,7 @@ export class ApplicationDialogComponent {
|
|
|
576
715
|
type: Output
|
|
577
716
|
}], onEscapeKey: [{
|
|
578
717
|
type: HostListener,
|
|
579
|
-
args: ['document:keydown.escape'
|
|
718
|
+
args: ['document:keydown.escape']
|
|
580
719
|
}] }); })();
|
|
581
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ApplicationDialogComponent, { className: "ApplicationDialogComponent", filePath: "src/lib/application-management/application-dialog/application-dialog.component.ts", lineNumber:
|
|
720
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ApplicationDialogComponent, { className: "ApplicationDialogComponent", filePath: "src/lib/application-management/application-dialog/application-dialog.component.ts", lineNumber: 32 }); })();
|
|
582
721
|
//# sourceMappingURL=application-dialog.component.js.map
|