@telia-ace/widget-conversation 1.0.28 → 1.0.29-next.0
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/LICENSE.txt +5 -5
- package/README.md +396 -396
- package/dist/agent.d.ts +17 -17
- package/dist/components/conversation/conversation.d.ts +6 -6
- package/dist/components/conversation/plugin.d.ts +43 -43
- package/dist/components/conversation/ui/content.d.ts +2 -2
- package/dist/components/conversation/ui/input.d.ts +6 -6
- package/dist/components/conversation/ui/loader.d.ts +9 -9
- package/dist/components/conversation/ui/message-list-items/button-list.d.ts +8 -8
- package/dist/components/conversation/ui/message-list-items/custom.d.ts +9 -9
- package/dist/components/conversation/ui/message-list-items/html.d.ts +5 -5
- package/dist/components/conversation/ui/message-list-items/link-list.d.ts +8 -8
- package/dist/components/conversation/ui/message-list-items/separator.d.ts +2 -2
- package/dist/components/conversation/ui/message-list-items/text.d.ts +6 -6
- package/dist/components/conversation/ui/message-list-items/video-request.d.ts +8 -8
- package/dist/components/conversation/ui/message-types/agent.d.ts +11 -11
- package/dist/components/conversation/ui/message-types/index.d.ts +4 -4
- package/dist/components/conversation/ui/message-types/message-list.d.ts +9 -9
- package/dist/components/conversation/ui/message-types/system.d.ts +12 -12
- package/dist/components/conversation/ui/message-types/timestamp.d.ts +8 -8
- package/dist/components/conversation/ui/message-types/user.d.ts +8 -8
- package/dist/components/conversation/ui/message.d.ts +5 -5
- package/dist/components/conversation/ui/overlay-outlets.d.ts +13 -13
- package/dist/components/conversation/ui/styles.d.ts +31 -31
- package/dist/components/return-button/plugin.d.ts +18 -18
- package/dist/components/return-button/return-button.d.ts +6 -6
- package/dist/conversation-controller.d.ts +88 -88
- package/dist/conversation-form-adapter.d.ts +7 -7
- package/dist/conversation-platform.d.ts +49 -49
- package/dist/conversation-provider.d.ts +22 -22
- package/dist/conversation.d7aad569.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.js.map +1 -1
- package/dist/resolve-entity-value.d.ts +10 -10
- package/dist/return-button.9c517bbe.js.map +1 -1
- package/dist/types.d.ts +103 -103
- package/dist/user.d.ts +7 -7
- package/dist/utils/custom-message.d.ts +3 -3
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/map-actions.d.ts +1 -1
- package/dist/utils/open-chat-widget.d.ts +4 -4
- package/package.json +10 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d7aad569.js","sources":["../src/components/conversation/ui/input.tsx","../src/components/conversation/ui/styles.tsx","../src/components/conversation/ui/loader.tsx","../src/components/conversation/ui/message-types/timestamp.tsx","../src/components/conversation/ui/message-types/agent.tsx","../src/components/conversation/ui/message-types/system.tsx","../src/components/conversation/ui/message-types/user.tsx","../src/utils/map-actions.ts","../src/components/conversation/ui/message-list-items/button-list.tsx","../src/components/conversation/ui/message-list-items/custom.tsx","../src/components/conversation/ui/message-list-items/html.tsx","../src/components/conversation/ui/message-list-items/link-list.tsx","../src/components/conversation/ui/message-list-items/separator.tsx","../src/components/conversation/ui/message-list-items/text.tsx","../src/components/conversation/ui/message-list-items/video-request.tsx","../src/components/conversation/ui/message-types/message-list.tsx","../src/components/conversation/ui/message.tsx","../src/components/conversation/ui/content.tsx","../src/components/conversation/ui/overlay-outlets.tsx","../src/components/conversation/conversation.tsx"],"sourcesContent":["import {\r\n borderTabStyle,\r\n Button,\r\n Input,\r\n SymbolBadge,\r\n useDispatch,\r\n useIsTabbing,\r\n useProperties,\r\n useScroll,\r\n} from '@telia-ace/widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { useEffect, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { ConversationComponentProperties } from '../plugin';\r\n\r\ntype Props = {\r\n className?: string;\r\n};\r\n\r\nconst ConversationInput: React.FC<Props> = ({ className }) => {\r\n const [inputText, setInputText] = useState('');\r\n const [inputFocus, setInputFocus] = useState(false);\r\n const [calculatedLineHeight, setCalculatedLineHeight] = useState(0);\r\n const [textareaMaxHeight, setTextareaMaxHeight] = useState(0);\r\n const isTabbing = useIsTabbing();\r\n const dispatch = useDispatch();\r\n const {\r\n inputPlaceholder = 'Type your message',\r\n inputHidden = false,\r\n inputDisabled = false,\r\n sendButtonLabel = 'Send message',\r\n inputMultiline: multiline = true,\r\n secondaryAction,\r\n } = useProperties<ConversationComponentProperties>();\r\n const [scrollableCss, inputRef] = useScroll(true);\r\n\r\n useEffect(() => {\r\n if (inputRef.current) {\r\n const { lineHeight, maxHeight } = getComputedStyle(inputRef.current);\r\n if (lineHeight && lineHeight.indexOf('px') > -1) {\r\n const lineHeightNumber = lineHeight.split('px');\r\n const calcLH = parseInt(lineHeightNumber[0], 10);\r\n setCalculatedLineHeight(calcLH);\r\n const maxHeightNumber = maxHeight.split('px');\r\n setTextareaMaxHeight(parseInt(maxHeightNumber[0], 10));\r\n }\r\n }\r\n }, [inputRef.current]);\r\n\r\n const submit = (e: any) => {\r\n if (!e.shiftKey || !multiline) {\r\n e.preventDefault();\r\n if (inputText && inputText.length > 0) {\r\n dispatch('user-submit', { text: inputText });\r\n setInputText('');\r\n onChange('');\r\n }\r\n } else if (inputText.length < 1) {\r\n e.preventDefault();\r\n }\r\n };\r\n\r\n const onSecondaryActionButtonClick = (e: any) => {\r\n if (!secondaryAction) {\r\n return;\r\n }\r\n e.preventDefault();\r\n dispatch('action', {\r\n actionKey: secondaryAction.action,\r\n ...secondaryAction,\r\n });\r\n };\r\n\r\n const calculateHeight = (value: string) => {\r\n if (multiline && inputRef.current) {\r\n const scrollHeight = inputRef.current.scrollHeight;\r\n if (scrollHeight > calculatedLineHeight) {\r\n inputRef.current.style.height = 'auto';\r\n let areaHeight = scrollHeight;\r\n if (value.length < 1) {\r\n areaHeight = calculatedLineHeight;\r\n }\r\n inputRef.current.style.height = `${areaHeight}px`;\r\n\r\n if (areaHeight >= textareaMaxHeight) {\r\n inputRef.current.style.overflowY = 'scroll';\r\n } else {\r\n inputRef.current.style.overflowY = 'hidden';\r\n }\r\n }\r\n }\r\n };\r\n\r\n const onChange = (value: string) => {\r\n calculateHeight(value);\r\n setInputText(value);\r\n if (value && value.length > 0) {\r\n dispatch('user-typing', { textLength: value.length });\r\n }\r\n };\r\n\r\n if (inputHidden) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Wrapper\r\n grow={multiline}\r\n className={appendClassNames('humany-conversation-input', className)}\r\n data-has-focus={inputFocus}\r\n scrollableCss={scrollableCss}\r\n isTabbing={isTabbing}\r\n >\r\n {secondaryAction && (\r\n <SecondaryActionButton\r\n disabled={inputDisabled}\r\n onClick={onSecondaryActionButtonClick}\r\n title={secondaryAction.label}\r\n aria-label={secondaryAction.label}\r\n >\r\n <SymbolBadge\r\n size={24}\r\n symbol={{ type: 'Svg', content: secondaryAction.icon || 'browse' }}\r\n />\r\n </SecondaryActionButton>\r\n )}\r\n {multiline ? (\r\n <StyledTextArea\r\n value={inputText}\r\n onChange={onChange}\r\n onEnter={submit}\r\n disabled={inputDisabled}\r\n aria-label={inputPlaceholder}\r\n placeholder={inputPlaceholder}\r\n onFocusChange={setInputFocus}\r\n type={'textarea'}\r\n rows={1}\r\n ref={inputRef}\r\n />\r\n ) : (\r\n <StyledInput\r\n value={inputText}\r\n onChange={onChange}\r\n onEnter={submit}\r\n disabled={inputDisabled}\r\n aria-label={inputPlaceholder}\r\n placeholder={inputPlaceholder}\r\n onFocusChange={setInputFocus}\r\n />\r\n )}\r\n <StyledButton\r\n disabled={inputDisabled}\r\n onClick={submit}\r\n title={sendButtonLabel}\r\n aria-label={sendButtonLabel}\r\n >\r\n <SendSymbol\r\n size={22}\r\n symbol={{ type: 'Svg', content: 'send' }}\r\n hasContent={inputText && inputText.length}\r\n />\r\n </StyledButton>\r\n </Wrapper>\r\n );\r\n};\r\n\r\nconst StyledTextArea = styled(Input)<any>`\r\n resize: none;\r\n flex: 1;\r\n flex-shrink: 1;\r\n min-height: 1.2em;\r\n max-height: 148px;\r\n line-height: 1.2em;\r\n height: 1.2em;\r\n padding: 0;\r\n margin: ${(p) => p.theme.sizes?.medium};\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n border: none;\r\n transition: height 200ms linear;\r\n outline: none;\r\n`;\r\n\r\nconst StyledInput = styled(Input)<any>`\r\n flex: 1;\r\n border: none;\r\n background-color: transparent;\r\n font-weight: 300;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n line-height: 1.2em;\r\n outline: none;\r\n padding: ${(p) => p.theme.sizes?.medium};\r\n color: ${(p) => p.theme.colors?.text};\r\n &::placeholder {\r\n color: ${(p) => p.theme.colors?.textLight};\r\n font-style: italic;\r\n }\r\n`;\r\n\r\nconst StyledButton = styled(Button)<any>`\r\n flex: 0 0 50px;\r\n align-self: stretch;\r\n background-color: transparent;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border: none;\r\n color: #a6a6a6;\r\n &:focus-visible {\r\n ${borderTabStyle};\r\n }\r\n`;\r\n\r\nconst SecondaryActionButton = styled(StyledButton)`\r\n border-right: ${(p) => p.theme.border};\r\n margin: ${(p) => p.theme.sizes?.normal} 0;\r\n`;\r\n\r\nconst Wrapper = styled.div<{ 'data-has-focus': boolean } & any>`\r\n ${(p) =>\r\n p.grow\r\n ? css`\r\n min-height: 50px;\r\n max-height: 150px;\r\n `\r\n : css`\r\n height: 50px;\r\n `}\r\n flex: 0 0 auto;\r\n display: flex;\r\n align-items: center;\r\n background-color: ${(p) => p.theme.colors?.accent};\r\n border-top: ${(p) => p.theme.inputBorder};\r\n ${(p) => p['data-has-focus'] && p.isTabbing && borderTabStyle}\r\n ${StyledTextArea} {\r\n ${(p) => !!p.scrollableCss && p.scrollableCss}\r\n }\r\n`;\r\n\r\nconst SendSymbol = styled(({ hasContent, ...other }) => <SymbolBadge {...other} />)`\r\n line,\r\n path {\r\n stroke: ${(p) => (p.hasContent ? p.theme.colors?.primary : '#a6a6a6')};\r\n fill: ${(p) => (p.hasContent ? p.theme.colors?.primary : '#a6a6a6')};\r\n }\r\n`;\r\n\r\nexport default ConversationInput;\r\n","import { FormComponent } from '@telia-ace/widget-forms';\r\nimport {\r\n borderTabStyle,\r\n buttonCss,\r\n Html,\r\n invertedHoverButton,\r\n List,\r\n Typography,\r\n} from '@telia-ace/widget-ui';\r\nimport styled, { css, keyframes } from 'styled-components';\r\n\r\nexport const Avatar = styled.div<any>`\r\n width: ${(p) => p.avatarSize || '32px'};\r\n height: ${(p) => p.avatarSize || '32px'};\r\n border-radius: 50%;\r\n background-color: ${(p) => p.theme.colors?.accent};\r\n border: ${(p) => p.theme.border};\r\n grid-area: avatar;\r\n align-self: flex-end;\r\n justify-self: center;\r\n overflow: hidden;\r\n margin-right: 10px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: ${(p) => p.theme.colors?.text};\r\n\r\n > img {\r\n height: 100%;\r\n width: 100%;\r\n object-fit: cover;\r\n }\r\n\r\n > svg {\r\n width: 90%;\r\n height: 90%;\r\n padding: 10%;\r\n color: ${(p) => p.theme.colors?.text};\r\n\r\n line,\r\n path,\r\n circle,\r\n fill {\r\n stroke: ${(p) => p.theme.colors?.text};\r\n }\r\n }\r\n`;\r\n\r\nexport const LoaderAnimation = keyframes`\r\n 0% {\r\n opacity: 0;\r\n }\r\n 75% {\r\n opacity: 1;\r\n }\r\n 100% {\r\n opacity: 0;\r\n }\r\n`;\r\n\r\nexport const Loader = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n > div {\r\n height: 10px;\r\n width: 10px;\r\n border-radius: 50%;\r\n margin: 5px;\r\n background-color: ${(p) => p.theme.colors?.text};\r\n animation: ${LoaderAnimation} 1s infinite;\r\n }\r\n > div:nth-child(2) {\r\n animation-delay: 100ms;\r\n }\r\n > div:nth-child(3) {\r\n animation-delay: 200ms;\r\n }\r\n`;\r\n\r\nexport const ContentBundle = styled.div`\r\n grid-area: content;\r\n max-width: 100%;\r\n overflow: hidden;\r\n`;\r\n\r\nexport const MessageTitle = styled(Typography)`\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n font-weight: normal;\r\n margin: 0;\r\n`;\r\n\r\nexport const MessageContainer = styled.div<{ left?: boolean; center?: boolean; right?: boolean }>`\r\n display: flex;\r\n ${(p) => p.left && 'justify-content: start;'};\r\n ${(p) => p.center && 'justify-content: center;'};\r\n ${(p) => p.right && 'justify-content: end;'};\r\n`;\r\n\r\nexport type Stacked = 'first' | 'last' | 'middle';\r\n\r\nexport const MessageContent = styled.div<{\r\n user?: boolean;\r\n fullWidth?: boolean;\r\n stacked?: Stacked;\r\n padded?: boolean;\r\n}>`\r\n ${(p) => p.padded && `padding: ${p.theme.sizes?.medium};`}\r\n ${(p) => !p.user && p.stacked && nonUserMessageStyling(p.stacked, p.theme)}\r\n ${(p) => p.user && p.stacked && userMessageStyling(p.stacked, p.theme)}\r\n\r\n display: inline-block;\r\n margin-top: ${(p) => p.theme.sizes?.normal};\r\n && > * {\r\n overflow-wrap: break-word;\r\n word-wrap: break-word;\r\n word-break: break-all;\r\n word-break: break-word;\r\n hyphens: auto;\r\n }\r\n max-width: 100%;\r\n ${(p) => p.fullWidth && 'width: 100%;'}\r\n`;\r\n\r\nconst nonUserMessageStyling = (stacked: Stacked, theme: any) => {\r\n const colors = css`\r\n background-color: ${theme.colors?.accent};\r\n color: ${theme.colors?.text};\r\n ${theme.border && `border: ${theme.border};`};\r\n `;\r\n\r\n if (!theme.borderRadius) {\r\n return colors;\r\n }\r\n\r\n return css`\r\n ${colors}\r\n\r\n border-top-right-radius: ${theme.borderRadius};\r\n border-bottom-right-radius: ${theme.borderRadius};\r\n\r\n ${stacked === 'first' &&\r\n `\r\n border-top-left-radius: ${theme.borderRadius};\r\n `}\r\n\r\n ${stacked === 'last' &&\r\n `\r\n border-bottom-left-radius: ${theme.borderRadius};\r\n `}\r\n `;\r\n};\r\n\r\nconst userMessageStyling = (stacked: Stacked, theme: any) => {\r\n const colors = css`\r\n background-color: ${theme.colors?.primary};\r\n color: ${theme.colors?.accent};\r\n `;\r\n\r\n if (!theme.borderRadius) {\r\n return colors;\r\n }\r\n\r\n return css`\r\n ${colors}\r\n\r\n border-top-left-radius: ${theme.borderRadius};\r\n border-bottom-left-radius: ${theme.borderRadius};\r\n\r\n ${stacked === 'first' &&\r\n `\r\n border-top-right-radius: ${theme.borderRadius};\r\n `}\r\n\r\n ${stacked === 'last' &&\r\n `\r\n border-bottom-right-radius: ${theme.borderRadius};\r\n `}\r\n `;\r\n};\r\n\r\nexport const MessageContentPart = styled.div`\r\n margin-bottom: ${(p) => p.theme.sizes?.normal};\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n`;\r\n\r\nexport const messageContentPadding = css`\r\n margin: ${(p) => p.theme.sizes?.medium} 0;\r\n padding: 0 ${(p) => p.theme.sizes?.medium};\r\n`;\r\n\r\nexport const StyledForm = styled(FormComponent)`\r\n & button.humany-form-component-button {\r\n ${(p) =>\r\n invertedHoverButton({\r\n active: false,\r\n primaryColor: p.theme.colors?.primary,\r\n secondaryColor: p.theme.colors?.accent,\r\n })};\r\n display: block;\r\n width: 100%;\r\n margin-bottom: ${(p) => p.theme.sizes?.normal};\r\n }\r\n & button.humany-form-component-submit {\r\n width: 100%;\r\n margin: 0;\r\n :not(:last-child) {\r\n margin-bottom: ${(p) => p.theme.sizes?.normal};\r\n }\r\n }\r\n`;\r\n\r\nexport const StyledHtml = styled(Html)<any>`\r\n white-space: pre-wrap;\r\n a {\r\n color: ${(p) => p.theme.colors.link};\r\n &:focus {\r\n ${(p) => p.theme.accessibility?.isTabbing && borderTabStyle};\r\n }\r\n }\r\n`;\r\n\r\nexport const StyledActionList = styled(List)`\r\n padding: 0;\r\n list-style: none;\r\n margin: 0 -${(p) => p.theme.sizes?.normal};\r\n > li {\r\n margin: ${(p) => p.theme.sizes?.normal};\r\n }\r\n`;\r\n\r\nexport const StyledActionButton = styled.button`\r\n ${buttonCss};\r\n display: block;\r\n background-color: ${(p) => p.theme.colors?.primary};\r\n width: 100%;\r\n color: #fff;\r\n &:focus-visible {\r\n ${borderTabStyle}\r\n background-color: transparent;\r\n }\r\n`;\r\n","import React, { forwardRef } from 'react';\r\nimport { ConversationMessageSender } from '../../../types';\r\nimport { ContentBundle, Loader, MessageContainer, MessageContent } from './styles';\r\n\r\ntype Props = {\r\n className?: string;\r\n agentData?: ConversationMessageSender;\r\n boxed?: boolean;\r\n};\r\n\r\nconst ConversationLoader = forwardRef<HTMLDivElement, Props>(\r\n ({ boxed, className, agentData }, ref) => {\r\n return (\r\n <ContentBundle ref={ref}>\r\n <MessageContainer left={boxed} center={!boxed}>\r\n <MessageContent padded={!!boxed} stacked={boxed ? 'first' : undefined}>\r\n <Loader>\r\n <div />\r\n <div />\r\n <div />\r\n </Loader>\r\n </MessageContent>\r\n </MessageContainer>\r\n </ContentBundle>\r\n );\r\n }\r\n);\r\n\r\nexport default ConversationLoader;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\n\r\ntype Props = {\r\n className?: string;\r\n name?: string;\r\n timestamp?: number | null;\r\n};\r\n\r\nconst StyledTimestamp = styled.p`\r\n && {\r\n font-size: ${(p) => p.theme.fonts?.small};\r\n font-weight: 300;\r\n }\r\n margin: 0;\r\n line-height: 1.5em;\r\n grid-area: info;\r\n color: ${(p) => p.theme.colors?.text};\r\n`;\r\n\r\nconst getTimestamp = (raw: number) => {\r\n return new Date(raw).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\r\n};\r\n\r\nconst Timestamp: React.FC<Props> = ({ className, name, timestamp }) => {\r\n if (!name && !timestamp) {\r\n return null;\r\n }\r\n\r\n let output = '';\r\n if (name) {\r\n if (timestamp) {\r\n output = `${name}: ${getTimestamp(timestamp)}`;\r\n } else {\r\n output = name;\r\n }\r\n } else if (timestamp) {\r\n output = getTimestamp(timestamp);\r\n }\r\n\r\n return <StyledTimestamp>{output}</StyledTimestamp>;\r\n};\r\n\r\nexport default Timestamp;\r\n","import { SymbolBadge, useProperties } from '@telia-ace/widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { ConversationMessageSender } from '../../../../types';\r\nimport { ConversationComponentProperties } from '../../plugin';\r\nimport { Avatar } from '../styles';\r\nimport Timestamp from './timestamp';\r\n\r\ntype Props = {\r\n className?: string;\r\n children: any;\r\n sender: ConversationMessageSender;\r\n timestamp: number | null;\r\n};\r\n\r\nconst AgentMessage: React.FC<Props> = ({ className, children, sender, timestamp }) => {\r\n const { avatar, name } = sender;\r\n const { avatarSize } = useProperties<ConversationComponentProperties>();\r\n\r\n return (\r\n <StyledAgentMessage\r\n hasAvatar={!!avatar}\r\n className={appendClassNames(className, 'humany-conversation-agent-message')}\r\n >\r\n {avatar && (\r\n <Avatar avatarSize={avatarSize}>\r\n {typeof avatar === 'string' ? (\r\n <img src={avatar} />\r\n ) : (\r\n <SymbolBadge symbol={avatar} />\r\n )}\r\n </Avatar>\r\n )}\r\n {children}\r\n <Timestamp name={name} timestamp={timestamp}></Timestamp>\r\n </StyledAgentMessage>\r\n );\r\n};\r\n\r\nexport const StyledAgentMessage = styled.div<any>`\r\n display: grid;\r\n margin-right: 10%;\r\n width: 90%;\r\n ${(p) =>\r\n p.hasAvatar\r\n ? css`\r\n grid-template-columns: auto 1fr;\r\n grid-template-rows: 1fr auto;\r\n grid-template-areas:\r\n 'avatar content'\r\n '. info';\r\n `\r\n : css`\r\n grid-template-columns: 1fr;\r\n grid-template-rows: 1fr auto;\r\n grid-template-areas:\r\n 'content'\r\n 'info';\r\n `};\r\n`;\r\n\r\nexport default AgentMessage;\r\n","import { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { forwardRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport Timestamp from './timestamp';\r\n\r\nexport type Props = {\r\n className?: string;\r\n timestamp: number;\r\n discrete?: boolean;\r\n fullWidth?: boolean;\r\n children: any;\r\n};\r\n\r\nconst SystemMessage = forwardRef<HTMLDivElement, Props>(\r\n ({ className, children, timestamp, discrete, fullWidth }, ref) => {\r\n return (\r\n <StyledSystemMessage\r\n ref={ref}\r\n className={appendClassNames(className, 'humany-conversation-system-message')}\r\n fullWidth={fullWidth}\r\n >\r\n {discrete ? (\r\n <Discrete className=\"humany-conversation-discrete-message\">\r\n {children}\r\n <Timestamp timestamp={timestamp}></Timestamp>\r\n </Discrete>\r\n ) : (\r\n <>\r\n {children}\r\n <Timestamp timestamp={timestamp}></Timestamp>\r\n </>\r\n )}\r\n </StyledSystemMessage>\r\n );\r\n }\r\n);\r\n\r\nexport const StyledSystemMessage = styled.div<any>`\r\n ${(p) => p.fullWidth && 'width: 100%'};\r\n padding: 0 ${(p) => p.theme.sizes?.large};\r\n overflow: auto;\r\n`;\r\n\r\nexport const Discrete = styled.div`\r\n text-align: center;\r\n word-wrap: break-word;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n color: ${(p) => p.theme.colors?.text};\r\n > p {\r\n margin: 0;\r\n }\r\n`;\r\n\r\nexport default SystemMessage;\r\n","import { useProperties } from '@telia-ace/widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport { ConversationComponentProperties } from '../../plugin';\r\nimport Timestamp from './timestamp';\r\n\r\nexport type Props = {\r\n className?: string;\r\n timestamp: number;\r\n children: any;\r\n};\r\n\r\nconst UserMessage: React.FC<Props> = ({ className, children, timestamp }) => {\r\n const { userLabel = '' } = useProperties<ConversationComponentProperties>();\r\n return (\r\n <StyledUserMessage\r\n className={appendClassNames(className, 'humany-conversation-user-message')}\r\n >\r\n {children}\r\n <Timestamp name={userLabel} timestamp={timestamp}></Timestamp>\r\n </StyledUserMessage>\r\n );\r\n};\r\n\r\nconst StyledUserMessage = styled.div`\r\n margin-left: 10%;\r\n width: 90%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-end;\r\n`;\r\n\r\nexport default UserMessage;\r\n","export const mapActions = (actions: any) =>\r\n Array.isArray(actions)\r\n ? actions\r\n : Object.keys(actions).map((i) => {\r\n return {\r\n label: actions[i],\r\n actionKey: i,\r\n };\r\n });\r\n","import {\r\n borderTabStyle,\r\n Button,\r\n buttonCss,\r\n DispatchAction,\r\n ItemList,\r\n itemList,\r\n SymbolBadge,\r\n} from '@telia-ace/widget-ui';\r\nimport React, { FC } from 'react';\r\nimport styled from 'styled-components';\r\nimport { ButtonListProperties } from '../../../../types';\r\nimport { mapActions } from '../../../../utils/map-actions';\r\nimport { messageContentPadding } from '../styles';\r\n\r\ntype Props = { dispatch: DispatchAction } & ButtonListProperties;\r\n\r\nexport const ButtonList: FC<Props> = ({ header, actions, dispatch }) => {\r\n return (\r\n <StyledButtonList\r\n header={header}\r\n items={mapActions(actions)}\r\n renderItem={(item: any) => {\r\n return (\r\n <li key={item.actionKey}>\r\n <StyledButtonListButton\r\n onClick={() => {\r\n dispatch('action', item);\r\n }}\r\n aria-label={item.label}\r\n title={item.label}\r\n >\r\n <SymbolBadge symbol={item.symbol} />\r\n {item.label}\r\n </StyledButtonListButton>\r\n </li>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nconst StyledButtonList = styled(ItemList)`\r\n ${itemList}\r\n > ul {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: ${(p) => p.theme.sizes?.normal};\r\n > li {\r\n margin: 0;\r\n }\r\n }\r\n ${messageContentPadding}\r\n`;\r\n\r\nconst StyledButtonListButton = styled(Button)`\r\n ${buttonCss};\r\n\r\n display: block;\r\n padding: ${(p) => p.theme.sizes?.normal};\r\n background-color: ${(p) => p.theme.colors?.primary};\r\n width: 100%;\r\n color: #ffffff;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n &:focus-visible {\r\n ${borderTabStyle}\r\n background-color: transparent;\r\n }\r\n\r\n i,\r\n svg {\r\n margin-right: ${(p) => p.theme.sizes?.small};\r\n }\r\n`;\r\n","import { useComponent } from '@telia-ace/widget-ui';\r\nimport React, { Suspense } from 'react';\r\n\r\ntype Props = {\r\n type: string;\r\n content?: { [key: string]: any };\r\n};\r\nexport const Custom: React.FC<Props> = ({ type, content = {} }) => {\r\n const Component = useComponent(type);\r\n\r\n if (!Component || !type) {\r\n return null;\r\n }\r\n return (\r\n <Suspense fallback={null}>\r\n <Component {...content} />\r\n </Suspense>\r\n );\r\n};\r\n","import { borderTabStyle, genericHtml, Html as UiHtml } from '@telia-ace/widget-ui';\r\nimport React, { FC } from 'react';\r\nimport styled from 'styled-components';\r\nimport { HtmlProperties } from '../../../../types';\r\nimport { messageContentPadding } from '../styles';\r\n\r\ntype Props = HtmlProperties;\r\n\r\nexport const Html: FC<Props> = ({ body }) => {\r\n return <StyledHtml html={body} />;\r\n};\r\n\r\nconst StyledHtml = styled(UiHtml)<any>`\r\n ${genericHtml}\r\n color: inherit;\r\n white-space: pre-wrap;\r\n ${messageContentPadding}\r\n a {\r\n color: ${(p) => p.theme.colors.link};\r\n &:focus-visible {\r\n ${borderTabStyle};\r\n }\r\n }\r\n`;\r\n","import {\r\n borderTabStyle,\r\n Button,\r\n DispatchAction,\r\n headingElement,\r\n itemList,\r\n ItemList,\r\n SymbolBadge,\r\n} from '@telia-ace/widget-ui';\r\nimport React, { FC } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { LinkListProperties } from '../../../../types';\r\nimport { mapActions } from '../../../../utils/map-actions';\r\nimport { messageContentPadding } from '../styles';\r\n\r\ntype Props = { dispatch: DispatchAction } & LinkListProperties;\r\n\r\nexport const LinkList: FC<Props> = ({ header, actions, dispatch }) => {\r\n return (\r\n <StyledLinkList\r\n header={header}\r\n items={mapActions(actions)}\r\n renderItem={(item: any) => {\r\n return (\r\n <li key={item.actionKey}>\r\n <StyledLinkButton\r\n help={item.actionKey === 'help'}\r\n onClick={() => {\r\n dispatch('action', item);\r\n }}\r\n aria-label={item.label}\r\n title={item.label}\r\n >\r\n {item.label}\r\n {item.actionKey === 'help' && (\r\n <SymbolBadge\r\n size={14}\r\n symbol={{\r\n type: 'Svg',\r\n content: 'caret-down',\r\n }}\r\n />\r\n )}\r\n </StyledLinkButton>\r\n </li>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\nconst StyledLinkList = styled(ItemList)`\r\n ${itemList}\r\n ${messageContentPadding}\r\n\r\n ${headingElement(\r\n 'h1',\r\n css`\r\n white-space: normal;\r\n `\r\n )}\r\n\r\n > ul {\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${(p) => p.theme.sizes?.normal};\r\n > li {\r\n margin: 0;\r\n }\r\n }\r\n`;\r\n\r\nconst StyledLinkButton = styled(Button)<{ help: boolean }>`\r\n display: block;\r\n text-align: left;\r\n font-weight: 300;\r\n color: ${(p) => p.theme.colors?.primary};\r\n max-width: 100%;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n\r\n ${(p) =>\r\n p.help &&\r\n css`\r\n color: ${p.theme.colors?.text};\r\n text-decoration: underline;\r\n\r\n i,\r\n svg {\r\n margin-left: ${p.theme.sizes?.small};\r\n }\r\n `}\r\n\r\n &:focus-visible {\r\n ${borderTabStyle}\r\n span {\r\n color: ${(p) => p.theme.colors?.primary};\r\n text-decoration: underline;\r\n }\r\n }\r\n`;\r\n","import React, { FC } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nexport const Separator: FC = () => {\r\n return <StyledSeparator />;\r\n};\r\n\r\nconst StyledSeparator = styled.div`\r\n ${(p) => p.theme.border && `border-bottom: ${p.theme.border};`}\r\n width: 100%;\r\n`;\r\n","import { Typography } from '@telia-ace/widget-ui';\r\nimport React, { FC } from 'react';\r\nimport styled from 'styled-components';\r\nimport { messageContentPadding } from '../styles';\r\n\r\ntype Props = { text: string };\r\n\r\nexport const Text: FC<Props> = ({ text }) => {\r\n return <StyledTypography variant=\"span\">{text}</StyledTypography>;\r\n};\r\n\r\nconst StyledTypography = styled(Typography)`\r\n ${messageContentPadding}\r\n`;\r\n","import {\r\n borderTabStyle,\r\n Button,\r\n buttonCss,\r\n DispatchAction,\r\n ItemList,\r\n itemList,\r\n SymbolBadge,\r\n} from '@telia-ace/widget-ui';\r\nimport React, { FC, useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport { VideoRequestProperties } from '../../../../types';\r\nimport { messageContentPadding } from '../styles';\r\n\r\ntype Props = { dispatch: DispatchAction } & VideoRequestProperties;\r\n\r\nexport const VideoRequest: FC<Props> = ({\r\n header = 'Video call',\r\n acceptLabel = 'Accept',\r\n declineLabel = 'Decline',\r\n dispatch,\r\n}) => {\r\n const actions = useMemo(() => {\r\n return [\r\n {\r\n label: acceptLabel,\r\n actionKey: 'accept-video-call',\r\n symbol: {\r\n type: 'Svg',\r\n content: 'video',\r\n },\r\n },\r\n {\r\n label: declineLabel,\r\n actionKey: 'decline-video-call',\r\n symbol: {\r\n type: 'Svg',\r\n content: 'close',\r\n },\r\n },\r\n ];\r\n }, [acceptLabel, declineLabel]);\r\n return (\r\n <StyledItemList\r\n header={header}\r\n items={actions}\r\n renderItem={(item: any) => {\r\n const bgColor = item.actionKey === 'accept-video-call' ? '#70c48e' : '#da5c85';\r\n return (\r\n <li key={item.actionKey}>\r\n <StyledButton\r\n onClick={() => {\r\n dispatch('action', item);\r\n }}\r\n aria-label={item.label}\r\n title={item.label}\r\n bgColor={bgColor}\r\n >\r\n <SymbolBadge symbol={item.symbol} size={25} />\r\n </StyledButton>\r\n </li>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nconst StyledItemList = styled(ItemList)`\r\n ${itemList}\r\n > ul {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: ${(p) => p.theme.sizes?.normal};\r\n > li {\r\n margin: 0;\r\n }\r\n }\r\n ${messageContentPadding}\r\n`;\r\n\r\nconst StyledButton = styled(Button)<{ bgColor: string }>`\r\n ${buttonCss};\r\n\r\n background-color: ${(p) => p.bgColor};\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n width: 46px;\r\n height: 46px;\r\n border-radius: 100%;\r\n\r\n &:focus-visible {\r\n ${borderTabStyle}\r\n background-color: transparent;\r\n\r\n i,\r\n svg {\r\n color: ${(p) => p.theme.colors?.primary};\r\n\r\n path {\r\n stroke: ${(p) => p.theme.colors?.primary};\r\n }\r\n }\r\n }\r\n\r\n i,\r\n svg {\r\n color: #fff;\r\n\r\n path {\r\n stroke: #fff;\r\n }\r\n }\r\n`;\r\n","import React, { FC } from 'react';\r\n\r\nimport { DispatchAction, List, list } from '@telia-ace/widget-ui';\r\nimport styled from 'styled-components';\r\nimport { ConversationMessageListItemType, ConverstationMessageItem } from '../../../../types';\r\nimport { ButtonList } from '../message-list-items/button-list';\r\nimport { Custom } from '../message-list-items/custom';\r\nimport { Html } from '../message-list-items/html';\r\nimport { LinkList } from '../message-list-items/link-list';\r\nimport { Separator } from '../message-list-items/separator';\r\nimport { Text } from '../message-list-items/text';\r\nimport { VideoRequest } from '../message-list-items/video-request';\r\n\r\ntype Props = {\r\n items: ConverstationMessageItem<any>[];\r\n dispatch: DispatchAction;\r\n};\r\n\r\nconst mapItem = ([type, content]: ConverstationMessageItem<any>) => {\r\n return { type, content };\r\n};\r\n\r\nexport const MessageList: FC<Props> = ({ items, dispatch }) => {\r\n return (\r\n <StyledList\r\n items={items.map(mapItem)}\r\n renderLi\r\n renderItem={(item: any) => {\r\n switch (item.type) {\r\n case ConversationMessageListItemType.Text: {\r\n return <Text text={item.content} />;\r\n }\r\n case ConversationMessageListItemType.HTML: {\r\n return <Html {...item.content} />;\r\n }\r\n case ConversationMessageListItemType.Separator: {\r\n return <Separator {...item.content} />;\r\n }\r\n case ConversationMessageListItemType.LinkList: {\r\n return <LinkList {...item.content} dispatch={dispatch} />;\r\n }\r\n case ConversationMessageListItemType.ButtonList: {\r\n return <ButtonList {...item.content} dispatch={dispatch} />;\r\n }\r\n case ConversationMessageListItemType.VideoRequest: {\r\n return <VideoRequest {...item.content} dispatch={dispatch} />;\r\n }\r\n default: {\r\n return <Custom type={item.type} content={item.content} />;\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nconst StyledList = styled(List)<any>`\r\n ${list}\r\n\r\n > li {\r\n margin: 0;\r\n }\r\n`;\r\n","import { Html, useDispatch } from '@telia-ace/widget-ui';\r\nimport React, { forwardRef, useCallback } from 'react';\r\nimport { ConversationMessageType } from '../../../conversation-controller';\r\nimport { ConversationMessageContent } from '../../../types';\r\nimport { BundledConversationMessage } from '../plugin';\r\nimport { AgentMessage, SystemMessage, UserMessage } from './message-types';\r\nimport { MessageList } from './message-types/message-list';\r\nimport {\r\n ContentBundle,\r\n MessageContainer,\r\n MessageContent,\r\n MessageContentPart,\r\n MessageTitle,\r\n Stacked,\r\n StyledActionButton,\r\n StyledActionList,\r\n StyledForm,\r\n StyledHtml,\r\n} from './styles';\r\n\r\ntype Props = {\r\n className?: string;\r\n} & BundledConversationMessage;\r\n\r\nexport const ConversationMessage = forwardRef<HTMLDivElement, Props>(\r\n ({ className, timestamp, sender, type, content }, ref) => {\r\n const getMessageStackPosition = useCallback(\r\n (index: number): Stacked => {\r\n let messageOrder: Stacked = 'first';\r\n if (content.length > 1) {\r\n messageOrder =\r\n index === 0 ? 'first' : index + 1 === content.length ? 'last' : 'middle';\r\n }\r\n return messageOrder;\r\n },\r\n [content]\r\n );\r\n\r\n const createSystemMessage = () => {\r\n return (\r\n <>\r\n {content.map((item) => {\r\n const { key, body, title, form, actions } = item;\r\n const discrete = !!body && !title && !form && !actions;\r\n return (\r\n <SystemMessage\r\n className={className}\r\n key={key}\r\n discrete={discrete}\r\n ref={ref}\r\n timestamp={timestamp}\r\n fullWidth={!!form || !!actions}\r\n >\r\n {discrete && body ? (\r\n <Html html={body} />\r\n ) : (\r\n <Message isSystem content={item} />\r\n )}\r\n </SystemMessage>\r\n );\r\n })}\r\n </>\r\n );\r\n };\r\n\r\n const createAgentMessage = () => {\r\n return (\r\n <AgentMessage sender={sender} timestamp={timestamp} className={className}>\r\n <ContentBundle>\r\n {content.map((item, index) => {\r\n return (\r\n <MessageContainer left key={item.key} ref={ref}>\r\n <Message\r\n content={item}\r\n stacked={getMessageStackPosition(index)}\r\n />\r\n </MessageContainer>\r\n );\r\n })}\r\n </ContentBundle>\r\n </AgentMessage>\r\n );\r\n };\r\n\r\n const createUserMessage = () => {\r\n return (\r\n <UserMessage timestamp={timestamp} className={className}>\r\n <ContentBundle>\r\n {content.map((item, index) => {\r\n return (\r\n <MessageContainer right key={item.key} ref={ref}>\r\n <Message\r\n isUser\r\n content={item}\r\n stacked={getMessageStackPosition(index)}\r\n />\r\n </MessageContainer>\r\n );\r\n })}\r\n </ContentBundle>\r\n </UserMessage>\r\n );\r\n };\r\n\r\n switch (type) {\r\n case ConversationMessageType.System:\r\n return createSystemMessage();\r\n case ConversationMessageType.Agent:\r\n return createAgentMessage();\r\n case ConversationMessageType.User:\r\n return createUserMessage();\r\n default:\r\n return null;\r\n }\r\n }\r\n);\r\n\r\ntype MessageContentProps = {\r\n className?: string;\r\n content: ConversationMessageContent;\r\n isUser?: boolean;\r\n isSystem?: boolean;\r\n stacked?: Stacked;\r\n CustomComponent?: any;\r\n};\r\n\r\nconst Message: React.FC<MessageContentProps> = ({ content, isUser, isSystem, stacked }) => {\r\n const dispatch = useDispatch();\r\n const { title, body, actions, form, items } = content;\r\n\r\n // Using print(string) or print(object) is considered legacy in favor of print(array).\r\n const isLegacyMessage = !items;\r\n if (isLegacyMessage) {\r\n return (\r\n <MessageContent\r\n padded={!isSystem}\r\n user={!!isUser}\r\n stacked={stacked}\r\n fullWidth={!!form || !!actions}\r\n >\r\n {title && (\r\n <MessageContentPart>\r\n <MessageTitle variant=\"h2\">{title}</MessageTitle>\r\n </MessageContentPart>\r\n )}\r\n {body && (\r\n <MessageContentPart>\r\n <StyledHtml html={body} />\r\n </MessageContentPart>\r\n )}\r\n {form && (\r\n <MessageContentPart>\r\n <StyledForm\r\n {...form}\r\n onChange={(key: string, data: any) => {\r\n dispatch('form', {\r\n data,\r\n formKey: form.schema.id,\r\n actionKey: key,\r\n });\r\n }}\r\n />\r\n </MessageContentPart>\r\n )}\r\n {actions && (\r\n <MessageContentPart>\r\n <StyledActionList\r\n items={Object.keys(actions).map((i: any) => {\r\n return { label: actions[i], actionKey: i };\r\n })}\r\n renderItem={(item: any) => {\r\n return (\r\n <li key={item.actionKey}>\r\n <StyledActionButton\r\n onClick={() => {\r\n dispatch('action', item.actionKey);\r\n }}\r\n >\r\n {item.label}\r\n </StyledActionButton>\r\n </li>\r\n );\r\n }}\r\n />\r\n </MessageContentPart>\r\n )}\r\n </MessageContent>\r\n );\r\n }\r\n\r\n return (\r\n <MessageContent user={!!isUser} stacked={stacked}>\r\n <MessageList items={items} dispatch={dispatch} />\r\n </MessageContent>\r\n );\r\n};\r\n","import { borderTabStyle, headingElement, useProperties, useScroll } from '@telia-ace/widget-ui';\r\nimport React, { useCallback } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { ConversationMessageSender } from '../../../types';\r\nimport { BundledConversationMessage, ConversationComponentProperties } from '../plugin';\r\nimport ConversationInput from './input';\r\nimport ConversationLoader from './loader';\r\nimport { ConversationMessage } from './message';\r\nimport { AgentMessage } from './message-types';\r\n\r\nexport const ConversationContent: React.FC = () => {\r\n const setLastEntryRef = useCallback((node) => {\r\n if (node) {\r\n setTimeout(() => {\r\n node.scrollIntoView({\r\n block: 'start',\r\n behavior: 'smooth',\r\n });\r\n }, 250);\r\n }\r\n }, []);\r\n\r\n const [scrollableCss, viewElem] = useScroll(true);\r\n const {\r\n messages,\r\n loading,\r\n typingActors = [],\r\n } = useProperties<ConversationComponentProperties>();\r\n\r\n const renderTypingActors = () => {\r\n if (typingActors && typingActors.length) {\r\n return typingActors.map((actor: ConversationMessageSender, index) => {\r\n return (\r\n <MessageEntry id={`typing_${actor.name}`} key={`typing_${actor.name}`}>\r\n <AgentMessage timestamp={Date.now()} sender={actor}>\r\n <ConversationLoader boxed ref={setLastEntryRef}></ConversationLoader>\r\n </AgentMessage>\r\n </MessageEntry>\r\n );\r\n });\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n <>\r\n <Scrollable tabIndex={0} scrollableCss={scrollableCss} ref={viewElem}>\r\n {messages && messages.length\r\n ? messages.map((message: BundledConversationMessage, index) => {\r\n const { type, timestamp, sender, content } = message;\r\n return (\r\n <MessageEntry\r\n className={'humany-conversation-entry'}\r\n tabIndex={-1}\r\n key={`${type}_${sender?.name}_${timestamp}_${content[0].key}`}\r\n >\r\n <ConversationMessage {...message} ref={setLastEntryRef} />\r\n </MessageEntry>\r\n );\r\n })\r\n : null}\r\n {renderTypingActors()}\r\n {loading && (\r\n <MessageEntry>\r\n <ConversationLoader ref={setLastEntryRef} />\r\n </MessageEntry>\r\n )}\r\n </Scrollable>\r\n <ConversationInput />\r\n </>\r\n );\r\n};\r\n\r\nconst Scrollable = styled.div<{ scrolling: boolean } & any>`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: stretch;\r\n flex: 0 1 100%;\r\n padding: 0 ${(p) => p.theme.sizes?.medium};\r\n ${(p) => !!p.scrollableCss && p.scrollableCss};\r\n &:focus-visible {\r\n ${borderTabStyle};\r\n }\r\n`;\r\n\r\nconst MessageEntry = styled.div`\r\n margin: 0;\r\n margin-bottom: ${(p) => p.theme.sizes?.medium};\r\n\r\n &:first-of-type {\r\n margin-top: ${(p) => p.theme.sizes?.medium};\r\n }\r\n\r\n &:last-of-type {\r\n padding-bottom: ${(p) => p.theme.sizes?.medium};\r\n }\r\n\r\n & span,\r\n p,\r\n a,\r\n div {\r\n font-weight: 300;\r\n }\r\n\r\n & b,\r\n h1 {\r\n font-weight: normal;\r\n }\r\n\r\n ${headingElement(\r\n 'h1',\r\n css`\r\n font-weight: normal;\r\n `\r\n )}\r\n`;\r\n","import {\r\n borderTabStyle,\r\n Button,\r\n DispatchAction,\r\n SymbolBadge,\r\n Typography,\r\n WidgetOverlayOutlet,\r\n} from '@telia-ace/widget-ui';\r\nimport React, { FC, useEffect, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport { ConversationContent } from './content';\r\n\r\ntype OverlayOutletProps = {\r\n dispatch: DispatchAction;\r\n};\r\n\r\nexport const OverlayOutlet: FC<OverlayOutletProps> = ({ dispatch }) => {\r\n const wrapperRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (wrapperRef.current && wrapperRef.current.parentNode) {\r\n dispatch('overlay-mounted', wrapperRef.current);\r\n }\r\n }, [wrapperRef]);\r\n\r\n return (\r\n <WidgetOverlayOutlet\r\n portalId=\"humany-conversation-overlay-portal\"\r\n className=\"humany-conversation-overlay-outlet\"\r\n ref={wrapperRef}\r\n />\r\n );\r\n};\r\n\r\ntype ConversationOverlayProps = {\r\n dispatch: DispatchAction;\r\n header?: string;\r\n buttonLabel?: string;\r\n};\r\n\r\nexport const ConversationOverlayOutlet: FC<ConversationOverlayProps> = ({\r\n dispatch,\r\n header,\r\n buttonLabel,\r\n}) => {\r\n return (\r\n <StyledWidgetOverlayOutlet\r\n portalId=\"humany-conversation-portal\"\r\n className=\"humany-conversation-outlet\"\r\n >\r\n <ConversationOverlayHead className=\"humany-conversation-outlet-head\">\r\n <ConversationOverlayHeadButton\r\n className=\"humany-conversation-outlet-head-button\"\r\n aria-label={buttonLabel}\r\n title={buttonLabel}\r\n onClick={() => dispatch('hide-overlay-conversation')}\r\n >\r\n <SymbolBadge\r\n symbol={{\r\n type: 'Svg',\r\n content: 'caret-down',\r\n }}\r\n size={20}\r\n />\r\n </ConversationOverlayHeadButton>\r\n {header && (\r\n <ConversationOverlayHeader\r\n className=\"humany-conversation-outlet-header\"\r\n variant=\"h1\"\r\n >\r\n {header}\r\n </ConversationOverlayHeader>\r\n )}\r\n </ConversationOverlayHead>\r\n <ConversationContent />\r\n </StyledWidgetOverlayOutlet>\r\n );\r\n};\r\n\r\nconst StyledWidgetOverlayOutlet = styled(WidgetOverlayOutlet)`\r\n z-index: 11;\r\n top: auto;\r\n height: 65%;\r\n background-color: #ffffff;\r\n display: flex;\r\n flex-direction: column;\r\n border-top-right-radius: ${(p) => p.theme.sizes?.large};\r\n border-top-left-radius: ${(p) => p.theme.sizes?.large};\r\n`;\r\n\r\nconst ConversationOverlayHead = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n gap: ${(p) => p.theme.sizes?.normal};\r\n padding: ${(p) => p.theme.sizes?.normal};\r\n ${(p) => p.theme.border && `border-bottom: ${p.theme.border};`}\r\n`;\r\n\r\nconst ConversationOverlayHeader = styled(Typography)`\r\n font-size: ${(p) => p.theme.fonts?.medium};\r\n color: ${(p) => p.theme.colors?.text};\r\n margin: 0;\r\n`;\r\n\r\nconst ConversationOverlayHeadButton = styled(Button)`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: ${(p) => p.theme.sizes?.small} ${(p) => p.theme.sizes?.medium};\r\n ${(p) => p.theme.borderRadius && `border-radius: ${p.theme.borderRadius};`}\r\n\r\n &:focus-visible {\r\n ${borderTabStyle};\r\n }\r\n\r\n svg line {\r\n stroke: ${(p) => p.theme.colors?.text};\r\n }\r\n`;\r\n","import { useDispatch, useProperties } from '@telia-ace/widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport { ConversationComponentProperties } from './plugin';\r\nimport { ConversationContent } from './ui/content';\r\nimport { ConversationOverlayOutlet, OverlayOutlet } from './ui/overlay-outlets';\r\n\r\ntype Props = {\r\n className: string;\r\n};\r\n\r\nconst Conversation: React.FC<Props> = ({ className, ...other }) => {\r\n const { overlay, overlayConversationHeader, overlayConversationCloseLabel } =\r\n useProperties<ConversationComponentProperties>();\r\n const dispatch = useDispatch();\r\n return (\r\n <>\r\n <Wrapper\r\n {...other}\r\n className={appendClassNames(className, 'humany-conversation-component')}\r\n >\r\n <ConversationContent />\r\n </Wrapper>\r\n {overlay && (\r\n <>\r\n <OverlayOutlet dispatch={dispatch} />\r\n {overlay.conversation && (\r\n <ConversationOverlayOutlet\r\n dispatch={dispatch}\r\n header={overlayConversationHeader}\r\n buttonLabel={overlayConversationCloseLabel}\r\n />\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst Wrapper = styled.div`\r\n position: absolute;\r\n right: 0;\r\n left: 0;\r\n bottom: 0;\r\n top: 0;\r\n overflow: hidden;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nexport default Conversation;\r\n"],"names":["ConversationInput","className","inputText","setInputText","useState","inputFocus","setInputFocus","calculatedLineHeight","setCalculatedLineHeight","textareaMaxHeight","setTextareaMaxHeight","isTabbing","useIsTabbing","dispatch","useDispatch","inputPlaceholder","inputHidden","inputDisabled","sendButtonLabel","multiline","secondaryAction","useProperties","scrollableCss","inputRef","useScroll","useEffect","lineHeight","maxHeight","lineHeightNumber","calcLH","maxHeightNumber","submit","e","onChange","onSecondaryActionButtonClick","__spreadValues","calculateHeight","value","scrollHeight","areaHeight","React","Wrapper","appendClassNames","SecondaryActionButton","SymbolBadge","StyledTextArea","StyledInput","StyledButton","SendSymbol","styled","Input","p","_a","Button","borderTabStyle","css","_b","hasContent","other","__objRest","Avatar","LoaderAnimation","keyframes","Loader","ContentBundle","MessageTitle","Typography","MessageContainer","MessageContent","nonUserMessageStyling","userMessageStyling","stacked","theme","colors","MessageContentPart","messageContentPadding","StyledForm","FormComponent","invertedHoverButton","StyledHtml","Html","StyledActionList","List","StyledActionButton","buttonCss","ConversationLoader","forwardRef","boxed","agentData","ref","StyledTimestamp","getTimestamp","raw","Timestamp","name","timestamp","output","AgentMessage","children","sender","avatar","avatarSize","StyledAgentMessage","SystemMessage","discrete","fullWidth","StyledSystemMessage","Discrete","UserMessage","userLabel","StyledUserMessage","mapActions","actions","i","ButtonList","header","StyledButtonList","item","StyledButtonListButton","ItemList","itemList","Custom","type","content","Component","useComponent","Suspense","body","UiHtml","genericHtml","LinkList","StyledLinkList","StyledLinkButton","headingElement","Separator","StyledSeparator","Text","text","StyledTypography","VideoRequest","acceptLabel","declineLabel","useMemo","StyledItemList","bgColor","mapItem","MessageList","items","StyledList","ConversationMessageListItemType","__spreadProps","list","ConversationMessage","getMessageStackPosition","useCallback","index","messageOrder","createSystemMessage","key","title","form","Message","createAgentMessage","createUserMessage","ConversationMessageType","isUser","isSystem","data","ConversationContent","setLastEntryRef","node","viewElem","messages","loading","typingActors","renderTypingActors","actor","MessageEntry","Scrollable","message","OverlayOutlet","wrapperRef","useRef","WidgetOverlayOutlet","ConversationOverlayOutlet","buttonLabel","StyledWidgetOverlayOutlet","ConversationOverlayHead","ConversationOverlayHeadButton","ConversationOverlayHeader","Conversation","overlay","overlayConversationHeader","overlayConversationCloseLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conversation.d7aad569.js","sources":["../src/components/conversation/ui/input.tsx","../src/components/conversation/ui/styles.tsx","../src/components/conversation/ui/loader.tsx","../src/components/conversation/ui/message-types/timestamp.tsx","../src/components/conversation/ui/message-types/agent.tsx","../src/components/conversation/ui/message-types/system.tsx","../src/components/conversation/ui/message-types/user.tsx","../src/utils/map-actions.ts","../src/components/conversation/ui/message-list-items/button-list.tsx","../src/components/conversation/ui/message-list-items/custom.tsx","../src/components/conversation/ui/message-list-items/html.tsx","../src/components/conversation/ui/message-list-items/link-list.tsx","../src/components/conversation/ui/message-list-items/separator.tsx","../src/components/conversation/ui/message-list-items/text.tsx","../src/components/conversation/ui/message-list-items/video-request.tsx","../src/components/conversation/ui/message-types/message-list.tsx","../src/components/conversation/ui/message.tsx","../src/components/conversation/ui/content.tsx","../src/components/conversation/ui/overlay-outlets.tsx","../src/components/conversation/conversation.tsx"],"sourcesContent":["import {\n borderTabStyle,\n Button,\n Input,\n SymbolBadge,\n useDispatch,\n useIsTabbing,\n useProperties,\n useScroll,\n} from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { ConversationComponentProperties } from '../plugin';\n\ntype Props = {\n className?: string;\n};\n\nconst ConversationInput: React.FC<Props> = ({ className }) => {\n const [inputText, setInputText] = useState('');\n const [inputFocus, setInputFocus] = useState(false);\n const [calculatedLineHeight, setCalculatedLineHeight] = useState(0);\n const [textareaMaxHeight, setTextareaMaxHeight] = useState(0);\n const isTabbing = useIsTabbing();\n const dispatch = useDispatch();\n const {\n inputPlaceholder = 'Type your message',\n inputHidden = false,\n inputDisabled = false,\n sendButtonLabel = 'Send message',\n inputMultiline: multiline = true,\n secondaryAction,\n } = useProperties<ConversationComponentProperties>();\n const [scrollableCss, inputRef] = useScroll(true);\n\n useEffect(() => {\n if (inputRef.current) {\n const { lineHeight, maxHeight } = getComputedStyle(inputRef.current);\n if (lineHeight && lineHeight.indexOf('px') > -1) {\n const lineHeightNumber = lineHeight.split('px');\n const calcLH = parseInt(lineHeightNumber[0], 10);\n setCalculatedLineHeight(calcLH);\n const maxHeightNumber = maxHeight.split('px');\n setTextareaMaxHeight(parseInt(maxHeightNumber[0], 10));\n }\n }\n }, [inputRef.current]);\n\n const submit = (e: any) => {\n if (!e.shiftKey || !multiline) {\n e.preventDefault();\n if (inputText && inputText.length > 0) {\n dispatch('user-submit', { text: inputText });\n setInputText('');\n onChange('');\n }\n } else if (inputText.length < 1) {\n e.preventDefault();\n }\n };\n\n const onSecondaryActionButtonClick = (e: any) => {\n if (!secondaryAction) {\n return;\n }\n e.preventDefault();\n dispatch('action', {\n actionKey: secondaryAction.action,\n ...secondaryAction,\n });\n };\n\n const calculateHeight = (value: string) => {\n if (multiline && inputRef.current) {\n const scrollHeight = inputRef.current.scrollHeight;\n if (scrollHeight > calculatedLineHeight) {\n inputRef.current.style.height = 'auto';\n let areaHeight = scrollHeight;\n if (value.length < 1) {\n areaHeight = calculatedLineHeight;\n }\n inputRef.current.style.height = `${areaHeight}px`;\n\n if (areaHeight >= textareaMaxHeight) {\n inputRef.current.style.overflowY = 'scroll';\n } else {\n inputRef.current.style.overflowY = 'hidden';\n }\n }\n }\n };\n\n const onChange = (value: string) => {\n calculateHeight(value);\n setInputText(value);\n if (value && value.length > 0) {\n dispatch('user-typing', { textLength: value.length });\n }\n };\n\n if (inputHidden) {\n return null;\n }\n\n return (\n <Wrapper\n grow={multiline}\n className={appendClassNames('humany-conversation-input', className)}\n data-has-focus={inputFocus}\n scrollableCss={scrollableCss}\n isTabbing={isTabbing}\n >\n {secondaryAction && (\n <SecondaryActionButton\n disabled={inputDisabled}\n onClick={onSecondaryActionButtonClick}\n title={secondaryAction.label}\n aria-label={secondaryAction.label}\n >\n <SymbolBadge\n size={24}\n symbol={{ type: 'Svg', content: secondaryAction.icon || 'browse' }}\n />\n </SecondaryActionButton>\n )}\n {multiline ? (\n <StyledTextArea\n value={inputText}\n onChange={onChange}\n onEnter={submit}\n disabled={inputDisabled}\n aria-label={inputPlaceholder}\n placeholder={inputPlaceholder}\n onFocusChange={setInputFocus}\n type={'textarea'}\n rows={1}\n ref={inputRef}\n />\n ) : (\n <StyledInput\n value={inputText}\n onChange={onChange}\n onEnter={submit}\n disabled={inputDisabled}\n aria-label={inputPlaceholder}\n placeholder={inputPlaceholder}\n onFocusChange={setInputFocus}\n />\n )}\n <StyledButton\n disabled={inputDisabled}\n onClick={submit}\n title={sendButtonLabel}\n aria-label={sendButtonLabel}\n >\n <SendSymbol\n size={22}\n symbol={{ type: 'Svg', content: 'send' }}\n hasContent={inputText && inputText.length}\n />\n </StyledButton>\n </Wrapper>\n );\n};\n\nconst StyledTextArea = styled(Input)<any>`\n resize: none;\n flex: 1;\n flex-shrink: 1;\n min-height: 1.2em;\n max-height: 148px;\n line-height: 1.2em;\n height: 1.2em;\n padding: 0;\n margin: ${(p) => p.theme.sizes?.medium};\n font-size: ${(p) => p.theme.fonts?.normal};\n border: none;\n transition: height 200ms linear;\n outline: none;\n`;\n\nconst StyledInput = styled(Input)<any>`\n flex: 1;\n border: none;\n background-color: transparent;\n font-weight: 300;\n font-size: ${(p) => p.theme.fonts?.normal};\n line-height: 1.2em;\n outline: none;\n padding: ${(p) => p.theme.sizes?.medium};\n color: ${(p) => p.theme.colors?.text};\n &::placeholder {\n color: ${(p) => p.theme.colors?.textLight};\n font-style: italic;\n }\n`;\n\nconst StyledButton = styled(Button)<any>`\n flex: 0 0 50px;\n align-self: stretch;\n background-color: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n color: #a6a6a6;\n &:focus-visible {\n ${borderTabStyle};\n }\n`;\n\nconst SecondaryActionButton = styled(StyledButton)`\n border-right: ${(p) => p.theme.border};\n margin: ${(p) => p.theme.sizes?.normal} 0;\n`;\n\nconst Wrapper = styled.div<{ 'data-has-focus': boolean } & any>`\n ${(p) =>\n p.grow\n ? css`\n min-height: 50px;\n max-height: 150px;\n `\n : css`\n height: 50px;\n `}\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n background-color: ${(p) => p.theme.colors?.accent};\n border-top: ${(p) => p.theme.inputBorder};\n ${(p) => p['data-has-focus'] && p.isTabbing && borderTabStyle}\n ${StyledTextArea} {\n ${(p) => !!p.scrollableCss && p.scrollableCss}\n }\n`;\n\nconst SendSymbol = styled(({ hasContent, ...other }) => <SymbolBadge {...other} />)`\n line,\n path {\n stroke: ${(p) => (p.hasContent ? p.theme.colors?.primary : '#a6a6a6')};\n fill: ${(p) => (p.hasContent ? p.theme.colors?.primary : '#a6a6a6')};\n }\n`;\n\nexport default ConversationInput;\n","import { FormComponent } from '@telia-ace/widget-forms';\nimport {\n borderTabStyle,\n buttonCss,\n Html,\n invertedHoverButton,\n List,\n Typography,\n} from '@telia-ace/widget-ui';\nimport styled, { css, keyframes } from 'styled-components';\n\nexport const Avatar = styled.div<any>`\n width: ${(p) => p.avatarSize || '32px'};\n height: ${(p) => p.avatarSize || '32px'};\n border-radius: 50%;\n background-color: ${(p) => p.theme.colors?.accent};\n border: ${(p) => p.theme.border};\n grid-area: avatar;\n align-self: flex-end;\n justify-self: center;\n overflow: hidden;\n margin-right: 10px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: ${(p) => p.theme.colors?.text};\n\n > img {\n height: 100%;\n width: 100%;\n object-fit: cover;\n }\n\n > svg {\n width: 90%;\n height: 90%;\n padding: 10%;\n color: ${(p) => p.theme.colors?.text};\n\n line,\n path,\n circle,\n fill {\n stroke: ${(p) => p.theme.colors?.text};\n }\n }\n`;\n\nexport const LoaderAnimation = keyframes`\n 0% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n`;\n\nexport const Loader = styled.div`\n display: flex;\n justify-content: center;\n > div {\n height: 10px;\n width: 10px;\n border-radius: 50%;\n margin: 5px;\n background-color: ${(p) => p.theme.colors?.text};\n animation: ${LoaderAnimation} 1s infinite;\n }\n > div:nth-child(2) {\n animation-delay: 100ms;\n }\n > div:nth-child(3) {\n animation-delay: 200ms;\n }\n`;\n\nexport const ContentBundle = styled.div`\n grid-area: content;\n max-width: 100%;\n overflow: hidden;\n`;\n\nexport const MessageTitle = styled(Typography)`\n font-size: ${(p) => p.theme.fonts?.normal};\n font-weight: normal;\n margin: 0;\n`;\n\nexport const MessageContainer = styled.div<{ left?: boolean; center?: boolean; right?: boolean }>`\n display: flex;\n ${(p) => p.left && 'justify-content: start;'};\n ${(p) => p.center && 'justify-content: center;'};\n ${(p) => p.right && 'justify-content: end;'};\n`;\n\nexport type Stacked = 'first' | 'last' | 'middle';\n\nexport const MessageContent = styled.div<{\n user?: boolean;\n fullWidth?: boolean;\n stacked?: Stacked;\n padded?: boolean;\n}>`\n ${(p) => p.padded && `padding: ${p.theme.sizes?.medium};`}\n ${(p) => !p.user && p.stacked && nonUserMessageStyling(p.stacked, p.theme)}\n ${(p) => p.user && p.stacked && userMessageStyling(p.stacked, p.theme)}\n\n display: inline-block;\n margin-top: ${(p) => p.theme.sizes?.normal};\n && > * {\n overflow-wrap: break-word;\n word-wrap: break-word;\n word-break: break-all;\n word-break: break-word;\n hyphens: auto;\n }\n max-width: 100%;\n ${(p) => p.fullWidth && 'width: 100%;'}\n`;\n\nconst nonUserMessageStyling = (stacked: Stacked, theme: any) => {\n const colors = css`\n background-color: ${theme.colors?.accent};\n color: ${theme.colors?.text};\n ${theme.border && `border: ${theme.border};`};\n `;\n\n if (!theme.borderRadius) {\n return colors;\n }\n\n return css`\n ${colors}\n\n border-top-right-radius: ${theme.borderRadius};\n border-bottom-right-radius: ${theme.borderRadius};\n\n ${stacked === 'first' &&\n `\n border-top-left-radius: ${theme.borderRadius};\n `}\n\n ${stacked === 'last' &&\n `\n border-bottom-left-radius: ${theme.borderRadius};\n `}\n `;\n};\n\nconst userMessageStyling = (stacked: Stacked, theme: any) => {\n const colors = css`\n background-color: ${theme.colors?.primary};\n color: ${theme.colors?.accent};\n `;\n\n if (!theme.borderRadius) {\n return colors;\n }\n\n return css`\n ${colors}\n\n border-top-left-radius: ${theme.borderRadius};\n border-bottom-left-radius: ${theme.borderRadius};\n\n ${stacked === 'first' &&\n `\n border-top-right-radius: ${theme.borderRadius};\n `}\n\n ${stacked === 'last' &&\n `\n border-bottom-right-radius: ${theme.borderRadius};\n `}\n `;\n};\n\nexport const MessageContentPart = styled.div`\n margin-bottom: ${(p) => p.theme.sizes?.normal};\n &:last-child {\n margin-bottom: 0;\n }\n`;\n\nexport const messageContentPadding = css`\n margin: ${(p) => p.theme.sizes?.medium} 0;\n padding: 0 ${(p) => p.theme.sizes?.medium};\n`;\n\nexport const StyledForm = styled(FormComponent)`\n & button.humany-form-component-button {\n ${(p) =>\n invertedHoverButton({\n active: false,\n primaryColor: p.theme.colors?.primary,\n secondaryColor: p.theme.colors?.accent,\n })};\n display: block;\n width: 100%;\n margin-bottom: ${(p) => p.theme.sizes?.normal};\n }\n & button.humany-form-component-submit {\n width: 100%;\n margin: 0;\n :not(:last-child) {\n margin-bottom: ${(p) => p.theme.sizes?.normal};\n }\n }\n`;\n\nexport const StyledHtml = styled(Html)<any>`\n white-space: pre-wrap;\n a {\n color: ${(p) => p.theme.colors.link};\n &:focus {\n ${(p) => p.theme.accessibility?.isTabbing && borderTabStyle};\n }\n }\n`;\n\nexport const StyledActionList = styled(List)`\n padding: 0;\n list-style: none;\n margin: 0 -${(p) => p.theme.sizes?.normal};\n > li {\n margin: ${(p) => p.theme.sizes?.normal};\n }\n`;\n\nexport const StyledActionButton = styled.button`\n ${buttonCss};\n display: block;\n background-color: ${(p) => p.theme.colors?.primary};\n width: 100%;\n color: #fff;\n &:focus-visible {\n ${borderTabStyle}\n background-color: transparent;\n }\n`;\n","import React, { forwardRef } from 'react';\nimport { ConversationMessageSender } from '../../../types';\nimport { ContentBundle, Loader, MessageContainer, MessageContent } from './styles';\n\ntype Props = {\n className?: string;\n agentData?: ConversationMessageSender;\n boxed?: boolean;\n};\n\nconst ConversationLoader = forwardRef<HTMLDivElement, Props>(\n ({ boxed, className, agentData }, ref) => {\n return (\n <ContentBundle ref={ref}>\n <MessageContainer left={boxed} center={!boxed}>\n <MessageContent padded={!!boxed} stacked={boxed ? 'first' : undefined}>\n <Loader>\n <div />\n <div />\n <div />\n </Loader>\n </MessageContent>\n </MessageContainer>\n </ContentBundle>\n );\n }\n);\n\nexport default ConversationLoader;\n","import React from 'react';\nimport styled from 'styled-components';\n\ntype Props = {\n className?: string;\n name?: string;\n timestamp?: number | null;\n};\n\nconst StyledTimestamp = styled.p`\n && {\n font-size: ${(p) => p.theme.fonts?.small};\n font-weight: 300;\n }\n margin: 0;\n line-height: 1.5em;\n grid-area: info;\n color: ${(p) => p.theme.colors?.text};\n`;\n\nconst getTimestamp = (raw: number) => {\n return new Date(raw).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n};\n\nconst Timestamp: React.FC<Props> = ({ className, name, timestamp }) => {\n if (!name && !timestamp) {\n return null;\n }\n\n let output = '';\n if (name) {\n if (timestamp) {\n output = `${name}: ${getTimestamp(timestamp)}`;\n } else {\n output = name;\n }\n } else if (timestamp) {\n output = getTimestamp(timestamp);\n }\n\n return <StyledTimestamp>{output}</StyledTimestamp>;\n};\n\nexport default Timestamp;\n","import { SymbolBadge, useProperties } from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport { ConversationMessageSender } from '../../../../types';\nimport { ConversationComponentProperties } from '../../plugin';\nimport { Avatar } from '../styles';\nimport Timestamp from './timestamp';\n\ntype Props = {\n className?: string;\n children: any;\n sender: ConversationMessageSender;\n timestamp: number | null;\n};\n\nconst AgentMessage: React.FC<Props> = ({ className, children, sender, timestamp }) => {\n const { avatar, name } = sender;\n const { avatarSize } = useProperties<ConversationComponentProperties>();\n\n return (\n <StyledAgentMessage\n hasAvatar={!!avatar}\n className={appendClassNames(className, 'humany-conversation-agent-message')}\n >\n {avatar && (\n <Avatar avatarSize={avatarSize}>\n {typeof avatar === 'string' ? (\n <img src={avatar} />\n ) : (\n <SymbolBadge symbol={avatar} />\n )}\n </Avatar>\n )}\n {children}\n <Timestamp name={name} timestamp={timestamp}></Timestamp>\n </StyledAgentMessage>\n );\n};\n\nexport const StyledAgentMessage = styled.div<any>`\n display: grid;\n margin-right: 10%;\n width: 90%;\n ${(p) =>\n p.hasAvatar\n ? css`\n grid-template-columns: auto 1fr;\n grid-template-rows: 1fr auto;\n grid-template-areas:\n 'avatar content'\n '. info';\n `\n : css`\n grid-template-columns: 1fr;\n grid-template-rows: 1fr auto;\n grid-template-areas:\n 'content'\n 'info';\n `};\n`;\n\nexport default AgentMessage;\n","import { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { forwardRef } from 'react';\nimport styled from 'styled-components';\nimport Timestamp from './timestamp';\n\nexport type Props = {\n className?: string;\n timestamp: number;\n discrete?: boolean;\n fullWidth?: boolean;\n children: any;\n};\n\nconst SystemMessage = forwardRef<HTMLDivElement, Props>(\n ({ className, children, timestamp, discrete, fullWidth }, ref) => {\n return (\n <StyledSystemMessage\n ref={ref}\n className={appendClassNames(className, 'humany-conversation-system-message')}\n fullWidth={fullWidth}\n >\n {discrete ? (\n <Discrete className=\"humany-conversation-discrete-message\">\n {children}\n <Timestamp timestamp={timestamp}></Timestamp>\n </Discrete>\n ) : (\n <>\n {children}\n <Timestamp timestamp={timestamp}></Timestamp>\n </>\n )}\n </StyledSystemMessage>\n );\n }\n);\n\nexport const StyledSystemMessage = styled.div<any>`\n ${(p) => p.fullWidth && 'width: 100%'};\n padding: 0 ${(p) => p.theme.sizes?.large};\n overflow: auto;\n`;\n\nexport const Discrete = styled.div`\n text-align: center;\n word-wrap: break-word;\n font-size: ${(p) => p.theme.fonts?.normal};\n color: ${(p) => p.theme.colors?.text};\n > p {\n margin: 0;\n }\n`;\n\nexport default SystemMessage;\n","import { useProperties } from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { ConversationComponentProperties } from '../../plugin';\nimport Timestamp from './timestamp';\n\nexport type Props = {\n className?: string;\n timestamp: number;\n children: any;\n};\n\nconst UserMessage: React.FC<Props> = ({ className, children, timestamp }) => {\n const { userLabel = '' } = useProperties<ConversationComponentProperties>();\n return (\n <StyledUserMessage\n className={appendClassNames(className, 'humany-conversation-user-message')}\n >\n {children}\n <Timestamp name={userLabel} timestamp={timestamp}></Timestamp>\n </StyledUserMessage>\n );\n};\n\nconst StyledUserMessage = styled.div`\n margin-left: 10%;\n width: 90%;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n`;\n\nexport default UserMessage;\n","export const mapActions = (actions: any) =>\n Array.isArray(actions)\n ? actions\n : Object.keys(actions).map((i) => {\n return {\n label: actions[i],\n actionKey: i,\n };\n });\n","import {\n borderTabStyle,\n Button,\n buttonCss,\n DispatchAction,\n ItemList,\n itemList,\n SymbolBadge,\n} from '@telia-ace/widget-ui';\nimport React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { ButtonListProperties } from '../../../../types';\nimport { mapActions } from '../../../../utils/map-actions';\nimport { messageContentPadding } from '../styles';\n\ntype Props = { dispatch: DispatchAction } & ButtonListProperties;\n\nexport const ButtonList: FC<Props> = ({ header, actions, dispatch }) => {\n return (\n <StyledButtonList\n header={header}\n items={mapActions(actions)}\n renderItem={(item: any) => {\n return (\n <li key={item.actionKey}>\n <StyledButtonListButton\n onClick={() => {\n dispatch('action', item);\n }}\n aria-label={item.label}\n title={item.label}\n >\n <SymbolBadge symbol={item.symbol} />\n {item.label}\n </StyledButtonListButton>\n </li>\n );\n }}\n />\n );\n};\n\nconst StyledButtonList = styled(ItemList)`\n ${itemList}\n > ul {\n display: flex;\n flex-wrap: wrap;\n gap: ${(p) => p.theme.sizes?.normal};\n > li {\n margin: 0;\n }\n }\n ${messageContentPadding}\n`;\n\nconst StyledButtonListButton = styled(Button)`\n ${buttonCss};\n\n display: block;\n padding: ${(p) => p.theme.sizes?.normal};\n background-color: ${(p) => p.theme.colors?.primary};\n width: 100%;\n color: #ffffff;\n overflow: hidden;\n text-overflow: ellipsis;\n &:focus-visible {\n ${borderTabStyle}\n background-color: transparent;\n }\n\n i,\n svg {\n margin-right: ${(p) => p.theme.sizes?.small};\n }\n`;\n","import { useComponent } from '@telia-ace/widget-ui';\nimport React, { Suspense } from 'react';\n\ntype Props = {\n type: string;\n content?: { [key: string]: any };\n};\nexport const Custom: React.FC<Props> = ({ type, content = {} }) => {\n const Component = useComponent(type);\n\n if (!Component || !type) {\n return null;\n }\n return (\n <Suspense fallback={null}>\n <Component {...content} />\n </Suspense>\n );\n};\n","import { borderTabStyle, genericHtml, Html as UiHtml } from '@telia-ace/widget-ui';\nimport React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { HtmlProperties } from '../../../../types';\nimport { messageContentPadding } from '../styles';\n\ntype Props = HtmlProperties;\n\nexport const Html: FC<Props> = ({ body }) => {\n return <StyledHtml html={body} />;\n};\n\nconst StyledHtml = styled(UiHtml)<any>`\n ${genericHtml}\n color: inherit;\n white-space: pre-wrap;\n ${messageContentPadding}\n a {\n color: ${(p) => p.theme.colors.link};\n &:focus-visible {\n ${borderTabStyle};\n }\n }\n`;\n","import {\n borderTabStyle,\n Button,\n DispatchAction,\n headingElement,\n itemList,\n ItemList,\n SymbolBadge,\n} from '@telia-ace/widget-ui';\nimport React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\nimport { LinkListProperties } from '../../../../types';\nimport { mapActions } from '../../../../utils/map-actions';\nimport { messageContentPadding } from '../styles';\n\ntype Props = { dispatch: DispatchAction } & LinkListProperties;\n\nexport const LinkList: FC<Props> = ({ header, actions, dispatch }) => {\n return (\n <StyledLinkList\n header={header}\n items={mapActions(actions)}\n renderItem={(item: any) => {\n return (\n <li key={item.actionKey}>\n <StyledLinkButton\n help={item.actionKey === 'help'}\n onClick={() => {\n dispatch('action', item);\n }}\n aria-label={item.label}\n title={item.label}\n >\n {item.label}\n {item.actionKey === 'help' && (\n <SymbolBadge\n size={14}\n symbol={{\n type: 'Svg',\n content: 'caret-down',\n }}\n />\n )}\n </StyledLinkButton>\n </li>\n );\n }}\n />\n );\n};\nconst StyledLinkList = styled(ItemList)`\n ${itemList}\n ${messageContentPadding}\n\n ${headingElement(\n 'h1',\n css`\n white-space: normal;\n `\n )}\n\n > ul {\n display: flex;\n flex-direction: column;\n gap: ${(p) => p.theme.sizes?.normal};\n > li {\n margin: 0;\n }\n }\n`;\n\nconst StyledLinkButton = styled(Button)<{ help: boolean }>`\n display: block;\n text-align: left;\n font-weight: 300;\n color: ${(p) => p.theme.colors?.primary};\n max-width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n\n ${(p) =>\n p.help &&\n css`\n color: ${p.theme.colors?.text};\n text-decoration: underline;\n\n i,\n svg {\n margin-left: ${p.theme.sizes?.small};\n }\n `}\n\n &:focus-visible {\n ${borderTabStyle}\n span {\n color: ${(p) => p.theme.colors?.primary};\n text-decoration: underline;\n }\n }\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nexport const Separator: FC = () => {\n return <StyledSeparator />;\n};\n\nconst StyledSeparator = styled.div`\n ${(p) => p.theme.border && `border-bottom: ${p.theme.border};`}\n width: 100%;\n`;\n","import { Typography } from '@telia-ace/widget-ui';\nimport React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { messageContentPadding } from '../styles';\n\ntype Props = { text: string };\n\nexport const Text: FC<Props> = ({ text }) => {\n return <StyledTypography variant=\"span\">{text}</StyledTypography>;\n};\n\nconst StyledTypography = styled(Typography)`\n ${messageContentPadding}\n`;\n","import {\n borderTabStyle,\n Button,\n buttonCss,\n DispatchAction,\n ItemList,\n itemList,\n SymbolBadge,\n} from '@telia-ace/widget-ui';\nimport React, { FC, useMemo } from 'react';\nimport styled from 'styled-components';\nimport { VideoRequestProperties } from '../../../../types';\nimport { messageContentPadding } from '../styles';\n\ntype Props = { dispatch: DispatchAction } & VideoRequestProperties;\n\nexport const VideoRequest: FC<Props> = ({\n header = 'Video call',\n acceptLabel = 'Accept',\n declineLabel = 'Decline',\n dispatch,\n}) => {\n const actions = useMemo(() => {\n return [\n {\n label: acceptLabel,\n actionKey: 'accept-video-call',\n symbol: {\n type: 'Svg',\n content: 'video',\n },\n },\n {\n label: declineLabel,\n actionKey: 'decline-video-call',\n symbol: {\n type: 'Svg',\n content: 'close',\n },\n },\n ];\n }, [acceptLabel, declineLabel]);\n return (\n <StyledItemList\n header={header}\n items={actions}\n renderItem={(item: any) => {\n const bgColor = item.actionKey === 'accept-video-call' ? '#70c48e' : '#da5c85';\n return (\n <li key={item.actionKey}>\n <StyledButton\n onClick={() => {\n dispatch('action', item);\n }}\n aria-label={item.label}\n title={item.label}\n bgColor={bgColor}\n >\n <SymbolBadge symbol={item.symbol} size={25} />\n </StyledButton>\n </li>\n );\n }}\n />\n );\n};\n\nconst StyledItemList = styled(ItemList)`\n ${itemList}\n > ul {\n display: flex;\n flex-wrap: wrap;\n gap: ${(p) => p.theme.sizes?.normal};\n > li {\n margin: 0;\n }\n }\n ${messageContentPadding}\n`;\n\nconst StyledButton = styled(Button)<{ bgColor: string }>`\n ${buttonCss};\n\n background-color: ${(p) => p.bgColor};\n display: flex;\n justify-content: center;\n align-items: center;\n color: #ffffff;\n width: 46px;\n height: 46px;\n border-radius: 100%;\n\n &:focus-visible {\n ${borderTabStyle}\n background-color: transparent;\n\n i,\n svg {\n color: ${(p) => p.theme.colors?.primary};\n\n path {\n stroke: ${(p) => p.theme.colors?.primary};\n }\n }\n }\n\n i,\n svg {\n color: #fff;\n\n path {\n stroke: #fff;\n }\n }\n`;\n","import React, { FC } from 'react';\n\nimport { DispatchAction, List, list } from '@telia-ace/widget-ui';\nimport styled from 'styled-components';\nimport { ConversationMessageListItemType, ConverstationMessageItem } from '../../../../types';\nimport { ButtonList } from '../message-list-items/button-list';\nimport { Custom } from '../message-list-items/custom';\nimport { Html } from '../message-list-items/html';\nimport { LinkList } from '../message-list-items/link-list';\nimport { Separator } from '../message-list-items/separator';\nimport { Text } from '../message-list-items/text';\nimport { VideoRequest } from '../message-list-items/video-request';\n\ntype Props = {\n items: ConverstationMessageItem<any>[];\n dispatch: DispatchAction;\n};\n\nconst mapItem = ([type, content]: ConverstationMessageItem<any>) => {\n return { type, content };\n};\n\nexport const MessageList: FC<Props> = ({ items, dispatch }) => {\n return (\n <StyledList\n items={items.map(mapItem)}\n renderLi\n renderItem={(item: any) => {\n switch (item.type) {\n case ConversationMessageListItemType.Text: {\n return <Text text={item.content} />;\n }\n case ConversationMessageListItemType.HTML: {\n return <Html {...item.content} />;\n }\n case ConversationMessageListItemType.Separator: {\n return <Separator {...item.content} />;\n }\n case ConversationMessageListItemType.LinkList: {\n return <LinkList {...item.content} dispatch={dispatch} />;\n }\n case ConversationMessageListItemType.ButtonList: {\n return <ButtonList {...item.content} dispatch={dispatch} />;\n }\n case ConversationMessageListItemType.VideoRequest: {\n return <VideoRequest {...item.content} dispatch={dispatch} />;\n }\n default: {\n return <Custom type={item.type} content={item.content} />;\n }\n }\n }}\n />\n );\n};\n\nconst StyledList = styled(List)<any>`\n ${list}\n\n > li {\n margin: 0;\n }\n`;\n","import { Html, useDispatch } from '@telia-ace/widget-ui';\nimport React, { forwardRef, useCallback } from 'react';\nimport { ConversationMessageType } from '../../../conversation-controller';\nimport { ConversationMessageContent } from '../../../types';\nimport { BundledConversationMessage } from '../plugin';\nimport { AgentMessage, SystemMessage, UserMessage } from './message-types';\nimport { MessageList } from './message-types/message-list';\nimport {\n ContentBundle,\n MessageContainer,\n MessageContent,\n MessageContentPart,\n MessageTitle,\n Stacked,\n StyledActionButton,\n StyledActionList,\n StyledForm,\n StyledHtml,\n} from './styles';\n\ntype Props = {\n className?: string;\n} & BundledConversationMessage;\n\nexport const ConversationMessage = forwardRef<HTMLDivElement, Props>(\n ({ className, timestamp, sender, type, content }, ref) => {\n const getMessageStackPosition = useCallback(\n (index: number): Stacked => {\n let messageOrder: Stacked = 'first';\n if (content.length > 1) {\n messageOrder =\n index === 0 ? 'first' : index + 1 === content.length ? 'last' : 'middle';\n }\n return messageOrder;\n },\n [content]\n );\n\n const createSystemMessage = () => {\n return (\n <>\n {content.map((item) => {\n const { key, body, title, form, actions } = item;\n const discrete = !!body && !title && !form && !actions;\n return (\n <SystemMessage\n className={className}\n key={key}\n discrete={discrete}\n ref={ref}\n timestamp={timestamp}\n fullWidth={!!form || !!actions}\n >\n {discrete && body ? (\n <Html html={body} />\n ) : (\n <Message isSystem content={item} />\n )}\n </SystemMessage>\n );\n })}\n </>\n );\n };\n\n const createAgentMessage = () => {\n return (\n <AgentMessage sender={sender} timestamp={timestamp} className={className}>\n <ContentBundle>\n {content.map((item, index) => {\n return (\n <MessageContainer left key={item.key} ref={ref}>\n <Message\n content={item}\n stacked={getMessageStackPosition(index)}\n />\n </MessageContainer>\n );\n })}\n </ContentBundle>\n </AgentMessage>\n );\n };\n\n const createUserMessage = () => {\n return (\n <UserMessage timestamp={timestamp} className={className}>\n <ContentBundle>\n {content.map((item, index) => {\n return (\n <MessageContainer right key={item.key} ref={ref}>\n <Message\n isUser\n content={item}\n stacked={getMessageStackPosition(index)}\n />\n </MessageContainer>\n );\n })}\n </ContentBundle>\n </UserMessage>\n );\n };\n\n switch (type) {\n case ConversationMessageType.System:\n return createSystemMessage();\n case ConversationMessageType.Agent:\n return createAgentMessage();\n case ConversationMessageType.User:\n return createUserMessage();\n default:\n return null;\n }\n }\n);\n\ntype MessageContentProps = {\n className?: string;\n content: ConversationMessageContent;\n isUser?: boolean;\n isSystem?: boolean;\n stacked?: Stacked;\n CustomComponent?: any;\n};\n\nconst Message: React.FC<MessageContentProps> = ({ content, isUser, isSystem, stacked }) => {\n const dispatch = useDispatch();\n const { title, body, actions, form, items } = content;\n\n // Using print(string) or print(object) is considered legacy in favor of print(array).\n const isLegacyMessage = !items;\n if (isLegacyMessage) {\n return (\n <MessageContent\n padded={!isSystem}\n user={!!isUser}\n stacked={stacked}\n fullWidth={!!form || !!actions}\n >\n {title && (\n <MessageContentPart>\n <MessageTitle variant=\"h2\">{title}</MessageTitle>\n </MessageContentPart>\n )}\n {body && (\n <MessageContentPart>\n <StyledHtml html={body} />\n </MessageContentPart>\n )}\n {form && (\n <MessageContentPart>\n <StyledForm\n {...form}\n onChange={(key: string, data: any) => {\n dispatch('form', {\n data,\n formKey: form.schema.id,\n actionKey: key,\n });\n }}\n />\n </MessageContentPart>\n )}\n {actions && (\n <MessageContentPart>\n <StyledActionList\n items={Object.keys(actions).map((i: any) => {\n return { label: actions[i], actionKey: i };\n })}\n renderItem={(item: any) => {\n return (\n <li key={item.actionKey}>\n <StyledActionButton\n onClick={() => {\n dispatch('action', item.actionKey);\n }}\n >\n {item.label}\n </StyledActionButton>\n </li>\n );\n }}\n />\n </MessageContentPart>\n )}\n </MessageContent>\n );\n }\n\n return (\n <MessageContent user={!!isUser} stacked={stacked}>\n <MessageList items={items} dispatch={dispatch} />\n </MessageContent>\n );\n};\n","import { borderTabStyle, headingElement, useProperties, useScroll } from '@telia-ace/widget-ui';\nimport React, { useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport { ConversationMessageSender } from '../../../types';\nimport { BundledConversationMessage, ConversationComponentProperties } from '../plugin';\nimport ConversationInput from './input';\nimport ConversationLoader from './loader';\nimport { ConversationMessage } from './message';\nimport { AgentMessage } from './message-types';\n\nexport const ConversationContent: React.FC = () => {\n const setLastEntryRef = useCallback((node) => {\n if (node) {\n setTimeout(() => {\n node.scrollIntoView({\n block: 'start',\n behavior: 'smooth',\n });\n }, 250);\n }\n }, []);\n\n const [scrollableCss, viewElem] = useScroll(true);\n const {\n messages,\n loading,\n typingActors = [],\n } = useProperties<ConversationComponentProperties>();\n\n const renderTypingActors = () => {\n if (typingActors && typingActors.length) {\n return typingActors.map((actor: ConversationMessageSender, index) => {\n return (\n <MessageEntry id={`typing_${actor.name}`} key={`typing_${actor.name}`}>\n <AgentMessage timestamp={Date.now()} sender={actor}>\n <ConversationLoader boxed ref={setLastEntryRef}></ConversationLoader>\n </AgentMessage>\n </MessageEntry>\n );\n });\n }\n return null;\n };\n\n return (\n <>\n <Scrollable tabIndex={0} scrollableCss={scrollableCss} ref={viewElem}>\n {messages && messages.length\n ? messages.map((message: BundledConversationMessage, index) => {\n const { type, timestamp, sender, content } = message;\n return (\n <MessageEntry\n className={'humany-conversation-entry'}\n tabIndex={-1}\n key={`${type}_${sender?.name}_${timestamp}_${content[0].key}`}\n >\n <ConversationMessage {...message} ref={setLastEntryRef} />\n </MessageEntry>\n );\n })\n : null}\n {renderTypingActors()}\n {loading && (\n <MessageEntry>\n <ConversationLoader ref={setLastEntryRef} />\n </MessageEntry>\n )}\n </Scrollable>\n <ConversationInput />\n </>\n );\n};\n\nconst Scrollable = styled.div<{ scrolling: boolean } & any>`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n flex: 0 1 100%;\n padding: 0 ${(p) => p.theme.sizes?.medium};\n ${(p) => !!p.scrollableCss && p.scrollableCss};\n &:focus-visible {\n ${borderTabStyle};\n }\n`;\n\nconst MessageEntry = styled.div`\n margin: 0;\n margin-bottom: ${(p) => p.theme.sizes?.medium};\n\n &:first-of-type {\n margin-top: ${(p) => p.theme.sizes?.medium};\n }\n\n &:last-of-type {\n padding-bottom: ${(p) => p.theme.sizes?.medium};\n }\n\n & span,\n p,\n a,\n div {\n font-weight: 300;\n }\n\n & b,\n h1 {\n font-weight: normal;\n }\n\n ${headingElement(\n 'h1',\n css`\n font-weight: normal;\n `\n )}\n`;\n","import {\n borderTabStyle,\n Button,\n DispatchAction,\n SymbolBadge,\n Typography,\n WidgetOverlayOutlet,\n} from '@telia-ace/widget-ui';\nimport React, { FC, useEffect, useRef } from 'react';\nimport styled from 'styled-components';\nimport { ConversationContent } from './content';\n\ntype OverlayOutletProps = {\n dispatch: DispatchAction;\n};\n\nexport const OverlayOutlet: FC<OverlayOutletProps> = ({ dispatch }) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (wrapperRef.current && wrapperRef.current.parentNode) {\n dispatch('overlay-mounted', wrapperRef.current);\n }\n }, [wrapperRef]);\n\n return (\n <WidgetOverlayOutlet\n portalId=\"humany-conversation-overlay-portal\"\n className=\"humany-conversation-overlay-outlet\"\n ref={wrapperRef}\n />\n );\n};\n\ntype ConversationOverlayProps = {\n dispatch: DispatchAction;\n header?: string;\n buttonLabel?: string;\n};\n\nexport const ConversationOverlayOutlet: FC<ConversationOverlayProps> = ({\n dispatch,\n header,\n buttonLabel,\n}) => {\n return (\n <StyledWidgetOverlayOutlet\n portalId=\"humany-conversation-portal\"\n className=\"humany-conversation-outlet\"\n >\n <ConversationOverlayHead className=\"humany-conversation-outlet-head\">\n <ConversationOverlayHeadButton\n className=\"humany-conversation-outlet-head-button\"\n aria-label={buttonLabel}\n title={buttonLabel}\n onClick={() => dispatch('hide-overlay-conversation')}\n >\n <SymbolBadge\n symbol={{\n type: 'Svg',\n content: 'caret-down',\n }}\n size={20}\n />\n </ConversationOverlayHeadButton>\n {header && (\n <ConversationOverlayHeader\n className=\"humany-conversation-outlet-header\"\n variant=\"h1\"\n >\n {header}\n </ConversationOverlayHeader>\n )}\n </ConversationOverlayHead>\n <ConversationContent />\n </StyledWidgetOverlayOutlet>\n );\n};\n\nconst StyledWidgetOverlayOutlet = styled(WidgetOverlayOutlet)`\n z-index: 11;\n top: auto;\n height: 65%;\n background-color: #ffffff;\n display: flex;\n flex-direction: column;\n border-top-right-radius: ${(p) => p.theme.sizes?.large};\n border-top-left-radius: ${(p) => p.theme.sizes?.large};\n`;\n\nconst ConversationOverlayHead = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(p) => p.theme.sizes?.normal};\n padding: ${(p) => p.theme.sizes?.normal};\n ${(p) => p.theme.border && `border-bottom: ${p.theme.border};`}\n`;\n\nconst ConversationOverlayHeader = styled(Typography)`\n font-size: ${(p) => p.theme.fonts?.medium};\n color: ${(p) => p.theme.colors?.text};\n margin: 0;\n`;\n\nconst ConversationOverlayHeadButton = styled(Button)`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${(p) => p.theme.sizes?.small} ${(p) => p.theme.sizes?.medium};\n ${(p) => p.theme.borderRadius && `border-radius: ${p.theme.borderRadius};`}\n\n &:focus-visible {\n ${borderTabStyle};\n }\n\n svg line {\n stroke: ${(p) => p.theme.colors?.text};\n }\n`;\n","import { useDispatch, useProperties } from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { ConversationComponentProperties } from './plugin';\nimport { ConversationContent } from './ui/content';\nimport { ConversationOverlayOutlet, OverlayOutlet } from './ui/overlay-outlets';\n\ntype Props = {\n className: string;\n};\n\nconst Conversation: React.FC<Props> = ({ className, ...other }) => {\n const { overlay, overlayConversationHeader, overlayConversationCloseLabel } =\n useProperties<ConversationComponentProperties>();\n const dispatch = useDispatch();\n return (\n <>\n <Wrapper\n {...other}\n className={appendClassNames(className, 'humany-conversation-component')}\n >\n <ConversationContent />\n </Wrapper>\n {overlay && (\n <>\n <OverlayOutlet dispatch={dispatch} />\n {overlay.conversation && (\n <ConversationOverlayOutlet\n dispatch={dispatch}\n header={overlayConversationHeader}\n buttonLabel={overlayConversationCloseLabel}\n />\n )}\n </>\n )}\n </>\n );\n};\n\nconst Wrapper = styled.div`\n position: absolute;\n right: 0;\n left: 0;\n bottom: 0;\n top: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`;\n\nexport default Conversation;\n"],"names":["ConversationInput","className","inputText","setInputText","useState","inputFocus","setInputFocus","calculatedLineHeight","setCalculatedLineHeight","textareaMaxHeight","setTextareaMaxHeight","isTabbing","useIsTabbing","dispatch","useDispatch","inputPlaceholder","inputHidden","inputDisabled","sendButtonLabel","multiline","secondaryAction","useProperties","scrollableCss","inputRef","useScroll","useEffect","lineHeight","maxHeight","lineHeightNumber","calcLH","maxHeightNumber","submit","e","onChange","onSecondaryActionButtonClick","__spreadValues","calculateHeight","value","scrollHeight","areaHeight","React","Wrapper","appendClassNames","SecondaryActionButton","SymbolBadge","StyledTextArea","StyledInput","StyledButton","SendSymbol","styled","Input","p","_a","Button","borderTabStyle","css","_b","hasContent","other","__objRest","Avatar","LoaderAnimation","keyframes","Loader","ContentBundle","MessageTitle","Typography","MessageContainer","MessageContent","nonUserMessageStyling","userMessageStyling","stacked","theme","colors","MessageContentPart","messageContentPadding","StyledForm","FormComponent","invertedHoverButton","StyledHtml","Html","StyledActionList","List","StyledActionButton","buttonCss","ConversationLoader","forwardRef","boxed","agentData","ref","StyledTimestamp","getTimestamp","raw","Timestamp","name","timestamp","output","AgentMessage","children","sender","avatar","avatarSize","StyledAgentMessage","SystemMessage","discrete","fullWidth","StyledSystemMessage","Discrete","UserMessage","userLabel","StyledUserMessage","mapActions","actions","i","ButtonList","header","StyledButtonList","item","StyledButtonListButton","ItemList","itemList","Custom","type","content","Component","useComponent","Suspense","body","UiHtml","genericHtml","LinkList","StyledLinkList","StyledLinkButton","headingElement","Separator","StyledSeparator","Text","text","StyledTypography","VideoRequest","acceptLabel","declineLabel","useMemo","StyledItemList","bgColor","mapItem","MessageList","items","StyledList","ConversationMessageListItemType","__spreadProps","list","ConversationMessage","getMessageStackPosition","useCallback","index","messageOrder","createSystemMessage","key","title","form","Message","createAgentMessage","createUserMessage","ConversationMessageType","isUser","isSystem","data","ConversationContent","setLastEntryRef","node","viewElem","messages","loading","typingActors","renderTypingActors","actor","MessageEntry","Scrollable","message","OverlayOutlet","wrapperRef","useRef","WidgetOverlayOutlet","ConversationOverlayOutlet","buttonLabel","StyledWidgetOverlayOutlet","ConversationOverlayHead","ConversationOverlayHeadButton","ConversationOverlayHeader","Conversation","overlay","overlayConversationHeader","overlayConversationCloseLabel"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ConversationEndedBehavior, ConversationPlatform, UnregisterControllerDelegate } from './conversation-platform';
|
|
2
|
-
export { ConversationComponent } from './components/conversation/plugin';
|
|
3
|
-
export { ConversationReturnButtonComponent } from './components/return-button/plugin';
|
|
4
|
-
export { ConversationController, ConversationEntry, ConversationMessageType, } from './conversation-controller';
|
|
5
|
-
export type { ConversationMessage } from './conversation-controller';
|
|
6
|
-
export { ConversationMessageListItemType } from './types';
|
|
7
|
-
export type { ConversationMessageContent, ConversationMessageSender, ConverstationMessageItem, } from './types';
|
|
8
|
-
export { registerCustomMessageComponent } from './utils/custom-message';
|
|
9
|
-
export { ConversationPlatform, ConversationEndedBehavior };
|
|
10
|
-
export type { UnregisterControllerDelegate };
|
|
1
|
+
import { ConversationEndedBehavior, ConversationPlatform, UnregisterControllerDelegate } from './conversation-platform';
|
|
2
|
+
export { ConversationComponent } from './components/conversation/plugin';
|
|
3
|
+
export { ConversationReturnButtonComponent } from './components/return-button/plugin';
|
|
4
|
+
export { ConversationController, ConversationEntry, ConversationMessageType, } from './conversation-controller';
|
|
5
|
+
export type { ConversationMessage } from './conversation-controller';
|
|
6
|
+
export { ConversationMessageListItemType } from './types';
|
|
7
|
+
export type { ConversationMessageContent, ConversationMessageSender, ConverstationMessageItem, } from './types';
|
|
8
|
+
export { registerCustomMessageComponent } from './utils/custom-message';
|
|
9
|
+
export { ConversationPlatform, ConversationEndedBehavior };
|
|
10
|
+
export type { UnregisterControllerDelegate };
|