@elliemae/ds-chat 2.0.0-next.8 → 2.0.0-rc.11

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.
Files changed (110) hide show
  1. package/cjs/ChatDataTestids.js +27 -0
  2. package/cjs/parts/bubble/ChatBubble.js +9 -6
  3. package/cjs/parts/bubble/ChatBubbleArrow.js +64 -61
  4. package/cjs/parts/bubble/props.js +1 -1
  5. package/cjs/parts/bubble/styled.js +1 -1
  6. package/cjs/parts/chat-composer/ChatContainerComposer.js +14 -7
  7. package/cjs/parts/chat-composer/props.js +4 -0
  8. package/cjs/parts/chat-composer/styled.js +2 -2
  9. package/cjs/parts/chat-container/ChatContainer.js +56 -14
  10. package/cjs/parts/chat-container/config/useValidateProps.js +2 -2
  11. package/cjs/parts/chat-container/props.js +7 -3
  12. package/cjs/parts/chat-container/styled.js +1 -1
  13. package/cjs/parts/chat-container-header/ChatContainerHeader.js +3 -3
  14. package/cjs/parts/chat-container-header/helpers.js +31 -0
  15. package/cjs/parts/chat-container-header/styled.js +6 -6
  16. package/cjs/parts/chat-container-messages-list/ChatContainerMessagesList.js +137 -32
  17. package/cjs/parts/chat-container-messages-list/config/useValidateProps.js +2 -2
  18. package/cjs/parts/chat-container-messages-list/props.js +4 -2
  19. package/cjs/parts/chat-container-messages-list/styled.js +2 -2
  20. package/cjs/parts/chat-empty-state/ChatEmptyState.js +2 -3
  21. package/cjs/parts/chat-sidebar/SideBarChat.js +57 -29
  22. package/cjs/parts/chat-sidebar/props.js +11 -1
  23. package/cjs/parts/chat-sidebar/styled.js +2 -2
  24. package/cjs/parts/floating-button/FloatingButton.js +18 -10
  25. package/cjs/parts/floating-button/props.js +6 -2
  26. package/cjs/parts/sidebar-button/SidebarButton.js +5 -0
  27. package/cjs/parts/sidebar-button/props.js +2 -3
  28. package/cjs/parts/system-message/style.js +1 -1
  29. package/cjs/parts/tile-button/TileButton.js +30 -27
  30. package/cjs/parts/tile-button/props.js +12 -8
  31. package/cjs/parts/tile-button/styled.js +11 -4
  32. package/esm/ChatDataTestids.js +23 -0
  33. package/esm/parts/bubble/ChatBubble.js +8 -5
  34. package/esm/parts/bubble/ChatBubbleArrow.js +64 -61
  35. package/esm/parts/bubble/props.js +1 -1
  36. package/esm/parts/bubble/styled.js +1 -1
  37. package/esm/parts/chat-composer/ChatContainerComposer.js +13 -5
  38. package/esm/parts/chat-composer/props.js +4 -0
  39. package/esm/parts/chat-container/ChatContainer.js +54 -12
  40. package/esm/parts/chat-container/config/useValidateProps.js +2 -2
  41. package/esm/parts/chat-container/props.js +7 -3
  42. package/esm/parts/chat-container/styled.js +1 -1
  43. package/esm/parts/chat-container-header/ChatContainerHeader.js +3 -2
  44. package/esm/parts/chat-container-header/helpers.js +23 -0
  45. package/esm/parts/chat-container-header/styled.js +6 -6
  46. package/esm/parts/chat-container-messages-list/ChatContainerMessagesList.js +135 -30
  47. package/esm/parts/chat-container-messages-list/config/useValidateProps.js +2 -2
  48. package/esm/parts/chat-container-messages-list/props.js +4 -2
  49. package/esm/parts/chat-container-messages-list/styled.js +2 -2
  50. package/esm/parts/chat-empty-state/ChatEmptyState.js +1 -1
  51. package/esm/parts/chat-sidebar/SideBarChat.js +57 -28
  52. package/esm/parts/chat-sidebar/props.js +11 -1
  53. package/esm/parts/chat-sidebar/styled.js +2 -2
  54. package/esm/parts/floating-button/FloatingButton.js +18 -9
  55. package/esm/parts/floating-button/props.js +6 -2
  56. package/esm/parts/sidebar-button/SidebarButton.js +5 -0
  57. package/esm/parts/sidebar-button/props.js +1 -1
  58. package/esm/parts/system-message/style.js +1 -1
  59. package/esm/parts/tile-button/TileButton.js +31 -26
  60. package/esm/parts/tile-button/props.js +11 -3
  61. package/esm/parts/tile-button/styled.js +11 -6
  62. package/package.json +28 -6
  63. package/types/ChatDataTestids.d.ts +21 -0
  64. package/types/parts/bubble/ChatBubble.d.ts +18 -5
  65. package/types/parts/bubble/props.d.ts +13 -4
  66. package/types/parts/bubble/styled.d.ts +9 -9
  67. package/types/parts/bubble/tests/ChatBubble.test.d.ts +1 -0
  68. package/types/parts/chat-card/ChatCard.d.ts +24 -4
  69. package/types/parts/chat-card/props.d.ts +19 -3
  70. package/types/parts/chat-card/styled.d.ts +6 -6
  71. package/types/parts/chat-composer/ChatContainerComposer.d.ts +48 -13
  72. package/types/parts/chat-composer/styled.d.ts +117 -24
  73. package/types/parts/chat-composer/tests/ChatContainerComposer.test.d.ts +1 -0
  74. package/types/parts/chat-container/ChatContainer.d.ts +54 -13
  75. package/types/parts/chat-container/config/useValidateProps.d.ts +1 -1
  76. package/types/parts/chat-container/styled.d.ts +4 -4
  77. package/types/parts/chat-container/tests/ChatContainer.test.d.ts +1 -0
  78. package/types/parts/chat-container-header/helpers.d.ts +6 -0
  79. package/types/parts/chat-container-header/styled.d.ts +3 -3
  80. package/types/parts/chat-container-messages-list/ChatContainerMessagesList.d.ts +39 -9
  81. package/types/parts/chat-container-messages-list/config/useValidateProps.d.ts +1 -1
  82. package/types/parts/chat-container-messages-list/styled.d.ts +7 -7
  83. package/types/parts/chat-empty-state/ChatEmptyState.d.ts +12 -3
  84. package/types/parts/chat-empty-state/props.d.ts +7 -2
  85. package/types/parts/chat-empty-state/styled.d.ts +2 -2
  86. package/types/parts/chat-sidebar/SideBarChat.d.ts +39 -9
  87. package/types/parts/chat-sidebar/props.d.ts +39 -9
  88. package/types/parts/chat-sidebar/styled.d.ts +2 -2
  89. package/types/parts/floating-button/FloatingButton.d.ts +11 -2
  90. package/types/parts/floating-button/props.d.ts +13 -1
  91. package/types/parts/floating-button/styled.d.ts +1 -1
  92. package/types/parts/floating-container/styled.d.ts +1 -2
  93. package/types/parts/grid-influencer/styled.d.ts +2 -2
  94. package/types/parts/message-delimiter/MessageDelimiter.d.ts +21 -4
  95. package/types/parts/message-delimiter/props.d.ts +16 -3
  96. package/types/parts/message-delimiter/styled.d.ts +3 -3
  97. package/types/parts/sidebar-button/SidebarButton.d.ts +16 -5
  98. package/types/parts/sidebar-button/props.d.ts +16 -5
  99. package/types/parts/sidebar-button/styled.d.ts +3 -3
  100. package/types/parts/system-message/SystemMessage.d.ts +12 -2
  101. package/types/parts/system-message/props.d.ts +7 -1
  102. package/types/parts/system-message/style.d.ts +5 -5
  103. package/types/parts/tile-button/TileButton.d.ts +66 -17
  104. package/types/parts/tile-button/props.d.ts +64 -16
  105. package/types/parts/tile-button/styled.d.ts +9 -8
  106. package/types/prop-types.d.ts +28 -9
  107. package/types/tests/utils.d.ts +27 -0
  108. package/types/parts/chat-composer/props.d.ts +0 -35
  109. package/types/parts/chat-container/props.d.ts +0 -39
  110. package/types/parts/chat-container-messages-list/props.d.ts +0 -23
