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

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 (238) hide show
  1. package/dist/AnimatedText/AnimatedText.cjs +1 -0
  2. package/dist/AnimatedText/AnimatedText.d.cts +3 -3
  3. package/dist/AnimatedText/AnimatedText.js +1 -0
  4. package/dist/CSSVariablesEditor/CssVariablesEditorComponent.d.cts +2 -2
  5. package/dist/CSSVariablesEditor/CssVariablesEditorComponent.d.ts +2 -2
  6. package/dist/Carousel/Carousel.cjs +1 -1
  7. package/dist/Carousel/Carousel.d.cts +2 -2
  8. package/dist/Carousel/Carousel.d.ts +2 -2
  9. package/dist/Carousel/Carousel.js +1 -1
  10. package/dist/Carousel/components/Container.cjs +2 -2
  11. package/dist/Carousel/components/Container.js +2 -2
  12. package/dist/ChatFooter/ChatFooter.cjs +1 -1
  13. package/dist/ChatFooter/ChatFooter.d.cts +2 -2
  14. package/dist/ChatFooter/ChatFooter.d.ts +2 -2
  15. package/dist/ChatFooter/ChatFooter.js +1 -1
  16. package/dist/ChatFooter/components/Layout.cjs +2 -2
  17. package/dist/ChatFooter/components/Layout.js +2 -2
  18. package/dist/ChatFooter/components/index.d.cts +5 -5
  19. package/dist/ChatFooter/components/index.d.ts +5 -5
  20. package/dist/ChatHeader/ChatHeader.d.cts +2 -2
  21. package/dist/ChatHeader/ChatHeader.d.ts +2 -2
  22. package/dist/ChatHeader/components/Handle.cjs +2 -2
  23. package/dist/ChatHeader/components/Handle.js +2 -2
  24. package/dist/ChatHeader/components/Toggle.cjs +3 -3
  25. package/dist/ChatHeader/components/Toggle.js +3 -3
  26. package/dist/ChatHeader/hooks/useGetCloseButtonProperties.cjs +1 -1
  27. package/dist/ChatHeader/hooks/useGetCloseButtonProperties.js +1 -1
  28. package/dist/ChatPreview/ChatPreview.cjs +14 -4
  29. package/dist/ChatPreview/ChatPreview.d.cts +2 -2
  30. package/dist/ChatPreview/ChatPreview.d.ts +2 -2
  31. package/dist/ChatPreview/ChatPreview.js +14 -4
  32. package/dist/ChatPreview/types/types.d.cts +5 -4
  33. package/dist/ChatPreview/types/types.d.ts +5 -4
  34. package/dist/ChatPreviewComparison/ChatPreviewComparison.cjs +14 -4
  35. package/dist/ChatPreviewComparison/ChatPreviewComparison.d.cts +2 -2
  36. package/dist/ChatPreviewComparison/ChatPreviewComparison.d.ts +2 -2
  37. package/dist/ChatPreviewComparison/ChatPreviewComparison.js +14 -4
  38. package/dist/ChatPreviewComparison/components/Headline.cjs +2 -2
  39. package/dist/ChatPreviewComparison/components/Headline.js +2 -2
  40. package/dist/ChatPreviewComparison/components/Layout.cjs +4 -4
  41. package/dist/ChatPreviewComparison/components/Layout.js +4 -4
  42. package/dist/ChatPreviewComparison/components/Message.cjs +2 -2
  43. package/dist/ChatPreviewComparison/components/Message.js +2 -2
  44. package/dist/ChatPreviewComparison/types/types.d.cts +4 -4
  45. package/dist/ChatPreviewComparison/types/types.d.ts +4 -4
  46. package/dist/ChatPreviewLoading/ChatPreviewLoading.d.cts +2 -2
  47. package/dist/Container/Container.d.cts +5 -5
  48. package/dist/Container/Container.d.ts +176 -176
  49. package/dist/DesignTokens/DesignTokensComponent.d.cts +2 -2
  50. package/dist/DesignTokens/DesignTokensComponent.d.ts +2 -2
  51. package/dist/Disclaimer/components/Container.cjs +2 -2
  52. package/dist/Disclaimer/components/Container.js +2 -2
  53. package/dist/DocumentRetrievalCard/DocumentRetrievalCard.d.cts +2 -2
  54. package/dist/DocumentRetrievalCard/DocumentRetrievalCard.d.ts +2 -2
  55. package/dist/DocumentRetrievalCard/components/Layout.cjs +2 -2
  56. package/dist/DocumentRetrievalCard/components/Layout.js +2 -2
  57. package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Icon.cjs +1 -1
  58. package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Icon.js +1 -1
  59. package/dist/FloatingButton/FloatingButton.d.cts +2 -2
  60. package/dist/FloatingChat/FloatingChat.cjs +3 -2
  61. package/dist/FloatingChat/FloatingChat.d.cts +2 -2
  62. package/dist/FloatingChat/FloatingChat.d.ts +2 -2
  63. package/dist/FloatingChat/FloatingChat.js +3 -2
  64. package/dist/FloatingChat/components/AgentMessage.cjs +9 -5
  65. package/dist/FloatingChat/components/AgentMessage.js +9 -5
  66. package/dist/FloatingChat/components/ChatMessages.cjs +1 -1
  67. package/dist/FloatingChat/components/ChatMessages.js +1 -1
  68. package/dist/FloatingChat/components/Layout.cjs +13 -13
  69. package/dist/FloatingChat/components/Layout.js +13 -13
  70. package/dist/FloatingChat/components/ModalSheet.cjs +5 -6
  71. package/dist/FloatingChat/components/ModalSheet.js +5 -6
  72. package/dist/FloatingChat/components/ReviewCardsCarousel.cjs +2 -1
  73. package/dist/FloatingChat/components/ReviewCardsCarousel.js +2 -1
  74. package/dist/FloatingChat/components/SalesAgentProductCardsCarousel.cjs +0 -3
  75. package/dist/FloatingChat/components/SalesAgentProductCardsCarousel.js +0 -3
  76. package/dist/Image/Image.d.cts +2 -2
  77. package/dist/Image/Image.d.ts +2 -2
  78. package/dist/ImageGallery/ImageGallery.d.cts +2 -2
  79. package/dist/ImageGallery/ImageGallery.d.ts +2 -2
  80. package/dist/ImageGallery/components/Layout.cjs +1 -1
  81. package/dist/ImageGallery/components/Layout.js +1 -1
  82. package/dist/MarkdownProcessor/MarkdownProcessor.d.cts +2 -2
  83. package/dist/MarkdownProcessor/MarkdownProcessor.d.ts +2 -2
  84. package/dist/Message/components/LinkButton.cjs +1 -1
  85. package/dist/Message/components/LinkButton.js +1 -1
  86. package/dist/OrderLookupCard/OrderLookupCard.cjs +1 -1
  87. package/dist/OrderLookupCard/OrderLookupCard.js +1 -1
  88. package/dist/ProductCard/ProductCard.cjs +10 -6
  89. package/dist/ProductCard/ProductCard.d.cts +2 -2
  90. package/dist/ProductCard/ProductCard.d.ts +2 -2
  91. package/dist/ProductCard/ProductCard.js +5 -2
  92. package/dist/ProductCard/components/Header.cjs +2 -2
  93. package/dist/ProductCard/components/Header.js +2 -2
  94. package/dist/PromptButton/PromptButton.d.cts +2 -2
  95. package/dist/PromptButton/PromptButton.d.ts +2 -2
  96. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.cjs +3 -2
  97. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.cts +2 -2
  98. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.ts +2 -2
  99. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.js +3 -2
  100. package/dist/PromptButtonCarouselWithImage/components/Layout.cjs +7 -2
  101. package/dist/PromptButtonCarouselWithImage/components/Layout.js +8 -3
  102. package/dist/PromptButtonCarouselWithImage/components/PromptButtonsCarousel.cjs +53 -3
  103. package/dist/PromptButtonCarouselWithImage/components/PromptButtonsCarousel.js +53 -3
  104. package/dist/PromptCarousel/PromptCarousel.cjs +71 -33
  105. package/dist/PromptCarousel/PromptCarousel.d.cts +2 -2
  106. package/dist/PromptCarousel/PromptCarousel.d.ts +2 -2
  107. package/dist/PromptCarousel/PromptCarousel.js +73 -35
  108. package/dist/PromptCarousel/hooks/index.cjs +2 -4
  109. package/dist/PromptCarousel/hooks/index.js +2 -4
  110. package/dist/PromptCarousel/hooks/useCoordinatedScrollAnimation.cjs +91 -0
  111. package/dist/PromptCarousel/hooks/useCoordinatedScrollAnimation.js +90 -0
  112. package/dist/PromptCarousel/hooks/useScrollSync.cjs +65 -0
  113. package/dist/PromptCarousel/hooks/useScrollSync.js +64 -0
  114. package/dist/ReviewCard/ReviewCard.d.cts +2 -2
  115. package/dist/ReviewCard/ReviewCard.d.ts +2 -2
  116. package/dist/ReviewCard/components/Container.cjs +2 -2
  117. package/dist/ReviewCard/components/Container.js +2 -2
  118. package/dist/ReviewCard/components/ReadMoreButton.cjs +1 -1
  119. package/dist/ReviewCard/components/ReadMoreButton.js +1 -1
  120. package/dist/ReviewCard/components/index.d.cts +4 -4
  121. package/dist/ReviewCard/components/index.d.ts +6 -6
  122. package/dist/SalesAgentProductCard/SalesAgentProductCard.d.cts +2 -2
  123. package/dist/SalesAgentProductCard/SalesAgentProductCard.d.ts +2 -2
  124. package/dist/SalesAgentProductCard/components/Container.cjs +2 -2
  125. package/dist/SalesAgentProductCard/components/Container.js +2 -2
  126. package/dist/SalesAgentProductCard/components/index.d.cts +6 -6
  127. package/dist/SalesAgentProductCard/components/index.d.ts +8 -8
  128. package/dist/SocialProof/SocialProof.cjs +1 -1
  129. package/dist/SocialProof/SocialProof.d.cts +2 -2
  130. package/dist/SocialProof/SocialProof.d.ts +2 -2
  131. package/dist/SocialProof/SocialProof.js +1 -1
  132. package/dist/SocialProof/components/Headline.cjs +3 -3
  133. package/dist/SocialProof/components/Headline.js +3 -3
  134. package/dist/SocialProof/components/LayoutFourHorizontal.cjs +1 -1
  135. package/dist/SocialProof/components/LayoutFourHorizontal.js +1 -1
  136. package/dist/SocialProof/components/Subheadline.cjs +1 -1
  137. package/dist/SocialProof/components/Subheadline.js +1 -1
  138. package/dist/Stack/Stack.d.cts +2 -2
  139. package/dist/TextField/utils/getIconColor.cjs +1 -1
  140. package/dist/TextField/utils/getIconColor.js +1 -1
  141. package/dist/TextField/utils/getSendIconElement.cjs +1 -1
  142. package/dist/TextField/utils/getSendIconElement.js +1 -1
  143. package/dist/TitledPromptCarousel/TitledPromptCarousel.cjs +1 -1
  144. package/dist/TitledPromptCarousel/TitledPromptCarousel.d.cts +2 -2
  145. package/dist/TitledPromptCarousel/TitledPromptCarousel.d.ts +2 -2
  146. package/dist/TitledPromptCarousel/TitledPromptCarousel.js +1 -1
  147. package/dist/Tokens/index.cjs +1 -1
  148. package/dist/Tokens/index.js +1 -1
  149. package/dist/TypingAnimation/TypingAnimation.cjs +1 -1
  150. package/dist/TypingAnimation/TypingAnimation.d.cts +2 -2
  151. package/dist/TypingAnimation/TypingAnimation.d.ts +2 -2
  152. package/dist/TypingAnimation/TypingAnimation.js +1 -1
  153. package/dist/TypingAnimation/hooks/useGetTypographyVariant.cjs +1 -1
  154. package/dist/TypingAnimation/hooks/useGetTypographyVariant.js +1 -1
  155. package/dist/Typography/Typography.d.cts +4 -4
  156. package/dist/Typography/Typography.d.ts +4 -4
  157. package/dist/WelcomeMessage/components/Container.cjs +2 -2
  158. package/dist/WelcomeMessage/components/Container.js +2 -2
  159. package/dist/WidgetTextField/WidgetTextField.cjs +11 -6
  160. package/dist/WidgetTextField/WidgetTextField.d.cts +3 -2
  161. package/dist/WidgetTextField/WidgetTextField.d.ts +3 -2
  162. package/dist/WidgetTextField/WidgetTextField.js +7 -2
  163. package/dist/WidgetTextField/components/Container.cjs +2 -2
  164. package/dist/WidgetTextField/components/Container.js +2 -2
  165. package/dist/WidgetTextField/components/FakeTextInput.cjs +2 -2
  166. package/dist/WidgetTextField/components/FakeTextInput.js +2 -2
  167. package/dist/WidgetTextField/components/Icon.cjs +11 -9
  168. package/dist/WidgetTextField/components/Icon.js +11 -9
  169. package/dist/WidgetTextField/types/types.d.cts +3 -0
  170. package/dist/WidgetTextField/types/types.d.ts +3 -0
  171. package/dist/WidgetWrapper/WidgetWrapper.d.cts +2 -2
  172. package/dist/WidgetWrapper/WidgetWrapper.d.ts +2 -2
  173. package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.cts +2 -2
  174. package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.ts +2 -2
  175. package/dist/styles.css +1 -1
  176. package/dist/utils/CustomIcon.cjs +1 -1
  177. package/dist/utils/CustomIcon.js +1 -1
  178. package/dist/utils/useDragToScroll.cjs +68 -0
  179. package/dist/utils/useDragToScroll.js +67 -0
  180. package/package.json +1 -1
  181. package/src/components/AnimatedText/AnimatedText.tsx +2 -0
  182. package/src/components/ChatHeader/hooks/useGetCloseButtonProperties.ts +1 -1
  183. package/src/components/ChatPreview/ChatPreview.tsx +20 -3
  184. package/src/components/ChatPreview/types/types.ts +5 -4
  185. package/src/components/ChatPreviewComparison/ChatPreviewComparison.tsx +20 -3
  186. package/src/components/ChatPreviewComparison/types/types.ts +4 -4
  187. package/src/components/FloatingChat/FloatingChat.tsx +3 -2
  188. package/src/components/FloatingChat/components/AgentMessage.tsx +1 -0
  189. package/src/components/FloatingChat/components/Layout.tsx +7 -2
  190. package/src/components/FloatingChat/components/ModalSheet.tsx +5 -7
  191. package/src/components/FloatingChat/components/ReviewCardsCarousel.tsx +3 -0
  192. package/src/components/FloatingChat/components/SalesAgentProductCardsCarousel.tsx +0 -3
  193. package/src/components/ProductCard/ProductCard.tsx +12 -1
  194. package/src/components/ProductCard/components/Header.tsx +10 -8
  195. package/src/components/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.tsx +6 -3
  196. package/src/components/PromptButtonCarouselWithImage/components/Layout.tsx +13 -4
  197. package/src/components/PromptButtonCarouselWithImage/components/PromptButtonsCarousel.tsx +63 -20
  198. package/src/components/PromptCarousel/PromptCarousel.tsx +89 -51
  199. package/src/components/PromptCarousel/hooks/index.ts +2 -4
  200. package/src/components/PromptCarousel/hooks/useCoordinatedScrollAnimation.ts +115 -0
  201. package/src/components/PromptCarousel/hooks/useHorizontalScrollAnimation.ts +71 -78
  202. package/src/components/PromptCarousel/hooks/useScrollSync.ts +83 -0
  203. package/src/components/TextField/utils/getIconColor.ts +1 -1
  204. package/src/components/TextField/utils/getSendIconElement.tsx +3 -1
  205. package/src/components/WidgetTextField/WidgetTextField.tsx +9 -1
  206. package/src/components/WidgetTextField/components/FakeTextInput.tsx +6 -2
  207. package/src/components/WidgetTextField/components/Icon.tsx +44 -9
  208. package/src/components/WidgetTextField/types/types.ts +3 -0
  209. package/src/components/utils/CustomIcon.tsx +1 -1
  210. package/src/components/utils/useDragToScroll.ts +83 -0
  211. package/dist/PromptCarousel/components/BlockScrollContainer.cjs +0 -23
  212. package/dist/PromptCarousel/components/BlockScrollContainer.js +0 -21
  213. package/dist/PromptCarousel/components/ButtonContainerRow.cjs +0 -34
  214. package/dist/PromptCarousel/components/ButtonContainerRow.js +0 -32
  215. package/dist/PromptCarousel/components/CarouselContentWithBlockScroll.cjs +0 -45
  216. package/dist/PromptCarousel/components/CarouselContentWithBlockScroll.js +0 -44
  217. package/dist/PromptCarousel/components/CarouselContentWithRowScroll.cjs +0 -33
  218. package/dist/PromptCarousel/components/CarouselContentWithRowScroll.js +0 -32
  219. package/dist/PromptCarousel/components/index.cjs +0 -13
  220. package/dist/PromptCarousel/components/index.js +0 -13
  221. package/dist/PromptCarousel/hooks/useButtonScrollPosition.cjs +0 -79
  222. package/dist/PromptCarousel/hooks/useButtonScrollPosition.js +0 -78
  223. package/dist/PromptCarousel/hooks/useCarouselAnimation.cjs +0 -23
  224. package/dist/PromptCarousel/hooks/useCarouselAnimation.js +0 -22
  225. package/dist/PromptCarousel/hooks/useCarouselRefs.cjs +0 -20
  226. package/dist/PromptCarousel/hooks/useCarouselRefs.js +0 -19
  227. package/dist/PromptCarousel/hooks/useGetScrollProperties.cjs +0 -18
  228. package/dist/PromptCarousel/hooks/useGetScrollProperties.js +0 -17
  229. package/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.cjs +0 -78
  230. package/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.js +0 -77
  231. package/src/components/PromptCarousel/components/BlockScrollContainer.tsx +0 -34
  232. package/src/components/PromptCarousel/components/ButtonContainerRow.tsx +0 -46
  233. package/src/components/PromptCarousel/components/CarouselContentWithBlockScroll.tsx +0 -83
  234. package/src/components/PromptCarousel/components/CarouselContentWithRowScroll.tsx +0 -71
  235. package/src/components/PromptCarousel/components/index.ts +0 -9
  236. package/src/components/PromptCarousel/hooks/useButtonScrollPosition.ts +0 -128
  237. package/src/components/PromptCarousel/hooks/useCarouselAnimation.ts +0 -47
  238. package/src/components/PromptCarousel/hooks/useCarouselRefs.ts +0 -27
