@elliemae/ds-chat 1.59.7 → 1.61.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.
@@ -150,9 +150,9 @@ var ChatComposer = function ChatComposer(props) {
150
150
  }, /*#__PURE__*/React__default['default'].createElement(parts_chatComposer_styled.StyledCounterArea, {
151
151
  hasError: hasError,
152
152
  "data-testid": "composer-counter-area"
153
- }, inputMaxLength && hasError ? /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(parts_chatComposer_styled.StyledCounterErrorA11y, {
153
+ }, inputMaxLength && hasError ? /*#__PURE__*/React__default['default'].createElement(parts_chatComposer_styled.StyledCounterErrorA11y, {
154
154
  role: "alert"
155
- }, maxLengthMessage || "You have exceeded the character limit by ".concat(inputLength - inputMaxLength)), maxLengthMessage || "Please limit to less than ".concat(inputMaxLength, " characters. ")) : '', inputMaxLength ? " ".concat(inputLength, " / ").concat(inputMaxLength) : ''), /*#__PURE__*/React__default['default'].createElement(dsGrid.Grid, null)));
155
+ }, maxLengthMessage || "You have entered ".concat(inputLength, " characters and have exceeded the limit by ").concat(inputLength - inputMaxLength, ". Please limit to less than ").concat(inputMaxLength, " characters. ")) : '', inputMaxLength ? " ".concat(inputLength, " / ").concat(inputMaxLength) : ''), /*#__PURE__*/React__default['default'].createElement(dsGrid.Grid, null)));
156
156
  };
157
157
 
158
158
  ChatComposer.propTypes = parts_chatComposer_props.composerProps;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatContainerComposer.js","sources":["../../../../src/parts/chat-composer/ChatContainerComposer.tsx"],"sourcesContent":["/* eslint-disable max-lines */\nimport React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { describe } from 'react-desc';\nimport { PaperAirplane } from '@elliemae/ds-icons';\nimport {\n StyledChatContainerContentComposer,\n StyledComposerInput,\n StyledComposerButton,\n StyledCounterArea,\n StyledCounterErrorA11y,\n} from './styled';\nimport { useValidateProps } from './config/useValidateProps';\n\nimport { defaultComposerPros, composerProps, ChatComposerProps } from './props';\n\nconst ChatComposer = (props: ChatComposerProps): JSX.Element => {\n useValidateProps(props, ChatComposerWithSchema.toJSON());\n\n const {\n inputValue,\n onChange,\n onResize,\n onSend,\n onFocus,\n onBlur,\n onKeyDown,\n maxHeight = 300,\n placeholder,\n inputMaxLength,\n maxLengthMessage,\n buttonDisabled,\n dataTestid,\n actionRef,\n } = props;\n\n const input = React.useRef<HTMLTextAreaElement>();\n const inputSize = React.useRef<HTMLTextAreaElement>();\n const inputSend = React.useRef<HTMLButtonElement>();\n const [height, setHeight] = React.useState(32);\n const internalMaxHeight = React.useMemo(() => maxHeight - 24, [maxHeight]);\n const [showScroll, setShowScroll] = React.useState(true);\n\n React.useEffect(() => {\n const newHeight =\n inputSize.current?.scrollHeight > internalMaxHeight ? internalMaxHeight : inputSize.current?.scrollHeight;\n onResize(newHeight);\n setHeight(newHeight);\n setShowScroll(inputSize.current?.scrollHeight - inputSize.current?.clientHeight > 5);\n }, [inputValue, internalMaxHeight, onResize]);\n\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusToComposer = () => {\n input.current.focus();\n };\n actionRef.current.focusToSend = () => {\n inputSend.current.focus();\n };\n }\n }, [actionRef]);\n\n const handleChange = React.useCallback(\n (e) => {\n onChange(e.target.value);\n },\n [onChange],\n );\n const heightProps = { height, overflow: showScroll ? 'auto' : 'hidden' };\n\n const inputLength = String(inputValue || '').length;\n const hasError = React.useMemo(() => inputLength > inputMaxLength, [inputLength, inputMaxLength]);\n\n return (\n <StyledChatContainerContentComposer rows={['auto', '15px']} maxHeight={`${maxHeight}px`} data-testid={dataTestid}>\n <Grid cols={['1fr', '24px']} justifyContent=\"center\" alignItems=\"flex-end\" gutter=\"xxs\">\n <StyledComposerInput\n ref={input}\n onChange={handleChange}\n style={{ ...heightProps }}\n value={inputValue}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n aria-label=\"Message to send\"\n data-testid=\"chat-composer-textarea\"\n />\n\n <Grid height=\"32px\" alignItems=\"center\">\n <StyledComposerButton\n buttonType=\"text\"\n icon={<PaperAirplane width={18} height={18} />}\n onClick={onSend}\n size=\"s\"\n disabled={!inputValue || buttonDisabled || hasError}\n data-testid=\"chat-composer-send-button\"\n aria-label=\"Send\"\n innerRef={inputSend}\n />\n </Grid>\n </Grid>\n <StyledComposerInput\n ref={inputSize}\n style={{\n height: 32,\n visibility: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: input.current?.clientWidth,\n }}\n onChange={handleChange}\n value={inputValue}\n // maxLength={inputMaxLength}\n />\n <Grid cols={['1fr', '24px']} justifyContent=\"flex-end\" alignItems=\"center\" gutter=\"xxs\" pb=\"xxs\">\n <StyledCounterArea hasError={hasError} data-testid=\"composer-counter-area\">\n {inputMaxLength && hasError ? (\n <>\n <StyledCounterErrorA11y role=\"alert\">\n {maxLengthMessage || `You have exceeded the character limit by ${inputLength - inputMaxLength}`}\n </StyledCounterErrorA11y>\n {maxLengthMessage || `Please limit to less than ${inputMaxLength} characters. `}\n </>\n ) : (\n ''\n )}\n {inputMaxLength ? ` ${inputLength} / ${inputMaxLength}` : ''}\n </StyledCounterArea>\n <Grid />\n </Grid>\n </StyledChatContainerContentComposer>\n );\n};\n\nChatComposer.propTypes = composerProps;\nChatComposer.defaultProps = defaultComposerPros;\nconst ChatComposerWithSchema = describe(ChatComposer);\nChatComposerWithSchema.propTypes = composerProps;\n\nexport { ChatComposer, ChatComposerWithSchema };\n"],"names":["ChatComposer","props","useValidateProps","ChatComposerWithSchema","toJSON","inputValue","onChange","onResize","onSend","onFocus","onBlur","onKeyDown","maxHeight","placeholder","inputMaxLength","maxLengthMessage","buttonDisabled","dataTestid","actionRef","input","React","useRef","inputSize","inputSend","useState","height","setHeight","internalMaxHeight","useMemo","showScroll","setShowScroll","useEffect","newHeight","current","scrollHeight","clientHeight","focusToComposer","focus","focusToSend","handleChange","useCallback","e","target","value","heightProps","overflow","inputLength","String","length","hasError","StyledChatContainerContentComposer","Grid","StyledComposerInput","StyledComposerButton","PaperAirplane","visibility","pointerEvents","position","top","width","clientWidth","StyledCounterArea","StyledCounterErrorA11y","propTypes","composerProps","defaultProps","defaultComposerPros","describe"],"mappings":"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"}
1
+ {"version":3,"file":"ChatContainerComposer.js","sources":["../../../../src/parts/chat-composer/ChatContainerComposer.tsx"],"sourcesContent":["/* eslint-disable max-lines */\nimport React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { describe } from 'react-desc';\nimport { PaperAirplane } from '@elliemae/ds-icons';\nimport {\n StyledChatContainerContentComposer,\n StyledComposerInput,\n StyledComposerButton,\n StyledCounterArea,\n StyledCounterErrorA11y,\n} from './styled';\nimport { useValidateProps } from './config/useValidateProps';\n\nimport { defaultComposerPros, composerProps, ChatComposerProps } from './props';\n\nconst ChatComposer = (props: ChatComposerProps): JSX.Element => {\n useValidateProps(props, ChatComposerWithSchema.toJSON());\n\n const {\n inputValue,\n onChange,\n onResize,\n onSend,\n onFocus,\n onBlur,\n onKeyDown,\n maxHeight = 300,\n placeholder,\n inputMaxLength,\n maxLengthMessage,\n buttonDisabled,\n dataTestid,\n actionRef,\n } = props;\n\n const input = React.useRef<HTMLTextAreaElement>();\n const inputSize = React.useRef<HTMLTextAreaElement>();\n const inputSend = React.useRef<HTMLButtonElement>();\n const [height, setHeight] = React.useState(32);\n const internalMaxHeight = React.useMemo(() => maxHeight - 24, [maxHeight]);\n const [showScroll, setShowScroll] = React.useState(true);\n\n React.useEffect(() => {\n const newHeight =\n inputSize.current?.scrollHeight > internalMaxHeight ? internalMaxHeight : inputSize.current?.scrollHeight;\n onResize(newHeight);\n setHeight(newHeight);\n setShowScroll(inputSize.current?.scrollHeight - inputSize.current?.clientHeight > 5);\n }, [inputValue, internalMaxHeight, onResize]);\n\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusToComposer = () => {\n input.current.focus();\n };\n actionRef.current.focusToSend = () => {\n inputSend.current.focus();\n };\n }\n }, [actionRef]);\n\n const handleChange = React.useCallback(\n (e) => {\n onChange(e.target.value);\n },\n [onChange],\n );\n const heightProps = { height, overflow: showScroll ? 'auto' : 'hidden' };\n\n const inputLength = String(inputValue || '').length;\n const hasError = React.useMemo(() => inputLength > inputMaxLength, [inputLength, inputMaxLength]);\n\n return (\n <StyledChatContainerContentComposer rows={['auto', '15px']} maxHeight={`${maxHeight}px`} data-testid={dataTestid}>\n <Grid cols={['1fr', '24px']} justifyContent=\"center\" alignItems=\"flex-end\" gutter=\"xxs\">\n <StyledComposerInput\n ref={input}\n onChange={handleChange}\n style={{ ...heightProps }}\n value={inputValue}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n aria-label=\"Message to send\"\n data-testid=\"chat-composer-textarea\"\n />\n\n <Grid height=\"32px\" alignItems=\"center\">\n <StyledComposerButton\n buttonType=\"text\"\n icon={<PaperAirplane width={18} height={18} />}\n onClick={onSend}\n size=\"s\"\n disabled={!inputValue || buttonDisabled || hasError}\n data-testid=\"chat-composer-send-button\"\n aria-label=\"Send\"\n innerRef={inputSend}\n />\n </Grid>\n </Grid>\n <StyledComposerInput\n ref={inputSize}\n style={{\n height: 32,\n visibility: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: input.current?.clientWidth,\n }}\n onChange={handleChange}\n value={inputValue}\n // maxLength={inputMaxLength}\n />\n <Grid cols={['1fr', '24px']} justifyContent=\"flex-end\" alignItems=\"center\" gutter=\"xxs\" pb=\"xxs\">\n <StyledCounterArea hasError={hasError} data-testid=\"composer-counter-area\">\n {inputMaxLength && hasError ? (\n <StyledCounterErrorA11y role=\"alert\">\n {maxLengthMessage ||\n `You have entered ${inputLength} characters and have exceeded the limit by ${\n inputLength - inputMaxLength\n }. Please limit to less than ${inputMaxLength} characters. `}\n </StyledCounterErrorA11y>\n ) : (\n ''\n )}\n {inputMaxLength ? ` ${inputLength} / ${inputMaxLength}` : ''}\n </StyledCounterArea>\n <Grid />\n </Grid>\n </StyledChatContainerContentComposer>\n );\n};\n\nChatComposer.propTypes = composerProps;\nChatComposer.defaultProps = defaultComposerPros;\nconst ChatComposerWithSchema = describe(ChatComposer);\nChatComposerWithSchema.propTypes = composerProps;\n\nexport { ChatComposer, ChatComposerWithSchema };\n"],"names":["ChatComposer","props","useValidateProps","ChatComposerWithSchema","toJSON","inputValue","onChange","onResize","onSend","onFocus","onBlur","onKeyDown","maxHeight","placeholder","inputMaxLength","maxLengthMessage","buttonDisabled","dataTestid","actionRef","input","React","useRef","inputSize","inputSend","useState","height","setHeight","internalMaxHeight","useMemo","showScroll","setShowScroll","useEffect","newHeight","current","scrollHeight","clientHeight","focusToComposer","focus","focusToSend","handleChange","useCallback","e","target","value","heightProps","overflow","inputLength","String","length","hasError","StyledChatContainerContentComposer","Grid","StyledComposerInput","StyledComposerButton","PaperAirplane","visibility","pointerEvents","position","top","width","clientWidth","StyledCounterArea","StyledCounterErrorA11y","propTypes","composerProps","defaultProps","defaultComposerPros","describe"],"mappings":"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"}
@@ -24,7 +24,7 @@ var StyledChatContainerContentComposer = /*#__PURE__*/styled__default['default']
24
24
  });
