@memberjunction/ng-conversations 5.48.0 → 5.50.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 (56) hide show
  1. package/README.md +99 -1
  2. package/dist/lib/components/collection/collections-full-view.component.d.ts +10 -0
  3. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  4. package/dist/lib/components/collection/collections-full-view.component.js +74 -14
  5. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  6. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +76 -5
  7. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  8. package/dist/lib/components/conversation/conversation-chat-area.component.js +314 -161
  9. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  10. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +7 -1
  11. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  12. package/dist/lib/components/conversation/conversation-empty-state.component.js +45 -23
  13. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  14. package/dist/lib/components/conversation/conversation-list.component.d.ts +16 -1
  15. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  16. package/dist/lib/components/conversation/conversation-list.component.js +439 -351
  17. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  18. package/dist/lib/components/export/export-modal.component.d.ts +25 -3
  19. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
  20. package/dist/lib/components/export/export-modal.component.js +172 -34
  21. package/dist/lib/components/export/export-modal.component.js.map +1 -1
  22. package/dist/lib/components/message/message-input.component.d.ts +6 -1
  23. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  24. package/dist/lib/components/message/message-input.component.js +21 -3
  25. package/dist/lib/components/message/message-input.component.js.map +1 -1
  26. package/dist/lib/components/message/message-item.component.d.ts +58 -1
  27. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  28. package/dist/lib/components/message/message-item.component.js +390 -224
  29. package/dist/lib/components/message/message-item.component.js.map +1 -1
  30. package/dist/lib/components/message/message-list.component.d.ts +36 -1
  31. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  32. package/dist/lib/components/message/message-list.component.js +102 -4
  33. package/dist/lib/components/message/message-list.component.js.map +1 -1
  34. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js +2 -2
  35. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js.map +1 -1
  36. package/dist/lib/components/realtime/media/realtime-media-surface.component.js +2 -2
  37. package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -1
  38. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +14 -1
  39. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
  40. package/dist/lib/components/sidebar/conversation-sidebar.component.js +38 -5
  41. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
  42. package/dist/lib/components/slots/slot-interfaces.d.ts +23 -1
  43. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
  44. package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
  45. package/dist/lib/directives/chat-slot.directive.d.ts +10 -2
  46. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
  47. package/dist/lib/directives/chat-slot.directive.js.map +1 -1
  48. package/dist/lib/models/lazy-artifact-info.d.ts +8 -7
  49. package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
  50. package/dist/lib/models/lazy-artifact-info.js +12 -11
  51. package/dist/lib/models/lazy-artifact-info.js.map +1 -1
  52. package/dist/lib/services/export.service.d.ts +149 -0
  53. package/dist/lib/services/export.service.d.ts.map +1 -1
  54. package/dist/lib/services/export.service.js +270 -36
  55. package/dist/lib/services/export.service.js.map +1 -1
  56. package/package.json +29 -29
@@ -38,11 +38,30 @@ function ExportModalComponent_Conditional_0_For_10_Template(rf, ctx) { if (rf &
38
38
  } }
39
39
  function ExportModalComponent_Conditional_0_Conditional_28_Template(rf, ctx) { if (rf & 1) {
40
40
  const _r5 = i0.ɵɵgetCurrentView();
41
+ i0.ɵɵelementStart(0, "label", 12)(1, "input", 13);
42
+ i0.ɵɵtwoWayListener("ngModelChange", function ExportModalComponent_Conditional_0_Conditional_28_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.exportOptions.includeTheme, $event) || (ctx_r1.exportOptions.includeTheme = $event); return i0.ɵɵresetView($event); });
43
+ i0.ɵɵelementEnd();
44
+ i0.ɵɵelementStart(2, "span");
45
+ i0.ɵɵtext(3, "Include branding");
46
+ i0.ɵɵelementEnd();
47
+ i0.ɵɵelementStart(4, "small");
48
+ i0.ɵɵtext(5);
49
+ i0.ɵɵelementEnd()();
50
+ } if (rf & 2) {
51
+ const ctx_r1 = i0.ɵɵnextContext(2);
52
+ i0.ɵɵadvance();
53
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.exportOptions.includeTheme);
54
+ i0.ɵɵproperty("disabled", ctx_r1.isExporting || ctx_r1.selectedFormat === "html" && !ctx_r1.exportOptions.includeCSS);
55
+ i0.ɵɵadvance(4);
56
+ i0.ɵɵtextInterpolate(ctx_r1.brandingHint);
57
+ } }
58
+ function ExportModalComponent_Conditional_0_Conditional_29_Template(rf, ctx) { if (rf & 1) {
59
+ const _r6 = i0.ɵɵgetCurrentView();
41
60
  i0.ɵɵelementStart(0, "div", 14)(1, "h4", 26);
42
61
  i0.ɵɵtext(2, "JSON Options");
43
62
  i0.ɵɵelementEnd();
44
63
  i0.ɵɵelementStart(3, "label", 12)(4, "input", 13);
45
- i0.ɵɵtwoWayListener("ngModelChange", function ExportModalComponent_Conditional_0_Conditional_28_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.exportOptions.prettyPrint, $event) || (ctx_r1.exportOptions.prettyPrint = $event); return i0.ɵɵresetView($event); });
64
+ i0.ɵɵtwoWayListener("ngModelChange", function ExportModalComponent_Conditional_0_Conditional_29_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.exportOptions.prettyPrint, $event) || (ctx_r1.exportOptions.prettyPrint = $event); return i0.ɵɵresetView($event); });
46
65
  i0.ɵɵelementEnd();
47
66
  i0.ɵɵelementStart(5, "span");
48
67
  i0.ɵɵtext(6, "Pretty print");
@@ -56,29 +75,55 @@ function ExportModalComponent_Conditional_0_Conditional_28_Template(rf, ctx) { i
56
75
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.exportOptions.prettyPrint);
57
76
  i0.ɵɵproperty("disabled", ctx_r1.isExporting);
58
77
  } }
59
- function ExportModalComponent_Conditional_0_Conditional_29_Template(rf, ctx) { if (rf & 1) {
60
- const _r6 = i0.ɵɵgetCurrentView();
78
+ function ExportModalComponent_Conditional_0_Conditional_30_Conditional_9_Template(rf, ctx) { if (rf & 1) {
79
+ const _r8 = i0.ɵɵgetCurrentView();
80
+ i0.ɵɵelementStart(0, "label", 12)(1, "span");
81
+ i0.ɵɵtext(2, "Theme");
82
+ i0.ɵɵelementEnd();
83
+ i0.ɵɵelementStart(3, "select", 27);
84
+ i0.ɵɵtwoWayListener("ngModelChange", function ExportModalComponent_Conditional_0_Conditional_30_Conditional_9_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.exportOptions.themeMode, $event) || (ctx_r1.exportOptions.themeMode = $event); return i0.ɵɵresetView($event); });
85
+ i0.ɵɵelementStart(4, "option", 28);
86
+ i0.ɵɵtext(5, "Light");
87
+ i0.ɵɵelementEnd();
88
+ i0.ɵɵelementStart(6, "option", 29);
89
+ i0.ɵɵtext(7, "Dark");
90
+ i0.ɵɵelementEnd()();
91
+ i0.ɵɵelementStart(8, "small");
92
+ i0.ɵɵtext(9, "Palette baked into the exported file");
93
+ i0.ɵɵelementEnd()();
94
+ } if (rf & 2) {
95
+ const ctx_r1 = i0.ɵɵnextContext(3);
96
+ i0.ɵɵadvance(3);
97
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.exportOptions.themeMode);
98
+ i0.ɵɵproperty("disabled", ctx_r1.isExporting);
99
+ } }
100
+ function ExportModalComponent_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
101
+ const _r7 = i0.ɵɵgetCurrentView();
61
102
  i0.ɵɵelementStart(0, "div", 14)(1, "h4", 26);