@@ -1,5 +1,5 @@
1
1
  import { PromptButtonCarouselWithImageProps } from "./types/types.cjs";
2
- import * as react_jsx_runtime15 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime14 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.ts
5
5
  declare const PromptButtonCarouselWithImage: ({
@@ -18,6 +18,6 @@ declare const PromptButtonCarouselWithImage: ({
18
18
  handlePromptButtonClick,
19
19
  textFieldPlaceholder,
20
20
  handleTextFieldClick
21
- }: PromptButtonCarouselWithImageProps) => react_jsx_runtime15.JSX.Element;
21
+ }: PromptButtonCarouselWithImageProps) => react_jsx_runtime14.JSX.Element;
22
22
  //#endregion
23
23
  export { PromptButtonCarouselWithImage };
@@ -1,5 +1,5 @@
1
1
  import { PromptButtonCarouselWithImageProps } from "./types/types.js";
2
- import * as react_jsx_runtime7 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime12 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.ts
5
5
  declare const PromptButtonCarouselWithImage: ({
@@ -18,6 +18,6 @@ declare const PromptButtonCarouselWithImage: ({
18
18
  handlePromptButtonClick,
19
19
  textFieldPlaceholder,
20
20
  handleTextFieldClick
21
- }: PromptButtonCarouselWithImageProps) => react_jsx_runtime7.JSX.Element;
21
+ }: PromptButtonCarouselWithImageProps) => react_jsx_runtime12.JSX.Element;
22
22
  //#endregion