@@ -1,34 +1,43 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
2
  import _jsx from '@babel/runtime/helpers/esm/jsx';
3
3
  import 'core-js/modules/web.url.to-json.js';
4
- import 'react';
4
+ import 'core-js/modules/esnext.async-iterator.map.js';
5
+ import 'core-js/modules/esnext.iterator.map.js';
6
+ import 'core-js/modules/esnext.async-iterator.filter.js';
7
+ import 'core-js/modules/esnext.iterator.constructor.js';
8
+ import 'core-js/modules/esnext.iterator.filter.js';
9
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
10
+ import 'core-js/modules/esnext.iterator.for-each.js';
11
+ import React from 'react';
5
12
  import { describe } from 'react-desc';
6
- import MenuExpand from '@elliemae/ds-icons/MenuExpand';
7
- import MenuCollapse from '@elliemae/ds-icons/MenuCollapse';
13
+ import { MenuCollapse, MenuExpand } from '@elliemae/ds-icons';
8
14
  import { StyledSideBarContainer, StyledSideBarButtonsContainer } from './styled.js';
9
15
  import { TileButton } from '../tile-button/TileButton.js';
10
16
  import { SidebarButton } from '../sidebar-button/SidebarButton.js';
11
17
  import { chatSidebarProps, defaultProps } from './props.js';
12
18
  import { useValidateProps } from './config/useValidateProps.js';
13
- import { jsx } from 'react/jsx-runtime';
19
+ import { jsxs, jsx } from 'react/jsx-runtime';
14
20
 
15
21
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16
22
 
17
23
  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; }
18
24
 
19
- const FooterChat = ({
20
- expanded,
21
- onFooterClose,
22
- onFooterExpand,
23
- footerButtonExtraProps
24
- }) => /*#__PURE__*/_jsx(SidebarButton, {
25
- dsId: "sidebar_footer",
26
- label: null,
27
- Icon: !expanded ? MenuCollapse : MenuExpand,
28
- onClick: expanded ? onFooterClose : onFooterExpand,
29
- "aria-pressed": expanded,
30
- "aria-label": footerButtonExtraProps['aria-label']
31
- });
25
+ const FooterChat = _ref => {
26
+ let {
27
+ expanded,
28
+ onFooterClose,
29
+ onFooterExpand,
30
+ footerButtonExtraProps
31
+ } = _ref;
32
+ return /*#__PURE__*/_jsx(SidebarButton, {
33
+ dsId: "sidebar_footer",
34
+ label: null,
35
+ Icon: !expanded ? MenuCollapse : MenuExpand,
36
+ onClick: expanded ? onFooterClose : onFooterExpand,
37
+ "aria-pressed": expanded,
38
+ "aria-label": footerButtonExtraProps['aria-label']
39
+ });
40
+ };
32
41
 
