@memberjunction/ng-search 5.46.0 → 5.48.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.
@@ -23,27 +23,27 @@ const _forTrack4 = ($index, $item) => $item.SourceType;
23
23
  const _forTrack5 = ($index, $item) => $item.ID;
24
24
  function SearchOverlayComponent_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
25
25
  i0.ɵɵelementStart(0, "div", 6);
26
- i0.ɵɵelement(1, "i", 13);
26
+ i0.ɵɵelement(1, "i", 16);
27
27
  i0.ɵɵelementEnd();
28
28
  } }
29
- function SearchOverlayComponent_Conditional_0_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelementStart(0, "span", 14);
31
- i0.ɵɵelement(1, "i", 16);
29
+ function SearchOverlayComponent_Conditional_0_Conditional_13_Conditional_1_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelementStart(0, "span", 17);
31
+ i0.ɵɵelement(1, "i", 19);
32
32
  i0.ɵɵelementStart(2, "span");
33
33
  i0.ɵɵtext(3, "Searching\u2026");
34
34
  i0.ɵɵelementEnd()();
35
35
  } }
36
- function SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelement(0, "i", 18);
36
+ function SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelement(0, "i", 21);
38
38
  } }
39
- function SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelement(0, "i", 19);
39
+ function SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelement(0, "i", 22);
41
41
  } }
42
- function SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
43
- i0.ɵɵelementStart(0, "span", 22);
42
+ function SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
43
+ i0.ɵɵelementStart(0, "span", 25);
44
44
  i0.ɵɵtext(1);
45
45
  i0.ɵɵelementEnd();
46
- i0.ɵɵelementStart(2, "span", 21);
46
+ i0.ɵɵelementStart(2, "span", 24);
47
47
  i0.ɵɵtext(3);
48
48
  i0.ɵɵelementEnd();
49
49
  } if (rf & 2) {
@@ -54,8 +54,8 @@ function SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_5
54
54
  i0.ɵɵadvance(2);
55
55
  i0.ɵɵtextInterpolate(ctx_r1.FormatElapsedTime(p_r3.ElapsedMs));
56
56
  } }
57
- function SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
58
- i0.ɵɵelementStart(0, "span", 21);
57
+ function SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "span", 24);
59
59
  i0.ɵɵtext(1);
60
60
  i0.ɵɵelementEnd();
61
61
  } if (rf & 2) {
@@ -63,13 +63,13 @@ function SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_6
63
63
  i0.ɵɵadvance();
64
64
  i0.ɵɵtextInterpolate(p_r3.ErrorMessage);
65
65
  } }
66
- function SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Template(rf, ctx) { if (rf & 1) {
67
- i0.ɵɵelementStart(0, "span", 17);
68
- i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_1_Template, 1, 0, "i", 18)(2, SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_2_Template, 1, 0, "i", 19);
69
- i0.ɵɵelementStart(3, "span", 20);
66
+ function SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Template(rf, ctx) { if (rf & 1) {
67
+ i0.ɵɵelementStart(0, "span", 20);
68
+ i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Conditional_1_Template, 1, 0, "i", 21)(2, SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Conditional_2_Template, 1, 0, "i", 22);
69
+ i0.ɵɵelementStart(3, "span", 23);
70
70
  i0.ɵɵtext(4);
71
71
  i0.ɵɵelementEnd();
72
- i0.ɵɵconditionalCreate(5, SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_5_Template, 4, 2)(6, SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Conditional_6_Template, 2, 1, "span", 21);
72
+ i0.ɵɵconditionalCreate(5, SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Conditional_5_Template, 4, 2)(6, SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Conditional_6_Template, 2, 1, "span", 24);
73
73
  i0.ɵɵelementEnd();
74
74
  } if (rf & 2) {
75
75
  const p_r3 = ctx.$implicit;
@@ -81,10 +81,10 @@ function SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Template(rf,
81
81
  i0.ɵɵadvance();
82
82
  i0.ɵɵconditional(p_r3.State === "Completed" ? 5 : p_r3.ErrorMessage ? 6 : -1);
83
83
  } }
84
- function SearchOverlayComponent_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
85
- i0.ɵɵelementStart(0, "div", 9);
86
- i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_11_Conditional_1_Template, 4, 0, "span", 14);
87
- i0.ɵɵrepeaterCreate(2, SearchOverlayComponent_Conditional_0_Conditional_11_For_3_Template, 7, 7, "span", 15, _forTrack0);
84
+ function SearchOverlayComponent_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
85
+ i0.ɵɵelementStart(0, "div", 11);
86
+ i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_13_Conditional_1_Template, 4, 0, "span", 17);
87
+ i0.ɵɵrepeaterCreate(2, SearchOverlayComponent_Conditional_0_Conditional_13_For_3_Template, 7, 7, "span", 18, _forTrack0);
88
88
  i0.ɵɵelementEnd();
89
89
  } if (rf & 2) {
90
90
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -93,21 +93,21 @@ function SearchOverlayComponent_Conditional_0_Conditional_11_Template(rf, ctx) {
93
93
  i0.ɵɵadvance();
94
94
  i0.ɵɵrepeater(ctx_r1.StreamingProviders);
95
95
  } }
96
- function SearchOverlayComponent_Conditional_0_Conditional_12_For_2_For_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
96
+ function SearchOverlayComponent_Conditional_0_Conditional_14_For_2_For_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
97
97
  i0.ɵɵelement(0, "i");
98
98
  } if (rf & 2) {
99
99
  const option_r5 = i0.ɵɵnextContext().$implicit;
100
100
  i0.ɵɵclassMap(option_r5.Icon);
101
101
  } }
102
- function SearchOverlayComponent_Conditional_0_Conditional_12_For_2_For_1_Template(rf, ctx) { if (rf & 1) {
102
+ function SearchOverlayComponent_Conditional_0_Conditional_14_For_2_For_1_Template(rf, ctx) { if (rf & 1) {
103
103
  const _r4 = i0.ɵɵgetCurrentView();
104
- i0.ɵɵelementStart(0, "button", 25);
105
- i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_12_For_2_For_1_Template_button_click_0_listener() { const option_r5 = i0.ɵɵrestoreView(_r4).$implicit; const filter_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnFilterToggle(filter_r6.Category, option_r5.Value)); });
106
- i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_12_For_2_For_1_Conditional_1_Template, 1, 2, "i", 26);
104
+ i0.ɵɵelementStart(0, "button", 28);
105
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_14_For_2_For_1_Template_button_click_0_listener() { const option_r5 = i0.ɵɵrestoreView(_r4).$implicit; const filter_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnFilterToggle(filter_r6.Category, option_r5.Value)); });
106
+ i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_14_For_2_For_1_Conditional_1_Template, 1, 2, "i", 29);
107
107
  i0.ɵɵelementStart(2, "span");
108
108
  i0.ɵɵtext(3);
109
109
  i0.ɵɵelementEnd();
110
- i0.ɵɵelementStart(4, "span", 27);
110
+ i0.ɵɵelementStart(4, "span", 30);
111
111
  i0.ɵɵtext(5);
112
112
  i0.ɵɵelementEnd()();
113
113
  } if (rf & 2) {
@@ -122,24 +122,24 @@ function SearchOverlayComponent_Conditional_0_Conditional_12_For_2_For_1_Templat
122
122
  i0.ɵɵadvance(2);
123
123
  i0.ɵɵtextInterpolate(option_r5.Count);
124
124
  } }
125
- function SearchOverlayComponent_Conditional_0_Conditional_12_For_2_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵrepeaterCreate(0, SearchOverlayComponent_Conditional_0_Conditional_12_For_2_For_1_Template, 6, 5, "button", 24, _forTrack2);
125
+ function SearchOverlayComponent_Conditional_0_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
126
+ i0.ɵɵrepeaterCreate(0, SearchOverlayComponent_Conditional_0_Conditional_14_For_2_For_1_Template, 6, 5, "button", 27, _forTrack2);
127
127
  } if (rf & 2) {
128
128
  const filter_r6 = ctx.$implicit;
129
129
  i0.ɵɵrepeater(filter_r6.Options);
130
130
  } }
131
- function SearchOverlayComponent_Conditional_0_Conditional_12_Conditional_3_Template(rf, ctx) { if (rf & 1) {
131
+ function SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_3_Template(rf, ctx) { if (rf & 1) {
132
132
  const _r7 = i0.ɵɵgetCurrentView();
133
- i0.ɵɵelementStart(0, "button", 28);
134
- i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_12_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ClearAllFilters()); });
135
- i0.ɵɵelement(1, "i", 29);
133
+ i0.ɵɵelementStart(0, "button", 31);
134
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ClearAllFilters()); });
135
+ i0.ɵɵelement(1, "i", 32);
136
136
  i0.ɵɵtext(2, " Clear ");
137
137
  i0.ɵɵelementEnd();
138
138
  } }
139
- function SearchOverlayComponent_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
140
- i0.ɵɵelementStart(0, "div", 10);
141
- i0.ɵɵrepeaterCreate(1, SearchOverlayComponent_Conditional_0_Conditional_12_For_2_Template, 2, 0, null, null, _forTrack1);
142
- i0.ɵɵconditionalCreate(3, SearchOverlayComponent_Conditional_0_Conditional_12_Conditional_3_Template, 3, 0, "button", 23);
139
+ function SearchOverlayComponent_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
140
+ i0.ɵɵelementStart(0, "div", 12);
141
+ i0.ɵɵrepeaterCreate(1, SearchOverlayComponent_Conditional_0_Conditional_14_For_2_Template, 2, 0, null, null, _forTrack1);
142
+ i0.ɵɵconditionalCreate(3, SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_3_Template, 3, 0, "button", 26);
143
143
  i0.ɵɵelementEnd();
144
144
  } if (rf & 2) {
145
145
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -148,11 +148,11 @@ function SearchOverlayComponent_Conditional_0_Conditional_12_Template(rf, ctx) {
148
148
  i0.ɵɵadvance(2);
149
149
  i0.ɵɵconditional(ctx_r1.hasActiveFilters() ? 3 : -1);
150
150
  } }
151
- function SearchOverlayComponent_Conditional_0_Conditional_13_Conditional_1_Template(rf, ctx) { if (rf & 1) {
151
+ function SearchOverlayComponent_Conditional_0_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
152
152
  const _r8 = i0.ɵɵgetCurrentView();
153
- i0.ɵɵelementStart(0, "button", 31);
154
- i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_13_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnAgentCtaClick()); });
155
- i0.ɵɵelement(1, "i", 32);
153
+ i0.ɵɵelementStart(0, "button", 34);
154
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_15_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnAgentCtaClick()); });
155
+ i0.ɵɵelement(1, "i", 35);
156
156
  i0.ɵɵtext(2);
157
157
  i0.ɵɵelementEnd();
158
158
  } if (rf & 2) {
@@ -160,24 +160,24 @@ function SearchOverlayComponent_Conditional_0_Conditional_13_Conditional_1_Templ
160
160
  i0.ɵɵadvance(2);
161
161
  i0.ɵɵtextInterpolate1(" ", ctx_r1.AgentCtaText, " ");
162
162
  } }
163
- function SearchOverlayComponent_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
164
- i0.ɵɵelementStart(0, "mj-empty-state", 11);
165
- i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_13_Conditional_1_Template, 3, 1, "button", 30);
163
+ function SearchOverlayComponent_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
164
+ i0.ɵɵelementStart(0, "mj-empty-state", 13);
165
+ i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_15_Conditional_1_Template, 3, 1, "button", 33);
166
166
  i0.ɵɵelementEnd();
167
167
  } if (rf & 2) {
168
168
  const ctx_r1 = i0.ɵɵnextContext(2);
169
169
  i0.ɵɵadvance();
170
170
  i0.ɵɵconditional(ctx_r1.ShowAgentCta ? 1 : -1);
171
171
  } }
