@athoscommerce/snap-preact 1.13.2 → 1.13.3-beta.187
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/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +99 -0
- package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.js +17 -0
- package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.js +56 -11
- package/dist/cjs/components/src/components/Atoms/Icon/paths.js +13 -0
- package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +221 -0
- package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +211 -0
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +259 -0
- package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +286 -0
- package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +174 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatQuickview/ChatQuickview.js +514 -0
- package/dist/cjs/components/src/components/Molecules/ChatQuickview/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.js +252 -0
- package/dist/cjs/components/src/components/Molecules/ChatResult/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +113 -0
- package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +107 -0
- package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/Result/Result.js +51 -4
- package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.js +28 -2
- package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.js +24 -28
- package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.js +88 -47
- package/dist/cjs/components/src/components/Molecules/TabSelection/TabSelection.js +5 -3
- package/dist/cjs/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +8 -1
- package/dist/cjs/components/src/components/Organisms/Chat/Chat.js +628 -0
- package/dist/cjs/components/src/components/Organisms/Chat/Chat.lang.js +110 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatAttachments.js +105 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatComparisonsTray.js +161 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatComposer.js +166 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatFacetsBar.js +369 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatHistory.js +130 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatMessages.js +218 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatSessionFeedback.js +123 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatSideChat.js +173 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/ChatTopicDrift.js +149 -0
- package/dist/cjs/components/src/components/Organisms/Chat/components/chatAccentTheme.js +62 -0
- package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +66 -0
- package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.js +96 -0
- package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +113 -0
- package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatScrollLock.js +135 -0
- package/dist/cjs/components/src/components/Organisms/Chat/index.js +18 -0
- package/dist/cjs/components/src/components/Organisms/ChatButton/ChatButton.js +94 -0
- package/dist/cjs/components/src/components/Organisms/ChatButton/ChatButton.lang.js +11 -0
- package/dist/cjs/components/src/components/Organisms/ChatButton/index.js +18 -0
- package/dist/cjs/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.js +44 -11
- package/dist/cjs/components/src/components/Organisms/Results/Results.js +1 -1
- package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +5 -0
- package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +5 -0
- package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +5 -0
- package/dist/cjs/components/src/components/Templates/Chat/Chat.js +47 -0
- package/dist/cjs/components/src/components/Templates/Chat/index.js +17 -0
- package/dist/cjs/components/src/components/Templates/ChatButton/ChatButton.js +47 -0
- package/dist/cjs/components/src/components/Templates/ChatButton/index.js +17 -0
- package/dist/cjs/components/src/components/Templates/Search/Search.js +9 -1
- package/dist/cjs/components/src/index.js +17 -1
- package/dist/cjs/components/src/providers/themeComponents.js +20 -0
- package/dist/cjs/components/src/themes/base/components/templates/chat.js +6 -0
- package/dist/cjs/components/src/themes/base/components/templates/chatButton.js +6 -0
- package/dist/cjs/components/src/themes/base/components/templates/index.js +10 -0
- package/dist/cjs/components/src/themes/bocachica/components/templates/chat.js +6 -0
- package/dist/cjs/components/src/themes/bocachica/components/templates/chatButton.js +6 -0
- package/dist/cjs/components/src/themes/bocachica/components/templates/index.js +10 -0
- package/dist/cjs/components/src/themes/pike/components/templates/chat.js +6 -0
- package/dist/cjs/components/src/themes/pike/components/templates/chatButton.js +6 -0
- package/dist/cjs/components/src/themes/pike/components/templates/index.js +10 -0
- package/dist/cjs/components/src/themes/snapnco/components/templates/chat.js +6 -0
- package/dist/cjs/components/src/themes/snapnco/components/templates/chatButton.js +6 -0
- package/dist/cjs/components/src/themes/snapnco/components/templates/index.js +10 -0
- package/dist/cjs/components/src/themes/snappy/components/templates/chat.js +6 -0
- package/dist/cjs/components/src/themes/snappy/components/templates/chatButton.js +6 -0
- package/dist/cjs/components/src/themes/snappy/components/templates/index.js +10 -0
- package/dist/cjs/components/src/themes/themeComponents/chat.js +14 -0
- package/dist/cjs/components/src/themes/themeComponents/chatButton.js +9 -0
- package/dist/cjs/components/src/utilities/Colour/Colour.js +41 -0
- package/dist/cjs/components/src/utilities/snapify.js +27 -0
- package/dist/cjs/src/Instantiators/RecommendationInstantiator.js +4 -1
- package/dist/cjs/src/Snap.js +83 -1
- package/dist/cjs/src/Templates/SnapTemplates.js +55 -5
- package/dist/cjs/src/Templates/Stores/LibraryStore.js +51 -1
- package/dist/cjs/src/Templates/Stores/TemplateStore.js +3 -3
- package/dist/cjs/src/Templates/Stores/library/components/Chat.js +5 -0
- package/dist/cjs/src/Templates/Stores/library/components/ChatButton.js +5 -0
- package/dist/cjs/src/Templates/Stores/library/languages/ar.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/de.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/es.js +490 -0
- package/dist/cjs/src/Templates/Stores/library/languages/fr.js +490 -0
- package/dist/cjs/src/Templates/Stores/library/languages/hi.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/it.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/ja.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/ko.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/nl.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/pt.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/ru.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/tr.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/vi.js +485 -0
- package/dist/cjs/src/Templates/Stores/library/languages/zh.js +485 -0
- package/dist/cjs/src/create/createChatController.js +31 -0
- package/dist/cjs/src/create/index.js +3 -1
- package/dist/cjs/src/setupEvents.js +44 -0
- package/dist/cjs/src/utils/applyChatTargetInject.js +25 -0
- package/dist/cjs/src/utils/index.js +3 -1
- package/dist/esm/components/src/components/Atoms/Button/Button.d.ts +3 -1
- package/dist/esm/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts +17 -0
- package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts.map +1 -0
- package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +92 -0
- package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts +2 -0
- package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.js +1 -0
- package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts +6 -1
- package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.js +57 -12
- package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts +13 -0
- package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/Icon/paths.js +13 -0
- package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts +37 -0
- package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +215 -0
- package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +30 -0
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +205 -0
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts +36 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +253 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageText/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts +52 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +280 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +25 -0
- package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +168 -0
- package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/ChatQuickview/ChatQuickview.d.ts +30 -0
- package/dist/esm/components/src/components/Molecules/ChatQuickview/ChatQuickview.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatQuickview/ChatQuickview.js +508 -0
- package/dist/esm/components/src/components/Molecules/ChatQuickview/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatQuickview/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatQuickview/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts +35 -0
- package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.js +246 -0
- package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatResult/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts +24 -0
- package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +107 -0
- package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts +16 -0
- package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +101 -0
- package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.d.ts +2 -2
- package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/Result/Result.d.ts +7 -3
- package/dist/esm/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/Result/Result.js +51 -4
- package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts +3 -0
- package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.js +28 -2
- package/dist/esm/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/Slideout/Slideout.js +25 -29
- package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.js +88 -47
- package/dist/esm/components/src/components/Molecules/TabSelection/TabSelection.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/TabSelection/TabSelection.js +5 -3
- package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.d.ts.map +1 -1
- package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +8 -1
- package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts +41 -0
- package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/Chat.js +622 -0
- package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.d.ts +79 -0
- package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.js +105 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.d.ts +26 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.js +99 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.d.ts +13 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.js +155 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.d.ts +19 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.js +160 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.d.ts +18 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.js +363 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.d.ts +11 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.js +124 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.d.ts +30 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.js +212 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.d.ts +13 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.js +117 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.d.ts +19 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.js +167 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.d.ts +14 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.js +143 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.d.ts +15 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.js +58 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts +32 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +62 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts +40 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.js +92 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts +43 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +109 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.d.ts +26 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.js +131 -0
- package/dist/esm/components/src/components/Organisms/Chat/index.d.ts +3 -0
- package/dist/esm/components/src/components/Organisms/Chat/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/index.js +2 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.d.ts +18 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.js +88 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.d.ts +7 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.js +8 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/index.d.ts +3 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/ChatButton/index.js +2 -0
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.d.ts +5 -1
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.d.ts.map +1 -1
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.js +44 -11
- package/dist/esm/components/src/components/Organisms/Results/Results.js +1 -1
- package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
- package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +5 -0
- package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
- package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +5 -0
- package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
- package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +5 -0
- package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts +12 -0
- package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts.map +1 -0
- package/dist/esm/components/src/components/Templates/Chat/Chat.js +41 -0
- package/dist/esm/components/src/components/Templates/Chat/index.d.ts +2 -0
- package/dist/esm/components/src/components/Templates/Chat/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Templates/Chat/index.js +1 -0
- package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.d.ts +13 -0
- package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.d.ts.map +1 -0
- package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.js +41 -0
- package/dist/esm/components/src/components/Templates/ChatButton/index.d.ts +2 -0
- package/dist/esm/components/src/components/Templates/ChatButton/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Templates/ChatButton/index.js +1 -0
- package/dist/esm/components/src/components/Templates/Search/Search.d.ts.map +1 -1
- package/dist/esm/components/src/components/Templates/Search/Search.js +9 -1
- package/dist/esm/components/src/index.d.ts +14 -0
- package/dist/esm/components/src/index.d.ts.map +1 -1
- package/dist/esm/components/src/index.js +14 -0
- package/dist/esm/components/src/providers/langComponents.d.ts +20 -0
- package/dist/esm/components/src/providers/langComponents.d.ts.map +1 -1
- package/dist/esm/components/src/providers/themeComponents.d.ts +203 -1
- package/dist/esm/components/src/providers/themeComponents.d.ts.map +1 -1
- package/dist/esm/components/src/providers/themeComponents.js +20 -0
- package/dist/esm/components/src/providers/withTracking.d.ts +2 -2
- package/dist/esm/components/src/providers/withTracking.d.ts.map +1 -1
- package/dist/esm/components/src/themes/base/components/templates/chat.d.ts +4 -0
- package/dist/esm/components/src/themes/base/components/templates/chat.d.ts.map +1 -0
- package/dist/esm/components/src/themes/base/components/templates/chat.js +3 -0
- package/dist/esm/components/src/themes/base/components/templates/chatButton.d.ts +4 -0
- package/dist/esm/components/src/themes/base/components/templates/chatButton.d.ts.map +1 -0
- package/dist/esm/components/src/themes/base/components/templates/chatButton.js +3 -0
- package/dist/esm/components/src/themes/base/components/templates/index.d.ts.map +1 -1
- package/dist/esm/components/src/themes/base/components/templates/index.js +10 -0
- package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts +4 -0
- package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts.map +1 -0
- package/dist/esm/components/src/themes/bocachica/components/templates/chat.js +3 -0
- package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.d.ts +4 -0
- package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.d.ts.map +1 -0
- package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.js +3 -0
- package/dist/esm/components/src/themes/bocachica/components/templates/index.d.ts.map +1 -1
- package/dist/esm/components/src/themes/bocachica/components/templates/index.js +10 -0
- package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts +4 -0
- package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts.map +1 -0
- package/dist/esm/components/src/themes/pike/components/templates/chat.js +3 -0
- package/dist/esm/components/src/themes/pike/components/templates/chatButton.d.ts +4 -0
- package/dist/esm/components/src/themes/pike/components/templates/chatButton.d.ts.map +1 -0
- package/dist/esm/components/src/themes/pike/components/templates/chatButton.js +3 -0
- package/dist/esm/components/src/themes/pike/components/templates/index.d.ts.map +1 -1
- package/dist/esm/components/src/themes/pike/components/templates/index.js +10 -0
- package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts +4 -0
- package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts.map +1 -0
- package/dist/esm/components/src/themes/snapnco/components/templates/chat.js +3 -0
- package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.d.ts +4 -0
- package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.d.ts.map +1 -0
- package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.js +3 -0
- package/dist/esm/components/src/themes/snapnco/components/templates/index.d.ts.map +1 -1
- package/dist/esm/components/src/themes/snapnco/components/templates/index.js +10 -0
- package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts +4 -0
- package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts.map +1 -0
- package/dist/esm/components/src/themes/snappy/components/templates/chat.js +3 -0
- package/dist/esm/components/src/themes/snappy/components/templates/chatButton.d.ts +4 -0
- package/dist/esm/components/src/themes/snappy/components/templates/chatButton.d.ts.map +1 -0
- package/dist/esm/components/src/themes/snappy/components/templates/chatButton.js +3 -0
- package/dist/esm/components/src/themes/snappy/components/templates/index.d.ts.map +1 -1
- package/dist/esm/components/src/themes/snappy/components/templates/index.js +10 -0
- package/dist/esm/components/src/themes/themeComponents/chat.d.ts +4 -0
- package/dist/esm/components/src/themes/themeComponents/chat.d.ts.map +1 -0
- package/dist/esm/components/src/themes/themeComponents/chat.js +11 -0
- package/dist/esm/components/src/themes/themeComponents/chatButton.d.ts +4 -0
- package/dist/esm/components/src/themes/themeComponents/chatButton.d.ts.map +1 -0
- package/dist/esm/components/src/themes/themeComponents/chatButton.js +6 -0
- package/dist/esm/components/src/utilities/Colour/Colour.d.ts +15 -0
- package/dist/esm/components/src/utilities/Colour/Colour.d.ts.map +1 -1
- package/dist/esm/components/src/utilities/Colour/Colour.js +41 -0
- package/dist/esm/components/src/utilities/snapify.d.ts +3 -2
- package/dist/esm/components/src/utilities/snapify.d.ts.map +1 -1
- package/dist/esm/components/src/utilities/snapify.js +29 -2
- package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts +4 -1
- package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
- package/dist/esm/src/Instantiators/RecommendationInstantiator.js +4 -1
- package/dist/esm/src/Snap.d.ts +3 -1
- package/dist/esm/src/Snap.d.ts.map +1 -1
- package/dist/esm/src/Snap.js +84 -2
- package/dist/esm/src/Templates/SnapTemplates.d.ts +2 -1
- package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
- package/dist/esm/src/Templates/SnapTemplates.js +54 -5
- package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +43 -0
- package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/LibraryStore.js +51 -1
- package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +20 -6
- package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/TemplateStore.js +3 -3
- package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts +2 -0
- package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/components/Chat.js +1 -0
- package/dist/esm/src/Templates/Stores/library/components/ChatButton.d.ts +2 -0
- package/dist/esm/src/Templates/Stores/library/components/ChatButton.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/components/ChatButton.js +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/ar.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/ar.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/de.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/de.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/es.js +490 -0
- package/dist/esm/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/fr.js +490 -0
- package/dist/esm/src/Templates/Stores/library/languages/hi.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/hi.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/it.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/it.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/ja.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/ja.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/ko.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/ko.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/nl.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/nl.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/pt.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/pt.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/ru.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/ru.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/tr.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/tr.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/vi.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/vi.js +485 -0
- package/dist/esm/src/Templates/Stores/library/languages/zh.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/zh.js +485 -0
- package/dist/esm/src/create/createChatController.d.ts +5 -0
- package/dist/esm/src/create/createChatController.d.ts.map +1 -0
- package/dist/esm/src/create/createChatController.js +29 -0
- package/dist/esm/src/create/index.d.ts +1 -0
- package/dist/esm/src/create/index.d.ts.map +1 -1
- package/dist/esm/src/create/index.js +1 -0
- package/dist/esm/src/setupEvents.d.ts +13 -0
- package/dist/esm/src/setupEvents.d.ts.map +1 -1
- package/dist/esm/src/setupEvents.js +44 -0
- package/dist/esm/src/types.d.ts +13 -3
- package/dist/esm/src/types.d.ts.map +1 -1
- package/dist/esm/src/utils/applyChatTargetInject.d.ts +3 -0
- package/dist/esm/src/utils/applyChatTargetInject.d.ts.map +1 -0
- package/dist/esm/src/utils/applyChatTargetInject.js +22 -0
- package/dist/esm/src/utils/index.d.ts +1 -0
- package/dist/esm/src/utils/index.d.ts.map +1 -1
- package/dist/esm/src/utils/index.js +1 -0
- package/eslint/src/validate-config.cjs +140 -98
- package/package.json +14 -12
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ChatTopicDrift = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
|
|
8
|
+
const react_1 = require("@emotion/react");
|
|
9
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
10
|
+
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
11
|
+
const mobx_react_lite_1 = require("mobx-react-lite");
|
|
12
|
+
const providers_1 = require("../../../../providers");
|
|
13
|
+
const utilities_1 = require("../../../../utilities");
|
|
14
|
+
const hooks_1 = require("../../../../hooks");
|
|
15
|
+
const useA11y_1 = require("../../../../hooks/useA11y");
|
|
16
|
+
const Button_1 = require("../../../Atoms/Button");
|
|
17
|
+
const Icon_1 = require("../../../Atoms/Icon");
|
|
18
|
+
const Chat_lang_1 = require("../Chat.lang");
|
|
19
|
+
const defaultStyles = ({ primaryColorBg, primaryColorFg }) => {
|
|
20
|
+
const colorPrimary = primaryColorBg;
|
|
21
|
+
const colorPrimaryText = primaryColorFg;
|
|
22
|
+
return (0, react_1.css)({
|
|
23
|
+
display: 'flex',
|
|
24
|
+
alignItems: 'center',
|
|
25
|
+
gap: '12px',
|
|
26
|
+
padding: '12px 16px',
|
|
27
|
+
border: `1px solid ${new utilities_1.Colour(colorPrimary).mixWhite(0.6)}`,
|
|
28
|
+
borderRadius: '8px',
|
|
29
|
+
backgroundColor: '#fff',
|
|
30
|
+
'.ss__chat__topic-drift__icon--info': {
|
|
31
|
+
flex: '0 0 auto',
|
|
32
|
+
fill: colorPrimary,
|
|
33
|
+
stroke: colorPrimary,
|
|
34
|
+
svg: {
|
|
35
|
+
fill: colorPrimary,
|
|
36
|
+
stroke: colorPrimary,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
'.ss__chat__topic-drift__text': {
|
|
40
|
+
flex: '1 1 0%',
|
|
41
|
+
display: 'flex',
|
|
42
|
+
flexDirection: 'column',
|
|
43
|
+
gap: '2px',
|
|
44
|
+
'span:first-of-type': {
|
|
45
|
+
fontWeight: 'bold',
|
|
46
|
+
color: colorPrimary,
|
|
47
|
+
fontSize: '14px',
|
|
48
|
+
},
|
|
49
|
+
'span:last-of-type': {
|
|
50
|
+
color: '#6A7282',
|
|
51
|
+
fontSize: '13px',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
'.ss__chat__topic-drift__button': {
|
|
55
|
+
flex: '0 0 auto',
|
|
56
|
+
backgroundColor: colorPrimary,
|
|
57
|
+
color: colorPrimaryText,
|
|
58
|
+
borderRadius: '6px',
|
|
59
|
+
padding: '8px 14px',
|
|
60
|
+
fontSize: '13px',
|
|
61
|
+
fontWeight: 500,
|
|
62
|
+
cursor: 'pointer',
|
|
63
|
+
whiteSpace: 'nowrap',
|
|
64
|
+
'&:not(.ss__button--disabled):hover': {
|
|
65
|
+
background: new utilities_1.Colour(colorPrimary).mixBlack(),
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
'.ss__chat__topic-drift__icon--close': {
|
|
69
|
+
flex: '0 0 auto',
|
|
70
|
+
cursor: 'pointer',
|
|
71
|
+
fill: '#6A7282',
|
|
72
|
+
stroke: '#6A7282',
|
|
73
|
+
svg: {
|
|
74
|
+
fill: '#6A7282',
|
|
75
|
+
stroke: '#6A7282',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
exports.ChatTopicDrift = (0, mobx_react_lite_1.observer)((properties) => {
|
|
81
|
+
const globalTheme = (0, providers_1.useTheme)();
|
|
82
|
+
const globalTreePath = (0, providers_1.useTreePath)();
|
|
83
|
+
const defaultProps = {
|
|
84
|
+
variant: 'drift',
|
|
85
|
+
treePath: globalTreePath,
|
|
86
|
+
};
|
|
87
|
+
const props = (0, utilities_1.mergeProps)('chatTopicDrift', globalTheme, defaultProps, properties);
|
|
88
|
+
const { className, internalClassName, controller, variant } = props;
|
|
89
|
+
const { store } = controller;
|
|
90
|
+
const lang = (0, deepmerge_1.default)(Chat_lang_1.chatDefaultLang, props.lang || {});
|
|
91
|
+
const mergedLang = (0, hooks_1.useLang)({
|
|
92
|
+
highVolumeMessage: lang.highVolumeMessage,
|
|
93
|
+
highVolumeSubMessage: lang.highVolumeSubMessage,
|
|
94
|
+
newSessionButton: lang.newSessionButton,
|
|
95
|
+
topicDriftScopeMessage: lang.topicDriftScopeMessage,
|
|
96
|
+
topicDriftScopeSubMessage: lang.topicDriftScopeSubMessage,
|
|
97
|
+
topicDriftMessage: lang.topicDriftMessage,
|
|
98
|
+
topicDriftSubMessage: lang.topicDriftSubMessage,
|
|
99
|
+
}, { controller }, { activeBreakpoint: globalTheme?.activeBreakpoint });
|
|
100
|
+
const styling = (0, utilities_1.mergeStyles)(props, defaultStyles);
|
|
101
|
+
if (variant === 'sessionLimit') {
|
|
102
|
+
if (!store.currentChat?.sessionLimitReached)
|
|
103
|
+
return null;
|
|
104
|
+
return ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)("div", { ...styling, className: (0, classnames_1.default)('ss__chat__topic-drift', className, internalClassName), children: [(0, jsx_runtime_1.jsx)(Icon_1.Icon, { icon: "info", size: "18px", className: 'ss__chat__topic-drift__icon--info' }), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__topic-drift__text', children: [(0, jsx_runtime_1.jsx)("span", { ...mergedLang.highVolumeMessage?.all }), (0, jsx_runtime_1.jsx)("span", { ...mergedLang.highVolumeSubMessage?.all })] }), (0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__topic-drift__button', onClick: () => {
|
|
105
|
+
controller.store.createChat();
|
|
106
|
+
}, children: (0, jsx_runtime_1.jsx)("span", { ...mergedLang.newSessionButton?.all }) })] }) }));
|
|
107
|
+
}
|
|
108
|
+
const drift = store.currentChat?.topicDrift;
|
|
109
|
+
if (!drift)
|
|
110
|
+
return null;
|
|
111
|
+
// recommendedAction is the prescription; driftType is the diagnosis.
|
|
112
|
+
// Hide the banner when the backend says to keep flowing, or when no drift was detected.
|
|
113
|
+
if (drift.recommendedAction === 'CONTINUE' || drift.driftType === 'NO_DRIFT')
|
|
114
|
+
return null;
|
|
115
|
+
const isScopeRedirect = drift.recommendedAction === 'SCOPE_REDIRECT';
|
|
116
|
+
return ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)("div", { ...styling, className: (0, classnames_1.default)('ss__chat__topic-drift', className, internalClassName), children: [(0, jsx_runtime_1.jsx)(Icon_1.Icon, { icon: "info", size: "18px", className: 'ss__chat__topic-drift__icon--info' }), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__topic-drift__text', children: [(0, jsx_runtime_1.jsx)("span", { ...(isScopeRedirect ? mergedLang.topicDriftScopeMessage?.all : mergedLang.topicDriftMessage?.all) }), (0, jsx_runtime_1.jsx)("span", { ...(isScopeRedirect ? mergedLang.topicDriftScopeSubMessage?.all : mergedLang.topicDriftSubMessage?.all) })] }), !isScopeRedirect && ((0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__topic-drift__button', onClick: () => {
|
|
117
|
+
// Capture image attachments from the current chat before handleTopicDrift /
|
|
118
|
+
// createChat tear down the conversation — an imageSearch that drifted needs
|
|
119
|
+
// the same image attached to the carried-over message in the new session,
|
|
120
|
+
// otherwise params would fall back to a `general` request without the image.
|
|
121
|
+
const previousImageAttachments = (store.currentChat?.attachments.attached || [])
|
|
122
|
+
.filter((item) => item.type === 'image' && item.state !== 'error')
|
|
123
|
+
.map((item) => {
|
|
124
|
+
const img = item;
|
|
125
|
+
return {
|
|
126
|
+
type: 'image',
|
|
127
|
+
base64: img.base64,
|
|
128
|
+
fileName: img.fileName,
|
|
129
|
+
imageId: img.imageId,
|
|
130
|
+
imageUrl: img.imageUrl,
|
|
131
|
+
thumbnailUrl: img.thumbnailUrl,
|
|
132
|
+
// Already uploaded — skip the 'loading' default state.
|
|
133
|
+
state: 'attached',
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
const messageText = store.currentChat?.handleTopicDrift();
|
|
137
|
+
if (messageText) {
|
|
138
|
+
controller.store.createChat();
|
|
139
|
+
previousImageAttachments.forEach((cfg) => {
|
|
140
|
+
controller.store.currentChat?.attachments.add(cfg);
|
|
141
|
+
});
|
|
142
|
+
// partial override — the params getter decides the requestType (e.g. imageSearch
|
|
143
|
+
// when an image is re-attached), so only the message is overridden here
|
|
144
|
+
controller.search({ data: { message: messageText } });
|
|
145
|
+
}
|
|
146
|
+
}, children: (0, jsx_runtime_1.jsx)("span", { ...mergedLang.newSessionButton?.all }) })), (0, jsx_runtime_1.jsx)("span", { role: "button", ref: (e) => (0, useA11y_1.useA11y)(e), "aria-label": (0, Chat_lang_1.langAttrOf)(lang.topicDriftDismissButton, 'aria-label'), onClick: () => {
|
|
147
|
+
store.currentChat?.dismissTopicDrift();
|
|
148
|
+
}, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { icon: "close-thin", size: "14px", className: 'ss__chat__topic-drift__icon--close' }) })] }) }));
|
|
149
|
+
});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chatAccentThemeComponents = void 0;
|
|
4
|
+
const utilities_1 = require("../../../../utilities");
|
|
5
|
+
/**
|
|
6
|
+
* Accent styling for buttons living inside child components (ChatResult's cart /
|
|
7
|
+
* inquire icons and ChatQuickview's action buttons) — injected through
|
|
8
|
+
* the theme so each child applies it via its own style pipeline instead of the
|
|
9
|
+
* organism reaching in with `!important` overrides.
|
|
10
|
+
*/
|
|
11
|
+
const chatAccentThemeComponents = ({ primaryAccentColorBg, primaryAccentColorFg, secondaryAccentColorBg, secondaryAccentColorFg, }) => {
|
|
12
|
+
return {
|
|
13
|
+
chatResult: {
|
|
14
|
+
style: {
|
|
15
|
+
'.ss__chat-result__image__icons': {
|
|
16
|
+
'.ss__button.ss__chat-result__image__icons__icon--cart': {
|
|
17
|
+
backgroundColor: primaryAccentColorBg,
|
|
18
|
+
svg: {
|
|
19
|
+
fill: primaryAccentColorFg,
|
|
20
|
+
stroke: primaryAccentColorFg,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
'.ss__button.ss__chat-result__image__icons__icon--inquire': {
|
|
24
|
+
backgroundColor: secondaryAccentColorBg,
|
|
25
|
+
svg: {
|
|
26
|
+
fill: secondaryAccentColorFg,
|
|
27
|
+
stroke: secondaryAccentColorFg,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
chatQuickview: {
|
|
34
|
+
style: {
|
|
35
|
+
'.ss__quickview__add-to-cart.ss__button': {
|
|
36
|
+
background: primaryAccentColorBg,
|
|
37
|
+
color: primaryAccentColorFg,
|
|
38
|
+
svg: {
|
|
39
|
+
fill: primaryAccentColorFg,
|
|
40
|
+
stroke: primaryAccentColorFg,
|
|
41
|
+
},
|
|
42
|
+
'&:not(.ss__button--disabled):hover': {
|
|
43
|
+
background: new utilities_1.Colour(primaryAccentColorBg).mixBlack(),
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
'.ss__quickview__more-info.ss__button, .ss__quickview__similar.ss__button, .ss__quickview__discuss.ss__button': {
|
|
47
|
+
background: secondaryAccentColorBg,
|
|
48
|
+
color: secondaryAccentColorFg,
|
|
49
|
+
border: `1px solid ${secondaryAccentColorFg}`,
|
|
50
|
+
svg: {
|
|
51
|
+
fill: secondaryAccentColorFg,
|
|
52
|
+
stroke: secondaryAccentColorFg,
|
|
53
|
+
},
|
|
54
|
+
'&:not(.ss__button--disabled):hover': {
|
|
55
|
+
background: new utilities_1.Colour(secondaryAccentColorBg).mixBlack(),
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
exports.chatAccentThemeComponents = chatAccentThemeComponents;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useChatFileUpload = void 0;
|
|
4
|
+
const hooks_1 = require("preact/hooks");
|
|
5
|
+
const hasFiles = (e) => Array.from(e.dataTransfer?.types || []).includes('Files');
|
|
6
|
+
/**
|
|
7
|
+
* Wires drag-and-drop image upload onto the chat footer plus a ref for the
|
|
8
|
+
* hidden file input. `dragenter` / `dragleave` fire on every child crossing,
|
|
9
|
+
* so a counter is kept to know when the pointer has truly left the footer.
|
|
10
|
+
*/
|
|
11
|
+
const useChatFileUpload = ({ enabled, onUpload }) => {
|
|
12
|
+
const fileInputRef = (0, hooks_1.useRef)(null);
|
|
13
|
+
const [isDraggingFile, setIsDraggingFile] = (0, hooks_1.useState)(false);
|
|
14
|
+
const dragCounterRef = (0, hooks_1.useRef)(0);
|
|
15
|
+
// Reset drag state when uploads become disabled mid-drag (e.g. loading starts)
|
|
16
|
+
// so the drop overlay cannot get stuck on screen.
|
|
17
|
+
(0, hooks_1.useEffect)(() => {
|
|
18
|
+
if (!enabled) {
|
|
19
|
+
dragCounterRef.current = 0;
|
|
20
|
+
setIsDraggingFile(false);
|
|
21
|
+
}
|
|
22
|
+
}, [enabled]);
|
|
23
|
+
const onDragEnter = (e) => {
|
|
24
|
+
if (!enabled || !hasFiles(e))
|
|
25
|
+
return;
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
dragCounterRef.current += 1;
|
|
28
|
+
setIsDraggingFile(true);
|
|
29
|
+
};
|
|
30
|
+
const onDragOver = (e) => {
|
|
31
|
+
if (!enabled || !hasFiles(e))
|
|
32
|
+
return;
|
|
33
|
+
// Required to allow the drop event to fire
|
|
34
|
+
e.preventDefault();
|
|
35
|
+
if (e.dataTransfer)
|
|
36
|
+
e.dataTransfer.dropEffect = 'copy';
|
|
37
|
+
};
|
|
38
|
+
const onDragLeave = (e) => {
|
|
39
|
+
if (!enabled || !hasFiles(e))
|
|
40
|
+
return;
|
|
41
|
+
dragCounterRef.current = Math.max(0, dragCounterRef.current - 1);
|
|
42
|
+
if (dragCounterRef.current === 0)
|
|
43
|
+
setIsDraggingFile(false);
|
|
44
|
+
};
|
|
45
|
+
const onDrop = async (e) => {
|
|
46
|
+
if (!enabled || !hasFiles(e))
|
|
47
|
+
return;
|
|
48
|
+
e.preventDefault();
|
|
49
|
+
dragCounterRef.current = 0;
|
|
50
|
+
setIsDraggingFile(false);
|
|
51
|
+
const dropped = Array.from(e.dataTransfer?.files || []);
|
|
52
|
+
const firstImage = dropped.find((f) => f.type.startsWith('image/'));
|
|
53
|
+
if (!firstImage)
|
|
54
|
+
return;
|
|
55
|
+
// Reconstruct a FileList — consumers (e.g. controller.upload) expect FileList | null
|
|
56
|
+
const dt = new DataTransfer();
|
|
57
|
+
dt.items.add(firstImage);
|
|
58
|
+
await onUpload(dt.files);
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
fileInputRef,
|
|
62
|
+
isDraggingFile,
|
|
63
|
+
dragHandlers: { onDragEnter, onDragOver, onDragLeave, onDrop },
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.useChatFileUpload = useChatFileUpload;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useChatGestures = void 0;
|
|
4
|
+
const hooks_1 = require("preact/hooks");
|
|
5
|
+
/**
|
|
6
|
+
* Drag-down-to-dismiss gesture for the mobile secondary chat panel.
|
|
7
|
+
*
|
|
8
|
+
* Tracks vertical touch movement and applies a translateY offset until the user releases.
|
|
9
|
+
* If the user passes a distance or velocity threshold the panel animates the rest of the way
|
|
10
|
+
* out and `onDismiss` fires; otherwise it snaps back to zero.
|
|
11
|
+
*/
|
|
12
|
+
const useChatGestures = ({ panelRef, shouldShowSideChat, activeMessageId, onDismiss }) => {
|
|
13
|
+
const swipeStartY = (0, hooks_1.useRef)(0);
|
|
14
|
+
const swipeStartTime = (0, hooks_1.useRef)(0);
|
|
15
|
+
const swipeActive = (0, hooks_1.useRef)(false);
|
|
16
|
+
const swipeOffsetRef = (0, hooks_1.useRef)(0);
|
|
17
|
+
const animationTimerRef = (0, hooks_1.useRef)(null);
|
|
18
|
+
const [swipeOffset, setSwipeOffsetRaw] = (0, hooks_1.useState)(0);
|
|
19
|
+
const [swipeAnimating, setSwipeAnimating] = (0, hooks_1.useState)(false);
|
|
20
|
+
const updateSwipeOffset = (value) => {
|
|
21
|
+
swipeOffsetRef.current = value;
|
|
22
|
+
setSwipeOffsetRaw(value);
|
|
23
|
+
};
|
|
24
|
+
// Reset swipe state when secondary panel opens/closes or active message changes
|
|
25
|
+
(0, hooks_1.useEffect)(() => {
|
|
26
|
+
updateSwipeOffset(0);
|
|
27
|
+
setSwipeAnimating(false);
|
|
28
|
+
swipeActive.current = false;
|
|
29
|
+
}, [shouldShowSideChat, activeMessageId]);
|
|
30
|
+
const onTouchStart = (e) => {
|
|
31
|
+
swipeStartY.current = e.touches[0].clientY;
|
|
32
|
+
swipeStartTime.current = Date.now();
|
|
33
|
+
swipeActive.current = false; // only activate after dead-zone threshold
|
|
34
|
+
setSwipeAnimating(false);
|
|
35
|
+
};
|
|
36
|
+
const onTouchMove = (e) => {
|
|
37
|
+
const diff = e.touches[0].clientY - swipeStartY.current;
|
|
38
|
+
// Require a minimum drag distance before activating the swipe,
|
|
39
|
+
// so taps on buttons (e.g. close) still fire their click events.
|
|
40
|
+
if (!swipeActive.current) {
|
|
41
|
+
if (Math.abs(diff) < 8)
|
|
42
|
+
return; // still within dead-zone
|
|
43
|
+
swipeActive.current = true;
|
|
44
|
+
}
|
|
45
|
+
if (diff > 0) {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
updateSwipeOffset(diff);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
updateSwipeOffset(0);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const onTouchEnd = () => {
|
|
54
|
+
if (!swipeActive.current)
|
|
55
|
+
return;
|
|
56
|
+
swipeActive.current = false;
|
|
57
|
+
const offset = swipeOffsetRef.current;
|
|
58
|
+
const height = panelRef.current?.offsetHeight || 400;
|
|
59
|
+
const elapsed = Date.now() - swipeStartTime.current;
|
|
60
|
+
const velocity = offset / (elapsed || 1); // px per ms
|
|
61
|
+
// Dismiss if dragged past 25% threshold OR a quick flick (>0.5 px/ms with >50px travel)
|
|
62
|
+
const shouldDismiss = offset > height * 0.25 || (velocity > 0.5 && offset > 50);
|
|
63
|
+
if (shouldDismiss) {
|
|
64
|
+
// Animate out then dismiss
|
|
65
|
+
setSwipeAnimating(true);
|
|
66
|
+
updateSwipeOffset(height);
|
|
67
|
+
if (animationTimerRef.current)
|
|
68
|
+
clearTimeout(animationTimerRef.current);
|
|
69
|
+
animationTimerRef.current = setTimeout(() => {
|
|
70
|
+
onDismiss();
|
|
71
|
+
updateSwipeOffset(0);
|
|
72
|
+
setSwipeAnimating(false);
|
|
73
|
+
}, 300);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Snap back
|
|
77
|
+
setSwipeAnimating(true);
|
|
78
|
+
updateSwipeOffset(0);
|
|
79
|
+
if (animationTimerRef.current)
|
|
80
|
+
clearTimeout(animationTimerRef.current);
|
|
81
|
+
animationTimerRef.current = setTimeout(() => setSwipeAnimating(false), 300);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
(0, hooks_1.useEffect)(() => {
|
|
85
|
+
return () => {
|
|
86
|
+
if (animationTimerRef.current)
|
|
87
|
+
clearTimeout(animationTimerRef.current);
|
|
88
|
+
};
|
|
89
|
+
}, []);
|
|
90
|
+
return {
|
|
91
|
+
swipeOffset,
|
|
92
|
+
swipeAnimating,
|
|
93
|
+
swipeHandlers: { onTouchStart, onTouchMove, onTouchEnd },
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
exports.useChatGestures = useChatGestures;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useChatOverflow = void 0;
|
|
4
|
+
const hooks_1 = require("preact/hooks");
|
|
5
|
+
/**
|
|
6
|
+
* Manages the auto-scroll, "new message" indicator, and overflow detection for the
|
|
7
|
+
* chat message list. Owns all scroll listeners and ResizeObservers so the host
|
|
8
|
+
* component just consumes the derived state.
|
|
9
|
+
*/
|
|
10
|
+
const useChatOverflow = ({ messagesContainerRef, headerRef, open, loading, visibleChatLength, lastVisibleMessage, }) => {
|
|
11
|
+
const [showNewMessages, setShowNewMessages] = (0, hooks_1.useState)(false);
|
|
12
|
+
const [messagesOverflow, setMessagesOverflow] = (0, hooks_1.useState)(false);
|
|
13
|
+
const isNearBottomRef = (0, hooks_1.useRef)(true);
|
|
14
|
+
const scrollToBottom = () => {
|
|
15
|
+
// Scroll the messages container directly (instead of scrollIntoView on the
|
|
16
|
+
// bottom anchor) so the browser never walks up the ancestor chain. On small
|
|
17
|
+
// viewports a smooth scrollIntoView could otherwise animate the document /
|
|
18
|
+
// visual viewport and visually push the fixed-position chat off-screen.
|
|
19
|
+
const container = messagesContainerRef.current;
|
|
20
|
+
if (container) {
|
|
21
|
+
container.scrollTo({ top: container.scrollHeight, behavior: 'smooth' });
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
// Conditional scroll: only scrolls if the user is already near the bottom.
|
|
25
|
+
const scrollToBottomIfNear = () => {
|
|
26
|
+
if (isNearBottomRef.current) {
|
|
27
|
+
scrollToBottom();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
// Scroll to bottom when chat opens
|
|
31
|
+
(0, hooks_1.useEffect)(() => {
|
|
32
|
+
if (open) {
|
|
33
|
+
scrollToBottom();
|
|
34
|
+
setShowNewMessages(false);
|
|
35
|
+
isNearBottomRef.current = true;
|
|
36
|
+
}
|
|
37
|
+
}, [open]);
|
|
38
|
+
// Handle new messages — auto-scroll for user messages, show popup for response messages when scrolled up
|
|
39
|
+
(0, hooks_1.useEffect)(() => {
|
|
40
|
+
if (!open || !lastVisibleMessage)
|
|
41
|
+
return;
|
|
42
|
+
if (lastVisibleMessage.messageType === 'user') {
|
|
43
|
+
scrollToBottom();
|
|
44
|
+
setShowNewMessages(false);
|
|
45
|
+
}
|
|
46
|
+
else if (isNearBottomRef.current) {
|
|
47
|
+
scrollToBottom();
|
|
48
|
+
setShowNewMessages(false);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
setShowNewMessages(true);
|
|
52
|
+
}
|
|
53
|
+
}, [visibleChatLength]);
|
|
54
|
+
// Scroll to show loading indicator when user sends a message
|
|
55
|
+
(0, hooks_1.useEffect)(() => {
|
|
56
|
+
if (open && loading) {
|
|
57
|
+
scrollToBottom();
|
|
58
|
+
}
|
|
59
|
+
}, [loading]);
|
|
60
|
+
// Track scroll position to dismiss the "New messages" popup when user scrolls to bottom
|
|
61
|
+
(0, hooks_1.useEffect)(() => {
|
|
62
|
+
const container = messagesContainerRef.current;
|
|
63
|
+
if (!container)
|
|
64
|
+
return;
|
|
65
|
+
const handleScroll = () => {
|
|
66
|
+
const threshold = 100;
|
|
67
|
+
const isNearBottom = container.scrollHeight - container.scrollTop - container.clientHeight < threshold;
|
|
68
|
+
isNearBottomRef.current = isNearBottom;
|
|
69
|
+
if (isNearBottom) {
|
|
70
|
+
setShowNewMessages(false);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
container.addEventListener('scroll', handleScroll);
|
|
74
|
+
return () => container.removeEventListener('scroll', handleScroll);
|
|
75
|
+
}, [open]);
|
|
76
|
+
// Track whether the messages container is overflowing so the comparisons header
|
|
77
|
+
// can switch between in-flow (short conversations — top content stays reachable)
|
|
78
|
+
// and overlay (overflowing — avoid layout shift when toggling the tray).
|
|
79
|
+
// Hysteresis: when already in overlay, only return to in-flow if the content
|
|
80
|
+
// would still fit *with* the header re-inserted — otherwise the two states
|
|
81
|
+
// fight each other and the layout flickers.
|
|
82
|
+
(0, hooks_1.useEffect)(() => {
|
|
83
|
+
const container = messagesContainerRef.current;
|
|
84
|
+
if (!container || typeof ResizeObserver === 'undefined')
|
|
85
|
+
return;
|
|
86
|
+
const update = () => {
|
|
87
|
+
setMessagesOverflow((prev) => {
|
|
88
|
+
const headerHeight = headerRef.current?.offsetHeight || 0;
|
|
89
|
+
if (prev) {
|
|
90
|
+
// Currently overlay: header isn't taking flow space. Only switch
|
|
91
|
+
// back to in-flow if the content would fit with the header added.
|
|
92
|
+
return container.scrollHeight > container.clientHeight - headerHeight + 1;
|
|
93
|
+
}
|
|
94
|
+
// Currently in-flow: header already takes space — straightforward check.
|
|
95
|
+
return container.scrollHeight > container.clientHeight + 1;
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
update();
|
|
99
|
+
const observer = new ResizeObserver(update);
|
|
100
|
+
observer.observe(container);
|
|
101
|
+
if (headerRef.current)
|
|
102
|
+
observer.observe(headerRef.current);
|
|
103
|
+
return () => observer.disconnect();
|
|
104
|
+
}, [open, visibleChatLength]);
|
|
105
|
+
return {
|
|
106
|
+
showNewMessages,
|
|
107
|
+
setShowNewMessages,
|
|
108
|
+
messagesOverflow,
|
|
109
|
+
scrollToBottom,
|
|
110
|
+
scrollToBottomIfNear,
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
exports.useChatOverflow = useChatOverflow;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useChatScrollLock = void 0;
|
|
4
|
+
const hooks_1 = require("preact/hooks");
|
|
5
|
+
/**
|
|
6
|
+
* Prevents the background page from scrolling while the chat is open.
|
|
7
|
+
*
|
|
8
|
+
* Locks body overflow for wheel/keyboard scrolling, and installs a `touchmove`
|
|
9
|
+
* handler for touch devices. iOS Safari (real iPad/iPhone) rubber-band-scrolls
|
|
10
|
+
* the body when a touchmove inside `.ss__chat__messages` reaches the top/bottom —
|
|
11
|
+
* and `overscroll-behavior: contain` is ignored there.
|
|
12
|
+
*
|
|
13
|
+
* We don't reposition the body (locking via `position: fixed` on `<body>` leaves
|
|
14
|
+
* iPad Safari in a stuck viewport state where the page can't scroll after the
|
|
15
|
+
* lock is released). Instead the `touchmove` handler:
|
|
16
|
+
* - allows the touchmove if it's inside a scrollable region of the chat
|
|
17
|
+
* and that region isn't at its scroll edge in the swipe direction;
|
|
18
|
+
* - calls `preventDefault()` otherwise — which is what blocks both
|
|
19
|
+
* background scrolling and iOS rubber-band overscroll.
|
|
20
|
+
* Cleanup just removes the listeners, so nothing can leak into the page.
|
|
21
|
+
*/
|
|
22
|
+
const useChatScrollLock = ({ open, chatRef }) => {
|
|
23
|
+
// Lock body scroll while chat is open so touch/wheel scrolls don't leak to the page behind
|
|
24
|
+
(0, hooks_1.useEffect)(() => {
|
|
25
|
+
if (!open)
|
|
26
|
+
return;
|
|
27
|
+
const body = document.body;
|
|
28
|
+
const previousOverflow = body.style.overflow;
|
|
29
|
+
const previousOverscroll = body.style.overscrollBehavior;
|
|
30
|
+
body.style.overflow = 'hidden';
|
|
31
|
+
body.style.overscrollBehavior = 'contain';
|
|
32
|
+
return () => {
|
|
33
|
+
body.style.overflow = previousOverflow;
|
|
34
|
+
body.style.overscrollBehavior = previousOverscroll;
|
|
35
|
+
};
|
|
36
|
+
}, [open]);
|
|
37
|
+
(0, hooks_1.useEffect)(() => {
|
|
38
|
+
if (!open)
|
|
39
|
+
return;
|
|
40
|
+
if (typeof document === 'undefined')
|
|
41
|
+
return;
|
|
42
|
+
let startX = 0;
|
|
43
|
+
let startY = 0;
|
|
44
|
+
let scrollEl = null;
|
|
45
|
+
// Walk up from the touch target to find the first ancestor inside the chat
|
|
46
|
+
// that is actually scrollable in either axis. Stop at the chat root so we
|
|
47
|
+
// never consider elements outside the chat.
|
|
48
|
+
const findScrollableInChat = (start) => {
|
|
49
|
+
const chatRoot = chatRef.current;
|
|
50
|
+
if (!chatRoot)
|
|
51
|
+
return null;
|
|
52
|
+
let el = start;
|
|
53
|
+
while (el && chatRoot.contains(el)) {
|
|
54
|
+
const style = getComputedStyle(el);
|
|
55
|
+
const scrollableY = (style.overflowY === 'auto' || style.overflowY === 'scroll') && el.scrollHeight > el.clientHeight;
|
|
56
|
+
const scrollableX = (style.overflowX === 'auto' || style.overflowX === 'scroll') && el.scrollWidth > el.clientWidth;
|
|
57
|
+
if (scrollableY || scrollableX) {
|
|
58
|
+
return el;
|
|
59
|
+
}
|
|
60
|
+
if (el === chatRoot)
|
|
61
|
+
break;
|
|
62
|
+
el = el.parentElement;
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
};
|
|
66
|
+
const onTouchStart = (e) => {
|
|
67
|
+
if (!e.touches[0])
|
|
68
|
+
return;
|
|
69
|
+
startX = e.touches[0].clientX;
|
|
70
|
+
startY = e.touches[0].clientY;
|
|
71
|
+
scrollEl = findScrollableInChat(e.target);
|
|
72
|
+
};
|
|
73
|
+
const onTouchMove = (e) => {
|
|
74
|
+
const target = e.target;
|
|
75
|
+
const chatRoot = chatRef.current;
|
|
76
|
+
const inChat = !!(chatRoot && target && chatRoot.contains(target));
|
|
77
|
+
// Touches outside the chat shouldn't scroll the background.
|
|
78
|
+
if (!inChat) {
|
|
79
|
+
if (e.cancelable)
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Inside the chat but no scrollable container — block to prevent body scroll.
|
|
84
|
+
if (!scrollEl) {
|
|
85
|
+
if (e.cancelable)
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Inside a scrollable container — only block when at the edge in the
|
|
90
|
+
// swipe direction, so internal scrolling continues to work. Detect the
|
|
91
|
+
// dominant axis so horizontally-scrollable rows (e.g. the facets row)
|
|
92
|
+
// also get to handle their own touch gestures.
|
|
93
|
+
const currentX = e.touches[0]?.clientX ?? startX;
|
|
94
|
+
const currentY = e.touches[0]?.clientY ?? startY;
|
|
95
|
+
const deltaX = currentX - startX;
|
|
96
|
+
const deltaY = currentY - startY;
|
|
97
|
+
const horizontal = Math.abs(deltaX) > Math.abs(deltaY);
|
|
98
|
+
if (horizontal) {
|
|
99
|
+
const scrollsX = scrollEl.scrollWidth > scrollEl.clientWidth;
|
|
100
|
+
if (!scrollsX) {
|
|
101
|
+
if (e.cancelable)
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const atLeft = scrollEl.scrollLeft <= 0;
|
|
106
|
+
const atRight = scrollEl.scrollLeft + scrollEl.clientWidth >= scrollEl.scrollWidth - 1;
|
|
107
|
+
if ((atLeft && deltaX > 0) || (atRight && deltaX < 0)) {
|
|
108
|
+
if (e.cancelable)
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const scrollsY = scrollEl.scrollHeight > scrollEl.clientHeight;
|
|
114
|
+
if (!scrollsY) {
|
|
115
|
+
if (e.cancelable)
|
|
116
|
+
e.preventDefault();
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const atTop = scrollEl.scrollTop <= 0;
|
|
120
|
+
const atBottom = scrollEl.scrollTop + scrollEl.clientHeight >= scrollEl.scrollHeight - 1;
|
|
121
|
+
if ((atTop && deltaY > 0) || (atBottom && deltaY < 0)) {
|
|
122
|
+
if (e.cancelable)
|
|
123
|
+
e.preventDefault();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
document.addEventListener('touchstart', onTouchStart, { passive: true });
|
|
128
|
+
document.addEventListener('touchmove', onTouchMove, { passive: false });
|
|
129
|
+
return () => {
|
|
130
|
+
document.removeEventListener('touchstart', onTouchStart);
|
|
131
|
+
document.removeEventListener('touchmove', onTouchMove);
|
|
132
|
+
};
|
|
133
|
+
}, [open]);
|
|
134
|
+
};
|
|
135
|
+
exports.useChatScrollLock = useChatScrollLock;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Chat"), exports);
|
|
18
|
+
__exportStar(require("./Chat.lang"), exports);
|