33
42
  const SideBarChat = props => {
34
43
  useValidateProps(props, SideBarChatWithSchema.toJSON());
@@ -38,18 +47,38 @@ const SideBarChat = props => {
38
47
  onFooterClose,
39
48
  onFooterExpand,
40
49
  selectedItem,
41
- footerButtonExtraProps
50
+ footerButtonExtraProps,
51
+ tooltipPlacement,
52
+ enableTooltipWhenIsClosed,
53
+ actionRef
42
54
  } = props;
43
- return /*#__PURE__*/_jsx(StyledSideBarContainer, {
44
- rows: [1, 'auto']
45
- }, void 0, /*#__PURE__*/_jsx(StyledSideBarButtonsContainer, {}, void 0, sidebarItems.map(p => /*#__PURE__*/jsx(TileButton, _objectSpread(_objectSpread({}, p), {}, {
46
- selected: selectedItem === p.dsId
47
- })))), /*#__PURE__*/_jsx(FooterChat, {
48
- expanded: expanded,
49
- onFooterClose: onFooterClose,
50
- onFooterExpand: onFooterExpand,
51
- footerButtonExtraProps: footerButtonExtraProps
52
- }));
55
+ const {
56
+ current: listRef
57
+ } = React.useRef({});
58
+ const registerReference = React.useCallback(ref => {
59
+ if (ref) listRef[ref.dataset.key] = ref;
60
+ }, [listRef]);
61
+ React.useEffect(() => {
62
+ if (actionRef.current.listRef) {
63
+ actionRef.current.listRef = listRef;
64
+ }
65
+ }, [sidebarItems, expanded, actionRef, listRef]);
66
+ return /*#__PURE__*/jsxs(StyledSideBarContainer, {
67
+ rows: [1, 'auto'],
68
+ ref: listRef,
69
+ children: [/*#__PURE__*/_jsx(StyledSideBarButtonsContainer, {}, void 0, sidebarItems.map(p => /*#__PURE__*/jsx(TileButton, _objectSpread(_objectSpread({
70
+ innerRef: registerReference
71
+ }, p), {}, {
72
+ selected: selectedItem === p.dsId,
73
+ tooltipPlacement: tooltipPlacement,
74
+ disableTooltip: enableTooltipWhenIsClosed ? false : !expanded
75
+ }), p.dsId))), /*#__PURE__*/_jsx(FooterChat, {
76
+ expanded: expanded,
77
+ onFooterClose: onFooterClose,
78
+ onFooterExpand: onFooterExpand,
79
+ footerButtonExtraProps: footerButtonExtraProps
80
+ })]
81
+ });
53
82
  };
54
83
 
55
84
  SideBarChat.defaultProps = defaultProps;
@@ -11,17 +11,27 @@ const defaultProps = {
11
11
  onHeaderClose: noop,
12
12
  footerButtonExtraProps: {
13
13
  'aria-label': 'expand or collapse button'
14
+ },
15
+ tooltipPlacement: 'right',
16
+ enableTooltipWhenIsClosed: false,
17
+ actionRef: {
18
+ current: {
19
+ listRef: []
20
+ }
14
21
  }
15
22
  };
16
23
  const chatSidebarProps = {
17
24
  sidebarItems: PropTypes.arrayOf(PropTypes.object).description('The array of out-of-the-box items you want to render inside the sidebar nav of the chat').defaultValue(defaultProps.sidebarItems),
18
25
  expanded: PropTypes.bool.description('Whether to show the chat expanded or collapsed').defaultValue(defaultProps.expanded),
19
26
  selectedItem: PropTypes.string.description('The id of the chat item you want to be opened').defaultValue(defaultProps.selectedItem),
27
+ tooltipPlacement: PropTypes.oneOf(['top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']).description('start placement preferences, as per popperjs placement option').defaultValue("'right'"),
28
+ enableTooltipWhenIsClosed: PropTypes.bool.description('Enable tooltip when is closed').defaultValue(defaultProps.onFooterExpand),
20
29
  onFooterExpand: PropTypes.func.description('The function to call when the chat is opened via the footer').defaultValue(defaultProps.onFooterExpand),
21
30
  onFooterClose: PropTypes.func.description('The function to call when the chat is closed via the footer').defaultValue(defaultProps.onFooterClose),
22
31
  onHeaderExpand: PropTypes.func.description('The function to call when the chat is opened via the header').defaultValue(defaultProps.onHeaderExpand),
23
32
  onHeaderClose: PropTypes.func.description('The function to call when the chat is closed via the header').defaultValue(defaultProps.onHeaderClose),
24
- footerButtonExtraProps: PropTypes.object.description('Expand/collapse footer button extra props').defaultValue(defaultProps.footerButtonExtraProps)
33
+ footerButtonExtraProps: PropTypes.object.description('Expand/collapse footer button extra props').defaultValue(defaultProps.footerButtonExtraProps),
34
+ actionRef: PropTypes.object.description("Action ref for sidebar\n {\n listRef: references to Tiles\n }\n ").defaultValue(defaultProps.actionRef)
25
35
  };
26
36
 
27
37
  export { chatSidebarProps, defaultProps };
@@ -4,9 +4,9 @@ import { MIN_WIDTH_SIDEBAR, BUTTON_SIDEBAR_HEIGHT } from '../../styled.js';
4
4
 