62
103
  i0.ɵɵtext(2, "HTML Options");
63
104
  i0.ɵɵelementEnd();
64
105
  i0.ɵɵelementStart(3, "label", 12)(4, "input", 13);
65
- i0.ɵɵtwoWayListener("ngModelChange", function ExportModalComponent_Conditional_0_Conditional_29_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.exportOptions.includeCSS, $event) || (ctx_r1.exportOptions.includeCSS = $event); return i0.ɵɵresetView($event); });
106
+ i0.ɵɵtwoWayListener("ngModelChange", function ExportModalComponent_Conditional_0_Conditional_30_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.exportOptions.includeCSS, $event) || (ctx_r1.exportOptions.includeCSS = $event); return i0.ɵɵresetView($event); });
66
107
  i0.ɵɵelementEnd();
67
108
  i0.ɵɵelementStart(5, "span");
68
109
  i0.ɵɵtext(6, "Include CSS styling");
69
110
  i0.ɵɵelementEnd();
70
111
  i0.ɵɵelementStart(7, "small");
71
112
  i0.ɵɵtext(8, "Embed styles for better presentation");
72
- i0.ɵɵelementEnd()()();
113
+ i0.ɵɵelementEnd()();
114
+ i0.ɵɵconditionalCreate(9, ExportModalComponent_Conditional_0_Conditional_30_Conditional_9_Template, 10, 2, "label", 12);
115
+ i0.ɵɵelementEnd();
73
116
  } if (rf & 2) {
74
117
  const ctx_r1 = i0.ɵɵnextContext(2);
75
118
  i0.ɵɵadvance(4);
76
119
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.exportOptions.includeCSS);
77
120
  i0.ɵɵproperty("disabled", ctx_r1.isExporting);
121
+ i0.ɵɵadvance(5);
122
+ i0.ɵɵconditional(ctx_r1.exportOptions.includeTheme && ctx_r1.exportOptions.includeCSS ? 9 : -1);
78
123
  } }
79
- function ExportModalComponent_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
124
+ function ExportModalComponent_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
80
125
  i0.ɵɵelementStart(0, "div", 15);
81
- i0.ɵɵelement(1, "i", 27);
126
+ i0.ɵɵelement(1, "i", 30);
82
127
  i0.ɵɵtext(2);
83
128
  i0.ɵɵelementEnd();
84
129
  } if (rf & 2) {
@@ -86,9 +131,9 @@ function ExportModalComponent_Conditional_0_Conditional_30_Template(rf, ctx) { i
86
131
  i0.ɵɵadvance(2);
87
132
  i0.ɵɵtextInterpolate1(" ", ctx_r1.errorMessage, " ");
88
133
  } }
89
- function ExportModalComponent_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
134
+ function ExportModalComponent_Conditional_0_Conditional_32_Template(rf, ctx) { if (rf & 1) {
90
135
  i0.ɵɵelementStart(0, "div", 16);
91
- i0.ɵɵelement(1, "mj-loading", 28);
136
+ i0.ɵɵelement(1, "mj-loading", 31);
92
137
  i0.ɵɵelementEnd();
93
138
  } }
94
139
  function ExportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
@@ -126,22 +171,24 @@ function ExportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
126
171
  i0.ɵɵelementEnd();
127
172
  i0.ɵɵelementStart(26, "small");
128
173
  i0.ɵɵtext(27, "Add creation date, IDs, and other metadata");
129
- i0.ɵɵelementEnd()()();
130
- i0.ɵɵconditionalCreate(28, ExportModalComponent_Conditional_0_Conditional_28_Template, 9, 2, "div", 14);
174
+ i0.ɵɵelementEnd()();
175
+ i0.ɵɵconditionalCreate(28, ExportModalComponent_Conditional_0_Conditional_28_Template, 6, 3, "label", 12);
176
+ i0.ɵɵelementEnd();
131
177
  i0.ɵɵconditionalCreate(29, ExportModalComponent_Conditional_0_Conditional_29_Template, 9, 2, "div", 14);
178
+ i0.ɵɵconditionalCreate(30, ExportModalComponent_Conditional_0_Conditional_30_Template, 10, 3, "div", 14);
132
179
  i0.ɵɵelementEnd();
133
- i0.ɵɵconditionalCreate(30, ExportModalComponent_Conditional_0_Conditional_30_Template, 3, 1, "div", 15);
134
- i0.ɵɵconditionalCreate(31, ExportModalComponent_Conditional_0_Conditional_31_Template, 2, 0, "div", 16);
180
+ i0.ɵɵconditionalCreate(31, ExportModalComponent_Conditional_0_Conditional_31_Template, 3, 1, "div", 15);
181
+ i0.ɵɵconditionalCreate(32, ExportModalComponent_Conditional_0_Conditional_32_Template, 2, 0, "div", 16);
135
182
  i0.ɵɵelementEnd();
136
- i0.ɵɵelementStart(32, "mj-dialog-actions")(33, "button", 17);
137
- i0.ɵɵlistener("click", function ExportModalComponent_Conditional_0_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
138
- i0.ɵɵelement(34, "i", 18);
139
- i0.ɵɵtext(35, " Cancel ");
183
+ i0.ɵɵelementStart(33, "mj-dialog-actions")(34, "button", 17);
184
+ i0.ɵɵlistener("click", function ExportModalComponent_Conditional_0_Template_button_click_34_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
185
+ i0.ɵɵelement(35, "i", 18);
186
+ i0.ɵɵtext(36, " Cancel ");
140
187
  i0.ɵɵelementEnd();
141
- i0.ɵɵelementStart(36, "button", 19);
142
- i0.ɵɵlistener("click", function ExportModalComponent_Conditional_0_Template_button_click_36_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onExport()); });
143
- i0.ɵɵelement(37, "i", 20);
144
- i0.ɵɵtext(38, " Export ");
188
+ i0.ɵɵelementStart(37, "button", 19);
189
+ i0.ɵɵlistener("click", function ExportModalComponent_Conditional_0_Template_button_click_37_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onExport()); });
190
+ i0.ɵɵelement(38, "i", 20);
191
+ i0.ɵɵtext(39, " Export ");
145
192
  i0.ɵɵelementEnd()()();
146
193
  } if (rf & 2) {
147
194
  const ctx_r1 = i0.ɵɵnextContext();
@@ -155,13 +202,15 @@ function ExportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
155
202
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.exportOptions.includeMetadata);
156
203
  i0.ɵɵproperty("disabled", ctx_r1.isExporting);
157
204
  i0.ɵɵadvance(5);
158
- i0.ɵɵconditional(ctx_r1.selectedFormat === "json" ? 28 : -1);
205
+ i0.ɵɵconditional(ctx_r1.selectedFormat === "html" || ctx_r1.branding ? 28 : -1);
206
+ i0.ɵɵadvance();
207
+ i0.ɵɵconditional(ctx_r1.selectedFormat === "json" ? 29 : -1);
159
208
  i0.ɵɵadvance();
