@memberjunction/ng-entity-viewer 6.2.0-edge.0 → 6.2.0-edge.1

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 (67) hide show
  1. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.d.ts +22 -0
  2. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.js +57 -13
  4. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.js.map +1 -1
  5. package/dist/lib/entity-cards/entity-cards.component.d.ts +67 -5
  6. package/dist/lib/entity-cards/entity-cards.component.d.ts.map +1 -1
  7. package/dist/lib/entity-cards/entity-cards.component.js +202 -71
  8. package/dist/lib/entity-cards/entity-cards.component.js.map +1 -1
  9. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts +159 -16
  10. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts.map +1 -1
  11. package/dist/lib/entity-data-grid/entity-data-grid.component.js +446 -147
  12. package/dist/lib/entity-data-grid/entity-data-grid.component.js.map +1 -1
  13. package/dist/lib/entity-data-grid/events/grid-events.js +67 -67
  14. package/dist/lib/entity-data-grid/events/grid-events.js.map +1 -1
  15. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.d.ts +112 -8
  16. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.d.ts.map +1 -1
  17. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.js +245 -61
  18. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.js.map +1 -1
  19. package/dist/lib/entity-viewer/entity-viewer.component.d.ts +6 -0
  20. package/dist/lib/entity-viewer/entity-viewer.component.d.ts.map +1 -1
  21. package/dist/lib/entity-viewer/entity-viewer.component.js +28 -9
  22. package/dist/lib/entity-viewer/entity-viewer.component.js.map +1 -1
  23. package/dist/lib/pill/pill.component.d.ts +13 -3
  24. package/dist/lib/pill/pill.component.d.ts.map +1 -1
  25. package/dist/lib/pill/pill.component.js +34 -10
  26. package/dist/lib/pill/pill.component.js.map +1 -1
  27. package/dist/lib/quick-save-dialog/quick-save-dialog.component.d.ts +29 -3
  28. package/dist/lib/quick-save-dialog/quick-save-dialog.component.d.ts.map +1 -1
  29. package/dist/lib/quick-save-dialog/quick-save-dialog.component.js +173 -114
  30. package/dist/lib/quick-save-dialog/quick-save-dialog.component.js.map +1 -1
  31. package/dist/lib/recycle-bin/recycle-bin.component.d.ts +4 -0
  32. package/dist/lib/recycle-bin/recycle-bin.component.d.ts.map +1 -1
  33. package/dist/lib/recycle-bin/recycle-bin.component.js +10 -2
  34. package/dist/lib/recycle-bin/recycle-bin.component.js.map +1 -1
  35. package/dist/lib/utils/highlight.util.d.ts +6 -0
  36. package/dist/lib/utils/highlight.util.d.ts.map +1 -1
  37. package/dist/lib/utils/highlight.util.js +23 -11
  38. package/dist/lib/utils/highlight.util.js.map +1 -1
  39. package/dist/lib/utils/record.util.d.ts +10 -0
  40. package/dist/lib/utils/record.util.d.ts.map +1 -1
  41. package/dist/lib/utils/record.util.js +20 -4
  42. package/dist/lib/utils/record.util.js.map +1 -1
  43. package/dist/lib/view-config-panel/view-config-panel.component.d.ts +17 -1
  44. package/dist/lib/view-config-panel/view-config-panel.component.d.ts.map +1 -1
  45. package/dist/lib/view-config-panel/view-config-panel.component.js +39 -6
  46. package/dist/lib/view-config-panel/view-config-panel.component.js.map +1 -1
  47. package/dist/lib/view-selector/view-selector.component.js +2 -2
  48. package/dist/lib/view-types/renderers/cards-view-renderer.component.d.ts +15 -3
  49. package/dist/lib/view-types/renderers/cards-view-renderer.component.d.ts.map +1 -1
  50. package/dist/lib/view-types/renderers/cards-view-renderer.component.js +33 -5
  51. package/dist/lib/view-types/renderers/cards-view-renderer.component.js.map +1 -1
  52. package/dist/lib/view-types/renderers/grid-view-renderer.component.d.ts +70 -2
  53. package/dist/lib/view-types/renderers/grid-view-renderer.component.d.ts.map +1 -1
  54. package/dist/lib/view-types/renderers/grid-view-renderer.component.js +155 -33
  55. package/dist/lib/view-types/renderers/grid-view-renderer.component.js.map +1 -1
  56. package/dist/lib/view-types/renderers/map-view-renderer.component.d.ts +16 -2
  57. package/dist/lib/view-types/renderers/map-view-renderer.component.d.ts.map +1 -1
  58. package/dist/lib/view-types/renderers/map-view-renderer.component.js +37 -9
  59. package/dist/lib/view-types/renderers/map-view-renderer.component.js.map +1 -1
  60. package/dist/lib/view-types/view-type.contracts.d.ts +8 -0
  61. package/dist/lib/view-types/view-type.contracts.d.ts.map +1 -1
  62. package/dist/lib/view-types/view-type.contracts.js.map +1 -1
  63. package/dist/lib/view-workspace/view-workspace.component.d.ts +243 -25
  64. package/dist/lib/view-workspace/view-workspace.component.d.ts.map +1 -1
  65. package/dist/lib/view-workspace/view-workspace.component.js +631 -180
  66. package/dist/lib/view-workspace/view-workspace.component.js.map +1 -1
  67. package/package.json +21 -20
@@ -1,147 +1,148 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/forms";
4
+ const _c0 = ["nameInput"];
4
5
  function QuickSaveDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
5
- const _r1 = i0.ɵɵgetCurrentView();
6
- i0.ɵɵelementStart(0, "div", 26);
7
- i0.ɵɵlistener("click", function QuickSaveDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnClose()); });
6
+ const _r2 = i0.ɵɵgetCurrentView();
7
+ i0.ɵɵelementStart(0, "div", 27);
8
+ i0.ɵɵlistener("click", function QuickSaveDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnClose()); });
8
9
  i0.ɵɵelementEnd();
9
10
  } }
10
11
  function QuickSaveDialogComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
11
- i0.ɵɵelementStart(0, "span", 5);
12
+ i0.ɵɵelementStart(0, "span", 6);
12
13
  i0.ɵɵtext(1);
13
14
  i0.ɵɵelementEnd();
14
15
  } if (rf & 2) {
15
- const ctx_r1 = i0.ɵɵnextContext();
16
+ const ctx_r2 = i0.ɵɵnextContext();
16
17
  i0.ɵɵadvance();
17
- i0.ɵɵtextInterpolate(ctx_r1.EntityName);
18
+ i0.ɵɵtextInterpolate(ctx_r2.EntityName);
18
19
  } }
19
- function QuickSaveDialogComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelementStart(0, "span", 12);
20
+ function QuickSaveDialogComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelementStart(0, "span", 13);
21
22
  i0.ɵɵtext(1, "Name is required");
22
23
  i0.ɵɵelementEnd();
23
24
  } }
