@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.
- package/dist/AnimatedText/AnimatedText.d.cts +3 -3
- package/dist/AnimatedText/AnimatedText.d.ts +3 -3
- package/dist/CSSVariablesEditor/CssVariablesEditorComponent.d.cts +2 -2
- package/dist/CSSVariablesEditor/CssVariablesEditorComponent.d.ts +2 -2
- package/dist/CSSVariablesEditor/hooks/useGetCssVariablesOptions.cjs +1 -1
- package/dist/CSSVariablesEditor/hooks/useGetCssVariablesOptions.js +1 -1
- package/dist/CSSVariablesEditor/hooks/useGetCurrentMerchantColors.cjs +1 -1
- package/dist/CSSVariablesEditor/hooks/useGetCurrentMerchantColors.js +1 -1
- package/dist/CSSVariablesEditor/hooks/useGetDefaultCssVariables.cjs +4 -4
- package/dist/CSSVariablesEditor/hooks/useGetDefaultCssVariables.js +4 -4
- package/dist/CSSVariablesEditor/hooks/useHandleUpdateCssVars.cjs +3 -3
- package/dist/CSSVariablesEditor/hooks/useHandleUpdateCssVars.js +3 -3
- package/dist/Carousel/Carousel.d.cts +2 -2
- package/dist/Carousel/components/Badge.cjs +1 -1
- package/dist/Carousel/components/Badge.js +1 -1
- package/dist/Carousel/components/Container.cjs +1 -1
- package/dist/Carousel/components/Container.js +1 -1
- package/dist/ChatFooter/ChatFooter.cjs +7 -3
- package/dist/ChatFooter/ChatFooter.d.cts +7 -3
- package/dist/ChatFooter/ChatFooter.d.ts +7 -3
- package/dist/ChatFooter/ChatFooter.js +7 -3
- package/dist/ChatFooter/components/Layout.cjs +1 -1
- package/dist/ChatFooter/components/Layout.js +1 -1
- package/dist/ChatFooter/components/index.d.cts +10 -6
- package/dist/ChatFooter/components/index.d.ts +10 -6
- package/dist/ChatFooter/types/types.d.cts +16 -0
- package/dist/ChatFooter/types/types.d.ts +16 -0
- package/dist/ChatHeader/ChatHeader.cjs +2 -1
- package/dist/ChatHeader/ChatHeader.d.cts +2 -2
- package/dist/ChatHeader/ChatHeader.d.ts +2 -2
- package/dist/ChatHeader/ChatHeader.js +2 -1
- package/dist/ChatHeader/components/Handle.cjs +2 -2
- package/dist/ChatHeader/components/Handle.js +2 -2
- package/dist/ChatHeader/hooks/useGetHandleProperties.cjs +4 -2
- package/dist/ChatHeader/hooks/useGetHandleProperties.js +4 -2
- package/dist/ChatHeader/hooks/useGetLayoutProperties.cjs +1 -1
- package/dist/ChatHeader/hooks/useGetLayoutProperties.js +1 -1
- package/dist/ChatHeader/hooks/useGetToggleOptionProperties.cjs +1 -1
- package/dist/ChatHeader/hooks/useGetToggleOptionProperties.js +1 -1
- package/dist/ChatPreview/ChatPreview.cjs +6 -3
- package/dist/ChatPreview/ChatPreview.d.cts +2 -2
- package/dist/ChatPreview/ChatPreview.d.ts +2 -2
- package/dist/ChatPreview/ChatPreview.js +6 -3
- package/dist/ChatPreview/index.d.cts +2 -2
- package/dist/ChatPreview/index.d.ts +2 -2
- package/dist/ChatPreview/types/types.d.cts +13 -1
- package/dist/ChatPreview/types/types.d.ts +13 -1
- package/dist/ChatPreviewComparison/ChatPreviewComparison.cjs +6 -3
- package/dist/ChatPreviewComparison/ChatPreviewComparison.d.cts +2 -2
- package/dist/ChatPreviewComparison/ChatPreviewComparison.d.ts +2 -2
- package/dist/ChatPreviewComparison/ChatPreviewComparison.js +6 -3
- package/dist/ChatPreviewComparison/components/Layout.cjs +2 -2
- package/dist/ChatPreviewComparison/components/Layout.js +2 -2
- package/dist/ChatPreviewComparison/index.d.cts +2 -2
- package/dist/ChatPreviewComparison/index.d.ts +2 -2
- package/dist/ChatPreviewComparison/types/types.d.cts +13 -1
- package/dist/ChatPreviewComparison/types/types.d.ts +13 -1
- package/dist/ChatPreviewLoading/ChatPreviewLoading.cjs +7 -2
- package/dist/ChatPreviewLoading/ChatPreviewLoading.d.cts +4 -3
- package/dist/ChatPreviewLoading/ChatPreviewLoading.d.ts +2 -1
- package/dist/ChatPreviewLoading/ChatPreviewLoading.js +7 -2
- package/dist/ChatPreviewLoading/types/types.d.cts +4 -0
- package/dist/ChatPreviewLoading/types/types.d.ts +4 -0
- package/dist/Container/Container.d.cts +172 -172
- package/dist/Container/Container.d.ts +172 -172
- package/dist/DesignTokens/DesignTokensComponent.d.cts +2 -2
- package/dist/DesignTokens/DesignTokensComponent.d.ts +2 -2
- package/dist/DesignTokens/components/FontFamily.cjs +1 -1
- package/dist/DesignTokens/components/FontFamily.js +1 -1
- package/dist/DesignTokens/components/FontSize.cjs +1 -1
- package/dist/DesignTokens/components/FontSize.js +1 -1
- package/dist/DesignTokens/components/FontWeight.cjs +1 -1
- package/dist/DesignTokens/components/FontWeight.js +1 -1
- package/dist/DesignTokens/components/LetterSpacing.cjs +1 -1
- package/dist/DesignTokens/components/LetterSpacing.js +1 -1
- package/dist/DesignTokens/components/LineHeight.cjs +1 -1
- package/dist/DesignTokens/components/LineHeight.js +1 -1
- package/dist/DesignTokens/components/Typography.cjs +1 -1
- package/dist/DesignTokens/components/Typography.js +1 -1
- package/dist/Disclaimer/components/Container.cjs +2 -2
- package/dist/Disclaimer/components/Container.js +2 -2
- package/dist/DocumentRetrievalCard/DocumentRetrievalCard.d.ts +2 -2
- package/dist/DocumentRetrievalCard/components/Image.cjs +1 -1
- package/dist/DocumentRetrievalCard/components/Image.js +1 -1
- package/dist/DocumentRetrievalCard/components/Layout.cjs +1 -1
- package/dist/DocumentRetrievalCard/components/Layout.js +1 -1
- package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Icon.cjs +1 -1
- package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Icon.js +1 -1
- package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Label.cjs +1 -1
- package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Label.js +1 -1
- package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Layout.cjs +1 -1
- package/dist/DocumentRetrievalCard/components/ViewArticleButton/components/Layout.js +1 -1
- package/dist/FloatingButton/FloatingButton.d.cts +2 -2
- package/dist/FloatingButton/components/Button.cjs +1 -1
- package/dist/FloatingButton/components/Button.js +1 -1
- package/dist/FloatingButton/components/Container.cjs +1 -1
- package/dist/FloatingButton/components/Container.js +1 -1
- package/dist/FloatingButton/components/Wrapper.cjs +1 -1
- package/dist/FloatingButton/components/Wrapper.js +1 -1
- package/dist/FloatingChat/FloatingChat.cjs +32 -4
- package/dist/FloatingChat/FloatingChat.d.cts +2 -2
- package/dist/FloatingChat/FloatingChat.d.ts +2 -2
- package/dist/FloatingChat/FloatingChat.js +33 -5
- package/dist/FloatingChat/components/AgentMessage.cjs +2 -2
- package/dist/FloatingChat/components/AgentMessage.js +2 -2
- package/dist/FloatingChat/components/ChatMessages.cjs +1 -1
- package/dist/FloatingChat/components/ChatMessages.js +1 -1
- package/dist/FloatingChat/components/Layout.cjs +1 -1
- package/dist/FloatingChat/components/Layout.js +1 -1
- package/dist/FloatingChat/components/ProductResultsModal.cjs +1 -1
- package/dist/FloatingChat/components/ProductResultsModal.js +1 -1
- package/dist/FloatingChat/components/ResultsGridView.cjs +1 -1
- package/dist/FloatingChat/components/ResultsGridView.js +1 -1
- package/dist/FloatingChat/components/SalesAgentBadgeContent.cjs +1 -1
- package/dist/FloatingChat/components/SalesAgentBadgeContent.js +1 -1
- package/dist/FloatingChat/components/SlideChatContent.cjs +1 -1
- package/dist/FloatingChat/components/SlideChatContent.js +1 -1
- package/dist/FloatingChat/hooks/useChatSuggestions.cjs +3 -5
- package/dist/FloatingChat/hooks/useChatSuggestions.js +4 -6
- package/dist/Form/Form.cjs +1 -1
- package/dist/Form/Form.js +1 -1
- package/dist/Form/components/Layout.cjs +1 -1
- package/dist/Form/components/Layout.js +1 -1
- package/dist/Form/components/SubmitButtonItem.cjs +1 -1
- package/dist/Form/components/SubmitButtonItem.js +1 -1
- package/dist/Form/components/TextFieldItem.cjs +1 -1
- package/dist/Form/components/TextFieldItem.js +1 -1
- package/dist/FullPageSalesAgent/FullPageSalesAgent.cjs +29 -2
- package/dist/FullPageSalesAgent/FullPageSalesAgent.d.cts +5 -3
- package/dist/FullPageSalesAgent/FullPageSalesAgent.d.ts +5 -3
- package/dist/FullPageSalesAgent/FullPageSalesAgent.js +30 -3
- package/dist/FullPageSalesAgent/components/Layout.cjs +1 -1
- package/dist/FullPageSalesAgent/components/Layout.js +1 -1
- package/dist/Image/Image.cjs +1 -1
- package/dist/Image/Image.d.cts +2 -2
- package/dist/Image/Image.d.ts +2 -2
- package/dist/Image/Image.js +1 -1
- package/dist/ImageGallery/ImageGallery.d.cts +2 -2
- package/dist/ImageGallery/ImageGallery.d.ts +2 -2
- package/dist/ImageGallery/components/Layout.cjs +1 -1
- package/dist/ImageGallery/components/Layout.js +1 -1
- package/dist/ImageGallery/utils/functions.cjs +1 -1
- package/dist/ImageGallery/utils/functions.js +1 -1
- package/dist/MarkdownProcessor/MarkdownProcessor.d.cts +2 -2
- package/dist/Message/components/Layout.cjs +1 -1
- package/dist/Message/components/Layout.js +1 -1
- package/dist/OrderLookupCard/OrderLookupCard.cjs +1 -1
- package/dist/OrderLookupCard/OrderLookupCard.js +1 -1
- package/dist/OrderLookupCard/components/Layout.cjs +1 -1
- package/dist/OrderLookupCard/components/Layout.js +1 -1
- package/dist/OrderLookupCard/components/MoreProductsOverlay.cjs +1 -1
- package/dist/OrderLookupCard/components/MoreProductsOverlay.js +1 -1
- package/dist/OrderLookupCard/components/ProductImageGridItem.cjs +1 -1
- package/dist/OrderLookupCard/components/ProductImageGridItem.js +1 -1
- package/dist/OrderLookupCard/components/ProductImageItem.cjs +1 -1
- package/dist/OrderLookupCard/components/ProductImageItem.js +1 -1
- package/dist/OrderLookupCard/components/ProductImagesGrid.cjs +1 -1
- package/dist/OrderLookupCard/components/ProductImagesGrid.js +1 -1
- package/dist/OrderLookupCard/components/StatusLabel.cjs +1 -1
- package/dist/OrderLookupCard/components/StatusLabel.js +1 -1
- package/dist/OrderLookupCard/components/TrackOrderLink.cjs +1 -1
- package/dist/OrderLookupCard/components/TrackOrderLink.js +1 -1
- package/dist/ProductCard/ProductCard.cjs +6 -2
- package/dist/ProductCard/ProductCard.d.cts +6 -3
- package/dist/ProductCard/ProductCard.d.ts +6 -3
- package/dist/ProductCard/ProductCard.js +6 -2
- package/dist/ProductCard/index.d.cts +2 -2
- package/dist/ProductCard/index.d.ts +2 -2
- package/dist/ProductCard/types/index.d.cts +7 -1
- package/dist/ProductCard/types/index.d.ts +7 -1
- package/dist/PromptButton/PromptButton.cjs +1 -1
- package/dist/PromptButton/PromptButton.d.cts +2 -2
- package/dist/PromptButton/PromptButton.js +1 -1
- package/dist/PromptButton/components/Layout.cjs +1 -1
- package/dist/PromptButton/components/Layout.js +1 -1
- package/dist/PromptButton/components/Loading.cjs +1 -1
- package/dist/PromptButton/components/Loading.js +1 -1
- package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.cjs +5 -2
- package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.cts +6 -3
- package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.ts +6 -3
- package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.js +5 -2
- package/dist/PromptButtonCarouselWithImage/components/Layout.cjs +1 -1
- package/dist/PromptButtonCarouselWithImage/components/Layout.js +1 -1
- package/dist/PromptButtonCarouselWithImage/components/Skeleton.cjs +1 -1
- package/dist/PromptButtonCarouselWithImage/components/Skeleton.js +1 -1
- package/dist/PromptButtonCarouselWithImage/types/types.d.cts +12 -0
- package/dist/PromptButtonCarouselWithImage/types/types.d.ts +12 -0
- package/dist/PromptCarousel/PromptCarousel.cjs +1 -1
- package/dist/PromptCarousel/PromptCarousel.d.cts +2 -2
- package/dist/PromptCarousel/PromptCarousel.d.ts +2 -2
- package/dist/PromptCarousel/PromptCarousel.js +1 -1
- package/dist/PromptCarousel/hooks/useCarouselButtons.cjs +3 -2
- package/dist/PromptCarousel/hooks/useCarouselButtons.js +3 -2
- package/dist/ReviewCard/ReviewCard.d.cts +2 -2
- package/dist/ReviewCard/ReviewCard.d.ts +2 -2
- package/dist/ReviewCard/components/Container.cjs +1 -1
- package/dist/ReviewCard/components/Container.js +1 -1
- package/dist/ReviewCard/components/Rating.cjs +1 -2
- package/dist/ReviewCard/components/Rating.js +1 -2
- package/dist/ReviewCard/components/ReadMoreButton.cjs +1 -1
- package/dist/ReviewCard/components/ReadMoreButton.js +1 -1
- package/dist/ReviewCard/components/index.d.cts +6 -6
- package/dist/ReviewCard/components/index.d.ts +6 -6
- package/dist/SalesAgentProductCard/SalesAgentProductCard.d.cts +2 -2
- package/dist/SalesAgentProductCard/components/Container.cjs +1 -1
- package/dist/SalesAgentProductCard/components/Container.js +1 -1
- package/dist/SalesAgentProductCard/components/ProductImage.cjs +1 -1
- package/dist/SalesAgentProductCard/components/ProductImage.js +1 -1
- package/dist/SalesAgentProductCard/components/ProductName.cjs +1 -1
- package/dist/SalesAgentProductCard/components/ProductName.js +1 -1
- package/dist/SalesAgentProductCard/components/index.d.cts +8 -8
- package/dist/SocialProof/SocialProof.cjs +6 -3
- package/dist/SocialProof/SocialProof.d.cts +2 -2
- package/dist/SocialProof/SocialProof.d.ts +2 -2
- package/dist/SocialProof/SocialProof.js +6 -3
- package/dist/SocialProof/components/Headline.cjs +1 -1
- package/dist/SocialProof/components/Headline.js +1 -1
- package/dist/SocialProof/components/LayoutFourHorizontal.cjs +1 -1
- package/dist/SocialProof/components/LayoutFourHorizontal.js +1 -1
- package/dist/SocialProof/components/Textfield.cjs +5 -2
- package/dist/SocialProof/components/Textfield.js +5 -2
- package/dist/SocialProof/index.d.cts +2 -2
- package/dist/SocialProof/index.d.ts +2 -2
- package/dist/SocialProof/types/types.d.cts +13 -1
- package/dist/SocialProof/types/types.d.ts +13 -1
- package/dist/SparkleAnimation/SparkleAnimation.d.cts +2 -2
- package/dist/Stack/Stack.d.cts +2 -2
- package/dist/Stack/Stack.d.ts +2 -2
- package/dist/TextField/TextField.cjs +35 -3
- package/dist/TextField/TextField.d.cts +5 -1
- package/dist/TextField/TextField.d.ts +5 -1
- package/dist/TextField/TextField.js +35 -3
- package/dist/TextField/components/Input.cjs +1 -1
- package/dist/TextField/components/Input.js +1 -1
- package/dist/TextField/components/Layout.cjs +11 -8
- package/dist/TextField/components/Layout.js +11 -8
- package/dist/TextField/components/SendIcon.cjs +1 -1
- package/dist/TextField/components/SendIcon.js +1 -1
- package/dist/TextField/components/VoiceInputButton.cjs +45 -0
- package/dist/TextField/components/VoiceInputButton.js +39 -0
- package/dist/TextField/components/index.cjs +3 -1
- package/dist/TextField/components/index.js +3 -1
- package/dist/TextField/hooks/useGetMicButtonContainerProperties.cjs +20 -0
- package/dist/TextField/hooks/useGetMicButtonContainerProperties.js +19 -0
- package/dist/TextField/hooks/useGetSkeletonProperties.cjs +1 -1
- package/dist/TextField/hooks/useGetSkeletonProperties.js +1 -1
- package/dist/TextField/hooks/useVoiceInput.cjs +52 -0
- package/dist/TextField/hooks/useVoiceInput.js +50 -0
- package/dist/TextField/types/index.d.cts +11 -0
- package/dist/TextField/types/index.d.ts +11 -0
- package/dist/TextField/utils/getLayoutStateProperties.cjs +9 -1
- package/dist/TextField/utils/getLayoutStateProperties.js +8 -1
- package/dist/Title/Title.cjs +1 -1
- package/dist/Title/Title.js +1 -1
- package/dist/Title/components/Layout.cjs +1 -1
- package/dist/Title/components/Layout.js +1 -1
- package/dist/TitledPromptCarousel/TitledPromptCarousel.cjs +1 -1
- package/dist/TitledPromptCarousel/TitledPromptCarousel.d.cts +2 -2
- package/dist/TitledPromptCarousel/TitledPromptCarousel.js +1 -1
- package/dist/Tokens/index.cjs +6 -6
- package/dist/Tokens/index.js +6 -6
- package/dist/TypingAnimation/TypingAnimation.cjs +7 -3
- package/dist/TypingAnimation/TypingAnimation.d.cts +2 -2
- package/dist/TypingAnimation/TypingAnimation.d.ts +2 -2
- package/dist/TypingAnimation/TypingAnimation.js +7 -3
- package/dist/TypingAnimation/index.d.cts +2 -2
- package/dist/TypingAnimation/index.d.ts +2 -2
- package/dist/TypingAnimation/types/index.d.cts +13 -1
- package/dist/TypingAnimation/types/index.d.ts +13 -1
- package/dist/Typography/Typography.d.cts +4 -4
- package/dist/Typography/Typography.d.ts +4 -4
- package/dist/WelcomeMessage/components/Container.cjs +1 -1
- package/dist/WelcomeMessage/components/Container.js +1 -1
- package/dist/WidgetTextField/WidgetTextField.cjs +39 -7
- package/dist/WidgetTextField/WidgetTextField.d.cts +7 -3
- package/dist/WidgetTextField/WidgetTextField.d.ts +7 -3
- package/dist/WidgetTextField/WidgetTextField.js +33 -2
- package/dist/WidgetTextField/components/Container.cjs +32 -26
- package/dist/WidgetTextField/components/Container.js +32 -26
- package/dist/WidgetTextField/components/Skeleton.cjs +1 -1
- package/dist/WidgetTextField/components/Skeleton.js +1 -1
- package/dist/WidgetTextField/hooks/useGetContainerProperties.cjs +5 -3
- package/dist/WidgetTextField/hooks/useGetContainerProperties.js +5 -3
- package/dist/WidgetTextField/hooks/useGetMicWidgetButtonProperties.cjs +20 -0
- package/dist/WidgetTextField/hooks/useGetMicWidgetButtonProperties.js +19 -0
- package/dist/WidgetTextField/types/types.d.cts +21 -0
- package/dist/WidgetTextField/types/types.d.ts +21 -0
- package/dist/WidgetWrapper/WidgetWrapper.cjs +1 -1
- package/dist/WidgetWrapper/WidgetWrapper.d.cts +2 -2
- package/dist/WidgetWrapper/WidgetWrapper.js +1 -1
- package/dist/WidgetWrapper/hooks/useGetWrapperProperties.cjs +1 -1
- package/dist/WidgetWrapper/hooks/useGetWrapperProperties.js +1 -1
- package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.cts +2 -2
- package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.ts +2 -2
- package/dist/node_modules/jotai/esm/react.cjs +87 -0
- package/dist/node_modules/jotai/esm/react.js +88 -2
- package/dist/node_modules/jotai/esm/vanilla/internals.cjs +2 -1
- package/dist/node_modules/jotai/esm/vanilla/internals.js +1 -1
- package/dist/packages/components-v3/tokens/typography/typography.cjs +1 -1
- package/dist/packages/components-v3/tokens/typography/typography.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/utils/resolveTheme.cjs +1 -1
- package/dist/utils/resolveTheme.js +1 -1
- package/package.json +2 -1
- package/src/components/ChatFooter/ChatFooter.tsx +8 -0
- package/src/components/ChatFooter/__tests__/ChatFooter.test.tsx +43 -0
- package/src/components/ChatFooter/components/TextField.tsx +12 -0
- package/src/components/ChatFooter/types/types.ts +17 -0
- package/src/components/ChatHeader/ChatHeader.tsx +1 -0
- package/src/components/ChatHeader/components/Handle.tsx +7 -2
- package/src/components/ChatHeader/hooks/useGetHandleProperties.ts +5 -1
- package/src/components/ChatHeader/hooks/useGetToggleOptionProperties.ts +1 -1
- package/src/components/ChatHeader/types/index.ts +1 -0
- package/src/components/ChatPreview/ChatPreview.tsx +13 -2
- package/src/components/ChatPreview/__tests__/ChatPreview.test.tsx +44 -0
- package/src/components/ChatPreview/index.ts +1 -1
- package/src/components/ChatPreview/types/types.ts +13 -0
- package/src/components/ChatPreviewComparison/ChatPreviewComparison.tsx +6 -0
- package/src/components/ChatPreviewComparison/__tests__/ChatPreviewComparison.test.tsx +44 -0
- package/src/components/ChatPreviewComparison/index.ts +1 -1
- package/src/components/ChatPreviewComparison/types/types.ts +13 -0
- package/src/components/ChatPreviewLoading/ChatPreviewLoading.tsx +5 -3
- package/src/components/ChatPreviewLoading/__tests__/ChatPreviewLoading.test.tsx +40 -0
- package/src/components/ChatPreviewLoading/types/types.ts +5 -0
- package/src/components/Disclaimer/components/Container.tsx +1 -1
- package/src/components/FloatingChat/FloatingChat.tsx +43 -7
- package/src/components/FloatingChat/components/SlideChatContent.tsx +1 -1
- package/src/components/FloatingChat/hooks/useChatSuggestions.ts +8 -12
- package/src/components/FullPageSalesAgent/FullPageSalesAgent.tsx +43 -7
- package/src/components/ProductCard/ProductCard.tsx +7 -0
- package/src/components/ProductCard/__tests__/ProductCard.test.tsx +33 -0
- package/src/components/ProductCard/index.ts +1 -1
- package/src/components/ProductCard/types/index.ts +6 -0
- package/src/components/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.tsx +6 -0
- package/src/components/PromptButtonCarouselWithImage/__tests__/PromptButtonCarouselWithImage.test.tsx +34 -0
- package/src/components/PromptButtonCarouselWithImage/types/types.ts +12 -0
- package/src/components/PromptCarousel/__tests__/PromptCarousel.test.tsx +19 -0
- package/src/components/PromptCarousel/hooks/useCarouselButtons.ts +4 -2
- package/src/components/ReviewCard/components/Rating.tsx +0 -1
- package/src/components/SocialProof/SocialProof.tsx +6 -0
- package/src/components/SocialProof/__tests__/SocialProof.test.tsx +58 -0
- package/src/components/SocialProof/components/Textfield.tsx +9 -0
- package/src/components/SocialProof/index.ts +1 -1
- package/src/components/SocialProof/types/types.ts +13 -0
- package/src/components/TextField/TextField.tsx +49 -0
- package/src/components/TextField/__tests__/TextField.test.tsx +3 -3
- package/src/components/TextField/__tests__/VoiceInputButton.test.tsx +175 -0
- package/src/components/TextField/components/Layout.tsx +24 -17
- package/src/components/TextField/components/VoiceInputButton.tsx +69 -0
- package/src/components/TextField/components/index.ts +2 -0
- package/src/components/TextField/hooks/useGetMicButtonContainerProperties.ts +38 -0
- package/src/components/TextField/hooks/useGetSkeletonProperties.ts +1 -1
- package/src/components/TextField/hooks/useVoiceInput.ts +75 -0
- package/src/components/TextField/types/index.ts +11 -0
- package/src/components/TextField/utils/getLayoutStateProperties.ts +8 -0
- package/src/components/TypingAnimation/TypingAnimation.tsx +7 -0
- package/src/components/TypingAnimation/__tests__/TypingAnimation.test.tsx +47 -0
- package/src/components/TypingAnimation/index.ts +1 -1
- package/src/components/TypingAnimation/types/index.ts +14 -1
- package/src/components/WidgetTextField/WidgetTextField.tsx +47 -0
- package/src/components/WidgetTextField/__tests__/WidgetTextField.test.tsx +119 -4
- package/src/components/WidgetTextField/components/Container.tsx +40 -27
- package/src/components/WidgetTextField/hooks/useGetContainerProperties.ts +16 -4
- package/src/components/WidgetTextField/hooks/useGetMicWidgetButtonProperties.ts +38 -0
- package/src/components/WidgetTextField/types/types.ts +21 -0
- package/src/components/WidgetWrapper/hooks/useGetWrapperProperties.ts +1 -1
package/dist/Stack/Stack.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { StackProps } from "./types/index.js";
|
|
2
|
-
import * as
|
|
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:
|
|
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
|
|
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
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 };
|