@coveo/atomic 3.33.0 → 3.33.1-pre.3b2f3850a0

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 (126) hide show
  1. package/dist/atomic/_atomic.esm.js +1 -1
  2. package/dist/atomic/atomic.esm.js.map +1 -1
  3. package/dist/atomic/components/analytics-config.js +1 -1
  4. package/dist/atomic/components/analytics-config.js.map +1 -1
  5. package/dist/atomic/components/atomic-citation.js +1 -547
  6. package/dist/atomic/components/atomic-citation.js.map +1 -1
  7. package/dist/{esm/atomic-citation.entry.js → atomic/components/atomic-citation2.js} +35 -13
  8. package/dist/atomic/components/atomic-citation2.js.map +1 -0
  9. package/dist/atomic/components/atomic-generated-answer-feedback-modal.js +1 -440
  10. package/dist/atomic/components/atomic-generated-answer-feedback-modal.js.map +1 -1
  11. package/dist/{esm/atomic-generated-answer-feedback-modal.entry.js → atomic/components/atomic-generated-answer-feedback-modal2.js} +55 -25
  12. package/dist/atomic/components/atomic-generated-answer-feedback-modal2.js.map +1 -0
  13. package/dist/atomic/components/atomic-generated-answer.js +88 -28
  14. package/dist/atomic/components/atomic-generated-answer.js.map +1 -1
  15. package/dist/atomic/components/atomic-insight-generated-answer.js +95 -34
  16. package/dist/atomic/components/atomic-insight-generated-answer.js.map +1 -1
  17. package/dist/atomic/components/atomic-ipx-result-link.js +1 -1
  18. package/dist/atomic/components/atomic-popover.js +1 -1
  19. package/dist/atomic/components/atomic-result-link.js +1 -1
  20. package/dist/atomic/components/attributes-slot.js +1 -1
  21. package/dist/atomic/components/createPopper.js +1 -1
  22. package/dist/atomic/components/generated-answer-common.js +146 -238
  23. package/dist/atomic/components/generated-answer-common.js.map +1 -1
  24. package/dist/atomic/components/global/environment.js +1 -1
  25. package/dist/atomic/components/popper-lite.js +1 -1
  26. package/dist/atomic/components/slot-utils.js +1 -1
  27. package/dist/atomic/components/tab-popover.js +1 -1
  28. package/dist/atomic/p-01531448.entry.js +2 -0
  29. package/dist/atomic/p-01531448.entry.js.map +1 -0
  30. package/dist/atomic/p-027b85e5.js +2 -0
  31. package/dist/atomic/{p-bed5a86b.js.map → p-027b85e5.js.map} +1 -1
  32. package/dist/atomic/{p-7b9026d7.js → p-07f25674.js} +2 -2
  33. package/dist/atomic/{p-75b863ea.entry.js → p-0ff341d5.entry.js} +2 -2
  34. package/dist/atomic/{p-eb026d69.entry.js → p-129799b2.entry.js} +2 -2
  35. package/dist/atomic/p-284f3c50.js +2 -0
  36. package/dist/atomic/p-284f3c50.js.map +1 -0
  37. package/dist/atomic/p-33201620.entry.js +2 -0
  38. package/dist/atomic/p-33201620.entry.js.map +1 -0
  39. package/dist/atomic/{p-8b6aaeed.entry.js → p-333be187.entry.js} +2 -2
  40. package/dist/atomic/{p-ba67a16b.js → p-3b58a34d.js} +2 -2
  41. package/dist/atomic/{p-ba67a16b.js.map → p-3b58a34d.js.map} +1 -1
  42. package/dist/atomic/{p-946fe85f.js → p-4aaffb59.js} +2 -2
  43. package/dist/atomic/{p-48c8a766.entry.js → p-5730dec7.entry.js} +2 -2
  44. package/dist/atomic/p-5d785d02.entry.js +2 -0
  45. package/dist/atomic/p-5d785d02.entry.js.map +1 -0
  46. package/dist/atomic/{p-9da1c516.entry.js → p-6481379f.entry.js} +2 -2
  47. package/dist/atomic/{p-bfdecd0f.entry.js → p-6f5d26cb.entry.js} +2 -2
  48. package/dist/atomic/{p-ca0a32dc.entry.js → p-dd93ae9a.entry.js} +2 -2
  49. package/dist/cjs/_loader.cjs.js +1 -1
  50. package/dist/cjs/{analytics-config-f34a68ee.js → analytics-config-de09a791.js} +2 -2
  51. package/dist/cjs/analytics-config-de09a791.js.map +1 -0
  52. package/dist/cjs/{atomic-generated-answer-feedback-modal.cjs.entry.js → atomic-citation_2.cjs.entry.js} +526 -1
  53. package/dist/cjs/atomic-citation_2.cjs.entry.js.map +1 -0
  54. package/dist/cjs/atomic-generated-answer.cjs.entry.js +62 -27
  55. package/dist/cjs/atomic-generated-answer.cjs.entry.js.map +1 -1
  56. package/dist/cjs/atomic-insight-generated-answer.cjs.entry.js +68 -32
  57. package/dist/cjs/atomic-insight-generated-answer.cjs.entry.js.map +1 -1
  58. package/dist/cjs/atomic-insight-interface.cjs.entry.js +1 -1
  59. package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
  60. package/dist/cjs/atomic-search-interface.cjs.entry.js +1 -1
  61. package/dist/cjs/atomic.cjs.js +1 -1
  62. package/dist/cjs/{generated-answer-common-4cd4b7c6.js → generated-answer-common-469ad0e8.js} +152 -237
  63. package/dist/cjs/generated-answer-common-469ad0e8.js.map +1 -0
  64. package/dist/cjs/index-757bc886.js +4 -8
  65. package/dist/cjs/version.cjs.js +2 -2
  66. package/dist/esm/_loader.js +1 -1
  67. package/dist/esm/{analytics-config-672b6eba.js → analytics-config-19fa5599.js} +2 -2
  68. package/dist/esm/analytics-config-19fa5599.js.map +1 -0
  69. package/dist/esm/atomic-citation_2.entry.js +938 -0
  70. package/dist/esm/atomic-citation_2.entry.js.map +1 -0
  71. package/dist/esm/atomic-generated-answer.entry.js +64 -29
  72. package/dist/esm/atomic-generated-answer.entry.js.map +1 -1
  73. package/dist/esm/atomic-insight-generated-answer.entry.js +71 -35
  74. package/dist/esm/atomic-insight-generated-answer.entry.js.map +1 -1
  75. package/dist/esm/atomic-insight-interface.entry.js +1 -1
  76. package/dist/esm/atomic-popover.entry.js +2 -2
  77. package/dist/esm/atomic-recs-interface.entry.js +1 -1
  78. package/dist/esm/atomic-search-box-query-suggestions_2.entry.js +1 -1
  79. package/dist/esm/atomic-search-box.entry.js +1 -1
  80. package/dist/esm/atomic-search-interface.entry.js +2 -2
  81. package/dist/esm/atomic-tab-bar_2.entry.js +2 -2
  82. package/dist/esm/atomic.js +1 -1
  83. package/dist/esm/{createPopper-a633eb88.js → createPopper-ed15cfea.js} +2 -2
  84. package/dist/esm/{createPopper-a633eb88.js.map → createPopper-ed15cfea.js.map} +1 -1
  85. package/dist/esm/{generated-answer-common-06146290.js → generated-answer-common-184a3c08.js} +147 -239
  86. package/dist/esm/generated-answer-common-184a3c08.js.map +1 -0
  87. package/dist/esm/index-3f35faca.js +4 -8
  88. package/dist/esm/{local-storage-utils-410269e6.js → local-storage-utils-a4bf8fba.js} +2 -2
  89. package/dist/esm/{local-storage-utils-410269e6.js.map → local-storage-utils-a4bf8fba.js.map} +1 -1
  90. package/dist/esm/{popper-lite-2035100c.js → popper-lite-4b6382b2.js} +2 -2
  91. package/dist/esm/{popper-lite-2035100c.js.map → popper-lite-4b6382b2.js.map} +1 -1
  92. package/dist/esm/version.js +2 -2
  93. package/dist/types/components/common/generated-answer/generated-answer-common.d.ts +30 -50
  94. package/dist/types/components/insight/atomic-insight-generated-answer/atomic-insight-generated-answer.d.ts +11 -3
  95. package/dist/types/components/search/atomic-generated-answer/atomic-generated-answer.d.ts +9 -1
  96. package/docs/atomic-docs.json +17 -3
  97. package/package.json +3 -3
  98. package/dist/atomic/p-0c076058.entry.js +0 -2
  99. package/dist/atomic/p-0c076058.entry.js.map +0 -1
  100. package/dist/atomic/p-421850f9.entry.js +0 -2
  101. package/dist/atomic/p-421850f9.entry.js.map +0 -1
  102. package/dist/atomic/p-579c5b46.entry.js +0 -2
  103. package/dist/atomic/p-579c5b46.entry.js.map +0 -1
  104. package/dist/atomic/p-5fca1435.js +0 -2
  105. package/dist/atomic/p-5fca1435.js.map +0 -1
  106. package/dist/atomic/p-bed5a86b.js +0 -2
  107. package/dist/atomic/p-e27e1e46.entry.js +0 -2
  108. package/dist/atomic/p-e27e1e46.entry.js.map +0 -1
  109. package/dist/cjs/analytics-config-f34a68ee.js.map +0 -1
  110. package/dist/cjs/atomic-citation.cjs.entry.js +0 -533
  111. package/dist/cjs/atomic-citation.cjs.entry.js.map +0 -1
  112. package/dist/cjs/atomic-generated-answer-feedback-modal.cjs.entry.js.map +0 -1
  113. package/dist/cjs/generated-answer-common-4cd4b7c6.js.map +0 -1
  114. package/dist/esm/analytics-config-672b6eba.js.map +0 -1
  115. package/dist/esm/atomic-citation.entry.js.map +0 -1
  116. package/dist/esm/atomic-generated-answer-feedback-modal.entry.js.map +0 -1
  117. package/dist/esm/generated-answer-common-06146290.js.map +0 -1
  118. /package/dist/atomic/{p-7b9026d7.js.map → p-07f25674.js.map} +0 -0
  119. /package/dist/atomic/{p-75b863ea.entry.js.map → p-0ff341d5.entry.js.map} +0 -0
  120. /package/dist/atomic/{p-eb026d69.entry.js.map → p-129799b2.entry.js.map} +0 -0
  121. /package/dist/atomic/{p-8b6aaeed.entry.js.map → p-333be187.entry.js.map} +0 -0
  122. /package/dist/atomic/{p-946fe85f.js.map → p-4aaffb59.js.map} +0 -0
  123. /package/dist/atomic/{p-48c8a766.entry.js.map → p-5730dec7.entry.js.map} +0 -0
  124. /package/dist/atomic/{p-9da1c516.entry.js.map → p-6481379f.entry.js.map} +0 -0
  125. /package/dist/atomic/{p-bfdecd0f.entry.js.map → p-6f5d26cb.entry.js.map} +0 -0
  126. /package/dist/atomic/{p-ca0a32dc.entry.js.map → p-dd93ae9a.entry.js.map} +0 -0