24
- function QuickSaveDialogComponent_Conditional_29_Conditional_10_Template(rf, ctx) { if (rf & 1) {
25
- i0.ɵɵelementStart(0, "div", 30);
26
- i0.ɵɵelement(1, "i", 33);
25
+ function QuickSaveDialogComponent_Conditional_30_Conditional_10_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementStart(0, "div", 31);
27
+ i0.ɵɵelement(1, "i", 34);
27
28
  i0.ɵɵelementStart(2, "span");
28
29
  i0.ɵɵtext(3);
29
30
  i0.ɵɵelementEnd()();
30
31
  } if (rf & 2) {
31
- const ctx_r1 = i0.ɵɵnextContext(2);
32
+ const ctx_r2 = i0.ɵɵnextContext(2);
32
33
  i0.ɵɵadvance(3);
33
- i0.ɵɵtextInterpolate2("", ctx_r1.Summary.SortCount, " sort level", ctx_r1.Summary.SortCount !== 1 ? "s" : "");
34
+ i0.ɵɵtextInterpolate2("", ctx_r2.Summary.SortCount, " sort level", ctx_r2.Summary.SortCount !== 1 ? "s" : "");
34
35
  } }
35
- function QuickSaveDialogComponent_Conditional_29_Conditional_11_Template(rf, ctx) { if (rf & 1) {
36
- i0.ɵɵelementStart(0, "div", 32);
37
- i0.ɵɵelement(1, "i", 34);
36
+ function QuickSaveDialogComponent_Conditional_30_Conditional_11_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelementStart(0, "div", 33);
38
+ i0.ɵɵelement(1, "i", 35);
38
39
  i0.ɵɵelementStart(2, "span");
39
40
  i0.ɵɵtext(3);
40
41
  i0.ɵɵelementEnd()();
41
42
  } if (rf & 2) {
42
- const ctx_r1 = i0.ɵɵnextContext(2);
43
+ const ctx_r2 = i0.ɵɵnextContext(2);
43
44
  i0.ɵɵadvance(3);
44
- i0.ɵɵtextInterpolate1("Smart filter: \"", ctx_r1.Summary.SmartFilterPrompt, "\"");
45
+ i0.ɵɵtextInterpolate1("Smart filter: \"", ctx_r2.Summary.SmartFilterPrompt, "\"");
45
46
  } }
46
- function QuickSaveDialogComponent_Conditional_29_Conditional_12_Template(rf, ctx) { if (rf & 1) {
47
- i0.ɵɵelementStart(0, "div", 30);
48
- i0.ɵɵelement(1, "i", 35);
47
+ function QuickSaveDialogComponent_Conditional_30_Conditional_12_Template(rf, ctx) { if (rf & 1) {
48
+ i0.ɵɵelementStart(0, "div", 31);
49
+ i0.ɵɵelement(1, "i", 36);
49
50
  i0.ɵɵelementStart(2, "span");
50
51
  i0.ɵɵtext(3);
51
52
  i0.ɵɵelementEnd()();
52
53
  } if (rf & 2) {
53
- const ctx_r1 = i0.ɵɵnextContext(2);
54
+ const ctx_r2 = i0.ɵɵnextContext(2);
54
55
  i0.ɵɵadvance(3);
55
- i0.ɵɵtextInterpolate2("", ctx_r1.Summary.FilterCount, " filter", ctx_r1.Summary.FilterCount !== 1 ? "s" : "");
56
+ i0.ɵɵtextInterpolate2("", ctx_r2.Summary.FilterCount, " filter", ctx_r2.Summary.FilterCount !== 1 ? "s" : "");
56
57
  } }
57
- function QuickSaveDialogComponent_Conditional_29_Conditional_13_Template(rf, ctx) { if (rf & 1) {
58
- i0.ɵɵelementStart(0, "div", 30);
59
- i0.ɵɵelement(1, "i", 36);
58
+ function QuickSaveDialogComponent_Conditional_30_Conditional_13_Template(rf, ctx) { if (rf & 1) {
59
+ i0.ɵɵelementStart(0, "div", 31);
60
+ i0.ɵɵelement(1, "i", 37);
60
61
  i0.ɵɵelementStart(2, "span");
61
62
  i0.ɵɵtext(3);
62
63
  i0.ɵɵelementEnd()();
63
64
  } if (rf & 2) {
64
- const ctx_r1 = i0.ɵɵnextContext(2);
65
+ const ctx_r2 = i0.ɵɵnextContext(2);
65
66
  i0.ɵɵadvance(3);
66
- i0.ɵɵtextInterpolate2("", ctx_r1.Summary.AggregateCount, " aggregate", ctx_r1.Summary.AggregateCount !== 1 ? "s" : "");
67
+ i0.ɵɵtextInterpolate2("", ctx_r2.Summary.AggregateCount, " aggregate", ctx_r2.Summary.AggregateCount !== 1 ? "s" : "");
67
68
  } }
68
- function QuickSaveDialogComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
69
- i0.ɵɵelementStart(0, "div", 19)(1, "div", 27);
70
- i0.ɵɵelement(2, "i", 28);
69
+ function QuickSaveDialogComponent_Conditional_30_Template(rf, ctx) { if (rf & 1) {
70
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 28);
71
+ i0.ɵɵelement(2, "i", 29);
71
72
  i0.ɵɵelementStart(3, "span");
72
73
  i0.ɵɵtext(4, "View includes:");
73
74
  i0.ɵɵelementEnd()();
74
- i0.ɵɵelementStart(5, "div", 29)(6, "div", 30);
75
- i0.ɵɵelement(7, "i", 31);
75
+ i0.ɵɵelementStart(5, "div", 30)(6, "div", 31);
76
+ i0.ɵɵelement(7, "i", 32);
76
77
  i0.ɵɵelementStart(8, "span");
77
78
  i0.ɵɵtext(9);
78
79
  i0.ɵɵelementEnd()();
79
- i0.ɵɵconditionalCreate(10, QuickSaveDialogComponent_Conditional_29_Conditional_10_Template, 4, 2, "div", 30);
80
- i0.ɵɵconditionalCreate(11, QuickSaveDialogComponent_Conditional_29_Conditional_11_Template, 4, 1, "div", 32);
81
- i0.ɵɵconditionalCreate(12, QuickSaveDialogComponent_Conditional_29_Conditional_12_Template, 4, 2, "div", 30);
82
- i0.ɵɵconditionalCreate(13, QuickSaveDialogComponent_Conditional_29_Conditional_13_Template, 4, 2, "div", 30);
80
+ i0.ɵɵconditionalCreate(10, QuickSaveDialogComponent_Conditional_30_Conditional_10_Template, 4, 2, "div", 31);
81
+ i0.ɵɵconditionalCreate(11, QuickSaveDialogComponent_Conditional_30_Conditional_11_Template, 4, 1, "div", 33);
82
+ i0.ɵɵconditionalCreate(12, QuickSaveDialogComponent_Conditional_30_Conditional_12_Template, 4, 2, "div", 31);
83
+ i0.ɵɵconditionalCreate(13, QuickSaveDialogComponent_Conditional_30_Conditional_13_Template, 4, 2, "div", 31);
83
84
  i0.ɵɵelementEnd()();
84
85
  } if (rf & 2) {
85
- const ctx_r1 = i0.ɵɵnextContext();
86
+ const ctx_r2 = i0.ɵɵnextContext();
86
87
  i0.ɵɵadvance(9);
87
- i0.ɵɵtextInterpolate2("", ctx_r1.Summary.ColumnCount, " column", ctx_r1.Summary.ColumnCount !== 1 ? "s" : "");
88
+ i0.ɵɵtextInterpolate2("", ctx_r2.Summary.ColumnCount, " column", ctx_r2.Summary.ColumnCount !== 1 ? "s" : "");
88
89
  i0.ɵɵadvance();
89
- i0.ɵɵconditional(ctx_r1.Summary.SortCount > 0 ? 10 : -1);
90
+ i0.ɵɵconditional(ctx_r2.Summary.SortCount > 0 ? 10 : -1);
90
91
  i0.ɵɵadvance();
91
- i0.ɵɵconditional(ctx_r1.Summary.SmartFilterActive ? 11 : -1);
92
+ i0.ɵɵconditional(ctx_r2.Summary.SmartFilterActive ? 11 : -1);
92
93
  i0.ɵɵadvance();
93
- i0.ɵɵconditional(ctx_r1.Summary.FilterCount > 0 ? 12 : -1);
94
+ i0.ɵɵconditional(ctx_r2.Summary.FilterCount > 0 ? 12 : -1);
94
95
  i0.ɵɵadvance();
95
- i0.ɵɵconditional(ctx_r1.Summary.AggregateCount > 0 ? 13 : -1);
96
+ i0.ɵɵconditional(ctx_r2.Summary.AggregateCount > 0 ? 13 : -1);
96
97
  } }
97
- function QuickSaveDialogComponent_Conditional_36_Conditional_1_Template(rf, ctx) { if (rf & 1) {
98
- i0.ɵɵelement(0, "i", 38);
99
- } }
100
- function QuickSaveDialogComponent_Conditional_36_Conditional_2_Template(rf, ctx) { if (rf & 1) {
98
+ function QuickSaveDialogComponent_Conditional_37_Conditional_1_Template(rf, ctx) { if (rf & 1) {
101
99
  i0.ɵɵelement(0, "i", 39);
102
100
  } }
103
- function QuickSaveDialogComponent_Conditional_36_Template(rf, ctx) { if (rf & 1) {
104
- const _r3 = i0.ɵɵgetCurrentView();
105
- i0.ɵɵelementStart(0, "button", 37);
106
- i0.ɵɵlistener("click", function QuickSaveDialogComponent_Conditional_36_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSave(false)); });
107
- i0.ɵɵconditionalCreate(1, QuickSaveDialogComponent_Conditional_36_Conditional_1_Template, 1, 0, "i", 38)(2, QuickSaveDialogComponent_Conditional_36_Conditional_2_Template, 1, 0, "i", 39);
101
+ function QuickSaveDialogComponent_Conditional_37_Conditional_2_Template(rf, ctx) { if (rf & 1) {
102
+ i0.ɵɵelement(0, "i", 40);
103
+ } }
104
+ function QuickSaveDialogComponent_Conditional_37_Template(rf, ctx) { if (rf & 1) {
105
+ const _r4 = i0.ɵɵgetCurrentView();
106
+ i0.ɵɵelementStart(0, "button", 38);
107
+ i0.ɵɵlistener("click", function QuickSaveDialogComponent_Conditional_37_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSave(false)); });
108
+ i0.ɵɵconditionalCreate(1, QuickSaveDialogComponent_Conditional_37_Conditional_1_Template, 1, 0, "i", 39)(2, QuickSaveDialogComponent_Conditional_37_Conditional_2_Template, 1, 0, "i", 40);
108
109
  i0.ɵɵtext(3);
109
110
  i0.ɵɵelementEnd();
110
- i0.ɵɵelementStart(4, "button", 40);
111
- i0.ɵɵlistener("click", function QuickSaveDialogComponent_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSave(true)); });
112
- i0.ɵɵelement(5, "i", 41);
111
+ i0.ɵɵelementStart(4, "button", 41);
112
+ i0.ɵɵlistener("click", function QuickSaveDialogComponent_Conditional_37_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSave(true)); });
113
+ i0.ɵɵelement(5, "i", 42);
113
114
  i0.ɵɵtext(6, " Save As New ");
114
115
  i0.ɵɵelementEnd();
115
116
  } if (rf & 2) {
116
- const ctx_r1 = i0.ɵɵnextContext();
117
- i0.ɵɵproperty("disabled", !ctx_r1.Name.trim() || ctx_r1.IsSaving);
117
+ const ctx_r2 = i0.ɵɵnextContext();
118
+ i0.ɵɵproperty("disabled", !ctx_r2.Name.trim() || ctx_r2.IsSaving);
118
119
  i0.ɵɵadvance();
119
- i0.ɵɵconditional(ctx_r1.IsSaving ? 1 : 2);
120
+ i0.ɵɵconditional(ctx_r2.IsSaving ? 1 : 2);
120
121
  i0.ɵɵadvance(2);
121
- i0.ɵɵtextInterpolate1(" ", ctx_r1.IsSaving ? "Saving..." : "Update", " ");
122
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.IsSaving ? "Saving..." : "Update", " ");
122
123
  i0.ɵɵadvance();
