@envive-ai/react-toolkit-v3 0.3.10 → 0.3.11

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 (124) hide show
  1. package/dist/AnimatedText/AnimatedText.d.cts +3 -3
  2. package/dist/AnimatedText/AnimatedText.d.ts +3 -3
  3. package/dist/CSSVariablesEditor/CssVariablesEditorComponent.d.cts +2 -2
  4. package/dist/CSSVariablesEditor/CssVariablesEditorComponent.d.ts +2 -2
  5. package/dist/Carousel/Carousel.d.cts +2 -2
  6. package/dist/Carousel/Carousel.d.ts +2 -2
  7. package/dist/ChatFooter/ChatFooter.d.cts +2 -2
  8. package/dist/ChatFooter/ChatFooter.d.ts +2 -2
  9. package/dist/ChatFooter/components/index.d.cts +5 -5
  10. package/dist/ChatFooter/components/index.d.ts +5 -5
  11. package/dist/ChatHeader/ChatHeader.d.cts +2 -2
  12. package/dist/ChatHeader/ChatHeader.d.ts +2 -2
  13. package/dist/ChatPreview/ChatPreview.d.cts +2 -2
  14. package/dist/ChatPreview/ChatPreview.d.ts +2 -2
  15. package/dist/ChatPreviewComparison/ChatPreviewComparison.d.cts +2 -2
  16. package/dist/ChatPreviewComparison/ChatPreviewComparison.d.ts +2 -2
  17. package/dist/ChatPreviewLoading/ChatPreviewLoading.d.cts +2 -2
  18. package/dist/ChatPreviewLoading/ChatPreviewLoading.d.ts +2 -2
  19. package/dist/Container/Container.d.cts +175 -175
  20. package/dist/Container/Container.d.ts +4 -4
  21. package/dist/DesignTokens/DesignTokensComponent.d.cts +2 -2
  22. package/dist/DesignTokens/DesignTokensComponent.d.ts +2 -2
  23. package/dist/DocumentRetrievalCard/DocumentRetrievalCard.d.cts +2 -2
  24. package/dist/DocumentRetrievalCard/DocumentRetrievalCard.d.ts +2 -2
  25. package/dist/FloatingButton/FloatingButton.d.cts +2 -2
  26. package/dist/FloatingButton/FloatingButton.d.ts +2 -2
  27. package/dist/FloatingChat/FloatingChat.cjs +5 -3
  28. package/dist/FloatingChat/FloatingChat.d.cts +3 -2
  29. package/dist/FloatingChat/FloatingChat.d.ts +1 -0
  30. package/dist/FloatingChat/FloatingChat.js +5 -3
  31. package/dist/FloatingChat/components/Layout.cjs +5 -1
  32. package/dist/FloatingChat/components/Layout.js +5 -1
  33. package/dist/FloatingChat/components/SalesAgentProductCardsCarousel.cjs +1 -0
  34. package/dist/FloatingChat/components/SalesAgentProductCardsCarousel.js +1 -0
  35. package/dist/FloatingChat/types/types.d.cts +4 -0
  36. package/dist/FloatingChat/types/types.d.ts +4 -0
  37. package/dist/FullPageSalesAgent/FullPageSalesAgent.cjs +131 -0
  38. package/dist/FullPageSalesAgent/FullPageSalesAgent.d.cts +24 -0
  39. package/dist/FullPageSalesAgent/FullPageSalesAgent.d.ts +24 -0
  40. package/dist/FullPageSalesAgent/FullPageSalesAgent.js +130 -0
  41. package/dist/FullPageSalesAgent/components/Layout.cjs +53 -0
  42. package/dist/FullPageSalesAgent/components/Layout.js +51 -0
  43. package/dist/FullPageSalesAgent/components/index.cjs +7 -0
  44. package/dist/FullPageSalesAgent/components/index.js +7 -0
  45. package/dist/FullPageSalesAgent/hooks/useContainerResizerObserver.cjs +23 -0
  46. package/dist/FullPageSalesAgent/hooks/useContainerResizerObserver.js +22 -0
  47. package/dist/FullPageSalesAgent/hooks/useGetContainerStyles.cjs +16 -0
  48. package/dist/FullPageSalesAgent/hooks/useGetContainerStyles.js +16 -0
  49. package/dist/FullPageSalesAgent/hooks/useGetFooterStyles.cjs +16 -0
  50. package/dist/FullPageSalesAgent/hooks/useGetFooterStyles.js +16 -0
  51. package/dist/FullPageSalesAgent/hooks/useGetScrollContentStyles.cjs +19 -0
  52. package/dist/FullPageSalesAgent/hooks/useGetScrollContentStyles.js +17 -0
  53. package/dist/FullPageSalesAgent/hooks/useIsMobile.cjs +7 -0
  54. package/dist/FullPageSalesAgent/hooks/useIsMobile.js +7 -0
  55. package/dist/FullPageSalesAgent/index.cjs +3 -0
  56. package/dist/FullPageSalesAgent/index.d.cts +2 -0
  57. package/dist/FullPageSalesAgent/index.d.ts +2 -0
  58. package/dist/FullPageSalesAgent/index.js +3 -0
  59. package/dist/Image/Image.d.cts +2 -2
  60. package/dist/Image/Image.d.ts +2 -2
  61. package/dist/ImageGallery/ImageGallery.d.cts +2 -2
  62. package/dist/ImageGallery/ImageGallery.d.ts +2 -2
  63. package/dist/MarkdownProcessor/MarkdownProcessor.d.cts +2 -2
  64. package/dist/MarkdownProcessor/MarkdownProcessor.d.ts +2 -2
  65. package/dist/Message/hooks/useVariantStyleProperties.cjs +1 -1
  66. package/dist/Message/hooks/useVariantStyleProperties.js +1 -1
  67. package/dist/ProductCard/ProductCard.d.cts +2 -2
  68. package/dist/ProductCard/ProductCard.d.ts +2 -2
  69. package/dist/PromptButton/PromptButton.d.cts +2 -2
  70. package/dist/PromptButton/PromptButton.d.ts +2 -2
  71. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.cts +2 -2
  72. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.ts +2 -2
  73. package/dist/PromptCarousel/PromptCarousel.d.cts +2 -2
  74. package/dist/PromptCarousel/PromptCarousel.d.ts +2 -2
  75. package/dist/ReviewCard/ReviewCard.d.cts +2 -2
  76. package/dist/ReviewCard/ReviewCard.d.ts +2 -2
  77. package/dist/ReviewCard/components/index.d.cts +6 -6
  78. package/dist/ReviewCard/components/index.d.ts +4 -4
  79. package/dist/SalesAgentProductCard/SalesAgentProductCard.cjs +2 -1
  80. package/dist/SalesAgentProductCard/SalesAgentProductCard.d.cts +3 -2
  81. package/dist/SalesAgentProductCard/SalesAgentProductCard.d.ts +3 -2
  82. package/dist/SalesAgentProductCard/SalesAgentProductCard.js +2 -1
  83. package/dist/SalesAgentProductCard/components/Container.cjs +7 -5
  84. package/dist/SalesAgentProductCard/components/Container.d.cts +2 -1
  85. package/dist/SalesAgentProductCard/components/Container.d.ts +2 -1
  86. package/dist/SalesAgentProductCard/components/Container.js +7 -5
  87. package/dist/SalesAgentProductCard/components/index.d.cts +9 -8
  88. package/dist/SalesAgentProductCard/components/index.d.ts +9 -8
  89. package/dist/SalesAgentProductCard/types/types.d.cts +4 -0
  90. package/dist/SalesAgentProductCard/types/types.d.ts +4 -0
  91. package/dist/SocialProof/SocialProof.d.cts +2 -2
  92. package/dist/SocialProof/SocialProof.d.ts +2 -2
  93. package/dist/Stack/Stack.d.ts +2 -2
  94. package/dist/TitledPromptCarousel/TitledPromptCarousel.d.cts +2 -2
  95. package/dist/TitledPromptCarousel/TitledPromptCarousel.d.ts +2 -2
  96. package/dist/TypingAnimation/TypingAnimation.d.cts +2 -2
  97. package/dist/TypingAnimation/TypingAnimation.d.ts +2 -2
  98. package/dist/Typography/Typography.d.cts +4 -4
  99. package/dist/Typography/Typography.d.ts +4 -4
  100. package/dist/WidgetTextField/WidgetTextField.d.cts +2 -2
  101. package/dist/WidgetTextField/WidgetTextField.d.ts +2 -2
  102. package/dist/WidgetWrapper/WidgetWrapper.d.cts +2 -2
  103. package/dist/WidgetWrapper/WidgetWrapper.d.ts +2 -2
  104. package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.cts +2 -2
  105. package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.ts +2 -2
  106. package/dist/styles.css +1 -1
  107. package/package.json +5 -1
  108. package/src/components/FloatingChat/FloatingChat.tsx +7 -1
  109. package/src/components/FloatingChat/components/Layout.tsx +3 -0
  110. package/src/components/FloatingChat/components/SalesAgentProductCardsCarousel.tsx +4 -3
  111. package/src/components/FloatingChat/types/types.ts +4 -0
  112. package/src/components/FullPageSalesAgent/FullPageSalesAgent.tsx +199 -0
  113. package/src/components/FullPageSalesAgent/components/Layout.tsx +81 -0
  114. package/src/components/FullPageSalesAgent/components/index.ts +5 -0
  115. package/src/components/FullPageSalesAgent/hooks/useContainerResizerObserver.ts +33 -0
  116. package/src/components/FullPageSalesAgent/hooks/useGetContainerStyles.ts +24 -0
  117. package/src/components/FullPageSalesAgent/hooks/useGetFooterStyles.ts +17 -0
  118. package/src/components/FullPageSalesAgent/hooks/useGetScrollContentStyles.ts +17 -0
  119. package/src/components/FullPageSalesAgent/hooks/useIsMobile.ts +3 -0
  120. package/src/components/FullPageSalesAgent/index.ts +1 -0
  121. package/src/components/Message/hooks/useVariantStyleProperties.ts +1 -1
  122. package/src/components/SalesAgentProductCard/SalesAgentProductCard.tsx +2 -0
  123. package/src/components/SalesAgentProductCard/components/Container.tsx +16 -9
  124. package/src/components/SalesAgentProductCard/types/types.ts +4 -0
