@memberjunction/ng-explorer-settings 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/lib/account-info/account-info.component.d.ts +23 -0
  2. package/dist/lib/account-info/account-info.component.d.ts.map +1 -0
  3. package/dist/lib/account-info/account-info.component.js +155 -0
  4. package/dist/lib/account-info/account-info.component.js.map +1 -0
  5. package/dist/lib/appearance-settings/appearance-settings.component.d.ts +15 -0
  6. package/dist/lib/appearance-settings/appearance-settings.component.d.ts.map +1 -0
  7. package/dist/lib/appearance-settings/appearance-settings.component.js +79 -0
  8. package/dist/lib/appearance-settings/appearance-settings.component.js.map +1 -0
  9. package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts +15 -1
  10. package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts.map +1 -1
  11. package/dist/lib/application-management/application-dialog/application-dialog.component.js +329 -190
  12. package/dist/lib/application-management/application-dialog/application-dialog.component.js.map +1 -1
  13. package/dist/lib/application-management/application-management.component.d.ts.map +1 -1
  14. package/dist/lib/application-management/application-management.component.js +265 -184
  15. package/dist/lib/application-management/application-management.component.js.map +1 -1
  16. package/dist/lib/application-settings/application-settings.component.d.ts +113 -0
  17. package/dist/lib/application-settings/application-settings.component.d.ts.map +1 -0
  18. package/dist/lib/application-settings/application-settings.component.js +520 -0
  19. package/dist/lib/application-settings/application-settings.component.js.map +1 -0
  20. package/dist/lib/entity-permissions/entity-permissions.component.d.ts +1 -0
  21. package/dist/lib/entity-permissions/entity-permissions.component.d.ts.map +1 -1
  22. package/dist/lib/entity-permissions/entity-permissions.component.js +369 -192
  23. package/dist/lib/entity-permissions/entity-permissions.component.js.map +1 -1
  24. package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.d.ts.map +1 -1
  25. package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js +160 -143
  26. package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js.map +1 -1
  27. package/dist/lib/general-settings/general-settings.component.d.ts +14 -0
  28. package/dist/lib/general-settings/general-settings.component.d.ts.map +1 -0
  29. package/dist/lib/general-settings/general-settings.component.js +50 -0
  30. package/dist/lib/general-settings/general-settings.component.js.map +1 -0
  31. package/dist/lib/module.d.ts +28 -30
  32. package/dist/lib/module.d.ts.map +1 -1
  33. package/dist/lib/module.js +75 -68
  34. package/dist/lib/module.js.map +1 -1
  35. package/dist/lib/notification-preferences/notification-preferences.component.d.ts +77 -0
  36. package/dist/lib/notification-preferences/notification-preferences.component.d.ts.map +1 -1
  37. package/dist/lib/notification-preferences/notification-preferences.component.js +153 -77
  38. package/dist/lib/notification-preferences/notification-preferences.component.js.map +1 -1
  39. package/dist/lib/role-management/role-dialog/role-dialog.component.d.ts.map +1 -1
  40. package/dist/lib/role-management/role-dialog/role-dialog.component.js +93 -89
  41. package/dist/lib/role-management/role-dialog/role-dialog.component.js.map +1 -1
  42. package/dist/lib/role-management/role-management.component.d.ts +1 -0
  43. package/dist/lib/role-management/role-management.component.d.ts.map +1 -1
  44. package/dist/lib/role-management/role-management.component.js +275 -158
  45. package/dist/lib/role-management/role-management.component.js.map +1 -1
  46. package/dist/lib/settings/settings.component.d.ts +47 -3
  47. package/dist/lib/settings/settings.component.d.ts.map +1 -1
  48. package/dist/lib/settings/settings.component.js +339 -269
  49. package/dist/lib/settings/settings.component.js.map +1 -1
  50. package/dist/lib/shared/settings-card.component.d.ts.map +1 -1
  51. package/dist/lib/shared/settings-card.component.js +21 -18
  52. package/dist/lib/shared/settings-card.component.js.map +1 -1
  53. package/dist/lib/sql-logging/sql-logging.component.d.ts +11 -2
  54. package/dist/lib/sql-logging/sql-logging.component.d.ts.map +1 -1
  55. package/dist/lib/sql-logging/sql-logging.component.js +318 -245
  56. package/dist/lib/sql-logging/sql-logging.component.js.map +1 -1
  57. package/dist/lib/user-app-config/user-app-config.component.d.ts +21 -3
  58. package/dist/lib/user-app-config/user-app-config.component.d.ts.map +1 -1
  59. package/dist/lib/user-app-config/user-app-config.component.js +202 -147
  60. package/dist/lib/user-app-config/user-app-config.component.js.map +1 -1
  61. package/dist/lib/user-management/user-dialog/user-dialog.component.d.ts.map +1 -1
  62. package/dist/lib/user-management/user-dialog/user-dialog.component.js +120 -116
  63. package/dist/lib/user-management/user-dialog/user-dialog.component.js.map +1 -1
  64. package/dist/lib/user-management/user-management.component.d.ts +32 -2
  65. package/dist/lib/user-management/user-management.component.d.ts.map +1 -1
  66. package/dist/lib/user-management/user-management.component.js +822 -297
  67. package/dist/lib/user-management/user-management.component.js.map +1 -1
  68. package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts +31 -2
  69. package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts.map +1 -1
  70. package/dist/lib/user-profile-settings/user-profile-settings.component.js +213 -80
  71. package/dist/lib/user-profile-settings/user-profile-settings.component.js.map +1 -1
  72. package/package.json +20 -20
