@memberjunction/ng-list-management 5.35.0 → 5.37.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 (63) hide show
  1. package/README.md +179 -85
  2. package/dist/lib/components/audience-source-picker/audience-source-picker.component.d.ts +74 -0
  3. package/dist/lib/components/audience-source-picker/audience-source-picker.component.d.ts.map +1 -0
  4. package/dist/lib/components/audience-source-picker/audience-source-picker.component.js +396 -0
  5. package/dist/lib/components/audience-source-picker/audience-source-picker.component.js.map +1 -0
  6. package/dist/lib/components/audience-source-summary/audience-source-summary.component.d.ts +34 -0
  7. package/dist/lib/components/audience-source-summary/audience-source-summary.component.d.ts.map +1 -0
  8. package/dist/lib/components/audience-source-summary/audience-source-summary.component.js +136 -0
  9. package/dist/lib/components/audience-source-summary/audience-source-summary.component.js.map +1 -0
  10. package/dist/lib/components/list-audit-log/list-audit-log.component.d.ts +55 -0
  11. package/dist/lib/components/list-audit-log/list-audit-log.component.d.ts.map +1 -0
  12. package/dist/lib/components/list-audit-log/list-audit-log.component.js +280 -0
  13. package/dist/lib/components/list-audit-log/list-audit-log.component.js.map +1 -0
  14. package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.d.ts +64 -0
  15. package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.d.ts.map +1 -0
  16. package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.js +323 -0
  17. package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.js.map +1 -0
  18. package/dist/lib/components/list-invitations/list-invitations.component.d.ts +60 -0
  19. package/dist/lib/components/list-invitations/list-invitations.component.d.ts.map +1 -0
  20. package/dist/lib/components/list-invitations/list-invitations.component.js +367 -0
  21. package/dist/lib/components/list-invitations/list-invitations.component.js.map +1 -0
  22. package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/components/list-management-dialog/list-management-dialog.component.js +0 -4
  24. package/dist/lib/components/list-management-dialog/list-management-dialog.component.js.map +1 -1
  25. package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts +18 -1
  26. package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/components/list-share-dialog/list-share-dialog.component.js +115 -66
  28. package/dist/lib/components/list-share-dialog/list-share-dialog.component.js.map +1 -1
  29. package/dist/lib/components/list-stats/list-stats.component.d.ts +52 -0
  30. package/dist/lib/components/list-stats/list-stats.component.d.ts.map +1 -0
  31. package/dist/lib/components/list-stats/list-stats.component.js +283 -0
  32. package/dist/lib/components/list-stats/list-stats.component.js.map +1 -0
  33. package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.d.ts +68 -0
  34. package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.d.ts.map +1 -0
  35. package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js +316 -0
  36. package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js.map +1 -0
  37. package/dist/lib/components/shared-with-me/shared-with-me.component.d.ts +47 -0
  38. package/dist/lib/components/shared-with-me/shared-with-me.component.d.ts.map +1 -0
  39. package/dist/lib/components/shared-with-me/shared-with-me.component.js +231 -0
  40. package/dist/lib/components/shared-with-me/shared-with-me.component.js.map +1 -0
  41. package/dist/lib/components/tag-chips/tag-chips.component.d.ts +85 -0
  42. package/dist/lib/components/tag-chips/tag-chips.component.d.ts.map +1 -0
  43. package/dist/lib/components/tag-chips/tag-chips.component.js +392 -0
  44. package/dist/lib/components/tag-chips/tag-chips.component.js.map +1 -0
  45. package/dist/lib/models/list-sharing.models.d.ts +5 -0
  46. package/dist/lib/models/list-sharing.models.d.ts.map +1 -1
  47. package/dist/lib/models/list-sharing.models.js.map +1 -1
  48. package/dist/lib/module.d.ts +17 -8
  49. package/dist/lib/module.d.ts.map +1 -1
  50. package/dist/lib/module.js +51 -6
  51. package/dist/lib/module.js.map +1 -1
  52. package/dist/lib/services/list-management.service.d.ts.map +1 -1
  53. package/dist/lib/services/list-management.service.js +0 -9
  54. package/dist/lib/services/list-management.service.js.map +1 -1
  55. package/dist/lib/services/list-sharing.service.d.ts +8 -3
  56. package/dist/lib/services/list-sharing.service.d.ts.map +1 -1
  57. package/dist/lib/services/list-sharing.service.js +33 -15
  58. package/dist/lib/services/list-sharing.service.js.map +1 -1
  59. package/dist/public-api.d.ts +9 -0
  60. package/dist/public-api.d.ts.map +1 -1
  61. package/dist/public-api.js +9 -0
  62. package/dist/public-api.js.map +1 -1
  63. package/package.json +13 -11
@@ -9,11 +9,11 @@ import * as i3 from "@memberjunction/ng-ui-components";
9
9
  import * as i4 from "@memberjunction/ng-shared-generic";
10
10
  function ListShareDialogComponent_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
11
11
  i0.ɵɵelementStart(0, "div", 4);
12
- i0.ɵɵelement(1, "mj-loading", 7);
12
+ i0.ɵɵelement(1, "mj-loading", 12);
13
13
  i0.ɵɵelementEnd();
14
14
  } }
15
15
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelementStart(0, "span", 28);
16
+ i0.ɵɵelementStart(0, "span", 33);
17
17
  i0.ɵɵtext(1);
18
18
  i0.ɵɵelementEnd();
19
19
  } if (rf & 2) {
@@ -23,13 +23,13 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
23
23
  } }
24
24
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
25
25
  const _r4 = i0.ɵɵgetCurrentView();
26
- i0.ɵɵelementStart(0, "div", 25);
26
+ i0.ɵɵelementStart(0, "div", 30);
27
27
  i0.ɵɵlistener("mousedown", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Template_div_mousedown_0_listener() { const recipient_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.selectRecipient(recipient_r5)); });
28
28
  i0.ɵɵelement(1, "i");
29
- i0.ɵɵelementStart(2, "div", 26)(3, "span", 27);
29
+ i0.ɵɵelementStart(2, "div", 31)(3, "span", 32);
30
30
  i0.ɵɵtext(4);
31
31
  i0.ɵɵelementEnd();
32
- i0.ɵɵconditionalCreate(5, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Conditional_5_Template, 2, 1, "span", 28);
32
+ i0.ɵɵconditionalCreate(5, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Conditional_5_Template, 2, 1, "span", 33);
33
33
  i0.ɵɵelementEnd()();