160
- i0.ɵɵconditional(ctx_r1.selectedFormat === "html" ? 29 : -1);
209
+ i0.ɵɵconditional(ctx_r1.selectedFormat === "html" ? 30 : -1);
161
210
  i0.ɵɵadvance();
162
- i0.ɵɵconditional(ctx_r1.errorMessage ? 30 : -1);
211
+ i0.ɵɵconditional(ctx_r1.errorMessage ? 31 : -1);
163
212
  i0.ɵɵadvance();
164
- i0.ɵɵconditional(ctx_r1.isExporting ? 31 : -1);
213
+ i0.ɵɵconditional(ctx_r1.isExporting ? 32 : -1);
165
214
  i0.ɵɵadvance(2);
166
215
  i0.ɵɵproperty("disabled", ctx_r1.isExporting);
167
216
  i0.ɵɵadvance(3);
@@ -171,9 +220,31 @@ export class ExportModalComponent {
171
220
  exportService;
172
221
  dialogService;
173
222
  toastService;
174
- isVisible = false;
223
+ _isVisible = false;
224
+ set isVisible(value) {
225
+ const opening = value && !this._isVisible;
226
+ this._isVisible = value;
227
+ if (opening) {
228
+ // Fresh open: "Include branding" defaults ON only when the host explicitly
229
+ // configured export branding — plain MJ Explorer keeps today's unthemed file.
230
+ // NOTE this reads `branding`, so a host binding both in one change-detection
231
+ // pass must bind [branding] FIRST (Angular sets inputs in template order).
232
+ // chat-area's template does; a host mounting with isVisible already true and
233
+ // branding bound after would get the checkbox defaulted off.
234
+ this.exportOptions.includeTheme = !!this.branding;
235
+ }
236
+ }
237
+ get isVisible() {
238
+ return this._isVisible;
239
+ }
175
240
  conversation;
176
241
  currentUser;
242
+ /**
243
+ * Host-supplied export branding (theme tokens / logo / title). When set, the
244
+ * HTML format's "Include branding" checkbox defaults on and the branding is
245
+ * passed to {@link ExportService} on export. See `ExportBranding`.
246
+ */
247
+ branding = null;
177
248
  cancelled = new EventEmitter();
178
249
  exported = new EventEmitter();
179
250
  selectedFormat = 'markdown';
@@ -183,8 +254,41 @@ export class ExportModalComponent {
183
254
  includeMessages: true,
184
255
  includeMetadata: true,
185
256
  prettyPrint: true,
186
- includeCSS: true
257
+ includeCSS: true,
258
+ includeTheme: false,
259
+ themeMode: 'light'
187
260
  };
261
+ /** Format-aware hint under the "Include branding" checkbox. */
262
+ get brandingHint() {
263
+ if (this.selectedFormat === 'html') {
264
+ if (!this.exportOptions.includeCSS) {
265
+ return 'Requires "Include CSS styling"';
266
+ }
267
+ return `Embed the app's theme colors${this.branding?.logoUrl ? ', logo,' : ''} and attribution line`;
268
+ }
269
+ const logo = this.branding?.logoUrl && this.selectedFormat === 'markdown' ? ', logo,' : '';
270
+ return `Add the title${logo} and attribution line`;
271
+ }
272
+ /**
273
+ * The options actually handed to the service. `includeTheme` is the user's INTENT;
274
+ * this resolves it against the selected format:
275
+ *
276
+ * - HTML with the stylesheet off cannot carry branding (a full-size unstyled logo and
277
+ * an unstyled footer would leak), so it drops.
278
+ * - `includeCSS` is an HTML-only concern and must NOT decide anything for
279
+ * markdown / text / JSON — resolving here rather than mutating `includeTheme` is
280
+ * what keeps an HTML-format toggle from silently following the user into another
281
+ * format.
282
+ */
283
+ resolveExportOptions() {
284
+ const unstyledHtml = this.selectedFormat === 'html' && !this.exportOptions.includeCSS;
285
+ const brandingOn = !!this.exportOptions.includeTheme && !unstyledHtml;
286
+ return {
287
+ ...this.exportOptions,
288
+ includeTheme: brandingOn,
289
+ branding: brandingOn ? (this.branding ?? undefined) : undefined
290
+ };
291
+ }
188
292
  get exportTitle() {
189
293
  return `Export: ${this.conversation?.Name || 'Conversation'}`;
190
294
  }
@@ -240,7 +344,7 @@ export class ExportModalComponent {
240
344
  this.isExporting = true;
241
345
  this.errorMessage = '';
242
346
  try {
243
- await this.exportService.exportConversation(this.conversation.ID, this.selectedFormat, this.currentUser, this.exportOptions);
347
+ await this.exportService.exportConversation(this.conversation.ID, this.selectedFormat, this.currentUser, this.resolveExportOptions());
244
348
  this.toastService.success('Conversation exported successfully');
245
349
  this.exported.emit();
246
350
  this.resetForm();
@@ -265,16 +369,18 @@ export class ExportModalComponent {
265
369
  includeMessages: true,
266
370
  includeMetadata: true,
267
371
  prettyPrint: true,
268
- includeCSS: true
372
+ includeCSS: true,
373
+ includeTheme: !!this.branding,
374
+ themeMode: 'light'
269
375
  };
270
376
  this.isVisible = false;
271
377
  }
272
378
  static ɵfac = function ExportModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ExportModalComponent)(i0.ɵɵdirectiveInject(i1.ExportService), i0.ɵɵdirectiveInject(i2.DialogService), i0.ɵɵdirectiveInject(i3.ToastService)); };