@@ -11,7 +11,7 @@ let classnames = require("classnames");
11
11
  classnames = require_rolldown_runtime.__toESM(classnames);
12
12
 
13
13
  //#region src/components/FloatingChat/components/Layout.tsx
14
- const Layout = ({ id, className, style, testId, theme = require_theme.Theme.GLOBAL_CUSTOM, header, footer, welcomeMessage, chatMessages, answerSuggestions, scrollToBottomButton, disclaimer, isFloatingFooterLayout = false }) => {
14
+ const Layout = ({ id, className, style, testId, theme = require_theme.Theme.GLOBAL_CUSTOM, header, footer, welcomeMessage, chatMessages, answerSuggestions, scrollToBottomButton, disclaimer, isFloatingFooterLayout = false, debugBar }) => {
15
15
  const finalTheme = require_resolveTheme.resolveTheme(theme);
16
16
  const hasWelcomeMessage = (0, react.isValidElement)(welcomeMessage);
17
17
  const hasAnswerSuggestions = (0, react.isValidElement)(answerSuggestions);
@@ -53,6 +53,10 @@ const Layout = ({ id, className, style, testId, theme = require_theme.Theme.GLOB
53
53
  scrollToBottomButton && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
54
54
  className: (0, classnames.default)("envive-tw-absolute envive-tw-right-4 envive-tw-z-10 envive-tw-transition-all envive-tw-duration-300 envive-tw-ease-in-out", isFloatingFooterLayout ? "envive-tw-bottom-[80px]" : "envive-tw-bottom-[170px]"),
55
55
  children: scrollToBottomButton
56
+ }),
57
+ debugBar && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
58
+ className: "envive-debug-bar",
59
+ children: debugBar
56
60
  })