34
34
  } if (rf & 2) {
35
35
  const recipient_r5 = ctx.$implicit;
@@ -42,8 +42,8 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
42
42
  i0.ɵɵconditional(recipient_r5.email ? 5 : -1);
43
43
  } }
44
44
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
45
- i0.ɵɵelementStart(0, "div", 22);
46
- i0.ɵɵrepeaterCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Template, 6, 4, "div", 24, i0.ɵɵrepeaterTrackByIdentity);
45
+ i0.ɵɵelementStart(0, "div", 27);
46
+ i0.ɵɵrepeaterCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Template, 6, 4, "div", 29, i0.ɵɵrepeaterTrackByIdentity);
47
47
  i0.ɵɵelementEnd();
48
48
  } if (rf & 2) {
49
49
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -51,10 +51,10 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
51
51
  i0.ɵɵrepeater(ctx_r1.searchResults);
52
52
  } }
53
53
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_ng_template_8_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵelementStart(0, "div", 35)(1, "span", 36);
54
+ i0.ɵɵelementStart(0, "div", 40)(1, "span", 41);
55
55
  i0.ɵɵtext(2);
56
56
  i0.ɵɵelementEnd();
57
- i0.ɵɵelementStart(3, "span", 37);
57
+ i0.ɵɵelementStart(3, "span", 42);
58
58
  i0.ɵɵtext(4);
59
59
  i0.ɵɵelementEnd()();
60
60
  } if (rf & 2) {
@@ -66,22 +66,22 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
66
66
  } }
67
67
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
68
68
  const _r6 = i0.ɵɵgetCurrentView();
69
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 29);
69
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 34);
70
70
  i0.ɵɵelement(2, "i");
71
71
  i0.ɵɵelementStart(3, "span");
72
72
  i0.ɵɵtext(4);
73
73
  i0.ɵɵelementEnd();
74
- i0.ɵɵelementStart(5, "button", 30);
74
+ i0.ɵɵelementStart(5, "button", 35);
75
75
  i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.clearSearch()); });
76
- i0.ɵɵelement(6, "i", 31);
76
+ i0.ɵɵelement(6, "i", 36);
77
77
  i0.ɵɵelementEnd()();
78
- i0.ɵɵelementStart(7, "mj-dropdown", 32);
78
+ i0.ɵɵelementStart(7, "mj-dropdown", 37);
79
79
  i0.ɵɵtwoWayListener("ngModelChange", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template_mj_dropdown_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPermission, $event) || (ctx_r1.selectedPermission = $event); return i0.ɵɵresetView($event); });
80
80
  i0.ɵɵtemplate(8, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_ng_template_8_Template, 5, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
81
81
  i0.ɵɵelementEnd();
82
- i0.ɵɵelementStart(10, "button", 33);
82
+ i0.ɵɵelementStart(10, "button", 38);
83
83
  i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addShare()); });
84
- i0.ɵɵelement(11, "i", 34);
84
+ i0.ɵɵelement(11, "i", 39);
85
85
  i0.ɵɵtext(12, " Add ");
86
86
  i0.ɵɵelementEnd()();
87
87
  } if (rf & 2) {
@@ -99,27 +99,27 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Cond
99
99
  } }
100
100
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
101
101
  const _r3 = i0.ɵɵgetCurrentView();
102
- i0.ɵɵelementStart(0, "div", 8)(1, "h4", 13);
102
+ i0.ɵɵelementStart(0, "div", 13)(1, "h4", 18);
103
103
  i0.ɵɵtext(2, "Add people or roles");
104
104
  i0.ɵɵelementEnd();
105
- i0.ɵɵelementStart(3, "div", 14)(4, "button", 15);
105
+ i0.ɵɵelementStart(3, "div", 19)(4, "button", 20);
106
106
  i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setSearchType("User")); });
107
- i0.ɵɵelement(5, "i", 16);
107
+ i0.ɵɵelement(5, "i", 21);
108
108
  i0.ɵɵtext(6, " Users ");
109
109
  i0.ɵɵelementEnd();
110
- i0.ɵɵelementStart(7, "button", 15);
110
+ i0.ɵɵelementStart(7, "button", 20);
111
111
  i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setSearchType("Role")); });
112
- i0.ɵɵelement(8, "i", 17);
112
+ i0.ɵɵelement(8, "i", 22);
113
113
  i0.ɵɵtext(9, " Roles ");
114
114
  i0.ɵɵelementEnd()();
115
- i0.ɵɵelementStart(10, "div", 18)(11, "div", 19);
116
- i0.ɵɵelement(12, "i", 20);
117
- i0.ɵɵelementStart(13, "input", 21);
115
+ i0.ɵɵelementStart(10, "div", 23)(11, "div", 24);
116
+ i0.ɵɵelement(12, "i", 25);
117
+ i0.ɵɵelementStart(13, "input", 26);
118
118
  i0.ɵɵlistener("input", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onSearchInput($event.target.value)); })("blur", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template_input_blur_13_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.showSearchResults = false); });
119
119
  i0.ɵɵelementEnd()();
120
- i0.ɵɵconditionalCreate(14, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_Template, 3, 0, "div", 22);
120
+ i0.ɵɵconditionalCreate(14, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_Template, 3, 0, "div", 27);
121
121
  i0.ɵɵelementEnd();
122
- i0.ɵɵconditionalCreate(15, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template, 13, 7, "div", 23);
122
+ i0.ɵɵconditionalCreate(15, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_15_Template, 13, 7, "div", 28);
123
123
  i0.ɵɵelementEnd();
124
124
  } if (rf & 2) {
125
125
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -135,10 +135,10 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Temp
135
135
  i0.ɵɵconditional(ctx_r1.selectedRecipient ? 15 : -1);
136
136
  } }
137
137
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
138
- i0.ɵɵelement(0, "hr", 9);
138
+ i0.ɵɵelement(0, "hr", 14);
139
139
  } }
140
140
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_6_Template(rf, ctx) { if (rf & 1) {
141
- i0.ɵɵelementStart(0, "span", 44);
141
+ i0.ɵɵelementStart(0, "span", 49);
142
142
  i0.ɵɵtext(1);
143
143
  i0.ɵɵelementEnd();
144
144
  } if (rf & 2) {
@@ -147,13 +147,13 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_
147
147
  i0.ɵɵtextInterpolate(share_r8.recipientEmail);
148
148
  } }
149
149
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
150
- i0.ɵɵelementStart(0, "span", 45);
150
+ i0.ɵɵelementStart(0, "span", 50);
151
151
  i0.ɵɵtext(1, "Role");
152
152
  i0.ɵɵelementEnd();