@@ -2,7 +2,6 @@
2
2
 
3
3
  const index = require('./index-757bc886.js');
4
4
  const localStorageUtils = require('./local-storage-utils-380ce22b.js');
5
- const slotUtils = require('./slot-utils-a30cb814.js');
6
5
  const stencilHeading = require('./stencil-heading-2faee1f7.js');
7
6
  const stencilButton = require('./stencil-button-f6c2410c.js');
8
7
  const purify = require('./purify-85b542e2.js');
@@ -2672,258 +2671,174 @@ const SourceCitations = (props, children) => props.isVisible ? (index.h("div", {
2672
2671
  index.h("p", { part: "citations-label", class: "text-neutral-dark mb-2 shrink-0" }, props.label),
2673
2672
  index.h("ol", { class: "citations-container flex list-none flex-wrap items-center gap-2" }, children))) : null;
2674
2673
 
2675
- class GeneratedAnswerCommon {
2676
- constructor(props) {
2677
- this.props = props;
2678
- this.storage = new localStorageUtils.SafeStorage();
2679
- this._data = this.readStoredData();
2680
- }
2681
- insertFeedbackModal() {
2682
- this.modalRef = document.createElement('atomic-generated-answer-feedback-modal');
2683
- this.modalRef.generatedAnswer = this.props.getGeneratedAnswer();
2684
- this.props.host.insertAdjacentElement('beforebegin', this.modalRef);
2685
- }
2686
- readStoredData() {
2687
- const { withToggle } = this.props;
2688
- const storedData = this.storage.getParsedJSON(localStorageUtils.StorageItems.GENERATED_ANSWER_DATA, { isVisible: true });
2689
- // This check ensures that the answer is visible when the toggle is hidden and visible is set to false in the local storage.
2690
- return { isVisible: (withToggle && storedData.isVisible) || !withToggle };
2691
- }
2692
- writeStoredData(data) {
2693
- this.storage.setJSON(localStorageUtils.StorageItems.GENERATED_ANSWER_DATA, data);
2694
- }
2695
- get data() {
2696
- return this._data;
2697
- }
2698
- set data(newData) {
2699
- this._data = newData;
2674
+ const readGeneratedAnswerStoredData = (withToggle) => {
2675
+ const storage = new localStorageUtils.SafeStorage();
2676
+ const storedData = storage.getParsedJSON(localStorageUtils.StorageItems.GENERATED_ANSWER_DATA, { isVisible: true });
2677
+ // This check ensures that the answer is visible when the toggle is hidden and visible is set to false in the local storage.
2678
+ return { isVisible: (withToggle && storedData.isVisible) || !withToggle };
2679
+ };
2680
+ const writeGeneratedAnswerStoredData = (data) => {
2681
+ const storage = new localStorageUtils.SafeStorage();
2682
+ storage.setJSON(localStorageUtils.StorageItems.GENERATED_ANSWER_DATA, data);
2683
+ };
2684
+ const insertGeneratedAnswerFeedbackModal = (host, generatedAnswer) => {
2685
+ const modalRef = document.createElement('atomic-generated-answer-feedback-modal');
2686
+ if (generatedAnswer) {
2687
+ modalRef.generatedAnswer = generatedAnswer();
2700
2688
  }
2701
- getGeneratedAnswerStatus() {
2702
- const isHidden = !this.props.getGeneratedAnswerState()?.isVisible;
2703
- const isGenerating = !!this.props.getGeneratedAnswerState()?.isStreaming;
2704
- const hasAnswer = !!this.props.getGeneratedAnswerState()?.answer;
2705
- const hasError = !!this.props.getGeneratedAnswerState()?.error;
2706
- if (isHidden) {
2707
- return this.props.getBindings().i18n.t('generated-answer-hidden');
2708
- }
2709
- if (isGenerating) {
2710
- return this.props.getBindings().i18n.t('generating-answer');
2711
- }
2712
- if (hasError) {
2713
- return this.props.getBindings().i18n.t('answer-could-not-be-generated');
2714
- }
2715
- if (hasAnswer) {
2716
- return this.props.getBindings().i18n.t('answer-generated', {
2717
- answer: this.props.getGeneratedAnswerState()?.answer,
2718
- });
2719
- }
2689
+ host.insertAdjacentElement('beforebegin', modalRef);
2690
+ return modalRef;
2691
+ };
2692
+ const getGeneratedAnswerStatus = (generatedAnswerState, i18n) => {
2693
+ if (!generatedAnswerState || !i18n) {
2720
2694
  return '';
2721
2695
  }
2722
- get hasRetryableError() {
2723
- return (!this.props.getSearchStatusState()?.hasError &&
2724
- this.props.getGeneratedAnswerState()?.error?.isRetryable);
2696
+ const isHidden = !generatedAnswerState.isVisible;
2697
+ const isGenerating = !!generatedAnswerState.isStreaming;
2698
+ const hasAnswer = !!generatedAnswerState.answer;
2699
+ const hasError = !!generatedAnswerState.error;
2700
+ if (isHidden) {
2701
+ return i18n.t('generated-answer-hidden');
2725
2702
  }
2726
- get hasNoAnswerGenerated() {
2727
- const { answer, citations } = this.props.getGeneratedAnswerState() ?? {};
2728
- return (answer === undefined && !citations?.length && !this.hasRetryableError);
2703
+ if (isGenerating) {
2704
+ return i18n.t('generating-answer');
2729
2705
  }
2730
- get isAnswerVisible() {
2731
- return this.props.getGeneratedAnswerState()?.isVisible;
2706
+ if (hasError) {
2707
+ return i18n.t('answer-could-not-be-generated');
2732
2708
  }
2733
- get toggleTooltip() {
2734
- const key = this.isAnswerVisible
2735
- ? 'generated-answer-toggle-on'
2736
- : 'generated-answer-toggle-off';
2737
- return this.props.getBindings().i18n.t(key);
2738
- }
2739
- get hasClipboard() {
2740
- return !!navigator?.clipboard?.writeText;
2709
+ if (hasAnswer) {
2710
+ return i18n.t('answer-generated', {
2711
+ answer: generatedAnswerState.answer,
2712
+ });
2741
2713
  }
2742
- get copyToClipboardTooltip() {
2743
- if (this.props.getCopyError()) {
2744
- return this.props.getBindings().i18n.t('failed-to-copy-generated-answer');
2745
- }
2746
- return !this.props.getCopied()
2747
- ? this.props.getBindings().i18n.t('copy-generated-answer')
2748
- : this.props.getBindings().i18n.t('generated-answer-copied');
2714
+ return '';
2715
+ };
2716
+ const copyToClipboard = async (answer, setCopied, setCopyError, onLogCopyToClipboard, logger) => {
2717
+ try {
2718
+ await navigator.clipboard.writeText(answer);
2719
+ setCopied(true);
2720
+ onLogCopyToClipboard?.();
2749
2721
  }
2750
- get hasCustomNoAnswerMessage() {
2751
- const slot = slotUtils.getNamedSlotFromHost(this.props.host, 'no-answer-message');
2752
- return !!slot;
2722
+ catch (error) {
2723
+ setCopyError(true);
2724
+ logger?.error(`Failed to copy to clipboard: ${error}`);
2753
2725
  }
2754
- async copyToClipboard(answer) {
2755
- try {
2756
- await navigator.clipboard.writeText(answer);
2757
- this.props.setCopied(true);
2758
- this.props.getGeneratedAnswer()?.logCopyToClipboard();
2759
- }
2760
- catch (error) {
2761
- this.props.setCopyError(true);
2762
- this.props
2763
- .getBindings()
2764
- .engine.logger.error(`Failed to copy to clipboard: ${error}`);
2765
- }
2766
- setTimeout(() => {
2767
- this.props.setCopied(false);
2768
- this.props.setCopyError(false);
2769
- }, 2000);
2726
+ setTimeout(() => {
2727
+ setCopied(false);
2728
+ setCopyError(false);
2729
+ }, 2000);
2730
+ };
2731
+ const GeneratedAnswerWrapper = ({ contentClasses }, children) => {
2732
+ const classes = contentClasses ||
2733
+ 'mx-auto mt-0 mb-4 border border-neutral shadow-lg p-6 bg-background rounded-lg p-6 text-on-background';
2734
+ return (index.h("div", null,
2735
+ index.h("aside", { class: classes, part: "container" },
2736
+ index.h("article", null, children))));
2737
+ };
2738
+ const GeneratedAnswerHeader = ({ i18n, isAnswerVisible, withToggle, onToggle }) => {
2739
+ const toggleTooltip = isAnswerVisible
2740
+ ? i18n.t('generated-answer-toggle-on')
2741
+ : i18n.t('generated-answer-toggle-off');
2742
+ return (index.h("div", { class: "flex items-center" },
2743
+ index.h(stencilHeading.Heading, { level: 0, part: "header-label", class: "text-primary bg-primary-background inline-block rounded-md px-2.5 py-2 font-medium" }, i18n.t('generated-answer-title')),
2744
+ index.h("div", { class: "ml-auto flex h-9 items-center" },
2745
+ index.h(Switch, { part: "toggle", checked: isAnswerVisible, onToggle: onToggle, ariaLabel: i18n.t('generated-answer-title'), title: toggleTooltip, withToggle: withToggle }))));
2746
+ };
2747
+ const GeneratedAnswerFeedbackAndCopyButtons = ({ copied, copyError, disliked, hasClipboard, i18n, isStreaming, liked, withToggle, onClickDislike, onClickLike, onCopyToClipboard, }) => {
2748
+ const containerClasses = [
2749
+ 'feedback-buttons',
2750
+ 'flex',
2751
+ 'h-9',
2752
+ 'absolute',
2753
+ 'top-6',
2754
+ 'shrink-0',
2755
+ 'gap-2',
2756
+ withToggle ? 'right-20' : 'right-6',
2757
+ ].join(' ');
2758
+ if (isStreaming) {
2759
+ return null;
2770
2760
  }
2771
- clickOnShowButton() {
2772
- if (this.props.getGeneratedAnswerState()?.expanded) {
2773
- this.props.getGeneratedAnswer()?.collapse();
2774
- }
2775
- else {
2776
- this.props.getGeneratedAnswer()?.expand();
2777
- }
2761
+ const copyToClipboardTooltip = copyError
2762
+ ? i18n.t('failed-to-copy-generated-answer')
2763
+ : !copied
2764
+ ? i18n.t('copy-generated-answer')
2765
+ : i18n.t('generated-answer-copied');
2766
+ return (index.h("div", { class: containerClasses },
2767
+ index.h(FeedbackButton, { title: i18n.t('this-answer-was-helpful'), variant: "like", active: !!liked, onClick: onClickLike }),
2768
+ index.h(FeedbackButton, { title: i18n.t('this-answer-was-not-helpful'), variant: "dislike", active: !!disliked, onClick: onClickDislike }),
2769
+ hasClipboard ? (index.h(CopyButton, { title: copyToClipboardTooltip, isCopied: copied, error: copyError, onClick: onCopyToClipboard })) : null));
2770
+ };
2771
+ const GeneratedAnswerCitations = ({ citations, disableCitationAnchoring, buildInteractiveCitation, onLogCitationHover, i18n, }) => {
2772
+ if (!citations?.length) {
2773
+ return [];
2778
2774
  }
2779
- getCitation(citation) {
2775
+ const getCitation = (citation) => {
2780
2776
  const { title } = citation;
2781
- const { i18n } = this.props.getBindings();
2782
2777
  return title.trim() !== ''
2783
2778
  ? citation
2784
- : { ...citation, title: i18n.t('no-title') };
2785
- }
2786
- renderCitations() {
2787
- const { getGeneratedAnswerState, buildInteractiveCitation, getGeneratedAnswer, disableCitationAnchoring, } = this.props;
2788
- const { citations } = getGeneratedAnswerState() ?? {};
2789
- const { logCitationHover } = getGeneratedAnswer() ?? {};
2790
- return citations?.map((citation, index$1) => {
2791
- const interactiveCitation = buildInteractiveCitation({
2792
- options: {
2793
- citation,
2794
- },
2795
- });
2796
- return (index.h("li", { key: citation.id, class: "max-w-full" },
2797
- index.h("atomic-citation", { citation: this.getCitation(citation), index: index$1, sendHoverEndEvent: (citationHoverTimeMs) => {
2798
- logCitationHover?.(citation.id, citationHoverTimeMs);
2799
- }, interactiveCitation: interactiveCitation, disableCitationAnchoring: disableCitationAnchoring, exportparts: "citation,citation-popover" })));
2800
- });
2801
- }
2802
- renderFeedbackAndCopyButtons() {
2803
- const { getGeneratedAnswerState, getBindings, getCopied, getCopyError } = this.props;
2804
- const { i18n } = getBindings();
2805
- const { liked, disliked, answer, isStreaming } = getGeneratedAnswerState() ?? {};
2806
- const containerClasses = [
2807
- 'feedback-buttons',
2808
- 'flex',
2809
- 'h-9',
2810
- 'absolute',
2811
- 'top-6',
2812
- 'shrink-0',
2813
- 'gap-2',
2814
- this.props.withToggle ? 'right-20' : 'right-6',
2815
- ].join(' ');
2816
- if (isStreaming) {
2817
- return null;
2818
- }
2819
- return (index.h("div", { class: containerClasses },
2820
- index.h(FeedbackButton, { title: i18n.t('this-answer-was-helpful'), variant: "like", active: !!liked, onClick: () => this.clickLike() }),
2821
- index.h(FeedbackButton, { title: i18n.t('this-answer-was-not-helpful'), variant: "dislike", active: !!disliked, onClick: () => this.clickDislike() }),
2822
- this.hasClipboard ? (index.h(CopyButton, { title: this.copyToClipboardTooltip, isCopied: getCopied(), error: getCopyError(), onClick: async () => {
2823
- if (answer) {
2824
- await this.copyToClipboard(answer);
2825
- }
2826
- } })) : null));
2827
- }
2828
- setIsAnswerHelpful(isAnswerHelpful) {
2829
- if (this.modalRef) {
2830
- this.modalRef.helpful = isAnswerHelpful;
2831
- }
2832
- }
2833
- openFeedbackModal() {
2834
- if (this.modalRef &&
2835
- !this.props.getGeneratedAnswerState()?.feedbackSubmitted) {
2836
- this.modalRef.isOpen = true;
2837
- }
2838
- }
2839
- clickDislike() {
2840
- this.setIsAnswerHelpful(false);
2841
- this.props.getGeneratedAnswer()?.dislike();
2842
- this.openFeedbackModal();
2843
- }
2844
- clickLike() {
2845
- this.setIsAnswerHelpful(true);
2846
- this.props.getGeneratedAnswer()?.like();
2847
- this.openFeedbackModal();
2848
- }
2849
- renderDisclaimer() {
2850
- const { getGeneratedAnswerState, getBindings } = this.props;
2851
- const { i18n } = getBindings();
2852
- const { isStreaming } = getGeneratedAnswerState() ?? {};
2853
- if (isStreaming) {
2854
- return null;
2855
- }
2856
- return (index.h("div", { class: "text-neutral-dark text-xs/[1rem]" },
2857
- index.h("slot", { name: "disclaimer", slot: "disclaimer" }, i18n.t('generated-answer-disclaimer'))));
2858
- }
2859
- renderShowButton() {
2860
- const { getGeneratedAnswerState, getBindings, collapsible } = this.props;
2861
- const { i18n } = getBindings();
2862
- const { expanded, isStreaming } = getGeneratedAnswerState() ?? {};
2863
- const canRender = collapsible && !isStreaming;
2864
- if (!canRender) {
2865
- return null;
2866
- }
2867
- return (index.h(ShowButton, { i18n: i18n, onClick: () => this.clickOnShowButton(), isCollapsed: !expanded }));
2779
+ : { ...citation, title: i18n?.t ? i18n.t('no-title') : 'No title' };
2780
+ };
2781
+ return citations.map((citation, index$1) => {
2782
+ const interactiveCitation = buildInteractiveCitation?.(citation);
2783
+ return (index.h("li", { key: citation.id, class: "max-w-full" },
2784
+ index.h("atomic-citation", { citation: getCitation(citation), index: index$1, sendHoverEndEvent: (citationHoverTimeMs) => {
2785
+ onLogCitationHover?.(citation.id, citationHoverTimeMs);
2786
+ }, interactiveCitation: interactiveCitation, disableCitationAnchoring: disableCitationAnchoring, exportparts: "citation,citation-popover" })));
2787
+ });
2788
+ };
2789
+ const GeneratedAnswerDisclaimer = ({ isStreaming, i18n }, children) => {
2790
+ if (isStreaming) {
2791
+ return null;
2868
2792
  }
2869
- renderGeneratingAnswerLabel() {
2870
- const { getGeneratedAnswerState, getBindings, collapsible } = this.props;
2871
- const { i18n } = getBindings();
2872
- const { isStreaming } = getGeneratedAnswerState() ?? {};
2873
- const canRender = collapsible && isStreaming;
2874
- if (!canRender) {
2875
- return null;
2876
- }
2877
- return (index.h("div", { part: "is-generating", class: "text-primary hidden text-base font-light" },
2793
+ return (index.h("div", { class: "text-neutral-dark text-xs/[1rem]" }, children || i18n.t('generated-answer-disclaimer')));
2794
+ };
2795
+ const GeneratedAnswerFooter = ({ collapsible, expanded, i18n, isStreaming, onShowButtonClick }, children) => {
2796
+ const showGeneratingLabel = collapsible && isStreaming;
2797
+ const showButton = collapsible && !isStreaming;
2798
+ return (index.h("div", { part: "generated-answer-footer", class: "mt-6 flex justify-end" },
2799
+ showGeneratingLabel && (index.h("div", { part: "is-generating", class: "text-primary hidden text-base font-light" },
2878
2800
  i18n.t('generating-answer'),
2879
- "..."));
2880
- }
2881
- renderContent() {
2882
- const { getGeneratedAnswerState, getBindings, getGeneratedAnswer } = this.props;
2883
- const { i18n } = getBindings();
2884
- const { isStreaming, answer, citations, answerContentFormat } = getGeneratedAnswerState() ?? {};
2885
- return (index.h("div", { part: "generated-content" },
2886
- index.h("div", { class: "flex items-center" },
2887
- index.h(stencilHeading.Heading, { level: 0, part: "header-label", class: "text-primary bg-primary-background inline-block rounded-md px-2.5 py-2 font-medium" }, i18n.t('generated-answer-title')),
2888
- index.h("div", { class: "ml-auto flex h-9 items-center" },
2889
- index.h(Switch, { part: "toggle", checked: this.isAnswerVisible, onToggle: (checked) => {
2890
- checked
2891
- ? getGeneratedAnswer()?.show()
2892
- : getGeneratedAnswer()?.hide();
2893
- }, ariaLabel: i18n.t('generated-answer-title'), title: this.toggleTooltip, withToggle: this.props.withToggle }))),
2894
- this.hasRetryableError && this.isAnswerVisible ? (index.h(RetryPrompt, { onClick: () => getGeneratedAnswer()?.retry(), buttonLabel: i18n.t('retry'), message: i18n.t('retry-stream-message') })) : null,
2895
- !this.hasRetryableError && this.isAnswerVisible ? (index.h(GeneratedContentContainer, { answer: answer, answerContentFormat: answerContentFormat, isStreaming: !!isStreaming },
2896
- this.renderFeedbackAndCopyButtons(),
2897
- index.h(SourceCitations, { label: i18n.t('citations'), isVisible: !!citations?.length }, this.renderCitations()))) : null,
2898
- !this.hasRetryableError && this.isAnswerVisible && (index.h("div", { part: "generated-answer-footer", class: "mt-6 flex justify-end" },
2899
- this.renderGeneratingAnswerLabel(),
2900
- this.renderShowButton(),
2901
- this.renderDisclaimer()))));
2902
- }
2903
- renderCustomNoAnswerMessage() {
2904
- const { getBindings } = this.props;
2905
- const { i18n } = getBindings();
2906
- return (index.h("div", { part: "generated-content" },
2907
- index.h("div", { class: "flex items-center" },
2908
- index.h(stencilHeading.Heading, { level: 0, part: "header-label", class: "text-primary bg-primary-background inline-block rounded-md px-2.5 py-2 font-medium" }, i18n.t('generated-answer-title'))),
2909
- index.h("div", { part: "generated-container", class: "mt-6 break-words" },
2910
- index.h("slot", { name: "no-answer-message" }))));
2911
- }
2912
- render() {
2913
- const { getGeneratedAnswerState } = this.props;
2914
- const { cannotAnswer } = getGeneratedAnswerState() ?? {};
2915
- const contentClasses = 'mx-auto mt-0 mb-4 border border-neutral shadow-lg p-6 bg-background rounded-lg p-6 text-on-background';
2916
- if (this.hasNoAnswerGenerated) {
2917
- return cannotAnswer && this.hasCustomNoAnswerMessage ? (index.h("div", null,
2918
- index.h("aside", { class: contentClasses, part: "container" },
2919
- index.h("article", null, this.renderCustomNoAnswerMessage())))) : null;
2920
- }
2921
- return (index.h("div", null,
2922
- index.h("aside", { class: contentClasses, part: "container" },
2923
- index.h("article", null, this.renderContent()))));
2924
- }
2925
- }
2801
+ "...")),
2802
+ showButton && onShowButtonClick && (index.h(ShowButton, { i18n: i18n, onClick: onShowButtonClick, isCollapsed: !expanded })),
2803
+ children));
2804
+ };
2805
+ const GeneratedAnswerRetryPrompt = ({ i18n, onRetry }) => {
2806
+ return (index.h(RetryPrompt, { onClick: onRetry, buttonLabel: i18n.t('retry'), message: i18n.t('retry-stream-message') }));
2807
+ };
2808
+ const GeneratedAnswerContent = ({ answer, answerContentFormat, citations, i18n, isStreaming, copied, copyError, generatedAnswerState, withToggle, onClickDislike, onClickLike, onCopyToClipboard, hasClipboard, disableCitationAnchoring, buildInteractiveCitationForCitation, generatedAnswer }) => {
2809
+ return (index.h(GeneratedContentContainer, { answer: answer, answerContentFormat: answerContentFormat, isStreaming: !!isStreaming },
2810
+ index.h(GeneratedAnswerFeedbackAndCopyButtons, { copied: copied, copyError: copyError, disliked: generatedAnswerState?.disliked, hasClipboard: hasClipboard, i18n: i18n, isStreaming: generatedAnswerState?.isStreaming, liked: generatedAnswerState?.liked, withToggle: withToggle, onClickDislike: onClickDislike, onClickLike: onClickLike, onCopyToClipboard: onCopyToClipboard }),
2811
+ index.h(SourceCitations, { label: i18n.t('citations'), isVisible: !!citations?.length },
2812
+ index.h(GeneratedAnswerCitations, { citations: generatedAnswerState.citations, disableCitationAnchoring: disableCitationAnchoring, buildInteractiveCitation: buildInteractiveCitationForCitation, onLogCitationHover: (citationId, citationHoverTimeMs) => {
2813
+ generatedAnswer?.logCitationHover?.(citationId, citationHoverTimeMs);
2814
+ }, i18n: i18n }))));
2815
+ };
2816
+ const GeneratedAnswerCommon = ({ onShowButtonClick, onClickDislike, onClickLike, onCopyToClipboard, collapsible, disableCitationAnchoring, copied, i18n, copyError, generatedAnswer, generatedAnswerState, withToggle, isAnswerVisible, hasRetryableError, hasClipboard, buildInteractiveCitationForCitation }) => {
2817
+ return index.h(GeneratedAnswerWrapper, null,
2818
+ index.h("div", { part: "generated-content" },
2819
+ index.h(GeneratedAnswerHeader, { i18n: i18n, isAnswerVisible: !!isAnswerVisible, withToggle: withToggle, onToggle: (checked) => {
2820
+ checked ? generatedAnswer?.show() : generatedAnswer?.hide();
2821
+ } }),
2822
+ hasRetryableError && isAnswerVisible ? (index.h(GeneratedAnswerRetryPrompt, { i18n: i18n, onRetry: () => generatedAnswer?.retry() })) : null,
2823
+ !hasRetryableError && isAnswerVisible ? (index.h(GeneratedAnswerContent, { answer: generatedAnswerState?.answer, answerContentFormat: generatedAnswerState?.answerContentFormat, citations: generatedAnswerState?.citations, i18n: i18n, isStreaming: generatedAnswerState?.isStreaming, copied: copied, copyError: copyError, generatedAnswerState: generatedAnswerState, withToggle: withToggle, onClickDislike: onClickDislike, onClickLike: onClickLike, onCopyToClipboard: onCopyToClipboard, hasClipboard: hasClipboard, disableCitationAnchoring: disableCitationAnchoring, buildInteractiveCitationForCitation: buildInteractiveCitationForCitation, generatedAnswer: generatedAnswer })) : null,
2824
+ !hasRetryableError && isAnswerVisible && (index.h(GeneratedAnswerFooter, { collapsible: collapsible, expanded: generatedAnswerState?.expanded, i18n: i18n, isStreaming: generatedAnswerState?.isStreaming, onShowButtonClick: onShowButtonClick },
2825
+ index.h(GeneratedAnswerDisclaimer, { isStreaming: generatedAnswerState?.isStreaming, i18n: i18n },
2826
+ index.h("slot", { name: "disclaimer", slot: "disclaimer" }, i18n.t('generated-answer-disclaimer')))))));
2827
+ };
2828
+ const GeneratedAnswerNoAnswerMessage = ({ i18n }, children) => {
2829
+ return (index.h("div", { part: "generated-content" },
2830
+ index.h("div", { class: "flex items-center" },
2831
+ index.h(stencilHeading.Heading, { level: 0, part: "header-label", class: "text-primary bg-primary-background inline-block rounded-md px-2.5 py-2 font-medium" }, i18n.t('generated-answer-title'))),
2832
+ index.h("div", { part: "generated-container", class: "mt-6 break-words" }, children)));
2833
+ };
2926
2834
 
2927
2835
  exports.GeneratedAnswerCommon = GeneratedAnswerCommon;
2836
+ exports.GeneratedAnswerNoAnswerMessage = GeneratedAnswerNoAnswerMessage;
2837
+ exports.GeneratedAnswerWrapper = GeneratedAnswerWrapper;
2838
+ exports.copyToClipboard = copyToClipboard;
2839
+ exports.getGeneratedAnswerStatus = getGeneratedAnswerStatus;
2840
+ exports.insertGeneratedAnswerFeedbackModal = insertGeneratedAnswerFeedbackModal;
2841
+ exports.readGeneratedAnswerStoredData = readGeneratedAnswerStoredData;
2842
+ exports.writeGeneratedAnswerStoredData = writeGeneratedAnswerStoredData;
2928
2843
 
2929
- //# sourceMappingURL=generated-answer-common-4cd4b7c6.js.map
2844
+ //# sourceMappingURL=generated-answer-common-469ad0e8.js.map