23
23
  export { PromptButtonCarouselWithImage };
@@ -6,7 +6,7 @@ import { jsx } from "react/jsx-runtime";
6
6
  //#region src/components/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.tsx
7
7
  const PromptButtonCarouselWithImage = ({ id, testId, className, style, theme = Theme.GLOBAL_CUSTOM, imageSrc, alt, isLoading, hideTextField, title, promptButtonsTexts, promptButtonType, handlePromptButtonClick, textFieldPlaceholder, handleTextFieldClick }) => {
8
8
  const finalTheme = resolveTheme(theme);
9
- if (promptButtonsTexts && promptButtonsTexts?.length !== 3) throw new Error("PromptButtonsCarouselWithImage: promptButtonsTexts must be equal to 3");
9
+ if (promptButtonsTexts && promptButtonsTexts?.length < 3) throw new Error("PromptButtonsCarouselWithImage: promptButtonsTexts must have at least 3 items");
10
10
  return /* @__PURE__ */ jsx(PromptButtonCarouselWithImageComponents.Layout, {
11
11
  id,
12
12
  testId,
@@ -16,6 +16,7 @@ const PromptButtonCarouselWithImage = ({ id, testId, className, style, theme = T
16
16
  textField: /* @__PURE__ */ jsx(PromptButtonCarouselWithImageComponents.TextField, {
17
17
  isLoading,
18
18
  placeholder: textFieldPlaceholder,
19
+ className: finalTheme === Theme.MINIMAL ? "!envive-tw-border-border-medium" : void 0,
19
20
  onClick: () => handleTextFieldClick(textFieldPlaceholder),
20
21
  theme: finalTheme
21
22
  }),
@@ -27,7 +28,7 @@ const PromptButtonCarouselWithImage = ({ id, testId, className, style, theme = T
27
28
  promptButtons: /* @__PURE__ */ jsx(PromptButtonCarouselWithImageComponents.PromptButtonsCarousel, {
28
29
  theme: finalTheme,
29
30
  isLoading,
30
- promptButtonsTexts,
31
+ promptButtonsTexts: promptButtonsTexts || [],
31
32
  promptButtonType,
32
33
  handlePromptButtonClick
33
34
  }),
@@ -5,6 +5,7 @@ const require_useCheckIsMobile = require('../../utils/useCheckIsMobile.cjs');
5
5
  const require_useGetContentSize = require('../../utils/useGetContentSize.cjs');
6
6
  const require_functions = require('../../SocialProof/utils/functions.cjs');
7
7
  const require_useHorizontalWheelScroll = require('../../utils/useHorizontalWheelScroll.cjs');
8
+ const require_useDragToScroll = require('../../utils/useDragToScroll.cjs');
8
9
  let react = require("react");
9
10
  let react_jsx_runtime = require("react/jsx-runtime");
10
11
  let classnames = require("classnames");
@@ -15,6 +16,10 @@ const Layout = ({ id, testId, className, style, title, promptButtons, image, tex
15
16
  const { isMobile } = require_useCheckIsMobile.useCheckIsMobile();
16
17
  const { height, ref: contentSizeRef } = require_useGetContentSize.useGetContentSize({ heightDefault: 245 });
17
18
  const wheelScrollRef = require_useHorizontalWheelScroll.useHorizontalWheelScroll(!isMobile);
19
+ require_useDragToScroll.useDragToScroll(wheelScrollRef, {
20
+ direction: isMobile ? "y" : "x",
21
+ isEnabled: true
22
+ });
18
23
  const combinedRef = (node) => {
19
24
  contentSizeRef.current = node;
20
25
  wheelScrollRef.current = node;
@@ -41,10 +46,10 @@ const Layout = ({ id, testId, className, style, title, promptButtons, image, tex
41
46
  scrollbarWidth: "none"
42
47
  },
43
48
  gap: 4,
44
- className: (0, classnames.default)("[&::-webkit-scrollbar]:hidden envive-tw-h-fit envive-tw-scroll-smooth", isMobile ? "envive-tw-w-full envive-tw-overflow-y-auto" : "envive-tw-overflow-x-auto", isMobile || hideTextField ? "envive-tw-w-full" : "envive-tw-max-w-[300px] md:envive-tw-max-w-[450px] lg:envive-tw-max-w-[700px]"),
49
+ className: (0, classnames.default)("[&::-webkit-scrollbar]:hidden envive-tw-h-fit", isMobile ? "envive-tw-w-full envive-tw-overflow-y-auto" : "envive-tw-overflow-x-auto", isMobile || hideTextField ? "envive-tw-w-full" : "envive-tw-max-w-[300px] md:envive-tw-max-w-[450px] lg:envive-tw-max-w-[900px]"),
45
50
  children: promptButtons
46
51
  })]
47
- }), !hideTextField && (0, react.cloneElement)(textField, { className: isMobile ? "envive-tw-w-full" : "envive-tw-min-w-[276px]" })]
52
+ }), !hideTextField && (0, react.isValidElement)(textField) && (0, react.cloneElement)(textField, { className: (0, classnames.default)(isMobile ? "envive-tw-w-full" : "envive-tw-min-w-[276px]", textField.props.className) })]
48
53
  })]