172
- function SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_1_For_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
172
+ function SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_1_For_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
173
173
  const _r9 = i0.ɵɵgetCurrentView();
174
- i0.ɵɵelementStart(0, "div", 37);
175
- i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_1_For_4_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r9); const recent_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnQueryInput(recent_r10.Query)); });
176
- i0.ɵɵelement(1, "i", 38);
174
+ i0.ɵɵelementStart(0, "div", 40);
175
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_1_For_4_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r9); const recent_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRecentSelect(recent_r10.Query)); })("keydown", function SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_1_For_4_Conditional_0_Template_div_keydown_0_listener($event) { i0.ɵɵrestoreView(_r9); const recent_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRecentKeydown($event, recent_r10.Query)); });
176
+ i0.ɵɵelement(1, "i", 41);
177
177
  i0.ɵɵelementStart(2, "span");
178
178
  i0.ɵɵtext(3);
179
179
  i0.ɵɵelementEnd();
180
- i0.ɵɵelementStart(4, "span", 39);
180
+ i0.ɵɵelementStart(4, "span", 42);
181
181
  i0.ɵɵtext(5);
182
182
  i0.ɵɵelementEnd()();
183
183
  } if (rf & 2) {
@@ -187,118 +187,119 @@ function SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_1_For_4
187
187
  i0.ɵɵadvance(2);
188
188
  i0.ɵɵtextInterpolate1("", recent_r10.ResultCount, " results");
189
189
  } }
190
- function SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_1_For_4_Template(rf, ctx) { if (rf & 1) {
191
- i0.ɵɵconditionalCreate(0, SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_1_For_4_Conditional_0_Template, 6, 2, "div", 36);
190
+ function SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_1_For_4_Template(rf, ctx) { if (rf & 1) {
191
+ i0.ɵɵconditionalCreate(0, SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_1_For_4_Conditional_0_Template, 6, 2, "div", 39);
192
192
  } if (rf & 2) {
193
- const ɵ$index_98_r11 = ctx.$index;
194
- i0.ɵɵconditional(ɵ$index_98_r11 < 5 ? 0 : -1);
193
+ const ɵ$index_102_r11 = ctx.$index;
194
+ i0.ɵɵconditional(ɵ$index_102_r11 < 5 ? 0 : -1);
195
195
  } }
196
- function SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
197
- i0.ɵɵelementStart(0, "div", 34)(1, "span", 35);
196
+ function SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
197
+ i0.ɵɵelementStart(0, "div", 37)(1, "span", 38);
198
198
  i0.ɵɵtext(2, "Recent Searches");
199
199
  i0.ɵɵelementEnd()();
200
- i0.ɵɵrepeaterCreate(3, SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_1_For_4_Template, 1, 1, null, null, _forTrack3);
200
+ i0.ɵɵrepeaterCreate(3, SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_1_For_4_Template, 1, 1, null, null, _forTrack3);
201
201
  } if (rf & 2) {
202
202
  const ctx_r1 = i0.ɵɵnextContext(3);
203
203
  i0.ɵɵadvance(3);
204
204
  i0.ɵɵrepeater(ctx_r1.searchService.RecentSearches$.value);
205
205
  } }
206
- function SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_2_Template(rf, ctx) { if (rf & 1) {
207
- i0.ɵɵelement(0, "mj-empty-state", 33);
206
+ function SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_2_Template(rf, ctx) { if (rf & 1) {
207
+ i0.ɵɵelement(0, "mj-empty-state", 36);
208
208
  } }
209
- function SearchOverlayComponent_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
210
- i0.ɵɵelementStart(0, "div", 12);
211
- i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_1_Template, 5, 0)(2, SearchOverlayComponent_Conditional_0_Conditional_14_Conditional_2_Template, 1, 0, "mj-empty-state", 33);
209
+ function SearchOverlayComponent_Conditional_0_Conditional_16_Template(rf, ctx) { if (rf & 1) {
210
+ i0.ɵɵelementStart(0, "div", 14);
211
+ i0.ɵɵconditionalCreate(1, SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_1_Template, 5, 0)(2, SearchOverlayComponent_Conditional_0_Conditional_16_Conditional_2_Template, 1, 0, "mj-empty-state", 36);
212
212
  i0.ɵɵelementEnd();
213
213
  } if (rf & 2) {
214
214
  const ctx_r1 = i0.ɵɵnextContext(2);
215
215
  i0.ɵɵadvance();
216
216
  i0.ɵɵconditional(ctx_r1.searchService.RecentSearches$.value.length > 0 ? 1 : 2);
217
217
  } }
218
- function SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Conditional_8_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
219
- i0.ɵɵelementStart(0, "span", 56);
218
+ function SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Conditional_8_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
219
+ i0.ɵɵelementStart(0, "span", 63);
220
220
  i0.ɵɵtext(1);
221
221
  i0.ɵɵelementEnd();
222
222
  } if (rf & 2) {
223
- const tag_r14 = i0.ɵɵnextContext().$implicit;
223
+ const tag_r15 = i0.ɵɵnextContext().$implicit;
224
224
  i0.ɵɵadvance();
225
- i0.ɵɵtextInterpolate(tag_r14);
225
+ i0.ɵɵtextInterpolate(tag_r15);
226
226
  } }
227
- function SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
228
- i0.ɵɵconditionalCreate(0, SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Conditional_8_For_2_Conditional_0_Template, 2, 1, "span", 56);
227
+ function SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵconditionalCreate(0, SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Conditional_8_For_2_Conditional_0_Template, 2, 1, "span", 63);
229
229
  } if (rf & 2) {
230
- const ɵ$index_145_r15 = ctx.$index;
231
- i0.ɵɵconditional(ɵ$index_145_r15 < 3 ? 0 : -1);
230
+ const ɵ$index_151_r16 = ctx.$index;
231
+ i0.ɵɵconditional(ɵ$index_151_r16 < 3 ? 0 : -1);
232
232
  } }
233
- function SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Conditional_8_Template(rf, ctx) { if (rf & 1) {
234
- i0.ɵɵelementStart(0, "div", 53);
235
- i0.ɵɵrepeaterCreate(1, SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Conditional_8_For_2_Template, 1, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);
233
+ function SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Conditional_8_Template(rf, ctx) { if (rf & 1) {
234
+ i0.ɵɵelementStart(0, "div", 60);
235
+ i0.ɵɵrepeaterCreate(1, SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Conditional_8_For_2_Template, 1, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);
236
236
  i0.ɵɵelementEnd();
237
237
  } if (rf & 2) {
238
- const result_r13 = i0.ɵɵnextContext().$implicit;
238
+ const result_r14 = i0.ɵɵnextContext().$implicit;
239
239
  i0.ɵɵadvance();
240
- i0.ɵɵrepeater(result_r13.Tags);
240
+ i0.ɵɵrepeater(result_r14.Tags);
241
241
  } }
242
- function SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Template(rf, ctx) { if (rf & 1) {
243
- const _r12 = i0.ɵɵgetCurrentView();
244
- i0.ɵɵelementStart(0, "div", 48);
245
- i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Template_div_click_0_listener($event) { const result_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnResultClick(result_r13, $event)); })("mouseenter", function SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Template_div_mouseenter_0_listener() { const result_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.HighlightedIndex = ctx_r1.getFlatIndex(result_r13)); });
246
- i0.ɵɵelementStart(1, "div", 49);
242
+ function SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Template(rf, ctx) { if (rf & 1) {
243
+ const _r13 = i0.ɵɵgetCurrentView();
244
+ i0.ɵɵelementStart(0, "div", 55);
245
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Template_div_click_0_listener($event) { const result_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnResultClick(result_r14, $event)); })("focus", function SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Template_div_focus_0_listener() { const result_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.HighlightedIndex = ctx_r1.getFlatIndex(result_r14)); })("mouseenter", function SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Template_div_mouseenter_0_listener() { const result_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.HighlightedIndex = ctx_r1.getFlatIndex(result_r14)); });
246
+ i0.ɵɵelementStart(1, "div", 56);
247
247
  i0.ɵɵelement(2, "i");
248
248
  i0.ɵɵelementEnd();
249
- i0.ɵɵelementStart(3, "div", 50)(4, "div", 51);
249
+ i0.ɵɵelementStart(3, "div", 57)(4, "div", 58);
250
250
  i0.ɵɵtext(5);
251
251
  i0.ɵɵelementEnd();
252
- i0.ɵɵelementStart(6, "div", 52);
252
+ i0.ɵɵelementStart(6, "div", 59);
253
253
  i0.ɵɵtext(7);
254
254
  i0.ɵɵelementEnd();
255
- i0.ɵɵconditionalCreate(8, SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Conditional_8_Template, 3, 0, "div", 53);
255
+ i0.ɵɵconditionalCreate(8, SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Conditional_8_Template, 3, 0, "div", 60);
256
256
  i0.ɵɵelementEnd();
257
- i0.ɵɵelementStart(9, "div", 54)(10, "span", 55);
257
+ i0.ɵɵelementStart(9, "div", 61)(10, "span", 62);
258
258
  i0.ɵɵtext(11);
259
259
  i0.ɵɵelementEnd()()();
260
260
  } if (rf & 2) {
261
- const result_r13 = ctx.$implicit;
261
+ const result_r14 = ctx.$implicit;
262
262
  const ctx_r1 = i0.ɵɵnextContext(4);
263
- i0.ɵɵclassProp("result-item-highlighted", ctx_r1.isResultHighlighted(result_r13));
263
+ i0.ɵɵclassProp("result-item-highlighted", ctx_r1.isResultHighlighted(result_r14));
264
+ i0.ɵɵattribute("id", "so-opt-" + ctx_r1.getFlatIndex(result_r14))("tabindex", ctx_r1.isResultHighlighted(result_r14) ? 0 : -1)("aria-selected", ctx_r1.isResultHighlighted(result_r14));
264
265
  i0.ɵɵadvance(2);
265
- i0.ɵɵclassMap(result_r13.SourceIcon);
266
+ i0.ɵɵclassMap(result_r14.SourceIcon);
266
267
  i0.ɵɵadvance(3);
267
- i0.ɵɵtextInterpolate(result_r13.Title);
268
+ i0.ɵɵtextInterpolate(result_r14.Title);
268
269
  i0.ɵɵadvance(2);
269
- i0.ɵɵtextInterpolate(result_r13.Snippet);
270
+ i0.ɵɵtextInterpolate(result_r14.Snippet);
270
271
  i0.ɵɵadvance();
271
- i0.ɵɵconditional(result_r13.Tags.length > 0 ? 8 : -1);
272
+ i0.ɵɵconditional(result_r14.Tags.length > 0 ? 8 : -1);
272
273
  i0.ɵɵadvance(3);
273
- i0.ɵɵtextInterpolate(ctx_r1.FormatScore(result_r13.Score));
274
+ i0.ɵɵtextInterpolate(ctx_r1.FormatScore(result_r14.Score));
274
275
  } }
