@envive-ai/react-toolkit-v3 0.3.22 → 0.3.24

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 (366) 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/CSSVariablesEditor/hooks/useGetCssVariablesOptions.cjs +1 -1
  6. package/dist/CSSVariablesEditor/hooks/useGetCssVariablesOptions.js +1 -1
  7. package/dist/CSSVariablesEditor/hooks/useGetCurrentMerchantColors.cjs +1 -1
  8. package/dist/CSSVariablesEditor/hooks/useGetCurrentMerchantColors.js +1 -1
  9. package/dist/CSSVariablesEditor/hooks/useGetDefaultCssVariables.cjs +4 -4
  10. package/dist/CSSVariablesEditor/hooks/useGetDefaultCssVariables.js +4 -4
  11. package/dist/CSSVariablesEditor/hooks/useHandleUpdateCssVars.cjs +3 -3
  12. package/dist/CSSVariablesEditor/hooks/useHandleUpdateCssVars.js +3 -3
  13. package/dist/Carousel/Carousel.d.cts +2 -2
  14. package/dist/Carousel/components/Badge.cjs +1 -1
  15. package/dist/Carousel/components/Badge.js +1 -1
  16. package/dist/Carousel/components/Container.cjs +1 -1
  17. package/dist/Carousel/components/Container.js +1 -1
  18. package/dist/ChatFooter/ChatFooter.cjs +7 -3
  19. package/dist/ChatFooter/ChatFooter.d.cts +7 -3
  20. package/dist/ChatFooter/ChatFooter.d.ts +7 -3
  21. package/dist/ChatFooter/ChatFooter.js +7 -3
  22. package/dist/ChatFooter/components/Layout.cjs +1 -1
  23. package/dist/ChatFooter/components/Layout.js +1 -1
  24. package/dist/ChatFooter/components/index.d.cts +10 -6
  25. package/dist/ChatFooter/components/index.d.ts +10 -6
  26. package/dist/ChatFooter/types/types.d.cts +16 -0
  27. package/dist/ChatFooter/types/types.d.ts +16 -0
  28. package/dist/ChatHeader/ChatHeader.cjs +2 -1
  29. package/dist/ChatHeader/ChatHeader.d.cts +2 -2
  30. package/dist/ChatHeader/ChatHeader.d.ts +2 -2
  31. package/dist/ChatHeader/ChatHeader.js +2 -1
  32. package/dist/ChatHeader/components/Handle.cjs +2 -2
  33. package/dist/ChatHeader/components/Handle.js +2 -2
  34. package/dist/ChatHeader/hooks/useGetHandleProperties.cjs +4 -2
  35. package/dist/ChatHeader/hooks/useGetHandleProperties.js +4 -2
  36. package/dist/ChatHeader/hooks/useGetLayoutProperties.cjs +1 -1
  37. package/dist/ChatHeader/hooks/useGetLayoutProperties.js +1 -1
  38. package/dist/ChatHeader/hooks/useGetToggleOptionProperties.cjs +1 -1
  39. package/dist/ChatHeader/hooks/useGetToggleOptionProperties.js +1 -1
  40. package/dist/ChatPreview/ChatPreview.cjs +6 -3
  41. package/dist/ChatPreview/ChatPreview.d.cts +2 -2
  42. package/dist/ChatPreview/ChatPreview.d.ts +2 -2
  43. package/dist/ChatPreview/ChatPreview.js +6 -3
  44. package/dist/ChatPreview/index.d.cts +2 -2
  45. package/dist/ChatPreview/index.d.ts +2 -2
  46. package/dist/ChatPreview/types/types.d.cts +13 -1
  47. package/dist/ChatPreview/types/types.d.ts +13 -1
  48. package/dist/ChatPreviewComparison/ChatPreviewComparison.cjs +6 -3
  49. package/dist/ChatPreviewComparison/ChatPreviewComparison.d.cts +2 -2
  50. package/dist/ChatPreviewComparison/ChatPreviewComparison.d.ts +2 -2
  51. package/dist/ChatPreviewComparison/ChatPreviewComparison.js +6 -3
  52. package/dist/ChatPreviewComparison/components/Layout.cjs +2 -2
  53. package/dist/ChatPreviewComparison/components/Layout.js +2 -2
  54. package/dist/ChatPreviewComparison/index.d.cts +2 -2
  55. package/dist/ChatPreviewComparison/index.d.ts +2 -2
  56. package/dist/ChatPreviewComparison/types/types.d.cts +13 -1
  57. package/dist/ChatPreviewComparison/types/types.d.ts +13 -1
  58. package/dist/ChatPreviewLoading/ChatPreviewLoading.cjs +7 -2
  59. package/dist/ChatPreviewLoading/ChatPreviewLoading.d.cts +4 -3
  60. package/dist/ChatPreviewLoading/ChatPreviewLoading.d.ts +2 -1
  61. package/dist/ChatPreviewLoading/ChatPreviewLoading.js +7 -2
  62. package/dist/ChatPreviewLoading/types/types.d.cts +4 -0
  63. package/dist/ChatPreviewLoading/types/types.d.ts +4 -0
  64. package/dist/Container/Container.d.cts +172 -172
  65. package/dist/Container/Container.d.ts +172 -172
  66. package/dist/DesignTokens/DesignTokensComponent.d.cts +2 -2
  67. package/dist/DesignTokens/DesignTokensComponent.d.ts +2 -2
  68. package/dist/DesignTokens/components/FontFamily.cjs +1 -1
  69. package/dist/DesignTokens/components/FontFamily.js +1 -1
  70. package/dist/DesignTokens/components/FontSize.cjs +1 -1
  71. package/dist/DesignTokens/components/FontSize.js +1 -1
  72. package/dist/DesignTokens/components/FontWeight.cjs +1 -1
  73. package/dist/DesignTokens/components/FontWeight.js +1 -1
  74. package/dist/DesignTokens/components/LetterSpacing.cjs +1 -1
  75. package/dist/DesignTokens/components/LetterSpacing.js +1 -1
  76. package/dist/DesignTokens/components/LineHeight.cjs +1 -1
  77. package/dist/DesignTokens/components/LineHeight.js +1 -1
  78. package/dist/DesignTokens/components/Typography.cjs +1 -1
  79. package/dist/DesignTokens/components/Typography.js +1 -1
  80. package/dist/Disclaimer/components/Container.cjs +2 -2
  81. package/dist/Disclaimer/components/Container.js +2 -2
  82. package/dist/DocumentRetrievalCard/DocumentRetrievalCard.d.ts +2 -2
  83. package/dist/DocumentRetrievalCard/components/Image.cjs +1 -1
  84. package/dist/DocumentRetrievalCard/components/Image.js +1 -1
  85. package/dist/DocumentRetrievalCard/components/Layout.cjs +1 -1
  86. package/dist/DocumentRetrievalCard/components/Layout.js +1 -1
  87. package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Icon.cjs +1 -1
  88. package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Icon.js +1 -1
  89. package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Label.cjs +1 -1
  90. package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Label.js +1 -1
  91. package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Layout.cjs +1 -1
  92. package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Layout.js +1 -1
  93. package/dist/FloatingButton/FloatingButton.d.cts +2 -2
  94. package/dist/FloatingButton/components/Button.cjs +1 -1
  95. package/dist/FloatingButton/components/Button.js +1 -1
  96. package/dist/FloatingButton/components/Container.cjs +1 -1
  97. package/dist/FloatingButton/components/Container.js +1 -1
  98. package/dist/FloatingButton/components/Wrapper.cjs +1 -1
  99. package/dist/FloatingButton/components/Wrapper.js +1 -1
  100. package/dist/FloatingChat/FloatingChat.cjs +32 -4
  101. package/dist/FloatingChat/FloatingChat.d.cts +2 -2
  102. package/dist/FloatingChat/FloatingChat.d.ts +2 -2
  103. package/dist/FloatingChat/FloatingChat.js +33 -5
  104. package/dist/FloatingChat/components/AgentMessage.cjs +2 -2
  105. package/dist/FloatingChat/components/AgentMessage.js +2 -2
  106. package/dist/FloatingChat/components/ChatMessages.cjs +1 -1
  107. package/dist/FloatingChat/components/ChatMessages.js +1 -1
  108. package/dist/FloatingChat/components/Layout.cjs +1 -1
  109. package/dist/FloatingChat/components/Layout.js +1 -1
  110. package/dist/FloatingChat/components/ProductResultsModal.cjs +1 -1
  111. package/dist/FloatingChat/components/ProductResultsModal.js +1 -1
  112. package/dist/FloatingChat/components/ResultsGridView.cjs +1 -1
  113. package/dist/FloatingChat/components/ResultsGridView.js +1 -1
  114. package/dist/FloatingChat/components/SalesAgentBadgeContent.cjs +1 -1
  115. package/dist/FloatingChat/components/SalesAgentBadgeContent.js +1 -1
  116. package/dist/FloatingChat/components/SlideChatContent.cjs +1 -1
  117. package/dist/FloatingChat/components/SlideChatContent.js +1 -1
  118. package/dist/FloatingChat/hooks/useChatSuggestions.cjs +3 -5
  119. package/dist/FloatingChat/hooks/useChatSuggestions.js +4 -6
  120. package/dist/Form/Form.cjs +1 -1
  121. package/dist/Form/Form.js +1 -1
  122. package/dist/Form/components/Layout.cjs +1 -1
  123. package/dist/Form/components/Layout.js +1 -1
  124. package/dist/Form/components/SubmitButtonItem.cjs +1 -1
  125. package/dist/Form/components/SubmitButtonItem.js +1 -1
  126. package/dist/Form/components/TextFieldItem.cjs +1 -1
  127. package/dist/Form/components/TextFieldItem.js +1 -1
  128. package/dist/FullPageSalesAgent/FullPageSalesAgent.cjs +29 -2
  129. package/dist/FullPageSalesAgent/FullPageSalesAgent.d.cts +5 -3
  130. package/dist/FullPageSalesAgent/FullPageSalesAgent.d.ts +5 -3
  131. package/dist/FullPageSalesAgent/FullPageSalesAgent.js +30 -3
  132. package/dist/FullPageSalesAgent/components/Layout.cjs +1 -1
  133. package/dist/FullPageSalesAgent/components/Layout.js +1 -1
  134. package/dist/Image/Image.cjs +1 -1
  135. package/dist/Image/Image.d.cts +2 -2
  136. package/dist/Image/Image.d.ts +2 -2
  137. package/dist/Image/Image.js +1 -1
  138. package/dist/ImageGallery/ImageGallery.d.cts +2 -2
  139. package/dist/ImageGallery/ImageGallery.d.ts +2 -2
  140. package/dist/ImageGallery/components/Layout.cjs +1 -1
  141. package/dist/ImageGallery/components/Layout.js +1 -1
  142. package/dist/ImageGallery/utils/functions.cjs +1 -1
  143. package/dist/ImageGallery/utils/functions.js +1 -1
  144. package/dist/MarkdownProcessor/MarkdownProcessor.d.cts +2 -2
  145. package/dist/Message/components/Layout.cjs +1 -1
  146. package/dist/Message/components/Layout.js +1 -1
  147. package/dist/OrderLookupCard/OrderLookupCard.cjs +1 -1
  148. package/dist/OrderLookupCard/OrderLookupCard.js +1 -1
  149. package/dist/OrderLookupCard/components/Layout.cjs +1 -1
  150. package/dist/OrderLookupCard/components/Layout.js +1 -1
  151. package/dist/OrderLookupCard/components/MoreProductsOverlay.cjs +1 -1
  152. package/dist/OrderLookupCard/components/MoreProductsOverlay.js +1 -1
  153. package/dist/OrderLookupCard/components/ProductImageGridItem.cjs +1 -1
  154. package/dist/OrderLookupCard/components/ProductImageGridItem.js +1 -1
  155. package/dist/OrderLookupCard/components/ProductImageItem.cjs +1 -1
  156. package/dist/OrderLookupCard/components/ProductImageItem.js +1 -1
  157. package/dist/OrderLookupCard/components/ProductImagesGrid.cjs +1 -1
  158. package/dist/OrderLookupCard/components/ProductImagesGrid.js +1 -1
  159. package/dist/OrderLookupCard/components/StatusLabel.cjs +1 -1
  160. package/dist/OrderLookupCard/components/StatusLabel.js +1 -1
  161. package/dist/OrderLookupCard/components/TrackOrderLink.cjs +1 -1
  162. package/dist/OrderLookupCard/components/TrackOrderLink.js +1 -1
  163. package/dist/ProductCard/ProductCard.cjs +6 -2
  164. package/dist/ProductCard/ProductCard.d.cts +6 -3
  165. package/dist/ProductCard/ProductCard.d.ts +6 -3
  166. package/dist/ProductCard/ProductCard.js +6 -2
  167. package/dist/ProductCard/index.d.cts +2 -2
  168. package/dist/ProductCard/index.d.ts +2 -2
  169. package/dist/ProductCard/types/index.d.cts +7 -1
  170. package/dist/ProductCard/types/index.d.ts +7 -1
  171. package/dist/PromptButton/PromptButton.cjs +1 -1
  172. package/dist/PromptButton/PromptButton.d.cts +2 -2
  173. package/dist/PromptButton/PromptButton.js +1 -1
  174. package/dist/PromptButton/components/Layout.cjs +1 -1
  175. package/dist/PromptButton/components/Layout.js +1 -1
  176. package/dist/PromptButton/components/Loading.cjs +1 -1
  177. package/dist/PromptButton/components/Loading.js +1 -1
  178. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.cjs +5 -2
  179. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.cts +6 -3
  180. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.ts +6 -3
  181. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.js +5 -2
  182. package/dist/PromptButtonCarouselWithImage/components/Layout.cjs +1 -1
  183. package/dist/PromptButtonCarouselWithImage/components/Layout.js +1 -1
  184. package/dist/PromptButtonCarouselWithImage/components/Skeleton.cjs +1 -1
  185. package/dist/PromptButtonCarouselWithImage/components/Skeleton.js +1 -1
  186. package/dist/PromptButtonCarouselWithImage/types/types.d.cts +12 -0
  187. package/dist/PromptButtonCarouselWithImage/types/types.d.ts +12 -0
  188. package/dist/PromptCarousel/PromptCarousel.cjs +1 -1
  189. package/dist/PromptCarousel/PromptCarousel.d.cts +2 -2
  190. package/dist/PromptCarousel/PromptCarousel.d.ts +2 -2
  191. package/dist/PromptCarousel/PromptCarousel.js +1 -1
  192. package/dist/PromptCarousel/hooks/useCarouselButtons.cjs +3 -2
  193. package/dist/PromptCarousel/hooks/useCarouselButtons.js +3 -2
  194. package/dist/ReviewCard/ReviewCard.d.cts +2 -2
  195. package/dist/ReviewCard/ReviewCard.d.ts +2 -2
  196. package/dist/ReviewCard/components/Container.cjs +1 -1
  197. package/dist/ReviewCard/components/Container.js +1 -1
  198. package/dist/ReviewCard/components/Rating.cjs +1 -2
  199. package/dist/ReviewCard/components/Rating.js +1 -2
  200. package/dist/ReviewCard/components/ReadMoreButton.cjs +1 -1
  201. package/dist/ReviewCard/components/ReadMoreButton.js +1 -1
  202. package/dist/ReviewCard/components/index.d.cts +6 -6
  203. package/dist/ReviewCard/components/index.d.ts +6 -6
  204. package/dist/SalesAgentProductCard/SalesAgentProductCard.d.cts +2 -2
  205. package/dist/SalesAgentProductCard/components/Container.cjs +1 -1
  206. package/dist/SalesAgentProductCard/components/Container.js +1 -1
  207. package/dist/SalesAgentProductCard/components/ProductImage.cjs +1 -1
  208. package/dist/SalesAgentProductCard/components/ProductImage.js +1 -1
  209. package/dist/SalesAgentProductCard/components/ProductName.cjs +1 -1
  210. package/dist/SalesAgentProductCard/components/ProductName.js +1 -1
  211. package/dist/SalesAgentProductCard/components/index.d.cts +8 -8
  212. package/dist/SocialProof/SocialProof.cjs +6 -3
  213. package/dist/SocialProof/SocialProof.d.cts +2 -2
  214. package/dist/SocialProof/SocialProof.d.ts +2 -2
  215. package/dist/SocialProof/SocialProof.js +6 -3
  216. package/dist/SocialProof/components/Headline.cjs +1 -1
  217. package/dist/SocialProof/components/Headline.js +1 -1
  218. package/dist/SocialProof/components/LayoutFourHorizontal.cjs +1 -1
  219. package/dist/SocialProof/components/LayoutFourHorizontal.js +1 -1
  220. package/dist/SocialProof/components/Textfield.cjs +5 -2
  221. package/dist/SocialProof/components/Textfield.js +5 -2
  222. package/dist/SocialProof/index.d.cts +2 -2
  223. package/dist/SocialProof/index.d.ts +2 -2
  224. package/dist/SocialProof/types/types.d.cts +13 -1
  225. package/dist/SocialProof/types/types.d.ts +13 -1
  226. package/dist/SparkleAnimation/SparkleAnimation.d.cts +2 -2
  227. package/dist/Stack/Stack.d.cts +2 -2
  228. package/dist/Stack/Stack.d.ts +2 -2
  229. package/dist/TextField/TextField.cjs +35 -3
  230. package/dist/TextField/TextField.d.cts +5 -1
  231. package/dist/TextField/TextField.d.ts +5 -1
  232. package/dist/TextField/TextField.js +35 -3
  233. package/dist/TextField/components/Input.cjs +1 -1
  234. package/dist/TextField/components/Input.js +1 -1
  235. package/dist/TextField/components/Layout.cjs +11 -8
  236. package/dist/TextField/components/Layout.js +11 -8
  237. package/dist/TextField/components/SendIcon.cjs +1 -1
  238. package/dist/TextField/components/SendIcon.js +1 -1
  239. package/dist/TextField/components/VoiceInputButton.cjs +45 -0
  240. package/dist/TextField/components/VoiceInputButton.js +39 -0
  241. package/dist/TextField/components/index.cjs +3 -1
  242. package/dist/TextField/components/index.js +3 -1
  243. package/dist/TextField/hooks/useGetMicButtonContainerProperties.cjs +20 -0
  244. package/dist/TextField/hooks/useGetMicButtonContainerProperties.js +19 -0
  245. package/dist/TextField/hooks/useGetSkeletonProperties.cjs +1 -1
  246. package/dist/TextField/hooks/useGetSkeletonProperties.js +1 -1
  247. package/dist/TextField/hooks/useVoiceInput.cjs +52 -0
  248. package/dist/TextField/hooks/useVoiceInput.js +50 -0
  249. package/dist/TextField/types/index.d.cts +11 -0
  250. package/dist/TextField/types/index.d.ts +11 -0
  251. package/dist/TextField/utils/getLayoutStateProperties.cjs +9 -1
  252. package/dist/TextField/utils/getLayoutStateProperties.js +8 -1
  253. package/dist/Title/Title.cjs +1 -1
  254. package/dist/Title/Title.js +1 -1
  255. package/dist/Title/components/Layout.cjs +1 -1
  256. package/dist/Title/components/Layout.js +1 -1
  257. package/dist/TitledPromptCarousel/TitledPromptCarousel.cjs +1 -1
  258. package/dist/TitledPromptCarousel/TitledPromptCarousel.d.cts +2 -2
  259. package/dist/TitledPromptCarousel/TitledPromptCarousel.js +1 -1
  260. package/dist/Tokens/index.cjs +6 -6
  261. package/dist/Tokens/index.js +6 -6
  262. package/dist/TypingAnimation/TypingAnimation.cjs +7 -3
  263. package/dist/TypingAnimation/TypingAnimation.d.cts +2 -2
  264. package/dist/TypingAnimation/TypingAnimation.d.ts +2 -2
  265. package/dist/TypingAnimation/TypingAnimation.js +7 -3
  266. package/dist/TypingAnimation/index.d.cts +2 -2
  267. package/dist/TypingAnimation/index.d.ts +2 -2
  268. package/dist/TypingAnimation/types/index.d.cts +13 -1
  269. package/dist/TypingAnimation/types/index.d.ts +13 -1
  270. package/dist/Typography/Typography.d.cts +4 -4
  271. package/dist/Typography/Typography.d.ts +4 -4
  272. package/dist/WelcomeMessage/components/Container.cjs +1 -1
  273. package/dist/WelcomeMessage/components/Container.js +1 -1
  274. package/dist/WidgetTextField/WidgetTextField.cjs +39 -7
  275. package/dist/WidgetTextField/WidgetTextField.d.cts +7 -3
  276. package/dist/WidgetTextField/WidgetTextField.d.ts +7 -3
  277. package/dist/WidgetTextField/WidgetTextField.js +33 -2
  278. package/dist/WidgetTextField/components/Container.cjs +32 -26
  279. package/dist/WidgetTextField/components/Container.js +32 -26
  280. package/dist/WidgetTextField/components/Skeleton.cjs +1 -1
  281. package/dist/WidgetTextField/components/Skeleton.js +1 -1
  282. package/dist/WidgetTextField/hooks/useGetContainerProperties.cjs +5 -3
  283. package/dist/WidgetTextField/hooks/useGetContainerProperties.js +5 -3
  284. package/dist/WidgetTextField/hooks/useGetMicWidgetButtonProperties.cjs +20 -0
  285. package/dist/WidgetTextField/hooks/useGetMicWidgetButtonProperties.js +19 -0
  286. package/dist/WidgetTextField/types/types.d.cts +21 -0
  287. package/dist/WidgetTextField/types/types.d.ts +21 -0
  288. package/dist/WidgetWrapper/WidgetWrapper.cjs +1 -1
  289. package/dist/WidgetWrapper/WidgetWrapper.d.cts +2 -2
  290. package/dist/WidgetWrapper/WidgetWrapper.js +1 -1
  291. package/dist/WidgetWrapper/hooks/useGetWrapperProperties.cjs +1 -1
  292. package/dist/WidgetWrapper/hooks/useGetWrapperProperties.js +1 -1
  293. package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.cts +2 -2
  294. package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.ts +2 -2
  295. package/dist/node_modules/jotai/esm/react.cjs +87 -0
  296. package/dist/node_modules/jotai/esm/react.js +88 -2
  297. package/dist/node_modules/jotai/esm/vanilla/internals.cjs +2 -1
  298. package/dist/node_modules/jotai/esm/vanilla/internals.js +1 -1
  299. package/dist/packages/components-v3/tokens/typography/typography.cjs +1 -1
  300. package/dist/packages/components-v3/tokens/typography/typography.js +1 -1
  301. package/dist/styles.css +1 -1
  302. package/dist/utils/resolveTheme.cjs +1 -1
  303. package/dist/utils/resolveTheme.js +1 -1
  304. package/package.json +2 -1
  305. package/src/components/ChatFooter/ChatFooter.tsx +8 -0
  306. package/src/components/ChatFooter/__tests__/ChatFooter.test.tsx +43 -0
  307. package/src/components/ChatFooter/components/TextField.tsx +12 -0
  308. package/src/components/ChatFooter/types/types.ts +17 -0
  309. package/src/components/ChatHeader/ChatHeader.tsx +1 -0
  310. package/src/components/ChatHeader/components/Handle.tsx +7 -2
  311. package/src/components/ChatHeader/hooks/useGetHandleProperties.ts +5 -1
  312. package/src/components/ChatHeader/hooks/useGetToggleOptionProperties.ts +1 -1
  313. package/src/components/ChatHeader/types/index.ts +1 -0
  314. package/src/components/ChatPreview/ChatPreview.tsx +13 -2
  315. package/src/components/ChatPreview/__tests__/ChatPreview.test.tsx +44 -0
  316. package/src/components/ChatPreview/index.ts +1 -1
  317. package/src/components/ChatPreview/types/types.ts +13 -0
  318. package/src/components/ChatPreviewComparison/ChatPreviewComparison.tsx +6 -0
  319. package/src/components/ChatPreviewComparison/__tests__/ChatPreviewComparison.test.tsx +44 -0
  320. package/src/components/ChatPreviewComparison/index.ts +1 -1
  321. package/src/components/ChatPreviewComparison/types/types.ts +13 -0
  322. package/src/components/ChatPreviewLoading/ChatPreviewLoading.tsx +5 -3
  323. package/src/components/ChatPreviewLoading/__tests__/ChatPreviewLoading.test.tsx +40 -0
  324. package/src/components/ChatPreviewLoading/types/types.ts +5 -0
  325. package/src/components/Disclaimer/components/Container.tsx +1 -1
  326. package/src/components/FloatingChat/FloatingChat.tsx +43 -7
  327. package/src/components/FloatingChat/components/SlideChatContent.tsx +1 -1
  328. package/src/components/FloatingChat/hooks/useChatSuggestions.ts +8 -12
  329. package/src/components/FullPageSalesAgent/FullPageSalesAgent.tsx +43 -7
  330. package/src/components/ProductCard/ProductCard.tsx +7 -0
  331. package/src/components/ProductCard/__tests__/ProductCard.test.tsx +33 -0
  332. package/src/components/ProductCard/index.ts +1 -1
  333. package/src/components/ProductCard/types/index.ts +6 -0
  334. package/src/components/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.tsx +6 -0
  335. package/src/components/PromptButtonCarouselWithImage/__tests__/PromptButtonCarouselWithImage.test.tsx +34 -0
  336. package/src/components/PromptButtonCarouselWithImage/types/types.ts +12 -0
  337. package/src/components/PromptCarousel/__tests__/PromptCarousel.test.tsx +19 -0
  338. package/src/components/PromptCarousel/hooks/useCarouselButtons.ts +4 -2
  339. package/src/components/ReviewCard/components/Rating.tsx +0 -1
  340. package/src/components/SocialProof/SocialProof.tsx +6 -0
  341. package/src/components/SocialProof/__tests__/SocialProof.test.tsx +58 -0
  342. package/src/components/SocialProof/components/Textfield.tsx +9 -0
  343. package/src/components/SocialProof/index.ts +1 -1
  344. package/src/components/SocialProof/types/types.ts +13 -0
  345. package/src/components/TextField/TextField.tsx +49 -0
  346. package/src/components/TextField/__tests__/TextField.test.tsx +3 -3
  347. package/src/components/TextField/__tests__/VoiceInputButton.test.tsx +175 -0
  348. package/src/components/TextField/components/Layout.tsx +24 -17
  349. package/src/components/TextField/components/VoiceInputButton.tsx +69 -0
  350. package/src/components/TextField/components/index.ts +2 -0
  351. package/src/components/TextField/hooks/useGetMicButtonContainerProperties.ts +38 -0
  352. package/src/components/TextField/hooks/useGetSkeletonProperties.ts +1 -1
  353. package/src/components/TextField/hooks/useVoiceInput.ts +75 -0
  354. package/src/components/TextField/types/index.ts +11 -0
  355. package/src/components/TextField/utils/getLayoutStateProperties.ts +8 -0
  356. package/src/components/TypingAnimation/TypingAnimation.tsx +7 -0
  357. package/src/components/TypingAnimation/__tests__/TypingAnimation.test.tsx +47 -0
  358. package/src/components/TypingAnimation/index.ts +1 -1
  359. package/src/components/TypingAnimation/types/index.ts +14 -1
  360. package/src/components/WidgetTextField/WidgetTextField.tsx +47 -0
  361. package/src/components/WidgetTextField/__tests__/WidgetTextField.test.tsx +119 -4
  362. package/src/components/WidgetTextField/components/Container.tsx +40 -27
  363. package/src/components/WidgetTextField/hooks/useGetContainerProperties.ts +16 -4
  364. package/src/components/WidgetTextField/hooks/useGetMicWidgetButtonProperties.ts +38 -0
  365. package/src/components/WidgetTextField/types/types.ts +21 -0
  366. package/src/components/WidgetWrapper/hooks/useGetWrapperProperties.ts +1 -1