25
25
  var StyledComposerInput = /*#__PURE__*/styled__default['default'].textarea.withConfig({
26
26
  componentId: "sc-1ahwpce-1"
27
- })(["padding:", ";resize:none;min-height:32px;border-radius:2px;border:solid 1px #cbcfd7;color:#25292f;height:", ";min-width:244px;overflow-y:auto;font-size:13px;font-weight:400;line-height:1;transition:height 0.3s;&:focus{outline:none;border:1px solid ", ";box-shadow:inset 0 0 0 1px #8cc2ed;border-radius:2px;}"], function (props) {
27
+ })(["padding:", ";resize:none;min-height:32px;border-radius:2px;border:solid 1px #cbcfd7;color:#25292f;height:", ";min-width:244px;overflow-y:auto;font-size:13px;font-weight:400;line-height:1;transition:height 0.05s;&:focus{outline:none;border:1px solid ", ";box-shadow:inset 0 0 0 1px #8cc2ed;border-radius:2px;}"], function (props) {
28
28
  return props.theme.space.xxs;
29
29
  }, function (props) {
30
30
  return typeof props.height === 'number' ? "".concat(props.height, "px") : props.height;
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","sources":["../../../../src/parts/chat-composer/styled.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButton } from '@elliemae/ds-button';\nimport { TextAreaProps } from './props';\n\n// Composer\nexport const StyledChatContainerContentComposer = styled(Grid)`\n width: 100%;\n min-height: 56px;\n background: ${(props) => props.theme.colors.neutral['050']};\n padding: ${(props) => props.theme.space.xxs};\n padding-bottom: 3px;\n padding-top: 6px;\n padding-left: ${(props) => props.theme.space.xs};\n max-height: ${(props) => props.maxHeight};\n border-top: 1px solid #cbcfd7;\n`;\n\nexport const StyledComposerInput = styled.textarea<any>`\n padding: ${(props) => props.theme.space.xxs};\n resize: none;\n min-height: 32px;\n border-radius: 2px;\n border: solid 1px #cbcfd7;\n color: #25292f;\n height: ${(props: TextAreaProps) => (typeof props.height === 'number' ? `${props.height}px` : props.height)};\n min-width: 244px;\n overflow-y: auto;\n font-size: 13px;\n font-weight: 400;\n line-height: 1;\n transition: height 0.3s;\n &:focus {\n outline: none;\n border: 1px solid ${(props) => props.theme.colors.brand[600]};\n box-shadow: inset 0 0 0 1px #8cc2ed;\n border-radius: 2px;\n }\n`;\nexport const StyledComposerButton = styled(DSButton)`\n &:disabled {\n background: none;\n svg {\n fill: #5d6775;\n }\n }\n svg {\n fill: ${(props) => props.theme.colors.brand[600]};\n }\n &:focus {\n background: ${(props) => props.theme.colors.brand[200]};\n }\n`;\n\nexport const StyledCounterArea = styled(Grid)`\n text-align: right;\n font-size: 11px;\n height: 15px;\n align-items: center;\n font-style: italic;\n ${(props) => (props.hasError ? `color:${props.theme.colors.danger[900]};` : '')}\n position:relative;\n`;\n\nexport const StyledCounterErrorA11y = styled.span`\n width: 1px;\n height: 1px;\n position: absolute;\n clip: rect(1px, 1px, 1px, 1px);\n`;\n"],"names":["StyledChatContainerContentComposer","styled","Grid","props","theme","colors","neutral","space","xxs","xs","maxHeight","StyledComposerInput","textarea","height","brand","StyledComposerButton","DSButton","StyledCounterArea","hasError","danger","StyledCounterErrorA11y","span"],"mappings":";;;;;;;;;;;;AAKA;IACaA,kCAAkC,gBAAGC,0BAAM,CAACC,WAAD,CAAT;AAAA;AAAA,mKAG/B,UAACC,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAH+B,EAIlC,UAACH,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBC,GAA7B;AAAA,CAJkC,EAO7B,UAACL,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBE,EAA7B;AAAA,CAP6B,EAQ/B,UAACN,KAAD;AAAA,SAAWA,KAAK,CAACO,SAAjB;AAAA,CAR+B;IAYlCC,mBAAmB,gBAAGV,0BAAM,CAACW,QAAV;AAAA;AAAA,4TACnB,UAACT,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBC,GAA7B;AAAA,CADmB,EAOpB,UAACL,KAAD;AAAA,SAA2B,OAAOA,KAAK,CAACU,MAAb,KAAwB,QAAxB,aAAsCV,KAAK,CAACU,MAA5C,UAAyDV,KAAK,CAACU,MAA1F;AAAA,CAPoB,EAgBR,UAACV,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CAhBQ;IAqBnBC,oBAAoB,gBAAGd,0BAAM,CAACe,iBAAD,CAAT;AAAA;AAAA,+FAQrB,UAACb,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CARqB,EAWf,UAACX,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CAXe;IAepBG,iBAAiB,gBAAGhB,0BAAM,CAACC,WAAD,CAAT;AAAA;AAAA,iHAM1B,UAACC,KAAD;AAAA,SAAYA,KAAK,CAACe,QAAN,mBAA0Bf,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBc,MAAnB,CAA0B,GAA1B,CAA1B,SAA8D,EAA1E;AAAA,CAN0B;IAUjBC,sBAAsB,gBAAGnB,0BAAM,CAACoB,IAAV;AAAA;AAAA;;;;;;;;"}
1
+ {"version":3,"file":"styled.js","sources":["../../../../src/parts/chat-composer/styled.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButton } from '@elliemae/ds-button';\nimport { TextAreaProps } from './props';\n\n// Composer\nexport const StyledChatContainerContentComposer = styled(Grid)`\n width: 100%;\n min-height: 56px;\n background: ${(props) => props.theme.colors.neutral['050']};\n padding: ${(props) => props.theme.space.xxs};\n padding-bottom: 3px;\n padding-top: 6px;\n padding-left: ${(props) => props.theme.space.xs};\n max-height: ${(props) => props.maxHeight};\n border-top: 1px solid #cbcfd7;\n`;\n\nexport const StyledComposerInput = styled.textarea<any>`\n padding: ${(props) => props.theme.space.xxs};\n resize: none;\n min-height: 32px;\n border-radius: 2px;\n border: solid 1px #cbcfd7;\n color: #25292f;\n height: ${(props: TextAreaProps) => (typeof props.height === 'number' ? `${props.height}px` : props.height)};\n min-width: 244px;\n overflow-y: auto;\n font-size: 13px;\n font-weight: 400;\n line-height: 1;\n transition: height 0.05s;\n &:focus {\n outline: none;\n border: 1px solid ${(props) => props.theme.colors.brand[600]};\n box-shadow: inset 0 0 0 1px #8cc2ed;\n border-radius: 2px;\n }\n`;\nexport const StyledComposerButton = styled(DSButton)`\n &:disabled {\n background: none;\n svg {\n fill: #5d6775;\n }\n }\n svg {\n fill: ${(props) => props.theme.colors.brand[600]};\n }\n &:focus {\n background: ${(props) => props.theme.colors.brand[200]};\n }\n`;\n\nexport const StyledCounterArea = styled(Grid)`\n text-align: right;\n font-size: 11px;\n height: 15px;\n align-items: center;\n font-style: italic;\n ${(props) => (props.hasError ? `color:${props.theme.colors.danger[900]};` : '')}\n position:relative;\n`;\n\nexport const StyledCounterErrorA11y = styled.span`\n width: 1px;\n height: 1px;\n position: absolute;\n clip: rect(1px, 1px, 1px, 1px);\n`;\n"],"names":["StyledChatContainerContentComposer","styled","Grid","props","theme","colors","neutral","space","xxs","xs","maxHeight","StyledComposerInput","textarea","height","brand","StyledComposerButton","DSButton","StyledCounterArea","hasError","danger","StyledCounterErrorA11y","span"],"mappings":";;;;;;;;;;;;AAKA;IACaA,kCAAkC,gBAAGC,0BAAM,CAACC,WAAD,CAAT;AAAA;AAAA,mKAG/B,UAACC,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAH+B,EAIlC,UAACH,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBC,GAA7B;AAAA,CAJkC,EAO7B,UAACL,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBE,EAA7B;AAAA,CAP6B,EAQ/B,UAACN,KAAD;AAAA,SAAWA,KAAK,CAACO,SAAjB;AAAA,CAR+B;IAYlCC,mBAAmB,gBAAGV,0BAAM,CAACW,QAAV;AAAA;AAAA,6TACnB,UAACT,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBC,GAA7B;AAAA,CADmB,EAOpB,UAACL,KAAD;AAAA,SAA2B,OAAOA,KAAK,CAACU,MAAb,KAAwB,QAAxB,aAAsCV,KAAK,CAACU,MAA5C,UAAyDV,KAAK,CAACU,MAA1F;AAAA,CAPoB,EAgBR,UAACV,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CAhBQ;IAqBnBC,oBAAoB,gBAAGd,0BAAM,CAACe,iBAAD,CAAT;AAAA;AAAA,+FAQrB,UAACb,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CARqB,EAWf,UAACX,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CAXe;IAepBG,iBAAiB,gBAAGhB,0BAAM,CAACC,WAAD,CAAT;AAAA;AAAA,iHAM1B,UAACC,KAAD;AAAA,SAAYA,KAAK,CAACe,QAAN,mBAA0Bf,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBc,MAAnB,CAA0B,GAA1B,CAA1B,SAA8D,EAA1E;AAAA,CAN0B;IAUjBC,sBAAsB,gBAAGnB,0BAAM,CAACoB,IAAV;AAAA;AAAA;;;;;;;;"}
@@ -63,7 +63,6 @@ var ChatContainer = function ChatContainer(props) {
63
63
  onComposerResize = _props$composerProps.onResize,
64
64
  onComposerKeyDown = _props$composerProps.onKeyDown,
65
65
  actionRef = props.actionRef,
66
- autoScroll = props.autoScroll,
67
66
  device = props.device,
68
67
  isLoading = props.isLoading,
69
68
  hasMoreItems = props.hasMoreItems,
@@ -80,12 +79,18 @@ var ChatContainer = function ChatContainer(props) {
80
79
  var onResize = React__default['default'].useCallback(function (height) {
81
80
  if (onComposerResize) onComposerResize(height);
82
81
 
83
- if (autoScroll) {
84
- listRef.current.scrollToIndex(messagesListProps.messages.length - 1, {
85
- align: 'end'
86
- });
82
+ if (height > 30) {
83
+ /*
84
+ setTimeout is used to equal the animation duration from the
85
+ composer text area when increase its size
86
+ */
87
+ setTimeout(function () {
88
+ actionRef.current.scrollToIndex(messagesListProps.messages.length - 1, {
89
+ align: 'start'
90
+ });
91
+ }, 50);
87
92
  }
88
- }, [onComposerResize, messagesListProps.messages, autoScroll]);
93
+ }, [onComposerResize, messagesListProps.messages, actionRef]);
89
94
  var Container = device === 'desktop' ? parts_chatContainer_styled.StyledChatContainerContent : parts_chatContainer_styled.MobileStyledChatContainerContent;
90
95
  var handleTabs = React__default['default'].useCallback(function (e) {
91
96
  if (onComposerKeyDown) onComposerKeyDown(e);else {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatContainer.js","sources":["../../../../src/parts/chat-container/ChatContainer.tsx"],"sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable complexity */\nimport React from 'react';\nimport { noop } from 'lodash';\nimport { describe } from 'react-desc';\nimport DSIndeterminateProgressIndicator from '@elliemae/ds-indeterminate-progress-indicator';\nimport DSBanner, { BANNER_TYPES } from '@elliemae/ds-banner';\nimport { ChatComposer } from '../chat-composer';\nimport { ChatContainerMessagesList } from '../chat-container-messages-list';\nimport { ChatContainerProps, defaultProps, containerProps } from './props';\nimport { StyledChatContainerContent, StyledIndicatorContainer, MobileStyledChatContainerContent } from './styled';\nimport { useValidateProps } from './config/useValidateProps';\n\nconst ChatContainer = (props: ChatContainerProps): JSX.Element => {\n useValidateProps(props, ChatContainerWithSchema.toTypescript());\n\n const {\n sendingText,\n sendingMessages,\n bannerPosition,\n bannerProps,\n messagesListProps,\n composerProps,\n composerProps: { onResize: onComposerResize, onKeyDown: onComposerKeyDown },\n actionRef,\n autoScroll,\n device,\n isLoading,\n hasMoreItems,\n getMoreMessages,\n ariaLabel\n } = props;\n const bannerRef = React.useRef({ focusOnWrapper: noop, focusOnLink: noop });\n const containerRef = React.useRef<HTMLElement>();\n const listRef = React.useRef({ scrollToIndex: noop });\n const onResize = React.useCallback(\n (height: number) => {\n if (onComposerResize) onComposerResize(height);\n if (autoScroll) {\n listRef.current.scrollToIndex(messagesListProps.messages.length - 1, {\n align: 'end',\n });\n }\n },\n [onComposerResize, messagesListProps.messages, autoScroll],\n );\n const Container = device === 'desktop' ? StyledChatContainerContent : MobileStyledChatContainerContent;\n const handleTabs = React.useCallback(\n (e) => {\n if (onComposerKeyDown) onComposerKeyDown(e);\n else {\n const ref = actionRef || listRef;\n if (e.shiftKey && e.key === 'Tab') {\n e.preventDefault();\n if (['top', 'bottom'].includes(bannerPosition)) {\n bannerRef.current.focusOnWrapper();\n } else {\n const last = ref.current.getMessagesInView().pop();\n ref.current.focusToIndexWithoutScroll(last);\n }\n }\n }\n },\n [actionRef, onComposerKeyDown, bannerPosition],\n );\n\n // Map actions\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusOnBanner = bannerRef.current.focusOnWrapper;\n actionRef.current.focusOnBannerLink = bannerRef.current.focusOnLink;\n }\n }, [actionRef]);\n\n return (\n <Container rows={['minmax(0, 1fr)', 'auto']} ref={containerRef} role=\"region\" aria-label={ariaLabel}>\n <div style={{ position: 'relative', overflow: 'hidden' }}>\n <ChatContainerMessagesList\n {...messagesListProps}\n actionRef={actionRef || listRef}\n isLoading={isLoading}\n hasMoreItems={hasMoreItems}\n getMoreMessages={getMoreMessages}\n sendingMessages={sendingMessages}\n sendingText={sendingText}\n bannerPosition={bannerPosition}\n bannerRef={bannerRef}\n />\n {['top', 'bottom'].includes(isLoading) ? (\n <StyledIndicatorContainer isLoading={isLoading} data-testid=\"ds-chat-loading-indicator\">\n <DSIndeterminateProgressIndicator processing title=\"Loading\" />\n </StyledIndicatorContainer>\n ) : null}\n <StyledIndicatorContainer linear isLoading={bannerPosition}>\n <DSBanner\n showCloseButton\n label={bannerProps.label || 'Unread messages'}\n containerProps={{ id: 'ds-chat-banner' }}\n actionLink={{\n label: bannerProps.viewLabel || 'View',\n onClick: bannerProps.onView,\n }}\n onClose={bannerProps.onClose}\n isOpen\n type={bannerProps.type || BANNER_TYPES.INFO}\n actionRef={bannerRef}\n />\n </StyledIndicatorContainer>\n {sendingMessages && sendingMessages.length > 0 ? (\n <StyledIndicatorContainer isLoading=\"bottom\" linear data-testid=\"ds-chat-loading-indicator\">\n <DSIndeterminateProgressIndicator processing title=\"Loading\" lineOnly />\n </StyledIndicatorContainer>\n ) : null}\n </div>\n <ChatComposer\n {...composerProps}\n onKeyDown={handleTabs}\n onResize={onResize}\n maxHeight={(containerRef.current?.clientHeight || 0) / 2}\n actionRef={actionRef || listRef}\n />\n </Container>\n );\n};\n\nChatContainer.propTypes = containerProps;\nChatContainer.defaultProps = defaultProps;\nconst ChatContainerWithSchema = describe(ChatContainer);\nChatContainerWithSchema.propTypes = containerProps;\n\nexport { ChatContainer, ChatContainerWithSchema };\n"],"names":["ChatContainer","props","useValidateProps","ChatContainerWithSchema","toTypescript","sendingText","sendingMessages","bannerPosition","bannerProps","messagesListProps","composerProps","onComposerResize","onResize","onComposerKeyDown","onKeyDown","actionRef","autoScroll","device","isLoading","hasMoreItems","getMoreMessages","ariaLabel","bannerRef","React","useRef","focusOnWrapper","noop","focusOnLink","containerRef","listRef","scrollToIndex","useCallback","height","current","messages","length","align","Container","StyledChatContainerContent","MobileStyledChatContainerContent","handleTabs","e","ref","shiftKey","key","preventDefault","includes","last","getMessagesInView","pop","focusToIndexWithoutScroll","useEffect","focusOnBanner","focusOnBannerLink","position","overflow","ChatContainerMessagesList","StyledIndicatorContainer","DSIndeterminateProgressIndicator","DSBanner","label","id","viewLabel","onClick","onView","onClose","type","BANNER_TYPES","INFO","ChatComposer","clientHeight","propTypes","containerProps","defaultProps","describe"],"mappings":"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"}
1
+ {"version":3,"file":"ChatContainer.js","sources":["../../../../src/parts/chat-container/ChatContainer.tsx"],"sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable complexity */\nimport React from 'react';\nimport { noop } from 'lodash';\nimport { describe } from 'react-desc';\nimport DSIndeterminateProgressIndicator from '@elliemae/ds-indeterminate-progress-indicator';\nimport DSBanner, { BANNER_TYPES } from '@elliemae/ds-banner';\nimport { ChatComposer } from '../chat-composer';\nimport { ChatContainerMessagesList } from '../chat-container-messages-list';\nimport { ChatContainerProps, defaultProps, containerProps } from './props';\nimport { StyledChatContainerContent, StyledIndicatorContainer, MobileStyledChatContainerContent } from './styled';\nimport { useValidateProps } from './config/useValidateProps';\n\nconst ChatContainer = (props: ChatContainerProps): JSX.Element => {\n useValidateProps(props, ChatContainerWithSchema.toTypescript());\n\n const {\n sendingText,\n sendingMessages,\n bannerPosition,\n bannerProps,\n messagesListProps,\n composerProps,\n composerProps: { onResize: onComposerResize, onKeyDown: onComposerKeyDown },\n actionRef,\n device,\n isLoading,\n hasMoreItems,\n getMoreMessages,\n ariaLabel,\n } = props;\n const bannerRef = React.useRef({ focusOnWrapper: noop, focusOnLink: noop });\n const containerRef = React.useRef<HTMLElement>();\n const listRef = React.useRef({ scrollToIndex: noop });\n const onResize = React.useCallback(\n (height: number) => {\n if (onComposerResize) onComposerResize(height);\n if (height > 30) {\n /*\n setTimeout is used to equal the animation duration from the \n composer text area when increase its size\n */\n setTimeout(() => {\n actionRef.current.scrollToIndex(messagesListProps.messages.length - 1, {\n align: 'start',\n });\n }, 50);\n }\n },\n [onComposerResize, messagesListProps.messages, actionRef],\n );\n const Container = device === 'desktop' ? StyledChatContainerContent : MobileStyledChatContainerContent;\n const handleTabs = React.useCallback(\n (e) => {\n if (onComposerKeyDown) onComposerKeyDown(e);\n else {\n const ref = actionRef || listRef;\n if (e.shiftKey && e.key === 'Tab') {\n e.preventDefault();\n if (['top', 'bottom'].includes(bannerPosition)) {\n bannerRef.current.focusOnWrapper();\n } else {\n const last = ref.current.getMessagesInView().pop();\n ref.current.focusToIndexWithoutScroll(last);\n }\n }\n }\n },\n [actionRef, onComposerKeyDown, bannerPosition],\n );\n\n // Map actions\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusOnBanner = bannerRef.current.focusOnWrapper;\n actionRef.current.focusOnBannerLink = bannerRef.current.focusOnLink;\n }\n }, [actionRef]);\n\n return (\n <Container rows={['minmax(0, 1fr)', 'auto']} ref={containerRef} role=\"region\" aria-label={ariaLabel}>\n <div style={{ position: 'relative', overflow: 'hidden' }}>\n <ChatContainerMessagesList\n {...messagesListProps}\n actionRef={actionRef || listRef}\n isLoading={isLoading}\n hasMoreItems={hasMoreItems}\n getMoreMessages={getMoreMessages}\n sendingMessages={sendingMessages}\n sendingText={sendingText}\n bannerPosition={bannerPosition}\n bannerRef={bannerRef}\n />\n {['top', 'bottom'].includes(isLoading) ? (\n <StyledIndicatorContainer isLoading={isLoading} data-testid=\"ds-chat-loading-indicator\">\n <DSIndeterminateProgressIndicator processing title=\"Loading\" />\n </StyledIndicatorContainer>\n ) : null}\n <StyledIndicatorContainer linear isLoading={bannerPosition}>\n <DSBanner\n showCloseButton\n label={bannerProps.label || 'Unread messages'}\n containerProps={{ id: 'ds-chat-banner' }}\n actionLink={{\n label: bannerProps.viewLabel || 'View',\n onClick: bannerProps.onView,\n }}\n onClose={bannerProps.onClose}\n isOpen\n type={bannerProps.type || BANNER_TYPES.INFO}\n actionRef={bannerRef}\n />\n </StyledIndicatorContainer>\n {sendingMessages && sendingMessages.length > 0 ? (\n <StyledIndicatorContainer isLoading=\"bottom\" linear data-testid=\"ds-chat-loading-indicator\">\n <DSIndeterminateProgressIndicator processing title=\"Loading\" lineOnly />\n </StyledIndicatorContainer>\n ) : null}\n </div>\n <ChatComposer\n {...composerProps}\n onKeyDown={handleTabs}\n onResize={onResize}\n maxHeight={(containerRef.current?.clientHeight || 0) / 2}\n actionRef={actionRef || listRef}\n />\n </Container>\n );\n};\n\nChatContainer.propTypes = containerProps;\nChatContainer.defaultProps = defaultProps;\nconst ChatContainerWithSchema = describe(ChatContainer);\nChatContainerWithSchema.propTypes = containerProps;\n\nexport { ChatContainer, ChatContainerWithSchema };\n"],"names":["ChatContainer","props","useValidateProps","ChatContainerWithSchema","toTypescript","sendingText","sendingMessages","bannerPosition","bannerProps","messagesListProps","composerProps","onComposerResize","onResize","onComposerKeyDown","onKeyDown","actionRef","device","isLoading","hasMoreItems","getMoreMessages","ariaLabel","bannerRef","React","useRef","focusOnWrapper","noop","focusOnLink","containerRef","listRef","scrollToIndex","useCallback","height","setTimeout","current","messages","length","align","Container","StyledChatContainerContent","MobileStyledChatContainerContent","handleTabs","e","ref","shiftKey","key","preventDefault","includes","last","getMessagesInView","pop","focusToIndexWithoutScroll","useEffect","focusOnBanner","focusOnBannerLink","position","overflow","ChatContainerMessagesList","StyledIndicatorContainer","DSIndeterminateProgressIndicator","DSBanner","label","id","viewLabel","onClick","onView","onClose","type","BANNER_TYPES","INFO","ChatComposer","clientHeight","propTypes","containerProps","defaultProps","describe"],"mappings":"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"}
@@ -25,7 +25,7 @@ var StyledChatContainerContent = /*#__PURE__*/styled__default['default'](dsGrid.
25
25
  });
26
26
  var StyledIndicatorContainer = /*#__PURE__*/styled__default['default'].div.withConfig({
27
27
  componentId: "sc-d732wo-1"
28
- })(["transition:0.4s ease-in-out;position:absolute;visibility:hidden;pointer-events:none;width:100%;padding:0 ", ";left:0;right:0;background:", ";", " ", ""], function (props) {
28
+ })(["transition:0.4s ease-in-out;position:absolute;visibility:hidden;pointer-events:none;width:100%;padding:0 ", ";left:0;right:0;background:", ";", " ", " & div,a{font-size:13px;}"], function (props) {
29
29
  return !props.linear ? props.theme.space.xxs : 0;
30
30
  }, function (props) {
31
31
  return props.theme.colors.neutral['000'];
@@ -36,7 +36,7 @@ var StyledIndicatorContainer = /*#__PURE__*/styled__default['default'].div.withC
36
36
  });
37
37
  var MobileStyledChatContainerContent = /*#__PURE__*/styled__default['default'](StyledChatContainerContent).withConfig({
38
38
  componentId: "sc-d732wo-2"
39
- })(["", ",", "{font-size:16px;}", "{font-size:13px;}", "{background-color:#fff;box-shadow:-0 1px 3px rgba(53,60,70,0.8);}", ",", "{font-size:16px;text-align:left;}", "{font-size:13px;}", "{font-size:16px;}"], parts_bubble_styled.StyledTitleLeftBubble, parts_bubble_styled.StyleBodyWrapper, parts_bubble_styled.StyledTitleRightBubble, parts_systemMessage_style.Wrapper, parts_systemMessage_style.Title, parts_systemMessage_style.Message, parts_systemMessage_style.Time, parts_chatComposer_styled.StyledComposerInput);
39
+ })(["", ",", "{font-size:16px;}", "{font-size:13px;}", "{background-color:#fff;box-shadow:-0 1px 3px rgba(53,60,70,0.8);}", ",", "{font-size:16px;text-align:left;}", "{font-size:13px;}", "{font-size:16px;}", "{font-size:16px;}"], parts_bubble_styled.StyledTitleLeftBubble, parts_bubble_styled.StyleBodyWrapper, parts_bubble_styled.StyledTitleRightBubble, parts_systemMessage_style.Wrapper, parts_systemMessage_style.Title, parts_systemMessage_style.Message, parts_systemMessage_style.Time, parts_chatComposer_styled.StyledComposerInput, StyledIndicatorContainer);
40
40
 
41
41
  exports.CONTAINER_WIDTH = CONTAINER_WIDTH;
42
42
  exports.MobileStyledChatContainerContent = MobileStyledChatContainerContent;
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","sources":["../../../../src/parts/chat-container/styled.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Grid } from '@elliemae/ds-grid';\nimport { StyledTitleRightBubble, StyledTitleLeftBubble, StyleBodyWrapper } from '../bubble/styled';\nimport { StyledComposerInput } from '../chat-composer/styled';\nimport { Wrapper, Title, Time, Message } from '../system-message/style';\nexport const CONTAINER_WIDTH = 300;\n\nexport const StyledChatContainerContent = styled(Grid)`\n height: 100%;\n min-width: ${CONTAINER_WIDTH}px;\n overflow: hidden;\n background: ${(props) => props.theme.colors.neutral['050']};\n position: relative;\n`;\nexport const StyledIndicatorContainer = styled.div<{\n isLoading?: 'top' | 'bottom';\n linear?: boolean;\n}>`\n transition: 0.4s ease-in-out;\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: 100%;\n padding: 0 ${(props) => (!props.linear ? props.theme.space.xxs : 0)};\n left: 0;\n right: 0;\n background: ${(props) => props.theme.colors.neutral['000']};\n ${(props) =>\n props.isLoading === 'top'\n ? `\n top: -41px;\n transform: translate(0, 41px);\n visibility: visible;\n pointer-events: auto\n `\n : ''}\n ${(props) =>\n props.isLoading === 'bottom'\n ? `\n bottom: -41px;\n transform: translate(0, -41px);\n visibility: visible;\n pointer-events: auto;\n `\n : ''}\n`;\n\nexport const MobileStyledChatContainerContent = styled(StyledChatContainerContent)`\n ${StyledTitleLeftBubble},\n ${StyleBodyWrapper} {\n font-size: 16px;\n }\n\n ${StyledTitleRightBubble} {\n font-size: 13px;\n }\n\n ${Wrapper} {\n background-color: #fff;\n box-shadow: -0 1px 3px rgba(53, 60, 70, 0.8);\n }\n\n ${Title},\n ${Message} {\n font-size: 16px;\n text-align: left;\n }\n\n ${Time} {\n font-size: 13px;\n }\n\n ${StyledComposerInput} {\n font-size: 16px;\n }\n`;\n"],"names":["CONTAINER_WIDTH","StyledChatContainerContent","styled","Grid","props","theme","colors","neutral","StyledIndicatorContainer","div","linear","space","xxs","isLoading","MobileStyledChatContainerContent","StyledTitleLeftBubble","StyleBodyWrapper","StyledTitleRightBubble","Wrapper","Title","Message","Time","StyledComposerInput"],"mappings":";;;;;;;;;;;;;;;;;;;IAKaA,eAAe,GAAG;IAElBC,0BAA0B,gBAAGC,0BAAM,CAACC,WAAD,CAAT;AAAA;AAAA,wFAExBH,eAFwB,EAIvB,UAACI,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAJuB;IAO1BC,wBAAwB,gBAAGN,0BAAM,CAACO,GAAV;AAAA;AAAA,+JAStB,UAACL,KAAD;AAAA,SAAY,CAACA,KAAK,CAACM,MAAP,GAAgBN,KAAK,CAACC,KAAN,CAAYM,KAAZ,CAAkBC,GAAlC,GAAwC,CAApD;AAAA,CATsB,EAYrB,UAACR,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAZqB,EAajC,UAACH,KAAD;AAAA,SACAA,KAAK,CAACS,SAAN,KAAoB,KAApB,6GAOI,EARJ;AAAA,CAbiC,EAsBjC,UAACT,KAAD;AAAA,SACAA,KAAK,CAACS,SAAN,KAAoB,QAApB,kHAOI,EARJ;AAAA,CAtBiC;IAiCxBC,gCAAgC,gBAAGZ,0BAAM,CAACD,0BAAD,CAAT;AAAA;AAAA,iNACzCc,yCADyC,EAEzCC,oCAFyC,EAMzCC,0CANyC,EAUzCC,iCAVyC,EAezCC,+BAfyC,EAgBzCC,iCAhByC,EAqBzCC,8BArByC,EAyBzCC,6CAzByC;;;;;;;"}
1
+ {"version":3,"file":"styled.js","sources":["../../../../src/parts/chat-container/styled.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Grid } from '@elliemae/ds-grid';\nimport { StyledTitleRightBubble, StyledTitleLeftBubble, StyleBodyWrapper } from '../bubble/styled';\nimport { StyledComposerInput } from '../chat-composer/styled';\nimport { Wrapper, Title, Time, Message } from '../system-message/style';\nexport const CONTAINER_WIDTH = 300;\n\nexport const StyledChatContainerContent = styled(Grid)`\n height: 100%;\n min-width: ${CONTAINER_WIDTH}px;\n overflow: hidden;\n background: ${(props) => props.theme.colors.neutral['050']};\n position: relative;\n`;\nexport const StyledIndicatorContainer = styled.div<{\n isLoading?: 'top' | 'bottom';\n linear?: boolean;\n}>`\n transition: 0.4s ease-in-out;\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: 100%;\n padding: 0 ${(props) => (!props.linear ? props.theme.space.xxs : 0)};\n left: 0;\n right: 0;\n background: ${(props) => props.theme.colors.neutral['000']};\n ${(props) =>\n props.isLoading === 'top'\n ? `\n top: -41px;\n transform: translate(0, 41px);\n visibility: visible;\n pointer-events: auto\n `\n : ''}\n ${(props) =>\n props.isLoading === 'bottom'\n ? `\n bottom: -41px;\n transform: translate(0, -41px);\n visibility: visible;\n pointer-events: auto;\n `\n : ''}\n\n & div,a {\n font-size: 13px;\n }\n`;\n\nexport const MobileStyledChatContainerContent = styled(StyledChatContainerContent)`\n ${StyledTitleLeftBubble},\n ${StyleBodyWrapper} {\n font-size: 16px;\n }\n\n ${StyledTitleRightBubble} {\n font-size: 13px;\n }\n\n ${Wrapper} {\n background-color: #fff;\n box-shadow: -0 1px 3px rgba(53, 60, 70, 0.8);\n }\n\n ${Title},\n ${Message} {\n font-size: 16px;\n text-align: left;\n }\n\n ${Time} {\n font-size: 13px;\n }\n\n ${StyledComposerInput} {\n font-size: 16px;\n }\n\n ${StyledIndicatorContainer} {\n font-size: 16px;\n }\n`;\n"],"names":["CONTAINER_WIDTH","StyledChatContainerContent","styled","Grid","props","theme","colors","neutral","StyledIndicatorContainer","div","linear","space","xxs","isLoading","MobileStyledChatContainerContent","StyledTitleLeftBubble","StyleBodyWrapper","StyledTitleRightBubble","Wrapper","Title","Message","Time","StyledComposerInput"],"mappings":";;;;;;;;;;;;;;;;;;;IAKaA,eAAe,GAAG;IAElBC,0BAA0B,gBAAGC,0BAAM,CAACC,WAAD,CAAT;AAAA;AAAA,wFAExBH,eAFwB,EAIvB,UAACI,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAJuB;IAO1BC,wBAAwB,gBAAGN,0BAAM,CAACO,GAAV;AAAA;AAAA,wLAStB,UAACL,KAAD;AAAA,SAAY,CAACA,KAAK,CAACM,MAAP,GAAgBN,KAAK,CAACC,KAAN,CAAYM,KAAZ,CAAkBC,GAAlC,GAAwC,CAApD;AAAA,CATsB,EAYrB,UAACR,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAZqB,EAajC,UAACH,KAAD;AAAA,SACAA,KAAK,CAACS,SAAN,KAAoB,KAApB,6GAOI,EARJ;AAAA,CAbiC,EAsBjC,UAACT,KAAD;AAAA,SACAA,KAAK,CAACS,SAAN,KAAoB,QAApB,kHAOI,EARJ;AAAA,CAtBiC;IAqCxBC,gCAAgC,gBAAGZ,0BAAM,CAACD,0BAAD,CAAT;AAAA;AAAA,sOACzCc,yCADyC,EAEzCC,oCAFyC,EAMzCC,0CANyC,EAUzCC,iCAVyC,EAezCC,+BAfyC,EAgBzCC,iCAhByC,EAqBzCC,8BArByC,EAyBzCC,6CAzByC,EA6BzCd,wBA7ByC;;;;;;;"}
@@ -42,12 +42,19 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
42
42
 
43
43
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
44
44
 
45
- var getPadding = function getPadding(hasMoreItems) {
45
+ var getPadding = function getPadding(_ref) {
46
+ var hasMoreItems = _ref.hasMoreItems,
47
+ bannerPosition = _ref.bannerPosition,
48
+ isLoading = _ref.isLoading;
46
49
  var padding = {
47
50
  paddingStart: 0,
48
51
  paddingEnd: -5
49
52
  };
50
- if (hasMoreItems === 'top') padding.paddingStart = 42;else if (hasMoreItems === 'bottom') padding.paddingEnd = 42;
53
+ if ([hasMoreItems, bannerPosition, isLoading].some(function (item) {
54
+ return item === 'top';
55
+ })) padding.paddingStart = 42;else if ([hasMoreItems, bannerPosition, isLoading].some(function (item) {
56
+ return item === 'bottom';
57
+ })) padding.paddingEnd = 42;
51
58
  return padding;
52
59
  };
53
60
 
@@ -72,7 +79,11 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
72
79
  size: messages.length,
73
80
  parentRef: virtualListRef,
74
81
  overscan: 15
75
- }, getPadding(hasMoreItems)), {}, {
82
+ }, getPadding({
83
+ hasMoreItems: hasMoreItems,
84
+ bannerPosition: bannerPosition,
85
+ isLoading: isLoading
86
+ })), {}, {
76
87
  estimateSize: React__default['default'].useCallback(function () {
77
88
  return 80;
78
89
  }, [])
@@ -183,25 +194,25 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
183
194
  break;
184
195
 
185
196
  case 'Tab':
186
- e.preventDefault();
187
-
188
197
  if (hasMoreItems === 'bottom' && !e.shiftKey) {
189
198
  var _loadMoreRef$current;
190
199
 
200
+ e.preventDefault();
191
201
  (_loadMoreRef$current = loadMoreRef.current) === null || _loadMoreRef$current === void 0 ? void 0 : _loadMoreRef$current.focus();
192
202
  } else if (hasMoreItems === 'top' && e.shiftKey) {
193
203
  var _loadMoreRef$current2;
194
204
 
205
+ e.preventDefault();
195
206
  (_loadMoreRef$current2 = loadMoreRef.current) === null || _loadMoreRef$current2 === void 0 ? void 0 : _loadMoreRef$current2.focus();
196
207
  } else if (!e.shiftKey) {
197
208
  if (bannerPosition) {
209
+ e.preventDefault();
198
210
  bannerRef.current.focusOnWrapper();
199
- } else {
200
- actionRef.current.focusToComposer();
201
211
  }
202
212
  } else {
203
213
  var _virtualListRef$curre4;
204
214
 
215
+ e.preventDefault();
205
216
  (_virtualListRef$curre4 = virtualListRef.current) === null || _virtualListRef$curre4 === void 0 ? void 0 : _virtualListRef$curre4.focus();
206
217
  }
207
218
 
@@ -301,7 +312,7 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
301
312
  key: "ds-chat-bubble-".concat(index, "-").concat(row.dsId, "-").concat(row.type),
302
313
  style: style,
303
314
  ref: measureRef,
304
- tabIndex: 0,
315
+ tabIndex: -1,
305
316
  onKeyDown: handleKey,
306
317
  role: "listitem"
307
318
  }, /*#__PURE__*/React__default['default'].createElement(parts_chatContainerMessagesList_styled.StyledWrapperListItem, {
@@ -318,12 +329,13 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
318
329
  "data-testid": "chat-thread-container",
319
330
  tabIndex: 0,
320
331
  "aria-live": "polite",
332
+ "aria-relevant": "additions",
321
333
  ref: virtualListRef,
322
334
  role: "list",
323
335
  onKeyDown: handleListKey
324
336
  }, /*#__PURE__*/React__default['default'].createElement(parts_chatContainerMessagesList_styled.StyledChatContainerContentListScroll, {
325
337
  height: "".concat(totalSize, "px")
326
- }, render, !isLoading && hasMoreItems ? /*#__PURE__*/React__default['default'].createElement(parts_chatContainerMessagesList_styled.StyledLoadMoreContainer, {
338
+ }, !isLoading && hasMoreItems ? /*#__PURE__*/React__default['default'].createElement(parts_chatContainerMessagesList_styled.StyledLoadMoreContainer, {
327
339
  hasMoreItems: hasMoreItems
328
340
  }, /*#__PURE__*/React__default['default'].createElement(DSButton__default['default'], {
329
341
  labelText: "Load More",
@@ -331,7 +343,7 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
331
343
  onClick: getMoreMessages,
332
344
  "data-testid": "ds-chat-load-more-btn",
333
345
  innerRef: loadMoreRef
334
- })) : null)));
346
+ })) : null, render)));
335
347
  };