123
- i0.ɵɵproperty("disabled", !ctx_r1.Name.trim() || ctx_r1.IsSaving);
124
+ i0.ɵɵproperty("disabled", !ctx_r2.Name.trim() || ctx_r2.IsSaving);
124
125
  } }
125
- function QuickSaveDialogComponent_Conditional_37_Conditional_1_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵelement(0, "i", 38);
126
+ function QuickSaveDialogComponent_Conditional_38_Conditional_1_Template(rf, ctx) { if (rf & 1) {
127
+ i0.ɵɵelement(0, "i", 39);
127
128
  } }
128
- function QuickSaveDialogComponent_Conditional_37_Conditional_2_Template(rf, ctx) { if (rf & 1) {
129
- i0.ɵɵelement(0, "i", 41);
129
+ function QuickSaveDialogComponent_Conditional_38_Conditional_2_Template(rf, ctx) { if (rf & 1) {
130
+ i0.ɵɵelement(0, "i", 42);
130
131
  } }
131
- function QuickSaveDialogComponent_Conditional_37_Template(rf, ctx) { if (rf & 1) {
132
- const _r4 = i0.ɵɵgetCurrentView();
133
- i0.ɵɵelementStart(0, "button", 37);
134
- i0.ɵɵlistener("click", function QuickSaveDialogComponent_Conditional_37_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSave(true)); });
135
- i0.ɵɵconditionalCreate(1, QuickSaveDialogComponent_Conditional_37_Conditional_1_Template, 1, 0, "i", 38)(2, QuickSaveDialogComponent_Conditional_37_Conditional_2_Template, 1, 0, "i", 41);
132
+ function QuickSaveDialogComponent_Conditional_38_Template(rf, ctx) { if (rf & 1) {
133
+ const _r5 = i0.ɵɵgetCurrentView();
134
+ i0.ɵɵelementStart(0, "button", 38);
135
+ i0.ɵɵlistener("click", function QuickSaveDialogComponent_Conditional_38_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSave(true)); });
136
+ i0.ɵɵconditionalCreate(1, QuickSaveDialogComponent_Conditional_38_Conditional_1_Template, 1, 0, "i", 39)(2, QuickSaveDialogComponent_Conditional_38_Conditional_2_Template, 1, 0, "i", 42);
136
137
  i0.ɵɵtext(3);
137
138
  i0.ɵɵelementEnd();
138
139
  } if (rf & 2) {
139
- const ctx_r1 = i0.ɵɵnextContext();
140
- i0.ɵɵproperty("disabled", !ctx_r1.Name.trim() || ctx_r1.IsSaving);
140
+ const ctx_r2 = i0.ɵɵnextContext();
141
+ i0.ɵɵproperty("disabled", !ctx_r2.Name.trim() || ctx_r2.IsSaving);
141
142
  i0.ɵɵadvance();
142
- i0.ɵɵconditional(ctx_r1.IsSaving ? 1 : 2);
143
+ i0.ɵɵconditional(ctx_r2.IsSaving ? 1 : 2);
143
144
  i0.ɵɵadvance(2);
144
- i0.ɵɵtextInterpolate1(" ", ctx_r1.IsSaving ? "Saving..." : "Create View", " ");
145
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.IsSaving ? "Saving..." : "Create View", " ");
145
146
  } }