@@ -1,10 +1,10 @@
1
1
  import { StackProps } from "./types/index.js";
2
- import * as react8 from "react";
2
+ import * as react5 from "react";
3
3
 
4
4
  //#region src/components/Stack/Stack.d.ts
5
5
  /**
6
6
  * Stack component for laying out children in a flexible container with gap.
7
7
  */
8
- declare const Stack: react8.ForwardRefExoticComponent<StackProps & react8.RefAttributes<HTMLDivElement>>;
8
+ declare const Stack: react5.ForwardRefExoticComponent<StackProps & react5.RefAttributes<HTMLDivElement>>;
9
9
  //#endregion
10
10
  export { Stack };
@@ -2,26 +2,43 @@ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
2
  const require_theme = require('../packages/components-v3/tokens/theme/theme.cjs');
3
3
  const require_resolveTheme = require('../utils/resolveTheme.cjs');
4
4
  const require_index = require('./components/index.cjs');
5
+ const require_useGetMicButtonContainerProperties = require('./hooks/useGetMicButtonContainerProperties.cjs');
5
6
  const require_useGetSkeletonProperties = require('./hooks/useGetSkeletonProperties.cjs');
6
7
  const require_useTextFieldFocus = require('./hooks/useTextFieldFocus.cjs');
7
8
  const require_useTextFieldSubmit = require('./hooks/useTextFieldSubmit.cjs');