153
153
  } }
154
154
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
155
155
  const _r9 = i0.ɵɵgetCurrentView();
156
- i0.ɵɵelementStart(0, "mj-dropdown", 50);
156
+ i0.ɵɵelementStart(0, "mj-dropdown", 55);
157
157
  i0.ɵɵlistener("ValueChange", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const share_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.updateSharePermission(share_r8, $event)); });
158
158
  i0.ɵɵelementEnd();
159
159
  } if (rf & 2) {
@@ -162,7 +162,7 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_
162
162
  i0.ɵɵproperty("Data", ctx_r1.permissionOptions)("ngModel", share_r8.permissionLevel)("ValuePrimitive", true)("Disabled", ctx_r1.saving);
163
163
  } }
164
164
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_10_Template(rf, ctx) { if (rf & 1) {
165
- i0.ɵɵelementStart(0, "span", 48);
165
+ i0.ɵɵelementStart(0, "span", 53);
166
166
  i0.ɵɵtext(1);
167
167
  i0.ɵɵelementEnd();
168
168
  } if (rf & 2) {
@@ -173,27 +173,27 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_
173
173
  } }
174
174
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template(rf, ctx) { if (rf & 1) {
175
175
  const _r10 = i0.ɵɵgetCurrentView();
176
- i0.ɵɵelementStart(0, "button", 51);
176
+ i0.ɵɵelementStart(0, "button", 56);
177
177
  i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const share_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.removeShare(share_r8)); });
178
- i0.ɵɵelement(1, "i", 52);
178
+ i0.ɵɵelement(1, "i", 57);
179
179
  i0.ɵɵelementEnd();
180
180
  } if (rf & 2) {
181
181
  const ctx_r1 = i0.ɵɵnextContext(5);
182
182
  i0.ɵɵproperty("disabled", ctx_r1.saving);
183
183
  } }
184
184
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Template(rf, ctx) { if (rf & 1) {
185
- i0.ɵɵelementStart(0, "div", 39)(1, "div", 40);
186
- i0.ɵɵelement(2, "i", 41);
187
- i0.ɵɵelementStart(3, "div", 42)(4, "span", 43);
185
+ i0.ɵɵelementStart(0, "div", 44)(1, "div", 45);
186
+ i0.ɵɵelement(2, "i", 46);
187
+ i0.ɵɵelementStart(3, "div", 47)(4, "span", 48);
188
188
  i0.ɵɵtext(5);
189
189
  i0.ɵɵelementEnd();
190
- i0.ɵɵconditionalCreate(6, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_6_Template, 2, 1, "span", 44);
191
- i0.ɵɵconditionalCreate(7, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_7_Template, 2, 0, "span", 45);
190
+ i0.ɵɵconditionalCreate(6, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_6_Template, 2, 1, "span", 49);
191
+ i0.ɵɵconditionalCreate(7, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_7_Template, 2, 0, "span", 50);
192
192
  i0.ɵɵelementEnd()();
193
- i0.ɵɵelementStart(8, "div", 46);
194
- i0.ɵɵconditionalCreate(9, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template, 1, 4, "mj-dropdown", 47);
195
- i0.ɵɵconditionalCreate(10, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_10_Template, 2, 1, "span", 48);
196
- i0.ɵɵconditionalCreate(11, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template, 2, 1, "button", 49);
193
+ i0.ɵɵelementStart(8, "div", 51);
194
+ i0.ɵɵconditionalCreate(9, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template, 1, 4, "mj-dropdown", 52);
195
+ i0.ɵɵconditionalCreate(10, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_10_Template, 2, 1, "span", 53);
196
+ i0.ɵɵconditionalCreate(11, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template, 2, 1, "button", 54);
197
197
  i0.ɵɵelementEnd()();
198
198
  } if (rf & 2) {
199
199
  const share_r8 = ctx.$implicit;
@@ -214,11 +214,11 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_
214
214
  i0.ɵɵconditional(ctx_r1.canModifyShares ? 11 : -1);
215
215
  } }
216
216
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
217
- i0.ɵɵelementStart(0, "div", 10)(1, "h4", 13);
217
+ i0.ɵɵelementStart(0, "div", 15)(1, "h4", 18);
218
218
  i0.ɵɵtext(2, "People with access");
219
219
  i0.ɵɵelementEnd();
220
- i0.ɵɵelementStart(3, "div", 38);
221
- i0.ɵɵrepeaterCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Template, 12, 8, "div", 39, i0.ɵɵrepeaterTrackByIdentity);
220
+ i0.ɵɵelementStart(3, "div", 43);
221
+ i0.ɵɵrepeaterCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Template, 12, 8, "div", 44, i0.ɵɵrepeaterTrackByIdentity);
222
222
  i0.ɵɵelementEnd()();
223
223
  } if (rf & 2) {
224
224
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -226,17 +226,17 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Temp
226
226
  i0.ɵɵrepeater(ctx_r1.currentShares);
227
227
  } }
228
228
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
229
- i0.ɵɵelementStart(0, "p", 54);
229
+ i0.ɵɵelementStart(0, "p", 59);
230
230
  i0.ɵɵtext(1, " Use the search above to find users or roles to share with. ");
231
231
  i0.ɵɵelementEnd();
232
232
  } }
233
233
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
234
- i0.ɵɵelementStart(0, "div", 11);
235
- i0.ɵɵelement(1, "i", 53);
234
+ i0.ɵɵelementStart(0, "div", 16);
235
+ i0.ɵɵelement(1, "i", 58);
236
236
  i0.ɵɵelementStart(2, "p");
237
237
  i0.ɵɵtext(3, "This list hasn't been shared with anyone yet.");
238
238
  i0.ɵɵelementEnd();
239
- i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Conditional_4_Template, 2, 0, "p", 54);
239
+ i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Conditional_4_Template, 2, 0, "p", 59);
240
240
  i0.ɵɵelementEnd();
241
241
  } if (rf & 2) {
242
242
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -244,18 +244,18 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Temp
244
244
  i0.ɵɵconditional(ctx_r1.canModifyShares ? 4 : -1);
245
245
  } }
246
246
  function ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
247
- i0.ɵɵelementStart(0, "div", 12);
248
- i0.ɵɵelement(1, "i", 55);
247
+ i0.ɵɵelementStart(0, "div", 17);
248
+ i0.ɵɵelement(1, "i", 60);
249
249
  i0.ɵɵelementStart(2, "span");
250
250
  i0.ɵɵtext(3, "Only the list owner can manage sharing.");
