@empathyco/x-components 6.0.0-alpha.237 → 6.0.0-alpha.238
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/docs/API-reference/api/x-components.aioverview.md +0 -21
- package/docs/API-reference/api/x-components.md +0 -11
- package/docs/API-reference/components/ai/x-components.ai-overview.md +0 -3
- package/js/index.js +1 -1
- package/js/x-modules/ai/components/ai-overview.vue.js +120 -173
- package/js/x-modules/ai/components/ai-overview.vue.js.map +1 -1
- package/js/x-modules/ai/components/ai-overview.vue2.js +2 -38
- package/js/x-modules/ai/components/ai-overview.vue2.js.map +1 -1
- package/js/x-modules/ai/wiring.js +2 -6
- package/js/x-modules/ai/wiring.js.map +1 -1
- package/js/x-modules/tagging/wiring.js +2 -22
- package/js/x-modules/tagging/wiring.js.map +1 -1
- package/package.json +2 -2
- package/report/x-components.api.json +4 -86
- package/report/x-components.api.md +0 -30
- package/tagging/index.js +1 -1
- package/types/src/x-modules/ai/components/ai-overview.vue.d.ts +0 -21
- package/types/src/x-modules/ai/components/ai-overview.vue.d.ts.map +1 -1
- package/types/src/x-modules/ai/wiring.d.ts +0 -3
- package/types/src/x-modules/ai/wiring.d.ts.map +1 -1
- package/types/src/x-modules/tagging/wiring.d.ts +0 -9
- package/types/src/x-modules/tagging/wiring.d.ts.map +1 -1
- package/docs/API-reference/api/x-components.trackaioverviewbuttonclickedwire.md +0 -13
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [6.0.0-alpha.238](https://github.com/empathyco/x/compare/@empathyco/x-components@6.0.0-alpha.237...@empathyco/x-components@6.0.0-alpha.238) (2026-04-10)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **ai-carousel:** deleted expand button and fixed tagging twice
|
|
11
|
+
|
|
12
|
+
|
|
6
13
|
## [6.0.0-alpha.237](https://github.com/empathyco/x/compare/@empathyco/x-components@6.0.0-alpha.236...@empathyco/x-components@6.0.0-alpha.237) (2026-04-08)
|
|
7
14
|
|
|
8
15
|
### Features
|
|
@@ -15,14 +15,6 @@ _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
|
15
15
|
type: StringConstructor;
|
|
16
16
|
default: string;
|
|
17
17
|
};
|
|
18
|
-
expandText: {
|
|
19
|
-
type: StringConstructor;
|
|
20
|
-
default: string;
|
|
21
|
-
};
|
|
22
|
-
collapseText: {
|
|
23
|
-
type: StringConstructor;
|
|
24
|
-
default: string;
|
|
25
|
-
};
|
|
26
18
|
autoExpandInSearchNoResults: {
|
|
27
19
|
type: BooleanConstructor;
|
|
28
20
|
default: boolean;
|
|
@@ -41,14 +33,12 @@ _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
|
41
33
|
};
|
|
42
34
|
}>, {
|
|
43
35
|
aiOverviewRef: import("vue").Ref<HTMLDivElement | null, HTMLDivElement | null>;
|
|
44
|
-
buttonText: import("vue").ComputedRef<string>;
|
|
45
36
|
emptyTaggingRequest: TaggingRequest;
|
|
46
37
|
expanded: import("vue").Ref<boolean, boolean>;
|
|
47
38
|
parsedResponseText: import("vue").ComputedRef<string | Promise<string>>;
|
|
48
39
|
suggestionsLoading: import("vue").ComputedRef<boolean>;
|
|
49
40
|
suggestionsSearch: import("vue").ComputedRef<import("@empathyco/x-types").AiSuggestionSearch[]>;
|
|
50
41
|
suggestionText: import("vue").ComputedRef<string>;
|
|
51
|
-
emitAndSetExpand: (isExpanded: boolean) => void;
|
|
52
42
|
shouldAnimateSuggestion: import("vue").Ref<boolean, boolean>;
|
|
53
43
|
query: import("vue").ComputedRef<string>;
|
|
54
44
|
tagging: import("vue").ComputedRef<import("@empathyco/x-types").AiSuggestionTagging | undefined>;
|
|
@@ -62,14 +52,6 @@ _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
|
62
52
|
type: StringConstructor;
|
|
63
53
|
default: string;
|
|
64
54
|
};
|
|
65
|
-
expandText: {
|
|
66
|
-
type: StringConstructor;
|
|
67
|
-
default: string;
|
|
68
|
-
};
|
|
69
|
-
collapseText: {
|
|
70
|
-
type: StringConstructor;
|
|
71
|
-
default: string;
|
|
72
|
-
};
|
|
73
55
|
autoExpandInSearchNoResults: {
|
|
74
56
|
type: BooleanConstructor;
|
|
75
57
|
default: boolean;
|
|
@@ -88,14 +70,11 @@ _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
|
88
70
|
};
|
|
89
71
|
}>> & Readonly<{}>, {
|
|
90
72
|
titleLoading: string;
|
|
91
|
-
expandText: string;
|
|
92
|
-
collapseText: string;
|
|
93
73
|
autoExpandInSearchNoResults: boolean;
|
|
94
74
|
}, {}, {
|
|
95
75
|
AIStarIcon: import("vue").DefineComponent<{}, {}, any>;
|
|
96
76
|
ArrowRightIcon: import("vue").DefineComponent<{}, {}, any>;
|
|
97
77
|
BaseEventButton: import("vue").DefineComponent<{}, {}, any>;
|
|
98
|
-
ChevronDownIcon: import("vue").DefineComponent<{}, {}, any>;
|
|
99
78
|
CollapseHeight: import("vue").DefineComponent<{}, {}, any>;
|
|
100
79
|
ChangeHeight: import("vue").DefineComponent<{}, {}, any>;
|
|
101
80
|
Fade: import("vue").DefineComponent<{}, {}, any>;
|
|
@@ -7404,17 +7404,6 @@ Default implementation for the [TaggingActions.track](./x-components.taggingacti
|
|
|
7404
7404
|
Performs a track of a result added to the cart.
|
|
7405
7405
|
|
|
7406
7406
|
|
|
7407
|
-
</td></tr>
|
|
7408
|
-
<tr><td>
|
|
7409
|
-
|
|
7410
|
-
[trackAiOverviewButtonClickedWire](./x-components.trackaioverviewbuttonclickedwire.md)
|
|
7411
|
-
|
|
7412
|
-
|
|
7413
|
-
</td><td>
|
|
7414
|
-
|
|
7415
|
-
Performs a track of clicking the AI overview expand button when the playload (expanded) is false.
|
|
7416
|
-
|
|
7417
|
-
|
|
7418
7407
|
</td></tr>
|
|
7419
7408
|
<tr><td>
|
|
7420
7409
|
|
|
@@ -12,8 +12,6 @@ title: AiOverview
|
|
|
12
12
|
| ------------------------------------------ | ----------- | -------------------- | ----------------------------------------- |
|
|
13
13
|
| <code>title</code> | | <code>string</code> | <code></code> |
|
|
14
14
|
| <code>titleLoading</code> | | <code>string</code> | <code>'Generating with Empathy AI'</code> |
|
|
15
|
-
| <code>expandText</code> | | <code>string</code> | <code>'Show more'</code> |
|
|
16
|
-
| <code>collapseText</code> | | <code>string</code> | <code>'Show less'</code> |
|
|
17
15
|
| <code>autoExpandInSearchNoResults</code> | | <code>boolean</code> | <code>true</code> |
|
|
18
16
|
| <code>contentClasses</code> | | <code>string</code> | <code></code> |
|
|
19
17
|
| <code>slidingPanelsClasses</code> | | <code>string</code> | <code></code> |
|
|
@@ -32,7 +30,6 @@ title: AiOverview
|
|
|
32
30
|
| <code>sliding-panels-right-button</code> | | None |
|
|
33
31
|
| <code>result</code> | (required) result card | |
|
|
34
32
|
| <code>suggestions-extra-content</code> | | None |
|
|
35
|
-
| <code>cta-button</code> | | None |
|
|
36
33
|
|
|
37
34
|
## AI Overview Examples
|
|
38
35
|
|
package/js/index.js
CHANGED
|
@@ -443,7 +443,7 @@ export { DefaultExternalTaggingService } from './x-modules/tagging/service/exter
|
|
|
443
443
|
export { track } from './x-modules/tagging/store/actions/track.action.js';
|
|
444
444
|
export { taggingEmitters } from './x-modules/tagging/store/emitters.js';
|
|
445
445
|
export { taggingXStoreModule } from './x-modules/tagging/store/module.js';
|
|
446
|
-
export { createSetQueryTaggingFromQueryPreview, createTrackDisplayWire, createTrackRelatedPromptToolingDisplayClickWire, createTrackToolingAdd2CartWire, createTrackToolingDisplayWire, createTrackWire, setConsent, setNoResultsTaggingEnabledWire, setQueryTaggingFromQueryPreview, setQueryTaggingInfo, setTaggingConfig, taggingWiring, trackAddToCartWire,
|
|
446
|
+
export { createSetQueryTaggingFromQueryPreview, createTrackDisplayWire, createTrackRelatedPromptToolingDisplayClickWire, createTrackToolingAdd2CartWire, createTrackToolingDisplayWire, createTrackWire, setConsent, setNoResultsTaggingEnabledWire, setQueryTaggingFromQueryPreview, setQueryTaggingInfo, setTaggingConfig, taggingWiring, trackAddToCartWire, trackAiSuggestionsSearchWire, trackBannerClickedWire, trackDisplayClickedWire, trackElementDisplayedWire, trackNoResultsQueryWithFallbackWire, trackNoResultsQueryWithFallbackWireDebounced, trackNoResultsQueryWithSemanticsWire, trackNoResultsQueryWithSemanticsWireDebounced, trackPromotedClickedWire, trackQueryWire, trackRelatedPromptToolingDisplayClickWire, trackResultClickedWire, trackToolingAdd2CartWire, trackToolingDisplayClickedWire } from './x-modules/tagging/wiring.js';
|
|
447
447
|
export { taggingXModule } from './x-modules/tagging/x-module.js';
|
|
448
448
|
export { default as UrlHandler } from './x-modules/url/components/url-handler.vue.js';
|
|
449
449
|
export { replaceableParams, urlEmitters } from './x-modules/url/store/emitters.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _sfc_main from './ai-overview.vue2.js';
|
|
2
|
-
import { resolveComponent, openBlock, createBlock, withCtx, createElementBlock, createElementVNode, createVNode, renderSlot, createTextVNode, toDisplayString, createCommentVNode, normalizeClass, normalizeStyle,
|
|
2
|
+
import { resolveComponent, openBlock, createBlock, withCtx, createElementBlock, createElementVNode, createVNode, renderSlot, createTextVNode, toDisplayString, createCommentVNode, normalizeClass, normalizeStyle, Fragment, renderList } from 'vue';
|
|
3
3
|
import './ai-overview.vue3.js';
|
|
4
4
|
import _export_sfc from '../../../_virtual/_plugin-vue_export-helper.js';
|
|
5
5
|
|
|
@@ -36,10 +36,6 @@ const _hoisted_9 = {
|
|
|
36
36
|
"data-test": "ai-overview-suggestions-container"
|
|
37
37
|
};
|
|
38
38
|
const _hoisted_10 = { class: "x-ai-overview-suggestion-results" };
|
|
39
|
-
const _hoisted_11 = {
|
|
40
|
-
class: "x-ai-overview-gradient",
|
|
41
|
-
"data-test": "ai-overview-gradient"
|
|
42
|
-
};
|
|
43
39
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
44
40
|
const _component_AIStarIcon = resolveComponent("AIStarIcon");
|
|
45
41
|
const _component_DisplayEmitter = resolveComponent("DisplayEmitter");
|
|
@@ -51,7 +47,6 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
51
47
|
const _component_SlidingPanel = resolveComponent("SlidingPanel");
|
|
52
48
|
const _component_DisplayClickProvider = resolveComponent("DisplayClickProvider");
|
|
53
49
|
const _component_CollapseHeight = resolveComponent("CollapseHeight");
|
|
54
|
-
const _component_ChevronDownIcon = resolveComponent("ChevronDownIcon");
|
|
55
50
|
return openBlock(), createBlock(_component_CollapseHeight, null, {
|
|
56
51
|
default: withCtx(() => [
|
|
57
52
|
!_ctx.isNoResults ? (openBlock(), createElementBlock(
|
|
@@ -62,7 +57,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
62
57
|
createVNode(_component_Fade, { mode: "out-in" }, {
|
|
63
58
|
default: withCtx(() => [
|
|
64
59
|
_ctx.suggestionsLoading ? (openBlock(), createElementBlock("span", _hoisted_3, [
|
|
65
|
-
_cache[
|
|
60
|
+
_cache[0] || (_cache[0] = createElementVNode(
|
|
66
61
|
"span",
|
|
67
62
|
{ class: "x-ai-overview-title-loading-indicator" },
|
|
68
63
|
null,
|
|
@@ -134,177 +129,129 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
134
129
|
"data-test": "ai-overview-collapse-height-suggestions"
|
|
135
130
|
}, {
|
|
136
131
|
default: withCtx(() => [
|
|
137
|
-
|
|
138
|
-
"div",
|
|
139
|
-
null,
|
|
140
|
-
[
|
|
141
|
-
!_ctx.suggestionsSearch.length ? (openBlock(), createBlock(_component_SpinnerIcon, {
|
|
142
|
-
key: 0,
|
|
143
|
-
class: "x-ai-overview-suggestions-loading",
|
|
144
|
-
"data-test": "ai-overview-suggestions-loading"
|
|
145
|
-
})) : (openBlock(), createElementBlock("div", _hoisted_9, [
|
|
146
|
-
(openBlock(true), createElementBlock(
|
|
147
|
-
Fragment,
|
|
148
|
-
null,
|
|
149
|
-
renderList(_ctx.suggestionsSearch, ({ query: suggestionQuery, results: queriesResults }, suggestionIndex) => {
|
|
150
|
-
return openBlock(), createBlock(_component_DisplayEmitter, {
|
|
151
|
-
key: suggestionQuery,
|
|
152
|
-
payload: _ctx.tagging?.searchQueries[suggestionQuery].toolingDisplay ?? _ctx.emptyTaggingRequest,
|
|
153
|
-
"event-metadata": {
|
|
154
|
-
feature: "overview",
|
|
155
|
-
displayOriginalQuery: _ctx.query || "overview-without-query",
|
|
156
|
-
replaceable: false
|
|
157
|
-
},
|
|
158
|
-
"data-test": "ai-overview-query-display-emitter"
|
|
159
|
-
}, {
|
|
160
|
-
default: withCtx(() => [
|
|
161
|
-
createElementVNode(
|
|
162
|
-
"div",
|
|
163
|
-
{
|
|
164
|
-
class: normalizeClass(["x-ai-overview-suggestion", {
|
|
165
|
-
"x-ai-overview-result-animation": _ctx.shouldAnimateSuggestion
|
|
166
|
-
}]),
|
|
167
|
-
"data-test": "ai-overview-suggestion",
|
|
168
|
-
style: normalizeStyle({ animationDelay: `${suggestionIndex * 300}ms` })
|
|
169
|
-
},
|
|
170
|
-
[
|
|
171
|
-
createVNode(_component_BaseEventButton, {
|
|
172
|
-
class: "x-ai-overview-suggestion-query-btn",
|
|
173
|
-
events: { UserAcceptedAQuery: suggestionQuery }
|
|
174
|
-
}, {
|
|
175
|
-
default: withCtx(() => [
|
|
176
|
-
createTextVNode(
|
|
177
|
-
toDisplayString(suggestionQuery) + " ",
|
|
178
|
-
1
|
|
179
|
-
/* TEXT */
|
|
180
|
-
),
|
|
181
|
-
createVNode(_component_ArrowRightIcon, { class: "x-ai-overview-suggestion-query-btn-icon" })
|
|
182
|
-
]),
|
|
183
|
-
_: 2
|
|
184
|
-
/* DYNAMIC */
|
|
185
|
-
}, 1032, ["events"]),
|
|
186
|
-
createVNode(_component_DisplayClickProvider, {
|
|
187
|
-
"tooling-display-tagging": _ctx.tagging?.searchQueries[suggestionQuery].toolingDisplayClick,
|
|
188
|
-
"tooling-add2-cart-tagging": _ctx.tagging?.searchQueries[suggestionQuery].toolingDisplayAdd2Cart,
|
|
189
|
-
"result-feature": "overview"
|
|
190
|
-
}, {
|
|
191
|
-
default: withCtx(() => [
|
|
192
|
-
renderSlot(_ctx.$slots, "sliding-panel", { results: queriesResults }, () => [
|
|
193
|
-
createVNode(_component_SlidingPanel, {
|
|
194
|
-
class: normalizeClass(_ctx.slidingPanelsClasses),
|
|
195
|
-
"scroll-container-class": _ctx.slidingPanelContainersClasses,
|
|
196
|
-
"button-class": _ctx.slidingPanelButtonsClasses,
|
|
197
|
-
"reset-on-content-change": false
|
|
198
|
-
}, {
|
|
199
|
-
"sliding-panel-addons": withCtx(({ arrivedState }) => [
|
|
200
|
-
renderSlot(_ctx.$slots, "sliding-panels-addons", { arrivedState })
|
|
201
|
-
]),
|
|
202
|
-
"sliding-panel-left-button": withCtx(() => [
|
|
203
|
-
renderSlot(_ctx.$slots, "sliding-panels-left-button")
|
|
204
|
-
]),
|
|
205
|
-
"sliding-panel-right-button": withCtx(() => [
|
|
206
|
-
renderSlot(_ctx.$slots, "sliding-panels-right-button")
|
|
207
|
-
]),
|
|
208
|
-
default: withCtx(() => [
|
|
209
|
-
createElementVNode("ul", _hoisted_10, [
|
|
210
|
-
(openBlock(true), createElementBlock(
|
|
211
|
-
Fragment,
|
|
212
|
-
null,
|
|
213
|
-
renderList(queriesResults, (result, resultIndex) => {
|
|
214
|
-
return openBlock(), createElementBlock(
|
|
215
|
-
"li",
|
|
216
|
-
{
|
|
217
|
-
key: result.id,
|
|
218
|
-
"data-test": "ai-overview-suggestion-result",
|
|
219
|
-
class: normalizeClass({
|
|
220
|
-
"x-ai-overview-result-animation": _ctx.shouldAnimateSuggestion
|
|
221
|
-
}),
|
|
222
|
-
style: normalizeStyle({
|
|
223
|
-
animationDelay: `${suggestionIndex * 300 + resultIndex * 300}ms`
|
|
224
|
-
})
|
|
225
|
-
},
|
|
226
|
-
[
|
|
227
|
-
renderSlot(_ctx.$slots, "result", { result })
|
|
228
|
-
],
|
|
229
|
-
6
|
|
230
|
-
/* CLASS, STYLE */
|
|
231
|
-
);
|
|
232
|
-
}),
|
|
233
|
-
128
|
|
234
|
-
/* KEYED_FRAGMENT */
|
|
235
|
-
))
|
|
236
|
-
])
|
|
237
|
-
]),
|
|
238
|
-
_: 2
|
|
239
|
-
/* DYNAMIC */
|
|
240
|
-
}, 1032, ["class", "scroll-container-class", "button-class"])
|
|
241
|
-
])
|
|
242
|
-
]),
|
|
243
|
-
_: 2
|
|
244
|
-
/* DYNAMIC */
|
|
245
|
-
}, 1032, ["tooling-display-tagging", "tooling-add2-cart-tagging"])
|
|
246
|
-
],
|
|
247
|
-
6
|
|
248
|
-
/* CLASS, STYLE */
|
|
249
|
-
)
|
|
250
|
-
]),
|
|
251
|
-
_: 2
|
|
252
|
-
/* DYNAMIC */
|
|
253
|
-
}, 1032, ["payload", "event-metadata"]);
|
|
254
|
-
}),
|
|
255
|
-
128
|
|
256
|
-
/* KEYED_FRAGMENT */
|
|
257
|
-
)),
|
|
258
|
-
renderSlot(_ctx.$slots, "suggestions-extra-content")
|
|
259
|
-
]))
|
|
260
|
-
],
|
|
261
|
-
512
|
|
262
|
-
/* NEED_PATCH */
|
|
263
|
-
), [
|
|
264
|
-
[vShow, _ctx.expanded]
|
|
265
|
-
])
|
|
266
|
-
]),
|
|
267
|
-
_: 3
|
|
268
|
-
/* FORWARDED */
|
|
269
|
-
}, 8, ["style"]),
|
|
270
|
-
createVNode(_component_Fade, null, {
|
|
271
|
-
default: withCtx(() => [
|
|
272
|
-
_ctx.queries.length ? (openBlock(), createElementBlock("div", {
|
|
132
|
+
!_ctx.suggestionsSearch.length ? (openBlock(), createBlock(_component_SpinnerIcon, {
|
|
273
133
|
key: 0,
|
|
274
|
-
class: "x-ai-overview-
|
|
275
|
-
"data-test": "ai-overview-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
"div",
|
|
280
|
-
_hoisted_11,
|
|
134
|
+
class: "x-ai-overview-suggestions-loading",
|
|
135
|
+
"data-test": "ai-overview-suggestions-loading"
|
|
136
|
+
})) : (openBlock(), createElementBlock("div", _hoisted_9, [
|
|
137
|
+
(openBlock(true), createElementBlock(
|
|
138
|
+
Fragment,
|
|
281
139
|
null,
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
140
|
+
renderList(_ctx.suggestionsSearch, ({ query: suggestionQuery, results: queriesResults }, suggestionIndex) => {
|
|
141
|
+
return openBlock(), createBlock(_component_DisplayEmitter, {
|
|
142
|
+
key: suggestionQuery,
|
|
143
|
+
payload: _ctx.tagging?.searchQueries[suggestionQuery].toolingDisplay ?? _ctx.emptyTaggingRequest,
|
|
144
|
+
"event-metadata": {
|
|
145
|
+
feature: "overview",
|
|
146
|
+
displayOriginalQuery: _ctx.query || "overview-without-query",
|
|
147
|
+
replaceable: false
|
|
148
|
+
},
|
|
149
|
+
"data-test": "ai-overview-query-display-emitter"
|
|
150
|
+
}, {
|
|
151
|
+
default: withCtx(() => [
|
|
152
|
+
createElementVNode(
|
|
153
|
+
"div",
|
|
154
|
+
{
|
|
155
|
+
class: normalizeClass(["x-ai-overview-suggestion", {
|
|
156
|
+
"x-ai-overview-result-animation": _ctx.shouldAnimateSuggestion
|
|
157
|
+
}]),
|
|
158
|
+
"data-test": "ai-overview-suggestion",
|
|
159
|
+
style: normalizeStyle({ animationDelay: `${suggestionIndex * 300}ms` })
|
|
160
|
+
},
|
|
161
|
+
[
|
|
162
|
+
createVNode(_component_BaseEventButton, {
|
|
163
|
+
class: "x-ai-overview-suggestion-query-btn",
|
|
164
|
+
events: { UserAcceptedAQuery: suggestionQuery }
|
|
165
|
+
}, {
|
|
166
|
+
default: withCtx(() => [
|
|
167
|
+
createTextVNode(
|
|
168
|
+
toDisplayString(suggestionQuery) + " ",
|
|
169
|
+
1
|
|
170
|
+
/* TEXT */
|
|
171
|
+
),
|
|
172
|
+
createVNode(_component_ArrowRightIcon, { class: "x-ai-overview-suggestion-query-btn-icon" })
|
|
173
|
+
]),
|
|
174
|
+
_: 2
|
|
175
|
+
/* DYNAMIC */
|
|
176
|
+
}, 1032, ["events"]),
|
|
177
|
+
createVNode(_component_DisplayClickProvider, {
|
|
178
|
+
"tooling-display-tagging": _ctx.tagging?.searchQueries[suggestionQuery].toolingDisplayClick,
|
|
179
|
+
"tooling-add2-cart-tagging": _ctx.tagging?.searchQueries[suggestionQuery].toolingDisplayAdd2Cart,
|
|
180
|
+
"result-feature": "overview"
|
|
181
|
+
}, {
|
|
182
|
+
default: withCtx(() => [
|
|
183
|
+
renderSlot(_ctx.$slots, "sliding-panel", { results: queriesResults }, () => [
|
|
184
|
+
createVNode(_component_SlidingPanel, {
|
|
185
|
+
class: normalizeClass(_ctx.slidingPanelsClasses),
|
|
186
|
+
"scroll-container-class": _ctx.slidingPanelContainersClasses,
|
|
187
|
+
"button-class": _ctx.slidingPanelButtonsClasses,
|
|
188
|
+
"reset-on-content-change": false
|
|
189
|
+
}, {
|
|
190
|
+
"sliding-panel-addons": withCtx(({ arrivedState }) => [
|
|
191
|
+
renderSlot(_ctx.$slots, "sliding-panels-addons", { arrivedState })
|
|
192
|
+
]),
|
|
193
|
+
"sliding-panel-left-button": withCtx(() => [
|
|
194
|
+
renderSlot(_ctx.$slots, "sliding-panels-left-button")
|
|
195
|
+
]),
|
|
196
|
+
"sliding-panel-right-button": withCtx(() => [
|
|
197
|
+
renderSlot(_ctx.$slots, "sliding-panels-right-button")
|
|
198
|
+
]),
|
|
199
|
+
default: withCtx(() => [
|
|
200
|
+
createElementVNode("ul", _hoisted_10, [
|
|
201
|
+
(openBlock(true), createElementBlock(
|
|
202
|
+
Fragment,
|
|
203
|
+
null,
|
|
204
|
+
renderList(queriesResults, (result, resultIndex) => {
|
|
205
|
+
return openBlock(), createElementBlock(
|
|
206
|
+
"li",
|
|
207
|
+
{
|
|
208
|
+
key: result.id,
|
|
209
|
+
"data-test": "ai-overview-suggestion-result",
|
|
210
|
+
class: normalizeClass({
|
|
211
|
+
"x-ai-overview-result-animation": _ctx.shouldAnimateSuggestion
|
|
212
|
+
}),
|
|
213
|
+
style: normalizeStyle({
|
|
214
|
+
animationDelay: `${suggestionIndex * 300 + resultIndex * 300}ms`
|
|
215
|
+
})
|
|
216
|
+
},
|
|
217
|
+
[
|
|
218
|
+
renderSlot(_ctx.$slots, "result", { result })
|
|
219
|
+
],
|
|
220
|
+
6
|
|
221
|
+
/* CLASS, STYLE */
|
|
222
|
+
);
|
|
223
|
+
}),
|
|
224
|
+
128
|
|
225
|
+
/* KEYED_FRAGMENT */
|
|
226
|
+
))
|
|
227
|
+
])
|
|
228
|
+
]),
|
|
229
|
+
_: 2
|
|
230
|
+
/* DYNAMIC */
|
|
231
|
+
}, 1032, ["class", "scroll-container-class", "button-class"])
|
|
232
|
+
])
|
|
233
|
+
]),
|
|
234
|
+
_: 2
|
|
235
|
+
/* DYNAMIC */
|
|
236
|
+
}, 1032, ["tooling-display-tagging", "tooling-add2-cart-tagging"])
|
|
237
|
+
],
|
|
238
|
+
6
|
|
239
|
+
/* CLASS, STYLE */
|
|
240
|
+
)
|
|
241
|
+
]),
|
|
242
|
+
_: 2
|
|
243
|
+
/* DYNAMIC */
|
|
244
|
+
}, 1032, ["payload", "event-metadata"]);
|
|
245
|
+
}),
|
|
246
|
+
128
|
|
247
|
+
/* KEYED_FRAGMENT */
|
|
248
|
+
)),
|
|
249
|
+
renderSlot(_ctx.$slots, "suggestions-extra-content")
|
|
250
|
+
]))
|
|
304
251
|
]),
|
|
305
252
|
_: 3
|
|
306
253
|
/* FORWARDED */
|
|
307
|
-
})
|
|
254
|
+
}, 8, ["style"])
|
|
308
255
|
],
|
|
309
256
|
512
|
|
310
257
|
/* NEED_PATCH */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-overview.vue.js","sources":["../../../../../src/x-modules/ai/components/ai-overview.vue"],"sourcesContent":["<template>\n <CollapseHeight>\n <div\n v-if=\"!isNoResults\"\n ref=\"aiOverviewRef\"\n class=\"x-ai-overview\"\n data-test=\"ai-overview-wrapper\"\n >\n <div class=\"x-ai-overview-main\">\n <Fade mode=\"out-in\">\n <span\n v-if=\"suggestionsLoading\"\n class=\"x-ai-overview-title-loading\"\n data-test=\"ai-overview-title-loading\"\n >\n <span class=\"x-ai-overview-title-loading-indicator\" />\n <span\n class=\"x-ai-overview-title-loading-text\"\n data-test=\"ai-overview-title-loading-text\"\n >\n <slot name=\"title-loading\">\n {{ titleLoading }}\n </slot>\n </span>\n </span>\n <DisplayEmitter\n v-else\n :payload=\"tagging?.toolingDisplay ?? emptyTaggingRequest\"\n :event-metadata=\"{\n feature: 'overview',\n displayOriginalQuery: query || 'overview-without-query',\n replaceable: false,\n }\"\n data-test=\"ai-overview-display-emitter\"\n >\n <span class=\"x-ai-overview-title\" data-test=\"ai-overview-title\">\n <AIStarIcon class=\"x-ai-overview-title-icon\" />{{ !!title ? title : suggestionText }}\n </span>\n </DisplayEmitter>\n </Fade>\n <ChangeHeight>\n <div class=\"x-ai-overview-content-wrapper\">\n <span\n v-if=\"title\"\n class=\"x-ai-overview-content-title\"\n data-test=\"ai-overview-content-title\"\n >{{ suggestionText }}\n </span>\n <div\n :class=\"contentClasses\"\n data-test=\"ai-overview-content\"\n v-html=\"parsedResponseText\"\n />\n </div>\n </ChangeHeight>\n <slot name=\"extra-content\" />\n </div>\n <CollapseHeight\n :style=\"{\n '--x-collapse-height-transition-duration': `${300 * suggestionsSearch.length}ms`,\n }\"\n data-test=\"ai-overview-collapse-height-suggestions\"\n >\n <div v-show=\"expanded\">\n <SpinnerIcon\n v-if=\"!suggestionsSearch.length\"\n class=\"x-ai-overview-suggestions-loading\"\n data-test=\"ai-overview-suggestions-loading\"\n />\n <div\n v-else\n class=\"x-ai-overview-suggestions\"\n data-test=\"ai-overview-suggestions-container\"\n >\n <DisplayEmitter\n v-for=\"(\n { query: suggestionQuery, results: queriesResults }, suggestionIndex\n ) in suggestionsSearch\"\n :key=\"suggestionQuery\"\n :payload=\"\n tagging?.searchQueries[suggestionQuery].toolingDisplay ?? emptyTaggingRequest\n \"\n :event-metadata=\"{\n feature: 'overview',\n displayOriginalQuery: query || 'overview-without-query',\n replaceable: false,\n }\"\n data-test=\"ai-overview-query-display-emitter\"\n >\n <div\n class=\"x-ai-overview-suggestion\"\n data-test=\"ai-overview-suggestion\"\n :class=\"{\n 'x-ai-overview-result-animation': shouldAnimateSuggestion,\n }\"\n :style=\"{ animationDelay: `${suggestionIndex * 300}ms` }\"\n >\n <BaseEventButton\n class=\"x-ai-overview-suggestion-query-btn\"\n :events=\"{ UserAcceptedAQuery: suggestionQuery }\"\n >\n {{ suggestionQuery }}\n <ArrowRightIcon class=\"x-ai-overview-suggestion-query-btn-icon\" />\n </BaseEventButton>\n\n <DisplayClickProvider\n :tooling-display-tagging=\"\n tagging?.searchQueries[suggestionQuery].toolingDisplayClick\n \"\n :tooling-add2-cart-tagging=\"\n tagging?.searchQueries[suggestionQuery].toolingDisplayAdd2Cart\n \"\n result-feature=\"overview\"\n >\n <slot name=\"sliding-panel\" :results=\"queriesResults\">\n <SlidingPanel\n :class=\"slidingPanelsClasses\"\n :scroll-container-class=\"slidingPanelContainersClasses\"\n :button-class=\"slidingPanelButtonsClasses\"\n :reset-on-content-change=\"false\"\n >\n <template #sliding-panel-addons=\"{ arrivedState }\">\n <slot name=\"sliding-panels-addons\" :arrived-state=\"arrivedState\" />\n </template>\n <template #sliding-panel-left-button>\n <slot name=\"sliding-panels-left-button\" />\n </template>\n <template #sliding-panel-right-button>\n <slot name=\"sliding-panels-right-button\" />\n </template>\n <ul class=\"x-ai-overview-suggestion-results\">\n <li\n v-for=\"(result, resultIndex) in queriesResults\"\n :key=\"result.id\"\n data-test=\"ai-overview-suggestion-result\"\n :class=\"{\n 'x-ai-overview-result-animation': shouldAnimateSuggestion,\n }\"\n :style=\"{\n animationDelay: `${suggestionIndex * 300 + resultIndex * 300}ms`,\n }\"\n >\n <!-- @slot (required) result card -->\n <slot name=\"result\" :result=\"result\" />\n </li>\n </ul>\n </SlidingPanel>\n </slot>\n </DisplayClickProvider>\n </div>\n </DisplayEmitter>\n <slot name=\"suggestions-extra-content\" />\n </div>\n </div>\n </CollapseHeight>\n\n <Fade>\n <div\n v-if=\"queries.length\"\n class=\"x-ai-overview-toggle-btn-wrapper x-cursor-pointer\"\n data-test=\"ai-overview-toggle-button-wrapper\"\n @click=\"!$slots['cta-button'] && emitAndSetExpand(!expanded)\"\n >\n <div v-show=\"!expanded\" class=\"x-ai-overview-gradient\" data-test=\"ai-overview-gradient\" />\n <slot name=\"cta-button\">\n <button\n class=\"x-ai-overview-toggle-btn\"\n data-test=\"ai-overview-toggle-button\"\n @click.stop=\"emitAndSetExpand(!expanded)\"\n >\n {{ buttonText }}\n <ChevronDownIcon\n class=\"x-ai-overview-toggle-btn-icon\"\n :class=\"{ 'x-ai-overview-toggle-btn-icon-expanded': expanded }\"\n />\n </button>\n </slot>\n </div>\n </Fade>\n </div>\n </CollapseHeight>\n</template>\n\n<script lang=\"ts\">\nimport type { TaggingRequest } from '@empathyco/x-types'\nimport { marked } from 'marked'\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport {\n AIStarIcon,\n ArrowRightIcon,\n BaseEventButton,\n ChangeHeight,\n ChevronDownIcon,\n CollapseHeight,\n DisplayClickProvider,\n Fade,\n SlidingPanel,\n SpinnerIcon,\n} from '../../../components'\nimport DisplayEmitter from '../../../components/display-emitter.vue'\nimport { use$x, useGetter, useState } from '../../../composables'\nimport { typing } from '../../../directives'\nimport { aiXModule } from '../x-module'\n\nexport default defineComponent({\n directives: {\n typing,\n },\n xModule: aiXModule.name,\n components: {\n AIStarIcon,\n ArrowRightIcon,\n BaseEventButton,\n ChevronDownIcon,\n CollapseHeight,\n ChangeHeight,\n Fade,\n SlidingPanel,\n SpinnerIcon,\n DisplayEmitter,\n DisplayClickProvider,\n },\n props: {\n /* The text displayed when the question ended loading */\n title: {\n type: String,\n },\n /* The text displayed when the question is loading. */\n titleLoading: {\n type: String,\n default: 'Generating with Empathy AI',\n },\n /* The text displayed on the toggle button when collapsed. */\n expandText: {\n type: String,\n default: 'Show more',\n },\n /* The text displayed on the toggle button when expanded. */\n collapseText: {\n type: String,\n default: 'Show less',\n },\n /* Auto expand the AI Overview when there are queries in AI and no-results in search. */\n autoExpandInSearchNoResults: {\n type: Boolean,\n default: true,\n },\n /* The classes added to the parsed response text container. */\n contentClasses: {\n type: String,\n },\n /* The classes added to each sliding panel for each query. */\n slidingPanelsClasses: {\n type: String,\n },\n /* The classes added to each sliding panel container of each query. */\n slidingPanelContainersClasses: {\n type: String,\n },\n /* The classes added to each sliding panel button of each query. */\n slidingPanelButtonsClasses: {\n type: String,\n },\n },\n setup(props) {\n const $x = use$x()\n const { query } = useGetter('ai')\n const {\n suggestionText,\n responseText,\n suggestionsSearch,\n suggestionsStatus,\n tagging,\n isNoResults,\n queries,\n } = useState('ai')\n\n const emptyTaggingRequest: TaggingRequest = { url: '', params: {} }\n\n const aiOverviewRef = ref<HTMLDivElement | null>(null)\n const expanded = ref(false)\n const shouldAnimateSuggestion = ref(true)\n const parsedResponseText = computed(() => marked.parse(responseText.value))\n\n const suggestionsLoading = computed(\n () => suggestionsStatus.value !== 'success' && suggestionsStatus.value !== 'error',\n )\n\n const buttonText = computed(() => (expanded.value ? props.collapseText : props.expandText))\n\n function emitAndSetExpand(isExpanded: boolean) {\n $x.emit('UserClickedAiOverviewExpandButton', expanded.value, {\n suggestionText: suggestionText.value,\n toolingDisplayClick: tagging.value?.toolingDisplayClick,\n })\n\n expanded.value = isExpanded\n if (!expanded.value) {\n aiOverviewRef.value?.scrollIntoView({ behavior: 'smooth' })\n shouldAnimateSuggestion.value = false\n }\n }\n\n /* Expand AIOverview programmatically when the `autoExpandInSearchNoResults` prop is active,\n the request for suggestions has ended; there are queries in AI and no-results in search. */\n watch([suggestionsStatus, () => $x.noResults], () => {\n if (\n props.autoExpandInSearchNoResults &&\n !suggestionsLoading.value &&\n queries.value.length &&\n $x.noResults\n ) {\n emitAndSetExpand(true)\n }\n })\n\n $x.on('AiSuggestionsRequestUpdated', false).subscribe(() => {\n expanded.value = false\n shouldAnimateSuggestion.value = true\n })\n\n onMounted(() => {\n $x.emit('AiComponentMounted', undefined, { feature: 'overview' })\n })\n\n return {\n aiOverviewRef,\n buttonText,\n emptyTaggingRequest,\n expanded,\n parsedResponseText,\n suggestionsLoading,\n suggestionsSearch,\n suggestionText,\n emitAndSetExpand,\n shouldAnimateSuggestion,\n query,\n tagging,\n isNoResults,\n queries,\n }\n },\n})\n</script>\n\n<style lang=\"css\">\n.x-ai-overview {\n --color: var(--x-ai-overview-color, #bbc9cf);\n --color-lighter: var(--x-ai-overview-color-lighter, color-mix(in srgb, var(--color) 25%, white));\n\n position: relative;\n border-radius: 1.5rem;\n background-color: var(--color-lighter);\n}\n\n.x-ai-overview-main {\n padding: 1rem;\n max-width: var(--x-ai-overview-main-max-width, none);\n margin: 0 auto;\n}\n\n.x-ai-overview-title {\n display: flex;\n font-size: 0.875rem;\n font-weight: 700;\n gap: 0.25rem;\n align-items: center;\n margin-bottom: 0.5rem;\n}\n\n.x-ai-overview-title-loading {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n margin-bottom: 0.5rem;\n}\n\n.x-ai-overview-title-loading-indicator {\n width: 0.75rem;\n height: 0.75rem;\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n border-radius: 9999px;\n background-color: var(--color);\n}\n\n.x-ai-overview-title-loading-text {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n font-size: 0.75rem;\n}\n\n.x-ai-overview-title-icon {\n height: 1rem;\n aspect-ratio: 1 / 1;\n color: var(--color);\n flex-shrink: 0;\n}\n\n.x-ai-overview-content-wrapper {\n display: flex;\n flex-direction: column;\n text-align: left;\n line-height: 1.25rem;\n}\n\n.x-ai-overview-content-title {\n font-weight: 500;\n margin-bottom: 8px;\n}\n\n.x-ai-overview-gradient {\n border-radius: 1.5rem;\n cursor: pointer;\n content: none;\n position: absolute;\n width: 100%;\n height: 100%;\n bottom: 0;\n background-image: linear-gradient(to bottom, transparent 0%, var(--color-lighter) 100%);\n}\n\n.x-ai-overview-toggle-btn-wrapper {\n display: flex;\n justify-content: center;\n}\n\n.x-ai-overview-toggle-btn {\n border-color: var(--button-color-50, #283034);\n background-color: #ffffff;\n color: var(--button-color-50, #283034);\n border-radius: 9999px;\n width: 100%;\n margin: auto;\n padding-right: 1rem;\n padding-left: 1rem;\n display: flex;\n justify-content: center;\n align-items: center;\n border-style: solid;\n border-width: 1px;\n font-weight: 700;\n min-height: 2.5rem;\n gap: 0.5rem;\n font-size: 0.875rem;\n position: relative;\n}\n\n.x-ai-overview-toggle-btn:hover {\n border-color: var(--button-color-50, #283034);\n background-color: var(--button-color-50, #283034);\n color: #ffffff;\n}\n\n@media (min-width: 640px) {\n .x-ai-overview-toggle-btn {\n transition-property: all;\n transition-duration: 500ms;\n transform: translateY(50%);\n width: var(--expand-button-width, 200px);\n }\n}\n\n.x-ai-overview-toggle-btn-icon {\n transform: rotate(0deg);\n height: 1rem;\n aspect-ratio: 1 / 1;\n transition-property: all;\n transition-duration: 300ms;\n}\n\n.x-ai-overview-toggle-btn-icon-expanded {\n transform: rotate(180deg);\n}\n\n.x-ai-overview-suggestion-query-btn {\n border-color: transparent;\n background-color: transparent;\n margin-left: 1rem;\n margin-right: 1rem;\n font-weight: 700;\n width: fit-content;\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.x-ai-overview-suggestion-query-btn-icon {\n height: 1rem;\n aspect-ratio: 1 / 1;\n}\n\n.x-ai-overview-suggestions {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding-bottom: 1rem;\n}\n\n.x-ai-overview-suggestions-loading {\n width: 2.5rem;\n height: 2.5rem;\n margin: auto;\n animation: x-spin 1s linear infinite;\n}\n\n.x-ai-overview-suggestion {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.x-ai-overview-suggestion-results {\n display: flex;\n gap: 1rem;\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n@keyframes x-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n</style>\n\n<docs lang=\"mdx\">\n## AI Overview Examples\n\nThe `ai-overview` component provides an AI-generated summary and suggestions for queries.\n\n### Basic usage\n\n```vue\n<template>\n <AiOverview\n :title=\"'AI Overview'\"\n :title-loading=\"'Generating with Empathy AI'\"\n :expand-text=\"'Show more'\"\n :collapse-text=\"'Show less'\"\n :content-classes=\"'my-content-class'\"\n :sliding-panels-classes=\"'my-sliding-panel-class'\"\n :sliding-panel-containers-classes=\"'my-sliding-panel-container-class'\"\n :sliding-panel-buttons-classes=\"'my-sliding-panel-button-class'\"\n >\n <template #result=\"{ result }\">\n <ResultCard :result=\"result\" />\n </template>\n </AiOverview>\n</template>\n\n<script setup>\nimport AiOverview from '@empathyco/x-components/js/x-modules/ai/components/ai-overview.vue'\nimport ResultCard from './ResultCard.vue'\n</script>\n```\n\n### Customizing slots\n\nYou can customize the loading title, extra content, and sliding panel slots:\n\n```vue\n<template>\n <AiOverview\n :title=\"'AI Overview'\"\n :title-loading=\"'Loading... Please wait'\"\n :expand-text=\"'Show more'\"\n :collapse-text=\"'Show less'\"\n >\n <template #title-loading>\n <span>Custom loading title...</span>\n </template>\n <template #extra-content>\n <div>Extra content below the main overview</div>\n </template>\n <template #sliding-panels-addons=\"{ arrivedState }\">\n <span v-if=\"arrivedState.left\">Left end reached</span>\n <span v-if=\"arrivedState.right\">Right end reached</span>\n </template>\n <template #result=\"{ result }\">\n <ResultCard :result=\"result\" />\n </template>\n </AiOverview>\n</template>\n\n<script setup>\nimport AiOverview from '@empathyco/x-components/js/x-modules/ai/components/ai-overview.vue'\nimport ResultCard from './ResultCard.vue'\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_renderSlot","_createTextVNode","_toDisplayString","_createCommentVNode","_normalizeClass","_normalizeStyle","_withDirectives","_Fragment","_renderList","_vShow","_withModifiers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-overview.vue.js","sources":["../../../../../src/x-modules/ai/components/ai-overview.vue"],"sourcesContent":["<template>\n <CollapseHeight>\n <div\n v-if=\"!isNoResults\"\n ref=\"aiOverviewRef\"\n class=\"x-ai-overview\"\n data-test=\"ai-overview-wrapper\"\n >\n <div class=\"x-ai-overview-main\">\n <Fade mode=\"out-in\">\n <span\n v-if=\"suggestionsLoading\"\n class=\"x-ai-overview-title-loading\"\n data-test=\"ai-overview-title-loading\"\n >\n <span class=\"x-ai-overview-title-loading-indicator\" />\n <span\n class=\"x-ai-overview-title-loading-text\"\n data-test=\"ai-overview-title-loading-text\"\n >\n <slot name=\"title-loading\">\n {{ titleLoading }}\n </slot>\n </span>\n </span>\n <DisplayEmitter\n v-else\n :payload=\"tagging?.toolingDisplay ?? emptyTaggingRequest\"\n :event-metadata=\"{\n feature: 'overview',\n displayOriginalQuery: query || 'overview-without-query',\n replaceable: false,\n }\"\n data-test=\"ai-overview-display-emitter\"\n >\n <span class=\"x-ai-overview-title\" data-test=\"ai-overview-title\">\n <AIStarIcon class=\"x-ai-overview-title-icon\" />{{ !!title ? title : suggestionText }}\n </span>\n </DisplayEmitter>\n </Fade>\n <ChangeHeight>\n <div class=\"x-ai-overview-content-wrapper\">\n <span\n v-if=\"title\"\n class=\"x-ai-overview-content-title\"\n data-test=\"ai-overview-content-title\"\n >{{ suggestionText }}\n </span>\n <div\n :class=\"contentClasses\"\n data-test=\"ai-overview-content\"\n v-html=\"parsedResponseText\"\n />\n </div>\n </ChangeHeight>\n <slot name=\"extra-content\" />\n </div>\n <CollapseHeight\n :style=\"{\n '--x-collapse-height-transition-duration': `${300 * suggestionsSearch.length}ms`,\n }\"\n data-test=\"ai-overview-collapse-height-suggestions\"\n >\n <SpinnerIcon\n v-if=\"!suggestionsSearch.length\"\n class=\"x-ai-overview-suggestions-loading\"\n data-test=\"ai-overview-suggestions-loading\"\n />\n <div v-else class=\"x-ai-overview-suggestions\" data-test=\"ai-overview-suggestions-container\">\n <DisplayEmitter\n v-for=\"(\n { query: suggestionQuery, results: queriesResults }, suggestionIndex\n ) in suggestionsSearch\"\n :key=\"suggestionQuery\"\n :payload=\"tagging?.searchQueries[suggestionQuery].toolingDisplay ?? emptyTaggingRequest\"\n :event-metadata=\"{\n feature: 'overview',\n displayOriginalQuery: query || 'overview-without-query',\n replaceable: false,\n }\"\n data-test=\"ai-overview-query-display-emitter\"\n >\n <div\n class=\"x-ai-overview-suggestion\"\n data-test=\"ai-overview-suggestion\"\n :class=\"{\n 'x-ai-overview-result-animation': shouldAnimateSuggestion,\n }\"\n :style=\"{ animationDelay: `${suggestionIndex * 300}ms` }\"\n >\n <BaseEventButton\n class=\"x-ai-overview-suggestion-query-btn\"\n :events=\"{ UserAcceptedAQuery: suggestionQuery }\"\n >\n {{ suggestionQuery }}\n <ArrowRightIcon class=\"x-ai-overview-suggestion-query-btn-icon\" />\n </BaseEventButton>\n\n <DisplayClickProvider\n :tooling-display-tagging=\"\n tagging?.searchQueries[suggestionQuery].toolingDisplayClick\n \"\n :tooling-add2-cart-tagging=\"\n tagging?.searchQueries[suggestionQuery].toolingDisplayAdd2Cart\n \"\n result-feature=\"overview\"\n >\n <slot name=\"sliding-panel\" :results=\"queriesResults\">\n <SlidingPanel\n :class=\"slidingPanelsClasses\"\n :scroll-container-class=\"slidingPanelContainersClasses\"\n :button-class=\"slidingPanelButtonsClasses\"\n :reset-on-content-change=\"false\"\n >\n <template #sliding-panel-addons=\"{ arrivedState }\">\n <slot name=\"sliding-panels-addons\" :arrived-state=\"arrivedState\" />\n </template>\n <template #sliding-panel-left-button>\n <slot name=\"sliding-panels-left-button\" />\n </template>\n <template #sliding-panel-right-button>\n <slot name=\"sliding-panels-right-button\" />\n </template>\n <ul class=\"x-ai-overview-suggestion-results\">\n <li\n v-for=\"(result, resultIndex) in queriesResults\"\n :key=\"result.id\"\n data-test=\"ai-overview-suggestion-result\"\n :class=\"{\n 'x-ai-overview-result-animation': shouldAnimateSuggestion,\n }\"\n :style=\"{\n animationDelay: `${suggestionIndex * 300 + resultIndex * 300}ms`,\n }\"\n >\n <!-- @slot (required) result card -->\n <slot name=\"result\" :result=\"result\" />\n </li>\n </ul>\n </SlidingPanel>\n </slot>\n </DisplayClickProvider>\n </div>\n </DisplayEmitter>\n <slot name=\"suggestions-extra-content\" />\n </div>\n </CollapseHeight>\n </div>\n </CollapseHeight>\n</template>\n\n<script lang=\"ts\">\nimport type { TaggingRequest } from '@empathyco/x-types'\nimport { marked } from 'marked'\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport {\n AIStarIcon,\n ArrowRightIcon,\n BaseEventButton,\n ChangeHeight,\n CollapseHeight,\n DisplayClickProvider,\n Fade,\n SlidingPanel,\n SpinnerIcon,\n} from '../../../components'\nimport DisplayEmitter from '../../../components/display-emitter.vue'\nimport { use$x, useGetter, useState } from '../../../composables'\nimport { typing } from '../../../directives'\nimport { aiXModule } from '../x-module'\n\nexport default defineComponent({\n directives: {\n typing,\n },\n xModule: aiXModule.name,\n components: {\n AIStarIcon,\n ArrowRightIcon,\n BaseEventButton,\n CollapseHeight,\n ChangeHeight,\n Fade,\n SlidingPanel,\n SpinnerIcon,\n DisplayEmitter,\n DisplayClickProvider,\n },\n props: {\n /* The text displayed when the question ended loading */\n title: {\n type: String,\n },\n /* The text displayed when the question is loading. */\n titleLoading: {\n type: String,\n default: 'Generating with Empathy AI',\n },\n /* Auto expand the AI Overview when there are queries in AI and no-results in search. */\n autoExpandInSearchNoResults: {\n type: Boolean,\n default: true,\n },\n /* The classes added to the parsed response text container. */\n contentClasses: {\n type: String,\n },\n /* The classes added to each sliding panel for each query. */\n slidingPanelsClasses: {\n type: String,\n },\n /* The classes added to each sliding panel container of each query. */\n slidingPanelContainersClasses: {\n type: String,\n },\n /* The classes added to each sliding panel button of each query. */\n slidingPanelButtonsClasses: {\n type: String,\n },\n },\n setup() {\n const $x = use$x()\n const { query } = useGetter('ai')\n const {\n suggestionText,\n responseText,\n suggestionsSearch,\n suggestionsStatus,\n tagging,\n isNoResults,\n queries,\n } = useState('ai')\n\n const emptyTaggingRequest: TaggingRequest = { url: '', params: {} }\n\n const aiOverviewRef = ref<HTMLDivElement | null>(null)\n const expanded = ref(false)\n const shouldAnimateSuggestion = ref(true)\n const parsedResponseText = computed(() => marked.parse(responseText.value))\n\n const suggestionsLoading = computed(\n () => suggestionsStatus.value !== 'success' && suggestionsStatus.value !== 'error',\n )\n\n $x.on('AiSuggestionsRequestUpdated', false).subscribe(() => {\n expanded.value = false\n shouldAnimateSuggestion.value = true\n })\n\n onMounted(() => {\n $x.emit('AiComponentMounted', undefined, { feature: 'overview' })\n })\n\n return {\n aiOverviewRef,\n emptyTaggingRequest,\n expanded,\n parsedResponseText,\n suggestionsLoading,\n suggestionsSearch,\n suggestionText,\n shouldAnimateSuggestion,\n query,\n tagging,\n isNoResults,\n queries,\n }\n },\n})\n</script>\n\n<style lang=\"css\">\n.x-ai-overview {\n --color: var(--x-ai-overview-color, #bbc9cf);\n --color-lighter: var(--x-ai-overview-color-lighter, color-mix(in srgb, var(--color) 25%, white));\n\n position: relative;\n border-radius: 1.5rem;\n background-color: var(--color-lighter);\n}\n\n.x-ai-overview-main {\n padding: 1rem;\n max-width: var(--x-ai-overview-main-max-width, none);\n margin: 0 auto;\n}\n\n.x-ai-overview-title {\n display: flex;\n font-size: 0.875rem;\n font-weight: 700;\n gap: 0.25rem;\n align-items: center;\n margin-bottom: 0.5rem;\n}\n\n.x-ai-overview-title-loading {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n margin-bottom: 0.5rem;\n}\n\n.x-ai-overview-title-loading-indicator {\n width: 0.75rem;\n height: 0.75rem;\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n border-radius: 9999px;\n background-color: var(--color);\n}\n\n.x-ai-overview-title-loading-text {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n font-size: 0.75rem;\n}\n\n.x-ai-overview-title-icon {\n height: 1rem;\n aspect-ratio: 1 / 1;\n color: var(--color);\n flex-shrink: 0;\n}\n\n.x-ai-overview-content-wrapper {\n display: flex;\n flex-direction: column;\n text-align: left;\n line-height: 1.25rem;\n}\n\n.x-ai-overview-content-title {\n font-weight: 500;\n margin-bottom: 8px;\n}\n\n.x-ai-overview-gradient {\n border-radius: 1.5rem;\n cursor: pointer;\n content: none;\n position: absolute;\n width: 100%;\n height: 100%;\n bottom: 0;\n background-image: linear-gradient(to bottom, transparent 0%, var(--color-lighter) 100%);\n}\n\n.x-ai-overview-toggle-btn-wrapper {\n display: flex;\n justify-content: center;\n}\n\n.x-ai-overview-toggle-btn {\n border-color: var(--button-color-50, #283034);\n background-color: #ffffff;\n color: var(--button-color-50, #283034);\n border-radius: 9999px;\n width: 100%;\n margin: auto;\n padding-right: 1rem;\n padding-left: 1rem;\n display: flex;\n justify-content: center;\n align-items: center;\n border-style: solid;\n border-width: 1px;\n font-weight: 700;\n min-height: 2.5rem;\n gap: 0.5rem;\n font-size: 0.875rem;\n position: relative;\n}\n\n.x-ai-overview-toggle-btn:hover {\n border-color: var(--button-color-50, #283034);\n background-color: var(--button-color-50, #283034);\n color: #ffffff;\n}\n\n@media (min-width: 640px) {\n .x-ai-overview-toggle-btn {\n transition-property: all;\n transition-duration: 500ms;\n transform: translateY(50%);\n width: var(--expand-button-width, 200px);\n }\n}\n\n.x-ai-overview-toggle-btn-icon {\n transform: rotate(0deg);\n height: 1rem;\n aspect-ratio: 1 / 1;\n transition-property: all;\n transition-duration: 300ms;\n}\n\n.x-ai-overview-toggle-btn-icon-expanded {\n transform: rotate(180deg);\n}\n\n.x-ai-overview-suggestion-query-btn {\n border-color: transparent;\n background-color: transparent;\n margin-left: 1rem;\n margin-right: 1rem;\n font-weight: 700;\n width: fit-content;\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.x-ai-overview-suggestion-query-btn-icon {\n height: 1rem;\n aspect-ratio: 1 / 1;\n}\n\n.x-ai-overview-suggestions {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding-bottom: 1rem;\n}\n\n.x-ai-overview-suggestions-loading {\n width: 2.5rem;\n height: 2.5rem;\n margin: auto;\n animation: x-spin 1s linear infinite;\n}\n\n.x-ai-overview-suggestion {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.x-ai-overview-suggestion-results {\n display: flex;\n gap: 1rem;\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n@keyframes x-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n</style>\n\n<docs lang=\"mdx\">\n## AI Overview Examples\n\nThe `ai-overview` component provides an AI-generated summary and suggestions for queries.\n\n### Basic usage\n\n```vue\n<template>\n <AiOverview\n :title=\"'AI Overview'\"\n :title-loading=\"'Generating with Empathy AI'\"\n :expand-text=\"'Show more'\"\n :collapse-text=\"'Show less'\"\n :content-classes=\"'my-content-class'\"\n :sliding-panels-classes=\"'my-sliding-panel-class'\"\n :sliding-panel-containers-classes=\"'my-sliding-panel-container-class'\"\n :sliding-panel-buttons-classes=\"'my-sliding-panel-button-class'\"\n >\n <template #result=\"{ result }\">\n <ResultCard :result=\"result\" />\n </template>\n </AiOverview>\n</template>\n\n<script setup>\nimport AiOverview from '@empathyco/x-components/js/x-modules/ai/components/ai-overview.vue'\nimport ResultCard from './ResultCard.vue'\n</script>\n```\n\n### Customizing slots\n\nYou can customize the loading title, extra content, and sliding panel slots:\n\n```vue\n<template>\n <AiOverview\n :title=\"'AI Overview'\"\n :title-loading=\"'Loading... Please wait'\"\n :expand-text=\"'Show more'\"\n :collapse-text=\"'Show less'\"\n >\n <template #title-loading>\n <span>Custom loading title...</span>\n </template>\n <template #extra-content>\n <div>Extra content below the main overview</div>\n </template>\n <template #sliding-panels-addons=\"{ arrivedState }\">\n <span v-if=\"arrivedState.left\">Left end reached</span>\n <span v-if=\"arrivedState.right\">Right end reached</span>\n </template>\n <template #result=\"{ result }\">\n <ResultCard :result=\"result\" />\n </template>\n </AiOverview>\n</template>\n\n<script setup>\nimport AiOverview from '@empathyco/x-components/js/x-modules/ai/components/ai-overview.vue'\nimport ResultCard from './ResultCard.vue'\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_renderSlot","_createTextVNode","_toDisplayString","_createCommentVNode","_normalizeClass","_normalizeStyle","_Fragment","_renderList"],"mappings":"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"}
|