273
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ExportModalComponent, selectors: [["mj-export-modal"]], inputs: { isVisible: "isVisible", conversation: "conversation", currentUser: "currentUser" }, outputs: { cancelled: "cancelled", exported: "exported" }, standalone: false, decls: 1, vars: 1, consts: [[3, "Title", "Width", "Height", "Visible"], [3, "Close", "Title", "Width", "Height", "Visible"], [1, "export-modal-content"], [1, "format-section"], [1, "section-title"], [1, "fa-solid", "fa-file-export"], [1, "section-description"], [1, "format-options"], [1, "format-option", 3, "selected"], [1, "options-section"], [1, "fa-solid", "fa-sliders"], [1, "option-checkboxes"], [1, "checkbox-label"], ["type", "checkbox", 3, "ngModelChange", "ngModel", "disabled"], [1, "format-specific-options"], [1, "error-message"], [1, "loading-indicator"], ["mjButton", "", 3, "click", "disabled"], [1, "fa-solid", "fa-times"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-download"], [1, "format-option", 3, "click"], [1, "format-details"], [1, "format-name"], [1, "format-description"], [1, "fa-solid", "fa-check-circle", "check-icon"], [1, "subsection-title"], [1, "fa-solid", "fa-exclamation-triangle"], ["text", "Exporting conversation...", "size", "small"]], template: function ExportModalComponent_Template(rf, ctx) { if (rf & 1) {
274
- i0.ɵɵconditionalCreate(0, ExportModalComponent_Conditional_0_Template, 39, 14, "mj-dialog", 0);
379
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ExportModalComponent, selectors: [["mj-export-modal"]], inputs: { isVisible: "isVisible", conversation: "conversation", currentUser: "currentUser", branding: "branding" }, outputs: { cancelled: "cancelled", exported: "exported" }, standalone: false, decls: 1, vars: 1, consts: [[3, "Title", "Width", "Height", "Visible"], [3, "Close", "Title", "Width", "Height", "Visible"], [1, "export-modal-content"], [1, "format-section"], [1, "section-title"], [1, "fa-solid", "fa-file-export"], [1, "section-description"], [1, "format-options"], [1, "format-option", 3, "selected"], [1, "options-section"], [1, "fa-solid", "fa-sliders"], [1, "option-checkboxes"], [1, "checkbox-label"], ["type", "checkbox", 3, "ngModelChange", "ngModel", "disabled"], [1, "format-specific-options"], [1, "error-message"], [1, "loading-indicator"], ["mjButton", "", 3, "click", "disabled"], [1, "fa-solid", "fa-times"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-download"], [1, "format-option", 3, "click"], [1, "format-details"], [1, "format-name"], [1, "format-description"], [1, "fa-solid", "fa-check-circle", "check-icon"], [1, "subsection-title"], [1, "mj-input", "theme-mode-select", 3, "ngModelChange", "ngModel", "disabled"], ["value", "light"], ["value", "dark"], [1, "fa-solid", "fa-exclamation-triangle"], ["text", "Exporting conversation...", "size", "small"]], template: function ExportModalComponent_Template(rf, ctx) { if (rf & 1) {
380
+ i0.ɵɵconditionalCreate(0, ExportModalComponent_Conditional_0_Template, 40, 15, "mj-dialog", 0);
275
381
  } if (rf & 2) {
276
382
  i0.ɵɵconditional(ctx.isVisible ? 0 : -1);
277
- } }, dependencies: [i4.CheckboxControlValueAccessor, i4.NgControlStatus, i4.NgModel, i5.MJButtonDirective, i5.MJDialogComponent, i5.MJDialogActionsComponent, i6.LoadingComponent], styles: [".export-modal-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: calc(600px - 120px);\n overflow-y: auto;\n }\n\n section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n }\n\n .section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .section-description[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .format-options[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .format-option[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 2px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--mj-bg-surface-card);\n }\n\n .format-option[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n }\n\n .format-option.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-card));\n }\n\n .format-option[_ngcontent-%COMP%] > i.fa-solid[_ngcontent-%COMP%], \n .format-option[_ngcontent-%COMP%] > i.fas[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-text-muted);\n width: 32px;\n text-align: center;\n }\n\n .format-option.selected[_ngcontent-%COMP%] > i.fa-solid[_ngcontent-%COMP%], \n .format-option.selected[_ngcontent-%COMP%] > i.fas[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .format-details[_ngcontent-%COMP%] {\n flex: 1;\n }\n\n .format-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 14px;\n margin-bottom: 2px;\n }\n\n .format-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .check-icon[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-status-success);\n }\n\n .option-checkboxes[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .checkbox-label[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .checkbox-label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .checkbox-label[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n }\n\n .checkbox-label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%]:disabled {\n cursor: not-allowed;\n }\n\n .checkbox-label[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n margin-left: 28px;\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .format-specific-options[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .subsection-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .error-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n margin-top: 15px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 4px;\n }\n\n .loading-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n color: var(--mj-text-muted);\n }\n\n mj-dialog-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 15px 20px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n mj-dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n }"] });
383
+ } }, dependencies: [i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i4.CheckboxControlValueAccessor, i4.SelectControlValueAccessor, i4.NgControlStatus, i4.NgModel, i5.MJButtonDirective, i5.MJDialogComponent, i5.MJDialogActionsComponent, i6.LoadingComponent], styles: [".export-modal-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: calc(600px - 120px);\n overflow-y: auto;\n }\n\n section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n }\n\n .section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .section-description[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .format-options[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .format-option[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 2px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--mj-bg-surface-card);\n }\n\n .format-option[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n }\n\n .format-option.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-card));\n }\n\n .format-option[_ngcontent-%COMP%] > i.fa-solid[_ngcontent-%COMP%], \n .format-option[_ngcontent-%COMP%] > i.fas[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-text-muted);\n width: 32px;\n text-align: center;\n }\n\n .format-option.selected[_ngcontent-%COMP%] > i.fa-solid[_ngcontent-%COMP%], \n .format-option.selected[_ngcontent-%COMP%] > i.fas[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .format-details[_ngcontent-%COMP%] {\n flex: 1;\n }\n\n .format-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 14px;\n margin-bottom: 2px;\n }\n\n .format-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .check-icon[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-status-success);\n }\n\n .option-checkboxes[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .checkbox-label[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .checkbox-label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .checkbox-label[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n }\n\n .checkbox-label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%]:disabled {\n cursor: not-allowed;\n }\n\n .theme-mode-select[_ngcontent-%COMP%] {\n margin-left: 8px;\n padding: 2px 6px;\n font-size: 13px;\n }\n\n .checkbox-label[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n margin-left: 28px;\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .format-specific-options[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .subsection-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .error-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n margin-top: 15px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 4px;\n }\n\n .loading-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n color: var(--mj-text-muted);\n }\n\n mj-dialog-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 15px 20px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n mj-dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n }"] });
278
384
  }
