@coveo/atomic 3.60.1 → 3.60.2
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/custom-elements.json +1975 -1896
- package/dist/cjs/components/common/atomic-aria-live/atomic-aria-live.cjs +35 -5
- package/dist/cjs/components/common/atomic-citation/atomic-citation.cjs +3 -1
- package/dist/cjs/components/common/atomic-generated-answer-thread/atomic-generated-answer-thread.cjs +20 -15
- package/dist/cjs/components/common/atomic-generated-answer-thread-item/atomic-generated-answer-thread-item.cjs +51 -45
- package/dist/cjs/components/common/generated-answer/generated-answer-controller.cjs +12 -2
- package/dist/cjs/components/common/generated-answer/generated-content/markdown-utils.cjs +80 -3
- package/dist/cjs/components/common/generated-answer/render-conversation-debug-header.cjs +1 -1
- package/dist/cjs/components/insight/atomic-insight-generated-answer/atomic-insight-generated-answer.cjs +9 -2
- package/dist/cjs/components/search/atomic-generated-answer/atomic-generated-answer.cjs +9 -2
- package/dist/cjs/global/environment.cjs +1 -1
- package/dist/cjs/utils/accessibility-utils.cjs +5 -2
- package/dist/cjs/utils/debounce-utils.cjs +15 -4
- package/dist/cjs/utils/tailwind.global.tw.css.cjs +1 -1
- package/dist/cjs/versions.cjs +1 -1
- package/dist/esm/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.js +1 -1
- package/dist/esm/components/common/atomic-aria-live/atomic-aria-live.js +35 -5
- package/dist/esm/components/common/atomic-citation/atomic-citation.js +3 -1
- package/dist/esm/components/common/atomic-generated-answer-thread/atomic-generated-answer-thread.js +20 -15
- package/dist/esm/components/common/atomic-generated-answer-thread-item/atomic-generated-answer-thread-item.js +52 -46
- package/dist/esm/components/common/generated-answer/generated-answer-controller.js +12 -2
- package/dist/esm/components/common/generated-answer/generated-content/markdown-utils.js +79 -5
- package/dist/esm/components/common/generated-answer/render-conversation-debug-header.js +1 -1
- package/dist/esm/components/insight/atomic-insight-generated-answer/atomic-insight-generated-answer.js +9 -2
- package/dist/esm/components/insight/atomic-insight-result-children/atomic-insight-result-children.js +1 -1
- package/dist/esm/components/search/atomic-generated-answer/atomic-generated-answer.js +9 -2
- package/dist/esm/components/search/atomic-search-box/atomic-search-box.js +1 -1
- package/dist/esm/global/environment.js +1 -1
- package/dist/esm/utils/accessibility-utils.js +5 -2
- package/dist/esm/utils/debounce-utils.js +15 -4
- package/dist/esm/utils/tailwind.global.tw.css.js +1 -1
- package/dist/esm/versions.js +1 -1
- package/dist/types/components/common/atomic-aria-live/atomic-aria-live.d.ts +5 -1
- package/dist/types/components/common/atomic-generated-answer-thread-item/atomic-generated-answer-thread-item.d.ts +3 -0
- package/dist/types/components/common/generated-answer/generated-answer-controller.d.ts +5 -0
- package/dist/types/components/common/generated-answer/generated-content/markdown-utils.d.ts +1 -0
- package/dist/types/components/insight/atomic-insight-generated-answer/atomic-insight-generated-answer.d.ts +1 -0
- package/dist/types/components/search/atomic-generated-answer/atomic-generated-answer.d.ts +1 -0
- package/dist/types/components/search/atomic-result-link/atomic-result-link.d.ts +1 -1
- package/dist/types/utils/accessibility-utils.d.ts +2 -1
- package/package.json +1 -1
|
@@ -54,9 +54,10 @@ class AtomicAriaLive extends (0, light_dom_cjs_namespaceObject.LightDomMixin)(ex
|
|
|
54
54
|
disconnectedCallback() {
|
|
55
55
|
super.disconnectedCallback();
|
|
56
56
|
this.messagesQueue.clear();
|
|
57
|
+
this.queuedMessageIds.clear();
|
|
57
58
|
document.removeEventListener('atomic/accessibility/findAriaLive', this.onFindAriaLive);
|
|
58
59
|
}
|
|
59
|
-
updateMessage(region, message, assertive) {
|
|
60
|
+
updateMessage(region, message, assertive, preserveQueuedMessages = false) {
|
|
60
61
|
const updateRegion = ()=>{
|
|
61
62
|
this.regions = {
|
|
62
63
|
...this.regions,
|
|
@@ -66,11 +67,18 @@ class AtomicAriaLive extends (0, light_dom_cjs_namespaceObject.LightDomMixin)(ex
|
|
|
66
67
|
}
|
|
67
68
|
};
|
|
68
69
|
};
|
|
69
|
-
if (message)
|
|
70
|
-
|
|
71
|
-
this.messagesQueue.cancelActionIfQueued(region);
|
|
70
|
+
if (!message) {
|
|
71
|
+
this.clearQueuedMessages(region);
|
|
72
72
|
updateRegion();
|
|
73
|
+
return;
|
|
73
74
|
}
|
|
75
|
+
if (!preserveQueuedMessages) {
|
|
76
|
+
this.clearQueuedMessages(region);
|
|
77
|
+
this.messagesQueue.enqueue(updateRegion, region);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (this.regions[region]?.message === message && this.regions[region]?.assertive === assertive) return;
|
|
81
|
+
this.queueMessage(region, message, updateRegion);
|
|
74
82
|
}
|
|
75
83
|
registerRegion(region, assertive) {
|
|
76
84
|
if (region in this.regions) return;
|
|
@@ -82,6 +90,28 @@ class AtomicAriaLive extends (0, light_dom_cjs_namespaceObject.LightDomMixin)(ex
|
|
|
82
90
|
}
|
|
83
91
|
};
|
|
84
92
|
}
|
|
93
|
+
clearQueuedMessages(region) {
|
|
94
|
+
for (const messageId of this.queuedMessageIds.get(region) ?? [])this.messagesQueue.cancelActionIfQueued(messageId);
|
|
95
|
+
this.queuedMessageIds.delete(region);
|
|
96
|
+
}
|
|
97
|
+
getMessageQueueId(region, message) {
|
|
98
|
+
return JSON.stringify([
|
|
99
|
+
region,
|
|
100
|
+
message
|
|
101
|
+
]);
|
|
102
|
+
}
|
|
103
|
+
queueMessage(region, message, updateRegion) {
|
|
104
|
+
const messageId = this.getMessageQueueId(region, message);
|
|
105
|
+
const queuedMessageIds = this.queuedMessageIds.get(region) ?? new Set();
|
|
106
|
+
if (queuedMessageIds.has(messageId)) return;
|
|
107
|
+
queuedMessageIds.add(messageId);
|
|
108
|
+
this.queuedMessageIds.set(region, queuedMessageIds);
|
|
109
|
+
this.messagesQueue.enqueue(()=>{
|
|
110
|
+
queuedMessageIds.delete(messageId);
|
|
111
|
+
if (0 === queuedMessageIds.size) this.queuedMessageIds.delete(region);
|
|
112
|
+
updateRegion();
|
|
113
|
+
}, messageId);
|
|
114
|
+
}
|
|
85
115
|
render() {
|
|
86
116
|
const hostStyles = {
|
|
87
117
|
position: 'absolute',
|
|
@@ -107,7 +137,7 @@ class AtomicAriaLive extends (0, light_dom_cjs_namespaceObject.LightDomMixin)(ex
|
|
|
107
137
|
constructor(...args){
|
|
108
138
|
super(...args), this.regions = {}, this.messagesQueue = (0, debounce_utils_cjs_namespaceObject.buildDebouncedQueue)({
|
|
109
139
|
delay: 500
|
|
110
|
-
}), this.onFindAriaLive = (event)=>{
|
|
140
|
+
}), this.queuedMessageIds = new Map(), this.onFindAriaLive = (event)=>{
|
|
111
141
|
const customEvent = event;
|
|
112
142
|
customEvent.detail.element = this;
|
|
113
143
|
};
|
|
@@ -46,6 +46,7 @@ var class_map_js_namespaceObject = require("lit/directives/class-map.js");
|
|
|
46
46
|
var ref_js_namespaceObject = require("lit/directives/ref.js");
|
|
47
47
|
var watch_cjs_namespaceObject = require("../../../decorators/watch.cjs");
|
|
48
48
|
var with_tailwind_styles_cjs_namespaceObject = require("../../../decorators/with-tailwind-styles.cjs");
|
|
49
|
+
var markdown_utils_cjs_namespaceObject = require("../generated-answer/generated-content/markdown-utils.cjs");
|
|
49
50
|
var external_heading_cjs_namespaceObject = require("../heading.cjs");
|
|
50
51
|
var item_link_cjs_namespaceObject = require("../item-link/item-link.cjs");
|
|
51
52
|
var external_atomic_citation_tw_css_cjs_namespaceObject = require("./atomic-citation.tw.css.cjs");
|
|
@@ -148,7 +149,8 @@ class AtomicCitation extends external_lit_namespaceObject.LitElement {
|
|
|
148
149
|
clearTimeout(this.closePopoverTimeout);
|
|
149
150
|
}
|
|
150
151
|
getTruncatedText() {
|
|
151
|
-
|
|
152
|
+
const plainText = (0, markdown_utils_cjs_namespaceObject.markdownToPlainText)(this.citation.text ?? '');
|
|
153
|
+
return plainText ? `${plainText.slice(0, 200)}${plainText.length > 200 ? '...' : ''}` : void 0;
|
|
152
154
|
}
|
|
153
155
|
anchorUrl(uri, text, filetype, pageNumber) {
|
|
154
156
|
if (this.disableCitationAnchoring) return uri;
|
package/dist/cjs/components/common/atomic-generated-answer-thread/atomic-generated-answer-thread.cjs
CHANGED
|
@@ -122,12 +122,13 @@ class AtomicGeneratedAnswerThread extends external_lit_namespaceObject.LitElemen
|
|
|
122
122
|
const showPreviousButtonClasses = `
|
|
123
123
|
text-on-background text-base min-w-0 inline-flex text-left mr-auto
|
|
124
124
|
px-2 py-1.5 font-normal bg-transparent border-0 appearance-none
|
|
125
|
-
transition-colors hover:bg-neutral-
|
|
125
|
+
transition-colors hover:bg-neutral hover:text-primary rounded-md cursor-pointer
|
|
126
126
|
focus-visible:outline-none focus-visible:ring-2
|
|
127
127
|
focus-visible:ring-primary focus-visible:ring-offset-2
|
|
128
128
|
`;
|
|
129
129
|
const timelineDotClasses = `
|
|
130
|
-
h-2 w-2 rounded-full bg-neutral-dim
|
|
130
|
+
h-2 w-2 rounded-full bg-neutral-dim transition-colors
|
|
131
|
+
hover:bg-neutral-dark group-has-[button:hover]/title:bg-neutral-dark
|
|
131
132
|
`;
|
|
132
133
|
const timelineConnectorClasses = `
|
|
133
134
|
relative h-full w-px bg-neutral
|
|
@@ -137,23 +138,27 @@ class AtomicGeneratedAnswerThread extends external_lit_namespaceObject.LitElemen
|
|
|
137
138
|
after:h-[8px] after:w-px after:bg-neutral after:content-['']
|
|
138
139
|
`;
|
|
139
140
|
return (0, external_lit_namespaceObject.html)`
|
|
140
|
-
<li class="grid min-w-0">
|
|
141
|
-
<div class="flex
|
|
142
|
-
<div
|
|
141
|
+
<li class="group/title grid min-w-0 grid-cols-[10px_1fr] gap-x-3">
|
|
142
|
+
<div class="row-span-2 flex flex-col items-center">
|
|
143
|
+
<div
|
|
144
|
+
class="flex justify-center items-center text-base h-[1lh] my-1.5"
|
|
145
|
+
>
|
|
143
146
|
<span class=${timelineDotClasses}></span>
|
|
144
147
|
</div>
|
|
145
|
-
<div
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
@click=${this.handleShowAllClick}
|
|
150
|
-
>
|
|
151
|
-
${label}
|
|
152
|
-
</button>
|
|
148
|
+
<div
|
|
149
|
+
class="flex grow w-full justify-center items-center py-2 -my-2 min-h-3"
|
|
150
|
+
>
|
|
151
|
+
<span class=${timelineConnectorClasses}> </span>
|
|
153
152
|
</div>
|
|
154
153
|
</div>
|
|
155
|
-
<div class="flex
|
|
156
|
-
<
|
|
154
|
+
<div class="flex min-w-0 flex-col">
|
|
155
|
+
<button
|
|
156
|
+
type="button"
|
|
157
|
+
class=${showPreviousButtonClasses}
|
|
158
|
+
@click=${this.handleShowAllClick}
|
|
159
|
+
>
|
|
160
|
+
${label}
|
|
161
|
+
</button>
|
|
157
162
|
</div>
|
|
158
163
|
</li>
|
|
159
164
|
`;
|
|
@@ -69,11 +69,14 @@ class AtomicGeneratedAnswerThreadItem extends external_lit_namespaceObject.LitEl
|
|
|
69
69
|
const titleButtonClasses = (0, class_map_js_namespaceObject.classMap)({
|
|
70
70
|
...titleBaseClasses,
|
|
71
71
|
...titleWeightClasses,
|
|
72
|
-
'bg-transparent':
|
|
72
|
+
'bg-transparent': !this.isDotHovered,
|
|
73
|
+
'bg-neutral': this.isDotHovered,
|
|
74
|
+
'text-primary': this.isDotHovered,
|
|
73
75
|
'border-0': true,
|
|
74
76
|
'appearance-none': true,
|
|
75
77
|
'transition-colors': true,
|
|
76
|
-
'hover:bg-neutral
|
|
78
|
+
'hover:bg-neutral': true,
|
|
79
|
+
'hover:text-primary': true,
|
|
77
80
|
'rounded-md': true,
|
|
78
81
|
'cursor-pointer': true,
|
|
79
82
|
'focus-visible:outline-none': true,
|
|
@@ -93,87 +96,87 @@ class AtomicGeneratedAnswerThreadItem extends external_lit_namespaceObject.LitEl
|
|
|
93
96
|
'bg-neutral-dark': this.isExpanded,
|
|
94
97
|
'bg-neutral-dim': !this.isExpanded,
|
|
95
98
|
'cursor-pointer': isTimelineDotInteractive,
|
|
96
|
-
'
|
|
99
|
+
'hover:bg-neutral-dark': !this.isExpanded && isTimelineDotInteractive,
|
|
100
|
+
'group-has-[button:hover]/title:bg-neutral-dark': !this.isExpanded && isTimelineDotInteractive
|
|
97
101
|
});
|
|
98
102
|
const timelineDotToggleClasses = (0, class_map_js_namespaceObject.classMap)({
|
|
99
103
|
flex: true,
|
|
100
|
-
'w-[10px]': true,
|
|
101
|
-
'shrink-0': true,
|
|
102
104
|
'justify-center': true,
|
|
103
|
-
'items-center': true
|
|
105
|
+
'items-center': true,
|
|
106
|
+
'text-base': true,
|
|
107
|
+
'h-[1lh] my-1.5': true
|
|
104
108
|
});
|
|
105
109
|
const timelineLineToggleClasses = (0, class_map_js_namespaceObject.classMap)({
|
|
106
110
|
flex: true,
|
|
107
|
-
|
|
108
|
-
'
|
|
111
|
+
grow: true,
|
|
112
|
+
'w-full': true,
|
|
109
113
|
'justify-center': true,
|
|
110
114
|
'items-center': true,
|
|
111
115
|
group: isTimelineLineInteractive,
|
|
112
116
|
'cursor-pointer': isTimelineLineInteractive,
|
|
113
117
|
'py-2': true,
|
|
114
|
-
'-my-2': true
|
|
115
|
-
});
|
|
116
|
-
const timelineBodyRowClasses = (0, class_map_js_namespaceObject.classMap)({
|
|
117
|
-
flex: true,
|
|
118
|
-
'min-w-0': true,
|
|
119
|
-
'gap-3': true,
|
|
118
|
+
'-my-2': true,
|
|
120
119
|
'min-h-3': !this.isExpanded
|
|
121
120
|
});
|
|
122
121
|
const timelineConnectorClasses = "relative h-full w-px bg-neutral transition-colors duration-150 group-hover:bg-neutral-dark before:absolute before:left-0 before:top-[-8px] before:h-[8px] before:w-px before:bg-neutral before:transition-colors before:duration-150 group-hover:before:bg-neutral-dark before:content-[''] after:absolute after:bottom-[-8px] after:left-0 after:h-[8px] after:w-px after:bg-neutral after:transition-colors after:duration-150 group-hover:after:bg-neutral-dark after:content-['']";
|
|
123
122
|
return (0, external_lit_namespaceObject.html)`
|
|
124
|
-
<div class="grid min-w-0">
|
|
125
|
-
<div class="flex
|
|
123
|
+
<div class="group/title grid min-w-0 grid-cols-[10px_1fr] gap-x-3">
|
|
124
|
+
<div class="row-span-2 flex flex-col items-center">
|
|
126
125
|
<div class=${timelineDotToggleClasses}>
|
|
127
126
|
${(0, when_js_namespaceObject.when)(this.showTimelineDot, ()=>(0, external_lit_namespaceObject.html)`
|
|
128
127
|
<span
|
|
129
128
|
class=${timelineDotClasses}
|
|
130
129
|
@click=${isTimelineDotInteractive ? this.toggle : null}
|
|
130
|
+
@mouseenter=${isTimelineDotInteractive ? this.handleDotMouseEnter : null}
|
|
131
|
+
@mouseleave=${isTimelineDotInteractive ? this.handleDotMouseLeave : null}
|
|
131
132
|
></span>
|
|
132
133
|
`)}
|
|
133
134
|
</div>
|
|
134
|
-
<div class="flex min-w-0 flex-col">
|
|
135
|
-
${(0, when_js_namespaceObject.when)(!this.disableCollapse, ()=>(0, external_lit_namespaceObject.html)`<button
|
|
136
|
-
type="button"
|
|
137
|
-
aria-expanded=${this.isExpanded}
|
|
138
|
-
aria-controls=${this.contentId}
|
|
139
|
-
class=${titleButtonClasses}
|
|
140
|
-
@click=${this.toggle}
|
|
141
|
-
>
|
|
142
|
-
<span part="thread-item-title" style=${clampedTitleStyles}
|
|
143
|
-
>${this.title}</span
|
|
144
|
-
>
|
|
145
|
-
</button>`, ()=>(0, external_lit_namespaceObject.html)`<span
|
|
146
|
-
class=${titleTextClasses}
|
|
147
|
-
part="thread-item-title"
|
|
148
|
-
style=${clampedTitleStyles}
|
|
149
|
-
>${this.title}</span
|
|
150
|
-
>`)}
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
<div class=${timelineBodyRowClasses}>
|
|
154
135
|
<div
|
|
155
136
|
class=${timelineLineToggleClasses}
|
|
156
137
|
@click=${isTimelineLineInteractive ? this.toggle : null}
|
|
157
138
|
>
|
|
158
139
|
${(0, when_js_namespaceObject.when)(this.hideLine, ()=>(0, external_lit_namespaceObject.html)``, ()=>(0, external_lit_namespaceObject.html)`<span class=${timelineConnectorClasses}> </span>`)}
|
|
159
140
|
</div>
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
141
|
+
</div>
|
|
142
|
+
<div class="flex min-w-0 flex-col">
|
|
143
|
+
${(0, when_js_namespaceObject.when)(!this.disableCollapse, ()=>(0, external_lit_namespaceObject.html)`<button
|
|
144
|
+
type="button"
|
|
145
|
+
aria-expanded=${this.isExpanded}
|
|
146
|
+
aria-controls=${this.contentId}
|
|
147
|
+
class=${titleButtonClasses}
|
|
148
|
+
@click=${this.toggle}
|
|
149
|
+
>
|
|
150
|
+
<span part="thread-item-title" style=${clampedTitleStyles}
|
|
151
|
+
>${this.title}</span
|
|
152
|
+
>
|
|
153
|
+
</button>`, ()=>(0, external_lit_namespaceObject.html)`<span
|
|
154
|
+
class=${titleTextClasses}
|
|
155
|
+
part="thread-item-title"
|
|
156
|
+
style=${clampedTitleStyles}
|
|
157
|
+
>${this.title}</span
|
|
158
|
+
>`)}
|
|
159
|
+
</div>
|
|
160
|
+
<div id=${this.contentId} class="min-w-0 pl-2 py-1.5">
|
|
161
|
+
<div
|
|
162
|
+
class="mb-2"
|
|
163
|
+
?hidden=${!this.isExpanded}
|
|
164
|
+
aria-hidden=${this.isExpanded ? 'false' : 'true'}
|
|
165
|
+
>
|
|
166
|
+
<slot></slot>
|
|
168
167
|
</div>
|
|
169
168
|
</div>
|
|
170
169
|
</div>
|
|
171
170
|
`;
|
|
172
171
|
}
|
|
173
172
|
constructor(...args){
|
|
174
|
-
super(...args), this.contentId = `atomic-generated-answer-thread-item-content-${crypto.randomUUID()}`, this.title = '', this.disableCollapse = false, this.hideLine = false, this.isExpanded = false, this.showTimelineDot = true, this.toggle = ()=>{
|
|
173
|
+
super(...args), this.contentId = `atomic-generated-answer-thread-item-content-${crypto.randomUUID()}`, this.title = '', this.disableCollapse = false, this.hideLine = false, this.isExpanded = false, this.showTimelineDot = true, this.isDotHovered = false, this.toggle = ()=>{
|
|
175
174
|
if (this.disableCollapse) return;
|
|
176
175
|
this.isExpanded = !this.isExpanded;
|
|
176
|
+
}, this.handleDotMouseEnter = ()=>{
|
|
177
|
+
this.isDotHovered = true;
|
|
178
|
+
}, this.handleDotMouseLeave = ()=>{
|
|
179
|
+
this.isDotHovered = false;
|
|
177
180
|
};
|
|
178
181
|
}
|
|
179
182
|
}
|
|
@@ -206,6 +209,9 @@ _ts_decorate([
|
|
|
206
209
|
attribute: 'show-timeline-dot'
|
|
207
210
|
})
|
|
208
211
|
], AtomicGeneratedAnswerThreadItem.prototype, "showTimelineDot", void 0);
|
|
212
|
+
_ts_decorate([
|
|
213
|
+
(0, decorators_js_namespaceObject.state)()
|
|
214
|
+
], AtomicGeneratedAnswerThreadItem.prototype, "isDotHovered", void 0);
|
|
209
215
|
AtomicGeneratedAnswerThreadItem = _ts_decorate([
|
|
210
216
|
(0, decorators_js_namespaceObject.customElement)('atomic-generated-answer-thread-item'),
|
|
211
217
|
with_tailwind_styles_cjs_namespaceObject.withTailwindStyles
|
|
@@ -32,6 +32,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
32
32
|
});
|
|
33
33
|
var local_storage_utils_cjs_namespaceObject = require("../../../utils/local-storage-utils.cjs");
|
|
34
34
|
require("../atomic-generated-answer-feedback-modal/atomic-generated-answer-feedback-modal.cjs");
|
|
35
|
+
var markdown_utils_cjs_namespaceObject = require("./generated-content/markdown-utils.cjs");
|
|
35
36
|
class GeneratedAnswerController {
|
|
36
37
|
hostConnected() {}
|
|
37
38
|
get data() {
|
|
@@ -66,14 +67,23 @@ class GeneratedAnswerController {
|
|
|
66
67
|
const isGenerating = !!state.isStreaming;
|
|
67
68
|
const hasNonEmptyAnswer = !!state.answer?.trim();
|
|
68
69
|
const hasError = !!state.error?.message;
|
|
70
|
+
const cannotAnswer = !!state.cannotAnswer;
|
|
69
71
|
if (isHidden) return bindings.i18n.t('generated-answer-hidden');
|
|
70
72
|
if (isGenerating) return bindings.i18n.t('generating-answer');
|
|
71
|
-
if (hasError) return bindings.i18n.t('answer-could-not-be-generated');
|
|
73
|
+
if (hasError || cannotAnswer) return bindings.i18n.t('answer-could-not-be-generated');
|
|
72
74
|
if (hasNonEmptyAnswer) return bindings.i18n.t('answer-generated', {
|
|
73
|
-
answer: state.answer
|
|
75
|
+
answer: (0, markdown_utils_cjs_namespaceObject.markdownToPlainText)(state.answer)
|
|
74
76
|
});
|
|
75
77
|
return '';
|
|
76
78
|
}
|
|
79
|
+
isStatusAssertive() {
|
|
80
|
+
const state = this.options.getGeneratedAnswerState();
|
|
81
|
+
if (!state) return false;
|
|
82
|
+
const isHidden = !state.isVisible;
|
|
83
|
+
const isGenerating = !!state.isStreaming;
|
|
84
|
+
const hasError = !!state.error?.message;
|
|
85
|
+
return !isHidden && !isGenerating && hasError;
|
|
86
|
+
}
|
|
77
87
|
get hasRetryableError() {
|
|
78
88
|
const searchState = this.options.getSearchStatusState();
|
|
79
89
|
const answerState = this.options.getGeneratedAnswerState();
|
|
@@ -28,9 +28,11 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
markdownToPlainText: ()=>markdownToPlainText,
|
|
31
32
|
transformMarkdownToHtml: ()=>transformMarkdownToHtml
|
|
32
33
|
});
|
|
33
34
|
var external_marked_namespaceObject = require("marked");
|
|
35
|
+
var utils_cjs_namespaceObject = require("../../../../utils/utils.cjs");
|
|
34
36
|
const toInlinePlainText = (textWithHtml)=>{
|
|
35
37
|
const withoutHtmlTags = textWithHtml.replace(/<[^>]*>/g, ' ');
|
|
36
38
|
const withCollapsedWhitespaces = withoutHtmlTags.replace(/\s{2,}/g, ' ');
|
|
@@ -51,6 +53,7 @@ const completeUnclosedElement = (text)=>{
|
|
|
51
53
|
}
|
|
52
54
|
return text;
|
|
53
55
|
};
|
|
56
|
+
const decodeHtmlEntities = (text)=>(0, utils_cjs_namespaceObject.parseHTML)(text).body.textContent ?? '';
|
|
54
57
|
const escapeHtml = (text)=>text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
55
58
|
const customRenderer = {
|
|
56
59
|
blockquote (quote) {
|
|
@@ -108,11 +111,85 @@ const customRenderer = {
|
|
|
108
111
|
return completeUnclosedElement(text);
|
|
109
112
|
}
|
|
110
113
|
};
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
+
class PlainTextRenderer extends external_marked_namespaceObject.Renderer {
|
|
115
|
+
blockquote(quote) {
|
|
116
|
+
return ` ${quote} `;
|
|
117
|
+
}
|
|
118
|
+
br() {
|
|
119
|
+
return ' ';
|
|
120
|
+
}
|
|
121
|
+
checkbox() {
|
|
122
|
+
return '';
|
|
123
|
+
}
|
|
124
|
+
code(code) {
|
|
125
|
+
return ` ${code} `;
|
|
126
|
+
}
|
|
127
|
+
codespan(text) {
|
|
128
|
+
return text;
|
|
129
|
+
}
|
|
130
|
+
del(text) {
|
|
131
|
+
return text;
|
|
132
|
+
}
|
|
133
|
+
em(text) {
|
|
134
|
+
return text;
|
|
135
|
+
}
|
|
136
|
+
heading(text) {
|
|
137
|
+
return ` ${text} `;
|
|
138
|
+
}
|
|
139
|
+
hr() {
|
|
140
|
+
return ' ';
|
|
141
|
+
}
|
|
142
|
+
html(text) {
|
|
143
|
+
return toInlinePlainText(text);
|
|
144
|
+
}
|
|
145
|
+
image(_href, _title, text) {
|
|
146
|
+
return text;
|
|
147
|
+
}
|
|
148
|
+
link(_href, _title, text) {
|
|
149
|
+
return text;
|
|
150
|
+
}
|
|
151
|
+
list(body) {
|
|
152
|
+
return ` ${body} `;
|
|
153
|
+
}
|
|
154
|
+
listitem(text) {
|
|
155
|
+
return ` ${text} `;
|
|
156
|
+
}
|
|
157
|
+
paragraph(text) {
|
|
158
|
+
return ` ${text} `;
|
|
159
|
+
}
|
|
160
|
+
strong(text) {
|
|
161
|
+
return text;
|
|
162
|
+
}
|
|
163
|
+
table(header, body) {
|
|
164
|
+
return ` ${header} ${body} `;
|
|
165
|
+
}
|
|
166
|
+
tablecell(content) {
|
|
167
|
+
return `${content} `;
|
|
168
|
+
}
|
|
169
|
+
tablerow(content) {
|
|
170
|
+
return ` ${content} `;
|
|
171
|
+
}
|
|
172
|
+
text(text) {
|
|
173
|
+
return text.replace(unclosedElement, '$2');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const markdownParser = new external_marked_namespaceObject.Marked();
|
|
177
|
+
const plainTextMarkdownParser = new external_marked_namespaceObject.Marked();
|
|
178
|
+
const htmlRenderer = Object.assign(new external_marked_namespaceObject.Renderer(), customRenderer);
|
|
179
|
+
const plainTextRenderer = new PlainTextRenderer();
|
|
180
|
+
const transformMarkdownToHtml = (text)=>markdownParser.parse(text, {
|
|
181
|
+
renderer: htmlRenderer
|
|
182
|
+
});
|
|
183
|
+
const markdownToPlainText = (text)=>{
|
|
184
|
+
const plain = plainTextMarkdownParser.parse(text, {
|
|
185
|
+
renderer: plainTextRenderer
|
|
186
|
+
});
|
|
187
|
+
return decodeHtmlEntities(plain).replace(/\s+/g, ' ').trim();
|
|
188
|
+
};
|
|
189
|
+
exports.markdownToPlainText = __webpack_exports__.markdownToPlainText;
|
|
114
190
|
exports.transformMarkdownToHtml = __webpack_exports__.transformMarkdownToHtml;
|
|
115
191
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
192
|
+
"markdownToPlainText",
|
|
116
193
|
"transformMarkdownToHtml"
|
|
117
194
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
118
195
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -53,7 +53,7 @@ const renderConversationDebugHeader = ({ props })=>{
|
|
|
53
53
|
${i18n.t('generated-answer-debug-mode-on')}
|
|
54
54
|
<div class="bg-success h-2 w-2 rounded-full shrink-0"></div>
|
|
55
55
|
|
|
56
|
-
<div class="flex items-center text-neutral-dark
|
|
56
|
+
<div class="flex items-center text-neutral-dark break-all">
|
|
57
57
|
${i18n.t('generated-answer-conversation-id', {
|
|
58
58
|
conversationId
|
|
59
59
|
})}
|
|
@@ -318,7 +318,7 @@ class AtomicInsightGeneratedAnswer extends external_lit_namespaceObject.LitEleme
|
|
|
318
318
|
constructor(){
|
|
319
319
|
super(), this.DEFAULT_COLLAPSED_HEIGHT = 16, this.MAX_COLLAPSED_HEIGHT = 32, this.MIN_COLLAPSED_HEIGHT = 9, this.REQUIRED_FIELDS_TO_INCLUDE_IN_CITATIONS = [
|
|
320
320
|
'filetype'
|
|
321
|
-
], this.withToggle = false, this.collapsible = false, this.maxCollapsedHeight = this.DEFAULT_COLLAPSED_HEIGHT, this.disableCitationAnchoring = false, this.copied = false, this.copyError = false, this.ariaMessage = new accessibility_utils_cjs_namespaceObject.AriaLiveRegionController(this, 'generated-answer'), this.onGeneratedAnswerStateUpdate = ()=>{
|
|
321
|
+
], this.withToggle = false, this.collapsible = false, this.maxCollapsedHeight = this.DEFAULT_COLLAPSED_HEIGHT, this.disableCitationAnchoring = false, this.copied = false, this.copyError = false, this.ariaMessage = new accessibility_utils_cjs_namespaceObject.AriaLiveRegionController(this, 'generated-answer', false, true), this.ariaErrorMessage = new accessibility_utils_cjs_namespaceObject.AriaLiveRegionController(this, 'generated-answer-error', true), this.onGeneratedAnswerStateUpdate = ()=>{
|
|
322
322
|
if (this.generatedAnswerState.isVisible !== this.controller.data.isVisible) {
|
|
323
323
|
this.controller.data = {
|
|
324
324
|
...this.controller.data,
|
|
@@ -326,7 +326,14 @@ class AtomicInsightGeneratedAnswer extends external_lit_namespaceObject.LitEleme
|
|
|
326
326
|
};
|
|
327
327
|
this.controller.writeStoredData(this.controller.data);
|
|
328
328
|
}
|
|
329
|
-
|
|
329
|
+
const status = this.controller.getGeneratedAnswerStatus();
|
|
330
|
+
if (this.controller.isStatusAssertive()) {
|
|
331
|
+
this.ariaMessage.message = '';
|
|
332
|
+
this.ariaErrorMessage.message = status;
|
|
333
|
+
} else {
|
|
334
|
+
this.ariaErrorMessage.message = '';
|
|
335
|
+
this.ariaMessage.message = status;
|
|
336
|
+
}
|
|
330
337
|
};
|
|
331
338
|
new validate_props_controller_cjs_namespaceObject.ValidatePropsController(this, ()=>({
|
|
332
339
|
maxCollapsedHeight: this.maxCollapsedHeight
|
|
@@ -421,7 +421,7 @@ class AtomicGeneratedAnswer extends external_lit_namespaceObject.LitElement {
|
|
|
421
421
|
constructor(){
|
|
422
422
|
super(), this.DEFAULT_COLLAPSED_HEIGHT = 16, this.MAX_COLLAPSED_HEIGHT = 32, this.MIN_COLLAPSED_HEIGHT = 9, this.REQUIRED_FIELDS_TO_INCLUDE_IN_CITATIONS = [
|
|
423
423
|
'filetype'
|
|
424
|
-
], this.withToggle = false, this.collapsible = false, this.maxCollapsedHeight = this.DEFAULT_COLLAPSED_HEIGHT, this.disableCitationAnchoring = false, this.tabsIncluded = [], this.tabsExcluded = [], this.copied = false, this.copyError = false, this.ariaMessage = new accessibility_utils_cjs_namespaceObject.AriaLiveRegionController(this, 'generated-answer'), this.onGeneratedAnswerStateUpdate = ()=>{
|
|
424
|
+
], this.withToggle = false, this.collapsible = false, this.maxCollapsedHeight = this.DEFAULT_COLLAPSED_HEIGHT, this.disableCitationAnchoring = false, this.tabsIncluded = [], this.tabsExcluded = [], this.copied = false, this.copyError = false, this.ariaMessage = new accessibility_utils_cjs_namespaceObject.AriaLiveRegionController(this, 'generated-answer', false, true), this.ariaErrorMessage = new accessibility_utils_cjs_namespaceObject.AriaLiveRegionController(this, 'generated-answer-error', true), this.onGeneratedAnswerStateUpdate = ()=>{
|
|
425
425
|
if (this.generatedAnswerState.isVisible !== this.controller.data.isVisible) {
|
|
426
426
|
this.controller.data = {
|
|
427
427
|
...this.controller.data,
|
|
@@ -429,7 +429,14 @@ class AtomicGeneratedAnswer extends external_lit_namespaceObject.LitElement {
|
|
|
429
429
|
};
|
|
430
430
|
this.controller.writeStoredData(this.controller.data);
|
|
431
431
|
}
|
|
432
|
-
|
|
432
|
+
const status = this.controller.getGeneratedAnswerStatus();
|
|
433
|
+
if (this.controller.isStatusAssertive()) {
|
|
434
|
+
this.ariaMessage.message = '';
|
|
435
|
+
this.ariaErrorMessage.message = status;
|
|
436
|
+
} else {
|
|
437
|
+
this.ariaErrorMessage.message = '';
|
|
438
|
+
this.ariaMessage.message = status;
|
|
439
|
+
}
|
|
433
440
|
};
|
|
434
441
|
new validate_props_controller_cjs_namespaceObject.ValidatePropsController(this, ()=>({
|
|
435
442
|
maxCollapsedHeight: this.maxCollapsedHeight
|
|
@@ -42,7 +42,9 @@ class AriaLiveRegionController {
|
|
|
42
42
|
return element;
|
|
43
43
|
}
|
|
44
44
|
dispatchMessage(message) {
|
|
45
|
-
this.getAriaLiveElement()
|
|
45
|
+
const ariaLiveElement = this.getAriaLiveElement();
|
|
46
|
+
if (this.preserveQueuedMessages) return void ariaLiveElement?.updateMessage(this.regionName, message, this.assertive, true);
|
|
47
|
+
ariaLiveElement?.updateMessage(this.regionName, message, this.assertive);
|
|
46
48
|
}
|
|
47
49
|
set message(msg) {
|
|
48
50
|
this.dispatchMessage(msg);
|
|
@@ -50,10 +52,11 @@ class AriaLiveRegionController {
|
|
|
50
52
|
hostUpdate() {
|
|
51
53
|
this.getAriaLiveElement()?.registerRegion(this.regionName, this.assertive);
|
|
52
54
|
}
|
|
53
|
-
constructor(host, regionName, assertive = false){
|
|
55
|
+
constructor(host, regionName, assertive = false, preserveQueuedMessages = false){
|
|
54
56
|
this.host = host;
|
|
55
57
|
this.regionName = regionName;
|
|
56
58
|
this.assertive = assertive;
|
|
59
|
+
this.preserveQueuedMessages = preserveQueuedMessages;
|
|
57
60
|
this.host.addController(this);
|
|
58
61
|
}
|
|
59
62
|
}
|
|
@@ -30,10 +30,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
function buildDebouncedQueue(options) {
|
|
31
31
|
let actions = [];
|
|
32
32
|
let intervalId = null;
|
|
33
|
+
let lastExecutedAt = null;
|
|
33
34
|
function dequeueAction() {
|
|
34
35
|
const action = actions.shift();
|
|
35
|
-
if (action)
|
|
36
|
-
|
|
36
|
+
if (action) {
|
|
37
|
+
lastExecutedAt = Date.now();
|
|
38
|
+
action.execute();
|
|
39
|
+
} else {
|
|
37
40
|
clearInterval(intervalId);
|
|
38
41
|
intervalId = null;
|
|
39
42
|
}
|
|
@@ -48,10 +51,18 @@ function buildDebouncedQueue(options) {
|
|
|
48
51
|
id: uniqueId,
|
|
49
52
|
execute
|
|
50
53
|
});
|
|
51
|
-
if (null
|
|
52
|
-
|
|
54
|
+
if (null !== intervalId) return;
|
|
55
|
+
const elapsedSinceLastExecution = null === lastExecutedAt ? null : Date.now() - lastExecutedAt;
|
|
56
|
+
if (null === elapsedSinceLastExecution || elapsedSinceLastExecution >= options.delay) {
|
|
53
57
|
intervalId = setInterval(dequeueAction, options.delay);
|
|
58
|
+
dequeueAction();
|
|
59
|
+
return;
|
|
54
60
|
}
|
|
61
|
+
const remainingDelay = options.delay - elapsedSinceLastExecution;
|
|
62
|
+
intervalId = setTimeout(()=>{
|
|
63
|
+
intervalId = setInterval(dequeueAction, options.delay);
|
|
64
|
+
dequeueAction();
|
|
65
|
+
}, remainingDelay);
|
|
55
66
|
},
|
|
56
67
|
clear () {
|
|
57
68
|
actions = [];
|