5
5
  const StyledSideBarContainer = /*#__PURE__*/styled(Grid).withConfig({
6
6
  componentId: "sc-16uijso-0"
7
- })(["height:100%;width:", "px;background:", ";border-right:1px solid ", ";"], MIN_WIDTH_SIDEBAR, props => props.theme.colors.neutral['050'], props => props.theme.colors.neutral['100']);
7
+ })(["height:100%;width:", "px;background:", ";border-right:1px solid ", ";overflow:hidden;"], MIN_WIDTH_SIDEBAR, props => props.theme.colors.neutral['050'], props => props.theme.colors.neutral['100']);
8
8
  const StyledSideBarButtonsContainer = /*#__PURE__*/styled(Grid).withConfig({
9
9
  componentId: "sc-16uijso-1"
10
- })(["overflow-y:auto;align-items:flex-start;justify-content:flex-start;grid-template-rows:repeat(auto-fill,", "px);"], BUTTON_SIDEBAR_HEIGHT);
10
+ })(["overflow-y:auto;align-items:flex-start;justify-content:flex-start;grid-template-rows:repeat(auto-fill,", "px);overflow-x:hidden;scrollbar-width:thin;&::-webkit-scrollbar{width:6px;}"], BUTTON_SIDEBAR_HEIGHT);
11
11
 
12
12
  export { StyledSideBarButtonsContainer, StyledSideBarContainer };
@@ -1,18 +1,27 @@
1
1
  import _jsx from '@babel/runtime/helpers/esm/jsx';
2
2
  import 'react';
3
- import Comments from '@elliemae/ds-icons/Comments';
3
+ import { Comments } from '@elliemae/ds-icons';
4
4
  import { StyledFloatingButton } from './styled.js';
5
5
  import { defaultFloatingButton } from './props.js';
6
+ import { jsx } from 'react/jsx-runtime';
6
7
 
7
8
  var _Comments;
8
- const FloatingButton = ({
9
- onClick
10
- }) => /*#__PURE__*/_jsx(StyledFloatingButton, {
11
- "data-testid": "chat-floating-button",
12
- onClick: onClick
13
- }, void 0, _Comments || (_Comments = /*#__PURE__*/_jsx(Comments, {
14
- size: "l"
15
- })));
9
+ const FloatingButton = _ref => {
10
+ let {
11
+ onClick,
12
+ onFocus,
13
+ innerRef
14
+ } = _ref;
15
+ return /*#__PURE__*/jsx(StyledFloatingButton, {
16
+ onFocus: onFocus,
17
+ ref: innerRef,
18
+ "data-testid": "chat-floating-button",
19
+ onClick: onClick,
20
+ children: _Comments || (_Comments = /*#__PURE__*/_jsx(Comments, {
21
+ size: "l"
22
+ }))
23
+ });
24
+ };
16
25
  FloatingButton.defaultProps = defaultFloatingButton;
17
26
 
18
27
  export { FloatingButton };
@@ -2,10 +2,14 @@ import { PropTypes } from 'react-desc';
2
2
  import { noop } from 'lodash';
3
3
 
4
4
  const defaultFloatingButton = {
5
- onClick: noop
5
+ onClick: noop,
6
+ onFocus: noop,
7
+ innerRef: null
6
8
  };
7
9
  const propsFloatingButton = {
8
- onClick: PropTypes.func.description('The function to call when the chat is opened via the footer').defaultValue(defaultFloatingButton.onClick)
10
+ onClick: PropTypes.func.description('The function to call when the chat is opened via the footer').defaultValue(defaultFloatingButton.onClick),
11
+ onFocus: PropTypes.func.description('The function to call when button is being focused').defaultValue(defaultFloatingButton.onFocus),
12
+ innerRef: PropTypes.object.description('Ref to the component container').defaultValue(null)
9
13
  };
10
14
 
11
15
  export { defaultFloatingButton, propsFloatingButton };
@@ -1,3 +1,8 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
1
6
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
7
  import _jsx from '@babel/runtime/helpers/esm/jsx';
3
8
  import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
@@ -1,7 +1,7 @@
1
1
  import propsTypes from 'prop-types';
2
2
  import { PropTypes } from 'react-desc';
3
3
  import { noop } from 'lodash';
4
- import Comments from '@elliemae/ds-icons/Comments';
4
+ import { Comments } from '@elliemae/ds-icons';
5
5
 
6
6
  const defaultSidebarButton = {
7
7
  Icon: Comments,
@@ -3,7 +3,7 @@ import { Grid } from '@elliemae/ds-grid';
3
3
 
4
4
  const Wrapper = /*#__PURE__*/styled(Grid).withConfig({
5
5
  componentId: "sc-80w41d-0"
6
- })(["align-items:center;justify-content:center;min-width:268px;max-width:100%;padding:0 8px 8px;border:1px solid ", ";border-radius:10px;background-color:", ";box-shadow:none;"], props => props.theme.colors.neutral['100'], props => props.theme.colors.neutral['080']);
6
+ })(["align-items:center;justify-content:center;max-width:100%;padding:0 8px 8px;border:1px solid ", ";border-radius:10px;background-color:", ";box-shadow:none;"], props => props.theme.colors.neutral['100'], props => props.theme.colors.neutral['080']);
7
7
  const Header = /*#__PURE__*/styled(Grid).withConfig({
8
8
  componentId: "sc-80w41d-1"
9
9
  })(["align-items:center;height:36px;"]);
@@ -2,17 +2,18 @@ import _jsx from '@babel/runtime/helpers/esm/jsx';
2
2
  import 'core-js/modules/web.url.to-json.js';
3
3
  import React from 'react';
4
4
  import { describe } from 'react-desc';
5
- import DSTooltip from '@elliemae/ds-tooltip';
5
+ import { DSTooltipV3 } from '@elliemae/ds-tooltip';
6
6
  import { Grid } from '@elliemae/ds-grid';