279
385
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExportModalComponent, [{
280
386
  type: Component,
@@ -335,6 +441,20 @@ export class ExportModalComponent {
335
441
  <span>Include metadata</span>
336
442
  <small>Add creation date, IDs, and other metadata</small>
337
443
  </label>
444
+ <!-- Branding applies to EVERY format (HTML gets theme colors + logo +
445
+ footer; markdown/text/JSON get the title and attribution), so it
446
+ belongs here rather than under HTML Options. Shown for HTML even with
447
+ no host branding, because it still snapshots the app's theme. -->
448
+ @if (selectedFormat === 'html' || branding) {
449
+ <label class="checkbox-label">
450
+ <input
451
+ type="checkbox"
452
+ [(ngModel)]="exportOptions.includeTheme"
453
+ [disabled]="isExporting || (selectedFormat === 'html' && !exportOptions.includeCSS)">
454
+ <span>Include branding</span>
455
+ <small>{{ brandingHint }}</small>
456
+ </label>
457
+ }
338
458
  </div>
339
459
  @if (selectedFormat === 'json') {
340
460
  <div class="format-specific-options">
@@ -360,6 +480,22 @@ export class ExportModalComponent {
360
480
  <span>Include CSS styling</span>
361
481
  <small>Embed styles for better presentation</small>
362
482
  </label>
483
+ <!-- Which palette gets baked in — NOT the mode the app happens to be in.
484
+ Exporting from a dark session would otherwise put dark text on the
485
+ export's white page. -->
486
+ @if (exportOptions.includeTheme && exportOptions.includeCSS) {
487
+ <label class="checkbox-label">
488
+ <span>Theme</span>
489
+ <select
490
+ class="mj-input theme-mode-select"
491
+ [(ngModel)]="exportOptions.themeMode"
492
+ [disabled]="isExporting">
493
+ <option value="light">Light</option>
494
+ <option value="dark">Dark</option>
495
+ </select>
496
+ <small>Palette baked into the exported file</small>
497
+ </label>
498
+ }
363
499
  </div>
364
500
  }
365
501
  </section>
@@ -387,17 +523,19 @@ export class ExportModalComponent {
387
523
  </mj-dialog-actions>
388
524
  </mj-dialog>
389
525
  }
390
- `, styles: ["\n .export-modal-content {\n padding: 20px;\n max-height: calc(600px - 120px);\n overflow-y: auto;\n }\n\n section {\n margin-bottom: 24px;\n }\n\n .section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-title i {\n color: var(--mj-brand-primary);\n }\n\n .section-description {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .format-options {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .format-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 2px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--mj-bg-surface-card);\n }\n\n .format-option:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n }\n\n .format-option.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-card));\n }\n\n .format-option > i.fa-solid,\n .format-option > i.fas {\n font-size: 24px;\n color: var(--mj-text-muted);\n width: 32px;\n text-align: center;\n }\n\n .format-option.selected > i.fa-solid,\n .format-option.selected > i.fas {\n color: var(--mj-brand-primary);\n }\n\n .format-details {\n flex: 1;\n }\n\n .format-name {\n font-weight: 500;\n font-size: 14px;\n margin-bottom: 2px;\n }\n\n .format-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .check-icon {\n font-size: 20px;\n color: var(--mj-status-success);\n }\n\n .option-checkboxes {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .checkbox-label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .checkbox-label:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .checkbox-label input[type=\"checkbox\"] {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .checkbox-label > span {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n }\n\n .checkbox-label input[type=\"checkbox\"]:disabled {\n cursor: not-allowed;\n }\n\n .checkbox-label small {\n margin-left: 28px;\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .format-specific-options {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .subsection-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .error-message {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n margin-top: 15px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 4px;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n color: var(--mj-text-muted);\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 15px 20px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n mj-dialog-actions button i {\n margin-right: 6px;\n }\n "] }]
526
+ `, styles: ["\n .export-modal-content {\n padding: 20px;\n max-height: calc(600px - 120px);\n overflow-y: auto;\n }\n\n section {\n margin-bottom: 24px;\n }\n\n .section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-title i {\n color: var(--mj-brand-primary);\n }\n\n .section-description {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .format-options {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .format-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 2px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--mj-bg-surface-card);\n }\n\n .format-option:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n }\n\n .format-option.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-card));\n }\n\n .format-option > i.fa-solid,\n .format-option > i.fas {\n font-size: 24px;\n color: var(--mj-text-muted);\n width: 32px;\n text-align: center;\n }\n\n .format-option.selected > i.fa-solid,\n .format-option.selected > i.fas {\n color: var(--mj-brand-primary);\n }\n\n .format-details {\n flex: 1;\n }\n\n .format-name {\n font-weight: 500;\n font-size: 14px;\n margin-bottom: 2px;\n }\n\n .format-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .check-icon {\n font-size: 20px;\n color: var(--mj-status-success);\n }\n\n .option-checkboxes {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .checkbox-label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .checkbox-label:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .checkbox-label input[type=\"checkbox\"] {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .checkbox-label > span {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n }\n\n .checkbox-label input[type=\"checkbox\"]:disabled {\n cursor: not-allowed;\n }\n\n .theme-mode-select {\n margin-left: 8px;\n padding: 2px 6px;\n font-size: 13px;\n }\n\n .checkbox-label small {\n margin-left: 28px;\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .format-specific-options {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .subsection-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .error-message {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n margin-top: 15px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 4px;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n color: var(--mj-text-muted);\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 15px 20px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n mj-dialog-actions button i {\n margin-right: 6px;\n }\n "] }]
391
527
  }], () => [{ type: i1.ExportService }, { type: i2.DialogService }, { type: i3.ToastService }], { isVisible: [{
392
528
  type: Input
393
529
  }], conversation: [{
394
530
  type: Input
395
531
  }], currentUser: [{
396
532
  type: Input
533
+ }], branding: [{
534
+ type: Input
397
535
  }], cancelled: [{
398
536
  type: Output
399
537
  }], exported: [{
400
538
  type: Output
401
539
  }] }); })();