251
251
  i0.ɵɵelementEnd()();
252
252
  } }
253
253
  function ListShareDialogComponent_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
254
- i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template, 16, 6, "div", 8);
255
- i0.ɵɵconditionalCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_1_Template, 1, 0, "hr", 9);
256
- i0.ɵɵconditionalCreate(2, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Template, 6, 0, "div", 10);
257
- i0.ɵɵconditionalCreate(3, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Template, 5, 1, "div", 11);
258
- i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_4_Template, 4, 0, "div", 12);
254
+ i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Template, 16, 6, "div", 13);
255
+ i0.ɵɵconditionalCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_1_Template, 1, 0, "hr", 14);
256
+ i0.ɵɵconditionalCreate(2, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Template, 6, 0, "div", 15);
257
+ i0.ɵɵconditionalCreate(3, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Template, 5, 1, "div", 16);
258
+ i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_4_Template, 4, 0, "div", 17);
259
259
  } if (rf & 2) {
260
260
  const ctx_r1 = i0.ɵɵnextContext(2);
261
261
  i0.ɵɵconditional(ctx_r1.canModifyShares ? 0 : -1);
@@ -268,6 +268,20 @@ function ListShareDialogComponent_Conditional_0_Conditional_3_Template(rf, ctx)
268
268
  i0.ɵɵadvance();
269
269
  i0.ɵɵconditional(!ctx_r1.canModifyShares ? 4 : -1);
270
270
  } }
271
+ function ListShareDialogComponent_Conditional_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
272
+ const _r11 = i0.ɵɵgetCurrentView();
273
+ i0.ɵɵelementStart(0, "div", 5)(1, "input", 61);
274
+ i0.ɵɵtwoWayListener("ngModelChange", function ListShareDialogComponent_Conditional_0_Conditional_4_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.notifyByEmail, $event) || (ctx_r1.notifyByEmail = $event); return i0.ɵɵresetView($event); });
275
+ i0.ɵɵelementEnd();
276
+ i0.ɵɵelementStart(2, "label", 62);
277
+ i0.ɵɵelement(3, "i", 63);
278
+ i0.ɵɵtext(4, " Send email notification to new shares ");
279
+ i0.ɵɵelementEnd()();
280
+ } if (rf & 2) {
281
+ const ctx_r1 = i0.ɵɵnextContext(2);
282
+ i0.ɵɵadvance();
283
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.notifyByEmail);
284
+ } }
271
285
  function ListShareDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
272
286
  const _r1 = i0.ɵɵgetCurrentView();
273
287
  i0.ɵɵelementStart(0, "mj-dialog", 2);
@@ -276,13 +290,24 @@ function ListShareDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
276
290
  i0.ɵɵconditionalCreate(2, ListShareDialogComponent_Conditional_0_Conditional_2_Template, 2, 0, "div", 4);
277
291
  i0.ɵɵconditionalCreate(3, ListShareDialogComponent_Conditional_0_Conditional_3_Template, 5, 5);
278
292
  i0.ɵɵelementEnd();
279
- i0.ɵɵelementStart(4, "mj-dialog-actions")(5, "button", 5);
280
- i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDone()); });
281
- i0.ɵɵtext(6, "Done");
293
+ i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_4_Template, 5, 1, "div", 5);
294
+ i0.ɵɵelementStart(5, "mj-dialog-actions")(6, "button", 6);
295
+ i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDone()); });
296
+ i0.ɵɵtext(7, "Done");
297
+ i0.ɵɵelementEnd();
298
+ i0.ɵɵelementStart(8, "button", 7);
299
+ i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.manageInvitations.emit()); });
300
+ i0.ɵɵelement(9, "i", 8);
301
+ i0.ɵɵtext(10, " Manage Invitations ");
282
302
  i0.ɵɵelementEnd();
283
- i0.ɵɵelementStart(7, "button", 6);
284
- i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
285
- i0.ɵɵtext(8, "Cancel");
303
+ i0.ɵɵelementStart(11, "button", 9);
304
+ i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
305
+ i0.ɵɵtext(12, "Cancel");
306
+ i0.ɵɵelementEnd();
307
+ i0.ɵɵelementStart(13, "a", 10);
308
+ i0.ɵɵlistener("click", function ListShareDialogComponent_Conditional_0_Template_a_click_13_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.viewAuditLog.emit(); return i0.ɵɵresetView($event.preventDefault()); });
309
+ i0.ɵɵelement(14, "i", 11);
310
+ i0.ɵɵtext(15, " View audit log ");
286
311
  i0.ɵɵelementEnd()()();
287
312
  } if (rf & 2) {
288
313
  const ctx_r1 = i0.ɵɵnextContext();
@@ -291,6 +316,8 @@ function ListShareDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
291
316
  i0.ɵɵconditional(ctx_r1.loading ? 2 : -1);
292
317
  i0.ɵɵadvance();
293
318
  i0.ɵɵconditional(!ctx_r1.loading ? 3 : -1);
319
+ i0.ɵɵadvance();
320
+ i0.ɵɵconditional(ctx_r1.canModifyShares ? 4 : -1);
294
321
  } }
295
322
  /**
296
323
  * Dialog component for managing list sharing.
@@ -330,6 +357,23 @@ export class ListShareDialogComponent extends BaseAngularComponent {
330
357
  * Emitted when dialog is cancelled
331
358
  */
332
359
  cancel = new EventEmitter();
360
+ /**
361
+ * Emitted when the user clicks "Manage Invitations" in the footer.
362
+ * Phase 2: opens the invitations management UI for this list.
363
+ */
364
+ manageInvitations = new EventEmitter();
365
+ /**
366
+ * Emitted when the user clicks "View audit log" in the footer.
367
+ * Phase 2: opens the per-list audit log view.
368
+ */
369
+ viewAuditLog = new EventEmitter();
370
+ /**
371
+ * When true (the default), newly-added shares fan out as notifications
372
+ * to the recipient (email + in-app, depending on user preferences).
373
+ * The state is captured on the dialog so consumers can read it back
374
+ * via `ListShareDialogResult.notifyByEmail`.
375
+ */
376
+ notifyByEmail = true;
333
377
  // State
334
378
  loading = false;
335
379
  saving = false;
@@ -617,7 +661,8 @@ export class ListShareDialogComponent extends BaseAngularComponent {
617
661
  action: 'apply',
618
662
  sharesAdded: this.sharesAdded,
619
663
  sharesUpdated: this.sharesUpdated,
620
- sharesRemoved: this.sharesRemoved
664
+ sharesRemoved: this.sharesRemoved,
665
+ notifyByEmail: this.notifyByEmail
621
666
  };