336
348
 
337
349
  ChatContainerMessagesList.propTypes = parts_chatContainerMessagesList_props.listProps;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatContainerMessagesList.js","sources":["../../../../src/parts/chat-container-messages-list/ChatContainerMessagesList.tsx"],"sourcesContent":["/* eslint-disable complexity */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n/* eslint-disable max-lines */\nimport React, { CSSProperties } from 'react';\nimport { describe } from 'react-desc';\nimport { useVirtual } from 'react-virtual';\nimport DSButton from '@elliemae/ds-button';\nimport { debounce } from 'lodash';\nimport { ChatBubble, BUBBLE_TYPES } from '../bubble';\nimport { MessageDelimiter } from '../message-delimiter';\nimport { SystemMessage } from '../system-message';\nimport {\n StyledWrapperListItem,\n StyledChatContainerContentList,\n StyledChatContainerContentListScroll,\n StyledWrapper,\n StyledLoadMoreContainer,\n ListItem,\n} from './styled';\nimport { defaultProps, listProps, ChatContainerMessagesListProps } from './props';\nimport { useValidateProps } from './config/useValidateProps';\n\nconst getPadding = (hasMoreItems) => {\n const padding = {\n paddingStart: 0,\n paddingEnd: -5,\n };\n if (hasMoreItems === 'top') padding.paddingStart = 42;\n else if (hasMoreItems === 'bottom') padding.paddingEnd = 42;\n return padding;\n};\n\nconst ChatContainerMessagesList = (props: ChatContainerMessagesListProps): JSX.Element => {\n useValidateProps(props, ChatContainerMessagesListWithSchema.toTypescript());\n\n const {\n sendingText,\n bannerPosition,\n sendingMessages,\n messages,\n actionRef,\n onScrollEnds,\n getMoreMessages,\n hasMoreItems,\n isLoading,\n bannerRef,\n } = props;\n const pendingOnScroll = React.useRef(false);\n const loadMoreRef = React.useRef(null);\n const virtualListRef = React.useRef<HTMLDivElement>();\n // estimateSize should not be really required given what was stated on\n // https://github.com/tannerlinsley/react-virtual/issues/23\n const {\n scrollToIndex: vScroll,\n totalSize,\n virtualItems,\n } = useVirtual({\n size: messages.length,\n parentRef: virtualListRef,\n overscan: 15,\n ...getPadding(hasMoreItems),\n estimateSize: React.useCallback(() => 80, []),\n });\n\n const debouncedScroll = React.useMemo(\n () =>\n debounce((): number[] => {\n if (document.visibilityState === 'hidden') {\n pendingOnScroll.current = true;\n return [];\n }\n if (!virtualListRef.current) return [];\n pendingOnScroll.current = false;\n const { bottom, top } = virtualListRef.current?.getBoundingClientRect();\n const list = virtualListRef.current.querySelectorAll(\n '[data-element=\"chat-element-list-item\"]',\n ) as NodeListOf<HTMLDivElement>;\n const indexList = [];\n list.forEach((item: HTMLDivElement) => {\n const { top: itemTop } = item.getBoundingClientRect();\n const itemPadding = 10;\n if (itemTop + itemPadding < bottom && itemTop + itemPadding > top) indexList.push(item.dataset.index);\n });\n if (onScrollEnds) onScrollEnds(indexList);\n return indexList;\n }, 500),\n [onScrollEnds],\n );\n\n const onScrollStop = React.useCallback(debouncedScroll, [debouncedScroll]);\n\n const onlyFocus = React.useCallback((index: number) => {\n setTimeout(() => {\n (virtualListRef.current.querySelector(`[data-index=\"${index}\"]`) as HTMLDivElement).focus();\n }, 300);\n }, []);\n\n const scrollAndFocus = React.useCallback(\n (index: number, b = { align: 'center' }) => {\n vScroll(index, b);\n onlyFocus(index);\n onScrollStop();\n },\n [onScrollStop, onlyFocus, vScroll],\n );\n\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.scrollToIndex = (a, b = { align: 'center' }) => {\n vScroll(a, b as any);\n onScrollStop();\n };\n actionRef.current.getMessagesInView = onScrollStop;\n actionRef.current.focusToIndex = (a, b = { align: 'center' } as ScrollToOptions) => {\n scrollAndFocus(a, b);\n };\n actionRef.current.focusToIndexWithoutScroll = onlyFocus;\n actionRef.current.focusToList = () => {\n virtualListRef.current?.focus();\n };\n }\n }, [actionRef, onScrollStop, onlyFocus, scrollAndFocus, vScroll]);\n\n const handleKey = React.useCallback(\n (e) => {\n const { key } = e;\n const index = Number(e.currentTarget.dataset.index);\n e.stopPropagation();\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n if (index > 0)\n (virtualListRef.current.querySelector(`[data-index=\"${index - 1}\"]`) as HTMLDivElement).focus();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (index < messages.length - 1) {\n (virtualListRef.current.querySelector(`[data-index=\"${index + 1}\"]`) as HTMLDivElement).focus();\n }\n break;\n case 'Home':\n e.preventDefault();\n scrollAndFocus(0);\n break;\n case 'End':\n e.preventDefault();\n scrollAndFocus(messages.length - 1);\n break;\n case 'Tab':\n e.preventDefault();\n if (hasMoreItems === 'bottom' && !e.shiftKey) {\n loadMoreRef.current?.focus();\n } else if (hasMoreItems === 'top' && e.shiftKey) {\n loadMoreRef.current?.focus();\n } else if (!e.shiftKey) {\n if (bannerPosition) {\n bannerRef.current.focusOnWrapper();\n } else {\n actionRef.current.focusToComposer();\n }\n } else {\n virtualListRef.current?.focus();\n }\n break;\n default:\n break;\n }\n },\n [actionRef, bannerRef, hasMoreItems, messages.length, bannerPosition, scrollAndFocus],\n );\n const handleListKey = React.useCallback(\n (e) => {\n const { key } = e;\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n onlyFocus(onScrollStop().shift());\n break;\n case 'ArrowDown':\n e.preventDefault();\n onlyFocus(onScrollStop().pop());\n break;\n case 'Home':\n e.preventDefault();\n scrollAndFocus(0);\n break;\n case 'End':\n e.preventDefault();\n scrollAndFocus(messages.length - 1);\n break;\n case 'Tab':\n if (document.activeElement !== loadMoreRef.current) {\n if (hasMoreItems === 'bottom' && !e.shiftKey) {\n e.preventDefault();\n loadMoreRef.current?.focus();\n } else if (hasMoreItems === 'top' && e.shiftKey) {\n // e.preventDefault();\n // loadMoreRef.current?.focus();\n } else if (!e.shiftKey) {\n e.preventDefault();\n actionRef.current.focusToComposer();\n }\n } else if (!e.shiftKey) {\n e.preventDefault();\n actionRef.current.focusToComposer();\n } else {\n e.preventDefault();\n virtualListRef.current?.focus();\n }\n break;\n default:\n break;\n }\n },\n [actionRef, hasMoreItems, messages.length, onScrollStop, onlyFocus, scrollAndFocus],\n );\n\n const checkPendingOnScroll = React.useCallback(() => {\n if (pendingOnScroll.current === true) onScrollStop();\n }, [onScrollStop]);\n\n React.useEffect(() => {\n let handlerCallback = null;\n const localVirtualRef = virtualListRef.current;\n const onScroll = () => {\n if (handlerCallback) clearTimeout(handlerCallback);\n handlerCallback = setTimeout(onScrollStop, 300);\n };\n if (onScrollEnds) {\n virtualListRef.current.addEventListener('scroll', onScroll);\n }\n document.addEventListener('visibilitychange', checkPendingOnScroll);\n return () => {\n if (handlerCallback) clearTimeout(handlerCallback);\n if (onScrollEnds) localVirtualRef.removeEventListener('scroll', onScroll);\n document.removeEventListener('visibilitychange', checkPendingOnScroll);\n };\n }, [onScrollStop, onScrollEnds, checkPendingOnScroll]);\n\n const render = React.useMemo(\n () =>\n virtualItems.map((virtualItem) => {\n const { index, measureRef, start } = virtualItem;\n const row = messages[index];\n const isSending = sendingMessages && sendingMessages.find((m) => m === row.dsId);\n const style: CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${start}px)`,\n width: '100%',\n };\n\n return (\n <ListItem\n data-element=\"chat-element-list-item\"\n data-index={index}\n key={`ds-chat-bubble-${index}-${row.dsId}-${row.type}`}\n style={style}\n ref={measureRef}\n tabIndex={0}\n onKeyDown={handleKey}\n role=\"listitem\"\n >\n <StyledWrapperListItem type={row.type}>\n {row.type === BUBBLE_TYPES.SENDER || row.type === BUBBLE_TYPES.RECIPIENT ? (\n // eslint-disable-next-line\n <ChatBubble {...(row as any)} helpMessage={isSending ? sendingText : row.helpMessage} />\n ) : null}\n {row.type === BUBBLE_TYPES.DELIMITER ? <MessageDelimiter {...(row as any)} /> : null}\n {row.type === BUBBLE_TYPES.SYSTEM ? <SystemMessage {...(row as any)} /> : null}\n </StyledWrapperListItem>\n </ListItem>\n );\n }),\n [virtualItems, messages, sendingMessages, handleKey, sendingText],\n );\n\n return (\n <StyledWrapper>\n <StyledChatContainerContentList\n data-testid=\"chat-thread-container\"\n tabIndex={0}\n aria-live=\"polite\"\n ref={virtualListRef}\n role=\"list\"\n onKeyDown={handleListKey}\n >\n <StyledChatContainerContentListScroll height={`${totalSize}px`}>\n {render}\n {!isLoading && hasMoreItems ? (\n <StyledLoadMoreContainer hasMoreItems={hasMoreItems}>\n <DSButton\n labelText=\"Load More\"\n buttonType=\"secondary\"\n onClick={getMoreMessages}\n data-testid=\"ds-chat-load-more-btn\"\n innerRef={loadMoreRef}\n />\n </StyledLoadMoreContainer>\n ) : null}\n </StyledChatContainerContentListScroll>\n </StyledChatContainerContentList>\n </StyledWrapper>\n );\n};\n\nChatContainerMessagesList.propTypes = listProps;\nChatContainerMessagesList.defaultProps = defaultProps;\nconst ChatContainerMessagesListWithSchema = describe(ChatContainerMessagesList);\nChatContainerMessagesListWithSchema.propTypes = listProps;\n\nexport { ChatContainerMessagesList, ChatContainerMessagesListWithSchema };\n"],"names":["getPadding","hasMoreItems","padding","paddingStart","paddingEnd","ChatContainerMessagesList","props","useValidateProps","ChatContainerMessagesListWithSchema","toTypescript","sendingText","bannerPosition","sendingMessages","messages","actionRef","onScrollEnds","getMoreMessages","isLoading","bannerRef","pendingOnScroll","React","useRef","loadMoreRef","virtualListRef","useVirtual","size","length","parentRef","overscan","estimateSize","useCallback","vScroll","scrollToIndex","totalSize","virtualItems","debouncedScroll","useMemo","debounce","document","visibilityState","current","getBoundingClientRect","bottom","top","list","querySelectorAll","indexList","forEach","item","itemTop","itemPadding","push","dataset","index","onScrollStop","onlyFocus","setTimeout","querySelector","focus","scrollAndFocus","b","align","useEffect","a","getMessagesInView","focusToIndex","focusToIndexWithoutScroll","focusToList","handleKey","e","key","Number","currentTarget","stopPropagation","preventDefault","shiftKey","focusOnWrapper","focusToComposer","handleListKey","shift","pop","activeElement","checkPendingOnScroll","handlerCallback","localVirtualRef","onScroll","clearTimeout","addEventListener","removeEventListener","render","map","virtualItem","measureRef","start","row","isSending","find","m","dsId","style","position","left","transform","width","ListItem","type","StyledWrapperListItem","BUBBLE_TYPES","SENDER","RECIPIENT","ChatBubble","helpMessage","DELIMITER","MessageDelimiter","SYSTEM","SystemMessage","StyledWrapper","StyledChatContainerContentList","StyledChatContainerContentListScroll","StyledLoadMoreContainer","DSButton","propTypes","listProps","defaultProps","describe"],"mappings":"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"}
1
+ {"version":3,"file":"ChatContainerMessagesList.js","sources":["../../../../src/parts/chat-container-messages-list/ChatContainerMessagesList.tsx"],"sourcesContent":["/* eslint-disable complexity */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n/* eslint-disable max-lines */\nimport React, { CSSProperties } from 'react';\nimport { describe } from 'react-desc';\nimport { useVirtual } from 'react-virtual';\nimport DSButton from '@elliemae/ds-button';\nimport { debounce } from 'lodash';\nimport { ChatBubble, BUBBLE_TYPES } from '../bubble';\nimport { MessageDelimiter } from '../message-delimiter';\nimport { SystemMessage } from '../system-message';\nimport {\n StyledWrapperListItem,\n StyledChatContainerContentList,\n StyledChatContainerContentListScroll,\n StyledWrapper,\n StyledLoadMoreContainer,\n ListItem,\n} from './styled';\nimport { defaultProps, listProps, ChatContainerMessagesListProps } from './props';\nimport { useValidateProps } from './config/useValidateProps';\n\ntype getPaddingT = {\n hasMoreItems: string | undefined;\n bannerPosition: string | undefined;\n isLoading: string | undefined;\n};\nconst getPadding = ({ hasMoreItems, bannerPosition, isLoading }: getPaddingT) => {\n const padding = {\n paddingStart: 0,\n paddingEnd: -5,\n };\n if ([hasMoreItems, bannerPosition, isLoading].some((item) => item === 'top')) padding.paddingStart = 42;\n else if ([hasMoreItems, bannerPosition, isLoading].some((item) => item === 'bottom')) padding.paddingEnd = 42;\n return padding;\n};\n\nconst ChatContainerMessagesList = (props: ChatContainerMessagesListProps): JSX.Element => {\n useValidateProps(props, ChatContainerMessagesListWithSchema.toTypescript());\n\n const {\n sendingText,\n bannerPosition,\n sendingMessages,\n messages,\n actionRef,\n onScrollEnds,\n getMoreMessages,\n hasMoreItems,\n isLoading,\n bannerRef,\n } = props;\n const pendingOnScroll = React.useRef(false);\n const loadMoreRef = React.useRef(null);\n const virtualListRef = React.useRef<HTMLDivElement>();\n // estimateSize should not be really required given what was stated on\n // https://github.com/tannerlinsley/react-virtual/issues/23\n const {\n scrollToIndex: vScroll,\n totalSize,\n virtualItems,\n } = useVirtual({\n size: messages.length,\n parentRef: virtualListRef,\n overscan: 15,\n ...getPadding({ hasMoreItems, bannerPosition, isLoading }),\n estimateSize: React.useCallback(() => 80, []),\n });\n\n const debouncedScroll = React.useMemo(\n () =>\n debounce((): number[] => {\n if (document.visibilityState === 'hidden') {\n pendingOnScroll.current = true;\n return [];\n }\n if (!virtualListRef.current) return [];\n pendingOnScroll.current = false;\n const { bottom, top } = virtualListRef.current?.getBoundingClientRect();\n const list = virtualListRef.current.querySelectorAll(\n '[data-element=\"chat-element-list-item\"]',\n ) as NodeListOf<HTMLDivElement>;\n const indexList = [];\n list.forEach((item: HTMLDivElement) => {\n const { top: itemTop } = item.getBoundingClientRect();\n const itemPadding = 10;\n if (itemTop + itemPadding < bottom && itemTop + itemPadding > top) indexList.push(item.dataset.index);\n });\n if (onScrollEnds) onScrollEnds(indexList);\n return indexList;\n }, 500),\n [onScrollEnds],\n );\n\n const onScrollStop = React.useCallback(debouncedScroll, [debouncedScroll]);\n\n const onlyFocus = React.useCallback((index: number) => {\n setTimeout(() => {\n (virtualListRef.current.querySelector(`[data-index=\"${index}\"]`) as HTMLDivElement).focus();\n }, 300);\n }, []);\n\n const scrollAndFocus = React.useCallback(\n (index: number, b = { align: 'center' }) => {\n vScroll(index, b);\n onlyFocus(index);\n onScrollStop();\n },\n [onScrollStop, onlyFocus, vScroll],\n );\n\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.scrollToIndex = (a, b = { align: 'center' }) => {\n vScroll(a, b as any);\n onScrollStop();\n };\n actionRef.current.getMessagesInView = onScrollStop;\n actionRef.current.focusToIndex = (a, b = { align: 'center' } as ScrollToOptions) => {\n scrollAndFocus(a, b);\n };\n actionRef.current.focusToIndexWithoutScroll = onlyFocus;\n actionRef.current.focusToList = () => {\n virtualListRef.current?.focus();\n };\n }\n }, [actionRef, onScrollStop, onlyFocus, scrollAndFocus, vScroll]);\n\n const handleKey = React.useCallback(\n (e) => {\n const { key } = e;\n const index = Number(e.currentTarget.dataset.index);\n e.stopPropagation();\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n if (index > 0)\n (virtualListRef.current.querySelector(`[data-index=\"${index - 1}\"]`) as HTMLDivElement).focus();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (index < messages.length - 1) {\n (virtualListRef.current.querySelector(`[data-index=\"${index + 1}\"]`) as HTMLDivElement).focus();\n }\n break;\n case 'Home':\n e.preventDefault();\n scrollAndFocus(0);\n break;\n case 'End':\n e.preventDefault();\n scrollAndFocus(messages.length - 1);\n break;\n case 'Tab':\n if (hasMoreItems === 'bottom' && !e.shiftKey) {\n e.preventDefault();\n loadMoreRef.current?.focus();\n } else if (hasMoreItems === 'top' && e.shiftKey) {\n e.preventDefault();\n loadMoreRef.current?.focus();\n } else if (!e.shiftKey) {\n if (bannerPosition) {\n e.preventDefault();\n bannerRef.current.focusOnWrapper();\n }\n } else {\n e.preventDefault();\n virtualListRef.current?.focus();\n }\n break;\n default:\n break;\n }\n },\n [actionRef, bannerRef, hasMoreItems, messages.length, bannerPosition, scrollAndFocus],\n );\n const handleListKey = React.useCallback(\n (e) => {\n const { key } = e;\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n onlyFocus(onScrollStop().shift());\n break;\n case 'ArrowDown':\n e.preventDefault();\n onlyFocus(onScrollStop().pop());\n break;\n case 'Home':\n e.preventDefault();\n scrollAndFocus(0);\n break;\n case 'End':\n e.preventDefault();\n scrollAndFocus(messages.length - 1);\n break;\n case 'Tab':\n if (document.activeElement !== loadMoreRef.current) {\n if (hasMoreItems === 'bottom' && !e.shiftKey) {\n e.preventDefault();\n loadMoreRef.current?.focus();\n } else if (hasMoreItems === 'top' && e.shiftKey) {\n // e.preventDefault();\n // loadMoreRef.current?.focus();\n } else if (!e.shiftKey) {\n e.preventDefault();\n actionRef.current.focusToComposer();\n }\n } else if (!e.shiftKey) {\n e.preventDefault();\n actionRef.current.focusToComposer();\n } else {\n e.preventDefault();\n virtualListRef.current?.focus();\n }\n break;\n default:\n break;\n }\n },\n [actionRef, hasMoreItems, messages.length, onScrollStop, onlyFocus, scrollAndFocus],\n );\n\n const checkPendingOnScroll = React.useCallback(() => {\n if (pendingOnScroll.current === true) onScrollStop();\n }, [onScrollStop]);\n\n React.useEffect(() => {\n let handlerCallback = null;\n const localVirtualRef = virtualListRef.current;\n const onScroll = () => {\n if (handlerCallback) clearTimeout(handlerCallback);\n handlerCallback = setTimeout(onScrollStop, 300);\n };\n if (onScrollEnds) {\n virtualListRef.current.addEventListener('scroll', onScroll);\n }\n document.addEventListener('visibilitychange', checkPendingOnScroll);\n return () => {\n if (handlerCallback) clearTimeout(handlerCallback);\n if (onScrollEnds) localVirtualRef.removeEventListener('scroll', onScroll);\n document.removeEventListener('visibilitychange', checkPendingOnScroll);\n };\n }, [onScrollStop, onScrollEnds, checkPendingOnScroll]);\n\n const render = React.useMemo(\n () =>\n virtualItems.map((virtualItem) => {\n const { index, measureRef, start } = virtualItem;\n const row = messages[index];\n const isSending = sendingMessages && sendingMessages.find((m) => m === row.dsId);\n const style: CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${start}px)`,\n width: '100%',\n };\n\n return (\n <ListItem\n data-element=\"chat-element-list-item\"\n data-index={index}\n key={`ds-chat-bubble-${index}-${row.dsId}-${row.type}`}\n style={style}\n ref={measureRef}\n tabIndex={-1}\n onKeyDown={handleKey}\n role=\"listitem\"\n >\n <StyledWrapperListItem type={row.type}>\n {row.type === BUBBLE_TYPES.SENDER || row.type === BUBBLE_TYPES.RECIPIENT ? (\n // eslint-disable-next-line\n <ChatBubble {...(row as any)} helpMessage={isSending ? sendingText : row.helpMessage} />\n ) : null}\n {row.type === BUBBLE_TYPES.DELIMITER ? <MessageDelimiter {...(row as any)} /> : null}\n {row.type === BUBBLE_TYPES.SYSTEM ? <SystemMessage {...(row as any)} /> : null}\n </StyledWrapperListItem>\n </ListItem>\n );\n }),\n [virtualItems, messages, sendingMessages, handleKey, sendingText],\n );\n\n return (\n <StyledWrapper>\n <StyledChatContainerContentList\n data-testid=\"chat-thread-container\"\n tabIndex={0}\n aria-live=\"polite\"\n aria-relevant=\"additions\"\n ref={virtualListRef}\n role=\"list\"\n onKeyDown={handleListKey}\n >\n <StyledChatContainerContentListScroll height={`${totalSize}px`}>\n {!isLoading && hasMoreItems ? (\n <StyledLoadMoreContainer hasMoreItems={hasMoreItems}>\n <DSButton\n labelText=\"Load More\"\n buttonType=\"secondary\"\n onClick={getMoreMessages}\n data-testid=\"ds-chat-load-more-btn\"\n innerRef={loadMoreRef}\n />\n </StyledLoadMoreContainer>\n ) : null}\n {render}\n </StyledChatContainerContentListScroll>\n </StyledChatContainerContentList>\n </StyledWrapper>\n );\n};\n\nChatContainerMessagesList.propTypes = listProps;\nChatContainerMessagesList.defaultProps = defaultProps;\nconst ChatContainerMessagesListWithSchema = describe(ChatContainerMessagesList);\nChatContainerMessagesListWithSchema.propTypes = listProps;\n\nexport { ChatContainerMessagesList, ChatContainerMessagesListWithSchema };\n"],"names":["getPadding","hasMoreItems","bannerPosition","isLoading","padding","paddingStart","paddingEnd","some","item","ChatContainerMessagesList","props","useValidateProps","ChatContainerMessagesListWithSchema","toTypescript","sendingText","sendingMessages","messages","actionRef","onScrollEnds","getMoreMessages","bannerRef","pendingOnScroll","React","useRef","loadMoreRef","virtualListRef","useVirtual","size","length","parentRef","overscan","estimateSize","useCallback","vScroll","scrollToIndex","totalSize","virtualItems","debouncedScroll","useMemo","debounce","document","visibilityState","current","getBoundingClientRect","bottom","top","list","querySelectorAll","indexList","forEach","itemTop","itemPadding","push","dataset","index","onScrollStop","onlyFocus","setTimeout","querySelector","focus","scrollAndFocus","b","align","useEffect","a","getMessagesInView","focusToIndex","focusToIndexWithoutScroll","focusToList","handleKey","e","key","Number","currentTarget","stopPropagation","preventDefault","shiftKey","focusOnWrapper","handleListKey","shift","pop","activeElement","focusToComposer","checkPendingOnScroll","handlerCallback","localVirtualRef","onScroll","clearTimeout","addEventListener","removeEventListener","render","map","virtualItem","measureRef","start","row","isSending","find","m","dsId","style","position","left","transform","width","ListItem","type","StyledWrapperListItem","BUBBLE_TYPES","SENDER","RECIPIENT","ChatBubble","helpMessage","DELIMITER","MessageDelimiter","SYSTEM","SystemMessage","StyledWrapper","StyledChatContainerContentList","StyledChatContainerContentListScroll","StyledLoadMoreContainer","DSButton","propTypes","listProps","defaultProps","describe"],"mappings":"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"}
@@ -140,9 +140,9 @@ var ChatComposer = function ChatComposer(props) {
140
140
  }, /*#__PURE__*/React.createElement(StyledCounterArea, {
141
141
  hasError: hasError,
142
142
  "data-testid": "composer-counter-area"
143
- }, inputMaxLength && hasError ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledCounterErrorA11y, {
143
+ }, inputMaxLength && hasError ? /*#__PURE__*/React.createElement(StyledCounterErrorA11y, {
144
144
  role: "alert"
145
- }, maxLengthMessage || "You have exceeded the character limit by ".concat(inputLength - inputMaxLength)), maxLengthMessage || "Please limit to less than ".concat(inputMaxLength, " characters. ")) : '', inputMaxLength ? " ".concat(inputLength, " / ").concat(inputMaxLength) : ''), /*#__PURE__*/React.createElement(Grid, null)));
145
+ }, maxLengthMessage || "You have entered ".concat(inputLength, " characters and have exceeded the limit by ").concat(inputLength - inputMaxLength, ". Please limit to less than ").concat(inputMaxLength, " characters. ")) : '', inputMaxLength ? " ".concat(inputLength, " / ").concat(inputMaxLength) : ''), /*#__PURE__*/React.createElement(Grid, null)));
146
146
  };
