@zohodesk/components 1.0.0-temp-220.9 → 1.0.0-temp-227

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,17 +2,12 @@
2
2
 
3
3
  Dot UI is a customizable React component library built to deliver a clean, accessible, and developer-friendly UI experience. It offers a growing set of reusable components designed to align with modern design systems and streamline application development across projects.
4
4
 
5
- # 1.3.4
6
-
7
- - **Popup**
8
- - Fixed the auto-repositioning issue during fixed popup resize and improved the position calculation logic.
9
5
 
10
- - **Modal**
11
- - Introduced the `Portal` component to act as a React portal.
12
- - Refactored to use the new `Portal` component for rendering, resolving unwanted rendering issues.
6
+ # 1.3.4
13
7
 
14
- - **Dropbox**
15
- - Updated to use the new `Portal` component for rendering, resolving unwanted rendering issues.
8
+ - **MultiSelect** - `renderCustomClearComponent` and `renderCustomToggleIndicator` props supported to customize the clear and toggle indicatior icon.
9
+ - **Select** - `renderCustomSearchClearComponent` and `renderCustomToggleIndicator` props supported to customize the search input clear and toggle indicatior icon.
10
+ - **TextBoxIcon** - `renderCustomClearComponent` prop supported to customize the input clear.
16
11
 
17
12
  # 1.3.3
18
13
 
@@ -81,12 +81,13 @@ export default class AppContainer extends React.Component {
81
81
 
82
82
  if (this.containerElement && needTooltip) {
83
83
  this.containerElement.removeEventListener('mouseover', this.handleOver, false);
84
- this.containerElement.addEventListener('mouseout', this.removeTimeout, false);
84
+ this.containerElement.removeEventListener('mouseout', this.removeTimeout, false);
85
85
  this.tooltipRef.unObserveElement();
86
- setLibraryConfig({
87
- getTooltipContainer: () => null
88
- });
89
86
  }
87
+
88
+ setLibraryConfig({
89
+ getTooltipContainer: () => null
90
+ });
90
91
  }
91
92
 
92
93
  render() {
@@ -1,6 +1,6 @@
1
1
  import React, { useRef, useContext } from 'react';
2
2
  import FocusScope from '@zohodesk/a11y/es/FocusScope/FocusScope';
3
- import Portal from "../Modal/Portal/Portal"; // import { getLibraryConfig } from '../Provider/Config';
3
+ import Modal from "../Modal/Modal"; // import { getLibraryConfig } from '../Provider/Config';
4
4
 
5
5
  import LibraryContext from "../Provider/LibraryContextInit";
6
6
  import cssJSLogic from "./css/cssJSLogic";
@@ -62,13 +62,13 @@ export default function DropBox(props) {
62
62
  ...props,
63
63
  zIndexStyle: zIndexStyle
64
64
  });