@@ -0,0 +1,520 @@
1
+ import { Component } from '@angular/core';
2
+ import { Metadata, RunView, LogError, LogStatus } from '@memberjunction/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@memberjunction/ng-base-application";
5
+ import * as i2 from "@memberjunction/ng-shared";
6
+ import * as i3 from "@memberjunction/ng-shared-generic";
7
+ const _forTrack0 = ($index, $item) => $item.App.ID;
8
+ function ApplicationSettingsComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
9
+ i0.ɵɵelementStart(0, "div", 3);
10
+ i0.ɵɵelement(1, "mj-loading", 6);
11
+ i0.ɵɵelementEnd();
12
+ } }
13
+ function ApplicationSettingsComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "div", 4);
15
+ i0.ɵɵelement(1, "i", 7);
16
+ i0.ɵɵelementStart(2, "span");
17
+ i0.ɵɵtext(3);
18
+ i0.ɵɵelementEnd()();
19
+ } if (rf & 2) {
20
+ const ctx_r0 = i0.ɵɵnextContext();
21
+ i0.ɵɵadvance(3);
22
+ i0.ɵɵtextInterpolate(ctx_r0.ErrorMessage);
23
+ } }
24
+ function ApplicationSettingsComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
25
+ i0.ɵɵelementStart(0, "div", 5);
26
+ i0.ɵɵelement(1, "i", 8);
27
+ i0.ɵɵelementStart(2, "span");
28
+ i0.ɵɵtext(3);
29
+ i0.ɵɵelementEnd()();
30
+ } if (rf & 2) {
31
+ const ctx_r0 = i0.ɵɵnextContext();
32
+ i0.ɵɵadvance(3);
33
+ i0.ɵɵtextInterpolate(ctx_r0.SuccessMessage);
34
+ } }
35
+ function ApplicationSettingsComponent_Conditional_8_Conditional_9_Template(rf, ctx) { if (rf & 1) {
36
+ i0.ɵɵelementStart(0, "div", 16);
37
+ i0.ɵɵelement(1, "i", 8);
38
+ i0.ɵɵelementStart(2, "span");
39
+ i0.ɵɵtext(3, "All applications are selected");
40
+ i0.ɵɵelementEnd()();
41
+ } }
42
+ function ApplicationSettingsComponent_Conditional_8_For_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
43
+ i0.ɵɵelementStart(0, "span", 30);
44
+ i0.ɵɵtext(1);
45
+ i0.ɵɵelementEnd();
46
+ } if (rf & 2) {
47
+ const item_r4 = i0.ɵɵnextContext().$implicit;
48
+ i0.ɵɵadvance();
49
+ i0.ɵɵtextInterpolate(item_r4.App.Description);
50
+ } }
51
+ function ApplicationSettingsComponent_Conditional_8_For_11_Template(rf, ctx) { if (rf & 1) {
52
+ const _r3 = i0.ɵɵgetCurrentView();
53
+ i0.ɵɵelementStart(0, "div", 26);
54
+ i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_11_Template_div_click_0_listener() { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.AddApp(item_r4)); });
55
+ i0.ɵɵelementStart(1, "div", 27);
56
+ i0.ɵɵelement(2, "i");
57
+ i0.ɵɵelementEnd();
58
+ i0.ɵɵelementStart(3, "div", 28)(4, "span", 29);
59
+ i0.ɵɵtext(5);
60
+ i0.ɵɵelementEnd();
61
+ i0.ɵɵtemplate(6, ApplicationSettingsComponent_Conditional_8_For_11_Conditional_6_Template, 2, 1, "span", 30);
62
+ i0.ɵɵelementEnd();
63
+ i0.ɵɵelementStart(7, "button", 31);
64
+ i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_11_Template_button_click_7_listener($event) { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.AddApp(item_r4); return i0.ɵɵresetView($event.stopPropagation()); });
65
+ i0.ɵɵelement(8, "i", 32);
66
+ i0.ɵɵelementEnd()();
67
+ } if (rf & 2) {
68
+ const item_r4 = ctx.$implicit;
69
+ i0.ɵɵadvance(2);
70
+ i0.ɵɵclassMap(item_r4.App.Icon || "fa-solid fa-window-maximize");
71
+ i0.ɵɵadvance(3);
72
+ i0.ɵɵtextInterpolate(item_r4.App.Name);
73
+ i0.ɵɵadvance();
74
+ i0.ɵɵconditional(item_r4.App.Description ? 6 : -1);
75
+ } }
76
+ function ApplicationSettingsComponent_Conditional_8_Conditional_20_Template(rf, ctx) { if (rf & 1) {
77
+ i0.ɵɵelementStart(0, "div", 16);
78
+ i0.ɵɵelement(1, "i", 33);
79
+ i0.ɵɵelementStart(2, "span");
80
+ i0.ɵɵtext(3, "Add applications from the list");
81
+ i0.ɵɵelementEnd()();
82
+ } }
83
+ function ApplicationSettingsComponent_Conditional_8_For_22_Template(rf, ctx) { if (rf & 1) {
84
+ const _r5 = i0.ɵɵgetCurrentView();
85
+ i0.ɵɵelementStart(0, "div", 34);
86
+ i0.ɵɵlistener("dragstart", function ApplicationSettingsComponent_Conditional_8_For_22_Template_div_dragstart_0_listener($event) { const ctx_r5 = i0.ɵɵrestoreView(_r5); const item_r7 = ctx_r5.$implicit; const ɵ$index_97_r8 = ctx_r5.$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDragStart($event, item_r7, ɵ$index_97_r8)); })("dragenter", function ApplicationSettingsComponent_Conditional_8_For_22_Template_div_dragenter_0_listener($event) { const ɵ$index_97_r8 = i0.ɵɵrestoreView(_r5).$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDragEnter($event, ɵ$index_97_r8)); })("dragend", function ApplicationSettingsComponent_Conditional_8_For_22_Template_div_dragend_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDragEnd()); })("drop", function ApplicationSettingsComponent_Conditional_8_For_22_Template_div_drop_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDrop($event)); });
87
+ i0.ɵɵelementStart(1, "div", 35);
88
+ i0.ɵɵelement(2, "i", 36);
89
+ i0.ɵɵelementEnd();
90
+ i0.ɵɵelementStart(3, "div", 27);
91
+ i0.ɵɵelement(4, "i");
92
+ i0.ɵɵelementEnd();
93
+ i0.ɵɵelementStart(5, "div", 28)(6, "span", 29);
94
+ i0.ɵɵtext(7);
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelementStart(8, "span", 37);
97
+ i0.ɵɵtext(9);
98
+ i0.ɵɵelementEnd()();
99
+ i0.ɵɵelementStart(10, "div", 38)(11, "button", 39);
100
+ i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_22_Template_button_click_11_listener() { const item_r7 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.MoveUp(item_r7)); });
101
+ i0.ɵɵelement(12, "i", 40);
102
+ i0.ɵɵelementEnd();
103
+ i0.ɵɵelementStart(13, "button", 41);
104
+ i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_22_Template_button_click_13_listener() { const item_r7 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.MoveDown(item_r7)); });
105
+ i0.ɵɵelement(14, "i", 42);
106
+ i0.ɵɵelementEnd();
107
+ i0.ɵɵelementStart(15, "button", 43);
108
+ i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_22_Template_button_click_15_listener() { const item_r7 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.RemoveApp(item_r7)); });
109
+ i0.ɵɵelement(16, "i", 44);
110
+ i0.ɵɵelementEnd()()();
111
+ } if (rf & 2) {
112
+ const item_r7 = ctx.$implicit;
113
+ const ɵ$index_97_r8 = ctx.$index;
114
+ const ɵ$count_97_r9 = ctx.$count;
115
+ const ctx_r0 = i0.ɵɵnextContext(2);
116
+ i0.ɵɵclassProp("drop-target", ctx_r0.IsDropTarget(ɵ$index_97_r8))("dirty", item_r7.IsDirty);
117
+ i0.ɵɵadvance(4);
118
+ i0.ɵɵclassMap(item_r7.App.Icon || "fa-solid fa-window-maximize");
119
+ i0.ɵɵadvance(3);
120
+ i0.ɵɵtextInterpolate(item_r7.App.Name);
121
+ i0.ɵɵadvance(2);
122
+ i0.ɵɵtextInterpolate1("Position ", ɵ$index_97_r8 + 1, "");
123
+ i0.ɵɵadvance(2);
124
+ i0.ɵɵproperty("disabled", ɵ$index_97_r8 === 0);
125
+ i0.ɵɵadvance(2);
126
+ i0.ɵɵproperty("disabled", ɵ$index_97_r8 === ɵ$count_97_r9 - 1);
127
+ } }
128
+ function ApplicationSettingsComponent_Conditional_8_Conditional_28_Template(rf, ctx) { if (rf & 1) {
129
+ i0.ɵɵelement(0, "i", 45);
130
+ i0.ɵɵtext(1, " Saving... ");
131
+ } }
132
+ function ApplicationSettingsComponent_Conditional_8_Conditional_29_Template(rf, ctx) { if (rf & 1) {
133
+ i0.ɵɵelement(0, "i", 46);
134
+ i0.ɵɵtext(1, " Save Changes ");
135
+ } }
136
+ function ApplicationSettingsComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
137
+ const _r2 = i0.ɵɵgetCurrentView();
138
+ i0.ɵɵelementStart(0, "div", 9)(1, "div", 10)(2, "div", 11)(3, "h3", 12);
139
+ i0.ɵɵelement(4, "i", 13);
140
+ i0.ɵɵtext(5, " Available Applications ");
141
+ i0.ɵɵelementEnd();
142
+ i0.ɵɵelementStart(6, "span", 14);
143
+ i0.ɵɵtext(7);
144
+ i0.ɵɵelementEnd()();
145
+ i0.ɵɵelementStart(8, "div", 15);
146
+ i0.ɵɵtemplate(9, ApplicationSettingsComponent_Conditional_8_Conditional_9_Template, 4, 0, "div", 16);
147
+ i0.ɵɵrepeaterCreate(10, ApplicationSettingsComponent_Conditional_8_For_11_Template, 9, 4, "div", 17, _forTrack0);
148
+ i0.ɵɵelementEnd()();
149
+ i0.ɵɵelementStart(12, "div", 18)(13, "div", 11)(14, "h3", 12);
150
+ i0.ɵɵelement(15, "i", 19);
151
+ i0.ɵɵtext(16, " Your Applications ");
152
+ i0.ɵɵelementEnd();
153
+ i0.ɵɵelementStart(17, "span", 14);
154
+ i0.ɵɵtext(18);
155
+ i0.ɵɵelementEnd()();
156
+ i0.ɵɵelementStart(19, "div", 20);
157
+ i0.ɵɵlistener("dragover", function ApplicationSettingsComponent_Conditional_8_Template_div_dragover_19_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDragOver($event)); });
158
+ i0.ɵɵtemplate(20, ApplicationSettingsComponent_Conditional_8_Conditional_20_Template, 4, 0, "div", 16);
159
+ i0.ɵɵrepeaterCreate(21, ApplicationSettingsComponent_Conditional_8_For_22_Template, 17, 10, "div", 21, _forTrack0);
160
+ i0.ɵɵelementEnd()()();
161
+ i0.ɵɵelementStart(23, "div", 22)(24, "button", 23);
162
+ i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_Template_button_click_24_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Reset()); });
163
+ i0.ɵɵelement(25, "i", 24);
164
+ i0.ɵɵtext(26, " Reset ");
165
+ i0.ɵɵelementEnd();
166
+ i0.ɵɵelementStart(27, "button", 25);
167
+ i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_Template_button_click_27_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Save()); });
168
+ i0.ɵɵtemplate(28, ApplicationSettingsComponent_Conditional_8_Conditional_28_Template, 2, 0)(29, ApplicationSettingsComponent_Conditional_8_Conditional_29_Template, 2, 0);
169
+ i0.ɵɵelementEnd()();
170
+ } if (rf & 2) {
171
+ const ctx_r0 = i0.ɵɵnextContext();
172
+ i0.ɵɵadvance(7);
173
+ i0.ɵɵtextInterpolate(ctx_r0.AvailableApps.length);
174
+ i0.ɵɵadvance(2);
175
+ i0.ɵɵconditional(ctx_r0.AvailableApps.length === 0 ? 9 : -1);
176
+ i0.ɵɵadvance();
177
+ i0.ɵɵrepeater(ctx_r0.AvailableApps);
178
+ i0.ɵɵadvance(8);
179
+ i0.ɵɵtextInterpolate(ctx_r0.ActiveApps.length);
180
+ i0.ɵɵadvance(2);
181
+ i0.ɵɵconditional(ctx_r0.ActiveApps.length === 0 ? 20 : -1);
182
+ i0.ɵɵadvance();
183
+ i0.ɵɵrepeater(ctx_r0.ActiveApps);
184
+ i0.ɵɵadvance(3);
185
+ i0.ɵɵproperty("disabled", !ctx_r0.HasChanges() || ctx_r0.IsSaving);
186
+ i0.ɵɵadvance(3);
187
+ i0.ɵɵproperty("disabled", !ctx_r0.HasChanges() || ctx_r0.IsSaving);
188
+ i0.ɵɵadvance();
189
+ i0.ɵɵconditional(ctx_r0.IsSaving ? 28 : 29);
190
+ } }
191
+ /**
192
+ * Inline component for configuring user's application visibility and order.
193
+ * Allows users to:
194
+ * - Select which applications to show in the app switcher
195
+ * - Reorder applications via drag-and-drop
196
+ */
197
+ export class ApplicationSettingsComponent {
198
+ appManager;
199
+ sharedService;
200
+ cdr;
201
+ // All available apps from the system
202
+ AllApps = [];
203
+ // User's selected apps (active and ordered)
204
+ ActiveApps = [];
205
+ // Available apps not yet selected
206
+ AvailableApps = [];
207
+ IsLoading = false;
208
+ IsSaving = false;
209
+ ErrorMessage = '';
210
+ SuccessMessage = '';
211
+ // Native drag-and-drop state
212
+ draggedItem = null;
213
+ draggedIndex = -1;
214
+ dropTargetIndex = -1;
215
+ constructor(appManager, sharedService, cdr) {
216
+ this.appManager = appManager;
217
+ this.sharedService = sharedService;
218
+ this.cdr = cdr;
219
+ }
220
+ async ngOnInit() {
221
+ await this.LoadConfiguration();
222
+ }
223
+ /**
224
+ * Loads the user's current app configuration
225
+ */
226
+ async LoadConfiguration() {
227
+ this.IsLoading = true;
228
+ this.ErrorMessage = '';
229
+ try {
230
+ const md = new Metadata();
231
+ const rv = new RunView();
232
+ // Load all system apps from ApplicationManager
233
+ const systemApps = this.appManager.GetAllSystemApps();
234
+ // Load user's UserApplication records
235
+ const userAppsResult = await rv.RunView({
236
+ EntityName: 'User Applications',
237
+ ExtraFilter: `UserID = '${md.CurrentUser.ID}'`,
238
+ OrderBy: 'Sequence, Application',
239
+ ResultType: 'entity_object'
240
+ });
241
+ const userApps = userAppsResult.Success ? userAppsResult.Results : [];
242
+ // Build app config items
243
+ this.AllApps = this.BuildAppConfigItems(systemApps, userApps);
244
+ // Separate into active (selected) and available (unselected)
245
+ this.RefreshAppLists();
246
+ }
247
+ catch (error) {
248
+ this.ErrorMessage = 'Failed to load app configuration. Please try again.';
249
+ LogError('Error loading app configuration:', undefined, error instanceof Error ? error.message : String(error));
250
+ }
251
+ finally {
252
+ this.IsLoading = false;
253
+ this.cdr.detectChanges();
254
+ }
255
+ }
256
+ /**
257
+ * Builds app config items by matching system apps with user's UserApplication records
258
+ */
259
+ BuildAppConfigItems(systemApps, userApps) {
260
+ const items = [];
261
+ for (const app of systemApps) {
262
+ const userApp = userApps.find(ua => ua.ApplicationID === app.ID);
263
+ items.push({
264
+ App: app,
265
+ UserAppId: userApp?.ID || null,
266
+ Sequence: userApp?.Sequence ?? 999,
267
+ IsActive: userApp?.IsActive ?? false,
268
+ IsDirty: false
269
+ });
270
+ }
271
+ return items;
272
+ }
273
+ /**
274
+ * Separates apps into active and available lists based on IsActive state
275
+ */
276
+ RefreshAppLists() {
277
+ this.ActiveApps = this.AllApps
278
+ .filter(item => item.IsActive)
279
+ .sort((a, b) => a.Sequence - b.Sequence);
280
+ this.AvailableApps = this.AllApps
281
+ .filter(item => !item.IsActive)
282
+ .sort((a, b) => a.App.Name.localeCompare(b.App.Name));
283
+ }
284
+ /**
285
+ * Native drag start handler
286
+ */
287
+ OnDragStart(event, item, index) {
288
+ this.draggedItem = item;
289
+ this.draggedIndex = index;
290
+ if (event.dataTransfer) {
291
+ event.dataTransfer.effectAllowed = 'move';
292
+ event.dataTransfer.setData('text/plain', index.toString());
293
+ }
294
+ }
295
+ /**
296
+ * Native drag over handler - allows drop
297
+ */
298
+ OnDragOver(event) {
299
+ event.preventDefault();
300
+ if (event.dataTransfer) {
301
+ event.dataTransfer.dropEffect = 'move';
302
+ }
303
+ }
304
+ /**
305
+ * Native drag enter handler - tracks drop target
306
+ */
307
+ OnDragEnter(event, index) {
308
+ event.preventDefault();
309
+ this.dropTargetIndex = index;
310
+ }
311
+ /**
312
+ * Native drag end handler - cleanup
313
+ */
314
+ OnDragEnd() {
315
+ this.draggedItem = null;
316
+ this.draggedIndex = -1;
317
+ this.dropTargetIndex = -1;
318
+ }
319
+ /**
320
+ * Native drop handler - reorder items
321
+ */
322
+ OnDrop(event) {
323
+ event.preventDefault();
324
+ if (this.draggedIndex >= 0 && this.dropTargetIndex >= 0 && this.draggedIndex !== this.dropTargetIndex) {
325
+ // Remove item from old position
326
+ const [movedItem] = this.ActiveApps.splice(this.draggedIndex, 1);
327
+ // Insert at new position
328
+ this.ActiveApps.splice(this.dropTargetIndex, 0, movedItem);
329
+ // Update sequences based on new order
330
+ this.ActiveApps.forEach((item, idx) => {
331
+ if (item.Sequence !== idx) {
332
+ item.Sequence = idx;
333
+ item.IsDirty = true;
334
+ }
335
+ });
336
+ this.cdr.detectChanges();
337
+ }
338
+ // Reset drag state
339
+ this.OnDragEnd();
340
+ }
341
+ /**
342
+ * Adds an app to the user's active list
343
+ */
344
+ AddApp(item) {
345
+ item.IsActive = true;
346
+ item.Sequence = this.ActiveApps.length;
347
+ item.IsDirty = true;
348
+ this.RefreshAppLists();
349
+ }
350
+ /**
351
+ * Removes an app from the user's active list
352
+ */
353
+ RemoveApp(item) {
354
+ item.IsActive = false;
355
+ item.Sequence = 999;
356
+ item.IsDirty = true;
357
+ this.RefreshAppLists();
358
+ // Resequence remaining active apps
359
+ this.ActiveApps.forEach((activeItem, index) => {
360
+ if (activeItem.Sequence !== index) {
361
+ activeItem.Sequence = index;
362
+ activeItem.IsDirty = true;
363
+ }
364
+ });
365
+ }
366
+ /**
367
+ * Moves an app up in the order
368
+ */
369
+ MoveUp(item) {
370
+ const index = this.ActiveApps.indexOf(item);
371
+ if (index > 0) {
372
+ const prevItem = this.ActiveApps[index - 1];
373
+ // Swap sequences
374
+ const tempSeq = item.Sequence;
375
+ item.Sequence = prevItem.Sequence;
376
+ prevItem.Sequence = tempSeq;
377
+ item.IsDirty = true;
378
+ prevItem.IsDirty = true;
379
+ // Re-sort
380
+ this.ActiveApps = [...this.ActiveApps].sort((a, b) => a.Sequence - b.Sequence);
381
+ }
382
+ }
383
+ /**
384
+ * Moves an app down in the order
385
+ */
386
+ MoveDown(item) {
387
+ const index = this.ActiveApps.indexOf(item);
388
+ if (index < this.ActiveApps.length - 1) {
389
+ const nextItem = this.ActiveApps[index + 1];
390
+ // Swap sequences
391
+ const tempSeq = item.Sequence;
392
+ item.Sequence = nextItem.Sequence;
393
+ nextItem.Sequence = tempSeq;
394
+ item.IsDirty = true;
395
+ nextItem.IsDirty = true;
396
+ // Re-sort
397
+ this.ActiveApps = [...this.ActiveApps].sort((a, b) => a.Sequence - b.Sequence);
398
+ }
399
+ }
400
+ /**
401
+ * Checks if there are any unsaved changes
402
+ */
403
+ HasChanges() {
404
+ return this.AllApps.some(item => item.IsDirty);
405
+ }
406
+ /**
407
+ * Saves the user's app configuration
408
+ */
409
+ async Save() {
410
+ if (!this.HasChanges()) {
411
+ return;
412
+ }
413
+ this.IsSaving = true;
414
+ this.ErrorMessage = '';
415
+ this.SuccessMessage = '';
416
+ try {
417
+ const md = new Metadata();
418
+ // Process each app config item
419
+ for (const item of this.AllApps) {
420
+ if (!item.IsDirty)
421
+ continue;
422
+ if (item.UserAppId) {
423
+ // Update existing UserApplication record
424
+ await this.UpdateUserApplication(md, item);
425
+ }
426
+ else if (item.IsActive) {
427
+ // Create new UserApplication record (only if active)
428
+ await this.CreateUserApplication(md, item);
429
+ }
430
+ }
431
+ // Reload the ApplicationManager to reflect changes
432
+ LogStatus('User app configuration saved, reloading ApplicationManager...');
433
+ await this.appManager.ReloadUserApplications();
434
+ this.SuccessMessage = 'App configuration saved successfully!';
435
+ this.sharedService.CreateSimpleNotification(this.SuccessMessage, 'success', 3000);
436
+ // Clear dirty flags
437
+ this.AllApps.forEach(item => item.IsDirty = false);
438
+ }
439
+ catch (error) {
440
+ this.ErrorMessage = 'Failed to save configuration. Please try again.';
441
+ LogError('Error saving app configuration:', undefined, error instanceof Error ? error.message : String(error));
442
+ }
443
+ finally {
444
+ this.IsSaving = false;
445
+ this.cdr.detectChanges();
446
+ }
447
+ }
448
+ /**
449
+ * Updates an existing UserApplication record
450
+ */
451
+ async UpdateUserApplication(md, item) {
452
+ const userApp = await md.GetEntityObject('User Applications');
453
+ await userApp.Load(item.UserAppId);
454
+ userApp.Sequence = item.Sequence;
455
+ userApp.IsActive = item.IsActive;
456
+ const saved = await userApp.Save();
457
+ if (!saved) {
458
+ throw new Error(`Failed to update UserApplication for ${item.App.Name}: ${userApp.LatestResult}`);
459
+ }
460
+ item.IsDirty = false;
461
+ LogStatus(`Updated UserApplication for ${item.App.Name}: sequence=${item.Sequence}, isActive=${item.IsActive}`);
462
+ }
463
+ /**
464
+ * Creates a new UserApplication record
465
+ */
466
+ async CreateUserApplication(md, item) {
467
+ const userApp = await md.GetEntityObject('User Applications');
468
+ userApp.NewRecord();
469
+ userApp.UserID = md.CurrentUser.ID;
470
+ userApp.ApplicationID = item.App.ID;
471
+ userApp.Sequence = item.Sequence;
472
+ userApp.IsActive = item.IsActive;
473
+ const saved = await userApp.Save();
474
+ if (!saved) {
475
+ throw new Error(`Failed to create UserApplication for ${item.App.Name}: ${userApp.LatestResult}`);
476
+ }
477
+ item.UserAppId = userApp.ID;
478
+ item.IsDirty = false;
479
+ LogStatus(`Created UserApplication for ${item.App.Name}: sequence=${item.Sequence}`);
480
+ }
481
+ /**
482
+ * Resets all changes and reloads the configuration
483
+ */
484
+ async Reset() {
485
+ await this.LoadConfiguration();
486
+ this.SuccessMessage = '';
487
+ }
488
+ /**
489
+ * Check if drop target is active
490
+ */
491
+ IsDropTarget(index) {
492
+ return this.dropTargetIndex === index;
493
+ }
494
+ static ɵfac = function ApplicationSettingsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ApplicationSettingsComponent)(i0.ɵɵdirectiveInject(i1.ApplicationManager), i0.ɵɵdirectiveInject(i2.SharedService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
495
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ApplicationSettingsComponent, selectors: [["mj-application-settings"]], decls: 9, vars: 4, consts: [[1, "application-settings"], [1, "section-title"], [1, "section-description"], [1, "loading-container"], [1, "message", "error"], [1, "message", "success"], ["text", "Loading applications..."], [1, "fa-solid", "fa-exclamation-circle"], [1, "fa-solid", "fa-check-circle"], [1, "app-config-layout"], [1, "app-panel", "available-panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-grid-2"], [1, "panel-count"], [1, "panel-content"], [1, "empty-state"], [1, "app-item"], [1, "app-panel", "selected-panel"], [1, "fa-solid", "fa-star"], [1, "panel-content", 3, "dragover"], ["draggable", "true", 1, "app-item", "selected", 3, "drop-target", "dirty"], [1, "action-bar"], [1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-undo"], [1, "btn", "btn-primary", 3, "click", "disabled"], [1, "app-item", 3, "click"], [1, "app-icon"], [1, "app-info"], [1, "app-name"], [1, "app-desc"], ["title", "Add to selected", 1, "app-action", "add-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-arrow-left"], ["draggable", "true", 1, "app-item", "selected", 3, "dragstart", "dragenter", "dragend", "drop"], ["title", "Drag to reorder", 1, "drag-handle"], [1, "fa-solid", "fa-grip-vertical"], [1, "app-sequence"], [1, "app-actions"], ["title", "Move up", 1, "action-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["title", "Move down", 1, "action-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["title", "Remove", 1, "action-btn", "remove-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-save"]], template: function ApplicationSettingsComponent_Template(rf, ctx) { if (rf & 1) {
496
+ i0.ɵɵelementStart(0, "div", 0)(1, "h2", 1);
497
+ i0.ɵɵtext(2, "Applications");
498
+ i0.ɵɵelementEnd();
499
+ i0.ɵɵelementStart(3, "p", 2);
500
+ i0.ɵɵtext(4, "Choose which applications appear in your app switcher and set their order");
501
+ i0.ɵɵelementEnd();
502
+ i0.ɵɵtemplate(5, ApplicationSettingsComponent_Conditional_5_Template, 2, 0, "div", 3)(6, ApplicationSettingsComponent_Conditional_6_Template, 4, 1, "div", 4)(7, ApplicationSettingsComponent_Conditional_7_Template, 4, 1, "div", 5)(8, ApplicationSettingsComponent_Conditional_8_Template, 30, 7);
503
+ i0.ɵɵelementEnd();
504
+ } if (rf & 2) {
505
+ i0.ɵɵadvance(5);
506
+ i0.ɵɵconditional(ctx.IsLoading ? 5 : -1);
507
+ i0.ɵɵadvance();
508
+ i0.ɵɵconditional(ctx.ErrorMessage && !ctx.IsLoading ? 6 : -1);
509
+ i0.ɵɵadvance();
510
+ i0.ɵɵconditional(ctx.SuccessMessage && !ctx.IsLoading ? 7 : -1);
511
+ i0.ɵɵadvance();
512
+ i0.ɵɵconditional(!ctx.IsLoading && !ctx.ErrorMessage ? 8 : -1);
513
+ } }, dependencies: [i3.LoadingComponent], styles: [".application-settings[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n.section-title[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary, #1a1a1a);\n}\n\n.section-description[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #666);\n margin: 0 0 1.5rem 0;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 3rem;\n}\n\n.message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 1rem;\n border-radius: 8px;\n font-size: 0.875rem;\n margin-bottom: 1rem;\n}\n\n.message.error[_ngcontent-%COMP%] {\n background-color: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n.message.success[_ngcontent-%COMP%] {\n background-color: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.app-config-layout[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.5rem;\n margin-bottom: 1.5rem;\n}\n\n@media (max-width: 768px) {\n .app-config-layout[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n.app-panel[_ngcontent-%COMP%] {\n background: var(--mj-surface-color, #fff);\n border: 1px solid var(--mj-border-color, #e5e7eb);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 1.25rem;\n background: var(--mj-surface-secondary, #f9fafb);\n border-bottom: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n font-weight: 600;\n margin: 0;\n color: var(--mj-text-primary, #1f2937);\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-primary-color, #3b82f6);\n}\n\n.panel-count[_ngcontent-%COMP%] {\n background: var(--mj-primary-color, #3b82f6);\n color: white;\n font-size: 0.75rem;\n font-weight: 600;\n padding: 0.125rem 0.5rem;\n border-radius: 9999px;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 0.5rem;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n color: var(--mj-text-secondary, #6b7280);\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n margin-bottom: 0.5rem;\n opacity: 0.5;\n}\n\n.app-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.app-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-hover-bg, #f3f4f6);\n}\n\n.app-item.selected[_ngcontent-%COMP%] {\n cursor: grab;\n}\n\n.app-item.selected[_ngcontent-%COMP%]:active {\n cursor: grabbing;\n}\n\n.app-item.drop-target[_ngcontent-%COMP%] {\n background-color: var(--mj-primary-light, #dbeafe);\n border: 2px dashed var(--mj-primary-color, #3b82f6);\n}\n\n.app-item.dirty[_ngcontent-%COMP%] {\n background-color: var(--mj-warning-bg-light, #fefce8);\n}\n\n.drag-handle[_ngcontent-%COMP%] {\n color: var(--mj-text-tertiary, #9ca3af);\n cursor: grab;\n padding: 0.25rem;\n}\n\n.drag-handle[_ngcontent-%COMP%]:active {\n cursor: grabbing;\n}\n\n.app-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n background: var(--mj-primary-light, #dbeafe);\n color: var(--mj-primary-color, #3b82f6);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.app-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.app-name[_ngcontent-%COMP%] {\n display: block;\n font-weight: 500;\n color: var(--mj-text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-desc[_ngcontent-%COMP%] {\n display: block;\n font-size: 0.75rem;\n color: var(--mj-text-secondary, #6b7280);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-sequence[_ngcontent-%COMP%] {\n display: block;\n font-size: 0.75rem;\n color: var(--mj-text-tertiary, #9ca3af);\n}\n\n.app-action[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.add-btn[_ngcontent-%COMP%] {\n background: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.add-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-success-color, #16a34a);\n color: white;\n}\n\n.app-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.25rem;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary, #6b7280);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-hover-bg, #f3f4f6);\n color: var(--mj-text-primary, #1f2937);\n}\n\n.action-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.action-btn.remove-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n.action-bar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding-top: 1rem;\n border-top: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n border: none;\n}\n\n.btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-surface-secondary, #f3f4f6);\n color: var(--mj-text-primary, #1f2937);\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-hover-bg, #e5e7eb);\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-primary-color, #3b82f6);\n color: white;\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-primary-dark, #2563eb);\n}"] });
514
+ }
515
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ApplicationSettingsComponent, [{
516
+ type: Component,
517
+ args: [{ selector: 'mj-application-settings', template: "<div class=\"application-settings\">\n <h2 class=\"section-title\">Applications</h2>\n <p class=\"section-description\">Choose which applications appear in your app switcher and set their order</p>\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading applications...\"></mj-loading>\n </div>\n }\n\n @if (ErrorMessage && !IsLoading) {\n <div class=\"message error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n\n @if (SuccessMessage && !IsLoading) {\n <div class=\"message success\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ SuccessMessage }}</span>\n </div>\n }\n\n @if (!IsLoading && !ErrorMessage) {\n <div class=\"app-config-layout\">\n <!-- Available Apps Panel -->\n <div class=\"app-panel available-panel\">\n <div class=\"panel-header\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-grid-2\"></i>\n Available Applications\n </h3>\n <span class=\"panel-count\">{{ AvailableApps.length }}</span>\n </div>\n <div class=\"panel-content\">\n @if (AvailableApps.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>All applications are selected</span>\n </div>\n }\n @for (item of AvailableApps; track item.App.ID) {\n <div class=\"app-item\" (click)=\"AddApp(item)\">\n <div class=\"app-icon\">\n <i [class]=\"item.App.Icon || 'fa-solid fa-window-maximize'\"></i>\n </div>\n <div class=\"app-info\">\n <span class=\"app-name\">{{ item.App.Name }}</span>\n @if (item.App.Description) {\n <span class=\"app-desc\">{{ item.App.Description }}</span>\n }\n </div>\n <button\n class=\"app-action add-btn\"\n (click)=\"AddApp(item); $event.stopPropagation()\"\n title=\"Add to selected\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n\n <!-- Selected Apps Panel -->\n <div class=\"app-panel selected-panel\">\n <div class=\"panel-header\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-star\"></i>\n Your Applications\n </h3>\n <span class=\"panel-count\">{{ ActiveApps.length }}</span>\n </div>\n <div class=\"panel-content\" (dragover)=\"OnDragOver($event)\">\n @if (ActiveApps.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n <span>Add applications from the list</span>\n </div>\n }\n @for (item of ActiveApps; track item.App.ID; let i = $index; let first = $first; let last = $last) {\n <div\n class=\"app-item selected\"\n [class.drop-target]=\"IsDropTarget(i)\"\n [class.dirty]=\"item.IsDirty\"\n draggable=\"true\"\n (dragstart)=\"OnDragStart($event, item, i)\"\n (dragenter)=\"OnDragEnter($event, i)\"\n (dragend)=\"OnDragEnd()\"\n (drop)=\"OnDrop($event)\"\n >\n <div class=\"drag-handle\" title=\"Drag to reorder\">\n <i class=\"fa-solid fa-grip-vertical\"></i>\n </div>\n <div class=\"app-icon\">\n <i [class]=\"item.App.Icon || 'fa-solid fa-window-maximize'\"></i>\n </div>\n <div class=\"app-info\">\n <span class=\"app-name\">{{ item.App.Name }}</span>\n <span class=\"app-sequence\">Position {{ i + 1 }}</span>\n </div>\n <div class=\"app-actions\">\n <button\n class=\"action-btn\"\n [disabled]=\"first\"\n (click)=\"MoveUp(item)\"\n title=\"Move up\"\n >\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button\n class=\"action-btn\"\n [disabled]=\"last\"\n (click)=\"MoveDown(item)\"\n title=\"Move down\"\n >\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n <button\n class=\"action-btn remove-btn\"\n (click)=\"RemoveApp(item)\"\n title=\"Remove\"\n >\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-bar\">\n <button\n class=\"btn btn-secondary\"\n (click)=\"Reset()\"\n [disabled]=\"!HasChanges() || IsSaving\"\n >\n <i class=\"fa-solid fa-undo\"></i>\n Reset\n </button>\n <button\n class=\"btn btn-primary\"\n (click)=\"Save()\"\n [disabled]=\"!HasChanges() || IsSaving\"\n >\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n }\n </button>\n </div>\n }\n</div>\n", styles: [".application-settings {\n padding: 0;\n}\n\n.section-title {\n font-size: 1.5rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary, #1a1a1a);\n}\n\n.section-description {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #666);\n margin: 0 0 1.5rem 0;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n padding: 3rem;\n}\n\n.message {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 1rem;\n border-radius: 8px;\n font-size: 0.875rem;\n margin-bottom: 1rem;\n}\n\n.message.error {\n background-color: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n.message.success {\n background-color: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.app-config-layout {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.5rem;\n margin-bottom: 1.5rem;\n}\n\n@media (max-width: 768px) {\n .app-config-layout {\n grid-template-columns: 1fr;\n }\n}\n\n.app-panel {\n background: var(--mj-surface-color, #fff);\n border: 1px solid var(--mj-border-color, #e5e7eb);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 1.25rem;\n background: var(--mj-surface-secondary, #f9fafb);\n border-bottom: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n font-weight: 600;\n margin: 0;\n color: var(--mj-text-primary, #1f2937);\n}\n\n.panel-title i {\n color: var(--mj-primary-color, #3b82f6);\n}\n\n.panel-count {\n background: var(--mj-primary-color, #3b82f6);\n color: white;\n font-size: 0.75rem;\n font-weight: 600;\n padding: 0.125rem 0.5rem;\n border-radius: 9999px;\n}\n\n.panel-content {\n padding: 0.5rem;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n color: var(--mj-text-secondary, #6b7280);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 1.5rem;\n margin-bottom: 0.5rem;\n opacity: 0.5;\n}\n\n.app-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.app-item:hover {\n background-color: var(--mj-hover-bg, #f3f4f6);\n}\n\n.app-item.selected {\n cursor: grab;\n}\n\n.app-item.selected:active {\n cursor: grabbing;\n}\n\n.app-item.drop-target {\n background-color: var(--mj-primary-light, #dbeafe);\n border: 2px dashed var(--mj-primary-color, #3b82f6);\n}\n\n.app-item.dirty {\n background-color: var(--mj-warning-bg-light, #fefce8);\n}\n\n.drag-handle {\n color: var(--mj-text-tertiary, #9ca3af);\n cursor: grab;\n padding: 0.25rem;\n}\n\n.drag-handle:active {\n cursor: grabbing;\n}\n\n.app-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n background: var(--mj-primary-light, #dbeafe);\n color: var(--mj-primary-color, #3b82f6);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.app-info {\n flex: 1;\n min-width: 0;\n}\n\n.app-name {\n display: block;\n font-weight: 500;\n color: var(--mj-text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-desc {\n display: block;\n font-size: 0.75rem;\n color: var(--mj-text-secondary, #6b7280);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-sequence {\n display: block;\n font-size: 0.75rem;\n color: var(--mj-text-tertiary, #9ca3af);\n}\n\n.app-action {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.add-btn {\n background: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.add-btn:hover {\n background: var(--mj-success-color, #16a34a);\n color: white;\n}\n\n.app-actions {\n display: flex;\n gap: 0.25rem;\n}\n\n.action-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary, #6b7280);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.action-btn:hover:not(:disabled) {\n background: var(--mj-hover-bg, #f3f4f6);\n color: var(--mj-text-primary, #1f2937);\n}\n\n.action-btn:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.action-btn.remove-btn:hover:not(:disabled) {\n background: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n.action-bar {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding-top: 1rem;\n border-top: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n border: none;\n}\n\n.btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: var(--mj-surface-secondary, #f3f4f6);\n color: var(--mj-text-primary, #1f2937);\n}\n\n.btn-secondary:hover:not(:disabled) {\n background: var(--mj-hover-bg, #e5e7eb);\n}\n\n.btn-primary {\n background: var(--mj-primary-color, #3b82f6);\n color: white;\n}\n\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-primary-dark, #2563eb);\n}\n"] }]
518
+ }], () => [{ type: i1.ApplicationManager }, { type: i2.SharedService }, { type: i0.ChangeDetectorRef }], null); })();
519
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ApplicationSettingsComponent, { className: "ApplicationSettingsComponent", filePath: "src/lib/application-settings/application-settings.component.ts", lineNumber: 29 }); })();
520
+ //# sourceMappingURL=application-settings.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-settings.component.js","sourceRoot":"","sources":["../../../src/lib/application-settings/application-settings.component.ts","../../../src/lib/application-settings/application-settings.component.html"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ export declare class EntityPermissionsComponent extends BaseDashboard implements
39
39
  filters$: BehaviorSubject<FilterOptions>;