7
- import CloseXsmall from '@elliemae/ds-icons/CloseXsmall';
8
- import { StyledWrapperCentralContent, StyledTileButtonIcon, StyledStatusBadge, StyledTileButtonLabel, StyledTileButton, StyledWrapper, StyledWrapperLeftBorder, CloseButton } from './styled.js';
7
+ import { CloseXsmall } from '@elliemae/ds-icons';
8
+ import { StyledWrapperCentralContent, StyledTileButtonIcon, StyledStatusBadge, StyledTileButtonLabel, StyledTileButton, StyledWrapper, StyledWrapperLeftBorder, CloseButton, StyledTooltipV3ButtonWrapper } from './styled.js';
9
9
  import { propsTileButton, defaultTileButton } from './props.js';
10
10
  import { useValidateProps } from './config/useValidateProps.js';
11
+ import { jsx } from 'react/jsx-runtime';
11
12
 
12
13
  var _StyledWrapperLeftBor, _CloseXsmall;
13
14
 
14
15
  const TileButton = props => {
15
- var _Icon, _StyledStatusBadge, _StyledTileButtonLabe;
16
+ var _Icon, _StyledTileButtonLabe, _span;
16
17
 
17
18
  useValidateProps(props, TileButtonWithSchema.toJSON());
18
19
  const {
@@ -31,7 +32,10 @@ const TileButton = props => {
31
32
  disabled,
32
33
  selected,
33
34
  isHeader,
34
- ariaLabel
35
+ ariaLabel,
36
+ tooltipPlacement,
37
+ disableTooltip,
38
+ innerRef
35
39
  } = props;
36
40
  const handleClick = React.useCallback(() => {
37
41
  onClick(dsId, title);
@@ -47,17 +51,19 @@ const TileButton = props => {
47
51
  justifyContent: "center"
48
52
  }, void 0, _Icon || (_Icon = /*#__PURE__*/_jsx(Icon, {
49
53
  size: "m"
50
- })), badge ? _StyledStatusBadge || (_StyledStatusBadge = /*#__PURE__*/_jsx(StyledStatusBadge, {
54
+ })), badge ? /*#__PURE__*/_jsx(StyledStatusBadge, {
51
55
  badgeColor: badgeColor,
52
- badgePosition: badgePosition
53
- })) : null)), !isHeader ? /*#__PURE__*/_jsx(Grid, {
56
+ badgePosition: badgePosition,
57
+ "data-testid": "tile-badge-".concat(dsId)
58
+ }) : null)), !isHeader ? /*#__PURE__*/_jsx(Grid, {
54
59
  width: "100%",
55
60
  justifyContent: "center"
56
61
  }, void 0, label ? _StyledTileButtonLabe || (_StyledTileButtonLabe = /*#__PURE__*/_jsx(StyledTileButtonLabel, {}, void 0, label)) : null) : null), [isHeader, Icon, badge, badgeColor, badgePosition, label]);
57
- return /*#__PURE__*/_jsx(StyledTileButton, {
62
+ const Btn = React.useMemo(() => /*#__PURE__*/jsx(StyledTileButton, {
58
63
  isHeader: isHeader,
59
64
  value: dsId,
60
65
  "data-testid": "tile-button-".concat(dsId),
66
+ "data-key": dsId,
61
67
  onClick: handleClick,
62
68
  onFocus: onFocus,
63
69
  onBlur: onBlur,
@@ -66,23 +72,22 @@ const TileButton = props => {
66
72
  badgeColor: badgeColor,
67
73
  badgePosition: badgePosition,
68
74
  "aria-pressed": selected,
69
- "aria-label": ariaLabel
70
- }, dsId, /*#__PURE__*/_jsx(StyledWrapper, {
71
- alignItems: "center",
72
- justifyContent: "center"
73
- }, void 0, title ? /*#__PURE__*/_jsx(DSTooltip, {
74
- containerProps: {
75
- id: "ds-chat-tile-tooltip-button-".concat(dsId),
76
- 'data-testid': "ds-chat-tile-tooltip-button-".concat(dsId)
77
- },
78
- interactionType: "hover",
79
- title: title,
80
- triggerComponent: /*#__PURE__*/_jsx("span", {}, void 0, MainContent),
81
- placement: "bottom"
82
- }) : MainContent, _StyledWrapperLeftBor || (_StyledWrapperLeftBor = /*#__PURE__*/_jsx(StyledWrapperLeftBorder, {})), showClose && !disabled ? /*#__PURE__*/_jsx(CloseButton, {
83
- onClick: onClose,
84
- value: dsId
85
- }, void 0, _CloseXsmall || (_CloseXsmall = /*#__PURE__*/_jsx(CloseXsmall, {}))) : null));
75
+ "aria-label": ariaLabel,
76
+ ref: innerRef,
77
+ children: /*#__PURE__*/_jsx(StyledWrapper, {
78
+ alignItems: "center",
79
+ justifyContent: "center"
80
+ }, void 0, _span || (_span = /*#__PURE__*/_jsx("span", {}, void 0, MainContent)), _StyledWrapperLeftBor || (_StyledWrapperLeftBor = /*#__PURE__*/_jsx(StyledWrapperLeftBorder, {})), showClose && !disabled ? /*#__PURE__*/_jsx(CloseButton, {
81
+ onClick: onClose,
82
+ value: dsId,
83
+ "data-testid": "tile-close-btn-".concat(dsId)
84
+ }, void 0, _CloseXsmall || (_CloseXsmall = /*#__PURE__*/_jsx(CloseXsmall, {}))) : null)
85
+ }, dsId), [MainContent, ariaLabel, badgeColor, badgePosition, disabled, dsId, handleClick, isHeader, onBlur, onClose, onFocus, selected, showClose, innerRef]);
86
+ return title && !disableTooltip ? /*#__PURE__*/_jsx(StyledTooltipV3ButtonWrapper, {}, void 0, /*#__PURE__*/_jsx(DSTooltipV3, {
87
+ id: "ds-chat-tile-tooltip-button-".concat(dsId),
88
+ text: title,
89
+ startPlacementPreference: tooltipPlacement
90
+ }, void 0, Btn)) : Btn;
86
91
  };