402
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ExportModalComponent, { className: "ExportModalComponent", filePath: "src/lib/components/export/export-modal.component.ts", lineNumber: 305 }); })();
540
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ExportModalComponent, { className: "ExportModalComponent", filePath: "src/lib/components/export/export-modal.component.ts", lineNumber: 341 }); })();
403
541
  //# sourceMappingURL=export-modal.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"export-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/export/export-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MJConversationEntity } from '@memberjunction/core-entities';\nimport { UserInfo } from '@memberjunction/core';\nimport { ExportService, ExportFormat, ExportOptions } from '../../services/export.service';\nimport { DialogService } from '../../services/dialog.service';\nimport { ToastService } from '../../services/toast.service';\n\n@Component({\n standalone: false,\n selector: 'mj-export-modal',\n template: `\n @if (isVisible) {\n <mj-dialog\n [Title]=\"exportTitle\"\n [Width]=\"600\"\n [Height]=\"600\"\n [Visible]=\"true\"\n (Close)=\"onCancel()\">\n <div class=\"export-modal-content\">\n <section class=\"format-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-file-export\"></i>\n Export Format\n </h3>\n <p class=\"section-description\">\n Choose a format to export this conversation:\n </p>\n <div class=\"format-options\">\n @for (format of formats; track format.value) {\n <div\n class=\"format-option\"\n [class.selected]=\"selectedFormat === format.value\"\n (click)=\"selectFormat(format.value)\">\n <i [class]=\"format.icon\"></i>\n <div class=\"format-details\">\n <div class=\"format-name\">{{ format.name }}</div>\n <div class=\"format-description\">{{ format.description }}</div>\n </div>\n @if (selectedFormat === format.value) {\n <i class=\"fa-solid fa-check-circle check-icon\"></i>\n }\n </div>\n }\n </div>\n </section>\n <section class=\"options-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Export Options\n </h3>\n <div class=\"option-checkboxes\">\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeMessages\"\n [disabled]=\"isExporting\">\n <span>Include messages</span>\n <small>Export all conversation messages</small>\n </label>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeMetadata\"\n [disabled]=\"isExporting\">\n <span>Include metadata</span>\n <small>Add creation date, IDs, and other metadata</small>\n </label>\n </div>\n @if (selectedFormat === 'json') {\n <div class=\"format-specific-options\">\n <h4 class=\"subsection-title\">JSON Options</h4>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.prettyPrint\"\n [disabled]=\"isExporting\">\n <span>Pretty print</span>\n <small>Format JSON with indentation</small>\n </label>\n </div>\n }\n @if (selectedFormat === 'html') {\n <div class=\"format-specific-options\">\n <h4 class=\"subsection-title\">HTML Options</h4>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeCSS\"\n [disabled]=\"isExporting\">\n <span>Include CSS styling</span>\n <small>Embed styles for better presentation</small>\n </label>\n </div>\n }\n </section>\n @if (errorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ errorMessage }}\n </div>\n }\n @if (isExporting) {\n <div class=\"loading-indicator\">\n <mj-loading text=\"Exporting conversation...\" size=\"small\"></mj-loading>\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton [disabled]=\"isExporting\" (click)=\"onCancel()\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n <button mjButton variant=\"primary\" [disabled]=\"!canExport\" (click)=\"onExport()\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .export-modal-content {\n padding: 20px;\n max-height: calc(600px - 120px);\n overflow-y: auto;\n }\n\n section {\n margin-bottom: 24px;\n }\n\n .section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-title i {\n color: var(--mj-brand-primary);\n }\n\n .section-description {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .format-options {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .format-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 2px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--mj-bg-surface-card);\n }\n\n .format-option:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n }\n\n .format-option.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-card));\n }\n\n .format-option > i.fa-solid,\n .format-option > i.fas {\n font-size: 24px;\n color: var(--mj-text-muted);\n width: 32px;\n text-align: center;\n }\n\n .format-option.selected > i.fa-solid,\n .format-option.selected > i.fas {\n color: var(--mj-brand-primary);\n }\n\n .format-details {\n flex: 1;\n }\n\n .format-name {\n font-weight: 500;\n font-size: 14px;\n margin-bottom: 2px;\n }\n\n .format-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .check-icon {\n font-size: 20px;\n color: var(--mj-status-success);\n }\n\n .option-checkboxes {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .checkbox-label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .checkbox-label:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .checkbox-label input[type=\"checkbox\"] {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .checkbox-label > span {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n }\n\n .checkbox-label input[type=\"checkbox\"]:disabled {\n cursor: not-allowed;\n }\n\n .checkbox-label small {\n margin-left: 28px;\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .format-specific-options {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .subsection-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .error-message {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n margin-top: 15px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 4px;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n color: var(--mj-text-muted);\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 15px 20px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n mj-dialog-actions button i {\n margin-right: 6px;\n }\n `]\n})\nexport class ExportModalComponent {\n @Input() isVisible = false;\n @Input() conversation?: MJConversationEntity;\n @Input() currentUser!: UserInfo;\n @Output() cancelled = new EventEmitter<void>();\n @Output() exported = new EventEmitter<void>();\n\n selectedFormat: ExportFormat | null = 'markdown';\n isExporting = false;\n errorMessage = '';\n\n exportOptions: ExportOptions = {\n includeMessages: true,\n includeMetadata: true,\n prettyPrint: true,\n includeCSS: true\n };\n\n get exportTitle(): string {\n return `Export: ${this.conversation?.Name || 'Conversation'}`;\n }\n\n get canExport(): boolean {\n return !this.isExporting &&\n !!this.selectedFormat &&\n (this.exportOptions.includeMessages === true);\n }\n\n formats = [\n {\n value: 'markdown' as ExportFormat,\n name: 'Markdown',\n description: 'Formatted text with markdown syntax',\n icon: 'fa-solid fa-file-alt'\n },\n {\n value: 'json' as ExportFormat,\n name: 'JSON',\n description: 'Structured data format',\n icon: 'fa-solid fa-code'\n },\n {\n value: 'html' as ExportFormat,\n name: 'HTML',\n description: 'Web page format',\n icon: 'fa-solid fa-file-code'\n },\n {\n value: 'text' as ExportFormat,\n name: 'Plain Text',\n description: 'Simple text file',\n icon: 'fa-solid fa-file'\n }\n ];\n\n constructor(\n private exportService: ExportService,\n private dialogService: DialogService,\n private toastService: ToastService\n ) {}\n\n selectFormat(format: ExportFormat): void {\n if (!this.isExporting) {\n this.selectedFormat = format;\n }\n }\n\n async onExport(): Promise<void> {\n if (!this.canExport || !this.conversation) {\n return;\n }\n\n if (!this.exportOptions.includeMessages) {\n this.errorMessage = 'At least \"Include messages\" must be selected';\n return;\n }\n\n this.isExporting = true;\n this.errorMessage = '';\n\n try {\n await this.exportService.exportConversation(\n this.conversation.ID,\n this.selectedFormat!,\n this.currentUser,\n this.exportOptions\n );\n\n this.toastService.success('Conversation exported successfully');\n this.exported.emit();\n this.resetForm();\n } catch (error) {\n console.error('Error exporting conversation:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Failed to export conversation';\n this.toastService.error(this.errorMessage);\n } finally {\n this.isExporting = false;\n }\n }\n\n onCancel(): void {\n this.cancelled.emit();\n this.resetForm();\n }\n\n private resetForm(): void {\n this.selectedFormat = 'markdown';\n this.errorMessage = '';\n this.exportOptions = {\n includeMessages: true,\n includeMetadata: true,\n prettyPrint: true,\n includeCSS: true\n };\n this.isVisible = false;\n }\n}\n"]}