49
54
  });
50
55
  };
@@ -4,7 +4,8 @@ import { useCheckIsMobile } from "../../utils/useCheckIsMobile.js";
4
4
  import { useGetContentSize } from "../../utils/useGetContentSize.js";
5
5
  import { calculateWidthImageGallery } from "../../SocialProof/utils/functions.js";
6
6
  import { useHorizontalWheelScroll } from "../../utils/useHorizontalWheelScroll.js";
7
- import { cloneElement } from "react";
7
+ import { useDragToScroll } from "../../utils/useDragToScroll.js";
8
+ import { cloneElement, isValidElement } from "react";
8
9
  import { jsx, jsxs } from "react/jsx-runtime";
9
10
  import classNames from "classnames";
10
11
 
@@ -13,6 +14,10 @@ const Layout = ({ id, testId, className, style, title, promptButtons, image, tex
13
14
  const { isMobile } = useCheckIsMobile();
14
15
  const { height, ref: contentSizeRef } = useGetContentSize({ heightDefault: 245 });
15
16
  const wheelScrollRef = useHorizontalWheelScroll(!isMobile);
17
+ useDragToScroll(wheelScrollRef, {
18
+ direction: isMobile ? "y" : "x",
19
+ isEnabled: true
20
+ });
16
21
  const combinedRef = (node) => {
17
22
  contentSizeRef.current = node;
18
23
  wheelScrollRef.current = node;
@@ -39,10 +44,10 @@ const Layout = ({ id, testId, className, style, title, promptButtons, image, tex
39
44
  scrollbarWidth: "none"
40
45
  },
41
46
  gap: 4,
42
- className: classNames("[&::-webkit-scrollbar]:hidden envive-tw-h-fit envive-tw-scroll-smooth", isMobile ? "envive-tw-w-full envive-tw-overflow-y-auto" : "envive-tw-overflow-x-auto", isMobile || hideTextField ? "envive-tw-w-full" : "envive-tw-max-w-[300px] md:envive-tw-max-w-[450px] lg:envive-tw-max-w-[700px]"),
47
+ className: classNames("[&::-webkit-scrollbar]:hidden envive-tw-h-fit", isMobile ? "envive-tw-w-full envive-tw-overflow-y-auto" : "envive-tw-overflow-x-auto", isMobile || hideTextField ? "envive-tw-w-full" : "envive-tw-max-w-[300px] md:envive-tw-max-w-[450px] lg:envive-tw-max-w-[900px]"),
43
48
  children: promptButtons
44
49
  })]
45
- }), !hideTextField && cloneElement(textField, { className: isMobile ? "envive-tw-w-full" : "envive-tw-min-w-[276px]" })]
50
+ }), !hideTextField && isValidElement(textField) && cloneElement(textField, { className: classNames(isMobile ? "envive-tw-w-full" : "envive-tw-min-w-[276px]", textField.props.className) })]
46
51
  })]
47
52
  });
48
53
  };
@@ -1,17 +1,48 @@
1
1
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_Stack = require('../../Stack/Stack.cjs');
3
+ require('../../Stack/index.cjs');
2
4
  const require_resolveTheme = require('../../utils/resolveTheme.cjs');
3
5
  const require_PromptButton = require('../../PromptButton/PromptButton.cjs');
4
6
  require('../../PromptButton/index.cjs');