147
147
 
148
148
  ChatComposer.propTypes = composerProps;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatContainerComposer.js","sources":["../../../../src/parts/chat-composer/ChatContainerComposer.tsx"],"sourcesContent":["/* eslint-disable max-lines */\nimport React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { describe } from 'react-desc';\nimport { PaperAirplane } from '@elliemae/ds-icons';\nimport {\n StyledChatContainerContentComposer,\n StyledComposerInput,\n StyledComposerButton,\n StyledCounterArea,\n StyledCounterErrorA11y,\n} from './styled';\nimport { useValidateProps } from './config/useValidateProps';\n\nimport { defaultComposerPros, composerProps, ChatComposerProps } from './props';\n\nconst ChatComposer = (props: ChatComposerProps): JSX.Element => {\n useValidateProps(props, ChatComposerWithSchema.toJSON());\n\n const {\n inputValue,\n onChange,\n onResize,\n onSend,\n onFocus,\n onBlur,\n onKeyDown,\n maxHeight = 300,\n placeholder,\n inputMaxLength,\n maxLengthMessage,\n buttonDisabled,\n dataTestid,\n actionRef,\n } = props;\n\n const input = React.useRef<HTMLTextAreaElement>();\n const inputSize = React.useRef<HTMLTextAreaElement>();\n const inputSend = React.useRef<HTMLButtonElement>();\n const [height, setHeight] = React.useState(32);\n const internalMaxHeight = React.useMemo(() => maxHeight - 24, [maxHeight]);\n const [showScroll, setShowScroll] = React.useState(true);\n\n React.useEffect(() => {\n const newHeight =\n inputSize.current?.scrollHeight > internalMaxHeight ? internalMaxHeight : inputSize.current?.scrollHeight;\n onResize(newHeight);\n setHeight(newHeight);\n setShowScroll(inputSize.current?.scrollHeight - inputSize.current?.clientHeight > 5);\n }, [inputValue, internalMaxHeight, onResize]);\n\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusToComposer = () => {\n input.current.focus();\n };\n actionRef.current.focusToSend = () => {\n inputSend.current.focus();\n };\n }\n }, [actionRef]);\n\n const handleChange = React.useCallback(\n (e) => {\n onChange(e.target.value);\n },\n [onChange],\n );\n const heightProps = { height, overflow: showScroll ? 'auto' : 'hidden' };\n\n const inputLength = String(inputValue || '').length;\n const hasError = React.useMemo(() => inputLength > inputMaxLength, [inputLength, inputMaxLength]);\n\n return (\n <StyledChatContainerContentComposer rows={['auto', '15px']} maxHeight={`${maxHeight}px`} data-testid={dataTestid}>\n <Grid cols={['1fr', '24px']} justifyContent=\"center\" alignItems=\"flex-end\" gutter=\"xxs\">\n <StyledComposerInput\n ref={input}\n onChange={handleChange}\n style={{ ...heightProps }}\n value={inputValue}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n aria-label=\"Message to send\"\n data-testid=\"chat-composer-textarea\"\n />\n\n <Grid height=\"32px\" alignItems=\"center\">\n <StyledComposerButton\n buttonType=\"text\"\n icon={<PaperAirplane width={18} height={18} />}\n onClick={onSend}\n size=\"s\"\n disabled={!inputValue || buttonDisabled || hasError}\n data-testid=\"chat-composer-send-button\"\n aria-label=\"Send\"\n innerRef={inputSend}\n />\n </Grid>\n </Grid>\n <StyledComposerInput\n ref={inputSize}\n style={{\n height: 32,\n visibility: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: input.current?.clientWidth,\n }}\n onChange={handleChange}\n value={inputValue}\n // maxLength={inputMaxLength}\n />\n <Grid cols={['1fr', '24px']} justifyContent=\"flex-end\" alignItems=\"center\" gutter=\"xxs\" pb=\"xxs\">\n <StyledCounterArea hasError={hasError} data-testid=\"composer-counter-area\">\n {inputMaxLength && hasError ? (\n <>\n <StyledCounterErrorA11y role=\"alert\">\n {maxLengthMessage || `You have exceeded the character limit by ${inputLength - inputMaxLength}`}\n </StyledCounterErrorA11y>\n {maxLengthMessage || `Please limit to less than ${inputMaxLength} characters. `}\n </>\n ) : (\n ''\n )}\n {inputMaxLength ? ` ${inputLength} / ${inputMaxLength}` : ''}\n </StyledCounterArea>\n <Grid />\n </Grid>\n </StyledChatContainerContentComposer>\n );\n};\n\nChatComposer.propTypes = composerProps;\nChatComposer.defaultProps = defaultComposerPros;\nconst ChatComposerWithSchema = describe(ChatComposer);\nChatComposerWithSchema.propTypes = composerProps;\n\nexport { ChatComposer, ChatComposerWithSchema };\n"],"names":["ChatComposer","props","useValidateProps","ChatComposerWithSchema","toJSON","inputValue","onChange","onResize","onSend","onFocus","onBlur","onKeyDown","maxHeight","placeholder","inputMaxLength","maxLengthMessage","buttonDisabled","dataTestid","actionRef","input","React","useRef","inputSize","inputSend","useState","height","setHeight","internalMaxHeight","useMemo","showScroll","setShowScroll","useEffect","newHeight","current","scrollHeight","clientHeight","focusToComposer","focus","focusToSend","handleChange","useCallback","e","target","value","heightProps","overflow","inputLength","String","length","hasError","visibility","pointerEvents","position","top","width","clientWidth","propTypes","composerProps","defaultProps","defaultComposerPros","describe"],"mappings":"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"}