87
92
 
88
93
  TileButton.defaultProps = defaultTileButton;
@@ -1,6 +1,6 @@
1
1
  import { PropTypes } from 'react-desc';
2
2
  import { noop } from 'lodash';
3
- import Comments from '@elliemae/ds-icons/Comments';
3
+ import { Comments } from '@elliemae/ds-icons';
4
4
 
5
5
  const defaultTileButton = {
6
6
  Icon: Comments,
@@ -18,7 +18,10 @@ const defaultTileButton = {
18
18
  disabled: false,
19
19
  selected: false,
20
20
  isHeader: false,
21
- ariaLabel: 'Tile button'
21
+ ariaLabel: 'Tile button',
22
+ tooltipPlacement: 'right',
23
+ disableTooltip: false,
24
+ innerRef: noop
22
25
  };
23
26
  const propsTileButton = {
24
27
  Icon: PropTypes.func.description('Icon component').defaultValue(defaultTileButton.Icon),
@@ -36,7 +39,12 @@ const propsTileButton = {
36
39
  disabled: PropTypes.bool.description('It will disabled the button').defaultValue(defaultTileButton.disabled),
37
40
  selected: PropTypes.bool.description('Indicate that the button is selected').defaultValue(defaultTileButton.disabled),
38
41
  isHeader: PropTypes.bool.description("It won't render the label").defaultValue(defaultTileButton.disabled),
39
- ariaLabel: PropTypes.string.description('aria-label attribute').defaultValue(defaultTileButton.ariaLabel)
42
+ ariaLabel: PropTypes.string.description('aria-label attribute').defaultValue(defaultTileButton.ariaLabel),
43
+ tooltipPlacement: PropTypes.oneOf(['top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']).description('start placement preferences, as per popperjs placement option').defaultValue("'right'"),
44
+ disableTooltip: PropTypes.bool.description('Disable tooltip option').defaultValue(defaultTileButton.disableTooltip),
45
+ innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
46
+ current: PropTypes.any
47
+ })]).description('reference to the component')
40
48
  };
41
49
 
42
50
  export { defaultTileButton, propsTileButton };
@@ -1,7 +1,9 @@
1
- import styled, { css } from 'styled-components';
1
+ import _taggedTemplateLiteral from '@babel/runtime/helpers/esm/taggedTemplateLiteral';
2
+ import styled from 'styled-components';
3
+ import { css } from '@elliemae/ds-system';
2
4
  import { Grid } from '@elliemae/ds-grid';
3
5
 
4
- /* eslint-disable indent */
6
+ var _templateObject;
5
7
  const MIN_WIDTH_SIDEBAR = 48;
6
8
  const BUTTON_SIDEBAR_HEIGHT = 48; // Buttons
7
9
 
@@ -46,8 +48,11 @@ const CloseButton = /*#__PURE__*/styled.button.withConfig({
46
48
  componentId: "sc-1ebp1zs-5"
47
49
  })(["outline:none;background:none;height:9px;width:9px;position:absolute;top:1px;right:1px;overflow:hidden;padding:0;border:none;span{position:absolute;left:-3px;top:-4px;}&:focus,&:hover{svg{fill:", ";}&:after{display:block;content:'';position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px ", ";border-radius:2px;}}cursor:pointer;"], props => props.theme.colors.brand[600], props => props.theme.colors.brand[600]); // MAIN WRAPPER
48
50
 