275
- function SearchOverlayComponent_Conditional_0_Conditional_15_For_1_Template(rf, ctx) { if (rf & 1) {
276
- i0.ɵɵelementStart(0, "div", 40)(1, "div", 44);
276
+ function SearchOverlayComponent_Conditional_0_Conditional_17_For_2_Template(rf, ctx) { if (rf & 1) {
277
+ i0.ɵɵelementStart(0, "div", 44)(1, "div", 51);
277
278
  i0.ɵɵelement(2, "i");
278
- i0.ɵɵelementStart(3, "span", 45);
279
+ i0.ɵɵelementStart(3, "span", 52);
279
280
  i0.ɵɵtext(4);
280
281
  i0.ɵɵelementEnd();
281
- i0.ɵɵelementStart(5, "span", 46);
282
+ i0.ɵɵelementStart(5, "span", 53);
282
283
  i0.ɵɵtext(6);
283
284
  i0.ɵɵelementEnd()();
284
- i0.ɵɵrepeaterCreate(7, SearchOverlayComponent_Conditional_0_Conditional_15_For_1_For_8_Template, 12, 8, "div", 47, _forTrack5);
285
+ i0.ɵɵrepeaterCreate(7, SearchOverlayComponent_Conditional_0_Conditional_17_For_2_For_8_Template, 12, 11, "div", 54, _forTrack5);
285
286
  i0.ɵɵelementEnd();
286
287
  } if (rf & 2) {
287
- const group_r16 = ctx.$implicit;
288
+ const group_r17 = ctx.$implicit;
288
289
  i0.ɵɵadvance(2);
289
- i0.ɵɵclassMap(group_r16.Icon);
290
+ i0.ɵɵclassMap(group_r17.Icon);
290
291
  i0.ɵɵadvance(2);
291
- i0.ɵɵtextInterpolate(group_r16.Label);
292
+ i0.ɵɵtextInterpolate(group_r17.Label);
292
293
  i0.ɵɵadvance(2);
293
- i0.ɵɵtextInterpolate(group_r16.TotalCount);
294
+ i0.ɵɵtextInterpolate(group_r17.TotalCount);
294
295
  i0.ɵɵadvance();
295
- i0.ɵɵrepeater(group_r16.Results);
296
+ i0.ɵɵrepeater(group_r17.Results);
296
297
  } }
297
- function SearchOverlayComponent_Conditional_0_Conditional_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
298
- const _r17 = i0.ɵɵgetCurrentView();
299
- i0.ɵɵelementStart(0, "button", 57);
300
- i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_15_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnAgentCtaClick()); });
301
- i0.ɵɵelement(1, "i", 32);
298
+ function SearchOverlayComponent_Conditional_0_Conditional_17_Conditional_10_Template(rf, ctx) { if (rf & 1) {
299
+ const _r18 = i0.ɵɵgetCurrentView();
300
+ i0.ɵɵelementStart(0, "button", 64);
301
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_17_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnAgentCtaClick()); });
302
+ i0.ɵɵelement(1, "i", 35);
302
303
  i0.ɵɵtext(2);
303
304
  i0.ɵɵelementEnd();
304
305
  } if (rf & 2) {
@@ -306,20 +307,51 @@ function SearchOverlayComponent_Conditional_0_Conditional_15_Conditional_5_Templ
306
307
  i0.ɵɵadvance(2);
307
308
  i0.ɵɵtextInterpolate1(" ", ctx_r1.AgentCtaText, " ");
308
309
  } }
309
- function SearchOverlayComponent_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
310
- i0.ɵɵrepeaterCreate(0, SearchOverlayComponent_Conditional_0_Conditional_15_For_1_Template, 9, 4, "div", 40, _forTrack4);
311
- i0.ɵɵelementStart(2, "div", 41)(3, "span", 42);
312
- i0.ɵɵtext(4);
310
+ function SearchOverlayComponent_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
311
+ const _r12 = i0.ɵɵgetCurrentView();
312
+ i0.ɵɵelementStart(0, "div", 43);
313
+ i0.ɵɵrepeaterCreate(1, SearchOverlayComponent_Conditional_0_Conditional_17_For_2_Template, 9, 4, "div", 44, _forTrack4);
313
314
  i0.ɵɵelementEnd();
314
- i0.ɵɵconditionalCreate(5, SearchOverlayComponent_Conditional_0_Conditional_15_Conditional_5_Template, 3, 1, "button", 43);
315
+ i0.ɵɵelementStart(3, "div", 45)(4, "span", 46);
316
+ i0.ɵɵtext(5);
317
+ i0.ɵɵelementEnd();
318
+ i0.ɵɵelementStart(6, "div", 47)(7, "button", 48);
319
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_17_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSeeAllClick()); });
320
+ i0.ɵɵtext(8, " See all results ");
321
+ i0.ɵɵelement(9, "i", 49);
315
322
  i0.ɵɵelementEnd();
323
+ i0.ɵɵconditionalCreate(10, SearchOverlayComponent_Conditional_0_Conditional_17_Conditional_10_Template, 3, 1, "button", 50);
324
+ i0.ɵɵelementEnd()();
316
325
  } if (rf & 2) {
317
326
  const ctx_r1 = i0.ɵɵnextContext(2);
327
+ i0.ɵɵadvance();
318
328
  i0.ɵɵrepeater(ctx_r1.ResultGroups);
319
329
  i0.ɵɵadvance(4);
320
330
  i0.ɵɵtextInterpolate2(" ", ctx_r1.TotalCount, " results in ", ctx_r1.FormatElapsedTime(ctx_r1.ElapsedMs), " ");
321
- i0.ɵɵadvance();
322
- i0.ɵɵconditional(ctx_r1.ShowAgentCta ? 5 : -1);
331
+ i0.ɵɵadvance(5);
332
+ i0.ɵɵconditional(ctx_r1.ShowAgentCta ? 10 : -1);
333
+ } }
334
+ function SearchOverlayComponent_Conditional_0_Conditional_18_Template(rf, ctx) { if (rf & 1) {
335
+ const _r19 = i0.ɵɵgetCurrentView();
336
+ i0.ɵɵelementStart(0, "div", 15);
337
+ i0.ɵɵelement(1, "i", 65);
338
+ i0.ɵɵelementStart(2, "span", 66);
339
+ i0.ɵɵtext(3);
340
+ i0.ɵɵelementEnd();
341
+ i0.ɵɵelementStart(4, "button", 67);
342
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_18_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnPromoAccept()); });
343
+ i0.ɵɵtext(5);
344
+ i0.ɵɵelementEnd();
345
+ i0.ɵɵelementStart(6, "button", 68);
346
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Conditional_18_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnPromoDismiss()); });
347
+ i0.ɵɵelement(7, "i", 9);
348
+ i0.ɵɵelementEnd()();
349
+ } if (rf & 2) {
350
+ const ctx_r1 = i0.ɵɵnextContext(2);
351
+ i0.ɵɵadvance(3);
352
+ i0.ɵɵtextInterpolate(ctx_r1.PromoText);
353
+ i0.ɵɵadvance(2);
354
+ i0.ɵɵtextInterpolate(ctx_r1.PromoActionLabel);
323
355
  } }
324
356
  function SearchOverlayComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
325
357
  const _r1 = i0.ɵɵgetCurrentView();
@@ -327,7 +359,7 @@ function SearchOverlayComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
327
359
  i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnBackdropClick()); });
328
360
  i0.ɵɵelementEnd();
329
361
  i0.ɵɵelementStart(1, "div", 2);
330
- i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
362
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); })("keydown", function SearchOverlayComponent_Conditional_0_Template_div_keydown_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSpotlightKeydown($event)); });
331
363
  i0.ɵɵelementStart(2, "div", 3);
332
364
  i0.ɵɵelement(3, "i", 4);
333
365
  i0.ɵɵelementStart(4, "input", 5, 0);
@@ -336,30 +368,39 @@ function SearchOverlayComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
336
368
  i0.ɵɵconditionalCreate(6, SearchOverlayComponent_Conditional_0_Conditional_6_Template, 2, 0, "div", 6);
337
369
  i0.ɵɵelementStart(7, "div", 7)(8, "kbd");
338
370
  i0.ɵɵtext(9, "ESC");
339
- i0.ɵɵelementEnd()()();
340
- i0.ɵɵelementStart(10, "div", 8);
341
- i0.ɵɵconditionalCreate(11, SearchOverlayComponent_Conditional_0_Conditional_11_Template, 4, 1, "div", 9);
342
- i0.ɵɵconditionalCreate(12, SearchOverlayComponent_Conditional_0_Conditional_12_Template, 4, 1, "div", 10);
343
- i0.ɵɵconditionalCreate(13, SearchOverlayComponent_Conditional_0_Conditional_13_Template, 2, 1, "mj-empty-state", 11);
344
- i0.ɵɵconditionalCreate(14, SearchOverlayComponent_Conditional_0_Conditional_14_Template, 3, 1, "div", 12);
345
- i0.ɵɵconditionalCreate(15, SearchOverlayComponent_Conditional_0_Conditional_15_Template, 6, 3);
346
371
  i0.ɵɵelementEnd()();
372
+ i0.ɵɵelementStart(10, "button", 8);
373
+ i0.ɵɵlistener("click", function SearchOverlayComponent_Conditional_0_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Close()); });
374
+ i0.ɵɵelement(11, "i", 9);
375
+ i0.ɵɵelementEnd()();
376
+ i0.ɵɵelementStart(12, "div", 10);
377
+ i0.ɵɵconditionalCreate(13, SearchOverlayComponent_Conditional_0_Conditional_13_Template, 4, 1, "div", 11);
378
+ i0.ɵɵconditionalCreate(14, SearchOverlayComponent_Conditional_0_Conditional_14_Template, 4, 1, "div", 12);
379
+ i0.ɵɵconditionalCreate(15, SearchOverlayComponent_Conditional_0_Conditional_15_Template, 2, 1, "mj-empty-state", 13);
380
+ i0.ɵɵconditionalCreate(16, SearchOverlayComponent_Conditional_0_Conditional_16_Template, 3, 1, "div", 14);
381
+ i0.ɵɵconditionalCreate(17, SearchOverlayComponent_Conditional_0_Conditional_17_Template, 11, 3);
382
+ i0.ɵɵelementEnd();
383
+ i0.ɵɵconditionalCreate(18, SearchOverlayComponent_Conditional_0_Conditional_18_Template, 8, 2, "div", 15);
384
+ i0.ɵɵelementEnd();
347
385
  } if (rf & 2) {
348
386
  const ctx_r1 = i0.ɵɵnextContext();
349
387
  i0.ɵɵadvance(4);
350
388
  i0.ɵɵproperty("placeholder", ctx_r1.Placeholder)("value", ctx_r1.Query);
389
+ i0.ɵɵattribute("aria-expanded", ctx_r1.AllResults.length > 0)("aria-activedescendant", ctx_r1.ActiveDescendantId);
351
390
  i0.ɵɵadvance(2);
352
391
  i0.ɵɵconditional(ctx_r1.IsSearching ? 6 : -1);
353
- i0.ɵɵadvance(5);
354
- i0.ɵɵconditional(ctx_r1.EnableStreaming && (ctx_r1.IsSearching || ctx_r1.StreamingProviders.length > 0) ? 11 : -1);
392
+ i0.ɵɵadvance(7);
393
+ i0.ɵɵconditional(ctx_r1.EnableStreaming && (ctx_r1.IsSearching || ctx_r1.StreamingProviders.length > 0) ? 13 : -1);
355
394
  i0.ɵɵadvance();
356
- i0.ɵɵconditional(ctx_r1.ShowFilters && ctx_r1.Filters.length > 0 ? 12 : -1);
395
+ i0.ɵɵconditional(ctx_r1.ShowFilters && ctx_r1.Filters.length > 0 ? 14 : -1);
357
396
  i0.ɵɵadvance();
358
- i0.ɵɵconditional(ctx_r1.HasSearched && ctx_r1.AllResults.length === 0 && !ctx_r1.IsSearching ? 13 : -1);
397
+ i0.ɵɵconditional(ctx_r1.HasSearched && ctx_r1.AllResults.length === 0 && !ctx_r1.IsSearching ? 15 : -1);
359
398
  i0.ɵɵadvance();
360
- i0.ɵɵconditional(!ctx_r1.HasSearched && !ctx_r1.IsSearching ? 14 : -1);
399
+ i0.ɵɵconditional(!ctx_r1.HasSearched && !ctx_r1.IsSearching ? 16 : -1);
361
400
  i0.ɵɵadvance();
362
- i0.ɵɵconditional(ctx_r1.AllResults.length > 0 ? 15 : -1);
401
+ i0.ɵɵconditional(ctx_r1.AllResults.length > 0 ? 17 : -1);
402
+ i0.ɵɵadvance();
403
+ i0.ɵɵconditional(ctx_r1.ShowPromo && ctx_r1.PromoText ? 18 : -1);
363
404
  } }