1
+ {"version":3,"file":"ChatContainerComposer.js","sources":["../../../../src/parts/chat-composer/ChatContainerComposer.tsx"],"sourcesContent":["/* eslint-disable max-lines */\nimport React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { describe } from 'react-desc';\nimport { PaperAirplane } from '@elliemae/ds-icons';\nimport {\n StyledChatContainerContentComposer,\n StyledComposerInput,\n StyledComposerButton,\n StyledCounterArea,\n StyledCounterErrorA11y,\n} from './styled';\nimport { useValidateProps } from './config/useValidateProps';\n\nimport { defaultComposerPros, composerProps, ChatComposerProps } from './props';\n\nconst ChatComposer = (props: ChatComposerProps): JSX.Element => {\n useValidateProps(props, ChatComposerWithSchema.toJSON());\n\n const {\n inputValue,\n onChange,\n onResize,\n onSend,\n onFocus,\n onBlur,\n onKeyDown,\n maxHeight = 300,\n placeholder,\n inputMaxLength,\n maxLengthMessage,\n buttonDisabled,\n dataTestid,\n actionRef,\n } = props;\n\n const input = React.useRef<HTMLTextAreaElement>();\n const inputSize = React.useRef<HTMLTextAreaElement>();\n const inputSend = React.useRef<HTMLButtonElement>();\n const [height, setHeight] = React.useState(32);\n const internalMaxHeight = React.useMemo(() => maxHeight - 24, [maxHeight]);\n const [showScroll, setShowScroll] = React.useState(true);\n\n React.useEffect(() => {\n const newHeight =\n inputSize.current?.scrollHeight > internalMaxHeight ? internalMaxHeight : inputSize.current?.scrollHeight;\n onResize(newHeight);\n setHeight(newHeight);\n setShowScroll(inputSize.current?.scrollHeight - inputSize.current?.clientHeight > 5);\n }, [inputValue, internalMaxHeight, onResize]);\n\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusToComposer = () => {\n input.current.focus();\n };\n actionRef.current.focusToSend = () => {\n inputSend.current.focus();\n };\n }\n }, [actionRef]);\n\n const handleChange = React.useCallback(\n (e) => {\n onChange(e.target.value);\n },\n [onChange],\n );\n const heightProps = { height, overflow: showScroll ? 'auto' : 'hidden' };\n\n const inputLength = String(inputValue || '').length;\n const hasError = React.useMemo(() => inputLength > inputMaxLength, [inputLength, inputMaxLength]);\n\n return (\n <StyledChatContainerContentComposer rows={['auto', '15px']} maxHeight={`${maxHeight}px`} data-testid={dataTestid}>\n <Grid cols={['1fr', '24px']} justifyContent=\"center\" alignItems=\"flex-end\" gutter=\"xxs\">\n <StyledComposerInput\n ref={input}\n onChange={handleChange}\n style={{ ...heightProps }}\n value={inputValue}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n aria-label=\"Message to send\"\n data-testid=\"chat-composer-textarea\"\n />\n\n <Grid height=\"32px\" alignItems=\"center\">\n <StyledComposerButton\n buttonType=\"text\"\n icon={<PaperAirplane width={18} height={18} />}\n onClick={onSend}\n size=\"s\"\n disabled={!inputValue || buttonDisabled || hasError}\n data-testid=\"chat-composer-send-button\"\n aria-label=\"Send\"\n innerRef={inputSend}\n />\n </Grid>\n </Grid>\n <StyledComposerInput\n ref={inputSize}\n style={{\n height: 32,\n visibility: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: input.current?.clientWidth,\n }}\n onChange={handleChange}\n value={inputValue}\n // maxLength={inputMaxLength}\n />\n <Grid cols={['1fr', '24px']} justifyContent=\"flex-end\" alignItems=\"center\" gutter=\"xxs\" pb=\"xxs\">\n <StyledCounterArea hasError={hasError} data-testid=\"composer-counter-area\">\n {inputMaxLength && hasError ? (\n <StyledCounterErrorA11y role=\"alert\">\n {maxLengthMessage ||\n `You have entered ${inputLength} characters and have exceeded the limit by ${\n inputLength - inputMaxLength\n }. Please limit to less than ${inputMaxLength} characters. `}\n </StyledCounterErrorA11y>\n ) : (\n ''\n )}\n {inputMaxLength ? ` ${inputLength} / ${inputMaxLength}` : ''}\n </StyledCounterArea>\n <Grid />\n </Grid>\n </StyledChatContainerContentComposer>\n );\n};\n\nChatComposer.propTypes = composerProps;\nChatComposer.defaultProps = defaultComposerPros;\nconst ChatComposerWithSchema = describe(ChatComposer);\nChatComposerWithSchema.propTypes = composerProps;\n\nexport { ChatComposer, ChatComposerWithSchema };\n"],"names":["ChatComposer","props","useValidateProps","ChatComposerWithSchema","toJSON","inputValue","onChange","onResize","onSend","onFocus","onBlur","onKeyDown","maxHeight","placeholder","inputMaxLength","maxLengthMessage","buttonDisabled","dataTestid","actionRef","input","React","useRef","inputSize","inputSend","useState","height","setHeight","internalMaxHeight","useMemo","showScroll","setShowScroll","useEffect","newHeight","current","scrollHeight","clientHeight","focusToComposer","focus","focusToSend","handleChange","useCallback","e","target","value","heightProps","overflow","inputLength","String","length","hasError","visibility","pointerEvents","position","top","width","clientWidth","propTypes","composerProps","defaultProps","defaultComposerPros","describe"],"mappings":"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"}
@@ -16,7 +16,7 @@ var StyledChatContainerContentComposer = /*#__PURE__*/styled(Grid).withConfig({
16
16
  });
