@coveo/atomic 3.57.1 → 3.57.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.
Files changed (35) hide show
  1. package/custom-elements.json +12825 -12796
  2. package/dist/cjs/components/common/atomic-generated-answer-content/answer-context.cjs +37 -0
  3. package/dist/cjs/components/common/atomic-generated-answer-content/atomic-generated-answer-content.cjs +9 -1
  4. package/dist/cjs/components/common/atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.cjs +160 -0
  5. package/dist/cjs/components/common/atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.tw.css.cjs +59 -0
  6. package/dist/cjs/components/common/generated-answer/generated-answer-controller.cjs +6 -3
  7. package/dist/cjs/components/common/generated-answer/generated-content/generated-markdown-content.cjs +6 -1
  8. package/dist/cjs/components/common/generated-answer/generated-content/generated-markdown-content.tw.css.cjs +12 -0
  9. package/dist/cjs/components/common/generated-answer/generated-content/markdown-utils.cjs +6 -0
  10. package/dist/cjs/components/common/index.cjs +4 -0
  11. package/dist/cjs/components/common/lazy-index.cjs +1 -0
  12. package/dist/cjs/global/environment.cjs +1 -1
  13. package/dist/cjs/utils/custom-element-tags.cjs +1 -0
  14. package/dist/cjs/versions.cjs +1 -1
  15. package/dist/esm/components/common/atomic-generated-answer-content/answer-context.js +3 -0
  16. package/dist/esm/components/common/atomic-generated-answer-content/atomic-generated-answer-content.js +9 -1
  17. package/dist/esm/components/common/atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.js +116 -0
  18. package/dist/esm/components/common/atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.tw.css.js +4 -0
  19. package/dist/esm/components/common/generated-answer/generated-answer-controller.js +6 -3
  20. package/dist/esm/components/common/generated-answer/generated-content/generated-markdown-content.js +6 -1
  21. package/dist/esm/components/common/generated-answer/generated-content/generated-markdown-content.tw.css.js +1 -1
  22. package/dist/esm/components/common/generated-answer/generated-content/markdown-utils.js +6 -0
  23. package/dist/esm/components/common/index.js +1 -0
  24. package/dist/esm/components/common/lazy-index.js +1 -0
  25. package/dist/esm/global/environment.js +1 -1
  26. package/dist/esm/utils/custom-element-tags.js +1 -0
  27. package/dist/esm/versions.js +1 -1
  28. package/dist/types/components/common/atomic-generated-answer-content/answer-context.d.ts +3 -0
  29. package/dist/types/components/common/atomic-generated-answer-content/atomic-generated-answer-content.d.ts +1 -0
  30. package/dist/types/components/common/atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.d.ts +27 -0
  31. package/dist/types/components/common/atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.tw.css.d.ts +2 -0
  32. package/dist/types/components/common/generated-answer/generated-content/generated-markdown-content.d.ts +1 -0
  33. package/dist/types/components/common/index.d.ts +1 -0
  34. package/dist/types/components/search/atomic-generated-answer/atomic-generated-answer.d.ts +3 -0
  35. package/package.json +15 -14
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ answerContext: ()=>answerContext
28
+ });
29
+ const context_namespaceObject = require("@lit/context");
30
+ const answerContext = (0, context_namespaceObject.createContext)(Symbol('answer-id'));
31
+ exports.answerContext = __webpack_exports__.answerContext;
32
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
33
+ "answerContext"
34
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
35
+ Object.defineProperty(exports, '__esModule', {
36
+ value: true
37
+ });
@@ -36,6 +36,7 @@ __webpack_require__.d(__webpack_exports__, {
36
36
  AtomicGeneratedAnswerContent: ()=>AtomicGeneratedAnswerContent
37
37
  });
38
38
  const external_lit_namespaceObject = require("lit");
39
+ const context_namespaceObject = require("@lit/context");
39
40
  const decorators_js_namespaceObject = require("lit/decorators.js");
40
41
  const when_js_namespaceObject = require("lit/directives/when.js");
41
42
  const atomic_generated_answer_tw_css_cjs_namespaceObject = require("../../search/atomic-generated-answer/atomic-generated-answer.tw.css.cjs");