7
+ const require_useCheckIsMobile = require('../../utils/useCheckIsMobile.cjs');
5
8
  let react_jsx_runtime = require("react/jsx-runtime");
6
9
 
7
10
  //#region src/components/PromptButtonCarouselWithImage/components/PromptButtonsCarousel.tsx
11
+ function distributeInThreeRows(items) {
12
+ const n = items.length;
13
+ const perRow = [
14
+ 1,
15
+ 1,
16
+ 1
17
+ ];
18
+ let remaining = Math.max(0, n - 3);
19
+ let idx = 0;
20
+ while (remaining > 0) {
21
+ perRow[idx % 3] += 1;
22
+ remaining -= 1;
23
+ idx += 1;
24
+ }
25
+ let start = 0;
26
+ const [row0, row1, row2] = perRow.map((count) => {
27
+ const row = items.slice(start, start + count);
28
+ start += count;
29
+ return row;
30
+ });
31
+ return [
32
+ row0,
33
+ row1,
34
+ row2
35
+ ];
36
+ }
8
37
  const PromptButtonsCarousel = ({ theme, isLoading, promptButtonsTexts, promptButtonType, handlePromptButtonClick }) => {
9
38
  const finalTheme = require_resolveTheme.resolveTheme(theme);
10
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: (isLoading ? [
39
+ const { isMobile } = require_useCheckIsMobile.useCheckIsMobile();
40
+ const promptButtonsTextsFinal = isLoading ? [
11
41
  "Loading 1...",
12
42
  "Loading 2...",
13
43
  "Loading 3..."
14
- ] : promptButtonsTexts).map((text) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
44
+ ] : promptButtonsTexts || [];
45
+ const renderButton = (text) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
15
46
  className: "envive-tw-flex-shrink-0",
16
47
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PromptButton.PromptButton, {
17
48
  id: `prompt-button-${text}`,
@@ -22,7 +53,26 @@ const PromptButtonsCarousel = ({ theme, isLoading, promptButtonsTexts, promptBut
22
53
  theme: finalTheme,
23
54
  onClick: () => handlePromptButtonClick(text)
24
55
  })
25
- }, text)) });
56
+ }, text);
57
+ if (isMobile) {
58
+ const [row0, row1, row2] = distributeInThreeRows(promptButtonsTextsFinal);
59
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Stack.Stack, {
60
+ direction: "column",
61
+ gap: "4",
62
+ className: "envive-tw-w-full",
63
+ children: [
64
+ row0,
65
+ row1,
66
+ row2
67
+ ].filter((row) => row.length > 0).map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Stack.Stack, {
68
+ direction: "row",
69
+ gap: "4",
70
+ className: "envive-tw-w-full envive-tw-flex-nowrap",
71
+ children: row.map(renderButton)
72
+ }, row.join("-")))
73
+ });
74
+ }
75
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: promptButtonsTextsFinal.map(renderButton) });
26
76
  };
27
77
 
28
78
  //#endregion
@@ -1,16 +1,47 @@
1
+ import { Stack } from "../../Stack/Stack.js";
2
+ import "../../Stack/index.js";
1
3
  import { resolveTheme } from "../../utils/resolveTheme.js";
2
4
  import { PromptButton } from "../../PromptButton/PromptButton.js";
3
5
  import "../../PromptButton/index.js";
6
+ import { useCheckIsMobile } from "../../utils/useCheckIsMobile.js";
4
7
  import { Fragment, jsx } from "react/jsx-runtime";
5
8
 
6
9
  //#region src/components/PromptButtonCarouselWithImage/components/PromptButtonsCarousel.tsx