40
40
  expandedEntityId: string | null;
41
41
  viewMode: 'grid' | 'list';
42
+ showMobileFilters: boolean;
42
43
  private destroy$;
43
44
  private metadata;
44
45
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"entity-permissions.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-permissions/entity-permissions.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-permissions.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-permissions/entity-permissions.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAW,eAAe,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACV,YAAY,EACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;;AAE/G,UAAU,gBAAgB;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,aAAa;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;IACxD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,sBAAsB,EAAE,CAAC;IACtC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC/C;AAED,UAAU,eAAe;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAMa,0BAA2B,SAAQ,aAAc,YAAW,SAAS;IAEzE,YAAY,EAAE,YAAY,EAAE,CAAM;IAClC,oBAAoB,EAAE,YAAY,EAAE,CAAM;IAC1C,KAAK,EAAE,UAAU,EAAE,CAAM;IACzB,SAAS,UAAS;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,oBAAoB,UAAS;IAC7B,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAGzD,KAAK,EAAE,gBAAgB,CAK5B;IAGK,QAAQ,iCAIZ;IAGI,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAU;IACnC,iBAAiB,UAAS;IAEjC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,QAAQ,CAAkB;;IAM5B,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,QAAQ,IAAI,IAAI;IAIjB,WAAW,IAAI,IAAI;IAMf,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YA0B/B,YAAY;YAWZ,qBAAqB;YAWrB,SAAS;IAWvB,OAAO,CAAC,mBAAmB;IAsC3B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,cAAc;IAcf,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKlC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI;IAI5E,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKtC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAOnD,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI3C,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAgBvD,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAUxD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtC,mBAAmB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;IAUvD,mBAAmB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;IAUvD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKnC,aAAa,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,GAAG,OAAO;IAKrG,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;yCAvTpC,0BAA0B;2CAA1B,0BAA0B;CA0TtC"}