17
17
  var StyledComposerInput = /*#__PURE__*/styled.textarea.withConfig({
18
18
  componentId: "sc-1ahwpce-1"
19
- })(["padding:", ";resize:none;min-height:32px;border-radius:2px;border:solid 1px #cbcfd7;color:#25292f;height:", ";min-width:244px;overflow-y:auto;font-size:13px;font-weight:400;line-height:1;transition:height 0.3s;&:focus{outline:none;border:1px solid ", ";box-shadow:inset 0 0 0 1px #8cc2ed;border-radius:2px;}"], function (props) {
19
+ })(["padding:", ";resize:none;min-height:32px;border-radius:2px;border:solid 1px #cbcfd7;color:#25292f;height:", ";min-width:244px;overflow-y:auto;font-size:13px;font-weight:400;line-height:1;transition:height 0.05s;&:focus{outline:none;border:1px solid ", ";box-shadow:inset 0 0 0 1px #8cc2ed;border-radius:2px;}"], function (props) {
20
20
  return props.theme.space.xxs;
21
21
  }, function (props) {
22
22
  return typeof props.height === 'number' ? "".concat(props.height, "px") : props.height;
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","sources":["../../../../src/parts/chat-composer/styled.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButton } from '@elliemae/ds-button';\nimport { TextAreaProps } from './props';\n\n// Composer\nexport const StyledChatContainerContentComposer = styled(Grid)`\n width: 100%;\n min-height: 56px;\n background: ${(props) => props.theme.colors.neutral['050']};\n padding: ${(props) => props.theme.space.xxs};\n padding-bottom: 3px;\n padding-top: 6px;\n padding-left: ${(props) => props.theme.space.xs};\n max-height: ${(props) => props.maxHeight};\n border-top: 1px solid #cbcfd7;\n`;\n\nexport const StyledComposerInput = styled.textarea<any>`\n padding: ${(props) => props.theme.space.xxs};\n resize: none;\n min-height: 32px;\n border-radius: 2px;\n border: solid 1px #cbcfd7;\n color: #25292f;\n height: ${(props: TextAreaProps) => (typeof props.height === 'number' ? `${props.height}px` : props.height)};\n min-width: 244px;\n overflow-y: auto;\n font-size: 13px;\n font-weight: 400;\n line-height: 1;\n transition: height 0.3s;\n &:focus {\n outline: none;\n border: 1px solid ${(props) => props.theme.colors.brand[600]};\n box-shadow: inset 0 0 0 1px #8cc2ed;\n border-radius: 2px;\n }\n`;\nexport const StyledComposerButton = styled(DSButton)`\n &:disabled {\n background: none;\n svg {\n fill: #5d6775;\n }\n }\n svg {\n fill: ${(props) => props.theme.colors.brand[600]};\n }\n &:focus {\n background: ${(props) => props.theme.colors.brand[200]};\n }\n`;\n\nexport const StyledCounterArea = styled(Grid)`\n text-align: right;\n font-size: 11px;\n height: 15px;\n align-items: center;\n font-style: italic;\n ${(props) => (props.hasError ? `color:${props.theme.colors.danger[900]};` : '')}\n position:relative;\n`;\n\nexport const StyledCounterErrorA11y = styled.span`\n width: 1px;\n height: 1px;\n position: absolute;\n clip: rect(1px, 1px, 1px, 1px);\n`;\n"],"names":["StyledChatContainerContentComposer","styled","Grid","props","theme","colors","neutral","space","xxs","xs","maxHeight","StyledComposerInput","textarea","height","brand","StyledComposerButton","DSButton","StyledCounterArea","hasError","danger","StyledCounterErrorA11y","span"],"mappings":";;;;AAKA;IACaA,kCAAkC,gBAAGC,MAAM,CAACC,IAAD,CAAT;AAAA;AAAA,mKAG/B,UAACC,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAH+B,EAIlC,UAACH,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBC,GAA7B;AAAA,CAJkC,EAO7B,UAACL,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBE,EAA7B;AAAA,CAP6B,EAQ/B,UAACN,KAAD;AAAA,SAAWA,KAAK,CAACO,SAAjB;AAAA,CAR+B;IAYlCC,mBAAmB,gBAAGV,MAAM,CAACW,QAAV;AAAA;AAAA,4TACnB,UAACT,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBC,GAA7B;AAAA,CADmB,EAOpB,UAACL,KAAD;AAAA,SAA2B,OAAOA,KAAK,CAACU,MAAb,KAAwB,QAAxB,aAAsCV,KAAK,CAACU,MAA5C,UAAyDV,KAAK,CAACU,MAA1F;AAAA,CAPoB,EAgBR,UAACV,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CAhBQ;IAqBnBC,oBAAoB,gBAAGd,MAAM,CAACe,QAAD,CAAT;AAAA;AAAA,+FAQrB,UAACb,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CARqB,EAWf,UAACX,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CAXe;IAepBG,iBAAiB,gBAAGhB,MAAM,CAACC,IAAD,CAAT;AAAA;AAAA,iHAM1B,UAACC,KAAD;AAAA,SAAYA,KAAK,CAACe,QAAN,mBAA0Bf,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBc,MAAnB,CAA0B,GAA1B,CAA1B,SAA8D,EAA1E;AAAA,CAN0B;IAUjBC,sBAAsB,gBAAGnB,MAAM,CAACoB,IAAV;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"styled.js","sources":["../../../../src/parts/chat-composer/styled.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButton } from '@elliemae/ds-button';\nimport { TextAreaProps } from './props';\n\n// Composer\nexport const StyledChatContainerContentComposer = styled(Grid)`\n width: 100%;\n min-height: 56px;\n background: ${(props) => props.theme.colors.neutral['050']};\n padding: ${(props) => props.theme.space.xxs};\n padding-bottom: 3px;\n padding-top: 6px;\n padding-left: ${(props) => props.theme.space.xs};\n max-height: ${(props) => props.maxHeight};\n border-top: 1px solid #cbcfd7;\n`;\n\nexport const StyledComposerInput = styled.textarea<any>`\n padding: ${(props) => props.theme.space.xxs};\n resize: none;\n min-height: 32px;\n border-radius: 2px;\n border: solid 1px #cbcfd7;\n color: #25292f;\n height: ${(props: TextAreaProps) => (typeof props.height === 'number' ? `${props.height}px` : props.height)};\n min-width: 244px;\n overflow-y: auto;\n font-size: 13px;\n font-weight: 400;\n line-height: 1;\n transition: height 0.05s;\n &:focus {\n outline: none;\n border: 1px solid ${(props) => props.theme.colors.brand[600]};\n box-shadow: inset 0 0 0 1px #8cc2ed;\n border-radius: 2px;\n }\n`;\nexport const StyledComposerButton = styled(DSButton)`\n &:disabled {\n background: none;\n svg {\n fill: #5d6775;\n }\n }\n svg {\n fill: ${(props) => props.theme.colors.brand[600]};\n }\n &:focus {\n background: ${(props) => props.theme.colors.brand[200]};\n }\n`;\n\nexport const StyledCounterArea = styled(Grid)`\n text-align: right;\n font-size: 11px;\n height: 15px;\n align-items: center;\n font-style: italic;\n ${(props) => (props.hasError ? `color:${props.theme.colors.danger[900]};` : '')}\n position:relative;\n`;\n\nexport const StyledCounterErrorA11y = styled.span`\n width: 1px;\n height: 1px;\n position: absolute;\n clip: rect(1px, 1px, 1px, 1px);\n`;\n"],"names":["StyledChatContainerContentComposer","styled","Grid","props","theme","colors","neutral","space","xxs","xs","maxHeight","StyledComposerInput","textarea","height","brand","StyledComposerButton","DSButton","StyledCounterArea","hasError","danger","StyledCounterErrorA11y","span"],"mappings":";;;;AAKA;IACaA,kCAAkC,gBAAGC,MAAM,CAACC,IAAD,CAAT;AAAA;AAAA,mKAG/B,UAACC,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAH+B,EAIlC,UAACH,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBC,GAA7B;AAAA,CAJkC,EAO7B,UAACL,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBE,EAA7B;AAAA,CAP6B,EAQ/B,UAACN,KAAD;AAAA,SAAWA,KAAK,CAACO,SAAjB;AAAA,CAR+B;IAYlCC,mBAAmB,gBAAGV,MAAM,CAACW,QAAV;AAAA;AAAA,6TACnB,UAACT,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYG,KAAZ,CAAkBC,GAA7B;AAAA,CADmB,EAOpB,UAACL,KAAD;AAAA,SAA2B,OAAOA,KAAK,CAACU,MAAb,KAAwB,QAAxB,aAAsCV,KAAK,CAACU,MAA5C,UAAyDV,KAAK,CAACU,MAA1F;AAAA,CAPoB,EAgBR,UAACV,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CAhBQ;IAqBnBC,oBAAoB,gBAAGd,MAAM,CAACe,QAAD,CAAT;AAAA;AAAA,+FAQrB,UAACb,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CARqB,EAWf,UAACX,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBS,KAAnB,CAAyB,GAAzB,CAAX;AAAA,CAXe;IAepBG,iBAAiB,gBAAGhB,MAAM,CAACC,IAAD,CAAT;AAAA;AAAA,iHAM1B,UAACC,KAAD;AAAA,SAAYA,KAAK,CAACe,QAAN,mBAA0Bf,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBc,MAAnB,CAA0B,GAA1B,CAA1B,SAA8D,EAA1E;AAAA,CAN0B;IAUjBC,sBAAsB,gBAAGnB,MAAM,CAACoB,IAAV;AAAA;AAAA;;;;"}
@@ -52,7 +52,6 @@ var ChatContainer = function ChatContainer(props) {
52
52
  onComposerResize = _props$composerProps.onResize,
53
53
  onComposerKeyDown = _props$composerProps.onKeyDown,
54
54
  actionRef = props.actionRef,
55
- autoScroll = props.autoScroll,
56
55
  device = props.device,
57
56
  isLoading = props.isLoading,
58
57
  hasMoreItems = props.hasMoreItems,
@@ -69,12 +68,18 @@ var ChatContainer = function ChatContainer(props) {
69
68
  var onResize = React.useCallback(function (height) {
70
69
  if (onComposerResize) onComposerResize(height);
71
70
 
72
- if (autoScroll) {
73
- listRef.current.scrollToIndex(messagesListProps.messages.length - 1, {
74
- align: 'end'
75
- });
71
+ if (height > 30) {
72
+ /*
73
+ setTimeout is used to equal the animation duration from the
74
+ composer text area when increase its size
75
+ */
76
+ setTimeout(function () {
77
+ actionRef.current.scrollToIndex(messagesListProps.messages.length - 1, {
78
+ align: 'start'
79
+ });
80
+ }, 50);
76
81
  }
77
- }, [onComposerResize, messagesListProps.messages, autoScroll]);
82
+ }, [onComposerResize, messagesListProps.messages, actionRef]);
78
83
  var Container = device === 'desktop' ? StyledChatContainerContent : MobileStyledChatContainerContent;
79
84
  var handleTabs = React.useCallback(function (e) {
80
85
  if (onComposerKeyDown) onComposerKeyDown(e);else {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatContainer.js","sources":["../../../../src/parts/chat-container/ChatContainer.tsx"],"sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable complexity */\nimport React from 'react';\nimport { noop } from 'lodash';\nimport { describe } from 'react-desc';\nimport DSIndeterminateProgressIndicator from '@elliemae/ds-indeterminate-progress-indicator';\nimport DSBanner, { BANNER_TYPES } from '@elliemae/ds-banner';\nimport { ChatComposer } from '../chat-composer';\nimport { ChatContainerMessagesList } from '../chat-container-messages-list';\nimport { ChatContainerProps, defaultProps, containerProps } from './props';\nimport { StyledChatContainerContent, StyledIndicatorContainer, MobileStyledChatContainerContent } from './styled';\nimport { useValidateProps } from './config/useValidateProps';\n\nconst ChatContainer = (props: ChatContainerProps): JSX.Element => {\n useValidateProps(props, ChatContainerWithSchema.toTypescript());\n\n const {\n sendingText,\n sendingMessages,\n bannerPosition,\n bannerProps,\n messagesListProps,\n composerProps,\n composerProps: { onResize: onComposerResize, onKeyDown: onComposerKeyDown },\n actionRef,\n autoScroll,\n device,\n isLoading,\n hasMoreItems,\n getMoreMessages,\n ariaLabel\n } = props;\n const bannerRef = React.useRef({ focusOnWrapper: noop, focusOnLink: noop });\n const containerRef = React.useRef<HTMLElement>();\n const listRef = React.useRef({ scrollToIndex: noop });\n const onResize = React.useCallback(\n (height: number) => {\n if (onComposerResize) onComposerResize(height);\n if (autoScroll) {\n listRef.current.scrollToIndex(messagesListProps.messages.length - 1, {\n align: 'end',\n });\n }\n },\n [onComposerResize, messagesListProps.messages, autoScroll],\n );\n const Container = device === 'desktop' ? StyledChatContainerContent : MobileStyledChatContainerContent;\n const handleTabs = React.useCallback(\n (e) => {\n if (onComposerKeyDown) onComposerKeyDown(e);\n else {\n const ref = actionRef || listRef;\n if (e.shiftKey && e.key === 'Tab') {\n e.preventDefault();\n if (['top', 'bottom'].includes(bannerPosition)) {\n bannerRef.current.focusOnWrapper();\n } else {\n const last = ref.current.getMessagesInView().pop();\n ref.current.focusToIndexWithoutScroll(last);\n }\n }\n }\n },\n [actionRef, onComposerKeyDown, bannerPosition],\n );\n\n // Map actions\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusOnBanner = bannerRef.current.focusOnWrapper;\n actionRef.current.focusOnBannerLink = bannerRef.current.focusOnLink;\n }\n }, [actionRef]);\n\n return (\n <Container rows={['minmax(0, 1fr)', 'auto']} ref={containerRef} role=\"region\" aria-label={ariaLabel}>\n <div style={{ position: 'relative', overflow: 'hidden' }}>\n <ChatContainerMessagesList\n {...messagesListProps}\n actionRef={actionRef || listRef}\n isLoading={isLoading}\n hasMoreItems={hasMoreItems}\n getMoreMessages={getMoreMessages}\n sendingMessages={sendingMessages}\n sendingText={sendingText}\n bannerPosition={bannerPosition}\n bannerRef={bannerRef}\n />\n {['top', 'bottom'].includes(isLoading) ? (\n <StyledIndicatorContainer isLoading={isLoading} data-testid=\"ds-chat-loading-indicator\">\n <DSIndeterminateProgressIndicator processing title=\"Loading\" />\n </StyledIndicatorContainer>\n ) : null}\n <StyledIndicatorContainer linear isLoading={bannerPosition}>\n <DSBanner\n showCloseButton\n label={bannerProps.label || 'Unread messages'}\n containerProps={{ id: 'ds-chat-banner' }}\n actionLink={{\n label: bannerProps.viewLabel || 'View',\n onClick: bannerProps.onView,\n }}\n onClose={bannerProps.onClose}\n isOpen\n type={bannerProps.type || BANNER_TYPES.INFO}\n actionRef={bannerRef}\n />\n </StyledIndicatorContainer>\n {sendingMessages && sendingMessages.length > 0 ? (\n <StyledIndicatorContainer isLoading=\"bottom\" linear data-testid=\"ds-chat-loading-indicator\">\n <DSIndeterminateProgressIndicator processing title=\"Loading\" lineOnly />\n </StyledIndicatorContainer>\n ) : null}\n </div>\n <ChatComposer\n {...composerProps}\n onKeyDown={handleTabs}\n onResize={onResize}\n maxHeight={(containerRef.current?.clientHeight || 0) / 2}\n actionRef={actionRef || listRef}\n />\n </Container>\n );\n};\n\nChatContainer.propTypes = containerProps;\nChatContainer.defaultProps = defaultProps;\nconst ChatContainerWithSchema = describe(ChatContainer);\nChatContainerWithSchema.propTypes = containerProps;\n\nexport { ChatContainer, ChatContainerWithSchema };\n"],"names":["ChatContainer","props","useValidateProps","ChatContainerWithSchema","toTypescript","sendingText","sendingMessages","bannerPosition","bannerProps","messagesListProps","composerProps","onComposerResize","onResize","onComposerKeyDown","onKeyDown","actionRef","autoScroll","device","isLoading","hasMoreItems","getMoreMessages","ariaLabel","bannerRef","React","useRef","focusOnWrapper","noop","focusOnLink","containerRef","listRef","scrollToIndex","useCallback","height","current","messages","length","align","Container","StyledChatContainerContent","MobileStyledChatContainerContent","handleTabs","e","ref","shiftKey","key","preventDefault","includes","last","getMessagesInView","pop","focusToIndexWithoutScroll","useEffect","focusOnBanner","focusOnBannerLink","position","overflow","label","id","viewLabel","onClick","onView","onClose","type","BANNER_TYPES","INFO","clientHeight","propTypes","containerProps","defaultProps","describe"],"mappings":"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"}
1
+ {"version":3,"file":"ChatContainer.js","sources":["../../../../src/parts/chat-container/ChatContainer.tsx"],"sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable complexity */\nimport React from 'react';\nimport { noop } from 'lodash';\nimport { describe } from 'react-desc';\nimport DSIndeterminateProgressIndicator from '@elliemae/ds-indeterminate-progress-indicator';\nimport DSBanner, { BANNER_TYPES } from '@elliemae/ds-banner';\nimport { ChatComposer } from '../chat-composer';\nimport { ChatContainerMessagesList } from '../chat-container-messages-list';\nimport { ChatContainerProps, defaultProps, containerProps } from './props';\nimport { StyledChatContainerContent, StyledIndicatorContainer, MobileStyledChatContainerContent } from './styled';\nimport { useValidateProps } from './config/useValidateProps';\n\nconst ChatContainer = (props: ChatContainerProps): JSX.Element => {\n useValidateProps(props, ChatContainerWithSchema.toTypescript());\n\n const {\n sendingText,\n sendingMessages,\n bannerPosition,\n bannerProps,\n messagesListProps,\n composerProps,\n composerProps: { onResize: onComposerResize, onKeyDown: onComposerKeyDown },\n actionRef,\n device,\n isLoading,\n hasMoreItems,\n getMoreMessages,\n ariaLabel,\n } = props;\n const bannerRef = React.useRef({ focusOnWrapper: noop, focusOnLink: noop });\n const containerRef = React.useRef<HTMLElement>();\n const listRef = React.useRef({ scrollToIndex: noop });\n const onResize = React.useCallback(\n (height: number) => {\n if (onComposerResize) onComposerResize(height);\n if (height > 30) {\n /*\n setTimeout is used to equal the animation duration from the \n composer text area when increase its size\n */\n setTimeout(() => {\n actionRef.current.scrollToIndex(messagesListProps.messages.length - 1, {\n align: 'start',\n });\n }, 50);\n }\n },\n [onComposerResize, messagesListProps.messages, actionRef],\n );\n const Container = device === 'desktop' ? StyledChatContainerContent : MobileStyledChatContainerContent;\n const handleTabs = React.useCallback(\n (e) => {\n if (onComposerKeyDown) onComposerKeyDown(e);\n else {\n const ref = actionRef || listRef;\n if (e.shiftKey && e.key === 'Tab') {\n e.preventDefault();\n if (['top', 'bottom'].includes(bannerPosition)) {\n bannerRef.current.focusOnWrapper();\n } else {\n const last = ref.current.getMessagesInView().pop();\n ref.current.focusToIndexWithoutScroll(last);\n }\n }\n }\n },\n [actionRef, onComposerKeyDown, bannerPosition],\n );\n\n // Map actions\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusOnBanner = bannerRef.current.focusOnWrapper;\n actionRef.current.focusOnBannerLink = bannerRef.current.focusOnLink;\n }\n }, [actionRef]);\n\n return (\n <Container rows={['minmax(0, 1fr)', 'auto']} ref={containerRef} role=\"region\" aria-label={ariaLabel}>\n <div style={{ position: 'relative', overflow: 'hidden' }}>\n <ChatContainerMessagesList\n {...messagesListProps}\n actionRef={actionRef || listRef}\n isLoading={isLoading}\n hasMoreItems={hasMoreItems}\n getMoreMessages={getMoreMessages}\n sendingMessages={sendingMessages}\n sendingText={sendingText}\n bannerPosition={bannerPosition}\n bannerRef={bannerRef}\n />\n {['top', 'bottom'].includes(isLoading) ? (\n <StyledIndicatorContainer isLoading={isLoading} data-testid=\"ds-chat-loading-indicator\">\n <DSIndeterminateProgressIndicator processing title=\"Loading\" />\n </StyledIndicatorContainer>\n ) : null}\n <StyledIndicatorContainer linear isLoading={bannerPosition}>\n <DSBanner\n showCloseButton\n label={bannerProps.label || 'Unread messages'}\n containerProps={{ id: 'ds-chat-banner' }}\n actionLink={{\n label: bannerProps.viewLabel || 'View',\n onClick: bannerProps.onView,\n }}\n onClose={bannerProps.onClose}\n isOpen\n type={bannerProps.type || BANNER_TYPES.INFO}\n actionRef={bannerRef}\n />\n </StyledIndicatorContainer>\n {sendingMessages && sendingMessages.length > 0 ? (\n <StyledIndicatorContainer isLoading=\"bottom\" linear data-testid=\"ds-chat-loading-indicator\">\n <DSIndeterminateProgressIndicator processing title=\"Loading\" lineOnly />\n </StyledIndicatorContainer>\n ) : null}\n </div>\n <ChatComposer\n {...composerProps}\n onKeyDown={handleTabs}\n onResize={onResize}\n maxHeight={(containerRef.current?.clientHeight || 0) / 2}\n actionRef={actionRef || listRef}\n />\n </Container>\n );\n};\n\nChatContainer.propTypes = containerProps;\nChatContainer.defaultProps = defaultProps;\nconst ChatContainerWithSchema = describe(ChatContainer);\nChatContainerWithSchema.propTypes = containerProps;\n\nexport { ChatContainer, ChatContainerWithSchema };\n"],"names":["ChatContainer","props","useValidateProps","ChatContainerWithSchema","toTypescript","sendingText","sendingMessages","bannerPosition","bannerProps","messagesListProps","composerProps","onComposerResize","onResize","onComposerKeyDown","onKeyDown","actionRef","device","isLoading","hasMoreItems","getMoreMessages","ariaLabel","bannerRef","React","useRef","focusOnWrapper","noop","focusOnLink","containerRef","listRef","scrollToIndex","useCallback","height","setTimeout","current","messages","length","align","Container","StyledChatContainerContent","MobileStyledChatContainerContent","handleTabs","e","ref","shiftKey","key","preventDefault","includes","last","getMessagesInView","pop","focusToIndexWithoutScroll","useEffect","focusOnBanner","focusOnBannerLink","position","overflow","label","id","viewLabel","onClick","onView","onClose","type","BANNER_TYPES","INFO","clientHeight","propTypes","containerProps","defaultProps","describe"],"mappings":"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"}
@@ -17,7 +17,7 @@ var StyledChatContainerContent = /*#__PURE__*/styled(Grid).withConfig({
17
17
  });
18
18
  var StyledIndicatorContainer = /*#__PURE__*/styled.div.withConfig({
19
19
  componentId: "sc-d732wo-1"
20
- })(["transition:0.4s ease-in-out;position:absolute;visibility:hidden;pointer-events:none;width:100%;padding:0 ", ";left:0;right:0;background:", ";", " ", ""], function (props) {
20
+ })(["transition:0.4s ease-in-out;position:absolute;visibility:hidden;pointer-events:none;width:100%;padding:0 ", ";left:0;right:0;background:", ";", " ", " & div,a{font-size:13px;}"], function (props) {
21
21
  return !props.linear ? props.theme.space.xxs : 0;
22
22
  }, function (props) {
23
23
  return props.theme.colors.neutral['000'];
@@ -28,7 +28,7 @@ var StyledIndicatorContainer = /*#__PURE__*/styled.div.withConfig({
28
28
  });
29
29
  var MobileStyledChatContainerContent = /*#__PURE__*/styled(StyledChatContainerContent).withConfig({
30
30
  componentId: "sc-d732wo-2"
31
- })(["", ",", "{font-size:16px;}", "{font-size:13px;}", "{background-color:#fff;box-shadow:-0 1px 3px rgba(53,60,70,0.8);}", ",", "{font-size:16px;text-align:left;}", "{font-size:13px;}", "{font-size:16px;}"], StyledTitleLeftBubble, StyleBodyWrapper, StyledTitleRightBubble, Wrapper, Title, Message, Time, StyledComposerInput);
31
+ })(["", ",", "{font-size:16px;}", "{font-size:13px;}", "{background-color:#fff;box-shadow:-0 1px 3px rgba(53,60,70,0.8);}", ",", "{font-size:16px;text-align:left;}", "{font-size:13px;}", "{font-size:16px;}", "{font-size:16px;}"], StyledTitleLeftBubble, StyleBodyWrapper, StyledTitleRightBubble, Wrapper, Title, Message, Time, StyledComposerInput, StyledIndicatorContainer);
32
32
 
33
33
  export { CONTAINER_WIDTH, MobileStyledChatContainerContent, StyledChatContainerContent, StyledIndicatorContainer };
34
34
  //# sourceMappingURL=styled.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","sources":["../../../../src/parts/chat-container/styled.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Grid } from '@elliemae/ds-grid';\nimport { StyledTitleRightBubble, StyledTitleLeftBubble, StyleBodyWrapper } from '../bubble/styled';\nimport { StyledComposerInput } from '../chat-composer/styled';\nimport { Wrapper, Title, Time, Message } from '../system-message/style';\nexport const CONTAINER_WIDTH = 300;\n\nexport const StyledChatContainerContent = styled(Grid)`\n height: 100%;\n min-width: ${CONTAINER_WIDTH}px;\n overflow: hidden;\n background: ${(props) => props.theme.colors.neutral['050']};\n position: relative;\n`;\nexport const StyledIndicatorContainer = styled.div<{\n isLoading?: 'top' | 'bottom';\n linear?: boolean;\n}>`\n transition: 0.4s ease-in-out;\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: 100%;\n padding: 0 ${(props) => (!props.linear ? props.theme.space.xxs : 0)};\n left: 0;\n right: 0;\n background: ${(props) => props.theme.colors.neutral['000']};\n ${(props) =>\n props.isLoading === 'top'\n ? `\n top: -41px;\n transform: translate(0, 41px);\n visibility: visible;\n pointer-events: auto\n `\n : ''}\n ${(props) =>\n props.isLoading === 'bottom'\n ? `\n bottom: -41px;\n transform: translate(0, -41px);\n visibility: visible;\n pointer-events: auto;\n `\n : ''}\n`;\n\nexport const MobileStyledChatContainerContent = styled(StyledChatContainerContent)`\n ${StyledTitleLeftBubble},\n ${StyleBodyWrapper} {\n font-size: 16px;\n }\n\n ${StyledTitleRightBubble} {\n font-size: 13px;\n }\n\n ${Wrapper} {\n background-color: #fff;\n box-shadow: -0 1px 3px rgba(53, 60, 70, 0.8);\n }\n\n ${Title},\n ${Message} {\n font-size: 16px;\n text-align: left;\n }\n\n ${Time} {\n font-size: 13px;\n }\n\n ${StyledComposerInput} {\n font-size: 16px;\n }\n`;\n"],"names":["CONTAINER_WIDTH","StyledChatContainerContent","styled","Grid","props","theme","colors","neutral","StyledIndicatorContainer","div","linear","space","xxs","isLoading","MobileStyledChatContainerContent","StyledTitleLeftBubble","StyleBodyWrapper","StyledTitleRightBubble","Wrapper","Title","Message","Time","StyledComposerInput"],"mappings":";;;;;;;;;;;IAKaA,eAAe,GAAG;IAElBC,0BAA0B,gBAAGC,MAAM,CAACC,IAAD,CAAT;AAAA;AAAA,wFAExBH,eAFwB,EAIvB,UAACI,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAJuB;IAO1BC,wBAAwB,gBAAGN,MAAM,CAACO,GAAV;AAAA;AAAA,+JAStB,UAACL,KAAD;AAAA,SAAY,CAACA,KAAK,CAACM,MAAP,GAAgBN,KAAK,CAACC,KAAN,CAAYM,KAAZ,CAAkBC,GAAlC,GAAwC,CAApD;AAAA,CATsB,EAYrB,UAACR,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAZqB,EAajC,UAACH,KAAD;AAAA,SACAA,KAAK,CAACS,SAAN,KAAoB,KAApB,6GAOI,EARJ;AAAA,CAbiC,EAsBjC,UAACT,KAAD;AAAA,SACAA,KAAK,CAACS,SAAN,KAAoB,QAApB,kHAOI,EARJ;AAAA,CAtBiC;IAiCxBC,gCAAgC,gBAAGZ,MAAM,CAACD,0BAAD,CAAT;AAAA;AAAA,iNACzCc,qBADyC,EAEzCC,gBAFyC,EAMzCC,sBANyC,EAUzCC,OAVyC,EAezCC,KAfyC,EAgBzCC,OAhByC,EAqBzCC,IArByC,EAyBzCC,mBAzByC;;;;"}
1
+ {"version":3,"file":"styled.js","sources":["../../../../src/parts/chat-container/styled.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Grid } from '@elliemae/ds-grid';\nimport { StyledTitleRightBubble, StyledTitleLeftBubble, StyleBodyWrapper } from '../bubble/styled';\nimport { StyledComposerInput } from '../chat-composer/styled';\nimport { Wrapper, Title, Time, Message } from '../system-message/style';\nexport const CONTAINER_WIDTH = 300;\n\nexport const StyledChatContainerContent = styled(Grid)`\n height: 100%;\n min-width: ${CONTAINER_WIDTH}px;\n overflow: hidden;\n background: ${(props) => props.theme.colors.neutral['050']};\n position: relative;\n`;\nexport const StyledIndicatorContainer = styled.div<{\n isLoading?: 'top' | 'bottom';\n linear?: boolean;\n}>`\n transition: 0.4s ease-in-out;\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: 100%;\n padding: 0 ${(props) => (!props.linear ? props.theme.space.xxs : 0)};\n left: 0;\n right: 0;\n background: ${(props) => props.theme.colors.neutral['000']};\n ${(props) =>\n props.isLoading === 'top'\n ? `\n top: -41px;\n transform: translate(0, 41px);\n visibility: visible;\n pointer-events: auto\n `\n : ''}\n ${(props) =>\n props.isLoading === 'bottom'\n ? `\n bottom: -41px;\n transform: translate(0, -41px);\n visibility: visible;\n pointer-events: auto;\n `\n : ''}\n\n & div,a {\n font-size: 13px;\n }\n`;\n\nexport const MobileStyledChatContainerContent = styled(StyledChatContainerContent)`\n ${StyledTitleLeftBubble},\n ${StyleBodyWrapper} {\n font-size: 16px;\n }\n\n ${StyledTitleRightBubble} {\n font-size: 13px;\n }\n\n ${Wrapper} {\n background-color: #fff;\n box-shadow: -0 1px 3px rgba(53, 60, 70, 0.8);\n }\n\n ${Title},\n ${Message} {\n font-size: 16px;\n text-align: left;\n }\n\n ${Time} {\n font-size: 13px;\n }\n\n ${StyledComposerInput} {\n font-size: 16px;\n }\n\n ${StyledIndicatorContainer} {\n font-size: 16px;\n }\n`;\n"],"names":["CONTAINER_WIDTH","StyledChatContainerContent","styled","Grid","props","theme","colors","neutral","StyledIndicatorContainer","div","linear","space","xxs","isLoading","MobileStyledChatContainerContent","StyledTitleLeftBubble","StyleBodyWrapper","StyledTitleRightBubble","Wrapper","Title","Message","Time","StyledComposerInput"],"mappings":";;;;;;;;;;;IAKaA,eAAe,GAAG;IAElBC,0BAA0B,gBAAGC,MAAM,CAACC,IAAD,CAAT;AAAA;AAAA,wFAExBH,eAFwB,EAIvB,UAACI,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAJuB;IAO1BC,wBAAwB,gBAAGN,MAAM,CAACO,GAAV;AAAA;AAAA,wLAStB,UAACL,KAAD;AAAA,SAAY,CAACA,KAAK,CAACM,MAAP,GAAgBN,KAAK,CAACC,KAAN,CAAYM,KAAZ,CAAkBC,GAAlC,GAAwC,CAApD;AAAA,CATsB,EAYrB,UAACR,KAAD;AAAA,SAAWA,KAAK,CAACC,KAAN,CAAYC,MAAZ,CAAmBC,OAAnB,CAA2B,KAA3B,CAAX;AAAA,CAZqB,EAajC,UAACH,KAAD;AAAA,SACAA,KAAK,CAACS,SAAN,KAAoB,KAApB,6GAOI,EARJ;AAAA,CAbiC,EAsBjC,UAACT,KAAD;AAAA,SACAA,KAAK,CAACS,SAAN,KAAoB,QAApB,kHAOI,EARJ;AAAA,CAtBiC;IAqCxBC,gCAAgC,gBAAGZ,MAAM,CAACD,0BAAD,CAAT;AAAA;AAAA,sOACzCc,qBADyC,EAEzCC,gBAFyC,EAMzCC,sBANyC,EAUzCC,OAVyC,EAezCC,KAfyC,EAgBzCC,OAhByC,EAqBzCC,IArByC,EAyBzCC,mBAzByC,EA6BzCd,wBA7ByC;;;;"}
@@ -31,12 +31,19 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
31
31
 
32
32
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
33
 
34
- var getPadding = function getPadding(hasMoreItems) {
34
+ var getPadding = function getPadding(_ref) {
35
+ var hasMoreItems = _ref.hasMoreItems,
36
+ bannerPosition = _ref.bannerPosition,
37
+ isLoading = _ref.isLoading;
35
38
  var padding = {
36
39
  paddingStart: 0,
37
40
  paddingEnd: -5
38
41
  };
39
- if (hasMoreItems === 'top') padding.paddingStart = 42;else if (hasMoreItems === 'bottom') padding.paddingEnd = 42;
42
+ if ([hasMoreItems, bannerPosition, isLoading].some(function (item) {
43
+ return item === 'top';
44
+ })) padding.paddingStart = 42;else if ([hasMoreItems, bannerPosition, isLoading].some(function (item) {
45
+ return item === 'bottom';
46
+ })) padding.paddingEnd = 42;
40
47
  return padding;
41
48
  };
42
49
 
@@ -61,7 +68,11 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
61
68
  size: messages.length,
62
69
  parentRef: virtualListRef,
63
70
  overscan: 15
64
- }, getPadding(hasMoreItems)), {}, {
71
+ }, getPadding({
72
+ hasMoreItems: hasMoreItems,
73
+ bannerPosition: bannerPosition,
74
+ isLoading: isLoading
75
+ })), {}, {
65
76
  estimateSize: React.useCallback(function () {
66
77
  return 80;
67
78
  }, [])
@@ -172,25 +183,25 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
172
183
  break;
173
184
 
174
185
  case 'Tab':
175
- e.preventDefault();
176
-
177
186
  if (hasMoreItems === 'bottom' && !e.shiftKey) {
178
187
  var _loadMoreRef$current;
179
188
 
189
+ e.preventDefault();
180
190
  (_loadMoreRef$current = loadMoreRef.current) === null || _loadMoreRef$current === void 0 ? void 0 : _loadMoreRef$current.focus();
181
191
  } else if (hasMoreItems === 'top' && e.shiftKey) {
182
192
  var _loadMoreRef$current2;
183
193
 
194
+ e.preventDefault();
184
195
  (_loadMoreRef$current2 = loadMoreRef.current) === null || _loadMoreRef$current2 === void 0 ? void 0 : _loadMoreRef$current2.focus();
185
196
  } else if (!e.shiftKey) {
186
197
  if (bannerPosition) {
198
+ e.preventDefault();
187
199
  bannerRef.current.focusOnWrapper();
188
- } else {
189
- actionRef.current.focusToComposer();
190
200
  }
191
201
  } else {
192
202
  var _virtualListRef$curre4;
193
203
 
204
+ e.preventDefault();
194
205
  (_virtualListRef$curre4 = virtualListRef.current) === null || _virtualListRef$curre4 === void 0 ? void 0 : _virtualListRef$curre4.focus();
195
206
  }
196
207
 
@@ -290,7 +301,7 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
290
301
  key: "ds-chat-bubble-".concat(index, "-").concat(row.dsId, "-").concat(row.type),
291
302
  style: style,
292
303
  ref: measureRef,
293
- tabIndex: 0,
304
+ tabIndex: -1,
294
305
  onKeyDown: handleKey,
295
306
  role: "listitem"
296
307
  }, /*#__PURE__*/React.createElement(StyledWrapperListItem, {
@@ -307,12 +318,13 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
307
318
  "data-testid": "chat-thread-container",
308
319
  tabIndex: 0,
309
320
  "aria-live": "polite",
321
+ "aria-relevant": "additions",
310
322
  ref: virtualListRef,
311
323
  role: "list",
312
324
  onKeyDown: handleListKey
313
325
  }, /*#__PURE__*/React.createElement(StyledChatContainerContentListScroll, {
314
326
  height: "".concat(totalSize, "px")
315
- }, render, !isLoading && hasMoreItems ? /*#__PURE__*/React.createElement(StyledLoadMoreContainer, {
327
+ }, !isLoading && hasMoreItems ? /*#__PURE__*/React.createElement(StyledLoadMoreContainer, {
316
328
  hasMoreItems: hasMoreItems
317
329
  }, /*#__PURE__*/React.createElement(DSButton, {
318
330
  labelText: "Load More",
@@ -320,7 +332,7 @@ var ChatContainerMessagesList = function ChatContainerMessagesList(props) {
320
332
  onClick: getMoreMessages,
321
333
  "data-testid": "ds-chat-load-more-btn",
322
334
  innerRef: loadMoreRef
323
- })) : null)));
335
+ })) : null, render)));
324
336
  };