364
405
  export class SearchOverlayComponent {
365
406
  cdr = inject(ChangeDetectorRef);
@@ -370,8 +411,14 @@ export class SearchOverlayComponent {
370
411
  // --- Configuration Inputs ---
371
412
  /** Placeholder text for the search input */
372
413
  Placeholder = 'Search across all your knowledge...';
373
- /** Maximum number of results to fetch */
374
- MaxResults = 25;
414
+ /**
415
+ * Maximum number of results to fetch and display. Deliberately small — the
416
+ * overlay is a quick-jump surface; "See all results" hands off to the full
417
+ * Search Results workspace for anything deeper. 8 matches the omnibar
418
+ * palette's RESULT count (it fetches 9 rows = 8 results + its see-all row;
419
+ * this overlay's see-all is a footer button, not a row).
420
+ */
421
+ MaxResults = 8;
375
422
  /** Whether the overlay is currently visible */
376
423
  _IsOpen = false;
377
424
  set IsOpen(value) {
@@ -404,12 +451,41 @@ export class SearchOverlayComponent {
404
451
  * Defaults to false to preserve the request-response UX that shipped in Phase 1.
405
452
  */
406
453
  EnableStreaming = false;
454
+ /**
455
+ * When false, the overlay does NOT claim the global Ctrl/Cmd+K chord. For hosts
456
+ * (e.g. the Explorer shell) that own that shortcut themselves and open the
457
+ * overlay programmatically — two listeners on the same chord would double-toggle.
458
+ * Escape/arrow handling while open is unaffected.
459
+ */
460
+ EnableGlobalShortcut = true;
461
+ /**
462
+ * Optional promo strip pinned to the overlay's bottom edge — a host-supplied
463
+ * nudge (e.g. Explorer advertising its command palette). The component is
464
+ * deliberately ignorant of WHAT is being promoted; the host provides the
465
+ * copy and handles both outcomes.
466
+ */
467
+ ShowPromo = false;
468
+ /** Promo copy (one sentence). Required when ShowPromo is true. */
469
+ PromoText = '';
470
+ /** Label for the promo's accept action. */
471
+ PromoActionLabel = 'Turn on';
407
472
  // --- Outputs ---
408
473
  IsOpenChange = new EventEmitter();
409
474
  ResultSelected = new EventEmitter();
410
475
  FilterChanged = new EventEmitter();
411
476
  SearchExecuted = new EventEmitter();
412
477
  AgentCtaClicked = new EventEmitter();
478
+ /**
479
+ * Emitted when the user clicks "See all results" — carries the current query.
480
+ * Hosts (e.g. the Explorer shell) open the full Search Results workspace,
481
+ * which has scopes, relevance controls, and richer result actions than this
482
+ * capped quick-jump overlay. The overlay closes itself after emitting.
483
+ */
484
+ SeeAllRequested = new EventEmitter();
485
+ /** Promo accept — carries the current query so the host can hand it off. */
486
+ PromoAccepted = new EventEmitter();
487
+ /** Promo dismissed — the host should persist this and stop showing it. */
488
+ PromoDismissed = new EventEmitter();
413
489
  // --- Component State ---
414
490
  Query = '';
415
491
  IsSearching = false;
@@ -430,10 +506,18 @@ export class SearchOverlayComponent {
430
506
  StreamingProviders = [];
431
507
  /** Active stream subscription so we can cancel on a new search or destroy. */
432
508
  currentStream = null;
509
+ /** Element focused before the overlay opened — restored on close (a11y). */
510
+ previousFocus = null;
433
511
  /** All results flattened for keyboard navigation */
434
512
  get FlatResults() {
435
513
  return this.AllResults;
436
514
  }
515
+ /** id of the highlighted option, announced via aria-activedescendant. */
516
+ get ActiveDescendantId() {
517
+ return this.HighlightedIndex >= 0 && this.HighlightedIndex < this.FlatResults.length
518
+ ? `so-opt-${this.HighlightedIndex}`
519
+ : null;
520
+ }
437
521
  ngOnInit() {
438
522
  this.setupSearchDebounce();
439
523
  this.subscribeToSearchState();
@@ -446,7 +530,7 @@ export class SearchOverlayComponent {
446
530
  }
447
531
  // --- Keyboard shortcuts ---
448
532
  HandleGlobalKeydown(event) {
449
- if (this.isToggleShortcut(event)) {
533
+ if (this.EnableGlobalShortcut && this.isToggleShortcut(event)) {
450
534
  event.preventDefault();
451
535
  this.ToggleOverlay();
452
536
  return;
@@ -521,6 +605,24 @@ export class SearchOverlayComponent {
521
605
  this.AgentCtaClicked.emit(this.Query);
522
606
  this.Close();
523
607
  }
608
+ /** Promo accept: emit the current query and close — the host takes over. */
609
+ OnPromoAccept() {
610
+ this.PromoAccepted.emit(this.Query.trim());
611
+ this.Close();
612
+ }
613
+ /** Promo dismiss: the host persists the dismissal; hide it immediately. */
614
+ OnPromoDismiss() {
615
+ this.ShowPromo = false;
616
+ this.PromoDismissed.emit();
617
+ }
618
+ /** Handle clicking "See all results" — hand off to the full Search workspace */
619
+ OnSeeAllClick() {
620
+ const query = this.Query.trim();
621
+ if (query.length > 0) {
622
+ this.SeeAllRequested.emit(query);
623
+ }
624
+ this.Close();
625
+ }
524
626
  /** Handle clicking the backdrop to close */
525
627
  OnBackdropClick() {
526
628
  this.Close();
@@ -558,16 +660,32 @@ export class SearchOverlayComponent {
558
660
  event.preventDefault();
559
661
  this.moveHighlight(-1);
560
662
  break;
561
- case 'Enter':
663
+ case 'Enter': {
664
+ // Only claim Enter when it belongs to the combobox model (typing in
665
+ // the input / a focused result row). A focused BUTTON (close,
666
+ // see-all, filter chip, promo) must keep its native Enter
667
+ // activation — preventDefault here at document level would
668
+ // silently swallow it, or worse, open the highlighted result.
669
+ const active = document.activeElement;
670
+ const inCombobox = active === this.searchInputRef?.nativeElement
671
+ || (active?.classList.contains('result-item') ?? false);
672
+ if (!inCombobox) {
673
+ return;
674
+ }
562
675
  event.preventDefault();
563
676
  this.SelectHighlighted();
564
677
  break;
678
+ }
565
679
  }
566
680
  }
567
681
  moveHighlight(direction) {
568
682
  const maxIndex = this.FlatResults.length - 1;
569
683
  if (maxIndex < 0)
570
684
  return;
685
+ // If a result row currently holds DOM focus (roving tabindex), keep focus
686
+ // travelling with the highlight; from the input, only the highlight moves.
687
+ const rowHadFocus = document.activeElement instanceof HTMLElement
688
+ && document.activeElement.classList.contains('result-item');
571
689
  this.HighlightedIndex += direction;
572
690
  if (this.HighlightedIndex < 0) {
573
691
  this.HighlightedIndex = maxIndex;
@@ -576,6 +694,76 @@ export class SearchOverlayComponent {
576
694
  this.HighlightedIndex = 0;
577
695
  }
578
696
  this.cdr.detectChanges();
697
+ // Keyboard-driven moves keep the highlighted row visible. Mouse hover sets
698
+ // HighlightedIndex directly in the template and deliberately does NOT
699
+ // scroll — auto-scrolling under the pointer fights the user's hand.
700
+ const row = document.getElementById(`so-opt-${this.HighlightedIndex}`);
701
+ row?.scrollIntoView({ block: 'nearest' });
702
+ if (rowHadFocus) {
703
+ row?.focus();
704
+ }
705
+ }
706
+ /**
707
+ * Tab behavior inside the dialog:
708
+ * - On a result row, Tab / Shift+Tab step through the RESULTS themselves
709
+ * (mirrors ArrowDown/Up) until walking off either end of the list — then
710
+ * focus continues to the footer actions / back to the earlier controls.
711
+ * - Everywhere else, Tab wraps within the dialog (focus trap): input → close
712
+ * → filter chips → results → footer actions → back to the input.
713
+ * Escape is handled by the document-level keydown.
714
+ */
715
+ OnSpotlightKeydown(event) {
716
+ if (event.key !== 'Tab') {
717
+ return;
718
+ }
719
+ const activeEl = document.activeElement;
720
+ if (activeEl?.classList.contains('result-item')) {
721
+ const last = this.FlatResults.length - 1;
722
+ if (!event.shiftKey && this.HighlightedIndex < last) {
723
+ event.preventDefault();
724
+ this.moveHighlight(1); // row has focus, so focus travels with it
725
+ return;
726
+ }
727
+ if (event.shiftKey && this.HighlightedIndex > 0) {
728
+ event.preventDefault();
729
+ this.moveHighlight(-1);
730
+ return;
731
+ }
732
+ // At either end: fall through so Tab leaves the list naturally.
733
+ }
734
+ const root = event.currentTarget ?? null;
735
+ if (!root) {
736
+ return;
737
+ }
738
+ const focusables = Array.from(root.querySelectorAll('input, button, .result-item[tabindex="0"], .search-recent-item[tabindex="0"]')).filter((el) => el.offsetParent !== null);
739
+ if (focusables.length === 0) {
740
+ return;
741
+ }
742
+ const active = document.activeElement;
743
+ if (!event.shiftKey && active === focusables[focusables.length - 1]) {
744
+ event.preventDefault();
745
+ focusables[0].focus();
746
+ }
747
+ else if (event.shiftKey && active === focusables[0]) {
748
+ event.preventDefault();
749
+ focusables[focusables.length - 1].focus();
750
+ }
751
+ }
752
+ /**
753
+ * Recent-search row activated (click or Enter/Space). Re-runs the search AND
754
+ * refocuses the input — the activated row leaves the DOM when recents are
755
+ * replaced by results, which would otherwise drop focus to <body>.
756
+ */
757
+ OnRecentSelect(query) {
758
+ this.OnQueryInput(query);
759
+ this.searchInputRef?.nativeElement?.focus();
760
+ }
761
+ /** Recent-search rows are keyboard-activatable (Enter/Space = click). */
762
+ OnRecentKeydown(event, query) {
763
+ if (event.key === 'Enter' || event.key === ' ') {
764
+ event.preventDefault();
765
+ this.OnRecentSelect(query);
766
+ }
579
767
  }
580
768
  setupSearchDebounce() {
581
769
  this.searchInput$
@@ -717,6 +905,9 @@ export class SearchOverlayComponent {
717
905
  this.cdr.detectChanges();
718
906
  }
719
907
  onOverlayOpened() {
908
+ // Remember what had focus so Close() can hand it back (a11y: the overlay
909
+ // is a modal dialog — focus must return to the summoning control).
910
+ this.previousFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;
720
911
  // Focus input after view updates
721
912
  Promise.resolve().then(() => {
722
913
  this.searchInputRef?.nativeElement?.focus();
@@ -725,6 +916,10 @@ export class SearchOverlayComponent {
725
916
  }
726
917
  onOverlayClosed() {
727
918
  this.HighlightedIndex = -1;
919
+ if (this.previousFocus?.isConnected) {
920
+ this.previousFocus.focus();
921
+ }
922
+ this.previousFocus = null;
728
923
  }
729
924
  /** Check if any filters are active (used by template) */
730
925
  hasActiveFilters() {
@@ -747,15 +942,15 @@ export class SearchOverlayComponent {
747
942
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.searchInputRef = _t.first);
748
943
  } }, hostBindings: function SearchOverlayComponent_HostBindings(rf, ctx) { if (rf & 1) {
749
944
  i0.ɵɵlistener("keydown", function SearchOverlayComponent_keydown_HostBindingHandler($event) { return ctx.HandleGlobalKeydown($event); }, i0.ɵɵresolveDocument);
750
- } }, inputs: { Placeholder: "Placeholder", MaxResults: "MaxResults", IsOpen: "IsOpen", DebounceMs: "DebounceMs", IncludeSources: "IncludeSources", ShowFilters: "ShowFilters", AgentCtaText: "AgentCtaText", ShowAgentCta: "ShowAgentCta", EnableStreaming: "EnableStreaming" }, outputs: { IsOpenChange: "IsOpenChange", ResultSelected: "ResultSelected", FilterChanged: "FilterChanged", SearchExecuted: "SearchExecuted", AgentCtaClicked: "AgentCtaClicked" }, standalone: false, decls: 1, vars: 1, consts: [["searchInput", ""], [1, "search-backdrop", 3, "click"], [1, "search-spotlight", 3, "click"], [1, "search-input-wrap"], [1, "fa-solid", "fa-magnifying-glass", "search-icon"], ["type", "text", "autocomplete", "off", "spellcheck", "false", 1, "search-input", 3, "input", "placeholder", "value"], [1, "search-spinner"], [1, "search-shortcut-hint"], [1, "search-results-area"], ["aria-live", "polite", 1, "streaming-status-strip"], [1, "search-filter-bar"], ["Variant", "no-results", "Title", "No results found", "Message", "Try different keywords or remove some filters"], [1, "search-recent"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "streaming-chip", "streaming-chip-pending"], [1, "streaming-chip", 3, "streaming-chip-error", "streaming-chip-completed"], [1, "fa-solid", "fa-circle-notch", "fa-spin"], [1, "streaming-chip"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "streaming-chip-name"], [1, "streaming-chip-time"], [1, "streaming-chip-count"], [1, "filter-clear-btn"], [1, "filter-chip", 3, "filter-chip-active"], [1, "filter-chip", 3, "click"], [3, "class"], [1, "filter-chip-count"], [1, "filter-clear-btn", 3, "click"], [1, "fa-solid", "fa-times"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 1, "agent-cta-btn"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 1, "agent-cta-btn", 3, "click"], [1, "fa-solid", "fa-robot"], ["Variant", "no-results", "Title", "Start typing to search across all your knowledge", "Size", "compact"], [1, "search-recent-header"], [1, "search-recent-title"], [1, "search-recent-item"], [1, "search-recent-item", 3, "click"], [1, "fa-solid", "fa-clock", "search-recent-icon"], [1, "search-recent-count"], [1, "result-group"], [1, "search-footer"], [1, "search-footer-count"], [1, "agent-cta-btn", "agent-cta-btn-small"], [1, "result-group-header"], [1, "result-group-label"], [1, "result-group-count"], [1, "result-item", 3, "result-item-highlighted"], [1, "result-item", 3, "click", "mouseenter"], [1, "result-item-icon"], [1, "result-item-content"], [1, "result-item-title"], [1, "result-item-snippet"], [1, "result-item-tags"], [1, "result-item-score"], [1, "score-badge"], [1, "result-tag"], [1, "agent-cta-btn", "agent-cta-btn-small", 3, "click"]], template: function SearchOverlayComponent_Template(rf, ctx) { if (rf & 1) {
751
- i0.ɵɵconditionalCreate(0, SearchOverlayComponent_Conditional_0_Template, 16, 8);
945
+ } }, inputs: { Placeholder: "Placeholder", MaxResults: "MaxResults", IsOpen: "IsOpen", DebounceMs: "DebounceMs", IncludeSources: "IncludeSources", ShowFilters: "ShowFilters", AgentCtaText: "AgentCtaText", ShowAgentCta: "ShowAgentCta", EnableStreaming: "EnableStreaming", EnableGlobalShortcut: "EnableGlobalShortcut", ShowPromo: "ShowPromo", PromoText: "PromoText", PromoActionLabel: "PromoActionLabel" }, outputs: { IsOpenChange: "IsOpenChange", ResultSelected: "ResultSelected", FilterChanged: "FilterChanged", SearchExecuted: "SearchExecuted", AgentCtaClicked: "AgentCtaClicked", SeeAllRequested: "SeeAllRequested", PromoAccepted: "PromoAccepted", PromoDismissed: "PromoDismissed" }, standalone: false, decls: 1, vars: 1, consts: [["searchInput", ""], [1, "search-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", "aria-label", "Search", 1, "search-spotlight", 3, "click", "keydown"], [1, "search-input-wrap"], [1, "fa-solid", "fa-magnifying-glass", "search-icon"], ["type", "text", "role", "combobox", "aria-controls", "search-overlay-listbox", "aria-autocomplete", "list", "autocomplete", "off", "spellcheck", "false", 1, "search-input", 3, "input", "placeholder", "value"], [1, "search-spinner"], [1, "search-shortcut-hint"], ["type", "button", "aria-label", "Close", "title", "Close", 1, "search-close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "search-results-area"], ["aria-live", "polite", 1, "streaming-status-strip"], [1, "search-filter-bar"], ["Variant", "no-results", "Title", "No results found", "Message", "Try different keywords or remove some filters"], [1, "search-recent"], [1, "search-promo"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "streaming-chip", "streaming-chip-pending"], [1, "streaming-chip", 3, "streaming-chip-error", "streaming-chip-completed"], [1, "fa-solid", "fa-circle-notch", "fa-spin"], [1, "streaming-chip"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "streaming-chip-name"], [1, "streaming-chip-time"], [1, "streaming-chip-count"], [1, "filter-clear-btn"], [1, "filter-chip", 3, "filter-chip-active"], [1, "filter-chip", 3, "click"], [3, "class"], [1, "filter-chip-count"], [1, "filter-clear-btn", 3, "click"], [1, "fa-solid", "fa-times"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 1, "agent-cta-btn"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 1, "agent-cta-btn", 3, "click"], [1, "fa-solid", "fa-robot"], ["Variant", "no-results", "Title", "Start typing to search across all your knowledge", "Size", "compact"], [1, "search-recent-header"], [1, "search-recent-title"], ["role", "button", "tabindex", "0", 1, "search-recent-item"], ["role", "button", "tabindex", "0", 1, "search-recent-item", 3, "click", "keydown"], [1, "fa-solid", "fa-clock", "search-recent-icon"], [1, "search-recent-count"], ["id", "search-overlay-listbox", "role", "listbox", "aria-label", "Search results"], ["role", "presentation", 1, "result-group"], [1, "search-footer"], [1, "search-footer-count"], [1, "search-footer-actions"], ["type", "button", 1, "see-all-btn", 3, "click"], [1, "fa-solid", "fa-arrow-right"], [1, "agent-cta-btn", "agent-cta-btn-small"], ["role", "presentation", 1, "result-group-header"], [1, "result-group-label"], [1, "result-group-count"], ["role", "option", 1, "result-item", 3, "result-item-highlighted"], ["role", "option", 1, "result-item", 3, "click", "focus", "mouseenter"], [1, "result-item-icon"], [1, "result-item-content"], [1, "result-item-title"], [1, "result-item-snippet"], [1, "result-item-tags"], [1, "result-item-score"], [1, "score-badge"], [1, "result-tag"], [1, "agent-cta-btn", "agent-cta-btn-small", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles", "search-promo-icon"], [1, "search-promo-text"], ["type", "button", 1, "search-promo-action", 3, "click"], ["type", "button", "aria-label", "Dismiss", "title", "Dismiss", 1, "search-promo-dismiss", 3, "click"]], template: function SearchOverlayComponent_Template(rf, ctx) { if (rf & 1) {
946
+ i0.ɵɵconditionalCreate(0, SearchOverlayComponent_Conditional_0_Template, 19, 11);
752
947
  } if (rf & 2) {
753
948
  i0.ɵɵconditional(ctx.IsOpen ? 0 : -1);
754
- } }, dependencies: [i1.MJEmptyStateComponent], styles: ["\n\n\n.search-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n backdrop-filter: blur(8px);\n z-index: 99998;\n animation: _ngcontent-%COMP%_backdropFadeIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_backdropFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.search-spotlight[_ngcontent-%COMP%] {\n position: fixed;\n top: 12%;\n left: 50%;\n transform: translateX(-50%);\n width: 680px;\n max-width: calc(100vw - 2rem);\n max-height: 70vh;\n z-index: 99999;\n display: flex;\n flex-direction: column;\n border-radius: 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 25px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n animation: _ngcontent-%COMP%_spotlightIn 0.25s ease;\n}\n\n@keyframes _ngcontent-%COMP%_spotlightIn {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(-10px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0) scale(1);\n }\n}\n\n\n\n.search-input-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid var(--mj-border-default);\n gap: 0.75rem;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.search-input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 1.1rem;\n color: var(--mj-text-primary);\n outline: none;\n font-family: inherit;\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n}\n\n.search-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.search-shortcut-hint[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.15rem 0.5rem;\n border-radius: 4px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n font-family: inherit;\n}\n\n\n\n.search-results-area[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(70vh - 56px);\n}\n\n\n\n.search-filter-bar[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n padding: 0.6rem 1rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.streaming-status-strip[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.streaming-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.2rem 0.55rem;\n border-radius: 9999px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.74rem;\n}\n\n.streaming-chip-pending[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.streaming-chip-completed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.streaming-chip-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.streaming-chip-name[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.streaming-chip-count[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.streaming-chip-time[_ngcontent-%COMP%] {\n opacity: 0.6;\n font-size: 0.7rem;\n}\n\n.filter-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.25rem 0.6rem;\n border-radius: 9999px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.78rem;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.filter-chip[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-primary);\n}\n\n.filter-chip-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.filter-chip-count[_ngcontent-%COMP%] {\n opacity: 0.6;\n font-size: 0.72rem;\n}\n\n.filter-clear-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.25rem 0.6rem;\n border-radius: 9999px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n cursor: pointer;\n}\n\n.filter-clear-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n}\n\n\n\n.search-recent[_ngcontent-%COMP%] {\n padding: 0.5rem 0;\n}\n\n.search-recent-header[_ngcontent-%COMP%] {\n padding: 0.5rem 1rem;\n}\n\n.search-recent-title[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 600;\n}\n\n.search-recent-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 1rem;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n transition: background 0.1s ease;\n}\n\n.search-recent-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.search-recent-icon[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n}\n\n.search-recent-count[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n\n\n.result-group[_ngcontent-%COMP%] {\n padding: 0.25rem 0;\n}\n\n.result-group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 600;\n}\n\n.result-group-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.result-group-count[_ngcontent-%COMP%] {\n font-size: 0.72rem;\n color: var(--mj-text-disabled);\n}\n\n\n\n.result-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 0.6rem 1rem;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.result-item[_ngcontent-%COMP%]:hover, \n.result-item-highlighted[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n}\n\n.result-item-icon[_ngcontent-%COMP%] {\n width: 2rem;\n height: 2rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n font-size: 0.85rem;\n flex-shrink: 0;\n margin-top: 0.1rem;\n}\n\n.result-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-item-title[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n font-size: 0.9rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.result-item-snippet[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.8rem;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin-top: 0.15rem;\n}\n\n.result-item-tags[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.3rem;\n margin-top: 0.3rem;\n}\n\n.result-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.1rem 0.4rem;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.7rem;\n}\n\n.result-item-score[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-top: 0.2rem;\n}\n\n.score-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.15rem 0.45rem;\n border-radius: 9999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.72rem;\n font-weight: 600;\n}\n\n\n\n.search-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.search-footer-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n}\n\n\n\n.agent-cta-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.6rem 1.2rem;\n border-radius: 8px;\n border: none;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.85rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.agent-cta-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.agent-cta-btn-small[_ngcontent-%COMP%] {\n padding: 0.35rem 0.8rem;\n font-size: 0.78rem;\n}\n\n\n\n@media (max-width: 640px) {\n .search-spotlight[_ngcontent-%COMP%] {\n top: 0;\n left: 0;\n right: 0;\n transform: none;\n width: 100%;\n max-width: 100%;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .search-results-area[_ngcontent-%COMP%] {\n max-height: calc(100vh - 56px);\n }\n\n .search-filter-bar[_ngcontent-%COMP%] {\n overflow-x: auto;\n flex-wrap: nowrap;\n -webkit-overflow-scrolling: touch;\n }\n}"] });
949
+ } }, dependencies: [i1.MJEmptyStateComponent], styles: ["\n\n\n.search-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n backdrop-filter: blur(8px);\n z-index: 99998;\n animation: _ngcontent-%COMP%_backdropFadeIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_backdropFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.search-spotlight[_ngcontent-%COMP%] {\n position: fixed;\n top: 12%;\n left: 50%;\n transform: translateX(-50%);\n width: 680px;\n max-width: calc(100vw - 2rem);\n max-height: 70vh;\n z-index: 99999;\n display: flex;\n flex-direction: column;\n border-radius: var(--mj-radius-xl);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 25px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n animation: _ngcontent-%COMP%_spotlightIn 0.25s ease;\n}\n\n@keyframes _ngcontent-%COMP%_spotlightIn {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(-10px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0) scale(1);\n }\n}\n\n\n\n.search-input-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid var(--mj-border-default);\n gap: 0.75rem;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.search-input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 1.1rem;\n color: var(--mj-text-primary);\n outline: none;\n font-family: inherit;\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n}\n\n.search-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.search-shortcut-hint[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.15rem 0.5rem;\n border-radius: 4px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n font-family: inherit;\n}\n\n.search-close-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n border-radius: var(--mj-radius-full);\n background: transparent;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n cursor: pointer;\n transition: var(--mj-transition-colors);\n flex-shrink: 0;\n}\n\n.search-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n\n\n.search-results-area[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(70vh - 56px);\n}\n\n\n\n.search-filter-bar[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n padding: 0.6rem 1rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.streaming-status-strip[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.streaming-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.2rem 0.55rem;\n border-radius: 9999px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.74rem;\n}\n\n.streaming-chip-pending[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.streaming-chip-completed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.streaming-chip-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.streaming-chip-name[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.streaming-chip-count[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.streaming-chip-time[_ngcontent-%COMP%] {\n opacity: 0.6;\n font-size: 0.7rem;\n}\n\n.filter-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.25rem 0.6rem;\n border-radius: 9999px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.78rem;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.filter-chip[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-primary);\n}\n\n.filter-chip-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.filter-chip-count[_ngcontent-%COMP%] {\n opacity: 0.6;\n font-size: 0.72rem;\n}\n\n.filter-clear-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.25rem 0.6rem;\n border-radius: 9999px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n cursor: pointer;\n}\n\n.filter-clear-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n}\n\n\n\n.search-recent[_ngcontent-%COMP%] {\n padding: 0.5rem 0;\n}\n\n.search-recent-header[_ngcontent-%COMP%] {\n padding: 0.5rem 1rem;\n}\n\n.search-recent-title[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 600;\n}\n\n.search-recent-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 1rem;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n transition: background 0.1s ease;\n}\n\n.search-recent-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.search-recent-icon[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n}\n\n.search-recent-count[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n\n\n.result-group[_ngcontent-%COMP%] {\n padding: 0.25rem 0;\n}\n\n.result-group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 600;\n}\n\n.result-group-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.result-group-count[_ngcontent-%COMP%] {\n font-size: 0.72rem;\n color: var(--mj-text-disabled);\n}\n\n\n\n.result-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 0.6rem 1rem;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.result-item[_ngcontent-%COMP%]:hover, \n.result-item-highlighted[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n\n.result-item[_ngcontent-%COMP%]:focus {\n outline: none;\n}\n.result-item[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: -2px;\n}\n.search-recent-item[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: -2px;\n}\n\n.result-item-icon[_ngcontent-%COMP%] {\n width: 2rem;\n height: 2rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n font-size: 0.85rem;\n flex-shrink: 0;\n margin-top: 0.1rem;\n}\n\n.result-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-item-title[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n font-size: 0.9rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.result-item-snippet[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.8rem;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin-top: 0.15rem;\n}\n\n.result-item-tags[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.3rem;\n margin-top: 0.3rem;\n}\n\n.result-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.1rem 0.4rem;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.7rem;\n}\n\n.result-item-score[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-top: 0.2rem;\n}\n\n.score-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.15rem 0.45rem;\n border-radius: 9999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.72rem;\n font-weight: 600;\n}\n\n\n\n.search-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.search-footer-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n}\n\n.search-footer-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n\n\n\n\n.see-all-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1-5);\n padding: 0.35rem 0.8rem;\n border-radius: var(--mj-radius-md);\n border: 1px solid var(--mj-border-default);\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: var(--mj-transition-colors);\n}\n\n.see-all-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n\n\n.agent-cta-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.6rem 1.2rem;\n border-radius: 8px;\n border: none;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.85rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.agent-cta-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.agent-cta-btn-small[_ngcontent-%COMP%] {\n padding: 0.35rem 0.8rem;\n font-size: 0.78rem;\n}\n\n\n\n@media (max-width: 640px) {\n .search-spotlight[_ngcontent-%COMP%] {\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transform: none;\n width: 100%;\n max-width: 100%;\n height: 100dvh;\n max-height: 100dvh;\n border-radius: 0;\n animation: none; \n\n }\n\n \n\n .search-results-area[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n max-height: none;\n }\n\n \n\n\n .search-filter-bar[_ngcontent-%COMP%] {\n overflow-x: auto;\n flex-wrap: nowrap;\n -webkit-overflow-scrolling: touch;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n align-items: center;\n }\n\n .search-filter-bar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%], \n .search-filter-bar[_ngcontent-%COMP%] .filter-clear-btn[_ngcontent-%COMP%] {\n flex-shrink: 0; \n\n padding: 0.25rem 0.7rem;\n line-height: 1.2;\n font-size: 0.75rem;\n }\n\n \n\n .search-shortcut-hint[_ngcontent-%COMP%] {\n display: none;\n }\n\n \n\n\n\n .search-close-btn[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n font-size: var(--mj-text-base);\n }\n .search-promo[_ngcontent-%COMP%] {\n gap: var(--mj-space-3);\n }\n .search-promo-action[_ngcontent-%COMP%] {\n padding: 0.6rem 1rem;\n }\n .search-promo-dismiss[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n font-size: var(--mj-text-sm);\n }\n}\n\n\n\n\n.search-promo[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-4);\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.search-promo-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.search-promo-text[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.search-promo-action[_ngcontent-%COMP%] {\n flex-shrink: 0;\n padding: 0.2rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 0.75rem;\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: var(--mj-transition-colors);\n}\n\n.search-promo-action[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.search-promo-dismiss[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border: none;\n border-radius: var(--mj-radius-full);\n background: transparent;\n color: var(--mj-text-disabled);\n font-size: 0.75rem;\n cursor: pointer;\n transition: var(--mj-transition-colors);\n flex-shrink: 0;\n}\n\n.search-promo-dismiss[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}"] });
755
950
  }
756
951
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchOverlayComponent, [{
757
952
  type: Component,
758
- args: [{ standalone: false, selector: 'mj-search-overlay', template: "@if (IsOpen) {\n <!-- Backdrop -->\n <div class=\"search-backdrop\" (click)=\"OnBackdropClick()\"></div>\n\n <!-- Spotlight container -->\n <div class=\"search-spotlight\" (click)=\"$event.stopPropagation()\">\n <!-- Search input area -->\n <div class=\"search-input-wrap\">\n <i class=\"fa-solid fa-magnifying-glass search-icon\"></i>\n <input\n #searchInput\n type=\"text\"\n class=\"search-input\"\n [placeholder]=\"Placeholder\"\n [value]=\"Query\"\n (input)=\"OnQueryInput($any($event.target).value)\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n @if (IsSearching) {\n <div class=\"search-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n }\n <div class=\"search-shortcut-hint\">\n <kbd>ESC</kbd>\n </div>\n </div>\n\n <!-- Results area -->\n <div class=\"search-results-area\">\n @if (EnableStreaming && (IsSearching || StreamingProviders.length > 0)) {\n <!-- Streaming status strip \u2014 one chip per provider that has reported -->\n <div class=\"streaming-status-strip\" aria-live=\"polite\">\n @if (StreamingProviders.length === 0 && IsSearching) {\n <span class=\"streaming-chip streaming-chip-pending\">\n <i class=\"fa-solid fa-circle-notch fa-spin\"></i>\n <span>Searching\u2026</span>\n </span>\n }\n @for (p of StreamingProviders; track p.Name) {\n <span class=\"streaming-chip\"\n [class.streaming-chip-error]=\"p.State === 'Error'\"\n [class.streaming-chip-completed]=\"p.State === 'Completed'\">\n @if (p.State === 'Completed') {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n }\n <span class=\"streaming-chip-name\">{{ p.Name }}</span>\n @if (p.State === 'Completed') {\n <span class=\"streaming-chip-count\">{{ p.Count }}</span>\n <span class=\"streaming-chip-time\">{{ FormatElapsedTime(p.ElapsedMs) }}</span>\n } @else if (p.ErrorMessage) {\n <span class=\"streaming-chip-time\">{{ p.ErrorMessage }}</span>\n }\n </span>\n }\n </div>\n }\n @if (ShowFilters && Filters.length > 0) {\n <!-- Filter chips -->\n <div class=\"search-filter-bar\">\n @for (filter of Filters; track filter.Category) {\n @for (option of filter.Options; track option.Value) {\n <button\n class=\"filter-chip\"\n [class.filter-chip-active]=\"IsFilterActive(filter.Category, option.Value)\"\n (click)=\"OnFilterToggle(filter.Category, option.Value)\"\n >\n @if (option.Icon) {\n <i [class]=\"option.Icon\"></i>\n }\n <span>{{ option.Label }}</span>\n <span class=\"filter-chip-count\">{{ option.Count }}</span>\n </button>\n }\n }\n @if (hasActiveFilters()) {\n <button class=\"filter-clear-btn\" (click)=\"ClearAllFilters()\">\n <i class=\"fa-solid fa-times\"></i> Clear\n </button>\n }\n </div>\n }\n\n @if (HasSearched && AllResults.length === 0 && !IsSearching) {\n <!-- No results -->\n <mj-empty-state\n Variant=\"no-results\"\n Title=\"No results found\"\n Message=\"Try different keywords or remove some filters\">\n @if (ShowAgentCta) {\n <button ngProjectAs=\"[actions]\" class=\"agent-cta-btn\" (click)=\"OnAgentCtaClick()\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ AgentCtaText }}\n </button>\n }\n </mj-empty-state>\n }\n\n @if (!HasSearched && !IsSearching) {\n <!-- Recent searches -->\n <div class=\"search-recent\">\n @if (searchService.RecentSearches$.value.length > 0) {\n <div class=\"search-recent-header\">\n <span class=\"search-recent-title\">Recent Searches</span>\n </div>\n @for (recent of searchService.RecentSearches$.value; track recent.Query; let i = $index) {\n @if (i < 5) {\n <div class=\"search-recent-item\" (click)=\"OnQueryInput(recent.Query)\">\n <i class=\"fa-solid fa-clock search-recent-icon\"></i>\n <span>{{ recent.Query }}</span>\n <span class=\"search-recent-count\">{{ recent.ResultCount }} results</span>\n </div>\n }\n }\n } @else {\n <mj-empty-state\n Variant=\"no-results\"\n Title=\"Start typing to search across all your knowledge\"\n Size=\"compact\" />\n }\n </div>\n }\n\n @if (AllResults.length > 0) {\n <!-- Grouped results -->\n @for (group of ResultGroups; track group.SourceType) {\n <div class=\"result-group\">\n <div class=\"result-group-header\">\n <i [class]=\"group.Icon\"></i>\n <span class=\"result-group-label\">{{ group.Label }}</span>\n <span class=\"result-group-count\">{{ group.TotalCount }}</span>\n </div>\n @for (result of group.Results; track result.ID; let ri = $index) {\n <div\n class=\"result-item\"\n [class.result-item-highlighted]=\"isResultHighlighted(result)\"\n (click)=\"OnResultClick(result, $event)\"\n (mouseenter)=\"HighlightedIndex = getFlatIndex(result)\"\n >\n <div class=\"result-item-icon\">\n <i [class]=\"result.SourceIcon\"></i>\n </div>\n <div class=\"result-item-content\">\n <div class=\"result-item-title\">{{ result.Title }}</div>\n <div class=\"result-item-snippet\">{{ result.Snippet }}</div>\n @if (result.Tags.length > 0) {\n <div class=\"result-item-tags\">\n @for (tag of result.Tags; track tag; let ti = $index) {\n @if (ti < 3) {\n <span class=\"result-tag\">{{ tag }}</span>\n }\n }\n </div>\n }\n </div>\n <div class=\"result-item-score\">\n <span class=\"score-badge\">{{ FormatScore(result.Score) }}</span>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Footer -->\n <div class=\"search-footer\">\n <span class=\"search-footer-count\">\n {{ TotalCount }} results in {{ FormatElapsedTime(ElapsedMs) }}\n </span>\n @if (ShowAgentCta) {\n <button class=\"agent-cta-btn agent-cta-btn-small\" (click)=\"OnAgentCtaClick()\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ AgentCtaText }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n}\n", styles: ["/* Search Overlay - Command Palette / Spotlight Style */\n\n.search-backdrop {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n backdrop-filter: blur(8px);\n z-index: 99998;\n animation: backdropFadeIn 0.2s ease;\n}\n\n@keyframes backdropFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.search-spotlight {\n position: fixed;\n top: 12%;\n left: 50%;\n transform: translateX(-50%);\n width: 680px;\n max-width: calc(100vw - 2rem);\n max-height: 70vh;\n z-index: 99999;\n display: flex;\n flex-direction: column;\n border-radius: 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 25px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n animation: spotlightIn 0.25s ease;\n}\n\n@keyframes spotlightIn {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(-10px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0) scale(1);\n }\n}\n\n/* Search Input */\n.search-input-wrap {\n display: flex;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid var(--mj-border-default);\n gap: 0.75rem;\n}\n\n.search-icon {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.search-input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 1.1rem;\n color: var(--mj-text-primary);\n outline: none;\n font-family: inherit;\n}\n\n.search-input::placeholder {\n color: var(--mj-text-muted);\n}\n\n.search-spinner {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.search-shortcut-hint kbd {\n display: inline-block;\n padding: 0.15rem 0.5rem;\n border-radius: 4px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n font-family: inherit;\n}\n\n/* Results Area */\n.search-results-area {\n overflow-y: auto;\n max-height: calc(70vh - 56px);\n}\n\n/* Filter Bar */\n.search-filter-bar {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n padding: 0.6rem 1rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.streaming-status-strip {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.streaming-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.2rem 0.55rem;\n border-radius: 9999px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.74rem;\n}\n\n.streaming-chip-pending {\n color: var(--mj-text-muted);\n}\n\n.streaming-chip-completed {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.streaming-chip-error {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.streaming-chip-name {\n font-weight: 500;\n}\n\n.streaming-chip-count {\n opacity: 0.7;\n}\n\n.streaming-chip-time {\n opacity: 0.6;\n font-size: 0.7rem;\n}\n\n.filter-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.25rem 0.6rem;\n border-radius: 9999px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.78rem;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.filter-chip:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-primary);\n}\n\n.filter-chip-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.filter-chip-count {\n opacity: 0.6;\n font-size: 0.72rem;\n}\n\n.filter-clear-btn {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.25rem 0.6rem;\n border-radius: 9999px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n cursor: pointer;\n}\n\n.filter-clear-btn:hover {\n color: var(--mj-status-error);\n}\n\n/* Recent Searches */\n.search-recent {\n padding: 0.5rem 0;\n}\n\n.search-recent-header {\n padding: 0.5rem 1rem;\n}\n\n.search-recent-title {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 600;\n}\n\n.search-recent-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 1rem;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n transition: background 0.1s ease;\n}\n\n.search-recent-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.search-recent-icon {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n}\n\n.search-recent-count {\n margin-left: auto;\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n/* Result Groups */\n.result-group {\n padding: 0.25rem 0;\n}\n\n.result-group-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 600;\n}\n\n.result-group-label {\n flex: 1;\n}\n\n.result-group-count {\n font-size: 0.72rem;\n color: var(--mj-text-disabled);\n}\n\n/* Result Items */\n.result-item {\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 0.6rem 1rem;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.result-item:hover,\n.result-item-highlighted {\n background: var(--mj-bg-surface-hover);\n}\n\n.result-item-icon {\n width: 2rem;\n height: 2rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n font-size: 0.85rem;\n flex-shrink: 0;\n margin-top: 0.1rem;\n}\n\n.result-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.result-item-title {\n color: var(--mj-text-primary);\n font-weight: 500;\n font-size: 0.9rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.result-item-snippet {\n color: var(--mj-text-muted);\n font-size: 0.8rem;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin-top: 0.15rem;\n}\n\n.result-item-tags {\n display: flex;\n gap: 0.3rem;\n margin-top: 0.3rem;\n}\n\n.result-tag {\n display: inline-block;\n padding: 0.1rem 0.4rem;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.7rem;\n}\n\n.result-item-score {\n flex-shrink: 0;\n margin-top: 0.2rem;\n}\n\n.score-badge {\n display: inline-block;\n padding: 0.15rem 0.45rem;\n border-radius: 9999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.72rem;\n font-weight: 600;\n}\n\n/* Footer */\n.search-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.search-footer-count {\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n}\n\n/* Agent CTA Button */\n.agent-cta-btn {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.6rem 1.2rem;\n border-radius: 8px;\n border: none;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.85rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.agent-cta-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.agent-cta-btn-small {\n padding: 0.35rem 0.8rem;\n font-size: 0.78rem;\n}\n\n/* Mobile responsive */\n@media (max-width: 640px) {\n .search-spotlight {\n top: 0;\n left: 0;\n right: 0;\n transform: none;\n width: 100%;\n max-width: 100%;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .search-results-area {\n max-height: calc(100vh - 56px);\n }\n\n .search-filter-bar {\n overflow-x: auto;\n flex-wrap: nowrap;\n -webkit-overflow-scrolling: touch;\n }\n}\n"] }]
953
+ args: [{ standalone: false, selector: 'mj-search-overlay', template: "@if (IsOpen) {\n <!-- Backdrop -->\n <div class=\"search-backdrop\" (click)=\"OnBackdropClick()\"></div>\n\n <!-- Spotlight container -->\n <div class=\"search-spotlight\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Search\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"OnSpotlightKeydown($event)\">\n <!-- Search input area -->\n <div class=\"search-input-wrap\">\n <i class=\"fa-solid fa-magnifying-glass search-icon\"></i>\n <input\n #searchInput\n type=\"text\"\n class=\"search-input\"\n role=\"combobox\"\n aria-controls=\"search-overlay-listbox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"AllResults.length > 0\"\n [attr.aria-activedescendant]=\"ActiveDescendantId\"\n [placeholder]=\"Placeholder\"\n [value]=\"Query\"\n (input)=\"OnQueryInput($any($event.target).value)\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n @if (IsSearching) {\n <div class=\"search-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n }\n <div class=\"search-shortcut-hint\">\n <kbd>ESC</kbd>\n </div>\n <button type=\"button\" class=\"search-close-btn\" aria-label=\"Close\" title=\"Close\" (click)=\"Close()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Results area -->\n <div class=\"search-results-area\">\n @if (EnableStreaming && (IsSearching || StreamingProviders.length > 0)) {\n <!-- Streaming status strip \u2014 one chip per provider that has reported -->\n <div class=\"streaming-status-strip\" aria-live=\"polite\">\n @if (StreamingProviders.length === 0 && IsSearching) {\n <span class=\"streaming-chip streaming-chip-pending\">\n <i class=\"fa-solid fa-circle-notch fa-spin\"></i>\n <span>Searching\u2026</span>\n </span>\n }\n @for (p of StreamingProviders; track p.Name) {\n <span class=\"streaming-chip\"\n [class.streaming-chip-error]=\"p.State === 'Error'\"\n [class.streaming-chip-completed]=\"p.State === 'Completed'\">\n @if (p.State === 'Completed') {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n }\n <span class=\"streaming-chip-name\">{{ p.Name }}</span>\n @if (p.State === 'Completed') {\n <span class=\"streaming-chip-count\">{{ p.Count }}</span>\n <span class=\"streaming-chip-time\">{{ FormatElapsedTime(p.ElapsedMs) }}</span>\n } @else if (p.ErrorMessage) {\n <span class=\"streaming-chip-time\">{{ p.ErrorMessage }}</span>\n }\n </span>\n }\n </div>\n }\n @if (ShowFilters && Filters.length > 0) {\n <!-- Filter chips -->\n <div class=\"search-filter-bar\">\n @for (filter of Filters; track filter.Category) {\n @for (option of filter.Options; track option.Value) {\n <button\n class=\"filter-chip\"\n [class.filter-chip-active]=\"IsFilterActive(filter.Category, option.Value)\"\n (click)=\"OnFilterToggle(filter.Category, option.Value)\"\n >\n @if (option.Icon) {\n <i [class]=\"option.Icon\"></i>\n }\n <span>{{ option.Label }}</span>\n <span class=\"filter-chip-count\">{{ option.Count }}</span>\n </button>\n }\n }\n @if (hasActiveFilters()) {\n <button class=\"filter-clear-btn\" (click)=\"ClearAllFilters()\">\n <i class=\"fa-solid fa-times\"></i> Clear\n </button>\n }\n </div>\n }\n\n @if (HasSearched && AllResults.length === 0 && !IsSearching) {\n <!-- No results -->\n <mj-empty-state\n Variant=\"no-results\"\n Title=\"No results found\"\n Message=\"Try different keywords or remove some filters\">\n @if (ShowAgentCta) {\n <button ngProjectAs=\"[actions]\" class=\"agent-cta-btn\" (click)=\"OnAgentCtaClick()\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ AgentCtaText }}\n </button>\n }\n </mj-empty-state>\n }\n\n @if (!HasSearched && !IsSearching) {\n <!-- Recent searches -->\n <div class=\"search-recent\">\n @if (searchService.RecentSearches$.value.length > 0) {\n <div class=\"search-recent-header\">\n <span class=\"search-recent-title\">Recent Searches</span>\n </div>\n @for (recent of searchService.RecentSearches$.value; track recent.Query; let i = $index) {\n @if (i < 5) {\n <div class=\"search-recent-item\" role=\"button\" tabindex=\"0\"\n (click)=\"OnRecentSelect(recent.Query)\"\n (keydown)=\"OnRecentKeydown($event, recent.Query)\">\n <i class=\"fa-solid fa-clock search-recent-icon\"></i>\n <span>{{ recent.Query }}</span>\n <span class=\"search-recent-count\">{{ recent.ResultCount }} results</span>\n </div>\n }\n }\n } @else {\n <mj-empty-state\n Variant=\"no-results\"\n Title=\"Start typing to search across all your knowledge\"\n Size=\"compact\" />\n }\n </div>\n }\n\n @if (AllResults.length > 0) {\n <!-- Grouped results -->\n <div id=\"search-overlay-listbox\" role=\"listbox\" aria-label=\"Search results\">\n @for (group of ResultGroups; track group.SourceType) {\n <div class=\"result-group\" role=\"presentation\">\n <div class=\"result-group-header\" role=\"presentation\">\n <i [class]=\"group.Icon\"></i>\n <span class=\"result-group-label\">{{ group.Label }}</span>\n <span class=\"result-group-count\">{{ group.TotalCount }}</span>\n </div>\n @for (result of group.Results; track result.ID; let ri = $index) {\n <div\n class=\"result-item\"\n role=\"option\"\n [attr.id]=\"'so-opt-' + getFlatIndex(result)\"\n [attr.tabindex]=\"isResultHighlighted(result) ? 0 : -1\"\n [attr.aria-selected]=\"isResultHighlighted(result)\"\n [class.result-item-highlighted]=\"isResultHighlighted(result)\"\n (click)=\"OnResultClick(result, $event)\"\n (focus)=\"HighlightedIndex = getFlatIndex(result)\"\n (mouseenter)=\"HighlightedIndex = getFlatIndex(result)\"\n >\n <div class=\"result-item-icon\">\n <i [class]=\"result.SourceIcon\"></i>\n </div>\n <div class=\"result-item-content\">\n <div class=\"result-item-title\">{{ result.Title }}</div>\n <div class=\"result-item-snippet\">{{ result.Snippet }}</div>\n @if (result.Tags.length > 0) {\n <div class=\"result-item-tags\">\n @for (tag of result.Tags; track tag; let ti = $index) {\n @if (ti < 3) {\n <span class=\"result-tag\">{{ tag }}</span>\n }\n }\n </div>\n }\n </div>\n <div class=\"result-item-score\">\n <span class=\"score-badge\">{{ FormatScore(result.Score) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"search-footer\">\n <span class=\"search-footer-count\">\n {{ TotalCount }} results in {{ FormatElapsedTime(ElapsedMs) }}\n </span>\n <div class=\"search-footer-actions\">\n <button type=\"button\" class=\"see-all-btn\" (click)=\"OnSeeAllClick()\">\n See all results\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n @if (ShowAgentCta) {\n <button class=\"agent-cta-btn agent-cta-btn-small\" (click)=\"OnAgentCtaClick()\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ AgentCtaText }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Host-supplied promo strip (e.g. command palette nudge) -->\n @if (ShowPromo && PromoText) {\n <div class=\"search-promo\">\n <i class=\"fa-solid fa-wand-magic-sparkles search-promo-icon\"></i>\n <span class=\"search-promo-text\">{{ PromoText }}</span>\n <button type=\"button\" class=\"search-promo-action\" (click)=\"OnPromoAccept()\">{{ PromoActionLabel }}</button>\n <button type=\"button\" class=\"search-promo-dismiss\" aria-label=\"Dismiss\" title=\"Dismiss\" (click)=\"OnPromoDismiss()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n </div>\n}\n", styles: ["/* Search Overlay - Command Palette / Spotlight Style */\n\n.search-backdrop {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n backdrop-filter: blur(8px);\n z-index: 99998;\n animation: backdropFadeIn 0.2s ease;\n}\n\n@keyframes backdropFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.search-spotlight {\n position: fixed;\n top: 12%;\n left: 50%;\n transform: translateX(-50%);\n width: 680px;\n max-width: calc(100vw - 2rem);\n max-height: 70vh;\n z-index: 99999;\n display: flex;\n flex-direction: column;\n border-radius: var(--mj-radius-xl);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 25px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n animation: spotlightIn 0.25s ease;\n}\n\n@keyframes spotlightIn {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(-10px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0) scale(1);\n }\n}\n\n/* Search Input */\n.search-input-wrap {\n display: flex;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid var(--mj-border-default);\n gap: 0.75rem;\n}\n\n.search-icon {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.search-input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 1.1rem;\n color: var(--mj-text-primary);\n outline: none;\n font-family: inherit;\n}\n\n.search-input::placeholder {\n color: var(--mj-text-muted);\n}\n\n.search-spinner {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.search-shortcut-hint kbd {\n display: inline-block;\n padding: 0.15rem 0.5rem;\n border-radius: 4px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n font-family: inherit;\n}\n\n.search-close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n border-radius: var(--mj-radius-full);\n background: transparent;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n cursor: pointer;\n transition: var(--mj-transition-colors);\n flex-shrink: 0;\n}\n\n.search-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n/* Results Area */\n.search-results-area {\n overflow-y: auto;\n max-height: calc(70vh - 56px);\n}\n\n/* Filter Bar */\n.search-filter-bar {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n padding: 0.6rem 1rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.streaming-status-strip {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.streaming-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.2rem 0.55rem;\n border-radius: 9999px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.74rem;\n}\n\n.streaming-chip-pending {\n color: var(--mj-text-muted);\n}\n\n.streaming-chip-completed {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.streaming-chip-error {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.streaming-chip-name {\n font-weight: 500;\n}\n\n.streaming-chip-count {\n opacity: 0.7;\n}\n\n.streaming-chip-time {\n opacity: 0.6;\n font-size: 0.7rem;\n}\n\n.filter-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.25rem 0.6rem;\n border-radius: 9999px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.78rem;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.filter-chip:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-primary);\n}\n\n.filter-chip-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.filter-chip-count {\n opacity: 0.6;\n font-size: 0.72rem;\n}\n\n.filter-clear-btn {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.25rem 0.6rem;\n border-radius: 9999px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n cursor: pointer;\n}\n\n.filter-clear-btn:hover {\n color: var(--mj-status-error);\n}\n\n/* Recent Searches */\n.search-recent {\n padding: 0.5rem 0;\n}\n\n.search-recent-header {\n padding: 0.5rem 1rem;\n}\n\n.search-recent-title {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 600;\n}\n\n.search-recent-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 1rem;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n transition: background 0.1s ease;\n}\n\n.search-recent-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.search-recent-icon {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n}\n\n.search-recent-count {\n margin-left: auto;\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n/* Result Groups */\n.result-group {\n padding: 0.25rem 0;\n}\n\n.result-group-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-weight: 600;\n}\n\n.result-group-label {\n flex: 1;\n}\n\n.result-group-count {\n font-size: 0.72rem;\n color: var(--mj-text-disabled);\n}\n\n/* Result Items */\n.result-item {\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 0.6rem 1rem;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.result-item:hover,\n.result-item-highlighted {\n background: var(--mj-bg-surface-hover);\n}\n\n/* Rows are focus stops (roving tabindex): the highlight background tracks focus,\n so suppress the default outline but keep a ring for keyboard :focus-visible. */\n.result-item:focus {\n outline: none;\n}\n.result-item:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: -2px;\n}\n.search-recent-item:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: -2px;\n}\n\n.result-item-icon {\n width: 2rem;\n height: 2rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n font-size: 0.85rem;\n flex-shrink: 0;\n margin-top: 0.1rem;\n}\n\n.result-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.result-item-title {\n color: var(--mj-text-primary);\n font-weight: 500;\n font-size: 0.9rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.result-item-snippet {\n color: var(--mj-text-muted);\n font-size: 0.8rem;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin-top: 0.15rem;\n}\n\n.result-item-tags {\n display: flex;\n gap: 0.3rem;\n margin-top: 0.3rem;\n}\n\n.result-tag {\n display: inline-block;\n padding: 0.1rem 0.4rem;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.7rem;\n}\n\n.result-item-score {\n flex-shrink: 0;\n margin-top: 0.2rem;\n}\n\n.score-badge {\n display: inline-block;\n padding: 0.15rem 0.45rem;\n border-radius: 9999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.72rem;\n font-weight: 600;\n}\n\n/* Footer */\n.search-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.search-footer-count {\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n}\n\n.search-footer-actions {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n/* \"See all results\" \u2014 hand-off to the full Search Results workspace.\n Padding/font-size mirror the sibling .agent-cta-btn-small so the footer\n buttons read as one row. */\n.see-all-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1-5);\n padding: 0.35rem 0.8rem;\n border-radius: var(--mj-radius-md);\n border: 1px solid var(--mj-border-default);\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: var(--mj-transition-colors);\n}\n\n.see-all-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n/* Agent CTA Button */\n.agent-cta-btn {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.6rem 1.2rem;\n border-radius: 8px;\n border: none;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.85rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.agent-cta-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.agent-cta-btn-small {\n padding: 0.35rem 0.8rem;\n font-size: 0.78rem;\n}\n\n/* Mobile responsive */\n@media (max-width: 640px) {\n .search-spotlight {\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transform: none;\n width: 100%;\n max-width: 100%;\n height: 100dvh;\n max-height: 100dvh;\n border-radius: 0;\n animation: none; /* spotlightIn animates a translateX(-50%) that no longer applies */\n }\n\n /* Full-height sheet: results absorb all remaining space (container is flex-column). */\n .search-results-area {\n flex: 1;\n min-height: 0;\n max-height: none;\n }\n\n /* Filter chips: single scrollable row with breathing room \u2014 desktop spacing\n reads cramped and tall at phone widths. */\n .search-filter-bar {\n overflow-x: auto;\n flex-wrap: nowrap;\n -webkit-overflow-scrolling: touch;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n align-items: center;\n }\n\n .search-filter-bar .filter-chip,\n .search-filter-bar .filter-clear-btn {\n flex-shrink: 0; /* no squishing inside the scroll row */\n padding: 0.25rem 0.7rem;\n line-height: 1.2;\n font-size: 0.75rem;\n }\n\n /* Keyboard hint is meaningless on touch (parity with the palette). */\n .search-shortcut-hint {\n display: none;\n }\n\n /* Touch-friendly hit areas: the \u2715 close and the promo controls are primary\n interactive elements on a full-height touch sheet \u2014 a mis-hit on a tiny\n dismiss that lands on \"Turn on\" is the worst failure mode. */\n .search-close-btn {\n width: 40px;\n height: 40px;\n font-size: var(--mj-text-base);\n }\n .search-promo {\n gap: var(--mj-space-3);\n }\n .search-promo-action {\n padding: 0.6rem 1rem;\n }\n .search-promo-dismiss {\n width: 40px;\n height: 40px;\n font-size: var(--mj-text-sm);\n }\n}\n\n/* Host-supplied promo strip \u2014 a quiet whisper pinned to the overlay's bottom\n edge, never a banner. */\n.search-promo {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-4);\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.search-promo-icon {\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.search-promo-text {\n flex: 1;\n min-width: 0;\n}\n\n.search-promo-action {\n flex-shrink: 0;\n padding: 0.2rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 0.75rem;\n font-weight: var(--mj-font-medium);\n cursor: pointer;\n transition: var(--mj-transition-colors);\n}\n\n.search-promo-action:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.search-promo-dismiss {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border: none;\n border-radius: var(--mj-radius-full);\n background: transparent;\n color: var(--mj-text-disabled);\n font-size: 0.75rem;\n cursor: pointer;\n transition: var(--mj-transition-colors);\n flex-shrink: 0;\n}\n\n.search-promo-dismiss:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n"] }]
759
954
  }], null, { searchInputRef: [{
760
955
  type: ViewChild,
761
956
  args: ['searchInput']
@@ -777,6 +972,14 @@ export class SearchOverlayComponent {
777
972
  type: Input
778
973
  }], EnableStreaming: [{
779
974
  type: Input
975
+ }], EnableGlobalShortcut: [{
976
+ type: Input
977
+ }], ShowPromo: [{
978
+ type: Input
979
+ }], PromoText: [{
980
+ type: Input
981
+ }], PromoActionLabel: [{
982
+ type: Input
780
983
  }], IsOpenChange: [{
781
984
  type: Output
782
985
  }], ResultSelected: [{
@@ -787,6 +990,12 @@ export class SearchOverlayComponent {
787
990
  type: Output
788
991
  }], AgentCtaClicked: [{
789
992
  type: Output
993
+ }], SeeAllRequested: [{
994
+ type: Output
995
+ }], PromoAccepted: [{
996
+ type: Output
997
+ }], PromoDismissed: [{
998
+ type: Output
790
999
  }], HandleGlobalKeydown: [{
791
1000
  type: HostListener,
792
1001
  args: ['document:keydown', ['$event']]