1
+ {"version":3,"file":"export-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/export/export-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MJConversationEntity } from '@memberjunction/core-entities';\nimport { UserInfo } from '@memberjunction/core';\nimport { ExportService, ExportFormat, ExportOptions, ExportBranding } from '../../services/export.service';\nimport { DialogService } from '../../services/dialog.service';\nimport { ToastService } from '../../services/toast.service';\n\n@Component({\n standalone: false,\n selector: 'mj-export-modal',\n template: `\n @if (isVisible) {\n <mj-dialog\n [Title]=\"exportTitle\"\n [Width]=\"600\"\n [Height]=\"600\"\n [Visible]=\"true\"\n (Close)=\"onCancel()\">\n <div class=\"export-modal-content\">\n <section class=\"format-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-file-export\"></i>\n Export Format\n </h3>\n <p class=\"section-description\">\n Choose a format to export this conversation:\n </p>\n <div class=\"format-options\">\n @for (format of formats; track format.value) {\n <div\n class=\"format-option\"\n [class.selected]=\"selectedFormat === format.value\"\n (click)=\"selectFormat(format.value)\">\n <i [class]=\"format.icon\"></i>\n <div class=\"format-details\">\n <div class=\"format-name\">{{ format.name }}</div>\n <div class=\"format-description\">{{ format.description }}</div>\n </div>\n @if (selectedFormat === format.value) {\n <i class=\"fa-solid fa-check-circle check-icon\"></i>\n }\n </div>\n }\n </div>\n </section>\n <section class=\"options-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Export Options\n </h3>\n <div class=\"option-checkboxes\">\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeMessages\"\n [disabled]=\"isExporting\">\n <span>Include messages</span>\n <small>Export all conversation messages</small>\n </label>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeMetadata\"\n [disabled]=\"isExporting\">\n <span>Include metadata</span>\n <small>Add creation date, IDs, and other metadata</small>\n </label>\n <!-- Branding applies to EVERY format (HTML gets theme colors + logo +\n footer; markdown/text/JSON get the title and attribution), so it\n belongs here rather than under HTML Options. Shown for HTML even with\n no host branding, because it still snapshots the app's theme. -->\n @if (selectedFormat === 'html' || branding) {\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeTheme\"\n [disabled]=\"isExporting || (selectedFormat === 'html' && !exportOptions.includeCSS)\">\n <span>Include branding</span>\n <small>{{ brandingHint }}</small>\n </label>\n }\n </div>\n @if (selectedFormat === 'json') {\n <div class=\"format-specific-options\">\n <h4 class=\"subsection-title\">JSON Options</h4>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.prettyPrint\"\n [disabled]=\"isExporting\">\n <span>Pretty print</span>\n <small>Format JSON with indentation</small>\n </label>\n </div>\n }\n @if (selectedFormat === 'html') {\n <div class=\"format-specific-options\">\n <h4 class=\"subsection-title\">HTML Options</h4>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeCSS\"\n [disabled]=\"isExporting\">\n <span>Include CSS styling</span>\n <small>Embed styles for better presentation</small>\n </label>\n <!-- Which palette gets baked in — NOT the mode the app happens to be in.\n Exporting from a dark session would otherwise put dark text on the\n export's white page. -->\n @if (exportOptions.includeTheme && exportOptions.includeCSS) {\n <label class=\"checkbox-label\">\n <span>Theme</span>\n <select\n class=\"mj-input theme-mode-select\"\n [(ngModel)]=\"exportOptions.themeMode\"\n [disabled]=\"isExporting\">\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n <small>Palette baked into the exported file</small>\n </label>\n }\n </div>\n }\n </section>\n @if (errorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ errorMessage }}\n </div>\n }\n @if (isExporting) {\n <div class=\"loading-indicator\">\n <mj-loading text=\"Exporting conversation...\" size=\"small\"></mj-loading>\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton [disabled]=\"isExporting\" (click)=\"onCancel()\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n <button mjButton variant=\"primary\" [disabled]=\"!canExport\" (click)=\"onExport()\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .export-modal-content {\n padding: 20px;\n max-height: calc(600px - 120px);\n overflow-y: auto;\n }\n\n section {\n margin-bottom: 24px;\n }\n\n .section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-title i {\n color: var(--mj-brand-primary);\n }\n\n .section-description {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .format-options {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .format-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 2px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--mj-bg-surface-card);\n }\n\n .format-option:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n }\n\n .format-option.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-card));\n }\n\n .format-option > i.fa-solid,\n .format-option > i.fas {\n font-size: 24px;\n color: var(--mj-text-muted);\n width: 32px;\n text-align: center;\n }\n\n .format-option.selected > i.fa-solid,\n .format-option.selected > i.fas {\n color: var(--mj-brand-primary);\n }\n\n .format-details {\n flex: 1;\n }\n\n .format-name {\n font-weight: 500;\n font-size: 14px;\n margin-bottom: 2px;\n }\n\n .format-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .check-icon {\n font-size: 20px;\n color: var(--mj-status-success);\n }\n\n .option-checkboxes {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .checkbox-label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .checkbox-label:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .checkbox-label input[type=\"checkbox\"] {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .checkbox-label > span {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n }\n\n .checkbox-label input[type=\"checkbox\"]:disabled {\n cursor: not-allowed;\n }\n\n .theme-mode-select {\n margin-left: 8px;\n padding: 2px 6px;\n font-size: 13px;\n }\n\n .checkbox-label small {\n margin-left: 28px;\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .format-specific-options {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .subsection-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .error-message {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n margin-top: 15px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 4px;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n color: var(--mj-text-muted);\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 15px 20px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n mj-dialog-actions button i {\n margin-right: 6px;\n }\n `]\n})\nexport class ExportModalComponent {\n private _isVisible = false;\n @Input()\n set isVisible(value: boolean) {\n const opening = value && !this._isVisible;\n this._isVisible = value;\n if (opening) {\n // Fresh open: \"Include branding\" defaults ON only when the host explicitly\n // configured export branding — plain MJ Explorer keeps today's unthemed file.\n // NOTE this reads `branding`, so a host binding both in one change-detection\n // pass must bind [branding] FIRST (Angular sets inputs in template order).\n // chat-area's template does; a host mounting with isVisible already true and\n // branding bound after would get the checkbox defaulted off.\n this.exportOptions.includeTheme = !!this.branding;\n }\n }\n get isVisible(): boolean {\n return this._isVisible;\n }\n\n @Input() conversation?: MJConversationEntity;\n @Input() currentUser!: UserInfo;\n /**\n * Host-supplied export branding (theme tokens / logo / title). When set, the\n * HTML format's \"Include branding\" checkbox defaults on and the branding is\n * passed to {@link ExportService} on export. See `ExportBranding`.\n */\n @Input() branding: ExportBranding | null = null;\n @Output() cancelled = new EventEmitter<void>();\n @Output() exported = new EventEmitter<void>();\n\n selectedFormat: ExportFormat | null = 'markdown';\n isExporting = false;\n errorMessage = '';\n\n exportOptions: ExportOptions = {\n includeMessages: true,\n includeMetadata: true,\n prettyPrint: true,\n includeCSS: true,\n includeTheme: false,\n themeMode: 'light'\n };\n\n /** Format-aware hint under the \"Include branding\" checkbox. */\n get brandingHint(): string {\n if (this.selectedFormat === 'html') {\n if (!this.exportOptions.includeCSS) {\n return 'Requires \"Include CSS styling\"';\n }\n return `Embed the app's theme colors${this.branding?.logoUrl ? ', logo,' : ''} and attribution line`;\n }\n const logo = this.branding?.logoUrl && this.selectedFormat === 'markdown' ? ', logo,' : '';\n return `Add the title${logo} and attribution line`;\n }\n\n /**\n * The options actually handed to the service. `includeTheme` is the user's INTENT;\n * this resolves it against the selected format:\n *\n * - HTML with the stylesheet off cannot carry branding (a full-size unstyled logo and\n * an unstyled footer would leak), so it drops.\n * - `includeCSS` is an HTML-only concern and must NOT decide anything for\n * markdown / text / JSON — resolving here rather than mutating `includeTheme` is\n * what keeps an HTML-format toggle from silently following the user into another\n * format.\n */\n private resolveExportOptions(): ExportOptions {\n const unstyledHtml = this.selectedFormat === 'html' && !this.exportOptions.includeCSS;\n const brandingOn = !!this.exportOptions.includeTheme && !unstyledHtml;\n return {\n ...this.exportOptions,\n includeTheme: brandingOn,\n branding: brandingOn ? (this.branding ?? undefined) : undefined\n };\n }\n\n get exportTitle(): string {\n return `Export: ${this.conversation?.Name || 'Conversation'}`;\n }\n\n get canExport(): boolean {\n return !this.isExporting &&\n !!this.selectedFormat &&\n (this.exportOptions.includeMessages === true);\n }\n\n formats = [\n {\n value: 'markdown' as ExportFormat,\n name: 'Markdown',\n description: 'Formatted text with markdown syntax',\n icon: 'fa-solid fa-file-alt'\n },\n {\n value: 'json' as ExportFormat,\n name: 'JSON',\n description: 'Structured data format',\n icon: 'fa-solid fa-code'\n },\n {\n value: 'html' as ExportFormat,\n name: 'HTML',\n description: 'Web page format',\n icon: 'fa-solid fa-file-code'\n },\n {\n value: 'text' as ExportFormat,\n name: 'Plain Text',\n description: 'Simple text file',\n icon: 'fa-solid fa-file'\n }\n ];\n\n constructor(\n private exportService: ExportService,\n private dialogService: DialogService,\n private toastService: ToastService\n ) {}\n\n selectFormat(format: ExportFormat): void {\n if (!this.isExporting) {\n this.selectedFormat = format;\n }\n }\n\n async onExport(): Promise<void> {\n if (!this.canExport || !this.conversation) {\n return;\n }\n\n if (!this.exportOptions.includeMessages) {\n this.errorMessage = 'At least \"Include messages\" must be selected';\n return;\n }\n\n this.isExporting = true;\n this.errorMessage = '';\n\n try {\n await this.exportService.exportConversation(\n this.conversation.ID,\n this.selectedFormat!,\n this.currentUser,\n this.resolveExportOptions()\n );\n\n this.toastService.success('Conversation exported successfully');\n this.exported.emit();\n this.resetForm();\n } catch (error) {\n console.error('Error exporting conversation:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Failed to export conversation';\n this.toastService.error(this.errorMessage);\n } finally {\n this.isExporting = false;\n }\n }\n\n onCancel(): void {\n this.cancelled.emit();\n this.resetForm();\n }\n\n private resetForm(): void {\n this.selectedFormat = 'markdown';\n this.errorMessage = '';\n this.exportOptions = {\n includeMessages: true,\n includeMetadata: true,\n prettyPrint: true,\n includeCSS: true,\n includeTheme: !!this.branding,\n themeMode: 'light'\n };\n this.isVisible = false;\n }\n}\n"]}
@@ -41,6 +41,11 @@ export declare class MessageInputComponent extends BaseAngularComponent implemen
41
41
  parentMessageId?: string;