622
667
  this._visible = false;
623
668
  this.complete.emit(result);
@@ -636,15 +681,15 @@ export class ListShareDialogComponent extends BaseAngularComponent {
636
681
  return this.config?.isOwner === true;
637
682
  }
638
683
  static ɵfac = function ListShareDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ListShareDialogComponent)(i0.ɵɵdirectiveInject(i1.ListSharingService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
639
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListShareDialogComponent, selectors: [["mj-list-share-dialog"]], inputs: { config: "config", visible: "visible" }, outputs: { complete: "complete", cancel: "cancel" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["mjDropdownItem", ""], [3, "Visible", "Title", "Width"], [3, "Close", "Visible", "Title", "Width"], [1, "share-dialog-content"], [1, "loading-container"], ["mjButton", "", "variant", "primary", 3, "click"], ["mjButton", "", 3, "click"], ["text", "Loading shares..."], [1, "add-share-section"], [1, "section-divider"], [1, "current-shares-section"], [1, "empty-state"], [1, "readonly-notice"], [1, "section-title"], [1, "search-type-toggle"], ["mjButton", "", 3, "click", "variant"], [1, "fa-solid", "fa-user"], [1, "fa-solid", "fa-users"], [1, "search-container"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", 1, "mj-input", 3, "input", "blur", "value", "placeholder"], [1, "search-results"], [1, "selected-recipient"], [1, "search-result-item"], [1, "search-result-item", 3, "mousedown"], [1, "recipient-info"], [1, "recipient-name"], [1, "recipient-email"], [1, "recipient-chip"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-times"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown", 3, "ngModelChange", "Data", "ngModel", "ValuePrimitive"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "permission-option"], [1, "permission-label"], [1, "permission-desc"], [1, "share-list"], [1, "share-item"], [1, "share-info"], [1, "share-type-icon"], [1, "share-details"], [1, "share-name"], [1, "share-email"], [1, "share-type-label"], [1, "share-actions"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "Data", "ngModel", "ValuePrimitive", "Disabled"], [1, "permission-badge"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "disabled"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "ValueChange", "Data", "ngModel", "ValuePrimitive", "Disabled"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "click", "disabled"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-share-nodes", "empty-icon"], [1, "empty-hint"], [1, "fa-solid", "fa-info-circle"]], template: function ListShareDialogComponent_Template(rf, ctx) { if (rf & 1) {
640
- i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Template, 9, 5, "mj-dialog", 1);
684
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListShareDialogComponent, selectors: [["mj-list-share-dialog"]], inputs: { config: "config", visible: "visible" }, outputs: { complete: "complete", cancel: "cancel", manageInvitations: "manageInvitations", viewAuditLog: "viewAuditLog" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["mjDropdownItem", ""], [3, "Visible", "Title", "Width"], [3, "Close", "Visible", "Title", "Width"], [1, "share-dialog-content"], [1, "loading-container"], [1, "notify-toggle"], ["mjButton", "", "variant", "primary", 3, "click"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "fa-solid", "fa-envelope-open-text"], ["mjButton", "", 3, "click"], ["href", "#", 1, "audit-log-link", 3, "click"], [1, "fa-solid", "fa-clock-rotate-left"], ["text", "Loading shares..."], [1, "add-share-section"], [1, "section-divider"], [1, "current-shares-section"], [1, "empty-state"], [1, "readonly-notice"], [1, "section-title"], [1, "search-type-toggle"], ["mjButton", "", 3, "click", "variant"], [1, "fa-solid", "fa-user"], [1, "fa-solid", "fa-users"], [1, "search-container"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", 1, "mj-input", 3, "input", "blur", "value", "placeholder"], [1, "search-results"], [1, "selected-recipient"], [1, "search-result-item"], [1, "search-result-item", 3, "mousedown"], [1, "recipient-info"], [1, "recipient-name"], [1, "recipient-email"], [1, "recipient-chip"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-times"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown", 3, "ngModelChange", "Data", "ngModel", "ValuePrimitive"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "permission-option"], [1, "permission-label"], [1, "permission-desc"], [1, "share-list"], [1, "share-item"], [1, "share-info"], [1, "share-type-icon"], [1, "share-details"], [1, "share-name"], [1, "share-email"], [1, "share-type-label"], [1, "share-actions"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "Data", "ngModel", "ValuePrimitive", "Disabled"], [1, "permission-badge"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "disabled"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "ValueChange", "Data", "ngModel", "ValuePrimitive", "Disabled"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "click", "disabled"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-share-nodes", "empty-icon"], [1, "empty-hint"], [1, "fa-solid", "fa-info-circle"], ["id", "share-notify", "type", "checkbox", 3, "ngModelChange", "ngModel"], ["for", "share-notify"], [1, "fa-solid", "fa-envelope"]], template: function ListShareDialogComponent_Template(rf, ctx) { if (rf & 1) {
685
+ i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Template, 16, 6, "mj-dialog", 1);
641
686
  } if (rf & 2) {
642
687
  i0.ɵɵconditional(ctx.visible ? 0 : -1);
643
- } }, dependencies: [i2.NgControlStatus, i2.NgModel, i3.MJButtonDirective, i3.MJDialogComponent, i3.MJDialogActionsComponent, i3.MJDropdownComponent, i4.LoadingComponent], styles: [".share-dialog-content[_ngcontent-%COMP%] {\n padding: 0;\n min-height: 200px;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n}\n\n\n\n.section-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.section-divider[_ngcontent-%COMP%] {\n margin: 16px 0;\n border: none;\n border-top: 1px solid var(--mj-border-default);\n}\n\n\n\n.add-share-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n\n\n.search-container[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n color: var(--mj-text-muted);\n pointer-events: none;\n z-index: 1;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .mj-input[_ngcontent-%COMP%] {\n padding-left: 36px;\n}\n\n.search-results[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n z-index: 1000;\n}\n\n.search-result-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.search-result-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.search-result-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n width: 20px;\n text-align: center;\n}\n\n.recipient-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.recipient-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.recipient-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.selected-recipient[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 12px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.recipient-chip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n flex: 1;\n}\n\n.recipient-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.recipient-chip[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n flex: 1;\n font-weight: 500;\n}\n\n.permission-dropdown[_ngcontent-%COMP%] {\n width: 150px;\n}\n\n\n\n.permission-option[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.permission-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.permission-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.current-shares-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.share-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.share-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n transition: background-color 0.15s;\n}\n\n.share-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.share-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.share-type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 50%;\n}\n\n.share-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.share-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.share-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.share-type-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 6px;\n border-radius: 3px;\n display: inline-block;\n width: fit-content;\n}\n\n.share-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.permission-dropdown-small[_ngcontent-%COMP%] {\n width: 110px;\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n.empty-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n margin-top: 8px !important;\n}\n\n\n\n.readonly-notice[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-top: 16px;\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.readonly-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}"] });
688
+ } }, dependencies: [i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJButtonDirective, i3.MJDialogComponent, i3.MJDialogActionsComponent, i3.MJDropdownComponent, i4.LoadingComponent], styles: [".share-dialog-content[_ngcontent-%COMP%] {\n padding: 0;\n min-height: 200px;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n}\n\n\n\n.section-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.section-divider[_ngcontent-%COMP%] {\n margin: 16px 0;\n border: none;\n border-top: 1px solid var(--mj-border-default);\n}\n\n\n\n.add-share-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.search-type-toggle[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n\n\n.search-container[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n color: var(--mj-text-muted);\n pointer-events: none;\n z-index: 1;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .mj-input[_ngcontent-%COMP%] {\n padding-left: 36px;\n}\n\n.search-results[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n z-index: 1000;\n}\n\n.search-result-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.search-result-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.search-result-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n width: 20px;\n text-align: center;\n}\n\n.recipient-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.recipient-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.recipient-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.selected-recipient[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 12px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.recipient-chip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n flex: 1;\n}\n\n.recipient-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.recipient-chip[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n flex: 1;\n font-weight: 500;\n}\n\n.permission-dropdown[_ngcontent-%COMP%] {\n width: 150px;\n}\n\n\n\n.permission-option[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.permission-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.permission-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.current-shares-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.share-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.share-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n transition: background-color 0.15s;\n}\n\n.share-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.share-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.share-type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 50%;\n}\n\n.share-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.share-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.share-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.share-type-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 6px;\n border-radius: 3px;\n display: inline-block;\n width: fit-content;\n}\n\n.share-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.permission-dropdown-small[_ngcontent-%COMP%] {\n width: 110px;\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n.empty-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n margin-top: 8px !important;\n}\n\n\n\n.readonly-notice[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-top: 16px;\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.readonly-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n\n\n.notify-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n font-size: 12.5px;\n color: var(--mj-text-secondary);\n}\n\n.notify-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.notify-toggle[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n\n\n.audit-log-link[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 12px;\n color: var(--mj-text-link);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n}\n\n.audit-log-link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}"] });
644
689
  }