@@ -45,6 +46,7 @@ const generated_content_container_cjs_namespaceObject = require("../generated-an
45
46
  const render_agent_generation_steps_cjs_namespaceObject = require("../generated-answer/render-agent-generation-steps.cjs");
46
47
  const render_feedback_and_copy_buttons_cjs_namespaceObject = require("../generated-answer/render-feedback-and-copy-buttons.cjs");
47
48
  const source_citations_cjs_namespaceObject = require("../generated-answer/source-citations.cjs");
49
+ const external_answer_context_cjs_namespaceObject = require("./answer-context.cjs");
48
50
  function _ts_decorate(decorators, target, key, desc) {
49
51
  var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
50
52
  if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
@@ -62,6 +64,7 @@ class AtomicGeneratedAnswerContent extends external_lit_namespaceObject.LitEleme
62
64
  }
63
65
  render() {
64
66
  const { answer, answerContentFormat, isStreaming, generationSteps, citations = [], answerId, error, cannotAnswer } = this.generatedAnswer || {};
67
+ this.answerId = answerId || '';
65
68
  if (error) return this.renderError();
66
69
  if (cannotAnswer) return this.renderCannotAnswer();
67
70
  if (!answerId) return (0, external_lit_namespaceObject.html)``;
@@ -164,12 +167,17 @@ class AtomicGeneratedAnswerContent extends external_lit_namespaceObject.LitEleme
164
167
  `;
165
168
  }
166
169
  constructor(...args){
167
- super(...args), this.renderCitations = ()=>(0, external_lit_namespaceObject.html)``, this.onClickLike = ()=>{}, this.onClickDislike = ()=>{}, this.onCopyToClipboard = ()=>{}, this.copyState = 'idle';
170
+ super(...args), this.answerId = '', this.renderCitations = ()=>(0, external_lit_namespaceObject.html)``, this.onClickLike = ()=>{}, this.onClickDislike = ()=>{}, this.onCopyToClipboard = ()=>{}, this.copyState = 'idle';
168
171
  }
169
172
  }
170
173
  AtomicGeneratedAnswerContent.styles = [
171
174
  atomic_generated_answer_tw_css_cjs_default()
172
175
  ];
176
+ _ts_decorate([
177
+ (0, context_namespaceObject.provide)({
178
+ context: external_answer_context_cjs_namespaceObject.answerContext
179
+ })
180
+ ], AtomicGeneratedAnswerContent.prototype, "answerId", void 0);
173
181
  _ts_decorate([
174
182
  (0, decorators_js_namespaceObject.property)({
175
183
  attribute: false
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = (exports1)=>{
25
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ AtomicGeneratedAnswerInlineLink: ()=>AtomicGeneratedAnswerInlineLink
37
+ });
38
+ const headless_namespaceObject = require("@coveo/headless");
39
+ const external_lit_namespaceObject = require("lit");
40
+ const decorators_js_namespaceObject = require("lit/decorators.js");
41
+ const external_atomic_generated_answer_inline_link_tw_css_cjs_namespaceObject = require("./atomic-generated-answer-inline-link.tw.css.cjs");
42
+ var external_atomic_generated_answer_inline_link_tw_css_cjs_default = /*#__PURE__*/ __webpack_require__.n(external_atomic_generated_answer_inline_link_tw_css_cjs_namespaceObject);
43
+ const if_defined_js_namespaceObject = require("lit/directives/if-defined.js");
44
+ const binding_guard_cjs_namespaceObject = require("../../../decorators/binding-guard.cjs");
45
+ const bindings_cjs_namespaceObject = require("../../../decorators/bindings.cjs");
46
+ const error_guard_cjs_namespaceObject = require("../../../decorators/error-guard.cjs");
47
+ const context_namespaceObject = require("@lit/context");
48
+ const answer_context_cjs_namespaceObject = require("../atomic-generated-answer-content/answer-context.cjs");
49
+ function _ts_decorate(decorators, target, key, desc) {
50
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
51
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
52
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
53
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
54
+ }
55
+ function _ts_metadata(k, v) {
56
+ if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(k, v);
57
+ }
58
+ class AtomicGeneratedAnswerInlineLink extends external_lit_namespaceObject.LitElement {
59
+ initialize() {
60
+ if (this.answerId && this.href) this.interactiveLink = (0, headless_namespaceObject.buildInteractiveGeneratedAnswerInlineLink)(this.bindings.engine, {
61
+ options: {
62
+ answerId: this.answerId,
63
+ link: {
64
+ linkText: this.textContent?.trim() || '',
65
+ linkURL: this.href
66
+ }
67
+ }
68
+ });
69
+ }
70
+ render() {
71
+ return (0, external_lit_namespaceObject.html)`
72
+ <a
73
+ part="answer-link"
74
+ href=${this.href}
75
+ title=${(0, if_defined_js_namespaceObject.ifDefined)(this.title || void 0)}
76
+ target="_blank"
77
+ rel="noopener noreferrer"
78
+ @click=${this.handleSelect}
79
+ @contextmenu=${this.handleSelect}
80
+ @mousedown=${this.handleSelect}
81
+ @mouseup=${this.handleSelect}
82
+ @touchstart=${this.handleBeginDelayedSelect}
83
+ @touchend=${this.handleCancelPendingSelect}
84
+ >
85
+ <span part="answer-link-text"><slot></slot></span>
86
+ <span class="icon-wrapper">
87
+ <svg
88
+ part="answer-link-icon"
89
+ width="100%"
90
+ height="100%"
91
+ viewBox="0 0 640 640"
92
+ aria-hidden="true"
93
+ focusable="false"
94
+ xmlns="http://www.w3.org/2000/svg"
95
+ >
96
+ <path
97
+ fill="currentColor"
98
+ d="M354.4 83.8C359.4 71.8 371.1 64 384 64L544 64C561.7 64 576 78.3 576 96L576 256C576 268.9 568.2 280.6 556.2 285.6C544.2 290.6 530.5 287.8 521.3 278.7L464 221.3L310.6 374.6C298.1 387.1 277.8 387.1 265.3 374.6C252.8 362.1 252.8 341.8 265.3 329.3L418.7 176L361.4 118.6C352.2 109.4 349.5 95.7 354.5 83.7zM64 240C64 195.8 99.8 160 144 160L224 160C241.7 160 256 174.3 256 192C256 209.7 241.7 224 224 224L144 224C135.2 224 128 231.2 128 240L128 496C128 504.8 135.2 512 144 512L400 512C408.8 512 416 504.8 416 496L416 416C416 398.3 430.3 384 448 384C465.7 384 480 398.3 480 416L480 496C480 540.2 444.2 576 400 576L144 576C99.8 576 64 540.2 64 496L64 240z"
99
+ />
100
+ </svg>
101
+ </span>
102
+ </a>
103
+ `;
104
+ }
105
+ handleSelect() {
106
+ this.interactiveLink?.select();
107
+ }
108
+ handleBeginDelayedSelect() {
109
+ this.interactiveLink?.beginDelayedSelect();
110
+ }
111
+ handleCancelPendingSelect() {
112
+ this.interactiveLink?.cancelPendingSelect();
113
+ }
114
+ constructor(...args){
115
+ super(...args), this.initialized = false, this.href = '', this.title = '';
116
+ }
117
+ }
118
+ AtomicGeneratedAnswerInlineLink.styles = external_atomic_generated_answer_inline_link_tw_css_cjs_default();
119
+ _ts_decorate([
120
+ (0, context_namespaceObject.consume)({
121
+ context: answer_context_cjs_namespaceObject.answerContext
122
+ }),
123
+ _ts_metadata("design:type", Object)
124
+ ], AtomicGeneratedAnswerInlineLink.prototype, "answerId", void 0);
125
+ _ts_decorate([
126
+ (0, decorators_js_namespaceObject.state)(),
127
+ _ts_metadata("design:type", "u" < typeof AnyBindings ? Object : AnyBindings)
128
+ ], AtomicGeneratedAnswerInlineLink.prototype, "bindings", void 0);
129
+ _ts_decorate([
130
+ (0, decorators_js_namespaceObject.state)(),
131
+ _ts_metadata("design:type", "u" < typeof Error ? Object : Error)
132
+ ], AtomicGeneratedAnswerInlineLink.prototype, "error", void 0);
133
+ _ts_decorate([
134
+ (0, decorators_js_namespaceObject.property)({
135
+ reflect: true
136
+ })
137
+ ], AtomicGeneratedAnswerInlineLink.prototype, "href", void 0);
138
+ _ts_decorate([
139
+ (0, decorators_js_namespaceObject.property)({
140
+ reflect: true
141
+ })
142
+ ], AtomicGeneratedAnswerInlineLink.prototype, "title", void 0);
143
+ _ts_decorate([
144
+ (0, binding_guard_cjs_namespaceObject.bindingGuard)(),
145
+ (0, error_guard_cjs_namespaceObject.errorGuard)(),
146
+ _ts_metadata("design:type", Function),
147
+ _ts_metadata("design:paramtypes", []),
148
+ _ts_metadata("design:returntype", void 0)
149
+ ], AtomicGeneratedAnswerInlineLink.prototype, "render", null);
150
+ AtomicGeneratedAnswerInlineLink = _ts_decorate([
151
+ (0, decorators_js_namespaceObject.customElement)('atomic-generated-answer-inline-link'),
152
+ (0, bindings_cjs_namespaceObject.bindings)()
153
+ ], AtomicGeneratedAnswerInlineLink);
154
+ exports.AtomicGeneratedAnswerInlineLink = __webpack_exports__.AtomicGeneratedAnswerInlineLink;
155
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
156
+ "AtomicGeneratedAnswerInlineLink"
157
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
158
+ Object.defineProperty(exports, '__esModule', {
159
+ value: true
160
+ });
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ default: ()=>atomic_generated_answer_inline_link_tw_css
28
+ });
29
+ const external_lit_namespaceObject = require("lit");
30
+ const styles = (0, external_lit_namespaceObject.css)`
31
+ @reference '../../../utils/tailwind.global.tw.css';
32
+
33
+ :host {
34
+ display: inline;
35
+ }
36
+
37
+ a {
38
+ @apply text-primary no-underline;
39
+ }
40
+
41
+ a [part='answer-link-text'] {
42
+ @apply underline;
43
+ }
44
+
45
+ .icon-wrapper {
46
+ display: inline-block;
47
+ width: 1em;
48
+ height: 1em;
49
+ vertical-align: text-bottom;
50
+ }
51
+ `;
52
+ const atomic_generated_answer_inline_link_tw_css = styles;
53
+ exports["default"] = __webpack_exports__["default"];
54
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
55
+ "default"
56
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
57
+ Object.defineProperty(exports, '__esModule', {
58
+ value: true
59
+ });
@@ -60,12 +60,12 @@ class GeneratedAnswerController {
60
60
  if (!state) return '';
61
61
  const isHidden = !state.isVisible;
62
62
  const isGenerating = !!state.isStreaming;
63
- const hasAnswer = !!state.answer;
63
+ const hasNonEmptyAnswer = !!state.answer?.trim();
64
64
  const hasError = !!state.error;
65
65
  if (isHidden) return bindings.i18n.t('generated-answer-hidden');
66
66
  if (isGenerating) return bindings.i18n.t('generating-answer');
67
67
  if (hasError) return bindings.i18n.t('answer-could-not-be-generated');
68
- if (hasAnswer) return bindings.i18n.t('answer-generated', {
68
+ if (hasNonEmptyAnswer) return bindings.i18n.t('answer-generated', {
69
69
  answer: state.answer
70
70
  });
71
71
  return '';
@@ -77,7 +77,10 @@ class GeneratedAnswerController {
77
77
  }
78
78
  get hasNoAnswerGenerated() {
79
79
  const { answer, citations } = this.options.getGeneratedAnswerState() ?? {};
80
- return void 0 === answer && !citations?.length && !this.hasRetryableError;
80
+ const isAnswerEmpty = !answer?.trim();
81
+ const hasNoCitations = !citations?.length;
82
+ const hasNoRetryableError = !this.hasRetryableError;
83
+ return isAnswerEmpty && hasNoCitations && hasNoRetryableError;
81
84
  }
82
85
  get isAnswerVisible() {
83
86
  return !!this.options.getGeneratedAnswerState()?.isVisible;
@@ -39,12 +39,17 @@ const external_dompurify_namespaceObject = require("dompurify");
39
39
  var external_dompurify_default = /*#__PURE__*/ __webpack_require__.n(external_dompurify_namespaceObject);
40
40
  const external_lit_namespaceObject = require("lit");
41
41
  const unsafe_html_js_namespaceObject = require("lit/directives/unsafe-html.js");
42
+ require("../../atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.cjs");
42
43
  const external_markdown_utils_cjs_namespaceObject = require("./markdown-utils.cjs");
43
44
  const renderGeneratedMarkdownContent = ({ props })=>{
44
45
  const answerAsHtml = external_dompurify_default().sanitize((0, external_markdown_utils_cjs_namespaceObject.transformMarkdownToHtml)(props.answer ?? ''), {
45
46
  ADD_ATTR: [
46
47
  'part'
47
- ]
48
+ ],
49
+ CUSTOM_ELEMENT_HANDLING: {
50
+ tagNameCheck: /^atomic-generated-answer-inline-link$/,
51
+ attributeNameCheck: /^(href|title)$/
52
+ }
48
53
  });
49
54
  return (0, external_lit_namespaceObject.html)`
50
55
  <div
@@ -58,6 +58,18 @@ const styles = (0, external_lit_namespaceObject.css)`
58
58
  @apply mb-3;
59
59
  }
60
60
 
61
+ [part='generated-text']
62
+ [part^='answer-heading-']
63
+ atomic-generated-answer-inline-link::part(answer-link) {
64
+ @apply text-inherit;
65
+ }
66
+
67
+ [part='generated-text']
68
+ [part^='answer-heading-']
69
+ atomic-generated-answer-inline-link::part(answer-link-text) {
70
+ @apply no-underline;
71
+ }
72
+
61
73
  [part='generated-text'] [part='answer-list-item'],
62
74
  [part='generated-text'] [part='answer-paragraph'],
63
75
  [part='generated-text'] [part='answer-quote-block'],
@@ -74,6 +74,12 @@ const customRenderer = {
74
74
  const tag = ordered && 1 !== start ? `<${type} part="${part}" start="${start}">` : `<${type} part="${part}">`;
75
75
  return `${tag}${body}</${type}>`;
76
76
  },
77
+ link (href, title, text) {
78
+ const titleAttribute = title ? ` title="${escapeHtml(title)}"` : '';
79
+ const safeHref = href ? escapeHtml(href) : '';
80
+ if (!safeHref) return `<span>${text}</span>`;
81
+ return `<atomic-generated-answer-inline-link href="${safeHref}"${titleAttribute}>${text}</atomic-generated-answer-inline-link>`;
82
+ },
77
83
  listitem (text) {
78
84
  const unwrappedText = text.replace(/^<p[^>]*>/, '').replace(/<\/p>\n?$/, '');
79
85
  const withClosedElement = completeUnclosedElement(unwrappedText);
@@ -42,6 +42,7 @@ __webpack_require__.d(__webpack_exports__, {
42
42
  AtomicTabPopover: ()=>atomic_tab_popover_cjs_namespaceObject.AtomicTabPopover,
43
43
  AtomicAskFollowUpInput: ()=>atomic_ask_follow_up_input_cjs_namespaceObject.AtomicAskFollowUpInput,
44
44
  AtomicTimeframe: ()=>atomic_timeframe_cjs_namespaceObject.AtomicTimeframe,
45
+ AtomicGeneratedAnswerInlineLink: ()=>atomic_generated_answer_inline_link_cjs_namespaceObject.AtomicGeneratedAnswerInlineLink,
45
46
  AtomicNumericRange: ()=>atomic_numeric_range_cjs_namespaceObject.AtomicNumericRange,
46
47
  AtomicSmartSnippetCollapseWrapper: ()=>atomic_smart_snippet_collapse_wrapper_cjs_namespaceObject.AtomicSmartSnippetCollapseWrapper,
47
48
  AtomicGeneratedAnswerFeedbackModal: ()=>atomic_generated_answer_feedback_modal_cjs_namespaceObject.AtomicGeneratedAnswerFeedbackModal,
@@ -60,6 +61,7 @@ const atomic_facet_placeholder_cjs_namespaceObject = require("./atomic-facet-pla
60
61
  const atomic_focus_trap_cjs_namespaceObject = require("./atomic-focus-trap/atomic-focus-trap.cjs");
61
62
  const atomic_generated_answer_content_cjs_namespaceObject = require("./atomic-generated-answer-content/atomic-generated-answer-content.cjs");
62
63
  const atomic_generated_answer_feedback_modal_cjs_namespaceObject = require("./atomic-generated-answer-feedback-modal/atomic-generated-answer-feedback-modal.cjs");
64
+ const atomic_generated_answer_inline_link_cjs_namespaceObject = require("./atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.cjs");
63
65
  const atomic_generated_answer_thread_cjs_namespaceObject = require("./atomic-generated-answer-thread/atomic-generated-answer-thread.cjs");
64
66
  const atomic_generated_answer_thread_item_cjs_namespaceObject = require("./atomic-generated-answer-thread-item/atomic-generated-answer-thread-item.cjs");
65
67
  const atomic_icon_cjs_namespaceObject = require("./atomic-icon/atomic-icon.cjs");
@@ -85,6 +87,7 @@ exports.AtomicFacetPlaceholder = __webpack_exports__.AtomicFacetPlaceholder;
85
87
  exports.AtomicFocusTrap = __webpack_exports__.AtomicFocusTrap;
86
88
  exports.AtomicGeneratedAnswerContent = __webpack_exports__.AtomicGeneratedAnswerContent;
87
89
  exports.AtomicGeneratedAnswerFeedbackModal = __webpack_exports__.AtomicGeneratedAnswerFeedbackModal;
90
+ exports.AtomicGeneratedAnswerInlineLink = __webpack_exports__.AtomicGeneratedAnswerInlineLink;
88
91
  exports.AtomicGeneratedAnswerThread = __webpack_exports__.AtomicGeneratedAnswerThread;
89
92
  exports.AtomicGeneratedAnswerThreadItem = __webpack_exports__.AtomicGeneratedAnswerThreadItem;
90
93
  exports.AtomicIcon = __webpack_exports__.AtomicIcon;
@@ -111,6 +114,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
111
114
  "AtomicFocusTrap",
112
115
  "AtomicGeneratedAnswerContent",
113
116
  "AtomicGeneratedAnswerFeedbackModal",
117
+ "AtomicGeneratedAnswerInlineLink",
114
118
  "AtomicGeneratedAnswerThread",
115
119
  "AtomicGeneratedAnswerThreadItem",
116
120
  "AtomicIcon",
@@ -37,6 +37,7 @@ const __rspack_default_export = {
37
37
  'atomic-focus-trap': async ()=>await import("./atomic-focus-trap/atomic-focus-trap.cjs"),
38
38
  'atomic-generated-answer-content': async ()=>await import("./atomic-generated-answer-content/atomic-generated-answer-content.cjs"),
39
39
  'atomic-generated-answer-feedback-modal': async ()=>await import("./atomic-generated-answer-feedback-modal/atomic-generated-answer-feedback-modal.cjs"),
40
+ 'atomic-generated-answer-inline-link': async ()=>await import("./atomic-generated-answer-inline-link/atomic-generated-answer-inline-link.cjs"),
40
41
  'atomic-generated-answer-thread': async ()=>await import("./atomic-generated-answer-thread/atomic-generated-answer-thread.cjs"),
41
42
  'atomic-generated-answer-thread-item': async ()=>await import("./atomic-generated-answer-thread-item/atomic-generated-answer-thread-item.cjs"),
42
43
  'atomic-icon': async ()=>await import("./atomic-icon/atomic-icon.cjs"),
@@ -33,7 +33,7 @@ function getWindow() {
33
33
  }
34
34
  function getAtomicEnvironment(headlessVersion) {
35
35
  return {
36
- version: "3.57.1",
36
+ version: "3.57.2",
37
37
  headlessVersion
38
38
  };
39
39
  }
@@ -79,6 +79,7 @@ const ATOMIC_CUSTOM_ELEMENT_TAGS = new Set([
79
79
  'atomic-generated-answer',
80
80
  'atomic-generated-answer-content',
81
81
  'atomic-generated-answer-feedback-modal',
82
+ 'atomic-generated-answer-inline-link',
82
83
  'atomic-generated-answer-thread',
83
84
  'atomic-generated-answer-thread-item',
84
85
  'atomic-html',
@@ -28,7 +28,7 @@ __webpack_require__.d(__webpack_exports__, {
28
28
  atomicVersion: ()=>atomicVersion
29
29
  });
30
30
  const package_json_namespaceObject = require("@coveo/headless/package.json");
31
- const atomicVersion = "3.57.1";
31
+ const atomicVersion = "3.57.2";
32
32
  exports.atomicVersion = __webpack_exports__.atomicVersion;
33
33
  exports.headlessVersion = __webpack_exports__.headlessVersion;
34
34
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -0,0 +1,3 @@
1
+ import { createContext } from "@lit/context";
2
+ const answerContext = createContext(Symbol('answer-id'));
3
+ export { answerContext };
@@ -1,4 +1,5 @@
1
1
  import { LitElement, html } from "lit";
2
+ import { provide } from "@lit/context";
2
3
  import { customElement, property, state } from "lit/decorators.js";
3
4
  import { when } from "lit/directives/when.js";
4
5
  import atomic_generated_answer_tw_css from "../../search/atomic-generated-answer/atomic-generated-answer.tw.css.js";
@@ -7,6 +8,7 @@ import { renderGeneratedContentContainer } from "../generated-answer/generated-c
7
8
  import { renderAgentGenerationSteps } from "../generated-answer/render-agent-generation-steps.js";
8
9
  import { renderFeedbackAndCopyButtons } from "../generated-answer/render-feedback-and-copy-buttons.js";
9
10
  import { renderSourceCitations } from "../generated-answer/source-citations.js";
11
+ import { answerContext } from "./answer-context.js";
10
12
  function _ts_decorate(decorators, target, key, desc) {
11
13
  var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
14
  if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
@@ -24,6 +26,7 @@ class AtomicGeneratedAnswerContent extends LitElement {
24
26
  }
25
27
  render() {
26
28
  const { answer, answerContentFormat, isStreaming, generationSteps, citations = [], answerId, error, cannotAnswer } = this.generatedAnswer || {};
29
+ this.answerId = answerId || '';
27
30
  if (error) return this.renderError();
28
31
  if (cannotAnswer) return this.renderCannotAnswer();
29
32
  if (!answerId) return html``;
@@ -126,12 +129,17 @@ class AtomicGeneratedAnswerContent extends LitElement {
126
129
  `;
127
130
  }
128
131
  constructor(...args){
129
- super(...args), this.renderCitations = ()=>html``, this.onClickLike = ()=>{}, this.onClickDislike = ()=>{}, this.onCopyToClipboard = ()=>{}, this.copyState = 'idle';
132
+ super(...args), this.answerId = '', this.renderCitations = ()=>html``, this.onClickLike = ()=>{}, this.onClickDislike = ()=>{}, this.onCopyToClipboard = ()=>{}, this.copyState = 'idle';
130
133
  }
131
134
  }