57
61
  ]
58
62
  })
@@ -9,7 +9,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import classNames from "classnames";
10
10
 
11
11
  //#region src/components/FloatingChat/components/Layout.tsx
12
- const Layout = ({ id, className, style, testId, theme = Theme.GLOBAL_CUSTOM, header, footer, welcomeMessage, chatMessages, answerSuggestions, scrollToBottomButton, disclaimer, isFloatingFooterLayout = false }) => {
12
+ const Layout = ({ id, className, style, testId, theme = Theme.GLOBAL_CUSTOM, header, footer, welcomeMessage, chatMessages, answerSuggestions, scrollToBottomButton, disclaimer, isFloatingFooterLayout = false, debugBar }) => {
13
13
  const finalTheme = resolveTheme(theme);
14
14
  const hasWelcomeMessage = isValidElement(welcomeMessage);
15
15
  const hasAnswerSuggestions = isValidElement(answerSuggestions);
@@ -51,6 +51,10 @@ const Layout = ({ id, className, style, testId, theme = Theme.GLOBAL_CUSTOM, hea
51
51
  scrollToBottomButton && /* @__PURE__ */ jsx("div", {
52
52
  className: classNames("envive-tw-absolute envive-tw-right-4 envive-tw-z-10 envive-tw-transition-all envive-tw-duration-300 envive-tw-ease-in-out", isFloatingFooterLayout ? "envive-tw-bottom-[80px]" : "envive-tw-bottom-[170px]"),
53
53
  children: scrollToBottomButton
54
+ }),
55
+ debugBar && /* @__PURE__ */ jsx("div", {
56
+ className: "envive-debug-bar",
57
+ children: debugBar
54
58
  })
55
59
  ]
56
60
  })
@@ -24,6 +24,7 @@ const SalesAgentProductCardsCarousel = ({ products, theme, hideNavigation = fals
24
24
  numberOfReviews: product.numberOfReviews,
25
25
  image: product.image,
26
26
  url: product.url,
27
+ target: "_blank",
27
28
  theme: finalTheme
28
29
  }, product.id)),
29
30
  theme: finalTheme
@@ -23,6 +23,7 @@ const SalesAgentProductCardsCarousel = ({ products, theme, hideNavigation = fals
23
23
  numberOfReviews: product.numberOfReviews,
24
24
  image: product.image,
25
25
  url: product.url,
26
+ target: "_blank",
26
27
  theme: finalTheme
27
28
  }, product.id)),
28
29
  theme: finalTheme
@@ -63,6 +63,10 @@ interface FloatingChatProps {
63
63
  * Hardcopy content to display in the chat.
64
64
  */
65
65
  hardcopyContent: HardcopyResponse;
66
+ /**
67
+ * Debug bar to display in the chat.
68
+ */
69
+ debugBar?: React.ReactNode;
66
70
  }
67
71
  //#endregion
68
72
  export { FloatingChatProps };
@@ -63,6 +63,10 @@ interface FloatingChatProps {
63
63
  * Hardcopy content to display in the chat.
64
64
  */
65
65
  hardcopyContent: HardcopyResponse;
66
+ /**
67
+ * Debug bar to display in the chat.
68
+ */
69
+ debugBar?: React.ReactNode;
66
70
  }
67
71
  //#endregion
68
72
  export { FloatingChatProps };