42
42
  enableAttachments: boolean;
43
43
  enableMentions: boolean;
44
+ enableAgentMentions: boolean;
45
+ enableEntityMentions: boolean;
46
+ enableSkillCommands: boolean;
47
+ enablePlanMode: boolean;
48
+ enableRealtime: boolean;
44
49
  maxAttachments: number;
45
50
  maxAttachmentSizeBytes: number;
46
51
  acceptedFileTypes: string;
@@ -625,6 +630,6 @@ export declare class MessageInputComponent extends BaseAngularComponent implemen
625
630
  */
626
631
  private cleanupCompletionTimestamp;
627
632
  static ɵfac: i0.ɵɵFactoryDeclaration<MessageInputComponent, never>;
628
- static ɵcmp: i0.ɵɵComponentDeclaration<MessageInputComponent, "mj-message-input", never, { "conversationId": { "alias": "conversationId"; "required": false; }; "conversationName": { "alias": "conversationName"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "parentMessageId": { "alias": "parentMessageId"; "required": false; }; "enableAttachments": { "alias": "enableAttachments"; "required": false; }; "enableMentions": { "alias": "enableMentions"; "required": false; }; "maxAttachments": { "alias": "maxAttachments"; "required": false; }; "maxAttachmentSizeBytes": { "alias": "maxAttachmentSizeBytes"; "required": false; }; "acceptedFileTypes": { "alias": "acceptedFileTypes"; "required": false; }; "artifactsByDetailId": { "alias": "artifactsByDetailId"; "required": false; }; "systemArtifactsByDetailId": { "alias": "systemArtifactsByDetailId"; "required": false; }; "agentRunsByDetailId": { "alias": "agentRunsByDetailId"; "required": false; }; "emptyStateMode": { "alias": "emptyStateMode"; "required": false; }; "appContext": { "alias": "appContext"; "required": false; }; "defaultAgentId": { "alias": "defaultAgentId"; "required": false; }; "conversationDefaultAgentId": { "alias": "conversationDefaultAgentId"; "required": false; }; "agentConfigurationPresetId": { "alias": "agentConfigurationPresetId"; "required": false; }; "initialMessage": { "alias": "initialMessage"; "required": false; }; "initialAttachments": { "alias": "initialAttachments"; "required": false; }; "conversationHistory": { "alias": "conversationHistory"; "required": false; }; "inProgressMessageIds": { "alias": "inProgressMessageIds"; "required": false; }; "applicationId": { "alias": "applicationId"; "required": false; }; "initialDraft": { "alias": "initialDraft"; "required": false; }; }, { "messageSent": "messageSent"; "agentResponse": "agentResponse"; "beforeAgentTurn": "beforeAgentTurn"; "afterAgentTurn": "afterAgentTurn"; "agentRunDetected": "agentRunDetected"; "agentRunUpdate": "agentRunUpdate"; "messageComplete": "messageComplete"; "artifactCreated": "artifactCreated"; "conversationRenamed": "conversationRenamed"; "intentCheckStarted": "intentCheckStarted"; "intentCheckCompleted": "intentCheckCompleted"; "initialMessageAutoSendStarted": "initialMessageAutoSendStarted"; "initialMessageAutoSendFailed": "initialMessageAutoSendFailed"; "emptyStateSubmit": "emptyStateSubmit"; "uploadStateChanged": "uploadStateChanged"; "initialDraftApplied": "initialDraftApplied"; "DraftStateChanged": "DraftStateChanged"; "ComposerBlurred": "ComposerBlurred"; }, never, never, false, never>;
633
+ static ɵcmp: i0.ɵɵComponentDeclaration<MessageInputComponent, "mj-message-input", never, { "conversationId": { "alias": "conversationId"; "required": false; }; "conversationName": { "alias": "conversationName"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "parentMessageId": { "alias": "parentMessageId"; "required": false; }; "enableAttachments": { "alias": "enableAttachments"; "required": false; }; "enableMentions": { "alias": "enableMentions"; "required": false; }; "enableAgentMentions": { "alias": "enableAgentMentions"; "required": false; }; "enableEntityMentions": { "alias": "enableEntityMentions"; "required": false; }; "enableSkillCommands": { "alias": "enableSkillCommands"; "required": false; }; "enablePlanMode": { "alias": "enablePlanMode"; "required": false; }; "enableRealtime": { "alias": "enableRealtime"; "required": false; }; "maxAttachments": { "alias": "maxAttachments"; "required": false; }; "maxAttachmentSizeBytes": { "alias": "maxAttachmentSizeBytes"; "required": false; }; "acceptedFileTypes": { "alias": "acceptedFileTypes"; "required": false; }; "artifactsByDetailId": { "alias": "artifactsByDetailId"; "required": false; }; "systemArtifactsByDetailId": { "alias": "systemArtifactsByDetailId"; "required": false; }; "agentRunsByDetailId": { "alias": "agentRunsByDetailId"; "required": false; }; "emptyStateMode": { "alias": "emptyStateMode"; "required": false; }; "appContext": { "alias": "appContext"; "required": false; }; "defaultAgentId": { "alias": "defaultAgentId"; "required": false; }; "conversationDefaultAgentId": { "alias": "conversationDefaultAgentId"; "required": false; }; "agentConfigurationPresetId": { "alias": "agentConfigurationPresetId"; "required": false; }; "initialMessage": { "alias": "initialMessage"; "required": false; }; "initialAttachments": { "alias": "initialAttachments"; "required": false; }; "conversationHistory": { "alias": "conversationHistory"; "required": false; }; "inProgressMessageIds": { "alias": "inProgressMessageIds"; "required": false; }; "applicationId": { "alias": "applicationId"; "required": false; }; "initialDraft": { "alias": "initialDraft"; "required": false; }; }, { "messageSent": "messageSent"; "agentResponse": "agentResponse"; "beforeAgentTurn": "beforeAgentTurn"; "afterAgentTurn": "afterAgentTurn"; "agentRunDetected": "agentRunDetected"; "agentRunUpdate": "agentRunUpdate"; "messageComplete": "messageComplete"; "artifactCreated": "artifactCreated"; "conversationRenamed": "conversationRenamed"; "intentCheckStarted": "intentCheckStarted"; "intentCheckCompleted": "intentCheckCompleted"; "initialMessageAutoSendStarted": "initialMessageAutoSendStarted"; "initialMessageAutoSendFailed": "initialMessageAutoSendFailed"; "emptyStateSubmit": "emptyStateSubmit"; "uploadStateChanged": "uploadStateChanged"; "initialDraftApplied": "initialDraftApplied"; "DraftStateChanged": "DraftStateChanged"; "ComposerBlurred": "ComposerBlurred"; }, never, never, false, never>;
629
634
  }
630
635
  //# sourceMappingURL=message-input.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-input.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/message-input.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-input.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/message-input.component.ts"],"names":[],"mappings":"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"}