10
+ function distributeInThreeRows(items) {
11
+ const n = items.length;
12
+ const perRow = [
13
+ 1,
14
+ 1,
15
+ 1
16
+ ];
17
+ let remaining = Math.max(0, n - 3);
18
+ let idx = 0;
19
+ while (remaining > 0) {
20
+ perRow[idx % 3] += 1;
21
+ remaining -= 1;
22
+ idx += 1;
23
+ }
24
+ let start = 0;
25
+ const [row0, row1, row2] = perRow.map((count) => {
26
+ const row = items.slice(start, start + count);
27
+ start += count;
28
+ return row;
29
+ });
30
+ return [
31
+ row0,
32
+ row1,
33
+ row2
34
+ ];
35
+ }
7
36
  const PromptButtonsCarousel = ({ theme, isLoading, promptButtonsTexts, promptButtonType, handlePromptButtonClick }) => {
8
37
  const finalTheme = resolveTheme(theme);
9
- return /* @__PURE__ */ jsx(Fragment, { children: (isLoading ? [
38
+ const { isMobile } = useCheckIsMobile();
39
+ const promptButtonsTextsFinal = isLoading ? [
10
40
  "Loading 1...",
11
41
  "Loading 2...",
12
42
  "Loading 3..."
13
- ] : promptButtonsTexts).map((text) => /* @__PURE__ */ jsx("div", {
43
+ ] : promptButtonsTexts || [];
44
+ const renderButton = (text) => /* @__PURE__ */ jsx("div", {
14
45
  className: "envive-tw-flex-shrink-0",
15
46
  children: /* @__PURE__ */ jsx(PromptButton, {
16
47
  id: `prompt-button-${text}`,
@@ -21,7 +52,26 @@ const PromptButtonsCarousel = ({ theme, isLoading, promptButtonsTexts, promptBut
21
52
  theme: finalTheme,
22
53
  onClick: () => handlePromptButtonClick(text)
23
54
  })
24
- }, text)) });
55
+ }, text);
56
+ if (isMobile) {
57
+ const [row0, row1, row2] = distributeInThreeRows(promptButtonsTextsFinal);
58
+ return /* @__PURE__ */ jsx(Stack, {
59
+ direction: "column",
60
+ gap: "4",
61
+ className: "envive-tw-w-full",
62
+ children: [
63
+ row0,
64
+ row1,
65
+ row2
66
+ ].filter((row) => row.length > 0).map((row) => /* @__PURE__ */ jsx(Stack, {
67
+ direction: "row",
68
+ gap: "4",
69
+ className: "envive-tw-w-full envive-tw-flex-nowrap",
70
+ children: row.map(renderButton)
71
+ }, row.join("-")))
72
+ });
73
+ }
74
+ return /* @__PURE__ */ jsx(Fragment, { children: promptButtonsTextsFinal.map(renderButton) });
25
75
  };
26
76
 
27
77
  //#endregion
@@ -1,21 +1,23 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
2
  const require_theme = require('../packages/components-v3/tokens/theme/theme.cjs');
3
- const require_resolveTheme = require('../utils/resolveTheme.cjs');
3
+ const require_Stack = require('../Stack/Stack.cjs');
4
+ require('../Stack/index.cjs');
4
5
  const require_Container = require('../Container/Container.cjs');
5
6
  require('../Container/index.cjs');
7
+ const require_resolveTheme = require('../utils/resolveTheme.cjs');
6
8
  const require_PromptButton_types_index = require('../PromptButton/types/index.cjs');
7
9
  const require_PromptButton = require('../PromptButton/PromptButton.cjs');
8
10
  require('../PromptButton/index.cjs');
9
11
  const require_useCheckIsMobile = require('../utils/useCheckIsMobile.cjs');
10
12
  const require_PromptCarousel_types_types = require('./types/types.cjs');
11
- const require_useCarouselRefs = require('./hooks/useCarouselRefs.cjs');
12
13
  const require_useCarouselButtons = require('./hooks/useCarouselButtons.cjs');
13
- const require_useCarouselAnimation = require('./hooks/useCarouselAnimation.cjs');
14
+ const require_useCoordinatedScrollAnimation = require('./hooks/useCoordinatedScrollAnimation.cjs');
15
+ const require_useScrollSync = require('./hooks/useScrollSync.cjs');
14
16
  require('./hooks/index.cjs');
15
- const require_index$1 = require('./components/index.cjs');
16
17
  const require_functions = require('./utils/functions.cjs');
17
18
  let react = require("react");
18
19
  let react_jsx_runtime = require("react/jsx-runtime");
20
+ let react_indiana_drag_scroll = require("react-indiana-drag-scroll");
19
21
 
20
22
  //#region src/components/PromptCarousel/PromptCarousel.tsx
21
23
  const PromptCarousel = ({ id, theme = require_theme.Theme.GLOBAL_CUSTOM, testId, className, style, isLoading = false, promptButtonTexts, promptButtonType = require_PromptButton_types_index.PromptButtonVariant.LIGHT, boldFirstButton = false, handleButtonClick, promptCarouselRows = require_PromptCarousel_types_types.PromptCarouselRows.ALWAYS_ONE, animationSpeed = require_PromptCarousel_types_types.AnimationSpeed.NONE, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role = "region" }) => {
@@ -23,21 +25,34 @@ const PromptCarousel = ({ id, theme = require_theme.Theme.GLOBAL_CUSTOM, testId,
23
25
  const isAnimatedValue = require_functions.isAnimated(animationSpeed);
24
26
  const shouldShowTwoRowsValue = require_functions.shouldShowTwoRows(promptCarouselRows, isMobile);
25
27
  const finalTheme = require_resolveTheme.resolveTheme(theme);
26
- const { firstRowScrollRef, firstRowStackRef, secondRowScrollRef, blockScrollRef, blockFirstRowStackRef, scrollRefs } = require_useCarouselRefs.useCarouselRefs({ shouldShowTwoRows: shouldShowTwoRowsValue });
27
- const { isAnimationStopped, shouldUseRowScroll } = require_useCarouselAnimation.useCarouselAnimation({
28
- firstRowScrollRef,
29
- blockScrollRef,
30
- scrollRefs,
31
- animationSpeed,
32
- isAnimated: isAnimatedValue
28
+ const { ref: dragScrollRef1 } = (0, react_indiana_drag_scroll.useScrollContainer)();
29
+ const { ref: dragScrollRef2 } = (0, react_indiana_drag_scroll.useScrollContainer)();
30
+ const scrollContainerRef1 = (0, react.useRef)(null);
31
+ const scrollContainerRef2 = (0, react.useRef)(null);
32
+ const setRef1 = (0, react.useCallback)((el) => {
33
+ if (typeof dragScrollRef1 === "function") dragScrollRef1(el);
34
+ scrollContainerRef1.current = el;
35
+ }, [dragScrollRef1]);
36
+ const setRef2 = (0, react.useCallback)((el) => {
37
+ if (typeof dragScrollRef2 === "function") dragScrollRef2(el);
38
+ scrollContainerRef2.current = el;
39
+ }, [dragScrollRef2]);
40
+ const scrollContainerRefs = shouldShowTwoRowsValue ? [scrollContainerRef1, scrollContainerRef2] : [scrollContainerRef1];
41
+ require_useCoordinatedScrollAnimation.useCoordinatedScrollAnimation({
42
+ scrollContainerRefs,
43
+ animationSpeed
44
+ });
45
+ require_useScrollSync.useScrollSync({
46
+ scrollContainerRefs,
47
+ enabled: true
33
48
  });
34
49
  const { visibleButtonsFirstRow, visibleButtonsSecondRow } = require_useCarouselButtons.useCarouselButtons({
35
50
  promptButtonTexts,
36
51
  shouldShowTwoRows: shouldShowTwoRowsValue
37
52
  });
38
- const renderButton = (0, react.useCallback)((text, index, repetitionNumber = void 0) => {
53
+ const renderButton = (0, react.useCallback)((text, index, duplicateIndex = 0) => {
39
54
  const textWithoutSpaces = require_functions.removeSpaces(text);
40
- const buttonId = repetitionNumber ? `${id}-${textWithoutSpaces}${repetitionNumber}` : `${id}-${textWithoutSpaces}`;
55
+ const buttonId = duplicateIndex > 0 ? `${id}-${textWithoutSpaces}-duplicate-${duplicateIndex}` : `${id}-${textWithoutSpaces}`;
41
56
  const buttonKey = `button-${buttonId}`;
42
57
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PromptButton.PromptButton, {
43
58
  id: buttonId,
@@ -45,7 +60,7 @@ const PromptCarousel = ({ id, theme = require_theme.Theme.GLOBAL_CUSTOM, testId,
45
60
  variant: promptButtonType,
46
61
  theme: finalTheme,
47
62
  isLoading,
48
- bold: boldFirstButton && index === 0,
63
+ bold: boldFirstButton && index === 0 && duplicateIndex === 0,
49
64
  onClick: () => handleButtonClick?.(text)
50
65
  }, buttonKey);
51
66
  }, [
@@ -56,6 +71,11 @@ const PromptCarousel = ({ id, theme = require_theme.Theme.GLOBAL_CUSTOM, testId,
56
71
  isLoading,
57
72
  finalTheme
58
73
  ]);
74
+ const renderButtonRow = (buttons, startIndex) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
75
+ buttons.map((text, i) => renderButton(text, startIndex + i, 0)),
76
+ isAnimatedValue && buttons.map((text, i) => renderButton(text, startIndex + i, 1)),
77
+ isAnimatedValue && buttons.map((text, i) => renderButton(text, startIndex + i, 2))
78
+ ] });
59
79
  const defaultAriaLabel = ariaLabel || "Prompt carousel with suggested actions";
60
80
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Container.Container, {
61
81
  id,
@@ -68,25 +88,43 @@ const PromptCarousel = ({ id, theme = require_theme.Theme.GLOBAL_CUSTOM, testId,
68
88
  "aria-describedby": ariaDescribedBy,
69
89
  "aria-busy": isLoading,
70
90
  "aria-live": isAnimatedValue && !isLoading ? "polite" : void 0,
71
- children: shouldUseRowScroll ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.PromptCarouselComponents.CarouselContentWithRowScroll, {
72
- visibleButtonsFirstRow,
73
- visibleButtonsSecondRow,
74
- shouldShowTwoRows: shouldShowTwoRowsValue,
75
- renderButton,
76
- isAnimated: isAnimatedValue,
77
- isAnimationStopped,
78
- firstRowScrollRef,
79
- firstRowStackRef,
80
- secondRowScrollRef
81
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.PromptCarouselComponents.CarouselContentWithBlockScroll, {
82
- visibleButtonsFirstRow,
83
- visibleButtonsSecondRow,
84
- shouldShowTwoRows: shouldShowTwoRowsValue,
85
- renderButton,
86
- isAnimated: isAnimatedValue,
87
- isAnimationStopped,
88
- blockScrollRef,
89
- blockFirstRowStackRef
91
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Stack.Stack, {
92
+ direction: "column",
93
+ className: animationSpeed === require_PromptCarousel_types_types.AnimationSpeed.NONE ? "envive-tw-w-full" : "",
94
+ gap: "2",
95
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
96
+ className: "envive-tw-no-scrollbar envive-tw-relative envive-tw-w-full envive-tw-overflow-x-scroll",
97
+ ref: setRef1,
98
+ style: {
99
+ cursor: "grab",
100
+ userSelect: "none"
101
+ },
102
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
103
+ className: "envive-tw-relative envive-tw-inline-block envive-tw-whitespace-nowrap",
104
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Stack.Stack, {
105
+ direction: "row",
106
+ gap: "2",
107
+ className: "envive-tw-pl-0 envive-tw-h-full envive-tw-items-center",
108
+ children: renderButtonRow(visibleButtonsFirstRow, 0)
109
+ })
110
+ })
111
+ }), shouldShowTwoRowsValue && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
112
+ className: "envive-tw-no-scrollbar envive-tw-relative envive-tw-w-full envive-tw-overflow-x-scroll",
113
+ ref: setRef2,
114
+ style: {
115
+ cursor: "grab",
116
+ userSelect: "none"
117
+ },
118
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
119
+ className: "envive-tw-relative envive-tw-inline-block envive-tw-whitespace-nowrap",
120
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Stack.Stack, {
121
+ direction: "row",
122
+ gap: "2",
123
+ className: "envive-tw-pl-0 envive-tw-h-full envive-tw-items-center",
124
+ children: renderButtonRow(visibleButtonsSecondRow, visibleButtonsFirstRow.length)
125
+ })
126
+ })
127
+ })]
90
128
  })
91
129
  });