325
337
 
326
338
  ChatContainerMessagesList.propTypes = listProps;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatContainerMessagesList.js","sources":["../../../../src/parts/chat-container-messages-list/ChatContainerMessagesList.tsx"],"sourcesContent":["/* eslint-disable complexity */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n/* eslint-disable max-lines */\nimport React, { CSSProperties } from 'react';\nimport { describe } from 'react-desc';\nimport { useVirtual } from 'react-virtual';\nimport DSButton from '@elliemae/ds-button';\nimport { debounce } from 'lodash';\nimport { ChatBubble, BUBBLE_TYPES } from '../bubble';\nimport { MessageDelimiter } from '../message-delimiter';\nimport { SystemMessage } from '../system-message';\nimport {\n StyledWrapperListItem,\n StyledChatContainerContentList,\n StyledChatContainerContentListScroll,\n StyledWrapper,\n StyledLoadMoreContainer,\n ListItem,\n} from './styled';\nimport { defaultProps, listProps, ChatContainerMessagesListProps } from './props';\nimport { useValidateProps } from './config/useValidateProps';\n\nconst getPadding = (hasMoreItems) => {\n const padding = {\n paddingStart: 0,\n paddingEnd: -5,\n };\n if (hasMoreItems === 'top') padding.paddingStart = 42;\n else if (hasMoreItems === 'bottom') padding.paddingEnd = 42;\n return padding;\n};\n\nconst ChatContainerMessagesList = (props: ChatContainerMessagesListProps): JSX.Element => {\n useValidateProps(props, ChatContainerMessagesListWithSchema.toTypescript());\n\n const {\n sendingText,\n bannerPosition,\n sendingMessages,\n messages,\n actionRef,\n onScrollEnds,\n getMoreMessages,\n hasMoreItems,\n isLoading,\n bannerRef,\n } = props;\n const pendingOnScroll = React.useRef(false);\n const loadMoreRef = React.useRef(null);\n const virtualListRef = React.useRef<HTMLDivElement>();\n // estimateSize should not be really required given what was stated on\n // https://github.com/tannerlinsley/react-virtual/issues/23\n const {\n scrollToIndex: vScroll,\n totalSize,\n virtualItems,\n } = useVirtual({\n size: messages.length,\n parentRef: virtualListRef,\n overscan: 15,\n ...getPadding(hasMoreItems),\n estimateSize: React.useCallback(() => 80, []),\n });\n\n const debouncedScroll = React.useMemo(\n () =>\n debounce((): number[] => {\n if (document.visibilityState === 'hidden') {\n pendingOnScroll.current = true;\n return [];\n }\n if (!virtualListRef.current) return [];\n pendingOnScroll.current = false;\n const { bottom, top } = virtualListRef.current?.getBoundingClientRect();\n const list = virtualListRef.current.querySelectorAll(\n '[data-element=\"chat-element-list-item\"]',\n ) as NodeListOf<HTMLDivElement>;\n const indexList = [];\n list.forEach((item: HTMLDivElement) => {\n const { top: itemTop } = item.getBoundingClientRect();\n const itemPadding = 10;\n if (itemTop + itemPadding < bottom && itemTop + itemPadding > top) indexList.push(item.dataset.index);\n });\n if (onScrollEnds) onScrollEnds(indexList);\n return indexList;\n }, 500),\n [onScrollEnds],\n );\n\n const onScrollStop = React.useCallback(debouncedScroll, [debouncedScroll]);\n\n const onlyFocus = React.useCallback((index: number) => {\n setTimeout(() => {\n (virtualListRef.current.querySelector(`[data-index=\"${index}\"]`) as HTMLDivElement).focus();\n }, 300);\n }, []);\n\n const scrollAndFocus = React.useCallback(\n (index: number, b = { align: 'center' }) => {\n vScroll(index, b);\n onlyFocus(index);\n onScrollStop();\n },\n [onScrollStop, onlyFocus, vScroll],\n );\n\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.scrollToIndex = (a, b = { align: 'center' }) => {\n vScroll(a, b as any);\n onScrollStop();\n };\n actionRef.current.getMessagesInView = onScrollStop;\n actionRef.current.focusToIndex = (a, b = { align: 'center' } as ScrollToOptions) => {\n scrollAndFocus(a, b);\n };\n actionRef.current.focusToIndexWithoutScroll = onlyFocus;\n actionRef.current.focusToList = () => {\n virtualListRef.current?.focus();\n };\n }\n }, [actionRef, onScrollStop, onlyFocus, scrollAndFocus, vScroll]);\n\n const handleKey = React.useCallback(\n (e) => {\n const { key } = e;\n const index = Number(e.currentTarget.dataset.index);\n e.stopPropagation();\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n if (index > 0)\n (virtualListRef.current.querySelector(`[data-index=\"${index - 1}\"]`) as HTMLDivElement).focus();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (index < messages.length - 1) {\n (virtualListRef.current.querySelector(`[data-index=\"${index + 1}\"]`) as HTMLDivElement).focus();\n }\n break;\n case 'Home':\n e.preventDefault();\n scrollAndFocus(0);\n break;\n case 'End':\n e.preventDefault();\n scrollAndFocus(messages.length - 1);\n break;\n case 'Tab':\n e.preventDefault();\n if (hasMoreItems === 'bottom' && !e.shiftKey) {\n loadMoreRef.current?.focus();\n } else if (hasMoreItems === 'top' && e.shiftKey) {\n loadMoreRef.current?.focus();\n } else if (!e.shiftKey) {\n if (bannerPosition) {\n bannerRef.current.focusOnWrapper();\n } else {\n actionRef.current.focusToComposer();\n }\n } else {\n virtualListRef.current?.focus();\n }\n break;\n default:\n break;\n }\n },\n [actionRef, bannerRef, hasMoreItems, messages.length, bannerPosition, scrollAndFocus],\n );\n const handleListKey = React.useCallback(\n (e) => {\n const { key } = e;\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n onlyFocus(onScrollStop().shift());\n break;\n case 'ArrowDown':\n e.preventDefault();\n onlyFocus(onScrollStop().pop());\n break;\n case 'Home':\n e.preventDefault();\n scrollAndFocus(0);\n break;\n case 'End':\n e.preventDefault();\n scrollAndFocus(messages.length - 1);\n break;\n case 'Tab':\n if (document.activeElement !== loadMoreRef.current) {\n if (hasMoreItems === 'bottom' && !e.shiftKey) {\n e.preventDefault();\n loadMoreRef.current?.focus();\n } else if (hasMoreItems === 'top' && e.shiftKey) {\n // e.preventDefault();\n // loadMoreRef.current?.focus();\n } else if (!e.shiftKey) {\n e.preventDefault();\n actionRef.current.focusToComposer();\n }\n } else if (!e.shiftKey) {\n e.preventDefault();\n actionRef.current.focusToComposer();\n } else {\n e.preventDefault();\n virtualListRef.current?.focus();\n }\n break;\n default:\n break;\n }\n },\n [actionRef, hasMoreItems, messages.length, onScrollStop, onlyFocus, scrollAndFocus],\n );\n\n const checkPendingOnScroll = React.useCallback(() => {\n if (pendingOnScroll.current === true) onScrollStop();\n }, [onScrollStop]);\n\n React.useEffect(() => {\n let handlerCallback = null;\n const localVirtualRef = virtualListRef.current;\n const onScroll = () => {\n if (handlerCallback) clearTimeout(handlerCallback);\n handlerCallback = setTimeout(onScrollStop, 300);\n };\n if (onScrollEnds) {\n virtualListRef.current.addEventListener('scroll', onScroll);\n }\n document.addEventListener('visibilitychange', checkPendingOnScroll);\n return () => {\n if (handlerCallback) clearTimeout(handlerCallback);\n if (onScrollEnds) localVirtualRef.removeEventListener('scroll', onScroll);\n document.removeEventListener('visibilitychange', checkPendingOnScroll);\n };\n }, [onScrollStop, onScrollEnds, checkPendingOnScroll]);\n\n const render = React.useMemo(\n () =>\n virtualItems.map((virtualItem) => {\n const { index, measureRef, start } = virtualItem;\n const row = messages[index];\n const isSending = sendingMessages && sendingMessages.find((m) => m === row.dsId);\n const style: CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${start}px)`,\n width: '100%',\n };\n\n return (\n <ListItem\n data-element=\"chat-element-list-item\"\n data-index={index}\n key={`ds-chat-bubble-${index}-${row.dsId}-${row.type}`}\n style={style}\n ref={measureRef}\n tabIndex={0}\n onKeyDown={handleKey}\n role=\"listitem\"\n >\n <StyledWrapperListItem type={row.type}>\n {row.type === BUBBLE_TYPES.SENDER || row.type === BUBBLE_TYPES.RECIPIENT ? (\n // eslint-disable-next-line\n <ChatBubble {...(row as any)} helpMessage={isSending ? sendingText : row.helpMessage} />\n ) : null}\n {row.type === BUBBLE_TYPES.DELIMITER ? <MessageDelimiter {...(row as any)} /> : null}\n {row.type === BUBBLE_TYPES.SYSTEM ? <SystemMessage {...(row as any)} /> : null}\n </StyledWrapperListItem>\n </ListItem>\n );\n }),\n [virtualItems, messages, sendingMessages, handleKey, sendingText],\n );\n\n return (\n <StyledWrapper>\n <StyledChatContainerContentList\n data-testid=\"chat-thread-container\"\n tabIndex={0}\n aria-live=\"polite\"\n ref={virtualListRef}\n role=\"list\"\n onKeyDown={handleListKey}\n >\n <StyledChatContainerContentListScroll height={`${totalSize}px`}>\n {render}\n {!isLoading && hasMoreItems ? (\n <StyledLoadMoreContainer hasMoreItems={hasMoreItems}>\n <DSButton\n labelText=\"Load More\"\n buttonType=\"secondary\"\n onClick={getMoreMessages}\n data-testid=\"ds-chat-load-more-btn\"\n innerRef={loadMoreRef}\n />\n </StyledLoadMoreContainer>\n ) : null}\n </StyledChatContainerContentListScroll>\n </StyledChatContainerContentList>\n </StyledWrapper>\n );\n};\n\nChatContainerMessagesList.propTypes = listProps;\nChatContainerMessagesList.defaultProps = defaultProps;\nconst ChatContainerMessagesListWithSchema = describe(ChatContainerMessagesList);\nChatContainerMessagesListWithSchema.propTypes = listProps;\n\nexport { ChatContainerMessagesList, ChatContainerMessagesListWithSchema };\n"],"names":["getPadding","hasMoreItems","padding","paddingStart","paddingEnd","ChatContainerMessagesList","props","useValidateProps","ChatContainerMessagesListWithSchema","toTypescript","sendingText","bannerPosition","sendingMessages","messages","actionRef","onScrollEnds","getMoreMessages","isLoading","bannerRef","pendingOnScroll","React","useRef","loadMoreRef","virtualListRef","useVirtual","size","length","parentRef","overscan","estimateSize","useCallback","vScroll","scrollToIndex","totalSize","virtualItems","debouncedScroll","useMemo","debounce","document","visibilityState","current","getBoundingClientRect","bottom","top","list","querySelectorAll","indexList","forEach","item","itemTop","itemPadding","push","dataset","index","onScrollStop","onlyFocus","setTimeout","querySelector","focus","scrollAndFocus","b","align","useEffect","a","getMessagesInView","focusToIndex","focusToIndexWithoutScroll","focusToList","handleKey","e","key","Number","currentTarget","stopPropagation","preventDefault","shiftKey","focusOnWrapper","focusToComposer","handleListKey","shift","pop","activeElement","checkPendingOnScroll","handlerCallback","localVirtualRef","onScroll","clearTimeout","addEventListener","removeEventListener","render","map","virtualItem","measureRef","start","row","isSending","find","m","dsId","style","position","left","transform","width","type","BUBBLE_TYPES","SENDER","RECIPIENT","helpMessage","DELIMITER","SYSTEM","propTypes","listProps","defaultProps","describe"],"mappings":"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"}
1
+ {"version":3,"file":"ChatContainerMessagesList.js","sources":["../../../../src/parts/chat-container-messages-list/ChatContainerMessagesList.tsx"],"sourcesContent":["/* eslint-disable complexity */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n/* eslint-disable max-lines */\nimport React, { CSSProperties } from 'react';\nimport { describe } from 'react-desc';\nimport { useVirtual } from 'react-virtual';\nimport DSButton from '@elliemae/ds-button';\nimport { debounce } from 'lodash';\nimport { ChatBubble, BUBBLE_TYPES } from '../bubble';\nimport { MessageDelimiter } from '../message-delimiter';\nimport { SystemMessage } from '../system-message';\nimport {\n StyledWrapperListItem,\n StyledChatContainerContentList,\n StyledChatContainerContentListScroll,\n StyledWrapper,\n StyledLoadMoreContainer,\n ListItem,\n} from './styled';\nimport { defaultProps, listProps, ChatContainerMessagesListProps } from './props';\nimport { useValidateProps } from './config/useValidateProps';\n\ntype getPaddingT = {\n hasMoreItems: string | undefined;\n bannerPosition: string | undefined;\n isLoading: string | undefined;\n};\nconst getPadding = ({ hasMoreItems, bannerPosition, isLoading }: getPaddingT) => {\n const padding = {\n paddingStart: 0,\n paddingEnd: -5,\n };\n if ([hasMoreItems, bannerPosition, isLoading].some((item) => item === 'top')) padding.paddingStart = 42;\n else if ([hasMoreItems, bannerPosition, isLoading].some((item) => item === 'bottom')) padding.paddingEnd = 42;\n return padding;\n};\n\nconst ChatContainerMessagesList = (props: ChatContainerMessagesListProps): JSX.Element => {\n useValidateProps(props, ChatContainerMessagesListWithSchema.toTypescript());\n\n const {\n sendingText,\n bannerPosition,\n sendingMessages,\n messages,\n actionRef,\n onScrollEnds,\n getMoreMessages,\n hasMoreItems,\n isLoading,\n bannerRef,\n } = props;\n const pendingOnScroll = React.useRef(false);\n const loadMoreRef = React.useRef(null);\n const virtualListRef = React.useRef<HTMLDivElement>();\n // estimateSize should not be really required given what was stated on\n // https://github.com/tannerlinsley/react-virtual/issues/23\n const {\n scrollToIndex: vScroll,\n totalSize,\n virtualItems,\n } = useVirtual({\n size: messages.length,\n parentRef: virtualListRef,\n overscan: 15,\n ...getPadding({ hasMoreItems, bannerPosition, isLoading }),\n estimateSize: React.useCallback(() => 80, []),\n });\n\n const debouncedScroll = React.useMemo(\n () =>\n debounce((): number[] => {\n if (document.visibilityState === 'hidden') {\n pendingOnScroll.current = true;\n return [];\n }\n if (!virtualListRef.current) return [];\n pendingOnScroll.current = false;\n const { bottom, top } = virtualListRef.current?.getBoundingClientRect();\n const list = virtualListRef.current.querySelectorAll(\n '[data-element=\"chat-element-list-item\"]',\n ) as NodeListOf<HTMLDivElement>;\n const indexList = [];\n list.forEach((item: HTMLDivElement) => {\n const { top: itemTop } = item.getBoundingClientRect();\n const itemPadding = 10;\n if (itemTop + itemPadding < bottom && itemTop + itemPadding > top) indexList.push(item.dataset.index);\n });\n if (onScrollEnds) onScrollEnds(indexList);\n return indexList;\n }, 500),\n [onScrollEnds],\n );\n\n const onScrollStop = React.useCallback(debouncedScroll, [debouncedScroll]);\n\n const onlyFocus = React.useCallback((index: number) => {\n setTimeout(() => {\n (virtualListRef.current.querySelector(`[data-index=\"${index}\"]`) as HTMLDivElement).focus();\n }, 300);\n }, []);\n\n const scrollAndFocus = React.useCallback(\n (index: number, b = { align: 'center' }) => {\n vScroll(index, b);\n onlyFocus(index);\n onScrollStop();\n },\n [onScrollStop, onlyFocus, vScroll],\n );\n\n React.useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.scrollToIndex = (a, b = { align: 'center' }) => {\n vScroll(a, b as any);\n onScrollStop();\n };\n actionRef.current.getMessagesInView = onScrollStop;\n actionRef.current.focusToIndex = (a, b = { align: 'center' } as ScrollToOptions) => {\n scrollAndFocus(a, b);\n };\n actionRef.current.focusToIndexWithoutScroll = onlyFocus;\n actionRef.current.focusToList = () => {\n virtualListRef.current?.focus();\n };\n }\n }, [actionRef, onScrollStop, onlyFocus, scrollAndFocus, vScroll]);\n\n const handleKey = React.useCallback(\n (e) => {\n const { key } = e;\n const index = Number(e.currentTarget.dataset.index);\n e.stopPropagation();\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n if (index > 0)\n (virtualListRef.current.querySelector(`[data-index=\"${index - 1}\"]`) as HTMLDivElement).focus();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (index < messages.length - 1) {\n (virtualListRef.current.querySelector(`[data-index=\"${index + 1}\"]`) as HTMLDivElement).focus();\n }\n break;\n case 'Home':\n e.preventDefault();\n scrollAndFocus(0);\n break;\n case 'End':\n e.preventDefault();\n scrollAndFocus(messages.length - 1);\n break;\n case 'Tab':\n if (hasMoreItems === 'bottom' && !e.shiftKey) {\n e.preventDefault();\n loadMoreRef.current?.focus();\n } else if (hasMoreItems === 'top' && e.shiftKey) {\n e.preventDefault();\n loadMoreRef.current?.focus();\n } else if (!e.shiftKey) {\n if (bannerPosition) {\n e.preventDefault();\n bannerRef.current.focusOnWrapper();\n }\n } else {\n e.preventDefault();\n virtualListRef.current?.focus();\n }\n break;\n default:\n break;\n }\n },\n [actionRef, bannerRef, hasMoreItems, messages.length, bannerPosition, scrollAndFocus],\n );\n const handleListKey = React.useCallback(\n (e) => {\n const { key } = e;\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n onlyFocus(onScrollStop().shift());\n break;\n case 'ArrowDown':\n e.preventDefault();\n onlyFocus(onScrollStop().pop());\n break;\n case 'Home':\n e.preventDefault();\n scrollAndFocus(0);\n break;\n case 'End':\n e.preventDefault();\n scrollAndFocus(messages.length - 1);\n break;\n case 'Tab':\n if (document.activeElement !== loadMoreRef.current) {\n if (hasMoreItems === 'bottom' && !e.shiftKey) {\n e.preventDefault();\n loadMoreRef.current?.focus();\n } else if (hasMoreItems === 'top' && e.shiftKey) {\n // e.preventDefault();\n // loadMoreRef.current?.focus();\n } else if (!e.shiftKey) {\n e.preventDefault();\n actionRef.current.focusToComposer();\n }\n } else if (!e.shiftKey) {\n e.preventDefault();\n actionRef.current.focusToComposer();\n } else {\n e.preventDefault();\n virtualListRef.current?.focus();\n }\n break;\n default:\n break;\n }\n },\n [actionRef, hasMoreItems, messages.length, onScrollStop, onlyFocus, scrollAndFocus],\n );\n\n const checkPendingOnScroll = React.useCallback(() => {\n if (pendingOnScroll.current === true) onScrollStop();\n }, [onScrollStop]);\n\n React.useEffect(() => {\n let handlerCallback = null;\n const localVirtualRef = virtualListRef.current;\n const onScroll = () => {\n if (handlerCallback) clearTimeout(handlerCallback);\n handlerCallback = setTimeout(onScrollStop, 300);\n };\n if (onScrollEnds) {\n virtualListRef.current.addEventListener('scroll', onScroll);\n }\n document.addEventListener('visibilitychange', checkPendingOnScroll);\n return () => {\n if (handlerCallback) clearTimeout(handlerCallback);\n if (onScrollEnds) localVirtualRef.removeEventListener('scroll', onScroll);\n document.removeEventListener('visibilitychange', checkPendingOnScroll);\n };\n }, [onScrollStop, onScrollEnds, checkPendingOnScroll]);\n\n const render = React.useMemo(\n () =>\n virtualItems.map((virtualItem) => {\n const { index, measureRef, start } = virtualItem;\n const row = messages[index];\n const isSending = sendingMessages && sendingMessages.find((m) => m === row.dsId);\n const style: CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${start}px)`,\n width: '100%',\n };\n\n return (\n <ListItem\n data-element=\"chat-element-list-item\"\n data-index={index}\n key={`ds-chat-bubble-${index}-${row.dsId}-${row.type}`}\n style={style}\n ref={measureRef}\n tabIndex={-1}\n onKeyDown={handleKey}\n role=\"listitem\"\n >\n <StyledWrapperListItem type={row.type}>\n {row.type === BUBBLE_TYPES.SENDER || row.type === BUBBLE_TYPES.RECIPIENT ? (\n // eslint-disable-next-line\n <ChatBubble {...(row as any)} helpMessage={isSending ? sendingText : row.helpMessage} />\n ) : null}\n {row.type === BUBBLE_TYPES.DELIMITER ? <MessageDelimiter {...(row as any)} /> : null}\n {row.type === BUBBLE_TYPES.SYSTEM ? <SystemMessage {...(row as any)} /> : null}\n </StyledWrapperListItem>\n </ListItem>\n );\n }),\n [virtualItems, messages, sendingMessages, handleKey, sendingText],\n );\n\n return (\n <StyledWrapper>\n <StyledChatContainerContentList\n data-testid=\"chat-thread-container\"\n tabIndex={0}\n aria-live=\"polite\"\n aria-relevant=\"additions\"\n ref={virtualListRef}\n role=\"list\"\n onKeyDown={handleListKey}\n >\n <StyledChatContainerContentListScroll height={`${totalSize}px`}>\n {!isLoading && hasMoreItems ? (\n <StyledLoadMoreContainer hasMoreItems={hasMoreItems}>\n <DSButton\n labelText=\"Load More\"\n buttonType=\"secondary\"\n onClick={getMoreMessages}\n data-testid=\"ds-chat-load-more-btn\"\n innerRef={loadMoreRef}\n />\n </StyledLoadMoreContainer>\n ) : null}\n {render}\n </StyledChatContainerContentListScroll>\n </StyledChatContainerContentList>\n </StyledWrapper>\n );\n};\n\nChatContainerMessagesList.propTypes = listProps;\nChatContainerMessagesList.defaultProps = defaultProps;\nconst ChatContainerMessagesListWithSchema = describe(ChatContainerMessagesList);\nChatContainerMessagesListWithSchema.propTypes = listProps;\n\nexport { ChatContainerMessagesList, ChatContainerMessagesListWithSchema };\n"],"names":["getPadding","hasMoreItems","bannerPosition","isLoading","padding","paddingStart","paddingEnd","some","item","ChatContainerMessagesList","props","useValidateProps","ChatContainerMessagesListWithSchema","toTypescript","sendingText","sendingMessages","messages","actionRef","onScrollEnds","getMoreMessages","bannerRef","pendingOnScroll","React","useRef","loadMoreRef","virtualListRef","useVirtual","size","length","parentRef","overscan","estimateSize","useCallback","vScroll","scrollToIndex","totalSize","virtualItems","debouncedScroll","useMemo","debounce","document","visibilityState","current","getBoundingClientRect","bottom","top","list","querySelectorAll","indexList","forEach","itemTop","itemPadding","push","dataset","index","onScrollStop","onlyFocus","setTimeout","querySelector","focus","scrollAndFocus","b","align","useEffect","a","getMessagesInView","focusToIndex","focusToIndexWithoutScroll","focusToList","handleKey","e","key","Number","currentTarget","stopPropagation","preventDefault","shiftKey","focusOnWrapper","handleListKey","shift","pop","activeElement","focusToComposer","checkPendingOnScroll","handlerCallback","localVirtualRef","onScroll","clearTimeout","addEventListener","removeEventListener","render","map","virtualItem","measureRef","start","row","isSending","find","m","dsId","style","position","left","transform","width","type","BUBBLE_TYPES","SENDER","RECIPIENT","helpMessage","DELIMITER","SYSTEM","propTypes","listProps","defaultProps","describe"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-chat",
3
- "version": "1.59.7",
3
+ "version": "1.61.1",
4
4
  "license": "MIT",
5
5
  "description": "Ellie Mae - Dim Sum - Chat",
6
6
  "main": "cjs/index.js",
@@ -16,14 +16,14 @@
16
16
  "directory": "dist"
17
17
  },
18
18
  "dependencies": {
19
- "@elliemae/ds-banner": "1.59.7",
20
- "@elliemae/ds-basic": "1.59.7",
21
- "@elliemae/ds-button": "1.59.7",
22
- "@elliemae/ds-grid": "1.59.7",
23
- "@elliemae/ds-icons": "1.59.7",
24
- "@elliemae/ds-props-helpers": "1.59.7",
25
- "@elliemae/ds-tooltip": "1.59.7",
26
- "@elliemae/ds-truncated-tooltip-text": "1.59.7",
19
+ "@elliemae/ds-banner": "1.61.1",
20
+ "@elliemae/ds-basic": "1.61.1",
21
+ "@elliemae/ds-button": "1.61.1",
22
+ "@elliemae/ds-grid": "1.61.1",
23
+ "@elliemae/ds-icons": "1.61.1",
24
+ "@elliemae/ds-props-helpers": "1.61.1",
25
+ "@elliemae/ds-tooltip": "1.61.1",
26
+ "@elliemae/ds-truncated-tooltip-text": "1.61.1",
27
27
  "prop-types": "~15.7.2",
28
28
  "react-desc": "^4.1.2",
29
29
  "react-virtual": "^2.3.2"