8
9
  const require_useTextFieldValue = require('./hooks/useTextFieldValue.cjs');
10
+ const require_useVoiceInput = require('./hooks/useVoiceInput.cjs');
11
+ let react = require("react");
12
+ let react_jsx_runtime = require("react/jsx-runtime");
9
13
  let classnames = require("classnames");
10
14
  classnames = require_rolldown_runtime.__toESM(classnames);
11
- let react_jsx_runtime = require("react/jsx-runtime");
12
15
 
13
16
  //#region src/components/TextField/TextField.tsx
14
17
  /**
15
18
  * Renders a text input field with a send icon.
16
19
  * Supports three visual themes: Standard, Modern, and Minimal.
17
20
  */
18
- const TextField = ({ theme = require_theme.Theme.GLOBAL_CUSTOM, placeholder, value: controlledValue, onChange, onSubmit, onFocus, disabled = false, id, testId, className, style, ariaLabel, isLoading = false }) => {
21
+ const TextField = ({ theme = require_theme.Theme.GLOBAL_CUSTOM, placeholder, value: controlledValue, onChange, onSubmit, onFocus, disabled = false, id, testId, className, inputClassName, style, ariaLabel, isLoading = false, enableVoiceInput = false, onTranscriptionStarted, onTranscriptionCompleted }) => {
19
22
  const { currentValue, hasValue, handleChange, resetValue } = require_useTextFieldValue.useTextFieldValue(controlledValue, onChange);
20
23
  const { isFocused, handleFocus, handleBlur } = require_useTextFieldFocus.useTextFieldFocus();
21
24
  const { handleSubmit, handleKeyDown } = require_useTextFieldSubmit.useTextFieldSubmit(onSubmit, hasValue, disabled, isLoading, currentValue, resetValue);
25
+ const { isListening, handleToggleListening, handleAbortListening, browserSupportsSpeechRecognition } = require_useVoiceInput.useVoiceInput({
26
+ onTranscriptionStarted,
27
+ onTranscriptionCompleted: (0, react.useCallback)((transcript) => {
28
+ resetValue();
29
+ handleChange(transcript);
30
+ onTranscriptionCompleted?.(transcript);
31
+ }, [
32
+ handleChange,
33
+ resetValue,
34
+ onTranscriptionCompleted
35
+ ]),
36
+ disabled
37
+ });
22
38
  const handleInternalFocus = () => {
23
39
  handleFocus();
24
40
  onFocus?.();
41
+ handleAbortListening();
25
42
  };
26
43
  const { skeletonClass } = require_useGetSkeletonProperties.useGetSkeletonProperties(isLoading);
27
44
  const resolvedTheme = require_resolveTheme.resolveTheme(theme);
@@ -34,7 +51,8 @@ const TextField = ({ theme = require_theme.Theme.GLOBAL_CUSTOM, placeholder, val
34
51
  onFocus: handleInternalFocus,
35
52
  onBlur: handleBlur,
36
53
  disabled: disabled || isLoading,
37
- ariaLabel
54
+ ariaLabel,
55
+ className: inputClassName
38
56
  });
39
57
  const sendIcon = !isLoading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.TextFieldComponents.SendIcon, {
40
58
  theme: resolvedTheme,
@@ -43,10 +61,24 @@ const TextField = ({ theme = require_theme.Theme.GLOBAL_CUSTOM, placeholder, val
43
61
  onClick: handleSubmit,
44
62
  ariaLabel
45
63
  }) : null;
64
+ const { micButtonContainerClasses } = require_useGetMicButtonContainerProperties.useGetMicButtonContainerProperties({
65
+ theme: resolvedTheme,
66
+ isListening
67
+ });
68
+ const voiceInputButtonClassName = (0, classnames.default)(micButtonContainerClasses, skeletonClass);
69
+ const voiceInputButton = enableVoiceInput && browserSupportsSpeechRecognition ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.TextFieldComponents.VoiceInputButton, {
70
+ theme: resolvedTheme,
71
+ isListening,
72
+ onToggleListening: handleToggleListening,
73
+ ariaLabel,
74
+ isLoading,
75
+ className: voiceInputButtonClassName
76
+ }) : null;
46
77
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.TextFieldComponents.Layout, {
47
78
  theme: resolvedTheme,
48
79
  input,
49
80
  sendIcon,
81
+ voiceInputButton,
50
82
  isFocused,
51
83
  hasValue,
52
84
  disabled,
@@ -17,9 +17,13 @@ declare const TextField: ({
17
17
  id,
18
18
  testId,
19
19
  className,
20
+ inputClassName,
20
21
  style,
21
22
  ariaLabel,
22
- isLoading
23
+ isLoading,
24
+ enableVoiceInput,
25
+ onTranscriptionStarted,
26
+ onTranscriptionCompleted
23
27
  }: TextFieldProps) => JSX.Element;
24
28
  //#endregion
25
29
  export { TextField };
@@ -17,9 +17,13 @@ declare const TextField: ({
17
17
  id,
18
18
  testId,
19
19
  className,
20
+ inputClassName,
20
21
  style,
21
22
  ariaLabel,
22
- isLoading
23
+ isLoading,
24
+ enableVoiceInput,
25
+ onTranscriptionStarted,
26
+ onTranscriptionCompleted
23
27
  }: TextFieldProps) => JSX.Element;
24
28
  //#endregion
25
29
  export { TextField };
@@ -1,25 +1,42 @@
1
1
  import { Theme } from "../packages/components-v3/tokens/theme/theme.js";
2
2
  import { resolveTheme } from "../utils/resolveTheme.js";
3
3
  import { TextFieldComponents } from "./components/index.js";
4
+ import { useGetMicButtonContainerProperties } from "./hooks/useGetMicButtonContainerProperties.js";
4
5
  import { useGetSkeletonProperties } from "./hooks/useGetSkeletonProperties.js";
5
6
  import { useTextFieldFocus } from "./hooks/useTextFieldFocus.js";
6
7
  import { useTextFieldSubmit } from "./hooks/useTextFieldSubmit.js";
7
8
  import { useTextFieldValue } from "./hooks/useTextFieldValue.js";
8
- import classNames from "classnames";
9
+ import { useVoiceInput } from "./hooks/useVoiceInput.js";
10
+ import { useCallback } from "react";
9
11
  import { jsx } from "react/jsx-runtime";
12
+ import classNames from "classnames";
10
13
 
11
14
  //#region src/components/TextField/TextField.tsx
12
15
  /**
13
16
  * Renders a text input field with a send icon.
14
17
  * Supports three visual themes: Standard, Modern, and Minimal.
15
18
  */
16
- const TextField = ({ theme = Theme.GLOBAL_CUSTOM, placeholder, value: controlledValue, onChange, onSubmit, onFocus, disabled = false, id, testId, className, style, ariaLabel, isLoading = false }) => {
19
+ const TextField = ({ theme = Theme.GLOBAL_CUSTOM, placeholder, value: controlledValue, onChange, onSubmit, onFocus, disabled = false, id, testId, className, inputClassName, style, ariaLabel, isLoading = false, enableVoiceInput = false, onTranscriptionStarted, onTranscriptionCompleted }) => {
17
20
  const { currentValue, hasValue, handleChange, resetValue } = useTextFieldValue(controlledValue, onChange);
18
21
  const { isFocused, handleFocus, handleBlur } = useTextFieldFocus();
19
22
  const { handleSubmit, handleKeyDown } = useTextFieldSubmit(onSubmit, hasValue, disabled, isLoading, currentValue, resetValue);
23
+ const { isListening, handleToggleListening, handleAbortListening, browserSupportsSpeechRecognition } = useVoiceInput({
24
+ onTranscriptionStarted,
25
+ onTranscriptionCompleted: useCallback((transcript) => {
26
+ resetValue();
27
+ handleChange(transcript);
28
+ onTranscriptionCompleted?.(transcript);
29
+ }, [
30
+ handleChange,
31
+ resetValue,
32
+ onTranscriptionCompleted
33
+ ]),
34
+ disabled
35
+ });
20
36
  const handleInternalFocus = () => {
21
37
  handleFocus();
22
38
  onFocus?.();
39
+ handleAbortListening();
23
40
  };
24
41
  const { skeletonClass } = useGetSkeletonProperties(isLoading);
25
42
  const resolvedTheme = resolveTheme(theme);
@@ -32,7 +49,8 @@ const TextField = ({ theme = Theme.GLOBAL_CUSTOM, placeholder, value: controlled
32
49
  onFocus: handleInternalFocus,
33
50
  onBlur: handleBlur,
34
51
  disabled: disabled || isLoading,
35
- ariaLabel
52
+ ariaLabel,
53
+ className: inputClassName
36
54
  });
37
55
  const sendIcon = !isLoading ? /* @__PURE__ */ jsx(TextFieldComponents.SendIcon, {
38
56
  theme: resolvedTheme,
@@ -41,10 +59,24 @@ const TextField = ({ theme = Theme.GLOBAL_CUSTOM, placeholder, value: controlled
41
59
  onClick: handleSubmit,
42
60
  ariaLabel
43
61
  }) : null;
62
+ const { micButtonContainerClasses } = useGetMicButtonContainerProperties({
63
+ theme: resolvedTheme,
64
+ isListening
65
+ });
66
+ const voiceInputButtonClassName = classNames(micButtonContainerClasses, skeletonClass);
67
+ const voiceInputButton = enableVoiceInput && browserSupportsSpeechRecognition ? /* @__PURE__ */ jsx(TextFieldComponents.VoiceInputButton, {
68
+ theme: resolvedTheme,
69
+ isListening,
70
+ onToggleListening: handleToggleListening,
71
+ ariaLabel,
72
+ isLoading,
73
+ className: voiceInputButtonClassName
74
+ }) : null;
44
75
  return /* @__PURE__ */ jsx(TextFieldComponents.Layout, {
45
76
  theme: resolvedTheme,
46
77
  input,
47
78
  sendIcon,
79
+ voiceInputButton,
48
80
  isFocused,
49
81
  hasValue,
50
82
  disabled,
@@ -1,9 +1,9 @@
1
1
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
2
  const require_getInputClasses = require('../utils/getInputClasses.cjs');
3
3
  const require_createInputChangeHandler = require('../utils/createInputChangeHandler.cjs');
4
+ let react_jsx_runtime = require("react/jsx-runtime");
4
5
  let classnames = require("classnames");
5
6
  classnames = require_rolldown_runtime.__toESM(classnames);
6
- let react_jsx_runtime = require("react/jsx-runtime");
7
7
 
8
8
  //#region src/components/TextField/components/Input.tsx
9
9
  const Input = ({ theme, placeholder, value, onChange, onKeyDown, onFocus, onBlur, disabled = false, id, testId, className, style, ariaLabel }) => {
@@ -1,7 +1,7 @@
1
1
  import { getInputClasses } from "../utils/getInputClasses.js";
2
2
  import { createInputChangeHandler } from "../utils/createInputChangeHandler.js";
3
- import classNames from "classnames";
4
3
  import { jsx } from "react/jsx-runtime";
4
+ import classNames from "classnames";
5
5
 
6
6
  //#region src/components/TextField/components/Input.tsx
7
7
  const Input = ({ theme, placeholder, value, onChange, onKeyDown, onFocus, onBlur, disabled = false, id, testId, className, style, ariaLabel }) => {
@@ -1,20 +1,23 @@
1
1
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
2
  const require_useGetContainerProperties = require('../hooks/useGetContainerProperties.cjs');
3
3
  const require_getLayoutStateProperties = require('../utils/getLayoutStateProperties.cjs');
4
+ let react_jsx_runtime = require("react/jsx-runtime");
4
5
  let classnames = require("classnames");
5
6
  classnames = require_rolldown_runtime.__toESM(classnames);
6
- let react_jsx_runtime = require("react/jsx-runtime");
7
7
 
8
8
  //#region src/components/TextField/components/Layout.tsx
9
- const Layout = ({ theme, input, sendIcon, isFocused, hasValue, disabled = false, id, testId, className, style }) => {
9
+ const Layout = ({ theme, input, sendIcon, voiceInputButton, isFocused, hasValue, disabled = false, id, testId, className, style }) => {
10
10
  const { containerLayoutClasses, containerDefaultClasses, containerBorderClasses, containerBorderActiveClasses, containerFocusClasses, containerHoverClasses, containerDisabledClasses } = require_useGetContainerProperties.useGetContainerProperties({ theme });
11
- const { isActive, shouldShowFocus, shouldShowHover } = require_getLayoutStateProperties.getLayoutStateProperties(hasValue, isFocused, disabled);
11
+ const { isActive, shouldShowFocus, shouldShowHover, containerClasses } = require_getLayoutStateProperties.getLayoutStateProperties(theme, hasValue, isFocused, disabled);
12
12
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13
- id,
14
- "data-testid": testId,
15
- className: (0, classnames.default)(containerLayoutClasses, containerDefaultClasses, isActive ? containerBorderActiveClasses : containerBorderClasses, shouldShowFocus && containerFocusClasses, shouldShowHover && containerHoverClasses, disabled && containerDisabledClasses, className),
16
- style,
17
- children: [input, sendIcon]
13
+ className: containerClasses,
14
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15
+ id,
16
+ "data-testid": testId,
17
+ className: (0, classnames.default)("envive-tw-flex-1", containerLayoutClasses, containerDefaultClasses, isActive ? containerBorderActiveClasses : containerBorderClasses, shouldShowFocus && containerFocusClasses, shouldShowHover && containerHoverClasses, disabled && containerDisabledClasses, className),
18
+ style,
19
+ children: [input, sendIcon]
20
+ }), voiceInputButton]
18
21
  });
19
22
  };
20
23
 
@@ -1,18 +1,21 @@
1
1
  import { useGetContainerProperties } from "../hooks/useGetContainerProperties.js";
2
2
  import { getLayoutStateProperties } from "../utils/getLayoutStateProperties.js";
3
- import classNames from "classnames";
4
3
  import { jsxs } from "react/jsx-runtime";
4
+ import classNames from "classnames";
5
5
 
6
6
  //#region src/components/TextField/components/Layout.tsx
7
- const Layout = ({ theme, input, sendIcon, isFocused, hasValue, disabled = false, id, testId, className, style }) => {
7
+ const Layout = ({ theme, input, sendIcon, voiceInputButton, isFocused, hasValue, disabled = false, id, testId, className, style }) => {
8
8
  const { containerLayoutClasses, containerDefaultClasses, containerBorderClasses, containerBorderActiveClasses, containerFocusClasses, containerHoverClasses, containerDisabledClasses } = useGetContainerProperties({ theme });
9
- const { isActive, shouldShowFocus, shouldShowHover } = getLayoutStateProperties(hasValue, isFocused, disabled);
9
+ const { isActive, shouldShowFocus, shouldShowHover, containerClasses } = getLayoutStateProperties(theme, hasValue, isFocused, disabled);
10
10
  return /* @__PURE__ */ jsxs("div", {
11
- id,
12
- "data-testid": testId,
13
- className: classNames(containerLayoutClasses, containerDefaultClasses, isActive ? containerBorderActiveClasses : containerBorderClasses, shouldShowFocus && containerFocusClasses, shouldShowHover && containerHoverClasses, disabled && containerDisabledClasses, className),
14
- style,
15
- children: [input, sendIcon]
11
+ className: containerClasses,
12
+ children: [/* @__PURE__ */ jsxs("div", {
13
+ id,
14
+ "data-testid": testId,
15
+ className: classNames("envive-tw-flex-1", containerLayoutClasses, containerDefaultClasses, isActive ? containerBorderActiveClasses : containerBorderClasses, shouldShowFocus && containerFocusClasses, shouldShowHover && containerHoverClasses, disabled && containerDisabledClasses, className),
16
+ style,
17
+ children: [input, sendIcon]
18
+ }), voiceInputButton]
16
19
  });
17
20
  };
18
21
 
@@ -1,9 +1,9 @@
1
1
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
2
  const require_getSendIconElement = require('../utils/getSendIconElement.cjs');
3
3
  const require_useSendIconHandlers = require('../hooks/useSendIconHandlers.cjs');
4
+ let react_jsx_runtime = require("react/jsx-runtime");
4
5
  let classnames = require("classnames");
5
6
  classnames = require_rolldown_runtime.__toESM(classnames);
6
- let react_jsx_runtime = require("react/jsx-runtime");
7
7
 
8
8
  //#region src/components/TextField/components/SendIcon.tsx
9
9
  const SendIcon = ({ theme, hasValue, disabled = false, onClick, className, style, ariaLabel }) => {
@@ -1,7 +1,7 @@
1
1
  import { getSendIconElement } from "../utils/getSendIconElement.js";
2
2
  import { useSendIconHandlers } from "../hooks/useSendIconHandlers.js";
3
- import classNames from "classnames";
4
3
  import { jsx } from "react/jsx-runtime";
4
+ import classNames from "classnames";
5
5
 
6
6
  //#region src/components/TextField/components/SendIcon.tsx
7
7
  const SendIcon = ({ theme, hasValue, disabled = false, onClick, className, style, ariaLabel }) => {
@@ -0,0 +1,45 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_theme = require('../../packages/components-v3/tokens/theme/theme.cjs');
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ let __envive_ai_react_icons_Mic = require("@envive-ai/react-icons/Mic");
5
+ __envive_ai_react_icons_Mic = require_rolldown_runtime.__toESM(__envive_ai_react_icons_Mic);
6
+ let __envive_ai_react_icons_MicThin = require("@envive-ai/react-icons/MicThin");
7
+ __envive_ai_react_icons_MicThin = require_rolldown_runtime.__toESM(__envive_ai_react_icons_MicThin);
8
+ let __envive_ai_react_icons_Stop = require("@envive-ai/react-icons/Stop");
9
+ __envive_ai_react_icons_Stop = require_rolldown_runtime.__toESM(__envive_ai_react_icons_Stop);
10
+ let __envive_ai_react_icons_StopSharp = require("@envive-ai/react-icons/StopSharp");
11
+ __envive_ai_react_icons_StopSharp = require_rolldown_runtime.__toESM(__envive_ai_react_icons_StopSharp);
12
+ let __envive_ai_react_icons_StopThin = require("@envive-ai/react-icons/StopThin");
13
+ __envive_ai_react_icons_StopThin = require_rolldown_runtime.__toESM(__envive_ai_react_icons_StopThin);
14
+
15
+ //#region src/components/TextField/components/VoiceInputButton.tsx
16
+ const VoiceInputButton = ({ theme, isListening, onToggleListening, disabled = false, className, style, ariaLabel, isLoading = false }) => {
17
+ const getMicIcon = (iconTheme) => {
18
+ switch (iconTheme) {
19
+ case require_theme.Theme.MODERN: return __envive_ai_react_icons_MicThin.default;
20
+ default: return __envive_ai_react_icons_Mic.default;
21
+ }
22
+ };
23
+ const getStopIcon = (iconTheme) => {
24
+ switch (iconTheme) {
25
+ case require_theme.Theme.MODERN: return __envive_ai_react_icons_StopThin.default;
26
+ case require_theme.Theme.MINIMAL: return __envive_ai_react_icons_StopSharp.default;
27
+ default: return __envive_ai_react_icons_Stop.default;
28
+ }
29
+ };
30
+ const MicIcon = getMicIcon(theme);
31
+ const StopIcon = getStopIcon(theme);
32
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
33
+ type: "button",
34
+ onClick: onToggleListening,
35
+ disabled: disabled || isLoading,
36
+ className,
37
+ style,
38
+ "aria-label": ariaLabel,
39
+ tabIndex: disabled || isLoading ? -1 : 0,
40
+ children: isListening ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StopIcon, { className: "envive-tw-h-[24px]" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MicIcon, { className: "envive-tw-h-[24px]" })
41
+ });
42
+ };
43
+
44
+ //#endregion
45
+ exports.VoiceInputButton = VoiceInputButton;
@@ -0,0 +1,39 @@
1
+ import { Theme } from "../../packages/components-v3/tokens/theme/theme.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import Mic from "@envive-ai/react-icons/Mic";
4
+ import MicThin from "@envive-ai/react-icons/MicThin";
5
+ import Stop from "@envive-ai/react-icons/Stop";
6
+ import StopSharp from "@envive-ai/react-icons/StopSharp";
7
+ import StopThin from "@envive-ai/react-icons/StopThin";
8
+
9
+ //#region src/components/TextField/components/VoiceInputButton.tsx
10
+ const VoiceInputButton = ({ theme, isListening, onToggleListening, disabled = false, className, style, ariaLabel, isLoading = false }) => {
11
+ const getMicIcon = (iconTheme) => {
12
+ switch (iconTheme) {
13
+ case Theme.MODERN: return MicThin;
14
+ default: return Mic;
15
+ }
16
+ };
17
+ const getStopIcon = (iconTheme) => {
18
+ switch (iconTheme) {
19
+ case Theme.MODERN: return StopThin;
20
+ case Theme.MINIMAL: return StopSharp;
21
+ default: return Stop;
22
+ }
23
+ };
24
+ const MicIcon = getMicIcon(theme);
25
+ const StopIcon = getStopIcon(theme);
26
+ return /* @__PURE__ */ jsx("button", {
27
+ type: "button",
28
+ onClick: onToggleListening,
29
+ disabled: disabled || isLoading,
30
+ className,
31
+ style,
32
+ "aria-label": ariaLabel,
33
+ tabIndex: disabled || isLoading ? -1 : 0,
34
+ children: isListening ? /* @__PURE__ */ jsx(StopIcon, { className: "envive-tw-h-[24px]" }) : /* @__PURE__ */ jsx(MicIcon, { className: "envive-tw-h-[24px]" })
35
+ });
36
+ };
37
+
38
+ //#endregion
39
+ export { VoiceInputButton };
@@ -1,12 +1,14 @@
1
1
  const require_Layout = require('./Layout.cjs');
2
2
  const require_Input = require('./Input.cjs');
3
3
  const require_SendIcon = require('./SendIcon.cjs');
4
+ const require_VoiceInputButton = require('./VoiceInputButton.cjs');
4
5
 
5
6
  //#region src/components/TextField/components/index.ts
6
7
  const TextFieldComponents = {
7
8
  Layout: require_Layout.Layout,
8
9
  Input: require_Input.Input,
9
- SendIcon: require_SendIcon.SendIcon
10
+ SendIcon: require_SendIcon.SendIcon,
11
+ VoiceInputButton: require_VoiceInputButton.VoiceInputButton
10
12
  };
11
13
 
12
14
  //#endregion
@@ -1,12 +1,14 @@
1
1
  import { Layout } from "./Layout.js";
2
2
  import { Input } from "./Input.js";
3
3
  import { SendIcon } from "./SendIcon.js";
4
+ import { VoiceInputButton } from "./VoiceInputButton.js";
4
5
 
5
6
  //#region src/components/TextField/components/index.ts
6
7
  const TextFieldComponents = {
7
8
  Layout,
8
9
  Input,
9
- SendIcon
10
+ SendIcon,
11
+ VoiceInputButton
10
12
  };
11
13
 
12
14
  //#endregion
@@ -0,0 +1,20 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_theme = require('../../packages/components-v3/tokens/theme/theme.cjs');
3
+ let react = require("react");
4
+
5
+ //#region src/components/TextField/hooks/useGetMicButtonContainerProperties.ts
6
+ const useGetMicButtonContainerProperties = ({ theme, isListening = false }) => {
7
+ return { micButtonContainerClasses: (0, react.useMemo)(() => {
8
+ const micButtonContainerClassesMap = {
9
+ [require_theme.Theme.STANDARD]: "envive-tw-flex envive-tw-h-[40px] envive-tw-w-[40px] envive-tw-py-2 envive-tw-px-2 envive-tw-justify-center envive-tw-items-center envive-tw-flex-shrink-0 envive-tw-border envive-tw-border-solid envive-tw-rounded-global-custom envive-tw-border-border-light hover:envive-tw-border-border-dark",
10
+ [require_theme.Theme.MODERN]: "envive-tw-flex envive-tw-h-[40px] envive-tw-w-[40px] envive-tw-py-2 envive-tw-px-2 envive-tw-justify-center envive-tw-items-center envive-tw-flex-shrink-0 envive-tw-border envive-tw-border-solid envive-tw-rounded-[4px] envive-tw-border-border-light hover:envive-tw-border-border-dark",
11
+ [require_theme.Theme.MINIMAL]: "envive-tw-flex envive-tw-h-[40px] envive-tw-w-[40px] envive-tw-justify-center envive-tw-items-center envive-tw-flex-shrink-0 envive-tw-border-b envive-tw-border-solid envive-tw-border-b-border-medium hover:envive-tw-border-b-border-dark",
12
+ [require_theme.Theme.GLOBAL_CUSTOM]: "envive-tw-flex envive-tw-h-[40px] envive-tw-w-[40px] envive-tw-py-2 envive-tw-px-2 envive-tw-justify-center envive-tw-items-center envive-tw-flex-shrink-0 envive-tw-border envive-tw-border-solid envive-tw-rounded-global-custom envive-tw-border-border-light hover:envive-tw-border-border-dark"
13
+ };
14
+ const baseClasses = micButtonContainerClassesMap[theme] ?? micButtonContainerClassesMap[require_theme.Theme.STANDARD];
15
+ return isListening ? `${baseClasses} envive-tw-bg-[--envive-colors-text-accent]` : `${baseClasses} envive-tw-bg-background-light`;
16
+ }, [theme, isListening]) };
17
+ };
18
+
19
+ //#endregion
20
+ exports.useGetMicButtonContainerProperties = useGetMicButtonContainerProperties;
@@ -0,0 +1,19 @@
1
+ import { Theme } from "../../packages/components-v3/tokens/theme/theme.js";
2
+ import { useMemo } from "react";
3
+
4
+ //#region src/components/TextField/hooks/useGetMicButtonContainerProperties.ts
5
+ const useGetMicButtonContainerProperties = ({ theme, isListening = false }) => {
6
+ return { micButtonContainerClasses: useMemo(() => {
7
+ const micButtonContainerClassesMap = {
8
+ [Theme.STANDARD]: "envive-tw-flex envive-tw-h-[40px] envive-tw-w-[40px] envive-tw-py-2 envive-tw-px-2 envive-tw-justify-center envive-tw-items-center envive-tw-flex-shrink-0 envive-tw-border envive-tw-border-solid envive-tw-rounded-global-custom envive-tw-border-border-light hover:envive-tw-border-border-dark",
9
+ [Theme.MODERN]: "envive-tw-flex envive-tw-h-[40px] envive-tw-w-[40px] envive-tw-py-2 envive-tw-px-2 envive-tw-justify-center envive-tw-items-center envive-tw-flex-shrink-0 envive-tw-border envive-tw-border-solid envive-tw-rounded-[4px] envive-tw-border-border-light hover:envive-tw-border-border-dark",
10
+ [Theme.MINIMAL]: "envive-tw-flex envive-tw-h-[40px] envive-tw-w-[40px] envive-tw-justify-center envive-tw-items-center envive-tw-flex-shrink-0 envive-tw-border-b envive-tw-border-solid envive-tw-border-b-border-medium hover:envive-tw-border-b-border-dark",
11
+ [Theme.GLOBAL_CUSTOM]: "envive-tw-flex envive-tw-h-[40px] envive-tw-w-[40px] envive-tw-py-2 envive-tw-px-2 envive-tw-justify-center envive-tw-items-center envive-tw-flex-shrink-0 envive-tw-border envive-tw-border-solid envive-tw-rounded-global-custom envive-tw-border-border-light hover:envive-tw-border-border-dark"
12
+ };
13
+ const baseClasses = micButtonContainerClassesMap[theme] ?? micButtonContainerClassesMap[Theme.STANDARD];
14
+ return isListening ? `${baseClasses} envive-tw-bg-[--envive-colors-text-accent]` : `${baseClasses} envive-tw-bg-background-light`;
15
+ }, [theme, isListening]) };
16
+ };
17
+
18
+ //#endregion
19
+ export { useGetMicButtonContainerProperties };
@@ -5,7 +5,7 @@ let react = require("react");
5
5
  const useGetSkeletonProperties = (isLoading) => {
6
6
  return { skeletonClass: (0, react.useMemo)(() => {
7
7
  if (!isLoading) return void 0;
8
- return "envive-tw-animate-pulse";
8
+ return "envive-tw-animate-pulse envive-tw-h-[40px]";
9
9
  }, [isLoading]) };
10
10
  };
11
11
 
@@ -4,7 +4,7 @@ import { useMemo } from "react";
4
4
  const useGetSkeletonProperties = (isLoading) => {
5
5
  return { skeletonClass: useMemo(() => {
6
6
  if (!isLoading) return void 0;
7
- return "envive-tw-animate-pulse";
7
+ return "envive-tw-animate-pulse envive-tw-h-[40px]";
8
8
  }, [isLoading]) };
9
9
  };
10
10
 
@@ -0,0 +1,52 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_react = require('../../node_modules/jotai/esm/react.cjs');
3
+ let react = require("react");
4
+ let __envive_ai_react_hooks_atoms_chat = require("@envive-ai/react-hooks/atoms/chat");
5
+ let react_speech_recognition = require("react-speech-recognition");
6
+ react_speech_recognition = require_rolldown_runtime.__toESM(react_speech_recognition);
7
+
8
+ //#region src/components/TextField/hooks/useVoiceInput.ts
9
+ const useVoiceInput = ({ onTranscriptionCompleted, onTranscriptionStarted, disabled = false }) => {
10
+ const [listeningToSpeech, setListeningToSpeech] = require_react.useAtom(__envive_ai_react_hooks_atoms_chat.listeningToSpeechAtom);
11
+ const { transcript, browserSupportsSpeechRecognition, resetTranscript, isMicrophoneAvailable } = (0, react_speech_recognition.useSpeechRecognition)();
12
+ const handleStartListening = async () => {
13
+ try {
14
+ resetTranscript();
15
+ await react_speech_recognition.default.startListening({
16
+ continuous: true,
17
+ language: "en-US"
18
+ });
19
+ onTranscriptionStarted?.();
20
+ } catch (error) {
21
+ console.log("Microphone permission denied or error:", error);
22
+ setListeningToSpeech("abort");
23
+ }
24
+ };
25
+ const handleStopListening = async () => {
26
+ await react_speech_recognition.default.stopListening();
27
+ onTranscriptionCompleted?.(transcript);
28
+ };
29
+ const handleAbortListening = async () => {
30
+ await react_speech_recognition.default.abortListening();
31
+ resetTranscript();
32
+ };
33
+ const handleToggleListening = () => {
34
+ if (disabled || !isMicrophoneAvailable || !browserSupportsSpeechRecognition) return;
35
+ if (listeningToSpeech !== "start") setListeningToSpeech("start");
36
+ else setListeningToSpeech("stop");
37
+ };
38
+ (0, react.useEffect)(() => {
39
+ if (listeningToSpeech === "start") handleStartListening();
40
+ else if (listeningToSpeech === "stop") handleStopListening();
41
+ else if (listeningToSpeech === "abort") handleAbortListening();
42
+ }, [listeningToSpeech]);
43
+ return {
44
+ isListening: listeningToSpeech === "start",
45
+ handleToggleListening,
46
+ handleAbortListening,
47
+ browserSupportsSpeechRecognition
48
+ };
49
+ };
50
+
51
+ //#endregion
52
+ exports.useVoiceInput = useVoiceInput;
@@ -0,0 +1,50 @@
1
+ import { useAtom } from "../../node_modules/jotai/esm/react.js";
2
+ import { useEffect } from "react";
3
+ import { listeningToSpeechAtom } from "@envive-ai/react-hooks/atoms/chat";
4
+ import SpeechRecognition, { useSpeechRecognition } from "react-speech-recognition";
5
+
6
+ //#region src/components/TextField/hooks/useVoiceInput.ts
7
+ const useVoiceInput = ({ onTranscriptionCompleted, onTranscriptionStarted, disabled = false }) => {
8
+ const [listeningToSpeech, setListeningToSpeech] = useAtom(listeningToSpeechAtom);
9
+ const { transcript, browserSupportsSpeechRecognition, resetTranscript, isMicrophoneAvailable } = useSpeechRecognition();
10
+ const handleStartListening = async () => {
11
+ try {
12
+ resetTranscript();
13
+ await SpeechRecognition.startListening({
14
+ continuous: true,
15
+ language: "en-US"
16
+ });
17
+ onTranscriptionStarted?.();
18
+ } catch (error) {
19
+ console.log("Microphone permission denied or error:", error);
20
+ setListeningToSpeech("abort");
21
+ }
22
+ };
23
+ const handleStopListening = async () => {
24
+ await SpeechRecognition.stopListening();
25
+ onTranscriptionCompleted?.(transcript);
26
+ };
27
+ const handleAbortListening = async () => {
28
+ await SpeechRecognition.abortListening();
29
+ resetTranscript();
30
+ };
31
+ const handleToggleListening = () => {
32
+ if (disabled || !isMicrophoneAvailable || !browserSupportsSpeechRecognition) return;
33
+ if (listeningToSpeech !== "start") setListeningToSpeech("start");
34
+ else setListeningToSpeech("stop");
35
+ };
36
+ useEffect(() => {
37
+ if (listeningToSpeech === "start") handleStartListening();
38
+ else if (listeningToSpeech === "stop") handleStopListening();
39
+ else if (listeningToSpeech === "abort") handleAbortListening();
40
+ }, [listeningToSpeech]);
41
+ return {
42
+ isListening: listeningToSpeech === "start",
43
+ handleToggleListening,
44
+ handleAbortListening,
45
+ browserSupportsSpeechRecognition
46
+ };
47
+ };
48
+
49
+ //#endregion
50
+ export { useVoiceInput };
@@ -35,6 +35,10 @@ type TextFieldProps = {
35
35
  * Additional class names appended to the computed classes.
36
36
  */
37
37
  className?: string;
38
+ /**
39
+ * Additional class names applied directly to the input element (e.g. placeholder styling).
40
+ */
41
+ inputClassName?: string;
38
42
  /**
39
43
  * Inline styles forwarded to the rendered element.
40
44
  */
@@ -44,6 +48,13 @@ type TextFieldProps = {
44
48
  * @default false
45
49
  */
46
50
  isLoading?: boolean;
51
+ /**
52
+ * Enable voice input button
53
+ * @default false
54
+ */
55
+ enableVoiceInput?: boolean;
56
+ onTranscriptionStarted?: () => void;
57
+ onTranscriptionCompleted?: (transcript: string) => void;
47
58
  };
48
59
  //#endregion
49
60
  export { TextFieldProps };