65
- return isModel && isActive ? /*#__PURE__*/React.createElement(Portal, {
65
+ return isModel && isActive ? /*#__PURE__*/React.createElement(Modal, {
66
66
  portalId: portalId
67
67
  }, /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
68
68
  className: `${style.freezeLayer} ${style.freeze}`,
69
69
  style: zIndexStyle,
70
70
  onClick: stopPropagation
71
- }), dropBoxEle)) : !isAbsolutePositioningNeeded && isActive ? /*#__PURE__*/React.createElement(Portal, {
71
+ }), dropBoxEle)) : !isAbsolutePositioningNeeded && isActive ? /*#__PURE__*/React.createElement(Modal, {
72
72
  portalId: portalId
73
73
  }, /*#__PURE__*/React.createElement(React.Fragment, null, isRestrictScroll ? /*#__PURE__*/React.createElement("div", {
74
74
  className: style.freezeLayer,
package/es/Modal/Modal.js CHANGED
@@ -1,9 +1,8 @@
1
1
  /**** Libraries ****/
2
2
  import React from 'react';
3
+ import ReactDOM from 'react-dom';
3
4
  import { defaultProps } from "./props/defaultProps";
4
5
  import { propTypes } from "./props/propTypes";
5
- import Portal from "./Portal/Portal";
6
- import { getLibraryConfig } from "../Provider/Config";
7
6
  import style from "../AppContainer/AppContainer.module.css";
8
7
  let createdPortalIds = [];
9
8
  let newPortalPrefix = 'CPortal';
@@ -14,13 +13,10 @@ export default class Modal extends React.Component {
14
13
  this.handleAddPortalId = this.handleAddPortalId.bind(this);
15
14
  this.handleRemovePortalId = this.handleRemovePortalId.bind(this);
16
15
  this.handleInsertPortalDiv = this.handleInsertPortalDiv.bind(this);
17
- this.setPortalDiv = this.setPortalDiv.bind(this);
18
- this.getRootElement = this.getRootElement.bind(this);
19
- this.getPortalPrefix = this.getPortalPrefix.bind(this);
16
+ this.getPortalDiv = this.getPortalDiv.bind(this);
20
17
  this.state = {
21
18
  isMounted: false
22
19
  };
23
- this.portalPrefix = this.getPortalPrefix();
24
20
  this.portalId = props.portalId;
25
21
  this.setRef = this.setRef.bind(this);
26
22
  this.ref = null; // this.portalDiv = document.createDocumentFragment();
@@ -35,40 +31,24 @@ export default class Modal extends React.Component {
35
31
  }
36
32
  }
37
33
 
38
- getRootElement() {
39
- const getRootElement = getLibraryConfig('getRootElement');
34
+ getPortalDiv() {
35
+ this.modalRoot = this.props.portalId ? document.querySelector(`[data-portal=${this.props.portalId}]`) : '';
40
36
 
41
- if (getRootElement && typeof getRootElement === 'function') {
42
- const parent = getRootElement();
43
-
44
- if (parent) {
45
- return parent;
46
- }
47
- }
48
-
49
- return null;
50
- }
51
-
52
- getPortalPrefix() {
53
- const portalPrefix = getLibraryConfig('portalPrefix');
54
- return portalPrefix !== '' ? portalPrefix : '';
55
- }
56
-
57
- setPortalDiv() {
58
- const modalRoot = this.props.portalId ? document.querySelector(`[data-portal=${this.portalPrefix}${this.props.portalId}]`) : '';
59
-
60
- if (!modalRoot) {
37
+ if (!this.modalRoot) {
61
38
  this.portalId = this.handleAddPortalId();
62
39
  this.newModalRoot = document.createElement('div');
63
40
  this.newModalRoot.className = style.container;
64
- this.newModalRoot.setAttribute('data-portal', `${this.portalPrefix}${this.portalId}`);
41
+ this.newModalRoot.setAttribute('data-portal', this.portalId);
65
42
  this.containerDiv && this.containerDiv.appendChild(this.newModalRoot);
43
+ this.modalRoot = this.newModalRoot;
66
44
  }
45
+
46
+ return this.modalRoot;
67
47
  }
68
48
 
69
49
  componentDidMount() {
70
- this.containerDiv = this.getRootElement() || document.getElementsByTagName('desk')[0] || document.getElementsByTagName('body')[0];
71
- this.setPortalDiv();
50
+ this.containerDiv = document.getElementsByTagName('desk')[0] ? document.getElementsByTagName('desk')[0] : document.getElementsByTagName('body')[0];
51
+ this.portalDiv = this.getPortalDiv();
72
52
  this.setState({
73
53
  isMounted: true
74
54
  }, () => {
@@ -77,6 +57,7 @@ export default class Modal extends React.Component {
77
57
  }
78
58
 
79
59
  componentWillUnmount() {
60
+ //this.modalRoot && this.modalRoot.removeChild(this.portalDiv);
80
61
  if (this.newModalRoot) {
81
62
  this.containerDiv && this.containerDiv.removeChild(this.newModalRoot);
82
63
  this.handleRemovePortalId();
@@ -148,12 +129,10 @@ export default class Modal extends React.Component {
148
129
 
149
130
  if (isMounted) {
150
131
  if (Element) {
151
- return /*#__PURE__*/React.createElement(Portal, {
152
- portalId: this.portalId
153
- }, /*#__PURE__*/React.createElement(Element, {
132
+ return /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement(Element, {
154
133
  ref: this.setRef,
155
134
  ...elementProps
156
- }));
135
+ }), this.portalDiv);
157
136
  }
158
137
 
159
138
  return null;
@@ -882,7 +882,10 @@ export class MultiSelectComponent extends React.Component {
882
882
  isPopupOpen,
883
883
  ariaErrorId,
884
884
  customProps,
885
- isFocus
885
+ isFocus,
886
+ isPopupReady,
887
+ renderCustomClearComponent,
888
+ renderCustomToggleIndicator
886
889
  } = this.props;
887
890
  let {
888
891
  isActive,
@@ -964,6 +967,12 @@ export class MultiSelectComponent extends React.Component {
964
967
  ariaLabelledby: ariaLabelledby
965
968
  },
966
969
  autoComplete: autoComplete,
970
+ renderRightPlaceholderNode: typeof renderCustomToggleIndicator == 'function' ? renderCustomToggleIndicator({
971
+ togglePopup: this.togglePopup,
972
+ isPopupOpened: isPopupReady,
973
+ isReadOnly: isReadOnly,
974
+ isDisabled: isDisabled
975
+ }) : renderCustomToggleIndicator,
967
976
  ...TextBoxIconProps
968
977
  }, /*#__PURE__*/React.createElement(Container, {
969
978
  isInline: true,
@@ -971,7 +980,11 @@ export class MultiSelectComponent extends React.Component {
971
980
  alignBox: "row",
972
981
  align: "vertical",
973
982
  className: style.rightPlaceholder
974
- }, isShowClearIcon ? /*#__PURE__*/React.createElement(Box, {
983
+ }, isShowClearIcon ? typeof renderCustomClearComponent === 'function' ? renderCustomClearComponent({
984
+ clearText,
985
+ isPopupOpened: isPopupReady,
986
+ handleClearAll: this.handleDeselectAll
987
+ }) : /*#__PURE__*/React.createElement(Box, {
975
988
  className: `${style.delete} ${style[`${palette}Delete`]}`,
976
989
  dataId: `${dataId}_clearIcon`,
977
990
  "data-title": clearText,
@@ -114,7 +114,9 @@ export const MultiSelect_propTypes = {
114
114
  TextBoxIconProps: PropTypes.object
115
115
  }),
116
116
  isFocus: PropTypes.bool,
117
- allowValueFallback: PropTypes.bool
117
+ allowValueFallback: PropTypes.bool,
118
+ renderCustomClearComponent: PropTypes.func,
119
+ renderCustomToggleIndicator: PropTypes.oneOfType([PropTypes.func, PropTypes.node])
118
120
  };
119
121
  export const MultiSelectHeader_propTypes = {
120
122
  dataId: PropTypes.string,
@@ -108,23 +108,24 @@ let viewPort = {
108
108
  let paddingSpace = 5; // space between target and relative element
109
109
 
110
110
  let arrowSize = needArrow ? 10 : 0;
111
- let padding = needArrow ? arrowSize : paddingSpace;
111
+ rect.height = rect.height + (needArrow ? arrowSize : paddingSpace);
112
+ rect.width = rect.width + (needArrow ? arrowSize : paddingSpace);
112
113
  let arrowHorizontalBalancePx = !isAbsolute && needArrow ? 30 : 0;
113
114
  let arrowVerticalBalancePx = !isAbsolute && needArrow ? 27 : 0;
114
- let bottomOverFlow = rect.height + padding > relativeBoxGap.bottom;
115
- let topOverFlow = rect.height + padding > relativeBoxGap.top;
116
- let rightOverFlow = rect.width + padding > relativeBoxGap.right;
117
- let leftOverFlow = rect.width + padding > relativeBoxGap.left;
118
- let horizontalCenterOverFlow = rect.width / 2 + padding > relativeBoxGap.center.right || rect.width / 2 + padding > relativeBoxGap.center.left;
119
- let verticalCenterOverFlow = rect.height / 2 + padding > relativeBoxGap.center.top || rect.height / 2 + padding > relativeBoxGap.center.bottom;
120
- let horizontalLeftToRightOverFlow = rect.width + padding > relativeBoxRect.width + relativeBoxGap.right;
121
- let horizontalCenterToRightOverFlow = rect.width + padding > relativeBoxGap.center.right || arrowHorizontalBalancePx > relativeBoxGap.center.left;
122
- let horizontalRightToLeft = rect.width + padding > relativeBoxRect.width + relativeBoxGap.left;
123
- let horizontalCenterToLeft = rect.width + padding > relativeBoxGap.center.left || arrowHorizontalBalancePx > relativeBoxGap.center.right;
124
- let verticalTopToBottomOverFlow = rect.height + padding > relativeBoxRect.height + relativeBoxGap.bottom;
125
- let verticalCenterToBottomOverFlow = rect.height + padding > relativeBoxGap.center.bottom || arrowVerticalBalancePx > relativeBoxGap.center.top;
126
- let verticalBottomToTopOverFlow = rect.height + padding > relativeBoxRect.height + relativeBoxGap.top;
127
- let verticalCenterToTopOverFlow = rect.height + padding > relativeBoxGap.center.top || arrowVerticalBalancePx > relativeBoxGap.center.bottom;
115
+ let bottomOverFlow = rect.height > relativeBoxGap.bottom;
116
+ let topOverFlow = rect.height > relativeBoxGap.top;
117
+ let rightOverFlow = rect.width > relativeBoxGap.right;
118
+ let leftOverFlow = rect.width > relativeBoxGap.left;
119
+ let horizontalCenterOverFlow = rect.width / 2 > relativeBoxGap.center.right || rect.width / 2 > relativeBoxGap.center.left;
120
+ let verticalCenterOverFlow = rect.height / 2 > relativeBoxGap.center.top || rect.height / 2 > relativeBoxGap.center.bottom;
121
+ let horizontalLeftToRightOverFlow = rect.width > relativeBoxRect.width + relativeBoxGap.right;
122
+ let horizontalCenterToRightOverFlow = rect.width > relativeBoxGap.center.right || arrowHorizontalBalancePx > relativeBoxGap.center.left;
123
+ let horizontalRightToLeft = rect.width > relativeBoxRect.width + relativeBoxGap.left;
124
+ let horizontalCenterToLeft = rect.width > relativeBoxGap.center.left || arrowHorizontalBalancePx > relativeBoxGap.center.right;
125
+ let verticalTopToBottomOverFlow = rect.height > relativeBoxRect.height + relativeBoxGap.bottom;
126
+ let verticalCenterToBottomOverFlow = rect.height > relativeBoxGap.center.bottom || arrowVerticalBalancePx > relativeBoxGap.center.top;
127
+ let verticalBottomToTopOverFlow = rect.height > relativeBoxRect.height + relativeBoxGap.top;
128
+ let verticalCenterToTopOverFlow = rect.height > relativeBoxGap.center.top || arrowVerticalBalancePx > relativeBoxGap.center.bottom;
128
129
  let views = {
129
130
  bottomCenter: !(bottomOverFlow || horizontalCenterOverFlow),
130
131
  bottomLeftToRight: !(bottomOverFlow || horizontalLeftToRightOverFlow),
@@ -8,10 +8,7 @@ let id = {
8
8
  direction: 'ltr',
9
9
  tooltipDebounce: 175,
10
10
  getTooltipContainer: () => {},
11
- autoComplete: false,
12
- portalPrefix: '',
13
- getRootElement: () => {},
14
- getPortalContainer: () => {}
11
+ autoComplete: false
15
12
  };
16
13
  export function getLibraryConfig(key) {
17
14
  return id[key];
@@ -727,7 +727,9 @@ export class SelectComponent extends Component {
727
727
  positionsOffset,
728
728
  targetOffset,
729
729
  isRestrictScroll,
730
- dropBoxPortalId
730
+ dropBoxPortalId,
731
+ renderCustomToggleIndicator,
732
+ renderCustomSearchClearComponent
731
733
  } = this.props;
732
734
  let {
733
735
  TextBoxIcon_i18n,
@@ -807,14 +809,20 @@ export class SelectComponent extends Component {
807
809
  ...TextBoxProps
808
810
  }
809
811
  },
812
+ renderRightPlaceholderNode: typeof renderCustomToggleIndicator == 'function' ? renderCustomToggleIndicator({
813
+ togglePopup: this.togglePopup,
814
+ isPopupOpened: isPopupReady,
815
+ isReadOnly: isReadOnly,
816
+ isDisabled: isDisabled
817
+ }) : renderCustomToggleIndicator,
810
818
  ...TextBoxIconProps
811
- }, /*#__PURE__*/React.createElement(Container, {
819
+ }, !renderCustomToggleIndicator || children ? /*#__PURE__*/React.createElement(Container, {
812
820
  isInline: true,
813
821
  isCover: false,
814
822
  alignBox: "row",
815
823
  align: "both",
816
824
  className: style.rightPlaceholder
817
- }, /*#__PURE__*/React.createElement(Container, {
825
+ }, !renderCustomToggleIndicator ? /*#__PURE__*/React.createElement(Container, {
818
826
  align: "both",
819
827
  dataId: `${dataId}_downIcon`,
820
828
  "aria-hidden": true,
@@ -822,10 +830,10 @@ export class SelectComponent extends Component {
822
830
  }, /*#__PURE__*/React.createElement(Icon, {
823
831
  name: "ZD-down",
824
832
  size: "7"
825
- })), children ? /*#__PURE__*/React.createElement(Box, {
833
+ })) : null, children ? /*#__PURE__*/React.createElement(Box, {
826
834
  className: isPopupOpen ? style.rotate : '',
827
835
  dataId: `${dataId}_children`
828
- }, children) : null)) : /*#__PURE__*/React.createElement(Textbox, {
836
+ }, children) : null) : null) : /*#__PURE__*/React.createElement(Textbox, {
829
837
  a11y: {
830
838
  role: 'Menuitem',
831
839
  ariaLabel: TextBox_ally_label,
@@ -916,7 +924,8 @@ export class SelectComponent extends Component {
916
924
  autoComplete: autoComplete,
917
925
  customProps: {
918
926
  TextBoxProps: DropdownSearchTextBoxProps
919
- }
927
+ },
928
+ renderCustomClearComponent: renderCustomSearchClearComponent
920
929
  }))) : null, /*#__PURE__*/React.createElement(CardContent, {
921
930
  shrink: true,
922
931
  customClass: !tabletMode && dropBoxSize ? style[dropBoxSize] : '',
@@ -94,7 +94,9 @@ export const Select_propTypes = {
94
94
  targetOffset: PropTypes.object,
95
95
  isRestrictScroll: PropTypes.bool,
96
96
  dropBoxPortalId: PropTypes.string,
97
- allowValueFallback: PropTypes.bool
97
+ allowValueFallback: PropTypes.bool,
98
+ renderCustomToggleIndicator: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
99
+ renderCustomSearchClearComponent: PropTypes.func
98
100
  };
99
101
  export const GroupSelect_propTypes = {
100
102
  groupedOptions: PropTypes.arrayOf(PropTypes.shape({
@@ -109,7 +109,8 @@ export default class TextBoxIcon extends React.Component {
109
109
  isScrollPrevent,
110
110
  customProps,
111
111
  needInputFocusOnWrapperClick,
112
- renderRightPlaceholderNode
112
+ renderRightPlaceholderNode,
113
+ renderCustomClearComponent
113
114
  } = this.props;
114
115
  const {
115
116
  isActive
@@ -167,7 +168,10 @@ export default class TextBoxIcon extends React.Component {
167
168
  className: `${style.iconContainer} ${customTBoxIcon}`
168
169
  }, /*#__PURE__*/React.createElement(Container, {
169
170
  alignBox: "row"
170
- }, value && onClear && value.length > 1 && !isDisabled && !isReadOnly || showClearIcon ? /*#__PURE__*/React.createElement(Box, {
171
+ }, value && onClear && value.length > 1 && !isDisabled && !isReadOnly || showClearIcon ? typeof renderCustomClearComponent == 'function' ? renderCustomClearComponent({
172
+ clearText,
173
+ handleClear: this.handleClear
174
+ }) : /*#__PURE__*/React.createElement(Box, {
171
175
  className: `${btnStyle.buttonReset} ${style.icon}`,
172
176
  onClick: this.handleClear,
173
177
  dataId: `${dataId}_ClearIcon`,
@@ -50,5 +50,6 @@ export const propTypes = { ...TextBox_propTypes,
50
50
  customProps: PropTypes.shape({
51
51
  TextBoxProps: PropTypes.object
52
52
  }),
53
- renderRightPlaceholderNode: PropTypes.node
53
+ renderRightPlaceholderNode: PropTypes.node,
54
+ renderCustomClearComponent: PropTypes.func
54
55
  };
@@ -148,14 +148,15 @@ var AppContainer = /*#__PURE__*/function (_React$Component) {
148
148
 
149
149
  if (this.containerElement && needTooltip) {
150
150
  this.containerElement.removeEventListener('mouseover', this.handleOver, false);
151
- this.containerElement.addEventListener('mouseout', this.removeTimeout, false);
151
+ this.containerElement.removeEventListener('mouseout', this.removeTimeout, false);
152
152
  this.tooltipRef.unObserveElement();
153
- (0, _Config.setLibraryConfig)({
154
- getTooltipContainer: function getTooltipContainer() {
155
- return null;
156
- }
157
- });
158
153
  }
154
+
155
+ (0, _Config.setLibraryConfig)({
156
+ getTooltipContainer: function getTooltipContainer() {
157
+ return null;
158
+ }
159
+ });
159
160
  }
160
161
  }, {
161
162
  key: "render",
@@ -11,7 +11,7 @@ var _react = _interopRequireWildcard(require("react"));
11
11
 
12
12
  var _FocusScope = _interopRequireDefault(require("@zohodesk/a11y/es/FocusScope/FocusScope"));
13
13
 
14
- var _Portal = _interopRequireDefault(require("../Modal/Portal/Portal"));
14
+ var _Modal = _interopRequireDefault(require("../Modal/Modal"));
15
15
 
16
16
  var _LibraryContextInit = _interopRequireDefault(require("../Provider/LibraryContextInit"));
17
17
 
@@ -90,13 +90,13 @@ function DropBox(props) {
90
90
  }, props, {
91
91
  zIndexStyle: zIndexStyle
92
92
  }));
93
- return isModel && isActive ? /*#__PURE__*/_react["default"].createElement(_Portal["default"], {
93
+ return isModel && isActive ? /*#__PURE__*/_react["default"].createElement(_Modal["default"], {
94
94
  portalId: portalId
95
95
  }, /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
96
96
  className: "".concat(_DropBoxModule["default"].freezeLayer, " ").concat(_DropBoxModule["default"].freeze),
97
97
  style: zIndexStyle,
98
98
  onClick: _Common.stopPropagation
99
- }), dropBoxEle)) : !isAbsolutePositioningNeeded && isActive ? /*#__PURE__*/_react["default"].createElement(_Portal["default"], {
99
+ }), dropBoxEle)) : !isAbsolutePositioningNeeded && isActive ? /*#__PURE__*/_react["default"].createElement(_Modal["default"], {
100
100
  portalId: portalId
101
101
  }, /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, isRestrictScroll ? /*#__PURE__*/_react["default"].createElement("div", {
102
102
  className: _DropBoxModule["default"].freezeLayer,
@@ -9,14 +9,12 @@ exports["default"] = void 0;
9
9
 
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
 
12
+ var _reactDom = _interopRequireDefault(require("react-dom"));
13
+
12
14
  var _defaultProps = require("./props/defaultProps");
13
15
 
14
16
  var _propTypes = require("./props/propTypes");
15
17
 
16
- var _Portal = _interopRequireDefault(require("./Portal/Portal"));
17
-
18
- var _Config = require("../Provider/Config");
19
-
20
18
  var _AppContainerModule = _interopRequireDefault(require("../AppContainer/AppContainer.module.css"));
21
19
 
22
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -61,13 +59,10 @@ var Modal = /*#__PURE__*/function (_React$Component) {
61
59
  _this.handleAddPortalId = _this.handleAddPortalId.bind(_assertThisInitialized(_this));
62
60
  _this.handleRemovePortalId = _this.handleRemovePortalId.bind(_assertThisInitialized(_this));
63
61
  _this.handleInsertPortalDiv = _this.handleInsertPortalDiv.bind(_assertThisInitialized(_this));
64
- _this.setPortalDiv = _this.setPortalDiv.bind(_assertThisInitialized(_this));
65
- _this.getRootElement = _this.getRootElement.bind(_assertThisInitialized(_this));
66
- _this.getPortalPrefix = _this.getPortalPrefix.bind(_assertThisInitialized(_this));
62
+ _this.getPortalDiv = _this.getPortalDiv.bind(_assertThisInitialized(_this));
67
63
  _this.state = {
68
64
  isMounted: false
69
65
  };
70
- _this.portalPrefix = _this.getPortalPrefix();
71
66
  _this.portalId = props.portalId;
72
67
  _this.setRef = _this.setRef.bind(_assertThisInitialized(_this));
73
68
  _this.ref = null; // this.portalDiv = document.createDocumentFragment();
@@ -86,46 +81,28 @@ var Modal = /*#__PURE__*/function (_React$Component) {
86
81
  }
87
82
  }
88
83
  }, {
89
- key: "getRootElement",
90
- value: function getRootElement() {
91
- var getRootElement = (0, _Config.getLibraryConfig)('getRootElement');
92
-
93
- if (getRootElement && typeof getRootElement === 'function') {
94
- var parent = getRootElement();
95
-
96
- if (parent) {
97
- return parent;
98
- }
99
- }
100
-
101
- return null;
102
- }
103
- }, {
104
- key: "getPortalPrefix",
105
- value: function getPortalPrefix() {
106
- var portalPrefix = (0, _Config.getLibraryConfig)('portalPrefix');
107
- return portalPrefix !== '' ? portalPrefix : '';
108
- }
109
- }, {
110
- key: "setPortalDiv",
111
- value: function setPortalDiv() {
112
- var modalRoot = this.props.portalId ? document.querySelector("[data-portal=".concat(this.portalPrefix).concat(this.props.portalId, "]")) : '';
84
+ key: "getPortalDiv",
85
+ value: function getPortalDiv() {
86
+ this.modalRoot = this.props.portalId ? document.querySelector("[data-portal=".concat(this.props.portalId, "]")) : '';
113
87
 
114
- if (!modalRoot) {
88
+ if (!this.modalRoot) {
115
89
  this.portalId = this.handleAddPortalId();
116
90
  this.newModalRoot = document.createElement('div');
117
91
  this.newModalRoot.className = _AppContainerModule["default"].container;
118
- this.newModalRoot.setAttribute('data-portal', "".concat(this.portalPrefix).concat(this.portalId));
92
+ this.newModalRoot.setAttribute('data-portal', this.portalId);
119
93
  this.containerDiv && this.containerDiv.appendChild(this.newModalRoot);
94
+ this.modalRoot = this.newModalRoot;
120
95
  }
96
+
97
+ return this.modalRoot;
121
98
  }
122
99
  }, {
123
100
  key: "componentDidMount",
124
101
  value: function componentDidMount() {
125
102
  var _this2 = this;
126
103
 
127
- this.containerDiv = this.getRootElement() || document.getElementsByTagName('desk')[0] || document.getElementsByTagName('body')[0];
128
- this.setPortalDiv();
104
+ this.containerDiv = document.getElementsByTagName('desk')[0] ? document.getElementsByTagName('desk')[0] : document.getElementsByTagName('body')[0];
105
+ this.portalDiv = this.getPortalDiv();
129
106
  this.setState({
130
107
  isMounted: true
131
108
  }, function () {
@@ -135,6 +112,7 @@ var Modal = /*#__PURE__*/function (_React$Component) {
135
112
  }, {
136
113
  key: "componentWillUnmount",
137
114
  value: function componentWillUnmount() {
115
+ //this.modalRoot && this.modalRoot.removeChild(this.portalDiv);
138
116
  if (this.newModalRoot) {
139
117
  this.containerDiv && this.containerDiv.removeChild(this.newModalRoot);
140
118
  this.handleRemovePortalId();
@@ -207,11 +185,9 @@ var Modal = /*#__PURE__*/function (_React$Component) {
207
185
 
208
186
  if (isMounted) {
209
187
  if (Element) {
210
- return /*#__PURE__*/_react["default"].createElement(_Portal["default"], {
211
- portalId: this.portalId
212
- }, /*#__PURE__*/_react["default"].createElement(Element, _extends({
188
+ return /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(Element, _extends({
213
189
  ref: this.setRef
214
- }, elementProps)));
190
+ }, elementProps)), this.portalDiv);
215
191
  }
216
192
 
217
193
  return null;
@@ -963,7 +963,10 @@ var MultiSelectComponent = /*#__PURE__*/function (_React$Component) {
963
963
  isPopupOpen = _this$props14.isPopupOpen,
964
964
  ariaErrorId = _this$props14.ariaErrorId,
965
965
  customProps = _this$props14.customProps,
966
- isFocus = _this$props14.isFocus;
966
+ isFocus = _this$props14.isFocus,
967
+ isPopupReady = _this$props14.isPopupReady,
968
+ renderCustomClearComponent = _this$props14.renderCustomClearComponent,
969
+ renderCustomToggleIndicator = _this$props14.renderCustomToggleIndicator;
967
970
  var _this$state8 = this.state,
968
971
  isActive = _this$state8.isActive,
969
972
  selectedOptions = _this$state8.selectedOptions,
@@ -1039,14 +1042,24 @@ var MultiSelectComponent = /*#__PURE__*/function (_React$Component) {
1039
1042
  ariaDescribedby: ariaErrorId,
1040
1043
  ariaLabelledby: ariaLabelledby
1041
1044
  },
1042
- autoComplete: autoComplete
1045
+ autoComplete: autoComplete,
1046
+ renderRightPlaceholderNode: typeof renderCustomToggleIndicator == 'function' ? renderCustomToggleIndicator({
1047
+ togglePopup: this.togglePopup,
1048
+ isPopupOpened: isPopupReady,
1049
+ isReadOnly: isReadOnly,
1050
+ isDisabled: isDisabled
1051
+ }) : renderCustomToggleIndicator
1043
1052
  }, TextBoxIconProps), /*#__PURE__*/_react["default"].createElement(_Layout.Container, {
1044
1053
  isInline: true,
1045
1054
  isCover: false,
1046
1055
  alignBox: "row",
1047
1056
  align: "vertical",
1048
1057
  className: _MultiSelectModule["default"].rightPlaceholder
1049
- }, isShowClearIcon ? /*#__PURE__*/_react["default"].createElement(_Layout.Box, {
1058
+ }, isShowClearIcon ? typeof renderCustomClearComponent === 'function' ? renderCustomClearComponent({
1059
+ clearText: clearText,
1060
+ isPopupOpened: isPopupReady,
1061
+ handleClearAll: this.handleDeselectAll
1062
+ }) : /*#__PURE__*/_react["default"].createElement(_Layout.Box, {
1050
1063
  className: "".concat(_MultiSelectModule["default"]["delete"], " ").concat(_MultiSelectModule["default"]["".concat(palette, "Delete")]),
1051
1064
  dataId: "".concat(dataId, "_clearIcon"),
1052
1065
  "data-title": clearText,
@@ -133,7 +133,9 @@ var MultiSelect_propTypes = {
133
133
  TextBoxIconProps: _propTypes["default"].object
134
134
  }),
135
135
  isFocus: _propTypes["default"].bool,
136
- allowValueFallback: _propTypes["default"].bool
136
+ allowValueFallback: _propTypes["default"].bool,
137
+ renderCustomClearComponent: _propTypes["default"].func,
138
+ renderCustomToggleIndicator: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].node])
137
139
  };
138
140
  exports.MultiSelect_propTypes = MultiSelect_propTypes;
139
141
  var MultiSelectHeader_propTypes = {
@@ -103,23 +103,24 @@ var viewPort = {
103
103
  var paddingSpace = 5; // space between target and relative element
104
104
 
105
105
  var arrowSize = needArrow ? 10 : 0;
106
- var padding = needArrow ? arrowSize : paddingSpace;
106
+ rect.height = rect.height + (needArrow ? arrowSize : paddingSpace);
107
+ rect.width = rect.width + (needArrow ? arrowSize : paddingSpace);
107
108
  var arrowHorizontalBalancePx = !isAbsolute && needArrow ? 30 : 0;
108
109
  var arrowVerticalBalancePx = !isAbsolute && needArrow ? 27 : 0;
109
- var bottomOverFlow = rect.height + padding > relativeBoxGap.bottom;
110
- var topOverFlow = rect.height + padding > relativeBoxGap.top;
111
- var rightOverFlow = rect.width + padding > relativeBoxGap.right;
112
- var leftOverFlow = rect.width + padding > relativeBoxGap.left;
113
- var horizontalCenterOverFlow = rect.width / 2 + padding > relativeBoxGap.center.right || rect.width / 2 + padding > relativeBoxGap.center.left;
114
- var verticalCenterOverFlow = rect.height / 2 + padding > relativeBoxGap.center.top || rect.height / 2 + padding > relativeBoxGap.center.bottom;
115
- var horizontalLeftToRightOverFlow = rect.width + padding > relativeBoxRect.width + relativeBoxGap.right;
116
- var horizontalCenterToRightOverFlow = rect.width + padding > relativeBoxGap.center.right || arrowHorizontalBalancePx > relativeBoxGap.center.left;
117
- var horizontalRightToLeft = rect.width + padding > relativeBoxRect.width + relativeBoxGap.left;
118
- var horizontalCenterToLeft = rect.width + padding > relativeBoxGap.center.left || arrowHorizontalBalancePx > relativeBoxGap.center.right;
119
- var verticalTopToBottomOverFlow = rect.height + padding > relativeBoxRect.height + relativeBoxGap.bottom;
120
- var verticalCenterToBottomOverFlow = rect.height + padding > relativeBoxGap.center.bottom || arrowVerticalBalancePx > relativeBoxGap.center.top;
121
- var verticalBottomToTopOverFlow = rect.height + padding > relativeBoxRect.height + relativeBoxGap.top;
122
- var verticalCenterToTopOverFlow = rect.height + padding > relativeBoxGap.center.top || arrowVerticalBalancePx > relativeBoxGap.center.bottom;
110
+ var bottomOverFlow = rect.height > relativeBoxGap.bottom;
111
+ var topOverFlow = rect.height > relativeBoxGap.top;
112
+ var rightOverFlow = rect.width > relativeBoxGap.right;
113
+ var leftOverFlow = rect.width > relativeBoxGap.left;
114
+ var horizontalCenterOverFlow = rect.width / 2 > relativeBoxGap.center.right || rect.width / 2 > relativeBoxGap.center.left;
115
+ var verticalCenterOverFlow = rect.height / 2 > relativeBoxGap.center.top || rect.height / 2 > relativeBoxGap.center.bottom;
116
+ var horizontalLeftToRightOverFlow = rect.width > relativeBoxRect.width + relativeBoxGap.right;
117
+ var horizontalCenterToRightOverFlow = rect.width > relativeBoxGap.center.right || arrowHorizontalBalancePx > relativeBoxGap.center.left;
118
+ var horizontalRightToLeft = rect.width > relativeBoxRect.width + relativeBoxGap.left;
119
+ var horizontalCenterToLeft = rect.width > relativeBoxGap.center.left || arrowHorizontalBalancePx > relativeBoxGap.center.right;
120
+ var verticalTopToBottomOverFlow = rect.height > relativeBoxRect.height + relativeBoxGap.bottom;
121
+ var verticalCenterToBottomOverFlow = rect.height > relativeBoxGap.center.bottom || arrowVerticalBalancePx > relativeBoxGap.center.top;
122
+ var verticalBottomToTopOverFlow = rect.height > relativeBoxRect.height + relativeBoxGap.top;
123
+ var verticalCenterToTopOverFlow = rect.height > relativeBoxGap.center.top || arrowVerticalBalancePx > relativeBoxGap.center.bottom;
123
124
  var views = {
124
125
  bottomCenter: !(bottomOverFlow || horizontalCenterOverFlow),
125
126
  bottomLeftToRight: !(bottomOverFlow || horizontalLeftToRightOverFlow),
@@ -15,10 +15,7 @@ var id = {
15
15
  direction: 'ltr',
16
16
  tooltipDebounce: 175,
17
17
  getTooltipContainer: function getTooltipContainer() {},
18
- autoComplete: false,
19
- portalPrefix: '',
20
- getRootElement: function getRootElement() {},
21
- getPortalContainer: function getPortalContainer() {}
18
+ autoComplete: false
22
19
  };
23
20
 
24
21
  function getLibraryConfig(key) {