49
- const StyledTileButton = /*#__PURE__*/styled.button.withConfig({
51
+ const StyledTooltipV3ButtonWrapper = /*#__PURE__*/styled.div.withConfig({
50
52
  componentId: "sc-1ebp1zs-6"
53
+ })(["height:", "px;width:", "px;"], BUTTON_SIDEBAR_HEIGHT, MIN_WIDTH_SIDEBAR);
54
+ const StyledTileButton = /*#__PURE__*/styled.button.withConfig({
55
+ componentId: "sc-1ebp1zs-7"
51
56
  })(["outline:none;background:transparent;height:", "px;width:", "px;position:relative;padding:0;border:none;cursor:pointer;border-bottom:", ";&:focus,&:hover,&:active,&:disabled{background:", ";& ", "{border:2px solid ", ";margin-top:-2px;", ";}}&:focus,&:hover{& ", "{background:", ";}& ", "{color:", ";}& svg{fill:", ";}}&:active:not(:disabled){background:", ";& ", "{background:", ";}& ", "{color:", ";font-weight:600;}& svg{fill:", ";}& ", "{border:2px solid ", ";}}&:disabled{background:", ";", "{background:", ";}& ", "{background:", ";border:2px solid ", ";}", "{svg{fill:", ";}}", "{color:", ";}}", ""], BUTTON_SIDEBAR_HEIGHT, MIN_WIDTH_SIDEBAR, props => props.isHeader ? "1px solid ".concat(props.theme.colors.neutral['200']) : 'none', props => props.theme.colors.neutral['080'], StyledStatusBadge, props => props.theme.colors.neutral['080'], props => {
52
57
  switch (props.badgePosition) {
53
58
  case 'left':
@@ -61,13 +66,13 @@ const StyledTileButton = /*#__PURE__*/styled.button.withConfig({
61
66
  }
62
67
  }, StyledWrapperLeftBorder, props => props.theme.colors.brand[800], StyledTileButtonLabel, props => props.theme.colors.neutral[600], props => props.theme.colors.brand[800], props => props.theme.colors.neutral['050'], StyledWrapperLeftBorder, props => props.theme.colors.brand[600], StyledTileButtonLabel, props => props.theme.colors.neutral[600], props => props.theme.colors.brand[600], StyledStatusBadge, props => props.theme.colors.neutral['050'], props => props.theme.colors.neutral['080'], StyledWrapperLeftBorder, props => props.theme.colors.neutral['400'], StyledStatusBadge, props => props.theme.colors.neutral['500'], props => props.theme.colors.neutral['080'], StyledTileButtonIcon, props => props.theme.colors.neutral[400], StyledTileButtonLabel, props => props.theme.colors.neutral[400], props => {
63
68
  if (props.selected) {
64
- return css(["& ", "{background:", ";}"], StyledWrapperLeftBorder, nestedProps => nestedProps.theme.colors.brand[600]);
69
+ return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n & ", " {\n background: ", ";\n }\n "])), StyledWrapperLeftBorder, nestedProps => nestedProps.theme.colors.brand[600]);
65
70
  }
66
71
 
67
72
  return '';
68
73
  });
69
74
  const StyledWrapper = /*#__PURE__*/styled(Grid).withConfig({
70
- componentId: "sc-1ebp1zs-7"
75
+ componentId: "sc-1ebp1zs-8"
71
76
  })(["height:100%;width:100%;position:relative;"]);
72
77
 
73
- export { CloseButton, StyledStatusBadge, StyledTileButton, StyledTileButtonIcon, StyledTileButtonLabel, StyledWrapper, StyledWrapperCentralContent, StyledWrapperLeftBorder };
78
+ export { CloseButton, StyledStatusBadge, StyledTileButton, StyledTileButtonIcon, StyledTileButtonLabel, StyledTooltipV3ButtonWrapper, StyledWrapper, StyledWrapperCentralContent, StyledWrapperLeftBorder };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-chat",
3
- "version": "2.0.0-next.8",
3
+ "version": "2.0.0-rc.11",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Chat",
6
6
  "module": "./esm/index.js",
@@ -11,6 +11,10 @@
11
11
  "import": "./esm/index.js",
12
12
  "require": "./cjs/index.js"
13
13
  },
14
+ "./tests/utils": {
15
+ "import": "./esm/tests/utils.js",
16
+ "require": "./cjs/tests/utils.js"
17
+ },
14
18
  "./styled": {
15
19
  "import": "./esm/styled.js",
16
20
  "require": "./cjs/styled.js"
@@ -203,6 +207,10 @@
203
207
  "import": "./esm/parts/chat-container-header/styled.js",
204
208
  "require": "./cjs/parts/chat-container-header/styled.js"
205
209
  },
210
+ "./parts/chat-container-header/helpers": {
211
+ "import": "./esm/parts/chat-container-header/helpers.js",
212
+ "require": "./cjs/parts/chat-container-header/helpers.js"
213
+ },
206
214
  "./parts/chat-container-header/ChatContainerHeader": {
207
215
  "import": "./esm/parts/chat-container-header/ChatContainerHeader.js",
208
216
  "require": "./cjs/parts/chat-container-header/ChatContainerHeader.js"
@@ -270,6 +278,10 @@
270
278
  "./parts/bubble/ChatBubble": {
271
279
  "import": "./esm/parts/bubble/ChatBubble.js",
272
280
  "require": "./cjs/parts/bubble/ChatBubble.js"
281
+ },
282
+ "./ChatDataTestids": {
283
+ "import": "./esm/ChatDataTestids.js",
284
+ "require": "./cjs/ChatDataTestids.js"
273
285
  }
274
286
  },
275
287
  "repository": {
@@ -293,19 +305,29 @@
293
305
  "generateSubmodules": true
294
306
  },
295
307
  "dependencies": {
296
- "@elliemae/ds-basic": "2.0.0-next.8",
297
- "@elliemae/ds-icons": "2.0.0-next.8",
298
- "@elliemae/ds-system": "2.0.0-next.8",
308
+ "@elliemae/ds-banner": "2.0.0-rc.11",
309
+ "@elliemae/ds-button": "2.0.0-rc.11",
310
+ "@elliemae/ds-grid": "2.0.0-rc.11",
311
+ "@elliemae/ds-icons": "2.0.0-rc.11",
312
+ "@elliemae/ds-indeterminate-progress-indicator": "2.0.0-rc.11",
313
+ "@elliemae/ds-props-helpers": "2.0.0-rc.11",
314
+ "@elliemae/ds-system": "2.0.0-rc.11",
315
+ "@elliemae/ds-tooltip": "2.0.0-rc.11",
316
+ "@elliemae/ds-truncated-tooltip-text": "2.0.0-rc.11",
299
317
  "prop-types": "~15.7.2",
318
+ "react-desc": "~4.1.2",
300
319
  "react-virtual": "~2.3.2"
301
320
  },
302
321
  "devDependencies": {
303
- "styled-components": "~5.3.1"
322
+ "@testing-library/dom": "~8.11.1",
323
+ "@testing-library/jest-dom": "~5.15.0",
324
+ "@testing-library/react": "~12.1.2",
325
+ "styled-components": "~5.3.3"
304
326
  },
305
327
  "peerDependencies": {
306
328
  "lodash": "^4.17.21",
307
329
  "react": "^16.14.0",
308
330
  "react-dom": "^16.14.0",
309
- "styled-components": "^5.3.1"
331
+ "styled-components": "^5.3.3"
310
332
  }
311
333
  }
@@ -0,0 +1,21 @@
1
+ export declare const ChatDataTestIds: {
2
+ COMPOSER_TEXTAREA: string;
3
+ COMPOSER_SEND_BUTTON: string;
4
+ CARD_TITLE: string;
5
+ CARD_WRAPPER: string;
6
+ CARD_TIME: string;
7
+ CARD_RIGHT_ADDON: string;
8
+ CARD_CONTENT: string;
9
+ LOADING_INDICATOR: string;
10
+ HEADER_TITLE: string;
11
+ HEADER_CHILDREN: string;
12
+ THREAD_CONTAINER: string;
13
+ LOAD_MORE_BUTTON: string;
14
+ FLOATING_BUTTON: string;
15
+ SYSTEM_MSG_TITLE: string;
16
+ SYSTEM_MSG_BODY: string;
17
+ SYSTEM_MSG_TIME: string;
18
+ BUBBLE: string;
19
+ BUBBLE_TITLE: string;
20
+ BUBBLE_BODY: string;
21
+ };
@@ -1,17 +1,30 @@
1
+ /// <reference path="../../../../../../shared/typings/react-desc.d.ts" />
1
2
  /// <reference types="react" />
2
3
  import { BubbleProps } from './props';
3
4
  declare const ChatBubble: {
4
5
  (props: BubbleProps): JSX.Element;
5
6
  propTypes: {
6
- dsId: any;
7
+ dsId: {
8
+ deprecated: import("react-desc").PropTypesDescValidator;
9
+ };
7
10
  type: any;
8
11
  title: any;
9
12
  time: any;
10
13
  body: any;
11
- onClick: any;
12
- errorMessage: any;
13
- helpMessage: any;
14
+ onClick: {
15
+ deprecated: import("react-desc").PropTypesDescValidator;
16
+ };
17
+ errorMessage: {
18
+ deprecated: import("react-desc").PropTypesDescValidator;
19
+ };
20
+ helpMessage: {
21
+ deprecated: import("react-desc").PropTypesDescValidator;
22
+ };
14
23
  };
15
24
  };
16
- declare const ChatBubbleWithSchema: any;
25
+ declare const ChatBubbleWithSchema: {
26
+ (props?: BubbleProps | undefined): JSX.Element;
27
+ propTypes: unknown;
28
+ toTypescript: () => import("react-desc").TypescriptSchema;
29
+ };
17
30
  export { ChatBubble, ChatBubbleWithSchema };
@@ -1,3 +1,4 @@
1
+ /// <reference path="../../../../../../shared/typings/react-desc.d.ts" />
1
2
  import React from 'react';
2
3
  /**
3
4
  *
@@ -24,14 +25,22 @@ export interface BubbleProps {
24
25
  }
25
26
  export declare const defaultBubbleProps: BubbleProps;
26
27
  export declare const propsBubbles: {
27
- dsId: any;
28
+ dsId: {
29
+ deprecated: import("react-desc").PropTypesDescValidator;
30
+ };
28
31
  type: any;
29
32
  title: any;
30
33
  time: any;
31
34
  body: any;
32
- onClick: any;
33
- errorMessage: any;
34
- helpMessage: any;
35
+ onClick: {
36
+ deprecated: import("react-desc").PropTypesDescValidator;
37
+ };
38
+ errorMessage: {
39
+ deprecated: import("react-desc").PropTypesDescValidator;
40
+ };
41
+ helpMessage: {
42
+ deprecated: import("react-desc").PropTypesDescValidator;
43
+ };
35
44
  };
36
45
  /**
37
46
  *
@@ -1,10 +1,10 @@
1
1
  /// <reference types="react" />
2
- export declare const StyledWrapper: import("styled-components").StyledComponent<"div", any, any, never>;
3
- export declare const StyledTitleBubble: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("react").RefAttributes<unknown>>, any, {}, never>;
4
- export declare const StyledTitleLeftBubble: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("react").RefAttributes<unknown>>, any, {}, never>;
5
- export declare const StyledTitleRightBubble: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("react").RefAttributes<unknown>>, any, {}, never>;
6
- export declare const StyleBodyWrapper: import("styled-components").StyledComponent<"div", any, any, never>;
7
- export declare const StyleErrorMessage: import("styled-components").StyledComponent<"div", any, any, never>;
8
- export declare const StyleHelpMessage: import("styled-components").StyledComponent<"div", any, any, never>;
9
- export declare const StyledBubbleArrow: import("styled-components").StyledComponent<"div", any, any, never>;
10
- export declare const StyledColoredBubble: import("styled-components").StyledComponent<"div", any, any, never>;
2
+ export declare const StyledWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, any, never>;
3
+ export declare const StyledTitleBubble: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("@elliemae/ds-grid/types/types").GridPropsT & import("react").RefAttributes<HTMLDivElement>>, import("styled-components").DefaultTheme, {}, never>;
4
+ export declare const StyledTitleLeftBubble: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("@elliemae/ds-grid/types/types").GridPropsT & import("react").RefAttributes<HTMLDivElement>>, import("styled-components").DefaultTheme, {}, never>;
5
+ export declare const StyledTitleRightBubble: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("@elliemae/ds-grid/types/types").GridPropsT & import("react").RefAttributes<HTMLDivElement>>, import("styled-components").DefaultTheme, {}, never>;
6
+ export declare const StyleBodyWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, any, never>;
7
+ export declare const StyleErrorMessage: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, any, never>;
8
+ export declare const StyleHelpMessage: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, any, never>;
9
+ export declare const StyledBubbleArrow: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, any, never>;
10
+ export declare const StyledColoredBubble: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, any, never>;
@@ -0,0 +1 @@
1
+ export {};