146
147
  /**
147
148
  * QuickSaveDialogComponent - Focused modal for saving views quickly
@@ -194,6 +195,13 @@ export class QuickSaveDialogComponent {
194
195
  * Whether to default to Save As New mode (no longer used for toggle, kept for API compat)
195
196
  */
196
197
  DefaultSaveAsNew = false;
198
+ /**
199
+ * Name to pre-fill when creating a NEW view, so the user can accept it with a single click.
200
+ * The field is focused and its text selected on open, so typing replaces it outright.
201
+ *
202
+ * Ignored when {@link ViewEntity} is set — an existing view's own name always wins.
203
+ */
204
+ SuggestedName = '';
197
205
  /**
198
206
  * Emitted when the user saves
199
207
  */
@@ -207,17 +215,39 @@ export class QuickSaveDialogComponent {
207
215
  * Carries the partially-filled form data so the config panel can continue the flow.
208
216
  */
209
217
  OpenAdvanced = new EventEmitter();
218
+ /** The name input, focused and selected whenever the dialog opens. */
219
+ nameInput;
210
220
  // Form state
211
221
  Name = '';
212
222
  Description = '';
213
223
  IsShared = false;
214
224
  NameTouched = false;
225
+ /**
226
+ * True when the dialog opened before the view existed, so the focus has to wait for
227
+ * `ngAfterViewInit`. The panel is always in the DOM (only `[class.open]` toggles), so after
228
+ * the first render the ViewChild is resolved and opening can focus synchronously.
229
+ */
230
+ focusPending = false;
231
+ viewReady = false;
215
232
  constructor(cdr) {
216
233
  this.cdr = cdr;
217
234
  }
218
235
  ngOnChanges(changes) {
219
236
  if (changes['IsOpen'] && this.IsOpen) {
220
237
  this.initializeForm();
238
+ if (this.viewReady) {
239
+ this.focusNameField();
240
+ }
241
+ else {
242
+ this.focusPending = true;
243
+ }
244
+ }
245
+ }
246
+ ngAfterViewInit() {
247
+ this.viewReady = true;
248
+ if (this.focusPending) {
249
+ this.focusPending = false;
250
+ this.focusNameField();
221
251
  }
222
252
  }
223
253
  /**
@@ -231,12 +261,30 @@ export class QuickSaveDialogComponent {
231
261
  this.IsShared = this.ViewEntity.IsShared;
232
262
  }
233
263
  else {
234
- this.Name = '';
264
+ this.Name = this.SuggestedName || '';
235
265
  this.Description = '';
236
266
  this.IsShared = false;
237
267
  }
238
268
  this.cdr.detectChanges();
239
269
  }
270
+ /**
271
+ * Put the cursor in the name field with its text selected: one click accepts a suggested
272
+ * name, one keystroke replaces it.
273
+ *
274
+ * Deferred by a microtask because `ngModel` writes the seeded value to the element on one of
275
+ * its own — selecting first would select an empty field and leave the caret at the end once
276
+ * the value landed.
277
+ */
278
+ focusNameField() {
279
+ queueMicrotask(() => {
280
+ const input = this.nameInput?.nativeElement;
281
+ if (!input || !this.IsOpen) {
282
+ return;
283
+ }
284
+ input.focus();
285
+ input.select();
286
+ });
287
+ }
240
288
  /**
241
289
  * Handle save button click
242
290
  * @param saveAsNew - true to create a new view, false to update existing
@@ -268,57 +316,63 @@ export class QuickSaveDialogComponent {
268
316
  });
269
317
  }
270
318
  static ɵfac = function QuickSaveDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || QuickSaveDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
271
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: QuickSaveDialogComponent, selectors: [["mj-quick-save-dialog"]], inputs: { IsOpen: "IsOpen", ViewEntity: "ViewEntity", EntityName: "EntityName", Summary: "Summary", IsSaving: "IsSaving", DefaultSaveAsNew: "DefaultSaveAsNew" }, outputs: { Save: "Save", Close: "Close", OpenAdvanced: "OpenAdvanced" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 40, vars: 12, consts: [[1, "dialog-backdrop"], [1, "dialog-panel"], [1, "dialog-header"], [1, "header-title"], [1, "fa-solid", "fa-bookmark"], [1, "entity-badge"], ["title", "Close", "aria-label", "Close dialog", 1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "dialog-content"], [1, "form-group"], ["for", "quickSaveName"], ["id", "quickSaveName", "type", "text", "placeholder", "e.g., Active West Coast Contacts", 1, "form-input", 3, "ngModelChange", "blur", "keydown.enter", "ngModel"], [1, "validation-error"], ["for", "quickSaveDescription"], [1, "optional"], ["id", "quickSaveDescription", "placeholder", "What does this view show?", "rows", "2", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel"], [1, "checkbox-label"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "checkbox-text"], [1, "summary-section"], [1, "advanced-link", 3, "click"], [1, "fa-solid", "fa-sliders"], [1, "dialog-footer"], [1, "footer-actions"], [1, "btn", "btn-primary", 3, "disabled"], [1, "btn", "btn-cancel", 3, "click"], [1, "dialog-backdrop", 3, "click"], [1, "summary-header"], [1, "fa-solid", "fa-list-check"], [1, "summary-items"], [1, "summary-item"], [1, "fa-solid", "fa-columns"], [1, "summary-item", "smart-filter"], [1, "fa-solid", "fa-arrow-up-wide-short"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-chart-simple"], [1, "btn", "btn-primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-save"], [1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"]], template: function QuickSaveDialogComponent_Template(rf, ctx) { if (rf & 1) {
272
- i0.ɵɵconditionalCreate(0, QuickSaveDialogComponent_Conditional_0_Template, 1, 0, "div", 0);
273
- i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "div", 3);
274
- i0.ɵɵelement(4, "i", 4);
319
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: QuickSaveDialogComponent, selectors: [["mj-quick-save-dialog"]], viewQuery: function QuickSaveDialogComponent_Query(rf, ctx) { if (rf & 1) {
320
+ i0.ɵɵviewQuery(_c0, 5);
321
+ } if (rf & 2) {
322
+ let _t;
323
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nameInput = _t.first);
324
+ } }, inputs: { IsOpen: "IsOpen", ViewEntity: "ViewEntity", EntityName: "EntityName", Summary: "Summary", IsSaving: "IsSaving", DefaultSaveAsNew: "DefaultSaveAsNew", SuggestedName: "SuggestedName" }, outputs: { Save: "Save", Close: "Close", OpenAdvanced: "OpenAdvanced" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 41, vars: 12, consts: [["nameInput", ""], [1, "dialog-backdrop"], [1, "dialog-panel"], [1, "dialog-header"], [1, "header-title"], [1, "fa-solid", "fa-bookmark"], [1, "entity-badge"], ["title", "Close", "aria-label", "Close dialog", 1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "dialog-content"], [1, "form-group"], ["for", "quickSaveName"], ["id", "quickSaveName", "type", "text", "placeholder", "e.g., Active West Coast Contacts", 1, "form-input", 3, "ngModelChange", "blur", "keydown.enter", "ngModel"], [1, "validation-error"], ["for", "quickSaveDescription"], [1, "optional"], ["id", "quickSaveDescription", "placeholder", "What does this view show?", "rows", "2", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel"], [1, "checkbox-label"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "checkbox-text"], [1, "summary-section"], [1, "advanced-link", 3, "click"], [1, "fa-solid", "fa-sliders"], [1, "dialog-footer"], [1, "footer-actions"], [1, "btn", "btn-primary", 3, "disabled"], [1, "btn", "btn-cancel", 3, "click"], [1, "dialog-backdrop", 3, "click"], [1, "summary-header"], [1, "fa-solid", "fa-list-check"], [1, "summary-items"], [1, "summary-item"], [1, "fa-solid", "fa-columns"], [1, "summary-item", "smart-filter"], [1, "fa-solid", "fa-arrow-up-wide-short"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-chart-simple"], [1, "btn", "btn-primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-save"], [1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"]], template: function QuickSaveDialogComponent_Template(rf, ctx) { if (rf & 1) {
325
+ const _r1 = i0.ɵɵgetCurrentView();
326
+ i0.ɵɵconditionalCreate(0, QuickSaveDialogComponent_Conditional_0_Template, 1, 0, "div", 1);
327
+ i0.ɵɵelementStart(1, "div", 2)(2, "div", 3)(3, "div", 4);
328
+ i0.ɵɵelement(4, "i", 5);
275
329
  i0.ɵɵelementStart(5, "span");
276
330
  i0.ɵɵtext(6, "Save View");
277
331
  i0.ɵɵelementEnd()();
278
- i0.ɵɵconditionalCreate(7, QuickSaveDialogComponent_Conditional_7_Template, 2, 1, "span", 5);
279
- i0.ɵɵelementStart(8, "button", 6);
332
+ i0.ɵɵconditionalCreate(7, QuickSaveDialogComponent_Conditional_7_Template, 2, 1, "span", 6);
333
+ i0.ɵɵelementStart(8, "button", 7);
280
334
  i0.ɵɵlistener("click", function QuickSaveDialogComponent_Template_button_click_8_listener() { return ctx.OnClose(); });
281
- i0.ɵɵelement(9, "i", 7);
335
+ i0.ɵɵelement(9, "i", 8);
282
336
  i0.ɵɵelementEnd()();
283
- i0.ɵɵelementStart(10, "div", 8)(11, "div", 9)(12, "label", 10);
337
+ i0.ɵɵelementStart(10, "div", 9)(11, "div", 10)(12, "label", 11);
284
338
  i0.ɵɵtext(13, "View Name");
285
339
  i0.ɵɵelementEnd();
286
- i0.ɵɵelementStart(14, "input", 11);
287
- i0.ɵɵtwoWayListener("ngModelChange", function QuickSaveDialogComponent_Template_input_ngModelChange_14_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.Name, $event) || (ctx.Name = $event); return $event; });
340
+ i0.ɵɵelementStart(14, "input", 12, 0);
341
+ i0.ɵɵtwoWayListener("ngModelChange", function QuickSaveDialogComponent_Template_input_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.Name, $event) || (ctx.Name = $event); return i0.ɵɵresetView($event); });
288
342
  i0.ɵɵlistener("blur", function QuickSaveDialogComponent_Template_input_blur_14_listener() { return ctx.NameTouched = true; })("keydown.enter", function QuickSaveDialogComponent_Template_input_keydown_enter_14_listener() { return ctx.OnSave(false); });
289
343
  i0.ɵɵelementEnd();
290
- i0.ɵɵconditionalCreate(15, QuickSaveDialogComponent_Conditional_15_Template, 2, 0, "span", 12);
344
+ i0.ɵɵconditionalCreate(16, QuickSaveDialogComponent_Conditional_16_Template, 2, 0, "span", 13);
291
345
  i0.ɵɵelementEnd();
292
- i0.ɵɵelementStart(16, "div", 9)(17, "label", 13);
293
- i0.ɵɵtext(18, "Description ");
294
- i0.ɵɵelementStart(19, "span", 14);
295
- i0.ɵɵtext(20, "(optional)");
346
+ i0.ɵɵelementStart(17, "div", 10)(18, "label", 14);
347
+ i0.ɵɵtext(19, "Description ");
348
+ i0.ɵɵelementStart(20, "span", 15);
349
+ i0.ɵɵtext(21, "(optional)");
296
350
  i0.ɵɵelementEnd()();
297
- i0.ɵɵelementStart(21, "textarea", 15);
298
- i0.ɵɵtwoWayListener("ngModelChange", function QuickSaveDialogComponent_Template_textarea_ngModelChange_21_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.Description, $event) || (ctx.Description = $event); return $event; });
351
+ i0.ɵɵelementStart(22, "textarea", 16);
352
+ i0.ɵɵtwoWayListener("ngModelChange", function QuickSaveDialogComponent_Template_textarea_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.Description, $event) || (ctx.Description = $event); return i0.ɵɵresetView($event); });
299
353
  i0.ɵɵelementEnd()();
300
- i0.ɵɵelementStart(22, "label", 16)(23, "input", 17);
301
- i0.ɵɵtwoWayListener("ngModelChange", function QuickSaveDialogComponent_Template_input_ngModelChange_23_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.IsShared, $event) || (ctx.IsShared = $event); return $event; });
354
+ i0.ɵɵelementStart(23, "label", 17)(24, "input", 18);
355
+ i0.ɵɵtwoWayListener("ngModelChange", function QuickSaveDialogComponent_Template_input_ngModelChange_24_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.IsShared, $event) || (ctx.IsShared = $event); return i0.ɵɵresetView($event); });
302
356
  i0.ɵɵelementEnd();
303
- i0.ɵɵelementStart(24, "span", 18)(25, "strong");
304
- i0.ɵɵtext(26, "Share with others");
357
+ i0.ɵɵelementStart(25, "span", 19)(26, "strong");
358
+ i0.ɵɵtext(27, "Share with others");
305
359
  i0.ɵɵelementEnd();
306
- i0.ɵɵelementStart(27, "small");
307
- i0.ɵɵtext(28, "Allow other users to use this view");
360
+ i0.ɵɵelementStart(28, "small");
361
+ i0.ɵɵtext(29, "Allow other users to use this view");
308
362
  i0.ɵɵelementEnd()()();
309
- i0.ɵɵconditionalCreate(29, QuickSaveDialogComponent_Conditional_29_Template, 14, 6, "div", 19);
310
- i0.ɵɵelementStart(30, "button", 20);
311
- i0.ɵɵlistener("click", function QuickSaveDialogComponent_Template_button_click_30_listener() { return ctx.OnOpenAdvanced(); });
312
- i0.ɵɵelement(31, "i", 21);
313
- i0.ɵɵelementStart(32, "span");
314
- i0.ɵɵtext(33, "Customize columns, filters & sorting...");
363
+ i0.ɵɵconditionalCreate(30, QuickSaveDialogComponent_Conditional_30_Template, 14, 6, "div", 20);
364
+ i0.ɵɵelementStart(31, "button", 21);
365
+ i0.ɵɵlistener("click", function QuickSaveDialogComponent_Template_button_click_31_listener() { return ctx.OnOpenAdvanced(); });
366
+ i0.ɵɵelement(32, "i", 22);
367
+ i0.ɵɵelementStart(33, "span");
368
+ i0.ɵɵtext(34, "Customize columns, filters & sorting...");
315
369
  i0.ɵɵelementEnd()()();
316
- i0.ɵɵelementStart(34, "div", 22)(35, "div", 23);
317
- i0.ɵɵconditionalCreate(36, QuickSaveDialogComponent_Conditional_36_Template, 7, 4)(37, QuickSaveDialogComponent_Conditional_37_Template, 4, 3, "button", 24);
370
+ i0.ɵɵelementStart(35, "div", 23)(36, "div", 24);
371
+ i0.ɵɵconditionalCreate(37, QuickSaveDialogComponent_Conditional_37_Template, 7, 4)(38, QuickSaveDialogComponent_Conditional_38_Template, 4, 3, "button", 25);
318
372
  i0.ɵɵelementEnd();
319
- i0.ɵɵelementStart(38, "button", 25);
320
- i0.ɵɵlistener("click", function QuickSaveDialogComponent_Template_button_click_38_listener() { return ctx.OnClose(); });
321
- i0.ɵɵtext(39, " Cancel ");
373
+ i0.ɵɵelementStart(39, "button", 26);
374
+ i0.ɵɵlistener("click", function QuickSaveDialogComponent_Template_button_click_39_listener() { return ctx.OnClose(); });
375
+ i0.ɵɵtext(40, " Cancel ");
322
376
  i0.ɵɵelementEnd()()();
323
377
  } if (rf & 2) {
324
378
  i0.ɵɵconditional(ctx.IsOpen ? 0 : -1);
@@ -329,21 +383,21 @@ export class QuickSaveDialogComponent {
329
383
  i0.ɵɵadvance(7);
330
384
  i0.ɵɵclassProp("invalid", ctx.NameTouched && !ctx.Name.trim());
331
385
  i0.ɵɵtwoWayProperty("ngModel", ctx.Name);
332
- i0.ɵɵadvance();
333
- i0.ɵɵconditional(ctx.NameTouched && !ctx.Name.trim() ? 15 : -1);
386
+ i0.ɵɵadvance(2);
387
+ i0.ɵɵconditional(ctx.NameTouched && !ctx.Name.trim() ? 16 : -1);
334
388
  i0.ɵɵadvance(6);
335
389
  i0.ɵɵtwoWayProperty("ngModel", ctx.Description);
336
390
  i0.ɵɵadvance(2);
337
391
  i0.ɵɵtwoWayProperty("ngModel", ctx.IsShared);
338
392
  i0.ɵɵadvance(6);
339
- i0.ɵɵconditional(ctx.Summary ? 29 : -1);
393
+ i0.ɵɵconditional(ctx.Summary ? 30 : -1);
340
394
  i0.ɵɵadvance(7);
341
- i0.ɵɵconditional(ctx.ViewEntity ? 36 : 37);
395
+ i0.ɵɵconditional(ctx.ViewEntity ? 37 : 38);
342
396
  } }, dependencies: [i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["\n.dialog-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 2000;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n.dialog-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.95);\n width: 480px;\n max-width: calc(100vw - 40px);\n max-height: calc(100vh - 60px);\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 2001;\n display: flex;\n flex-direction: column;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dialog-panel.open[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n transform: translate(-50%, -50%) scale(1);\n}\n\n\n.dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 18px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n border-radius: 16px 16px 0 0;\n}\n\n.header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 17px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.header-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 18px;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n\n.entity-badge[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 3px 10px;\n border-radius: 12px;\n margin-left: auto;\n margin-right: 8px;\n}\n\n\n.dialog-content[_ngcontent-%COMP%] {\n padding: 20px 24px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n\n.form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.form-group[_ngcontent-%COMP%] .optional[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%] {\n padding: 9px 12px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-input.invalid[_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n font-family: inherit;\n min-height: 50px;\n}\n\n.validation-error[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-status-error);\n}\n\n\n.checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n\n.checkbox-label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin-top: 3px;\n flex-shrink: 0;\n}\n\n.checkbox-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.checkbox-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.checkbox-text[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n\n.summary-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 14px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 10px;\n}\n\n.summary-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.summary-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.summary-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.summary-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n font-size: 12px;\n}\n\n.summary-item.smart-filter[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.summary-item.smart-filter[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n.advanced-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0;\n border: none;\n background: none;\n color: var(--mj-brand-primary);\n font-size: 13px;\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.advanced-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-color-info-600);\n text-decoration: underline;\n}\n\n\n.dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n border-radius: 0 0 16px 16px;\n}\n\n.footer-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n\n.btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 9px 20px;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-color-info-600);\n}\n\n.btn-primary[_ngcontent-%COMP%]:disabled {\n background: color-mix(in srgb, var(--mj-brand-primary) 50%, var(--mj-bg-surface));\n cursor: not-allowed;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n.btn-secondary[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-cancel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.btn-cancel[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-active);\n}"] });
343
397
  }
344
398
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QuickSaveDialogComponent, [{
345
399
  type: Component,
346
- args: [{ standalone: false, selector: 'mj-quick-save-dialog', template: "<!-- Dialog Backdrop -->\n@if (IsOpen) {\n <div class=\"dialog-backdrop\" (click)=\"OnClose()\"></div>\n}\n\n<!-- Dialog Panel -->\n<div class=\"dialog-panel\" [class.open]=\"IsOpen\">\n <!-- Header -->\n <div class=\"dialog-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-bookmark\"></i>\n <span>Save View</span>\n </div>\n @if (EntityName) {\n <span class=\"entity-badge\">{{ EntityName }}</span>\n }\n <button class=\"close-btn\" (click)=\"OnClose()\" title=\"Close\" aria-label=\"Close dialog\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"dialog-content\">\n <!-- Name Field -->\n <div class=\"form-group\">\n <label for=\"quickSaveName\">View Name</label>\n <input\n id=\"quickSaveName\"\n type=\"text\"\n class=\"form-input\"\n [class.invalid]=\"NameTouched && !Name.trim()\"\n placeholder=\"e.g., Active West Coast Contacts\"\n [(ngModel)]=\"Name\"\n (blur)=\"NameTouched = true\"\n (keydown.enter)=\"OnSave(false)\"\n />\n @if (NameTouched && !Name.trim()) {\n <span class=\"validation-error\">Name is required</span>\n }\n </div>\n\n <!-- Description Field -->\n <div class=\"form-group\">\n <label for=\"quickSaveDescription\">Description <span class=\"optional\">(optional)</span></label>\n <textarea\n id=\"quickSaveDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"What does this view show?\"\n [(ngModel)]=\"Description\"\n rows=\"2\"\n ></textarea>\n </div>\n\n <!-- Share Toggle -->\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" [(ngModel)]=\"IsShared\" />\n <span class=\"checkbox-text\">\n <strong>Share with others</strong>\n <small>Allow other users to use this view</small>\n </span>\n </label>\n\n <!-- View Summary Preview -->\n @if (Summary) {\n <div class=\"summary-section\">\n <div class=\"summary-header\">\n <i class=\"fa-solid fa-list-check\"></i>\n <span>View includes:</span>\n </div>\n <div class=\"summary-items\">\n <div class=\"summary-item\">\n <i class=\"fa-solid fa-columns\"></i>\n <span>{{ Summary.ColumnCount }} column{{ Summary.ColumnCount !== 1 ? 's' : '' }}</span>\n </div>\n @if (Summary.SortCount > 0) {\n <div class=\"summary-item\">\n <i class=\"fa-solid fa-arrow-up-wide-short\"></i>\n <span>{{ Summary.SortCount }} sort level{{ Summary.SortCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (Summary.SmartFilterActive) {\n <div class=\"summary-item smart-filter\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Smart filter: \"{{ Summary.SmartFilterPrompt }}\"</span>\n </div>\n }\n @if (Summary.FilterCount > 0) {\n <div class=\"summary-item\">\n <i class=\"fa-solid fa-filter\"></i>\n <span>{{ Summary.FilterCount }} filter{{ Summary.FilterCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (Summary.AggregateCount > 0) {\n <div class=\"summary-item\">\n <i class=\"fa-solid fa-chart-simple\"></i>\n <span>{{ Summary.AggregateCount }} aggregate{{ Summary.AggregateCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Advanced Link -->\n <button class=\"advanced-link\" (click)=\"OnOpenAdvanced()\">\n <i class=\"fa-solid fa-sliders\"></i>\n <span>Customize columns, filters & sorting...</span>\n </button>\n </div>\n\n <!-- Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-actions\">\n @if (ViewEntity) {\n <!-- Existing view: Update + Save As New -->\n <button\n class=\"btn btn-primary\"\n (click)=\"OnSave(false)\"\n [disabled]=\"!Name.trim() || IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n }\n {{ IsSaving ? 'Saving...' : 'Update' }}\n </button>\n <button\n class=\"btn btn-secondary\"\n (click)=\"OnSave(true)\"\n [disabled]=\"!Name.trim() || IsSaving\">\n <i class=\"fa-solid fa-plus\"></i>\n Save As New\n </button>\n } @else {\n <!-- New view: Create -->\n <button\n class=\"btn btn-primary\"\n (click)=\"OnSave(true)\"\n [disabled]=\"!Name.trim() || IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-plus\"></i>\n }\n {{ IsSaving ? 'Saving...' : 'Create View' }}\n </button>\n }\n </div>\n <button class=\"btn btn-cancel\" (click)=\"OnClose()\">\n Cancel\n </button>\n </div>\n</div>\n", styles: ["/* Dialog Backdrop */\n.dialog-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 2000;\n animation: fadeIn 0.2s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Dialog Panel */\n.dialog-panel {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.95);\n width: 480px;\n max-width: calc(100vw - 40px);\n max-height: calc(100vh - 60px);\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 2001;\n display: flex;\n flex-direction: column;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dialog-panel.open {\n opacity: 1;\n pointer-events: auto;\n transform: translate(-50%, -50%) scale(1);\n}\n\n/* Dialog Header */\n.dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 18px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n border-radius: 16px 16px 0 0;\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 17px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.header-title i {\n color: var(--mj-brand-primary);\n font-size: 18px;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n/* Entity Badge */\n.entity-badge {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 3px 10px;\n border-radius: 12px;\n margin-left: auto;\n margin-right: 8px;\n}\n\n/* Dialog Content */\n.dialog-content {\n padding: 20px 24px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* Form Groups */\n.form-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.form-group label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.form-group .optional {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input {\n padding: 9px 12px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-input.invalid {\n border-color: var(--mj-status-error);\n}\n\n.form-textarea {\n resize: vertical;\n font-family: inherit;\n min-height: 50px;\n}\n\n.validation-error {\n font-size: 12px;\n color: var(--mj-status-error);\n}\n\n/* Checkbox */\n.checkbox-label {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n\n.checkbox-label input[type=\"checkbox\"] {\n margin-top: 3px;\n flex-shrink: 0;\n}\n\n.checkbox-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.checkbox-text strong {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.checkbox-text small {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n/* Summary Section */\n.summary-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 14px;\n}\n\n.summary-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 10px;\n}\n\n.summary-header i {\n color: var(--mj-brand-primary);\n}\n\n.summary-items {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.summary-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.summary-item i {\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n font-size: 12px;\n}\n\n.summary-item.smart-filter {\n color: var(--mj-brand-primary);\n}\n\n.summary-item.smart-filter i {\n color: var(--mj-brand-primary);\n}\n\n/* Advanced Link */\n.advanced-link {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0;\n border: none;\n background: none;\n color: var(--mj-brand-primary);\n font-size: 13px;\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.advanced-link:hover {\n color: var(--mj-color-info-600);\n text-decoration: underline;\n}\n\n/* Dialog Footer */\n.dialog-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n border-radius: 0 0 16px 16px;\n}\n\n.footer-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n/* Buttons */\n.btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 9px 20px;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-color-info-600);\n}\n\n.btn-primary:disabled {\n background: color-mix(in srgb, var(--mj-brand-primary) 50%, var(--mj-bg-surface));\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n.btn-secondary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-cancel {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.btn-cancel:hover {\n background: var(--mj-bg-surface-active);\n}\n"] }]
400
+ args: [{ standalone: false, selector: 'mj-quick-save-dialog', template: "<!-- Dialog Backdrop -->\n@if (IsOpen) {\n <div class=\"dialog-backdrop\" (click)=\"OnClose()\"></div>\n}\n\n<!-- Dialog Panel -->\n<div class=\"dialog-panel\" [class.open]=\"IsOpen\">\n <!-- Header -->\n <div class=\"dialog-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-bookmark\"></i>\n <span>Save View</span>\n </div>\n @if (EntityName) {\n <span class=\"entity-badge\">{{ EntityName }}</span>\n }\n <button class=\"close-btn\" (click)=\"OnClose()\" title=\"Close\" aria-label=\"Close dialog\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"dialog-content\">\n <!-- Name Field -->\n <div class=\"form-group\">\n <label for=\"quickSaveName\">View Name</label>\n <input\n #nameInput\n id=\"quickSaveName\"\n type=\"text\"\n class=\"form-input\"\n [class.invalid]=\"NameTouched && !Name.trim()\"\n placeholder=\"e.g., Active West Coast Contacts\"\n [(ngModel)]=\"Name\"\n (blur)=\"NameTouched = true\"\n (keydown.enter)=\"OnSave(false)\"\n />\n @if (NameTouched && !Name.trim()) {\n <span class=\"validation-error\">Name is required</span>\n }\n </div>\n\n <!-- Description Field -->\n <div class=\"form-group\">\n <label for=\"quickSaveDescription\">Description <span class=\"optional\">(optional)</span></label>\n <textarea\n id=\"quickSaveDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"What does this view show?\"\n [(ngModel)]=\"Description\"\n rows=\"2\"\n ></textarea>\n </div>\n\n <!-- Share Toggle -->\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" [(ngModel)]=\"IsShared\" />\n <span class=\"checkbox-text\">\n <strong>Share with others</strong>\n <small>Allow other users to use this view</small>\n </span>\n </label>\n\n <!-- View Summary Preview -->\n @if (Summary) {\n <div class=\"summary-section\">\n <div class=\"summary-header\">\n <i class=\"fa-solid fa-list-check\"></i>\n <span>View includes:</span>\n </div>\n <div class=\"summary-items\">\n <div class=\"summary-item\">\n <i class=\"fa-solid fa-columns\"></i>\n <span>{{ Summary.ColumnCount }} column{{ Summary.ColumnCount !== 1 ? 's' : '' }}</span>\n </div>\n @if (Summary.SortCount > 0) {\n <div class=\"summary-item\">\n <i class=\"fa-solid fa-arrow-up-wide-short\"></i>\n <span>{{ Summary.SortCount }} sort level{{ Summary.SortCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (Summary.SmartFilterActive) {\n <div class=\"summary-item smart-filter\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Smart filter: \"{{ Summary.SmartFilterPrompt }}\"</span>\n </div>\n }\n @if (Summary.FilterCount > 0) {\n <div class=\"summary-item\">\n <i class=\"fa-solid fa-filter\"></i>\n <span>{{ Summary.FilterCount }} filter{{ Summary.FilterCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (Summary.AggregateCount > 0) {\n <div class=\"summary-item\">\n <i class=\"fa-solid fa-chart-simple\"></i>\n <span>{{ Summary.AggregateCount }} aggregate{{ Summary.AggregateCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Advanced Link -->\n <button class=\"advanced-link\" (click)=\"OnOpenAdvanced()\">\n <i class=\"fa-solid fa-sliders\"></i>\n <span>Customize columns, filters & sorting...</span>\n </button>\n </div>\n\n <!-- Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-actions\">\n @if (ViewEntity) {\n <!-- Existing view: Update + Save As New -->\n <button\n class=\"btn btn-primary\"\n (click)=\"OnSave(false)\"\n [disabled]=\"!Name.trim() || IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n }\n {{ IsSaving ? 'Saving...' : 'Update' }}\n </button>\n <button\n class=\"btn btn-secondary\"\n (click)=\"OnSave(true)\"\n [disabled]=\"!Name.trim() || IsSaving\">\n <i class=\"fa-solid fa-plus\"></i>\n Save As New\n </button>\n } @else {\n <!-- New view: Create -->\n <button\n class=\"btn btn-primary\"\n (click)=\"OnSave(true)\"\n [disabled]=\"!Name.trim() || IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-plus\"></i>\n }\n {{ IsSaving ? 'Saving...' : 'Create View' }}\n </button>\n }\n </div>\n <button class=\"btn btn-cancel\" (click)=\"OnClose()\">\n Cancel\n </button>\n </div>\n</div>\n", styles: ["/* Dialog Backdrop */\n.dialog-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 2000;\n animation: fadeIn 0.2s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Dialog Panel */\n.dialog-panel {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.95);\n width: 480px;\n max-width: calc(100vw - 40px);\n max-height: calc(100vh - 60px);\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 2001;\n display: flex;\n flex-direction: column;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dialog-panel.open {\n opacity: 1;\n pointer-events: auto;\n transform: translate(-50%, -50%) scale(1);\n}\n\n/* Dialog Header */\n.dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 18px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n border-radius: 16px 16px 0 0;\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 17px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.header-title i {\n color: var(--mj-brand-primary);\n font-size: 18px;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n/* Entity Badge */\n.entity-badge {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 3px 10px;\n border-radius: 12px;\n margin-left: auto;\n margin-right: 8px;\n}\n\n/* Dialog Content */\n.dialog-content {\n padding: 20px 24px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* Form Groups */\n.form-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.form-group label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.form-group .optional {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input {\n padding: 9px 12px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-input.invalid {\n border-color: var(--mj-status-error);\n}\n\n.form-textarea {\n resize: vertical;\n font-family: inherit;\n min-height: 50px;\n}\n\n.validation-error {\n font-size: 12px;\n color: var(--mj-status-error);\n}\n\n/* Checkbox */\n.checkbox-label {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n\n.checkbox-label input[type=\"checkbox\"] {\n margin-top: 3px;\n flex-shrink: 0;\n}\n\n.checkbox-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.checkbox-text strong {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.checkbox-text small {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n/* Summary Section */\n.summary-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 14px;\n}\n\n.summary-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 10px;\n}\n\n.summary-header i {\n color: var(--mj-brand-primary);\n}\n\n.summary-items {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.summary-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.summary-item i {\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n font-size: 12px;\n}\n\n.summary-item.smart-filter {\n color: var(--mj-brand-primary);\n}\n\n.summary-item.smart-filter i {\n color: var(--mj-brand-primary);\n}\n\n/* Advanced Link */\n.advanced-link {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0;\n border: none;\n background: none;\n color: var(--mj-brand-primary);\n font-size: 13px;\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.advanced-link:hover {\n color: var(--mj-color-info-600);\n text-decoration: underline;\n}\n\n/* Dialog Footer */\n.dialog-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n border-radius: 0 0 16px 16px;\n}\n\n.footer-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n/* Buttons */\n.btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 9px 20px;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-color-info-600);\n}\n\n.btn-primary:disabled {\n background: color-mix(in srgb, var(--mj-brand-primary) 50%, var(--mj-bg-surface));\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n.btn-secondary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-cancel {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.btn-cancel:hover {\n background: var(--mj-bg-surface-active);\n}\n"] }]
347
401
  }], () => [{ type: i0.ChangeDetectorRef }], { IsOpen: [{
348
402
  type: Input
349
403
  }], ViewEntity: [{
@@ -356,12 +410,17 @@ export class QuickSaveDialogComponent {
356
410
  type: Input
357
411
  }], DefaultSaveAsNew: [{
358
412
  type: Input
413
+ }], SuggestedName: [{
414
+ type: Input
359
415
  }], Save: [{
360
416
  type: Output
361
417
  }], Close: [{
362
418
  type: Output
363
419
  }], OpenAdvanced: [{
364
420
  type: Output
421
+ }], nameInput: [{
422
+ type: ViewChild,
423
+ args: ['nameInput']
365
424
  }] }); })();
366
425
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QuickSaveDialogComponent, { className: "QuickSaveDialogComponent", filePath: "src/lib/quick-save-dialog/quick-save-dialog.component.ts", lineNumber: 36 }); })();
367
426
  //# sourceMappingURL=quick-save-dialog.component.js.map