645
690
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ListShareDialogComponent, [{
646
691
  type: Component,
647
- args: [{ standalone: false, selector: 'mj-list-share-dialog', template: "@if (visible) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"dialogTitle\"\n [Width]=\"500\"\n (Close)=\"onCancel()\">\n <div class=\"share-dialog-content\">\n <!-- Loading state -->\n @if (loading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading shares...\"></mj-loading>\n </div>\n }\n @if (!loading) {\n <!-- Add new share section -->\n @if (canModifyShares) {\n <div class=\"add-share-section\">\n <h4 class=\"section-title\">Add people or roles</h4>\n <!-- Search type toggle -->\n <div class=\"search-type-toggle\">\n <button mjButton\n [variant]=\"searchType === 'User' ? 'primary' : 'outline'\"\n (click)=\"setSearchType('User')\">\n <i class=\"fa-solid fa-user\"></i> Users\n </button>\n <button mjButton\n [variant]=\"searchType === 'Role' ? 'primary' : 'outline'\"\n (click)=\"setSearchType('Role')\">\n <i class=\"fa-solid fa-users\"></i> Roles\n </button>\n </div>\n <!-- Search input -->\n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"mj-input\"\n [value]=\"searchText\"\n (input)=\"onSearchInput($any($event.target).value)\"\n [placeholder]=\"'Search for ' + (searchType === 'User' ? 'users' : 'roles') + '...'\"\n (blur)=\"showSearchResults = false\" />\n </div>\n <!-- Search results dropdown -->\n @if (showSearchResults && searchResults.length > 0) {\n <div class=\"search-results\">\n @for (recipient of searchResults; track recipient) {\n <div class=\"search-result-item\"\n (mousedown)=\"selectRecipient(recipient)\">\n <i [class]=\"getShareTypeIcon(recipient.type)\"></i>\n <div class=\"recipient-info\">\n <span class=\"recipient-name\">{{ recipient.name }}</span>\n @if (recipient.email) {\n <span class=\"recipient-email\">{{ recipient.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n <!-- Selected recipient and permission -->\n @if (selectedRecipient) {\n <div class=\"selected-recipient\">\n <div class=\"recipient-chip\">\n <i [class]=\"getShareTypeIcon(selectedRecipient.type)\"></i>\n <span>{{ selectedRecipient.name }}</span>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <mj-dropdown\n [Data]=\"permissionOptions\"\n TextField=\"label\"\n ValueField=\"value\"\n [(ngModel)]=\"selectedPermission\"\n [ValuePrimitive]=\"true\"\n class=\"permission-dropdown\">\n <ng-template #mjDropdownItem let-dataItem>\n <div class=\"permission-option\">\n <span class=\"permission-label\">{{ dataItem.label }}</span>\n <span class=\"permission-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </mj-dropdown>\n <button mjButton\n variant=\"primary\"\n [disabled]=\"saving\"\n (click)=\"addShare()\">\n <i class=\"fa-solid fa-plus\"></i> Add\n </button>\n </div>\n }\n </div>\n }\n <!-- Divider -->\n @if (currentShares.length > 0 && canModifyShares) {\n <hr class=\"section-divider\">\n }\n <!-- Current shares section -->\n @if (currentShares.length > 0) {\n <div class=\"current-shares-section\">\n <h4 class=\"section-title\">People with access</h4>\n <div class=\"share-list\">\n @for (share of currentShares; track share) {\n <div class=\"share-item\">\n <div class=\"share-info\">\n <i [class]=\"getShareTypeIcon(share.type)\" class=\"share-type-icon\"></i>\n <div class=\"share-details\">\n <span class=\"share-name\">{{ share.recipientName }}</span>\n @if (share.recipientEmail) {\n <span class=\"share-email\">{{ share.recipientEmail }}</span>\n }\n @if (share.type === 'Role') {\n <span class=\"share-type-label\">Role</span>\n }\n </div>\n </div>\n <div class=\"share-actions\">\n @if (canModifyShares) {\n <mj-dropdown\n [Data]=\"permissionOptions\"\n TextField=\"label\"\n ValueField=\"value\"\n [ngModel]=\"share.permissionLevel\"\n [ValuePrimitive]=\"true\"\n (ValueChange)=\"updateSharePermission(share, $any($event))\"\n [Disabled]=\"saving\"\n class=\"permission-dropdown-small\">\n </mj-dropdown>\n }\n @if (!canModifyShares) {\n <span class=\"permission-badge\">\n {{ getPermissionLabel(share.permissionLevel) }}\n </span>\n }\n @if (canModifyShares) {\n <button mjButton\n variant=\"danger\"\n size=\"sm\"\n title=\"Remove access\"\n [disabled]=\"saving\"\n (click)=\"removeShare(share)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Empty state -->\n @if (currentShares.length === 0 && !loading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-share-nodes empty-icon\"></i>\n <p>This list hasn't been shared with anyone yet.</p>\n @if (canModifyShares) {\n <p class=\"empty-hint\">\n Use the search above to find users or roles to share with.\n </p>\n }\n </div>\n }\n <!-- Read-only notice -->\n @if (!canModifyShares) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing.</span>\n </div>\n }\n }\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"onDone()\">Done</button>\n <button mjButton (click)=\"onCancel()\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n", styles: [".share-dialog-content {\n padding: 0;\n min-height: 200px;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n}\n\n/* Section styling */\n.section-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.section-divider {\n margin: 16px 0;\n border: none;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* Add share section */\n.add-share-section {\n margin-bottom: 16px;\n}\n\n.search-type-toggle {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.search-type-toggle button {\n flex: 1;\n}\n\n.search-type-toggle i {\n margin-right: 6px;\n}\n\n/* Search container */\n.search-container {\n position: relative;\n}\n\n.search-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-input-wrapper .search-icon {\n position: absolute;\n left: 12px;\n color: var(--mj-text-muted);\n pointer-events: none;\n z-index: 1;\n}\n\n.search-input-wrapper .mj-input {\n padding-left: 36px;\n}\n\n.search-results {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n z-index: 1000;\n}\n\n.search-result-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.search-result-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.search-result-item i {\n color: var(--mj-text-secondary);\n width: 20px;\n text-align: center;\n}\n\n.recipient-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.recipient-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.recipient-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n/* Selected recipient */\n.selected-recipient {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 12px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.recipient-chip {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n flex: 1;\n}\n\n.recipient-chip i {\n color: var(--mj-brand-primary);\n}\n\n.recipient-chip span {\n flex: 1;\n font-weight: 500;\n}\n\n.permission-dropdown {\n width: 150px;\n}\n\n/* Permission option template */\n.permission-option {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.permission-label {\n font-weight: 500;\n}\n\n.permission-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* Current shares section */\n.current-shares-section {\n margin-top: 16px;\n}\n\n.share-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.share-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n transition: background-color 0.15s;\n}\n\n.share-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.share-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.share-type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 50%;\n}\n\n.share-details {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.share-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.share-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.share-type-label {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 6px;\n border-radius: 3px;\n display: inline-block;\n width: fit-content;\n}\n\n.share-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.permission-dropdown-small {\n width: 110px;\n}\n\n.permission-badge {\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n\n/* Empty state */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n.empty-hint {\n font-size: 13px;\n margin-top: 8px !important;\n}\n\n/* Read-only notice */\n.readonly-notice {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-top: 16px;\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.readonly-notice i {\n color: var(--mj-status-warning);\n}\n\n"] }]
692
+ args: [{ standalone: false, selector: 'mj-list-share-dialog', template: "@if (visible) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"dialogTitle\"\n [Width]=\"500\"\n (Close)=\"onCancel()\">\n <div class=\"share-dialog-content\">\n <!-- Loading state -->\n @if (loading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading shares...\"></mj-loading>\n </div>\n }\n @if (!loading) {\n <!-- Add new share section -->\n @if (canModifyShares) {\n <div class=\"add-share-section\">\n <h4 class=\"section-title\">Add people or roles</h4>\n <!-- Search type toggle -->\n <div class=\"search-type-toggle\">\n <button mjButton\n [variant]=\"searchType === 'User' ? 'primary' : 'outline'\"\n (click)=\"setSearchType('User')\">\n <i class=\"fa-solid fa-user\"></i> Users\n </button>\n <button mjButton\n [variant]=\"searchType === 'Role' ? 'primary' : 'outline'\"\n (click)=\"setSearchType('Role')\">\n <i class=\"fa-solid fa-users\"></i> Roles\n </button>\n </div>\n <!-- Search input -->\n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"mj-input\"\n [value]=\"searchText\"\n (input)=\"onSearchInput($any($event.target).value)\"\n [placeholder]=\"'Search for ' + (searchType === 'User' ? 'users' : 'roles') + '...'\"\n (blur)=\"showSearchResults = false\" />\n </div>\n <!-- Search results dropdown -->\n @if (showSearchResults && searchResults.length > 0) {\n <div class=\"search-results\">\n @for (recipient of searchResults; track recipient) {\n <div class=\"search-result-item\"\n (mousedown)=\"selectRecipient(recipient)\">\n <i [class]=\"getShareTypeIcon(recipient.type)\"></i>\n <div class=\"recipient-info\">\n <span class=\"recipient-name\">{{ recipient.name }}</span>\n @if (recipient.email) {\n <span class=\"recipient-email\">{{ recipient.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n <!-- Selected recipient and permission -->\n @if (selectedRecipient) {\n <div class=\"selected-recipient\">\n <div class=\"recipient-chip\">\n <i [class]=\"getShareTypeIcon(selectedRecipient.type)\"></i>\n <span>{{ selectedRecipient.name }}</span>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <mj-dropdown\n [Data]=\"permissionOptions\"\n TextField=\"label\"\n ValueField=\"value\"\n [(ngModel)]=\"selectedPermission\"\n [ValuePrimitive]=\"true\"\n class=\"permission-dropdown\">\n <ng-template #mjDropdownItem let-dataItem>\n <div class=\"permission-option\">\n <span class=\"permission-label\">{{ dataItem.label }}</span>\n <span class=\"permission-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </mj-dropdown>\n <button mjButton\n variant=\"primary\"\n [disabled]=\"saving\"\n (click)=\"addShare()\">\n <i class=\"fa-solid fa-plus\"></i> Add\n </button>\n </div>\n }\n </div>\n }\n <!-- Divider -->\n @if (currentShares.length > 0 && canModifyShares) {\n <hr class=\"section-divider\">\n }\n <!-- Current shares section -->\n @if (currentShares.length > 0) {\n <div class=\"current-shares-section\">\n <h4 class=\"section-title\">People with access</h4>\n <div class=\"share-list\">\n @for (share of currentShares; track share) {\n <div class=\"share-item\">\n <div class=\"share-info\">\n <i [class]=\"getShareTypeIcon(share.type)\" class=\"share-type-icon\"></i>\n <div class=\"share-details\">\n <span class=\"share-name\">{{ share.recipientName }}</span>\n @if (share.recipientEmail) {\n <span class=\"share-email\">{{ share.recipientEmail }}</span>\n }\n @if (share.type === 'Role') {\n <span class=\"share-type-label\">Role</span>\n }\n </div>\n </div>\n <div class=\"share-actions\">\n @if (canModifyShares) {\n <mj-dropdown\n [Data]=\"permissionOptions\"\n TextField=\"label\"\n ValueField=\"value\"\n [ngModel]=\"share.permissionLevel\"\n [ValuePrimitive]=\"true\"\n (ValueChange)=\"updateSharePermission(share, $any($event))\"\n [Disabled]=\"saving\"\n class=\"permission-dropdown-small\">\n </mj-dropdown>\n }\n @if (!canModifyShares) {\n <span class=\"permission-badge\">\n {{ getPermissionLabel(share.permissionLevel) }}\n </span>\n }\n @if (canModifyShares) {\n <button mjButton\n variant=\"danger\"\n size=\"sm\"\n title=\"Remove access\"\n [disabled]=\"saving\"\n (click)=\"removeShare(share)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Empty state -->\n @if (currentShares.length === 0 && !loading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-share-nodes empty-icon\"></i>\n <p>This list hasn't been shared with anyone yet.</p>\n @if (canModifyShares) {\n <p class=\"empty-hint\">\n Use the search above to find users or roles to share with.\n </p>\n }\n </div>\n }\n <!-- Read-only notice -->\n @if (!canModifyShares) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing.</span>\n </div>\n }\n }\n </div>\n <!-- Notify-by-email toggle (mockup 15). Sits above the action footer so\n the user can flip it after adding shares but before clicking Done. -->\n @if (canModifyShares) {\n <div class=\"notify-toggle\">\n <input id=\"share-notify\" type=\"checkbox\" [(ngModel)]=\"notifyByEmail\" />\n <label for=\"share-notify\">\n <i class=\"fa-solid fa-envelope\"></i>\n Send email notification to new shares\n </label>\n </div>\n }\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"onDone()\">Done</button>\n <button mjButton variant=\"outline\" (click)=\"manageInvitations.emit()\">\n <i class=\"fa-solid fa-envelope-open-text\"></i>\n Manage Invitations\n </button>\n <button mjButton (click)=\"onCancel()\">Cancel</button>\n <a class=\"audit-log-link\" (click)=\"viewAuditLog.emit(); $event.preventDefault()\" href=\"#\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n View audit log\n </a>\n </mj-dialog-actions>\n </mj-dialog>\n}\n", styles: [".share-dialog-content {\n padding: 0;\n min-height: 200px;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n}\n\n/* Section styling */\n.section-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.section-divider {\n margin: 16px 0;\n border: none;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* Add share section */\n.add-share-section {\n margin-bottom: 16px;\n}\n\n.search-type-toggle {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.search-type-toggle button {\n flex: 1;\n}\n\n.search-type-toggle i {\n margin-right: 6px;\n}\n\n/* Search container */\n.search-container {\n position: relative;\n}\n\n.search-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-input-wrapper .search-icon {\n position: absolute;\n left: 12px;\n color: var(--mj-text-muted);\n pointer-events: none;\n z-index: 1;\n}\n\n.search-input-wrapper .mj-input {\n padding-left: 36px;\n}\n\n.search-results {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n z-index: 1000;\n}\n\n.search-result-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.search-result-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.search-result-item i {\n color: var(--mj-text-secondary);\n width: 20px;\n text-align: center;\n}\n\n.recipient-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.recipient-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.recipient-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n/* Selected recipient */\n.selected-recipient {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 12px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.recipient-chip {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n flex: 1;\n}\n\n.recipient-chip i {\n color: var(--mj-brand-primary);\n}\n\n.recipient-chip span {\n flex: 1;\n font-weight: 500;\n}\n\n.permission-dropdown {\n width: 150px;\n}\n\n/* Permission option template */\n.permission-option {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.permission-label {\n font-weight: 500;\n}\n\n.permission-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* Current shares section */\n.current-shares-section {\n margin-top: 16px;\n}\n\n.share-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.share-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n transition: background-color 0.15s;\n}\n\n.share-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.share-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.share-type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 50%;\n}\n\n.share-details {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.share-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.share-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.share-type-label {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 6px;\n border-radius: 3px;\n display: inline-block;\n width: fit-content;\n}\n\n.share-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.permission-dropdown-small {\n width: 110px;\n}\n\n.permission-badge {\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n\n/* Empty state */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n.empty-hint {\n font-size: 13px;\n margin-top: 8px !important;\n}\n\n/* Read-only notice */\n.readonly-notice {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-top: 16px;\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.readonly-notice i {\n color: var(--mj-status-warning);\n}\n\n/* Notify-by-email toggle (Phase 2 \u2014 mockup 15) */\n.notify-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n font-size: 12.5px;\n color: var(--mj-text-secondary);\n}\n\n.notify-toggle input {\n cursor: pointer;\n}\n\n.notify-toggle label {\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n/* Footer audit-log link \u2014 sits on the far right of the dialog footer */\n.audit-log-link {\n margin-left: auto;\n font-size: 12px;\n color: var(--mj-text-link);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n}\n\n.audit-log-link:hover {\n text-decoration: underline;\n}\n\n"] }]
648
693
  }], () => [{ type: i1.ListSharingService }, { type: i0.ChangeDetectorRef }], { config: [{
649
694
  type: Input
650
695
  }], visible: [{
@@ -653,6 +698,10 @@ export class ListShareDialogComponent extends BaseAngularComponent {
653
698
  type: Output
654
699
  }], cancel: [{
655
700
  type: Output
701
+ }], manageInvitations: [{
702
+ type: Output
703
+ }], viewAuditLog: [{
704
+ type: Output
656
705
  }] }); })();
657
706
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ListShareDialogComponent, { className: "ListShareDialogComponent", filePath: "src/lib/components/list-share-dialog/list-share-dialog.component.ts", lineNumber: 39 }); })();
658
707
  //# sourceMappingURL=list-share-dialog.component.js.map