132
135
  AtomicGeneratedAnswerContent.styles = [
133
136
  atomic_generated_answer_tw_css
134
137
  ];
138
+ _ts_decorate([
139
+ provide({
140
+ context: answerContext
141
+ })
142
+ ], AtomicGeneratedAnswerContent.prototype, "answerId", void 0);
135
143
  _ts_decorate([
136
144
  property({
137
145
  attribute: false
@@ -0,0 +1,116 @@
1
+ import { buildInteractiveGeneratedAnswerInlineLink } from "@coveo/headless";
2
+ import { LitElement, html } from "lit";
3
+ import { customElement, property, state } from "lit/decorators.js";
4
+ import atomic_generated_answer_inline_link_tw_css from "./atomic-generated-answer-inline-link.tw.css.js";
5
+ import { ifDefined } from "lit/directives/if-defined.js";
6
+ import { bindingGuard } from "../../../decorators/binding-guard.js";
7
+ import { bindings } from "../../../decorators/bindings.js";
8
+ import { errorGuard } from "../../../decorators/error-guard.js";
9
+ import { consume } from "@lit/context";
10
+ import { answerContext } from "../atomic-generated-answer-content/answer-context.js";
11
+ function _ts_decorate(decorators, target, key, desc) {
12
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
13
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
14
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
15
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
16
+ }
17
+ function _ts_metadata(k, v) {
18
+ if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(k, v);
19
+ }
20
+ class AtomicGeneratedAnswerInlineLink extends LitElement {
21
+ initialize() {
22
+ if (this.answerId && this.href) this.interactiveLink = buildInteractiveGeneratedAnswerInlineLink(this.bindings.engine, {
23
+ options: {
24
+ answerId: this.answerId,
25
+ link: {
26
+ linkText: this.textContent?.trim() || '',
27
+ linkURL: this.href
28
+ }
29
+ }
30
+ });
31
+ }
32
+ render() {
33
+ return html`
34
+ <a
35
+ part="answer-link"
36
+ href=${this.href}
37
+ title=${ifDefined(this.title || void 0)}
38
+ target="_blank"
39
+ rel="noopener noreferrer"
40
+ @click=${this.handleSelect}
41
+ @contextmenu=${this.handleSelect}
42
+ @mousedown=${this.handleSelect}
43
+ @mouseup=${this.handleSelect}
44
+ @touchstart=${this.handleBeginDelayedSelect}
45
+ @touchend=${this.handleCancelPendingSelect}
46
+ >
47
+ <span part="answer-link-text"><slot></slot></span>
48
+ <span class="icon-wrapper">
49
+ <svg
50
+ part="answer-link-icon"
51
+ width="100%"
52
+ height="100%"
53
+ viewBox="0 0 640 640"
54
+ aria-hidden="true"
55
+ focusable="false"
56
+ xmlns="http://www.w3.org/2000/svg"
57
+ >
58
+ <path
59
+ fill="currentColor"
60
+ d="M354.4 83.8C359.4 71.8 371.1 64 384 64L544 64C561.7 64 576 78.3 576 96L576 256C576 268.9 568.2 280.6 556.2 285.6C544.2 290.6 530.5 287.8 521.3 278.7L464 221.3L310.6 374.6C298.1 387.1 277.8 387.1 265.3 374.6C252.8 362.1 252.8 341.8 265.3 329.3L418.7 176L361.4 118.6C352.2 109.4 349.5 95.7 354.5 83.7zM64 240C64 195.8 99.8 160 144 160L224 160C241.7 160 256 174.3 256 192C256 209.7 241.7 224 224 224L144 224C135.2 224 128 231.2 128 240L128 496C128 504.8 135.2 512 144 512L400 512C408.8 512 416 504.8 416 496L416 416C416 398.3 430.3 384 448 384C465.7 384 480 398.3 480 416L480 496C480 540.2 444.2 576 400 576L144 576C99.8 576 64 540.2 64 496L64 240z"
61
+ />
62
+ </svg>
63
+ </span>
64
+ </a>
65
+ `;
66
+ }
67
+ handleSelect() {
68
+ this.interactiveLink?.select();
69
+ }
70
+ handleBeginDelayedSelect() {
71
+ this.interactiveLink?.beginDelayedSelect();
72
+ }
73
+ handleCancelPendingSelect() {
74
+ this.interactiveLink?.cancelPendingSelect();
75
+ }
76
+ constructor(...args){
77
+ super(...args), this.initialized = false, this.href = '', this.title = '';
78
+ }
79
+ }
80
+ AtomicGeneratedAnswerInlineLink.styles = atomic_generated_answer_inline_link_tw_css;
81
+ _ts_decorate([
82
+ consume({
83
+ context: answerContext
84
+ }),
85
+ _ts_metadata("design:type", Object)
86
+ ], AtomicGeneratedAnswerInlineLink.prototype, "answerId", void 0);
87
+ _ts_decorate([
88
+ state(),
89
+ _ts_metadata("design:type", "u" < typeof AnyBindings ? Object : AnyBindings)
90
+ ], AtomicGeneratedAnswerInlineLink.prototype, "bindings", void 0);
91
+ _ts_decorate([
92
+ state(),
93
+ _ts_metadata("design:type", "u" < typeof Error ? Object : Error)
94
+ ], AtomicGeneratedAnswerInlineLink.prototype, "error", void 0);
95
+ _ts_decorate([
96
+ property({
97
+ reflect: true
98
+ })
99
+ ], AtomicGeneratedAnswerInlineLink.prototype, "href", void 0);
100
+ _ts_decorate([
101
+ property({
102
+ reflect: true
103
+ })
104
+ ], AtomicGeneratedAnswerInlineLink.prototype, "title", void 0);
105
+ _ts_decorate([
106
+ bindingGuard(),
107
+ errorGuard(),
108
+ _ts_metadata("design:type", Function),
109
+ _ts_metadata("design:paramtypes", []),
110
+ _ts_metadata("design:returntype", void 0)
111
+ ], AtomicGeneratedAnswerInlineLink.prototype, "render", null);
112
+ AtomicGeneratedAnswerInlineLink = _ts_decorate([
113
+ customElement('atomic-generated-answer-inline-link'),
114
+ bindings()
115
+ ], AtomicGeneratedAnswerInlineLink);
116
+ export { AtomicGeneratedAnswerInlineLink };
@@ -0,0 +1,4 @@
1
+ import { css } from "lit";
2
+ const styles = css`/*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */:host{display:inline}a{color:var(--atomic-primary);text-decoration-line:none}a [part=answer-link-text]{text-decoration-line:underline}.icon-wrapper{display:inline-block;height:1em;vertical-align:text-bottom;width:1em}`;
3
+ const atomic_generated_answer_inline_link_tw_css = styles;
4
+ export default atomic_generated_answer_inline_link_tw_css;
@@ -32,12 +32,12 @@ class GeneratedAnswerController {
32
32
  if (!state) return '';
33
33
  const isHidden = !state.isVisible;
34
34
  const isGenerating = !!state.isStreaming;
35
- const hasAnswer = !!state.answer;
35
+ const hasNonEmptyAnswer = !!state.answer?.trim();
36
36
  const hasError = !!state.error;
37
37
  if (isHidden) return bindings.i18n.t('generated-answer-hidden');
38
38
  if (isGenerating) return bindings.i18n.t('generating-answer');
39
39
  if (hasError) return bindings.i18n.t('answer-could-not-be-generated');
40
- if (hasAnswer) return bindings.i18n.t('answer-generated', {
40
+ if (hasNonEmptyAnswer) return bindings.i18n.t('answer-generated', {
41
41
  answer: state.answer
42
42
  });
43
43
  return '';
@@ -49,7 +49,10 @@ class GeneratedAnswerController {
49
49
  }
50
50
  get hasNoAnswerGenerated() {
51
51
  const { answer, citations } = this.options.getGeneratedAnswerState() ?? {};
52
- return void 0 === answer && !citations?.length && !this.hasRetryableError;
52
+ const isAnswerEmpty = !answer?.trim();
53
+ const hasNoCitations = !citations?.length;
54
+ const hasNoRetryableError = !this.hasRetryableError;
55
+ return isAnswerEmpty && hasNoCitations && hasNoRetryableError;
53
56
  }
54
57
  get isAnswerVisible() {
55
58
  return !!this.options.getGeneratedAnswerState()?.isVisible;