@memberjunction/ng-list-management 5.34.1 → 5.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -85
- package/dist/lib/components/audience-source-picker/audience-source-picker.component.d.ts +74 -0
- package/dist/lib/components/audience-source-picker/audience-source-picker.component.d.ts.map +1 -0
- package/dist/lib/components/audience-source-picker/audience-source-picker.component.js +396 -0
- package/dist/lib/components/audience-source-picker/audience-source-picker.component.js.map +1 -0
- package/dist/lib/components/audience-source-summary/audience-source-summary.component.d.ts +34 -0
- package/dist/lib/components/audience-source-summary/audience-source-summary.component.d.ts.map +1 -0
- package/dist/lib/components/audience-source-summary/audience-source-summary.component.js +136 -0
- package/dist/lib/components/audience-source-summary/audience-source-summary.component.js.map +1 -0
- package/dist/lib/components/list-audit-log/list-audit-log.component.d.ts +55 -0
- package/dist/lib/components/list-audit-log/list-audit-log.component.d.ts.map +1 -0
- package/dist/lib/components/list-audit-log/list-audit-log.component.js +280 -0
- package/dist/lib/components/list-audit-log/list-audit-log.component.js.map +1 -0
- package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.d.ts +64 -0
- package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.d.ts.map +1 -0
- package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.js +323 -0
- package/dist/lib/components/list-delta-confirm/list-delta-confirm.component.js.map +1 -0
- package/dist/lib/components/list-invitations/list-invitations.component.d.ts +60 -0
- package/dist/lib/components/list-invitations/list-invitations.component.d.ts.map +1 -0
- package/dist/lib/components/list-invitations/list-invitations.component.js +367 -0
- package/dist/lib/components/list-invitations/list-invitations.component.js.map +1 -0
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.js +0 -4
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.js.map +1 -1
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts +18 -1
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.js +115 -66
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.js.map +1 -1
- package/dist/lib/components/list-stats/list-stats.component.d.ts +52 -0
- package/dist/lib/components/list-stats/list-stats.component.d.ts.map +1 -0
- package/dist/lib/components/list-stats/list-stats.component.js +283 -0
- package/dist/lib/components/list-stats/list-stats.component.js.map +1 -0
- package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.d.ts +68 -0
- package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.d.ts.map +1 -0
- package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js +316 -0
- package/dist/lib/components/save-view-as-list-dialog/save-view-as-list-dialog.component.js.map +1 -0
- package/dist/lib/components/shared-with-me/shared-with-me.component.d.ts +47 -0
- package/dist/lib/components/shared-with-me/shared-with-me.component.d.ts.map +1 -0
- package/dist/lib/components/shared-with-me/shared-with-me.component.js +231 -0
- package/dist/lib/components/shared-with-me/shared-with-me.component.js.map +1 -0
- package/dist/lib/components/tag-chips/tag-chips.component.d.ts +85 -0
- package/dist/lib/components/tag-chips/tag-chips.component.d.ts.map +1 -0
- package/dist/lib/components/tag-chips/tag-chips.component.js +392 -0
- package/dist/lib/components/tag-chips/tag-chips.component.js.map +1 -0
- package/dist/lib/models/list-sharing.models.d.ts +5 -0
- package/dist/lib/models/list-sharing.models.d.ts.map +1 -1
- package/dist/lib/models/list-sharing.models.js.map +1 -1
- package/dist/lib/module.d.ts +17 -8
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/module.js +51 -6
- package/dist/lib/module.js.map +1 -1
- package/dist/lib/services/list-management.service.d.ts.map +1 -1
- package/dist/lib/services/list-management.service.js +0 -9
- package/dist/lib/services/list-management.service.js.map +1 -1
- package/dist/lib/services/list-sharing.service.d.ts +8 -3
- package/dist/lib/services/list-sharing.service.d.ts.map +1 -1
- package/dist/lib/services/list-sharing.service.js +33 -15
- package/dist/lib/services/list-sharing.service.js.map +1 -1
- package/dist/public-api.d.ts +9 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +9 -0
- package/dist/public-api.js.map +1 -1
- 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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
46
|
-
i0.ɵɵrepeaterCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_0_Conditional_14_For_2_Template, 6, 4, "div",
|
|
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",
|
|
54
|
+
i0.ɵɵelementStart(0, "div", 40)(1, "span", 41);
|
|
55
55
|
i0.ɵɵtext(2);
|
|
56
56
|
i0.ɵɵelementEnd();
|
|
57
|
-
i0.ɵɵelementStart(3, "span",
|
|
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",
|
|
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",
|
|
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",
|
|
76
|
+
i0.ɵɵelement(6, "i", 36);
|
|
77
77
|
i0.ɵɵelementEnd()();
|
|
78
|
-
i0.ɵɵelementStart(7, "mj-dropdown",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
107
|
+
i0.ɵɵelement(5, "i", 21);
|
|
108
108
|
i0.ɵɵtext(6, " Users ");
|
|
109
109
|
i0.ɵɵelementEnd();
|
|
110
|
-
i0.ɵɵelementStart(7, "button",
|
|
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",
|
|
112
|
+
i0.ɵɵelement(8, "i", 22);
|
|
113
113
|
i0.ɵɵtext(9, " Roles ");
|
|
114
114
|
i0.ɵɵelementEnd()();
|
|
115
|
-
i0.ɵɵelementStart(10, "div",
|
|
116
|
-
i0.ɵɵelement(12, "i",
|
|
117
|
-
i0.ɵɵelementStart(13, "input",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
186
|
-
i0.ɵɵelement(2, "i",
|
|
187
|
-
i0.ɵɵelementStart(3, "div",
|
|
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",
|
|
191
|
-
i0.ɵɵconditionalCreate(7, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_7_Template, 2, 0, "span",
|
|
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",
|
|
194
|
-
i0.ɵɵconditionalCreate(9, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_9_Template, 1, 4, "mj-dropdown",
|
|
195
|
-
i0.ɵɵconditionalCreate(10, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_10_Template, 2, 1, "span",
|
|
196
|
-
i0.ɵɵconditionalCreate(11, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Conditional_11_Template, 2, 1, "button",
|
|
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",
|
|
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",
|
|
221
|
-
i0.ɵɵrepeaterCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_For_5_Template, 12, 8, "div",
|
|
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",
|
|
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",
|
|
235
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
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",
|
|
248
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
255
|
-
i0.ɵɵconditionalCreate(1, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_1_Template, 1, 0, "hr",
|
|
256
|
-
i0.ɵɵconditionalCreate(2, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_2_Template, 6, 0, "div",
|
|
257
|
-
i0.ɵɵconditionalCreate(3, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_3_Template, 5, 1, "div",
|
|
258
|
-
i0.ɵɵconditionalCreate(4, ListShareDialogComponent_Conditional_0_Conditional_3_Conditional_4_Template, 4, 0, "div",
|
|
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.ɵɵ
|
|
280
|
-
i0.ɵɵ
|
|
281
|
-
i0.ɵɵ
|
|
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(
|
|
284
|
-
i0.ɵɵlistener("click", function
|
|
285
|
-
i0.ɵɵtext(
|
|
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,
|
|
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
|