92
130
  };
@@ -1,5 +1,5 @@
1
1
  import { PromptCarouselProps } from "./types/types.cjs";
2
- import * as react_jsx_runtime20 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime16 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/PromptCarousel/PromptCarousel.d.ts
5
5
  declare const PromptCarousel: ({
@@ -19,6 +19,6 @@ declare const PromptCarousel: ({
19
19
  "aria-labelledby": ariaLabelledBy,
20
20
  "aria-describedby": ariaDescribedBy,
21
21
  role
22
- }: PromptCarouselProps) => react_jsx_runtime20.JSX.Element;
22
+ }: PromptCarouselProps) => react_jsx_runtime16.JSX.Element;
23
23
  //#endregion
24
24
  export { PromptCarousel };
@@ -1,5 +1,5 @@
1
1
  import { PromptCarouselProps } from "./types/types.js";
2
- import * as react_jsx_runtime21 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime18 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/PromptCarousel/PromptCarousel.d.ts
5
5
  declare const PromptCarousel: ({
@@ -19,6 +19,6 @@ declare const PromptCarousel: ({
19
19
  "aria-labelledby": ariaLabelledBy,
20
20
  "aria-describedby": ariaDescribedBy,
21
21
  role
22
- }: PromptCarouselProps) => react_jsx_runtime21.JSX.Element;
22
+ }: PromptCarouselProps) => react_jsx_runtime18.JSX.Element;
23
23
  //#endregion
24
24
  export { PromptCarousel };
@@ -1,20 +1,22 @@
1
1
  import { Theme } from "../packages/components-v3/tokens/theme/theme.js";
2
- import { resolveTheme } from "../utils/resolveTheme.js";
2
+ import { Stack } from "../Stack/Stack.js";
3
+ import "../Stack/index.js";
3
4
  import { Container } from "../Container/Container.js";
4
5
  import "../Container/index.js";
6
+ import { resolveTheme } from "../utils/resolveTheme.js";
5
7
  import { PromptButtonVariant } from "../PromptButton/types/index.js";
6
8
  import { PromptButton } from "../PromptButton/PromptButton.js";
7
9
  import "../PromptButton/index.js";
8
10
  import { useCheckIsMobile } from "../utils/useCheckIsMobile.js";
9
11
  import { AnimationSpeed, PromptCarouselRows } from "./types/types.js";
10
- import { useCarouselRefs } from "./hooks/useCarouselRefs.js";
11
12
  import { useCarouselButtons } from "./hooks/useCarouselButtons.js";
12
- import { useCarouselAnimation } from "./hooks/useCarouselAnimation.js";
13
+ import { useCoordinatedScrollAnimation } from "./hooks/useCoordinatedScrollAnimation.js";
14
+ import { useScrollSync } from "./hooks/useScrollSync.js";
13
15
  import "./hooks/index.js";
14
- import { PromptCarouselComponents } from "./components/index.js";
15
16
  import { isAnimated, removeSpaces, shouldShowTwoRows } from "./utils/functions.js";
16
- import { useCallback } from "react";
17
- import { jsx } from "react/jsx-runtime";
17
+ import { useCallback, useRef } from "react";
18
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
19
+ import { useScrollContainer } from "react-indiana-drag-scroll";
18
20
 
19
21
  //#region src/components/PromptCarousel/PromptCarousel.tsx
