@athoscommerce/snap-preact 1.2.2 → 1.2.3-beta.1
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/Button/Button.d.ts +1 -1
- package/dist/cjs/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts +7 -0
- package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +85 -0
- package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts +2 -0
- package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.js +17 -0
- package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.d.ts +1 -0
- package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.js +30 -13
- package/dist/cjs/components/src/components/Atoms/Icon/paths.d.ts +21 -0
- package/dist/cjs/components/src/components/Atoms/Icon/paths.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Atoms/Icon/paths.js +21 -0
- package/dist/cjs/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +2 -2
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +18 -0
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +115 -0
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts +2 -0
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +106 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts +2 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +23 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +445 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts +2 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +2 -2
- package/dist/cjs/components/src/components/Molecules/Result/Result.d.ts +3 -3
- package/dist/cjs/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Molecules/Result/Result.js +4 -4
- package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.d.ts +2 -0
- package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.js +19 -2
- package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.js +30 -12
- package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts +14 -0
- package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Organisms/Chat/Chat.js +1619 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ChatAttachmentContext.d.ts +19 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ChatAttachmentContext.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ChatAttachmentContext.js +22 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ChatResult.d.ts +12 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ChatResult.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ChatResult.js +158 -0
- package/dist/cjs/components/src/components/Organisms/Chat/MessageText.d.ts +13 -0
- package/dist/cjs/components/src/components/Organisms/Chat/MessageText.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Organisms/Chat/MessageText.js +170 -0
- package/dist/cjs/components/src/components/Organisms/Chat/MessageUser.d.ts +11 -0
- package/dist/cjs/components/src/components/Organisms/Chat/MessageUser.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Organisms/Chat/MessageUser.js +192 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ResultsDisplay.d.ts +11 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ResultsDisplay.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Organisms/Chat/ResultsDisplay.js +86 -0
- package/dist/cjs/components/src/components/Organisms/Chat/SuggestedQuestions.d.ts +12 -0
- package/dist/cjs/components/src/components/Organisms/Chat/SuggestedQuestions.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Organisms/Chat/SuggestedQuestions.js +73 -0
- package/dist/cjs/components/src/components/Organisms/Chat/index.d.ts +2 -0
- package/dist/cjs/components/src/components/Organisms/Chat/index.d.ts.map +1 -0
- package/dist/cjs/components/src/components/Organisms/Chat/index.js +17 -0
- package/dist/cjs/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.js +2 -2
- package/dist/cjs/components/src/components/Organisms/MobileSidebar/MobileSidebar.d.ts +1 -0
- package/dist/cjs/components/src/components/Organisms/MobileSidebar/MobileSidebar.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Organisms/MobileSidebar/MobileSidebar.js +2 -2
- package/dist/cjs/components/src/components/Organisms/Results/Results.js +1 -1
- package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +2 -0
- package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +2 -0
- package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +2 -0
- package/dist/cjs/components/src/components/Templates/Search/Search.d.ts +2 -2
- package/dist/cjs/components/src/components/Templates/Search/Search.d.ts.map +1 -1
- package/dist/cjs/components/src/hooks/useLayoutOptions.d.ts.map +1 -1
- package/dist/cjs/components/src/hooks/useLayoutOptions.js +21 -11
- package/dist/cjs/components/src/index.d.ts +1 -0
- package/dist/cjs/components/src/index.d.ts.map +1 -1
- package/dist/cjs/components/src/index.js +1 -0
- package/dist/cjs/components/src/providers/themeComponents.d.ts +50 -16
- package/dist/cjs/components/src/providers/themeComponents.d.ts.map +1 -1
- package/dist/cjs/components/src/providers/withTracking.d.ts +2 -2
- package/dist/cjs/components/src/providers/withTracking.d.ts.map +1 -1
- package/dist/cjs/components/src/types.d.ts +2 -0
- package/dist/cjs/components/src/types.d.ts.map +1 -1
- package/dist/cjs/src/Snap.d.ts +2 -1
- package/dist/cjs/src/Snap.d.ts.map +1 -1
- package/dist/cjs/src/Snap.js +124 -24
- package/dist/cjs/src/Templates/SnapTemplates.d.ts +12 -2
- package/dist/cjs/src/Templates/SnapTemplates.d.ts.map +1 -1
- package/dist/cjs/src/Templates/SnapTemplates.js +54 -1
- package/dist/cjs/src/Templates/Stores/LibraryStore.d.ts +4 -0
- package/dist/cjs/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
- package/dist/cjs/src/Templates/Stores/LibraryStore.js +19 -0
- package/dist/cjs/src/Templates/Stores/TemplateStore.d.ts +5 -2
- package/dist/cjs/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
- package/dist/cjs/src/Templates/Stores/TemplateStore.js +1 -0
- package/dist/cjs/src/Templates/Stores/library/components/Chat.d.ts +2 -0
- package/dist/cjs/src/Templates/Stores/library/components/Chat.d.ts.map +1 -0
- package/dist/cjs/src/Templates/Stores/library/components/Chat.js +5 -0
- package/dist/cjs/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
- package/dist/cjs/src/Templates/Stores/library/languages/es.js +5 -0
- package/dist/cjs/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
- package/dist/cjs/src/Templates/Stores/library/languages/fr.js +5 -0
- package/dist/cjs/src/create/createChatController.d.ts +5 -0
- package/dist/cjs/src/create/createChatController.d.ts.map +1 -0
- package/dist/cjs/src/create/createChatController.js +43 -0
- package/dist/cjs/src/setupEvents.d.ts.map +1 -1
- package/dist/cjs/src/setupEvents.js +39 -0
- package/dist/cjs/src/types.d.ts +15 -3
- package/dist/cjs/src/types.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/Button/Button.d.ts +1 -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 +7 -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 +67 -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 +1 -0
- package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.js +33 -9
- package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts +21 -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 +21 -0
- package/dist/esm/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +1 -1
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +18 -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 +109 -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/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +17 -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 +85 -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/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +23 -0
- package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +421 -0
- package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +1 -1
- package/dist/esm/components/src/components/Molecules/Result/Result.d.ts +3 -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 +2 -2
- package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts +2 -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 +35 -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 +30 -12
- package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts +14 -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 +1560 -0
- package/dist/esm/components/src/components/Organisms/Chat/ChatAttachmentContext.d.ts +19 -0
- package/dist/esm/components/src/components/Organisms/Chat/ChatAttachmentContext.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/ChatAttachmentContext.js +16 -0
- package/dist/esm/components/src/components/Organisms/Chat/ChatResult.d.ts +12 -0
- package/dist/esm/components/src/components/Organisms/Chat/ChatResult.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/ChatResult.js +143 -0
- package/dist/esm/components/src/components/Organisms/Chat/MessageText.d.ts +13 -0
- package/dist/esm/components/src/components/Organisms/Chat/MessageText.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/MessageText.js +152 -0
- package/dist/esm/components/src/components/Organisms/Chat/MessageUser.d.ts +11 -0
- package/dist/esm/components/src/components/Organisms/Chat/MessageUser.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/MessageUser.js +164 -0
- package/dist/esm/components/src/components/Organisms/Chat/ResultsDisplay.d.ts +11 -0
- package/dist/esm/components/src/components/Organisms/Chat/ResultsDisplay.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/ResultsDisplay.js +70 -0
- package/dist/esm/components/src/components/Organisms/Chat/SuggestedQuestions.d.ts +12 -0
- package/dist/esm/components/src/components/Organisms/Chat/SuggestedQuestions.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/Chat/SuggestedQuestions.js +58 -0
- package/dist/esm/components/src/components/Organisms/Chat/index.d.ts +2 -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 +1 -0
- package/dist/esm/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.js +2 -2
- package/dist/esm/components/src/components/Organisms/MobileSidebar/MobileSidebar.d.ts +1 -0
- package/dist/esm/components/src/components/Organisms/MobileSidebar/MobileSidebar.d.ts.map +1 -1
- package/dist/esm/components/src/components/Organisms/MobileSidebar/MobileSidebar.js +2 -2
- 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 +3 -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 +3 -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 +3 -0
- package/dist/esm/components/src/components/Templates/Search/Search.d.ts +2 -2
- package/dist/esm/components/src/components/Templates/Search/Search.d.ts.map +1 -1
- package/dist/esm/components/src/hooks/useLayoutOptions.d.ts.map +1 -1
- package/dist/esm/components/src/hooks/useLayoutOptions.js +21 -11
- package/dist/esm/components/src/index.d.ts +1 -0
- package/dist/esm/components/src/index.d.ts.map +1 -1
- package/dist/esm/components/src/index.js +1 -0
- package/dist/esm/components/src/providers/themeComponents.d.ts +50 -16
- package/dist/esm/components/src/providers/themeComponents.d.ts.map +1 -1
- 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/types.d.ts +2 -0
- package/dist/esm/components/src/types.d.ts.map +1 -1
- package/dist/esm/src/Snap.d.ts +2 -1
- package/dist/esm/src/Snap.d.ts.map +1 -1
- package/dist/esm/src/Snap.js +59 -0
- package/dist/esm/src/Templates/SnapTemplates.d.ts +12 -2
- package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
- package/dist/esm/src/Templates/SnapTemplates.js +43 -0
- package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +4 -0
- package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/LibraryStore.js +6 -0
- package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +5 -2
- package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/TemplateStore.js +1 -0
- 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/languages/es.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/es.js +5 -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 +5 -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/setupEvents.d.ts.map +1 -1
- package/dist/esm/src/setupEvents.js +23 -0
- package/dist/esm/src/types.d.ts +15 -3
- package/dist/esm/src/types.d.ts.map +1 -1
- package/package.json +13 -12
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react-lite';
|
|
3
|
+
import { css } from '@emotion/react';
|
|
4
|
+
import classnames from 'classnames';
|
|
5
|
+
import { useTheme, CacheProvider, useTreePath } from '../../../providers';
|
|
6
|
+
import { mergeProps, mergeStyles } from '../../../utilities';
|
|
7
|
+
import { Image } from '../../Atoms/Image';
|
|
8
|
+
import { Button } from '../../Atoms/Button';
|
|
9
|
+
import { Icon, Price } from '../../..';
|
|
10
|
+
const defaultStyles = () => {
|
|
11
|
+
const colorPrimary = '#253B80';
|
|
12
|
+
return css({
|
|
13
|
+
display: 'flex',
|
|
14
|
+
flexDirection: 'column',
|
|
15
|
+
gap: '1em',
|
|
16
|
+
'.ss__chat-product-query-message__header': {
|
|
17
|
+
background: colorPrimary,
|
|
18
|
+
padding: '1em',
|
|
19
|
+
display: 'flex',
|
|
20
|
+
flexDirection: 'column',
|
|
21
|
+
'.ss__chat-product-query-message__header__back': {
|
|
22
|
+
display: 'flex',
|
|
23
|
+
alignItems: 'center',
|
|
24
|
+
gap: '0.35em',
|
|
25
|
+
color: '#fff',
|
|
26
|
+
cursor: 'pointer',
|
|
27
|
+
alignSelf: 'flex-start',
|
|
28
|
+
padding: '0.5em 0',
|
|
29
|
+
fontSize: '0.85em',
|
|
30
|
+
opacity: 0.85,
|
|
31
|
+
'&:hover': {
|
|
32
|
+
opacity: 1,
|
|
33
|
+
},
|
|
34
|
+
svg: {
|
|
35
|
+
fill: '#fff',
|
|
36
|
+
stroke: '#fff',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
'.ss__price': {
|
|
40
|
+
color: '#fff',
|
|
41
|
+
},
|
|
42
|
+
'.ss__chat-product-query-message__header__product': {
|
|
43
|
+
display: 'flex',
|
|
44
|
+
gap: '0.75em',
|
|
45
|
+
alignItems: 'center',
|
|
46
|
+
background: '#40528e',
|
|
47
|
+
borderRadius: '0.75em',
|
|
48
|
+
padding: '0.75em',
|
|
49
|
+
'.ss__chat-product-query-message__header__product__image': {
|
|
50
|
+
width: '25%',
|
|
51
|
+
objectFit: 'contain',
|
|
52
|
+
flexShrink: 0,
|
|
53
|
+
borderRadius: '0.33em',
|
|
54
|
+
overflow: 'hidden',
|
|
55
|
+
},
|
|
56
|
+
'.ss__chat-product-query-message__header__product__details': {
|
|
57
|
+
display: 'flex',
|
|
58
|
+
flexDirection: 'column',
|
|
59
|
+
gap: '0.2em',
|
|
60
|
+
flex: 1,
|
|
61
|
+
'.ss__chat-product-query-message__header__product__details__name': {
|
|
62
|
+
fontWeight: 'bold',
|
|
63
|
+
fontSize: '0.95em',
|
|
64
|
+
a: {
|
|
65
|
+
color: '#FFFFFF',
|
|
66
|
+
textDecoration: 'none',
|
|
67
|
+
'&:hover': {
|
|
68
|
+
textDecoration: 'underline',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
'.ss__chat-product-query-message__header__product__details__brand': {
|
|
73
|
+
fontSize: '0.8em',
|
|
74
|
+
color: 'rgba(255, 255, 255, 0.7)',
|
|
75
|
+
},
|
|
76
|
+
'.ss__chat-product-query-message__header__product__details__price': {
|
|
77
|
+
fontWeight: 'bold',
|
|
78
|
+
fontSize: '1.1em',
|
|
79
|
+
color: '#D4A843',
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
'.ss__chat-product-query-message__header__product__actions': {
|
|
83
|
+
display: 'flex',
|
|
84
|
+
flexDirection: 'column',
|
|
85
|
+
alignItems: 'flex-end',
|
|
86
|
+
alignSelf: 'stretch',
|
|
87
|
+
justifyContent: 'center',
|
|
88
|
+
gap: '0.35em',
|
|
89
|
+
flexShrink: 0,
|
|
90
|
+
'.ss__chat-product-query-message__header__product__actions__go-to-product': {
|
|
91
|
+
a: {
|
|
92
|
+
color: 'rgba(255, 255, 255, 0.85)',
|
|
93
|
+
fontSize: '0.8em',
|
|
94
|
+
textDecoration: 'underline',
|
|
95
|
+
cursor: 'pointer',
|
|
96
|
+
'&:hover': {
|
|
97
|
+
color: '#FFFFFF',
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
'.ss__chat-product-query-message__header__product__actions__add-to-cart .ss__button': {
|
|
102
|
+
borderRadius: '0.5em',
|
|
103
|
+
padding: '0.4em 0.75em',
|
|
104
|
+
fontWeight: 'bold',
|
|
105
|
+
border: 'none',
|
|
106
|
+
whiteSpace: 'nowrap',
|
|
107
|
+
cursor: 'pointer',
|
|
108
|
+
fontSize: '0.8em',
|
|
109
|
+
background: '#D4A843',
|
|
110
|
+
color: '#1F2937',
|
|
111
|
+
'&:not(.ss__button--disabled):hover': {
|
|
112
|
+
background: '#c49a3a',
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
'.ss__chat-product-query-message__header__product__actions__show-similar .ss__button': {
|
|
116
|
+
borderRadius: '0.5em',
|
|
117
|
+
padding: '0.4em 0.75em',
|
|
118
|
+
fontWeight: 'bold',
|
|
119
|
+
border: '1px solid rgba(255, 255, 255, 0.6)',
|
|
120
|
+
whiteSpace: 'nowrap',
|
|
121
|
+
cursor: 'pointer',
|
|
122
|
+
fontSize: '0.8em',
|
|
123
|
+
background: 'transparent',
|
|
124
|
+
color: '#fff',
|
|
125
|
+
'&:not(.ss__button--disabled):hover': {
|
|
126
|
+
background: 'rgba(255, 255, 255, 0.15)',
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
'.ss__chat-product-query-message__variants': {
|
|
133
|
+
padding: '0 2em',
|
|
134
|
+
'.ss__chat-product-query-message__variants__label': {
|
|
135
|
+
fontWeight: '600',
|
|
136
|
+
fontSize: '0.9em',
|
|
137
|
+
color: '#374151',
|
|
138
|
+
textTransform: 'uppercase',
|
|
139
|
+
marginBottom: '0.5em',
|
|
140
|
+
},
|
|
141
|
+
'.ss__chat-product-query-message__variants__swatches': {
|
|
142
|
+
display: 'flex',
|
|
143
|
+
flexWrap: 'wrap',
|
|
144
|
+
gap: '0.5em',
|
|
145
|
+
'.ss__chat-product-query-message__variants__swatch': {
|
|
146
|
+
display: 'flex',
|
|
147
|
+
flexDirection: 'column',
|
|
148
|
+
alignItems: 'center',
|
|
149
|
+
gap: '0.25em',
|
|
150
|
+
cursor: 'pointer',
|
|
151
|
+
padding: '0.25em',
|
|
152
|
+
borderRadius: '0.5em',
|
|
153
|
+
border: '2px solid transparent',
|
|
154
|
+
transition: 'border-color 0.15s ease',
|
|
155
|
+
'&:hover': {
|
|
156
|
+
borderColor: '#253B80',
|
|
157
|
+
},
|
|
158
|
+
'&.ss__chat-product-query-message__variants__swatch--selected': {
|
|
159
|
+
borderColor: '#253B80',
|
|
160
|
+
borderWidth: '3px',
|
|
161
|
+
padding: '0.15em',
|
|
162
|
+
},
|
|
163
|
+
'&.ss__chat-product-query-message__variants__swatch--unavailable': {
|
|
164
|
+
opacity: 0.4,
|
|
165
|
+
},
|
|
166
|
+
'.ss__chat-product-query-message__variants__swatch__image': {
|
|
167
|
+
width: '48px',
|
|
168
|
+
height: '48px',
|
|
169
|
+
objectFit: 'cover',
|
|
170
|
+
borderRadius: '50%',
|
|
171
|
+
border: '1px solid #E5E7EB',
|
|
172
|
+
},
|
|
173
|
+
'.ss__chat-product-query-message__variants__swatch__value': {
|
|
174
|
+
fontSize: '0.75em',
|
|
175
|
+
color: '#374151',
|
|
176
|
+
textAlign: 'center',
|
|
177
|
+
maxWidth: '60px',
|
|
178
|
+
overflow: 'hidden',
|
|
179
|
+
textOverflow: 'ellipsis',
|
|
180
|
+
whiteSpace: 'nowrap',
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
'.ss__chat-product-query-message__section': {
|
|
186
|
+
padding: '0 1em',
|
|
187
|
+
'.ss__chat-product-query-message__section__title': {
|
|
188
|
+
background: '#253B80',
|
|
189
|
+
color: '#fff',
|
|
190
|
+
padding: '0.5em 0.75em',
|
|
191
|
+
fontWeight: 'bold',
|
|
192
|
+
fontSize: '0.95em',
|
|
193
|
+
borderRadius: '0.5em 0.5em 0 0',
|
|
194
|
+
},
|
|
195
|
+
'.ss__chat-product-query-message__section__table': {
|
|
196
|
+
width: '100%',
|
|
197
|
+
maxWidth: '100%',
|
|
198
|
+
tableLayout: 'fixed',
|
|
199
|
+
borderCollapse: 'separate',
|
|
200
|
+
borderSpacing: 0,
|
|
201
|
+
fontSize: '0.9em',
|
|
202
|
+
border: '3px solid #253B80',
|
|
203
|
+
borderTop: 'none',
|
|
204
|
+
borderBottomLeftRadius: '0.5em',
|
|
205
|
+
borderBottomRightRadius: '0.5em',
|
|
206
|
+
overflow: 'hidden',
|
|
207
|
+
tr: {
|
|
208
|
+
borderBottom: '1px solid #E5E7EB',
|
|
209
|
+
},
|
|
210
|
+
td: {
|
|
211
|
+
padding: '0.6em 0.75em',
|
|
212
|
+
verticalAlign: 'top',
|
|
213
|
+
wordBreak: 'break-word',
|
|
214
|
+
overflowWrap: 'anywhere',
|
|
215
|
+
},
|
|
216
|
+
'td:first-of-type': {
|
|
217
|
+
fontWeight: '600',
|
|
218
|
+
color: '#374151',
|
|
219
|
+
textTransform: 'uppercase',
|
|
220
|
+
fontSize: '0.85em',
|
|
221
|
+
width: '40%',
|
|
222
|
+
},
|
|
223
|
+
'td:last-of-type': {
|
|
224
|
+
textAlign: 'right',
|
|
225
|
+
color: '#374151',
|
|
226
|
+
},
|
|
227
|
+
'.ss__chat-product-query-message__section__table__availability--in-stock': {
|
|
228
|
+
color: '#10B981',
|
|
229
|
+
fontWeight: '600',
|
|
230
|
+
},
|
|
231
|
+
'.ss__chat-product-query-message__section__table__availability--out-of-stock': {
|
|
232
|
+
color: '#DC2626',
|
|
233
|
+
fontWeight: '600',
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
'.ss__chat-product-query-message__section__description': {
|
|
237
|
+
padding: '0.75em',
|
|
238
|
+
fontSize: '0.9em',
|
|
239
|
+
color: '#374151',
|
|
240
|
+
lineHeight: '1.5',
|
|
241
|
+
border: '3px solid #253B80',
|
|
242
|
+
borderTop: 'none',
|
|
243
|
+
borderBottomLeftRadius: '0.5em',
|
|
244
|
+
borderBottomRightRadius: '0.5em',
|
|
245
|
+
},
|
|
246
|
+
'.ss__chat-product-query-message__section__features': {
|
|
247
|
+
margin: 0,
|
|
248
|
+
padding: '0.5em 1.25em',
|
|
249
|
+
fontSize: '0.9em',
|
|
250
|
+
li: {
|
|
251
|
+
padding: '0.3em 0',
|
|
252
|
+
color: '#374151',
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
};
|
|
258
|
+
// fields that have dedicated rendering in the product card; skip them in the info table
|
|
259
|
+
const CARD_FIELDS = new Set([
|
|
260
|
+
'name',
|
|
261
|
+
'brand',
|
|
262
|
+
'price',
|
|
263
|
+
'msrp',
|
|
264
|
+
'imageUrl',
|
|
265
|
+
'thumbnailImageUrl',
|
|
266
|
+
'secureImageUrl',
|
|
267
|
+
'secureThumbnailImageUrl',
|
|
268
|
+
'url',
|
|
269
|
+
'addToCartUrl',
|
|
270
|
+
'uid',
|
|
271
|
+
'sku',
|
|
272
|
+
'parentId',
|
|
273
|
+
'parentImageUrl',
|
|
274
|
+
'description',
|
|
275
|
+
'caption',
|
|
276
|
+
'popularity',
|
|
277
|
+
'stockMessage',
|
|
278
|
+
]);
|
|
279
|
+
// preferred ordering for the structured info table - any extras get appended after
|
|
280
|
+
const PREFERRED_INFO_ORDER = ['material', 'fit', 'color', 'sizes', 'size', 'category', 'rating', 'availability'];
|
|
281
|
+
const FEATURE_KEYS = ['features', 'feature_list', 'productFeatures', 'product_features', 'highlights'];
|
|
282
|
+
const formatLabel = (key) => {
|
|
283
|
+
return key
|
|
284
|
+
.replace(/[_-]+/g, ' ')
|
|
285
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
286
|
+
.trim();
|
|
287
|
+
};
|
|
288
|
+
const stripHtml = (str) => str.replace(/<[^>]*>/g, '');
|
|
289
|
+
const formatValue = (value) => {
|
|
290
|
+
if (Array.isArray(value)) {
|
|
291
|
+
return stripHtml(value.filter((v) => v != null && v !== '').join(', '));
|
|
292
|
+
}
|
|
293
|
+
if (value == null) {
|
|
294
|
+
return '';
|
|
295
|
+
}
|
|
296
|
+
return stripHtml(String(value));
|
|
297
|
+
};
|
|
298
|
+
const collectFeatures = (display) => {
|
|
299
|
+
const attributes = display?.attributes || {};
|
|
300
|
+
for (const key of FEATURE_KEYS) {
|
|
301
|
+
const raw = attributes[key];
|
|
302
|
+
if (Array.isArray(raw) && raw.length > 0) {
|
|
303
|
+
return raw.map((v) => String(v)).filter(Boolean);
|
|
304
|
+
}
|
|
305
|
+
if (typeof raw === 'string' && raw.trim()) {
|
|
306
|
+
// allow comma- or newline-separated feature strings
|
|
307
|
+
return raw
|
|
308
|
+
.split(/\r?\n|,/)
|
|
309
|
+
.map((v) => v.trim())
|
|
310
|
+
.filter(Boolean);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return [];
|
|
314
|
+
};
|
|
315
|
+
const collectInfoRows = (display, displayFields) => {
|
|
316
|
+
const core = display?.mappings?.core || {};
|
|
317
|
+
const attributes = display?.attributes || {};
|
|
318
|
+
const filterByDisplayFields = displayFields && displayFields.length > 0;
|
|
319
|
+
const displayFieldsLower = filterByDisplayFields ? displayFields.map((f) => f.toLowerCase()) : [];
|
|
320
|
+
const merged = {};
|
|
321
|
+
// when displayFields is specified, include matching core fields that are normally skipped
|
|
322
|
+
if (filterByDisplayFields) {
|
|
323
|
+
Object.entries(core).forEach(([key, value]) => {
|
|
324
|
+
if (displayFieldsLower.includes(key.toLowerCase()) && value != null) {
|
|
325
|
+
merged[key] = value;
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
// pull selected core fields (rating + availability)
|
|
330
|
+
if (core.rating != null) {
|
|
331
|
+
const rating = core.rating;
|
|
332
|
+
const ratingCount = core.ratingCount;
|
|
333
|
+
merged.rating = ratingCount ? `${rating}/5.0 (${ratingCount} reviews)` : `${rating}/5.0`;
|
|
334
|
+
}
|
|
335
|
+
if (core.available != null) {
|
|
336
|
+
merged.availability = core.available ? 'In Stock' : 'Out of Stock';
|
|
337
|
+
}
|
|
338
|
+
// merge product attributes, skipping ones already shown on the card and feature lists
|
|
339
|
+
Object.entries(attributes).forEach(([key, value]) => {
|
|
340
|
+
if (!filterByDisplayFields && CARD_FIELDS.has(key))
|
|
341
|
+
return;
|
|
342
|
+
if (FEATURE_KEYS.includes(key))
|
|
343
|
+
return;
|
|
344
|
+
const formatted = formatValue(value);
|
|
345
|
+
if (!formatted)
|
|
346
|
+
return;
|
|
347
|
+
merged[key] = formatted;
|
|
348
|
+
});
|
|
349
|
+
const seen = new Set();
|
|
350
|
+
const ordered = [];
|
|
351
|
+
PREFERRED_INFO_ORDER.forEach((preferred) => {
|
|
352
|
+
const match = Object.keys(merged).find((k) => k.toLowerCase() === preferred);
|
|
353
|
+
if (match && !seen.has(match)) {
|
|
354
|
+
seen.add(match);
|
|
355
|
+
ordered.push({ key: match, rawKey: match, label: formatLabel(match), value: formatValue(merged[match]) });
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
Object.keys(merged).forEach((key) => {
|
|
359
|
+
if (seen.has(key))
|
|
360
|
+
return;
|
|
361
|
+
seen.add(key);
|
|
362
|
+
ordered.push({ key, rawKey: key, label: formatLabel(key), value: formatValue(merged[key]) });
|
|
363
|
+
});
|
|
364
|
+
// filter and sort by displayFields order
|
|
365
|
+
if (filterByDisplayFields) {
|
|
366
|
+
const filtered = ordered.filter((row) => displayFieldsLower.includes(row.rawKey.toLowerCase()));
|
|
367
|
+
filtered.sort((a, b) => displayFieldsLower.indexOf(a.rawKey.toLowerCase()) - displayFieldsLower.indexOf(b.rawKey.toLowerCase()));
|
|
368
|
+
return filtered;
|
|
369
|
+
}
|
|
370
|
+
return ordered;
|
|
371
|
+
};
|
|
372
|
+
export const ChatProductQueryMessage = observer((properties) => {
|
|
373
|
+
const globalTheme = useTheme();
|
|
374
|
+
const globalTreePath = useTreePath();
|
|
375
|
+
const defaultProps = {
|
|
376
|
+
treePath: globalTreePath,
|
|
377
|
+
};
|
|
378
|
+
const props = mergeProps('chatProductQueryMessage', globalTheme, defaultProps, properties);
|
|
379
|
+
const { chatItem, controller, displayFields, className, internalClassName } = props;
|
|
380
|
+
const styling = mergeStyles(props, defaultStyles);
|
|
381
|
+
const { messageType, sourceProduct } = chatItem;
|
|
382
|
+
if (messageType !== 'productQuery') {
|
|
383
|
+
console.warn('ChatProductQueryMessage received message with unsupported type:', messageType, 'Expected type: productQuery');
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
const product = controller?.store.productQuickview;
|
|
387
|
+
const productQuickviewError = controller?.store.productQuickviewError;
|
|
388
|
+
const chatMessages = controller?.store.currentChat?.chat || [];
|
|
389
|
+
const sourceMessage = chatItem.sourceMessageId ? chatMessages.find((m) => m.id === chatItem.sourceMessageId) : null;
|
|
390
|
+
const cameFromInspiration = sourceMessage?.messageType === 'inspirationResult';
|
|
391
|
+
if (!product) {
|
|
392
|
+
return (_jsx(CacheProvider, { children: _jsx("div", { className: classnames('ss__chat-product-query-message', className, internalClassName), ...styling, children: _jsx("div", { className: classnames('ss__chat-product-query-message__header'), children: _jsx("div", { className: classnames('ss__chat-product-query-message__header__product'), children: _jsx("div", { className: classnames('ss__chat-product-query-message__header__product__details'), children: _jsx("div", { className: classnames('ss__chat-product-query-message__header__product__details__name'), children: productQuickviewError || 'Loading product details...' }) }) }) }) }) }));
|
|
393
|
+
}
|
|
394
|
+
const displayed = product.display;
|
|
395
|
+
const displayedCore = displayed.mappings?.core || {};
|
|
396
|
+
const variants = product.variants;
|
|
397
|
+
const selections = variants?.selections || [];
|
|
398
|
+
const displayedData = {
|
|
399
|
+
mappings: displayed.mappings,
|
|
400
|
+
attributes: displayed.attributes || {},
|
|
401
|
+
};
|
|
402
|
+
const allInfoRows = collectInfoRows(displayedData, displayFields);
|
|
403
|
+
const descriptionRow = allInfoRows.find((row) => row.rawKey.toLowerCase() === 'description');
|
|
404
|
+
const infoRows = allInfoRows.filter((row) => row.rawKey.toLowerCase() !== 'description');
|
|
405
|
+
const features = collectFeatures(displayedData);
|
|
406
|
+
const handleBack = () => {
|
|
407
|
+
controller?.store.currentChat?.popProductQueryMessage(chatItem.sourceMessageId);
|
|
408
|
+
controller?.store.clearProductQuickview();
|
|
409
|
+
};
|
|
410
|
+
return (_jsx(CacheProvider, { children: _jsxs("div", { className: classnames('ss__chat-product-query-message', className, internalClassName), ...styling, children: [_jsxs("div", { className: classnames('ss__chat-product-query-message__header'), children: [cameFromInspiration && (_jsxs("div", { className: classnames('ss__chat-product-query-message__header__back'), onClick: handleBack, children: [_jsx(Icon, { icon: "angle-left", size: "14px" }), _jsx("span", { children: "Back to inspiration" })] })), _jsxs("div", { className: classnames('ss__chat-product-query-message__header__product'), children: [displayedCore.imageUrl && (_jsx(Image, { className: classnames('ss__chat-product-query-message__header__product__image'), src: displayedCore.imageUrl, alt: displayedCore.name || '' })), _jsxs("div", { className: classnames('ss__chat-product-query-message__header__product__details'), children: [displayedCore.name && (_jsx("div", { className: classnames('ss__chat-product-query-message__header__product__details__name'), children: displayedCore.url ? (_jsx("a", { href: displayedCore.url, target: "_blank", rel: "noopener noreferrer", children: displayedCore.name })) : (displayedCore.name) })), displayedCore.brand && (_jsx("div", { className: classnames('ss__chat-product-query-message__header__product__details__brand'), children: displayedCore.brand })), displayedCore.price != null && (_jsx("div", { className: classnames('ss__chat-product-query-message__header__product__details__price'), children: _jsx(Price, { value: displayedCore.price }) }))] }), _jsxs("div", { className: classnames('ss__chat-product-query-message__header__product__actions'), children: [displayedCore.url && (_jsx("div", { className: classnames('ss__chat-product-query-message__header__product__actions__go-to-product'), children: _jsx("a", { href: displayedCore.url, target: "_blank", rel: "noopener noreferrer", children: "Go to product" }) })), _jsx("div", { className: classnames('ss__chat-product-query-message__header__product__actions__add-to-cart'), children: _jsx(Button, { content: 'Add to Cart', onClick: () => controller?.addToCart(sourceProduct) }) }), controller?.store.features.similarProducts.enabled && (_jsx("div", { className: classnames('ss__chat-product-query-message__header__product__actions__show-similar'), children: _jsx(Button, { content: 'Show Similar', onClick: () => controller?.discussProduct(sourceProduct, { requestType: 'productSimilar' }) }) }))] })] })] }), selections.length > 0 && (_jsx("div", { className: classnames('ss__chat-product-query-message__variants'), children: selections.map((selection) => (_jsxs("div", { children: [_jsxs("div", { className: classnames('ss__chat-product-query-message__variants__label'), children: [formatLabel(selection.field), " (", selection.values.length, ")"] }), _jsx("div", { className: classnames('ss__chat-product-query-message__variants__swatches'), children: selection.values.map((selectionValue) => {
|
|
411
|
+
const isUnavailable = !selectionValue.available;
|
|
412
|
+
const isSelected = selection.selected?.value === selectionValue.value;
|
|
413
|
+
return (_jsxs("div", { className: classnames('ss__chat-product-query-message__variants__swatch', {
|
|
414
|
+
'ss__chat-product-query-message__variants__swatch--selected': isSelected,
|
|
415
|
+
'ss__chat-product-query-message__variants__swatch--unavailable': isUnavailable,
|
|
416
|
+
}), title: selectionValue.value, onClick: () => selection.select(selectionValue.value), children: [selectionValue.thumbnailImageUrl ? (_jsx(Image, { className: classnames('ss__chat-product-query-message__variants__swatch__image'), src: selectionValue.thumbnailImageUrl, alt: selectionValue.value })) : null, _jsx("span", { className: classnames('ss__chat-product-query-message__variants__swatch__value'), children: selectionValue.value })] }, selectionValue.value));
|
|
417
|
+
}) })] }, selection.field))) })), infoRows.length > 0 && (_jsxs("div", { className: classnames('ss__chat-product-query-message__section'), children: [_jsx("div", { className: classnames('ss__chat-product-query-message__section__title'), children: "Product Information" }), _jsx("table", { className: classnames('ss__chat-product-query-message__section__table'), children: _jsx("tbody", { children: infoRows.map((row) => (_jsxs("tr", { children: [_jsx("td", { children: row.label }), _jsx("td", { children: row.rawKey === 'availability' ? (_jsx("span", { className: classnames({
|
|
418
|
+
'ss__chat-product-query-message__section__table__availability--in-stock': row.value === 'In Stock',
|
|
419
|
+
'ss__chat-product-query-message__section__table__availability--out-of-stock': row.value === 'Out of Stock',
|
|
420
|
+
}), children: row.value === 'In Stock' ? `\u2713 ${row.value}` : row.value })) : (row.value) })] }, row.key))) }) })] })), descriptionRow && (_jsxs("div", { className: classnames('ss__chat-product-query-message__section'), children: [_jsx("div", { className: classnames('ss__chat-product-query-message__section__title'), children: "Description" }), _jsx("div", { className: classnames('ss__chat-product-query-message__section__description'), children: descriptionRow.value })] })), features.length > 0 && (_jsxs("div", { className: classnames('ss__chat-product-query-message__section'), children: [_jsx("div", { className: classnames('ss__chat-product-query-message__section__title'), children: "Features" }), _jsx("ul", { className: classnames('ss__chat-product-query-message__section__features'), children: features.map((feature, idx) => (_jsx("li", { children: feature }, idx))) })] }))] }) }));
|
|
421
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/ChatProductQueryMessage/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ChatProductQueryMessage';
|
|
@@ -89,7 +89,7 @@ export const OverlayBadge = observer((properties) => {
|
|
|
89
89
|
name: slot.name,
|
|
90
90
|
top: index == 0,
|
|
91
91
|
bottom: index == sectionSlots.length - 1,
|
|
92
|
-
badges: result?.display
|
|
92
|
+
badges: result?.display?.badges?.atLocation(`${section}/${slot.tag}`).slice(0, limit),
|
|
93
93
|
}))
|
|
94
94
|
.filter((slot) => slot.badges?.length);
|
|
95
95
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MutableRef } from 'preact/hooks';
|
|
2
2
|
import { ComponentProps, ResultsLayout } from '../../../types';
|
|
3
|
-
import type { SearchController, AutocompleteController, RecommendationController } from '@athoscommerce/snap-controller';
|
|
3
|
+
import type { SearchController, AutocompleteController, RecommendationController, ChatController } from '@athoscommerce/snap-controller';
|
|
4
4
|
import type { Product } from '@athoscommerce/snap-store-mobx';
|
|
5
5
|
import { Lang } from '../../../hooks';
|
|
6
6
|
export declare const Result: ((properties: ResultProps) => import("@emotion/react/jsx-runtime").JSX.Element | null) & {
|
|
@@ -12,7 +12,7 @@ export interface TruncateTitleProps {
|
|
|
12
12
|
}
|
|
13
13
|
export type ResultProps = {
|
|
14
14
|
result: Product;
|
|
15
|
-
controller?: SearchController | AutocompleteController | RecommendationController;
|
|
15
|
+
controller?: SearchController | AutocompleteController | RecommendationController | ChatController;
|
|
16
16
|
lang?: Partial<ResultLang>;
|
|
17
17
|
trackingRef?: MutableRef<HTMLElement | null>;
|
|
18
18
|
} & ResultTemplatesLegalProps & ComponentProps<ResultProps>;
|
|
@@ -41,7 +41,7 @@ export interface ResultLang {
|
|
|
41
41
|
}
|
|
42
42
|
interface ResultPropData {
|
|
43
43
|
result: Product;
|
|
44
|
-
controller?: SearchController | AutocompleteController | RecommendationController;
|
|
44
|
+
controller?: SearchController | AutocompleteController | RecommendationController | ChatController;
|
|
45
45
|
}
|
|
46
46
|
export type ResultNames = 'seed';
|
|
47
47
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Result.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/Result/Result.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAY,MAAM,cAAc,CAAC;AAUpD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAG5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"Result.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/Result/Result.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAY,MAAM,cAAc,CAAC;AAUpD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAG5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACzI,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAI9D,OAAO,EAAE,IAAI,EAAyB,MAAM,gBAAgB,CAAC;AAyD7D,eAAO,MAAM,MAAM,gBAAyB,WAAW;;CAiQrD,CAAC;AAWH,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,wBAAwB,GAAG,cAAc,CAAC;IACnG,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,WAAW,CAAC,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC7C,GAAG,yBAAyB,GAC5B,cAAc,CAAC,WAAW,CAAC,CAAC;AAE7B,MAAM,MAAM,yBAAyB,GAAG;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3F,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,GAAG,aAAa,CAAC;IACpD,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,UAAU;IAC1B,mBAAmB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1C,0BAA0B,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,UAAU,cAAc;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,wBAAwB,GAAG,cAAc,CAAC;CACnG;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC"}
|
|
@@ -137,7 +137,7 @@ export const Result = observer((properties) => {
|
|
|
137
137
|
// default props
|
|
138
138
|
internalClassName: 'ss__result__image',
|
|
139
139
|
alt: core?.name || '',
|
|
140
|
-
src: core?.imageUrl || '',
|
|
140
|
+
src: core?.imageUrl || core?.thumbnailImageUrl || '',
|
|
141
141
|
// inherited props
|
|
142
142
|
...defined({
|
|
143
143
|
disableStyles,
|
|
@@ -204,7 +204,7 @@ export const Result = observer((properties) => {
|
|
|
204
204
|
onClick && onClick(e);
|
|
205
205
|
}, dangerouslySetInnerHTML: {
|
|
206
206
|
__html: displayName || '',
|
|
207
|
-
} }) })), !hideRating && _jsx(Rating, { ...subProps.rating }), !hidePricing && core.price && core.price > 0 ? (_jsx("div", { className: "ss__result__details__pricing", children: isOnSale ? (_jsxs(_Fragment, { children: [_jsx(Price, { ...subProps.price, value: core.msrp, lineThrough: true, name: 'msrp' }), "\u00A0", _jsx(Price, { ...subProps.price, value: core.price, name: 'price' })] })) : (_jsx(Price, { ...subProps.price, value: core.price })) })) : null, cloneWithProps(detailSlot, { result, treePath }), !hideVariantSelections && result.variants?.selections
|
|
207
|
+
} }) })), !hideRating && _jsx(Rating, { ...subProps.rating }), !hidePricing && core.price && core.price > 0 ? (_jsx("div", { className: "ss__result__details__pricing", children: isOnSale ? (_jsxs(_Fragment, { children: [_jsx(Price, { ...subProps.price, value: core.msrp, lineThrough: true, name: 'msrp' }), "\u00A0", _jsx(Price, { ...subProps.price, value: core.price, name: 'price' })] })) : (_jsx(Price, { ...subProps.price, value: core.price })) })) : null, cloneWithProps(detailSlot, { result, treePath }), !hideVariantSelections && result.variants?.selections?.length && (_jsx("div", { className: "ss__result__details__variant-selection", children: result.variants?.selections.map((selection) => {
|
|
208
208
|
return _jsx(VariantSelection, { ...subProps.variantSelection, selection: selection });
|
|
209
209
|
}) })), !hideAddToCartButton && (_jsx("div", { className: "ss__result__add-to-cart-wrapper", children: _jsx(Button, { ...subProps.button, content: addToCartButtonText, ...mergedLang.addToCartButtonText.all }) }))] })] }) })) : null;
|
|
210
210
|
});
|
|
@@ -15,6 +15,7 @@ export type SearchInputTemplatesLegalProps = {
|
|
|
15
15
|
submitSearchButton?: Buttons;
|
|
16
16
|
clearSearchButton?: Buttons;
|
|
17
17
|
closeSearchButton?: Buttons;
|
|
18
|
+
chatButton?: Buttons;
|
|
18
19
|
inputName?: string;
|
|
19
20
|
disabled?: boolean;
|
|
20
21
|
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
@@ -29,6 +30,7 @@ export interface SearchInputLang {
|
|
|
29
30
|
closeSearchButton?: Lang<never>;
|
|
30
31
|
clearSearchButton?: Lang<never>;
|
|
31
32
|
submitSearchButton?: Lang<never>;
|
|
33
|
+
chatButton?: Lang<never>;
|
|
32
34
|
}
|
|
33
35
|
export {};
|
|
34
36
|
//# sourceMappingURL=SearchInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/SearchInput/SearchInput.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAY,UAAU,EAA0B,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAU,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAW,MAAM,wBAAwB,CAAC;AAqCvE,eAAO,MAAM,WAAW,gBAAyB,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/SearchInput/SearchInput.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAY,UAAU,EAA0B,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAU,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAW,MAAM,wBAAwB,CAAC;AAqCvE,eAAO,MAAM,WAAW,gBAAyB,gBAAgB;;CA2O/D,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,8BAA8B,GACjC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAElC,MAAM,MAAM,8BAA8B,GAAG;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC7D,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC/D,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,KAAK,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;AAS5C,MAAM,WAAW,eAAe;IAC/B,eAAe,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IACxC,iBAAiB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,iBAAiB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;CACzB"}
|
|
@@ -51,6 +51,9 @@ export const SearchInput = observer((properties) => {
|
|
|
51
51
|
clearSearchButton: {
|
|
52
52
|
icon: 'close-thin',
|
|
53
53
|
},
|
|
54
|
+
chatButton: {
|
|
55
|
+
icon: 'chat',
|
|
56
|
+
},
|
|
54
57
|
};
|
|
55
58
|
const props = mergeProps('searchInput', globalTheme, defaultProps, properties);
|
|
56
59
|
props.submitSearchButton = {
|
|
@@ -77,7 +80,15 @@ export const SearchInput = observer((properties) => {
|
|
|
77
80
|
//passed in properties
|
|
78
81
|
...properties?.closeSearchButton,
|
|
79
82
|
};
|
|
80
|
-
|
|
83
|
+
props.chatButton = {
|
|
84
|
+
//defaults
|
|
85
|
+
...defaultProps.chatButton,
|
|
86
|
+
//theme
|
|
87
|
+
...props.chatButton,
|
|
88
|
+
//passed in properties
|
|
89
|
+
...properties?.chatButton,
|
|
90
|
+
};
|
|
91
|
+
const { placeholderText, value, submitSearchButton, closeSearchButton, clearSearchButton, chatButton, inputRef, inputName, onChange, onClick, onKeyDown, onKeyUp, disabled, disableStyles, className, internalClassName, treePath, customComponent, } = props;
|
|
81
92
|
if (customComponent) {
|
|
82
93
|
const ComponentOverride = useComponent(snap?.templates?.library.import.component.searchInput || {}, customComponent);
|
|
83
94
|
if (ComponentOverride) {
|
|
@@ -144,6 +155,23 @@ export const SearchInput = observer((properties) => {
|
|
|
144
155
|
theme: props?.theme,
|
|
145
156
|
treePath,
|
|
146
157
|
},
|
|
158
|
+
chatButton: {
|
|
159
|
+
// default props
|
|
160
|
+
...chatButton,
|
|
161
|
+
internalClassName: 'ss__search-input__button--chat-button',
|
|
162
|
+
name: 'chat',
|
|
163
|
+
onClick: () => {
|
|
164
|
+
// @ts-ignore - this is a button, so it should have an onClick prop?
|
|
165
|
+
chatButton?.onClick && chatButton.onClick();
|
|
166
|
+
},
|
|
167
|
+
// inherited props
|
|
168
|
+
...defined({
|
|
169
|
+
disableStyles,
|
|
170
|
+
}),
|
|
171
|
+
// component theme overrides
|
|
172
|
+
theme: props?.theme,
|
|
173
|
+
treePath,
|
|
174
|
+
},
|
|
147
175
|
};
|
|
148
176
|
const styling = mergeStyles(props, defaultStyles);
|
|
149
177
|
//initialize lang
|
|
@@ -168,6 +196,11 @@ export const SearchInput = observer((properties) => {
|
|
|
168
196
|
'aria-label': 'Submit Search',
|
|
169
197
|
},
|
|
170
198
|
},
|
|
199
|
+
chatButton: {
|
|
200
|
+
attributes: {
|
|
201
|
+
'aria-label': 'Open Chat',
|
|
202
|
+
},
|
|
203
|
+
},
|
|
171
204
|
};
|
|
172
205
|
//deep merge with props.lang
|
|
173
206
|
const lang = deepmerge(defaultLang, props.lang || {});
|
|
@@ -177,5 +210,5 @@ export const SearchInput = observer((properties) => {
|
|
|
177
210
|
setInputValue(e.target.value || '');
|
|
178
211
|
}
|
|
179
212
|
onChange && onChange(e);
|
|
180
|
-
}, disabled: disabled }), _jsxs("div", { className: "ss__search-input__icons", children: [clearSearchButton && inputValue?.length ? _jsx(Button, { ...subProps.clearSearchButton, ...mergedLang.clearSearchButton.all }) : null, submitSearchButton && _jsx(Button, { ...subProps.submitSearchButton, ...mergedLang.submitSearchButton.all })] })] }) }));
|
|
213
|
+
}, disabled: disabled }), _jsxs("div", { className: "ss__search-input__icons", children: [clearSearchButton && inputValue?.length ? _jsx(Button, { ...subProps.clearSearchButton, ...mergedLang.clearSearchButton.all }) : null, chatButton ? _jsx(Button, { ...subProps.chatButton, ...mergedLang.chatButton.all }) : null, submitSearchButton && _jsx(Button, { ...subProps.submitSearchButton, ...mergedLang.submitSearchButton.all })] })] }) }));
|
|
181
214
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slideout.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/Slideout/Slideout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAS9C,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAgC7D,eAAO,MAAM,QAAQ,gBAAyB,aAAa;;
|
|
1
|
+
{"version":3,"file":"Slideout.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/Slideout/Slideout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAS9C,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAgC7D,eAAO,MAAM,QAAQ,gBAAyB,aAAa;;CAiJzD,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,2BAA2B,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AACxF,MAAM,MAAM,2BAA2B,GAAG;IACzC,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC"}
|