@@ -0,0 +1,131 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_theme = require('../packages/components-v3/tokens/theme/theme.cjs');
3
+ const require_resolveTheme = require('../utils/resolveTheme.cjs');
4
+ require('../Tokens/index.cjs');
5
+ const require_PromptButton_types_index = require('../PromptButton/types/index.cjs');
6
+ require('../PromptButton/index.cjs');
7
+ const require_PromptCarousel_types_types = require('../PromptCarousel/types/types.cjs');
8
+ const require_PromptCarousel = require('../PromptCarousel/PromptCarousel.cjs');
9
+ require('../PromptCarousel/index.cjs');
10
+ const require_ChatFooter = require('../ChatFooter/ChatFooter.cjs');
11
+ require('../ChatFooter/index.cjs');
12
+ const require_Disclaimer = require('../Disclaimer/Disclaimer.cjs');
13
+ require('../Disclaimer/index.cjs');
14
+ const require_index = require('../FloatingChat/components/index.cjs');
15
+ const require_useScrollToBottom = require('../FloatingChat/hooks/useScrollToBottom.cjs');
16
+ const require_useChatSuggestions = require('../FloatingChat/hooks/useChatSuggestions.cjs');
17
+ const require_WelcomeMessage = require('../WelcomeMessage/WelcomeMessage.cjs');
18
+ require('../WelcomeMessage/index.cjs');
19
+ const require_useIsMobile = require('./hooks/useIsMobile.cjs');
20
+ const require_useGetFooterStyles = require('./hooks/useGetFooterStyles.cjs');
21
+ const require_index$1 = require('./components/index.cjs');
22
+ let react = require("react");
23
+ let react_jsx_runtime = require("react/jsx-runtime");
24
+ let __envive_ai_react_hooks_application_models = require("@envive-ai/react-hooks/application/models");
25
+ let __envive_ai_react_hooks_contexts_salesAgentContext = require("@envive-ai/react-hooks/contexts/salesAgentContext");
26
+
27
+ //#region src/components/FullPageSalesAgent/FullPageSalesAgent.tsx
28
+ const FullPageSalesAgent = ({ theme = require_theme.Theme.GLOBAL_CUSTOM, floatingChatConfig, lookAndFeelConfig, hardcopyContent, headerContainer, autoHeight }) => {
29
+ const resolvedTheme = require_resolveTheme.resolveTheme(theme);
30
+ const salesAgentData = (0, __envive_ai_react_hooks_contexts_salesAgentContext.useSalesAgent)();
31
+ const [query, setQuery] = (0, react.useState)("");
32
+ const chatMessagesRef = (0, react.useRef)(null);
33
+ const { footerStyles } = require_useGetFooterStyles.useGetFooterStyles();
34
+ const { isMobile } = require_useIsMobile.useIsMobile();
35
+ const { welcomeMessageIconColor, ignoreFirstModelResponse, neverShowSingleProductCards, showVerifiedBuyer, showEnviveLogo, userQueryInputEnabled = true } = floatingChatConfig;
36
+ const { agentName } = lookAndFeelConfig;
37
+ const { welcomeMessageTitle, welcomeMessageText, chatFooterTextFieldPlaceholderText, disclaimerText } = hardcopyContent?.values ?? {};
38
+ const { messages, isResponseStreaming, isPendingResponse, suggestions, onSuggestionClicked, onTypedMessageSubmitted, onFormResponseSubmitted } = salesAgentData;
39
+ const { answerSuggestions, generalSuggestions, showAnswerSuggestions, setAnswerSuggestions, setGeneralSuggestions } = require_useChatSuggestions.useChatSuggestions({
40
+ suggestions,
41
+ isPendingResponse,
42
+ isResponseStreaming
43
+ });
44
+ const { showScrollButton, scrollToBottom, isFloatingLayout } = require_useScrollToBottom.useScrollToBottom({
45
+ messagesRef: chatMessagesRef,
46
+ scrollThreshold: 100,
47
+ footerHeight: 160,
48
+ autoScrollDependencies: [
49
+ messages,
50
+ isPendingResponse,
51
+ suggestions,
52
+ answerSuggestions,
53
+ generalSuggestions
54
+ ]
55
+ });
56
+ const welcomeMessage = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_WelcomeMessage.WelcomeMessage, {
57
+ sparkleIconColor: welcomeMessageIconColor,
58
+ title: welcomeMessageTitle,
59
+ text: welcomeMessageText,
60
+ theme: resolvedTheme
61
+ });
62
+ const footer = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ChatFooter.ChatFooter, {
63
+ className: "envive-tw-bg-background-light",
64
+ style: footerStyles,
65
+ theme: resolvedTheme,
66
+ isScrolled: isMobile ? isFloatingLayout : false,
67
+ disabled: isPendingResponse || isResponseStreaming,
68
+ disabledInput: !userQueryInputEnabled,
69
+ isLoadingPromptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0,
70
+ hideEnviveWatermark: !showEnviveLogo,
71
+ textFieldPlaceholderText: chatFooterTextFieldPlaceholderText,
72
+ promptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0 ? ["Loading suggestions 1...", "Loading suggestions 2..."] : generalSuggestions,
73
+ handleButtonClick: (buttonText) => {
74
+ const suggestion = suggestions.find((s) => s.content === buttonText && !s.isAnswer);
75
+ if (suggestion) onSuggestionClicked(suggestion, __envive_ai_react_hooks_application_models.ChatElementDisplayLocationV3.FLOATING_CHAT_PROMPT_BUTTON);
76
+ setAnswerSuggestions([]);
77
+ setGeneralSuggestions([]);
78
+ },
79
+ onChange: setQuery,
80
+ onSubmit: () => {
81
+ onTypedMessageSubmitted({
82
+ query,
83
+ userTyped: true
84
+ });
85
+ setAnswerSuggestions([]);
86
+ setGeneralSuggestions([]);
87
+ }
88
+ });
89
+ const chatMessages = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.FloatingChatComponents.ChatMessages, {
90
+ theme: resolvedTheme,
91
+ ref: chatMessagesRef,
92
+ isLoading: isPendingResponse && !isResponseStreaming,
93
+ agentName,
94
+ messages,
95
+ hasFilteredMessages: false,
96
+ handlePreviousDiscussions: () => {},
97
+ isResponseStreaming,
98
+ ignoreFirstModelResponse,
99
+ neverShowSingleProductCards,
100
+ showVerifiedBuyer,
101
+ onFormResponseSubmitted
102
+ });
103
+ const answerSuggestionsComponent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PromptCarousel.PromptCarousel, {
104
+ className: "envive-tw-flex envive-tw-justify-end envive-tw-p-4 [&>div>div]:envive-tw-items-end",
105
+ theme: resolvedTheme,
106
+ promptButtonType: require_PromptButton_types_index.PromptButtonVariant.SUGGESTED_RESPONSE,
107
+ promptCarouselRows: require_PromptCarousel_types_types.PromptCarouselRows.ALWAYS_TWO,
108
+ promptButtonTexts: answerSuggestions,
109
+ handleButtonClick: (buttonText) => {
110
+ const suggestion = suggestions.find((s) => s.content === buttonText && s.isAnswer);
111
+ if (suggestion) onSuggestionClicked(suggestion, __envive_ai_react_hooks_application_models.ChatElementDisplayLocationV3.FLOATING_CHAT_PROMPT_BUTTON);
112
+ setAnswerSuggestions([]);
113
+ setGeneralSuggestions([]);
114
+ }
115
+ });
116
+ const disclaimer = disclaimerText && typeof disclaimerText === "string" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Disclaimer.Disclaimer, { disclaimerMarkdown: disclaimerText }) : void 0;
117
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.FullPageSAComponents.Layout, {
118
+ theme: resolvedTheme,
119
+ welcomeMessage,
120
+ footer,
121
+ chatMessages,
122
+ answerSuggestions: showAnswerSuggestions ? answerSuggestionsComponent : void 0,
123
+ scrollToBottomButton: showScrollButton ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.FloatingChatComponents.ScrollToBottomButton, { onClick: scrollToBottom }) : void 0,
124
+ disclaimer,
125
+ headerContainer,
126
+ autoHeight
127
+ });
128
+ };
129
+
130
+ //#endregion
131
+ exports.FullPageSalesAgent = FullPageSalesAgent;
@@ -0,0 +1,24 @@
1
+ import { Theme } from "../tokens/theme/theme.cjs";
2
+ import * as react_jsx_runtime26 from "react/jsx-runtime";
3
+ import { FloatingChatConfig, LookAndFeelConfig } from "@envive-ai/react-hooks/contexts/typesV3";
4
+ import { HardcopyResponse } from "@envive-ai/react-hooks/contexts/hardcopyContext";
5
+
6
+ //#region src/components/FullPageSalesAgent/FullPageSalesAgent.d.ts
7
+ interface FullPageSalesAgentProps {
8
+ theme?: Theme;
9
+ floatingChatConfig: FloatingChatConfig;
10
+ lookAndFeelConfig: LookAndFeelConfig;
11
+ hardcopyContent: HardcopyResponse;
12
+ headerContainer?: string;
13
+ autoHeight?: boolean;
14
+ }
15
+ declare const FullPageSalesAgent: ({
16
+ theme,
17
+ floatingChatConfig,
18
+ lookAndFeelConfig,
19
+ hardcopyContent,
20
+ headerContainer,
21
+ autoHeight
22
+ }: FullPageSalesAgentProps) => react_jsx_runtime26.JSX.Element;
23
+ //#endregion
24
+ export { FullPageSalesAgent };
@@ -0,0 +1,24 @@
1
+ import { Theme } from "../packages/components-v3/tokens/theme/theme.js";
2
+ import * as react_jsx_runtime20 from "react/jsx-runtime";
3
+ import { FloatingChatConfig, LookAndFeelConfig } from "@envive-ai/react-hooks/contexts/typesV3";
4
+ import { HardcopyResponse } from "@envive-ai/react-hooks/contexts/hardcopyContext";
5
+
6
+ //#region src/components/FullPageSalesAgent/FullPageSalesAgent.d.ts
7
+ interface FullPageSalesAgentProps {
8
+ theme?: Theme;
9
+ floatingChatConfig: FloatingChatConfig;
10
+ lookAndFeelConfig: LookAndFeelConfig;
11
+ hardcopyContent: HardcopyResponse;
12
+ headerContainer?: string;
13
+ autoHeight?: boolean;
14
+ }
15
+ declare const FullPageSalesAgent: ({
16
+ theme,
17
+ floatingChatConfig,
18
+ lookAndFeelConfig,
19
+ hardcopyContent,
20
+ headerContainer,
21
+ autoHeight
22
+ }: FullPageSalesAgentProps) => react_jsx_runtime20.JSX.Element;
23
+ //#endregion
24
+ export { FullPageSalesAgent };
@@ -0,0 +1,130 @@
1
+ import { Theme } from "../packages/components-v3/tokens/theme/theme.js";
2
+ import { resolveTheme } from "../utils/resolveTheme.js";
3
+ import "../Tokens/index.js";
4
+ import { PromptButtonVariant } from "../PromptButton/types/index.js";
5
+ import "../PromptButton/index.js";
6
+ import { PromptCarouselRows } from "../PromptCarousel/types/types.js";
7
+ import { PromptCarousel } from "../PromptCarousel/PromptCarousel.js";
8
+ import "../PromptCarousel/index.js";
9
+ import { ChatFooter } from "../ChatFooter/ChatFooter.js";
10
+ import "../ChatFooter/index.js";
11
+ import { Disclaimer } from "../Disclaimer/Disclaimer.js";
12
+ import "../Disclaimer/index.js";
13
+ import { FloatingChatComponents } from "../FloatingChat/components/index.js";
14
+ import { useScrollToBottom } from "../FloatingChat/hooks/useScrollToBottom.js";
15
+ import { useChatSuggestions } from "../FloatingChat/hooks/useChatSuggestions.js";
16
+ import { WelcomeMessage } from "../WelcomeMessage/WelcomeMessage.js";
17
+ import "../WelcomeMessage/index.js";
18
+ import { useIsMobile } from "./hooks/useIsMobile.js";
19
+ import { useGetFooterStyles } from "./hooks/useGetFooterStyles.js";
20
+ import { FullPageSAComponents } from "./components/index.js";
21
+ import { useRef, useState } from "react";
22
+ import { jsx } from "react/jsx-runtime";
23
+ import { ChatElementDisplayLocationV3 } from "@envive-ai/react-hooks/application/models";
24
+ import { useSalesAgent } from "@envive-ai/react-hooks/contexts/salesAgentContext";
25
+
26
+ //#region src/components/FullPageSalesAgent/FullPageSalesAgent.tsx
27
+ const FullPageSalesAgent = ({ theme = Theme.GLOBAL_CUSTOM, floatingChatConfig, lookAndFeelConfig, hardcopyContent, headerContainer, autoHeight }) => {
28
+ const resolvedTheme = resolveTheme(theme);
29
+ const salesAgentData = useSalesAgent();
30
+ const [query, setQuery] = useState("");
31
+ const chatMessagesRef = useRef(null);
32
+ const { footerStyles } = useGetFooterStyles();
33
+ const { isMobile } = useIsMobile();
34
+ const { welcomeMessageIconColor, ignoreFirstModelResponse, neverShowSingleProductCards, showVerifiedBuyer, showEnviveLogo, userQueryInputEnabled = true } = floatingChatConfig;
35
+ const { agentName } = lookAndFeelConfig;
36
+ const { welcomeMessageTitle, welcomeMessageText, chatFooterTextFieldPlaceholderText, disclaimerText } = hardcopyContent?.values ?? {};
37
+ const { messages, isResponseStreaming, isPendingResponse, suggestions, onSuggestionClicked, onTypedMessageSubmitted, onFormResponseSubmitted } = salesAgentData;
38
+ const { answerSuggestions, generalSuggestions, showAnswerSuggestions, setAnswerSuggestions, setGeneralSuggestions } = useChatSuggestions({
39
+ suggestions,
40
+ isPendingResponse,
41
+ isResponseStreaming
42
+ });
43
+ const { showScrollButton, scrollToBottom, isFloatingLayout } = useScrollToBottom({
44
+ messagesRef: chatMessagesRef,
45
+ scrollThreshold: 100,
46
+ footerHeight: 160,
47
+ autoScrollDependencies: [
48
+ messages,
49
+ isPendingResponse,
50
+ suggestions,
51
+ answerSuggestions,
52
+ generalSuggestions
53
+ ]
54
+ });
55
+ const welcomeMessage = /* @__PURE__ */ jsx(WelcomeMessage, {
56
+ sparkleIconColor: welcomeMessageIconColor,
57
+ title: welcomeMessageTitle,
58
+ text: welcomeMessageText,
59
+ theme: resolvedTheme
60
+ });
61
+ const footer = /* @__PURE__ */ jsx(ChatFooter, {
62
+ className: "envive-tw-bg-background-light",
63
+ style: footerStyles,
64
+ theme: resolvedTheme,
65
+ isScrolled: isMobile ? isFloatingLayout : false,
66
+ disabled: isPendingResponse || isResponseStreaming,
67
+ disabledInput: !userQueryInputEnabled,
68
+ isLoadingPromptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0,
69
+ hideEnviveWatermark: !showEnviveLogo,
70
+ textFieldPlaceholderText: chatFooterTextFieldPlaceholderText,
71
+ promptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0 ? ["Loading suggestions 1...", "Loading suggestions 2..."] : generalSuggestions,
72
+ handleButtonClick: (buttonText) => {
73
+ const suggestion = suggestions.find((s) => s.content === buttonText && !s.isAnswer);
74
+ if (suggestion) onSuggestionClicked(suggestion, ChatElementDisplayLocationV3.FLOATING_CHAT_PROMPT_BUTTON);
75
+ setAnswerSuggestions([]);
76
+ setGeneralSuggestions([]);
77
+ },
78
+ onChange: setQuery,
79
+ onSubmit: () => {
80
+ onTypedMessageSubmitted({
81
+ query,
82
+ userTyped: true
83
+ });
84
+ setAnswerSuggestions([]);
85
+ setGeneralSuggestions([]);
86
+ }
87
+ });
88
+ const chatMessages = /* @__PURE__ */ jsx(FloatingChatComponents.ChatMessages, {
89
+ theme: resolvedTheme,
90
+ ref: chatMessagesRef,
91
+ isLoading: isPendingResponse && !isResponseStreaming,
92
+ agentName,
93
+ messages,
94
+ hasFilteredMessages: false,
95
+ handlePreviousDiscussions: () => {},
96
+ isResponseStreaming,
97
+ ignoreFirstModelResponse,
98
+ neverShowSingleProductCards,
99
+ showVerifiedBuyer,
100
+ onFormResponseSubmitted
101
+ });
102
+ const answerSuggestionsComponent = /* @__PURE__ */ jsx(PromptCarousel, {
103
+ className: "envive-tw-flex envive-tw-justify-end envive-tw-p-4 [&>div>div]:envive-tw-items-end",
104
+ theme: resolvedTheme,
105
+ promptButtonType: PromptButtonVariant.SUGGESTED_RESPONSE,
106
+ promptCarouselRows: PromptCarouselRows.ALWAYS_TWO,
107
+ promptButtonTexts: answerSuggestions,
108
+ handleButtonClick: (buttonText) => {
109
+ const suggestion = suggestions.find((s) => s.content === buttonText && s.isAnswer);
110
+ if (suggestion) onSuggestionClicked(suggestion, ChatElementDisplayLocationV3.FLOATING_CHAT_PROMPT_BUTTON);
111
+ setAnswerSuggestions([]);
112
+ setGeneralSuggestions([]);
113
+ }
114
+ });
115
+ const disclaimer = disclaimerText && typeof disclaimerText === "string" ? /* @__PURE__ */ jsx(Disclaimer, { disclaimerMarkdown: disclaimerText }) : void 0;
116
+ return /* @__PURE__ */ jsx(FullPageSAComponents.Layout, {
117
+ theme: resolvedTheme,
118
+ welcomeMessage,
119
+ footer,
120
+ chatMessages,
121
+ answerSuggestions: showAnswerSuggestions ? answerSuggestionsComponent : void 0,
122
+ scrollToBottomButton: showScrollButton ? /* @__PURE__ */ jsx(FloatingChatComponents.ScrollToBottomButton, { onClick: scrollToBottom }) : void 0,
123
+ disclaimer,
124
+ headerContainer,
125
+ autoHeight
126
+ });
127
+ };
128
+
129
+ //#endregion
130
+ export { FullPageSalesAgent };
@@ -0,0 +1,53 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_theme = require('../../packages/components-v3/tokens/theme/theme.cjs');
3
+ const require_Stack = require('../../Stack/Stack.cjs');
4
+ require('../../Stack/index.cjs');
5
+ const require_useGetContainerStyles = require('../hooks/useGetContainerStyles.cjs');
6
+ const require_useGetFooterStyles = require('../hooks/useGetFooterStyles.cjs');
7
+ const require_useGetScrollContentStyles = require('../hooks/useGetScrollContentStyles.cjs');
8
+ let react = require("react");
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
+ let classnames = require("classnames");
11
+ classnames = require_rolldown_runtime.__toESM(classnames);
12
+
13
+ //#region src/components/FullPageSalesAgent/components/Layout.tsx
14
+ const Layout = ({ theme, welcomeMessage, footer, chatMessages, answerSuggestions, scrollToBottomButton, disclaimer, headerContainer, autoHeight }) => {
15
+ const hasWelcomeMessage = (0, react.isValidElement)(welcomeMessage);
16
+ const hasAnswerSuggestions = (0, react.isValidElement)(answerSuggestions);
17
+ const { contentClasses, messageContainerClasses } = require_useGetScrollContentStyles.useGetScrollContentStyles();
18
+ const { footerContainerClasses } = require_useGetFooterStyles.useGetFooterStyles();
19
+ const { containerClasses, containerStyles } = require_useGetContainerStyles.useGetContainerStyles({
20
+ headerContainer,
21
+ autoHeight
22
+ });
23
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
24
+ className: containerClasses,
25
+ style: containerStyles,
26
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
27
+ className: contentClasses,
28
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Stack.Stack, {
29
+ className: messageContainerClasses,
30
+ direction: "column",
31
+ justify: "between",
32
+ children: [welcomeMessage, disclaimer]
33
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Stack.Stack, {
34
+ direction: "column",
35
+ gap: "0",
36
+ className: (0, classnames.default)((!hasWelcomeMessage || hasWelcomeMessage && theme === require_theme.Theme.STANDARD) && !hasAnswerSuggestions && "envive-tw-pb-4", "envive-tw-pt-4"),
37
+ children: [chatMessages, answerSuggestions]
38
+ })]
39
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40
+ className: footerContainerClasses,
41
+ children: [scrollToBottomButton && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
42
+ className: "envive-tw-h-[0px]",
43
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
44
+ className: "envive-tw-ml-auto envive-tw-table envive-tw-translate-x-[-30px] envive-tw-translate-y-[-50px]",
45
+ children: scrollToBottomButton
46
+ })
47
+ }), footer]
48
+ })]
49
+ });
50
+ };
51
+
52
+ //#endregion
53
+ exports.Layout = Layout;
@@ -0,0 +1,51 @@
1
+ import { Theme } from "../../packages/components-v3/tokens/theme/theme.js";
2
+ import { Stack } from "../../Stack/Stack.js";
3
+ import "../../Stack/index.js";
4
+ import { useGetContainerStyles } from "../hooks/useGetContainerStyles.js";
5
+ import { useGetFooterStyles } from "../hooks/useGetFooterStyles.js";
6
+ import { useGetScrollContentStyles } from "../hooks/useGetScrollContentStyles.js";
7
+ import { isValidElement } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import classNames from "classnames";
10
+
11
+ //#region src/components/FullPageSalesAgent/components/Layout.tsx
12
+ const Layout = ({ theme, welcomeMessage, footer, chatMessages, answerSuggestions, scrollToBottomButton, disclaimer, headerContainer, autoHeight }) => {
13
+ const hasWelcomeMessage = isValidElement(welcomeMessage);
14
+ const hasAnswerSuggestions = isValidElement(answerSuggestions);
15
+ const { contentClasses, messageContainerClasses } = useGetScrollContentStyles();
16
+ const { footerContainerClasses } = useGetFooterStyles();
17
+ const { containerClasses, containerStyles } = useGetContainerStyles({
18
+ headerContainer,
19
+ autoHeight
20
+ });
21
+ return /* @__PURE__ */ jsxs("div", {
22
+ className: containerClasses,
23
+ style: containerStyles,
24
+ children: [/* @__PURE__ */ jsxs("div", {
25
+ className: contentClasses,
26
+ children: [/* @__PURE__ */ jsxs(Stack, {
27
+ className: messageContainerClasses,
28
+ direction: "column",
29
+ justify: "between",
30
+ children: [welcomeMessage, disclaimer]
31
+ }), /* @__PURE__ */ jsxs(Stack, {
32
+ direction: "column",
33
+ gap: "0",
34
+ className: classNames((!hasWelcomeMessage || hasWelcomeMessage && theme === Theme.STANDARD) && !hasAnswerSuggestions && "envive-tw-pb-4", "envive-tw-pt-4"),
35
+ children: [chatMessages, answerSuggestions]
36
+ })]
37
+ }), /* @__PURE__ */ jsxs("div", {
38
+ className: footerContainerClasses,
39
+ children: [scrollToBottomButton && /* @__PURE__ */ jsx("div", {
40
+ className: "envive-tw-h-[0px]",
41
+ children: /* @__PURE__ */ jsx("div", {
42
+ className: "envive-tw-ml-auto envive-tw-table envive-tw-translate-x-[-30px] envive-tw-translate-y-[-50px]",
43
+ children: scrollToBottomButton
44
+ })
45
+ }), footer]
46
+ })]
47
+ });
48
+ };
49
+
50
+ //#endregion
51
+ export { Layout };
@@ -0,0 +1,7 @@
1
+ const require_Layout = require('./Layout.cjs');
2
+
3
+ //#region src/components/FullPageSalesAgent/components/index.ts
4
+ const FullPageSAComponents = { Layout: require_Layout.Layout };
5
+
6
+ //#endregion
7
+ exports.FullPageSAComponents = FullPageSAComponents;
@@ -0,0 +1,7 @@
1
+ import { Layout } from "./Layout.js";
2
+
3
+ //#region src/components/FullPageSalesAgent/components/index.ts
4
+ const FullPageSAComponents = { Layout };
5
+
6
+ //#endregion
7
+ export { FullPageSAComponents };
@@ -0,0 +1,23 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ let react = require("react");
3
+
4
+ //#region src/components/FullPageSalesAgent/hooks/useContainerResizerObserver.ts
5
+ const useContainerResizerObserver = ({ headerContainer, autoHeight }) => {
6
+ const [containerHeight, setContainerHeight] = (0, react.useState)("100%");
7
+ (0, react.useEffect)(() => {
8
+ if (!autoHeight) return null;
9
+ const watchResizing = () => {
10
+ const header = document.querySelector(headerContainer)?.getBoundingClientRect()?.height || 0;
11
+ setContainerHeight(window.innerHeight - header);
12
+ };
13
+ window.addEventListener("resize", watchResizing);
14
+ watchResizing();
15
+ return () => {
16
+ window.removeEventListener("resize", watchResizing);
17
+ };
18
+ }, [headerContainer, autoHeight]);
19
+ return { containerHeight };
20
+ };
21
+
22
+ //#endregion
23
+ exports.useContainerResizerObserver = useContainerResizerObserver;
@@ -0,0 +1,22 @@
1
+ import { useEffect, useState } from "react";
2
+
3
+ //#region src/components/FullPageSalesAgent/hooks/useContainerResizerObserver.ts
4
+ const useContainerResizerObserver = ({ headerContainer, autoHeight }) => {
5
+ const [containerHeight, setContainerHeight] = useState("100%");
6
+ useEffect(() => {
7
+ if (!autoHeight) return null;
8
+ const watchResizing = () => {
9
+ const header = document.querySelector(headerContainer)?.getBoundingClientRect()?.height || 0;
10
+ setContainerHeight(window.innerHeight - header);
11
+ };
12
+ window.addEventListener("resize", watchResizing);
13
+ watchResizing();
14
+ return () => {
15
+ window.removeEventListener("resize", watchResizing);
16
+ };
17
+ }, [headerContainer, autoHeight]);
18
+ return { containerHeight };
19
+ };
20
+
21
+ //#endregion
22
+ export { useContainerResizerObserver };
@@ -0,0 +1,16 @@
1
+ const require_useContainerResizerObserver = require('./useContainerResizerObserver.cjs');
2
+
3
+ //#region src/components/FullPageSalesAgent/hooks/useGetContainerStyles.ts
4
+ const useGetContainerStyles = ({ headerContainer, autoHeight }) => {
5
+ const { containerHeight } = require_useContainerResizerObserver.useContainerResizerObserver({
6
+ headerContainer,
7
+ autoHeight
8
+ });
9
+ return {
10
+ containerClasses: "envive-tw-mx-auto envive-tw-flex envive-tw-h-full envive-tw-max-w-[768px] envive-tw-flex-col",
11
+ containerStyles: { height: containerHeight }
12
+ };
13
+ };
14
+
15
+ //#endregion
16
+ exports.useGetContainerStyles = useGetContainerStyles;
@@ -0,0 +1,16 @@
1
+ import { useContainerResizerObserver } from "./useContainerResizerObserver.js";
2
+
3
+ //#region src/components/FullPageSalesAgent/hooks/useGetContainerStyles.ts
4
+ const useGetContainerStyles = ({ headerContainer, autoHeight }) => {
5
+ const { containerHeight } = useContainerResizerObserver({
6
+ headerContainer,
7
+ autoHeight
8
+ });
9
+ return {
10
+ containerClasses: "envive-tw-mx-auto envive-tw-flex envive-tw-h-full envive-tw-max-w-[768px] envive-tw-flex-col",
11
+ containerStyles: { height: containerHeight }
12
+ };
13
+ };
14
+
15
+ //#endregion
16
+ export { useGetContainerStyles };
@@ -0,0 +1,16 @@
1
+ const require_useIsMobile = require('./useIsMobile.cjs');
2
+
3
+ //#region src/components/FullPageSalesAgent/hooks/useGetFooterStyles.ts
4
+ const useGetFooterStyles = () => {
5
+ const { isMobile } = require_useIsMobile.useIsMobile();
6
+ return {
7
+ footerStyles: !isMobile ? {
8
+ boxShadow: "0px 2px 10px 0px rgba(0, 0, 0, 0.2)",
9
+ borderWidth: "1px"
10
+ } : null,
11
+ footerContainerClasses: isMobile ? "envive-tw-absolute envive-tw-bottom-[0] envive-tw-left-[0] envive-tw-right-[0]" : "envive-tw-pb-5"
12
+ };
13
+ };
14
+
15
+ //#endregion
16
+ exports.useGetFooterStyles = useGetFooterStyles;
@@ -0,0 +1,16 @@
1
+ import { useIsMobile } from "./useIsMobile.js";
2
+
3
+ //#region src/components/FullPageSalesAgent/hooks/useGetFooterStyles.ts
4
+ const useGetFooterStyles = () => {
5
+ const { isMobile } = useIsMobile();
6
+ return {
7
+ footerStyles: !isMobile ? {
8
+ boxShadow: "0px 2px 10px 0px rgba(0, 0, 0, 0.2)",
9
+ borderWidth: "1px"
10
+ } : null,
11
+ footerContainerClasses: isMobile ? "envive-tw-absolute envive-tw-bottom-[0] envive-tw-left-[0] envive-tw-right-[0]" : "envive-tw-pb-5"
12
+ };
13
+ };
14
+
15
+ //#endregion
16
+ export { useGetFooterStyles };
@@ -0,0 +1,19 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_useIsMobile = require('./useIsMobile.cjs');
3
+ let classnames = require("classnames");
4
+ classnames = require_rolldown_runtime.__toESM(classnames);
5
+
6
+ //#region src/components/FullPageSalesAgent/hooks/useGetScrollContentStyles.ts
7
+ const useGetScrollContentStyles = () => {
8
+ const { isMobile } = require_useIsMobile.useIsMobile();
9
+ return {
10
+ contentClasses: (0, classnames.default)({
11
+ "envive-tw-flex-1 envive-tw-overflow-y-auto envive-tw-overflow-x-hidden envive-tw-transition-all envive-tw-duration-300 envive-tw-ease-in-out": true,
12
+ "envive-tw-pb-[131px]": isMobile
13
+ }),
14
+ messageContainerClasses: !isMobile ? "envive-tw-pt-4" : null
15
+ };
16
+ };
17
+
18
+ //#endregion
19
+ exports.useGetScrollContentStyles = useGetScrollContentStyles;