20
22
  const PromptCarousel = ({ id, theme = Theme.GLOBAL_CUSTOM, testId, className, style, isLoading = false, promptButtonTexts, promptButtonType = PromptButtonVariant.LIGHT, boldFirstButton = false, handleButtonClick, promptCarouselRows = PromptCarouselRows.ALWAYS_ONE, animationSpeed = AnimationSpeed.NONE, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role = "region" }) => {
@@ -22,21 +24,34 @@ const PromptCarousel = ({ id, theme = Theme.GLOBAL_CUSTOM, testId, className, st
22
24
  const isAnimatedValue = isAnimated(animationSpeed);
23
25
  const shouldShowTwoRowsValue = shouldShowTwoRows(promptCarouselRows, isMobile);
24
26
  const finalTheme = resolveTheme(theme);
25
- const { firstRowScrollRef, firstRowStackRef, secondRowScrollRef, blockScrollRef, blockFirstRowStackRef, scrollRefs } = useCarouselRefs({ shouldShowTwoRows: shouldShowTwoRowsValue });
26
- const { isAnimationStopped, shouldUseRowScroll } = useCarouselAnimation({
27
- firstRowScrollRef,
28
- blockScrollRef,
29
- scrollRefs,
30
- animationSpeed,
31
- isAnimated: isAnimatedValue
27
+ const { ref: dragScrollRef1 } = useScrollContainer();
28
+ const { ref: dragScrollRef2 } = useScrollContainer();
29
+ const scrollContainerRef1 = useRef(null);
30
+ const scrollContainerRef2 = useRef(null);
31
+ const setRef1 = useCallback((el) => {
32
+ if (typeof dragScrollRef1 === "function") dragScrollRef1(el);
33
+ scrollContainerRef1.current = el;
34
+ }, [dragScrollRef1]);
35
+ const setRef2 = useCallback((el) => {
36
+ if (typeof dragScrollRef2 === "function") dragScrollRef2(el);
37
+ scrollContainerRef2.current = el;
38
+ }, [dragScrollRef2]);
39
+ const scrollContainerRefs = shouldShowTwoRowsValue ? [scrollContainerRef1, scrollContainerRef2] : [scrollContainerRef1];
40
+ useCoordinatedScrollAnimation({
41
+ scrollContainerRefs,
42
+ animationSpeed
43
+ });
44
+ useScrollSync({
45
+ scrollContainerRefs,
46
+ enabled: true
32
47
  });
33
48
  const { visibleButtonsFirstRow, visibleButtonsSecondRow } = useCarouselButtons({
34
49
  promptButtonTexts,
35
50
  shouldShowTwoRows: shouldShowTwoRowsValue
36
51
  });
37
- const renderButton = useCallback((text, index, repetitionNumber = void 0) => {
52
+ const renderButton = useCallback((text, index, duplicateIndex = 0) => {
38
53
  const textWithoutSpaces = removeSpaces(text);
39
- const buttonId = repetitionNumber ? `${id}-${textWithoutSpaces}${repetitionNumber}` : `${id}-${textWithoutSpaces}`;
54
+ const buttonId = duplicateIndex > 0 ? `${id}-${textWithoutSpaces}-duplicate-${duplicateIndex}` : `${id}-${textWithoutSpaces}`;
40
55
  const buttonKey = `button-${buttonId}`;
41
56
  return /* @__PURE__ */ jsx(PromptButton, {
42
57
  id: buttonId,
@@ -44,7 +59,7 @@ const PromptCarousel = ({ id, theme = Theme.GLOBAL_CUSTOM, testId, className, st
44
59
  variant: promptButtonType,
45
60
  theme: finalTheme,
46
61
  isLoading,
47
- bold: boldFirstButton && index === 0,
62
+ bold: boldFirstButton && index === 0 && duplicateIndex === 0,
48
63
  onClick: () => handleButtonClick?.(text)
49
64
  }, buttonKey);
50
65
  }, [
@@ -55,6 +70,11 @@ const PromptCarousel = ({ id, theme = Theme.GLOBAL_CUSTOM, testId, className, st
55
70
  isLoading,
56
71
  finalTheme
57
72
  ]);
73
+ const renderButtonRow = (buttons, startIndex) => /* @__PURE__ */ jsxs(Fragment, { children: [
74
+ buttons.map((text, i) => renderButton(text, startIndex + i, 0)),
75
+ isAnimatedValue && buttons.map((text, i) => renderButton(text, startIndex + i, 1)),
76
+ isAnimatedValue && buttons.map((text, i) => renderButton(text, startIndex + i, 2))
77
+ ] });
58
78
  const defaultAriaLabel = ariaLabel || "Prompt carousel with suggested actions";
59
79
  return /* @__PURE__ */ jsx(Container, {
60
80
  id,
@@ -67,25 +87,43 @@ const PromptCarousel = ({ id, theme = Theme.GLOBAL_CUSTOM, testId, className, st
67
87
  "aria-describedby": ariaDescribedBy,
68
88
  "aria-busy": isLoading,
69
89
  "aria-live": isAnimatedValue && !isLoading ? "polite" : void 0,
70
- children: shouldUseRowScroll ? /* @__PURE__ */ jsx(PromptCarouselComponents.CarouselContentWithRowScroll, {
71
- visibleButtonsFirstRow,
72
- visibleButtonsSecondRow,
73
- shouldShowTwoRows: shouldShowTwoRowsValue,
74
- renderButton,
75
- isAnimated: isAnimatedValue,
76
- isAnimationStopped,
77
- firstRowScrollRef,
78
- firstRowStackRef,
79
- secondRowScrollRef
80
- }) : /* @__PURE__ */ jsx(PromptCarouselComponents.CarouselContentWithBlockScroll, {
81
- visibleButtonsFirstRow,
82
- visibleButtonsSecondRow,
83
- shouldShowTwoRows: shouldShowTwoRowsValue,
84
- renderButton,
85
- isAnimated: isAnimatedValue,
86
- isAnimationStopped,
87
- blockScrollRef,
88
- blockFirstRowStackRef
90
+ children: /* @__PURE__ */ jsxs(Stack, {
91
+ direction: "column",
92
+ className: animationSpeed === AnimationSpeed.NONE ? "envive-tw-w-full" : "",
93
+ gap: "2",
94
+ children: [/* @__PURE__ */ jsx("div", {
95
+ className: "envive-tw-no-scrollbar envive-tw-relative envive-tw-w-full envive-tw-overflow-x-scroll",
96
+ ref: setRef1,
97
+ style: {
98
+ cursor: "grab",
99
+ userSelect: "none"
100
+ },
101
+ children: /* @__PURE__ */ jsx("div", {
102
+ className: "envive-tw-relative envive-tw-inline-block envive-tw-whitespace-nowrap",
103
+ children: /* @__PURE__ */ jsx(Stack, {
104
+ direction: "row",
105
+ gap: "2",
106
+ className: "envive-tw-pl-0 envive-tw-h-full envive-tw-items-center",
107
+ children: renderButtonRow(visibleButtonsFirstRow, 0)
108
+ })
109
+ })
110
+ }), shouldShowTwoRowsValue && /* @__PURE__ */ jsx("div", {
111
+ className: "envive-tw-no-scrollbar envive-tw-relative envive-tw-w-full envive-tw-overflow-x-scroll",
112
+ ref: setRef2,
113
+ style: {
114
+ cursor: "grab",
115
+ userSelect: "none"
116
+ },
117
+ children: /* @__PURE__ */ jsx("div", {
118
+ className: "envive-tw-relative envive-tw-inline-block envive-tw-whitespace-nowrap",
119
+ children: /* @__PURE__ */ jsx(Stack, {
120
+ direction: "row",
121
+ gap: "2",
122
+ className: "envive-tw-pl-0 envive-tw-h-full envive-tw-items-center",
123
+ children: renderButtonRow(visibleButtonsSecondRow, visibleButtonsFirstRow.length)
124
+ })
125
+ })
126
+ })]
89
127
  })
90
128
  });
91
129
  };
@@ -1,5 +1,3 @@
1
- const require_useHorizontalScrollAnimation = require('./useHorizontalScrollAnimation.cjs');
2
- const require_useButtonScrollPosition = require('./useButtonScrollPosition.cjs');
3
- const require_useCarouselRefs = require('./useCarouselRefs.cjs');
4
1
  const require_useCarouselButtons = require('./useCarouselButtons.cjs');
5
- const require_useCarouselAnimation = require('./useCarouselAnimation.cjs');
2
+ const require_useCoordinatedScrollAnimation = require('./useCoordinatedScrollAnimation.cjs');
3
+ const require_useScrollSync = require('./useScrollSync.cjs');
@@ -1,7 +1,5 @@
1
- import { useHorizontalScrollAnimation } from "./useHorizontalScrollAnimation.js";
2
- import { useButtonScrollPosition } from "./useButtonScrollPosition.js";
3
- import { useCarouselRefs } from "./useCarouselRefs.js";
4
1
  import { useCarouselButtons } from "./useCarouselButtons.js";
5
- import { useCarouselAnimation } from "./useCarouselAnimation.js";
2
+ import { useCoordinatedScrollAnimation } from "./useCoordinatedScrollAnimation.js";
3
+ import { useScrollSync } from "./useScrollSync.js";
6
4
 
7
5
  export { };