@zohodesk/components 1.0.0-temp-203.2 → 1.0.0-temp-204

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 (141) hide show
  1. package/.cli/propValidation_report.html +1 -1
  2. package/README.md +25 -0
  3. package/es/CheckBox/CheckBox.js +3 -2
  4. package/es/CheckBox/props/propTypes.js +2 -1
  5. package/es/DateTime/DateWidget.js +8 -3
  6. package/es/DateTime/DateWidget.module.css +1 -0
  7. package/es/DateTime/__tests__/__snapshots__/DateTime.spec.js.snap +3 -3
  8. package/es/DateTime/__tests__/__snapshots__/DateWidget.spec.js.snap +1 -1
  9. package/es/DateTime/__tests__/__snapshots__/Time.spec.js.snap +3 -3
  10. package/es/DropBox/DropBoxElement/DropBoxElement.js +1 -1
  11. package/es/DropBox/DropBoxPositionMapping.js +142 -0
  12. package/es/ListItem/ListItemWithAvatar.js +9 -5
  13. package/es/ListItem/props/defaultProps.js +1 -0
  14. package/es/ListItem/props/propTypes.js +4 -1
  15. package/es/MultiSelect/MultiSelect.js +11 -3
  16. package/es/MultiSelect/MultiSelect.module.css +4 -0
  17. package/es/MultiSelect/Suggestions.js +2 -0
  18. package/es/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +1 -1
  19. package/es/MultiSelect/__tests__/__snapshots__/MultiSelectWithAvatar.spec.js.snap +1 -1
  20. package/es/MultiSelect/props/defaultProps.js +2 -1
  21. package/es/MultiSelect/props/propTypes.js +5 -1
  22. package/es/Popup/Popup.js +1 -1
  23. package/es/Popup/PositionMapping.js +72 -0
  24. package/es/Provider/LibraryContext.js +15 -3
  25. package/es/Provider/LibraryContextInit.js +1 -1
  26. package/es/Tab/Tabs.js +124 -20
  27. package/es/Tab/Tabs.module.css +33 -2
  28. package/es/Tab/props/defaultProps.js +3 -1
  29. package/es/Tab/props/propTypes.js +6 -1
  30. package/es/Tag/Tag.js +3 -1
  31. package/es/Tag/__tests__/Tag.spec.js +10 -0
  32. package/es/Tag/__tests__/__snapshots__/Tag.spec.js.snap +20 -0
  33. package/es/Tag/props/defaultProps.js +1 -0
  34. package/es/Tag/props/propTypes.js +1 -0
  35. package/es/TextBoxIcon/TextBoxIcon.js +13 -3
  36. package/es/TextBoxIcon/props/defaultProps.js +1 -0
  37. package/es/TextBoxIcon/props/propTypes.js +3 -1
  38. package/es/{Select → select}/Select.js +13 -8
  39. package/es/{Select → select}/Select.module.css +3 -0
  40. package/es/{Select → select}/SelectWithIcon.js +24 -4
  41. package/es/{Select → select}/__tests__/__snapshots__/Select.spec.js.snap +1 -1
  42. package/{lib/Select → es/select}/__tests__/__snapshots__/SelectWithIcon.spec.js.snap +1 -1
  43. package/es/{Select → select}/props/defaultProps.js +2 -1
  44. package/es/{Select → select}/props/propTypes.js +7 -1
  45. package/es/v1/DropBox/DropBoxElement/DropBoxElement.js +1 -1
  46. package/es/v1/ListItem/ListItemWithAvatar.js +9 -5
  47. package/es/v1/ListItem/props/defaultProps.js +1 -0
  48. package/es/v1/ListItem/props/propTypes.js +4 -1
  49. package/es/v1/MultiSelect/Suggestions.js +2 -0
  50. package/es/v1/MultiSelect/props/propTypes.js +1 -0
  51. package/es/v1/Popup/Popup.js +1 -1
  52. package/es/v1/Select/Select.js +3 -1
  53. package/es/v1/Select/props/propTypes.js +1 -0
  54. package/es/v1/Tag/Tag.js +3 -1
  55. package/es/v1/Tag/props/defaultProps.js +1 -0
  56. package/es/v1/Tag/props/propTypes.js +1 -0
  57. package/es/v1/TextBoxIcon/TextBoxIcon.js +9 -1
  58. package/es/v1/TextBoxIcon/props/defaultProps.js +1 -0
  59. package/es/v1/TextBoxIcon/props/propTypes.js +1 -0
  60. package/lib/CheckBox/CheckBox.js +3 -2
  61. package/lib/CheckBox/props/propTypes.js +2 -1
  62. package/lib/DateTime/DateWidget.js +11 -4
  63. package/lib/DateTime/DateWidget.module.css +1 -0
  64. package/lib/DateTime/__tests__/__snapshots__/DateTime.spec.js.snap +3 -3
  65. package/lib/DateTime/__tests__/__snapshots__/DateWidget.spec.js.snap +1 -1
  66. package/lib/DateTime/__tests__/__snapshots__/Time.spec.js.snap +3 -3
  67. package/lib/DropBox/DropBoxElement/DropBoxElement.js +1 -1
  68. package/lib/DropBox/DropBoxPositionMapping.js +149 -0
  69. package/lib/ListItem/ListItemWithAvatar.js +9 -5
  70. package/lib/ListItem/props/defaultProps.js +1 -0
  71. package/lib/ListItem/props/propTypes.js +4 -2
  72. package/lib/MultiSelect/MultiSelect.js +12 -4
  73. package/lib/MultiSelect/MultiSelect.module.css +4 -0
  74. package/lib/MultiSelect/Suggestions.js +2 -0
  75. package/lib/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +1 -1
  76. package/lib/MultiSelect/__tests__/__snapshots__/MultiSelectWithAvatar.spec.js.snap +1 -1
  77. package/lib/MultiSelect/props/defaultProps.js +2 -1
  78. package/lib/MultiSelect/props/propTypes.js +5 -1
  79. package/lib/Popup/Popup.js +1 -1
  80. package/lib/Popup/PositionMapping.js +81 -0
  81. package/lib/Provider/LibraryContext.js +15 -5
  82. package/lib/Provider/LibraryContextInit.js +1 -1
  83. package/lib/Tab/Tabs.js +125 -27
  84. package/lib/Tab/Tabs.module.css +33 -2
  85. package/lib/Tab/props/defaultProps.js +3 -1
  86. package/lib/Tab/props/propTypes.js +6 -1
  87. package/lib/Tag/Tag.js +5 -2
  88. package/lib/Tag/__tests__/Tag.spec.js +10 -0
  89. package/lib/Tag/__tests__/__snapshots__/Tag.spec.js.snap +20 -0
  90. package/lib/Tag/props/defaultProps.js +1 -0
  91. package/lib/Tag/props/propTypes.js +1 -0
  92. package/lib/TextBoxIcon/TextBoxIcon.js +14 -3
  93. package/lib/TextBoxIcon/props/defaultProps.js +1 -0
  94. package/lib/TextBoxIcon/props/propTypes.js +3 -1
  95. package/lib/{Select → select}/Select.js +14 -9
  96. package/lib/{Select → select}/Select.module.css +3 -0
  97. package/lib/{Select → select}/SelectWithIcon.js +33 -6
  98. package/lib/{Select → select}/__tests__/__snapshots__/Select.spec.js.snap +1 -1
  99. package/{es/Select → lib/select}/__tests__/__snapshots__/SelectWithIcon.spec.js.snap +1 -1
  100. package/lib/{Select → select}/props/defaultProps.js +1 -1
  101. package/lib/{Select → select}/props/propTypes.js +7 -1
  102. package/lib/v1/DropBox/DropBoxElement/DropBoxElement.js +1 -1
  103. package/lib/v1/ListItem/ListItemWithAvatar.js +9 -5
  104. package/lib/v1/ListItem/props/defaultProps.js +1 -0
  105. package/lib/v1/ListItem/props/propTypes.js +4 -2
  106. package/lib/v1/MultiSelect/Suggestions.js +2 -0
  107. package/lib/v1/MultiSelect/props/propTypes.js +1 -0
  108. package/lib/v1/Popup/Popup.js +1 -1
  109. package/lib/v1/Select/Select.js +4 -2
  110. package/lib/v1/Select/props/propTypes.js +1 -0
  111. package/lib/v1/Tag/Tag.js +5 -2
  112. package/lib/v1/Tag/props/defaultProps.js +1 -0
  113. package/lib/v1/Tag/props/propTypes.js +1 -0
  114. package/lib/v1/TextBoxIcon/TextBoxIcon.js +9 -1
  115. package/lib/v1/TextBoxIcon/props/defaultProps.js +1 -0
  116. package/lib/v1/TextBoxIcon/props/propTypes.js +1 -0
  117. package/package.json +1 -1
  118. package/propValidationArg.json +1 -1
  119. package/result.json +1 -1
  120. package/es/DropBox/DropBoxPositionMapping.json +0 -145
  121. package/es/Popup/PositionMapping.json +0 -74
  122. package/lib/DropBox/DropBoxPositionMapping.json +0 -145
  123. package/lib/Popup/PositionMapping.json +0 -74
  124. /package/es/{Select → select}/GroupSelect.js +0 -0
  125. /package/es/{Select → select}/SelectWithAvatar.js +0 -0
  126. /package/es/{Select → select}/__tests__/GroupSelect.spec.js +0 -0
  127. /package/es/{Select → select}/__tests__/Select.spec.js +0 -0
  128. /package/es/{Select → select}/__tests__/SelectWithAvatar.spec.js +0 -0
  129. /package/es/{Select → select}/__tests__/SelectWithIcon.spec.js +0 -0
  130. /package/es/{Select → select}/__tests__/__snapshots__/GroupSelect.spec.js.snap +0 -0
  131. /package/es/{Select → select}/__tests__/__snapshots__/SelectWithAvatar.spec.js.snap +0 -0
  132. /package/es/{Select → select}/index.js +0 -0
  133. /package/lib/{Select → select}/GroupSelect.js +0 -0
  134. /package/lib/{Select → select}/SelectWithAvatar.js +0 -0
  135. /package/lib/{Select → select}/__tests__/GroupSelect.spec.js +0 -0
  136. /package/lib/{Select → select}/__tests__/Select.spec.js +0 -0
  137. /package/lib/{Select → select}/__tests__/SelectWithAvatar.spec.js +0 -0
  138. /package/lib/{Select → select}/__tests__/SelectWithIcon.spec.js +0 -0
  139. /package/lib/{Select → select}/__tests__/__snapshots__/GroupSelect.spec.js.snap +0 -0
  140. /package/lib/{Select → select}/__tests__/__snapshots__/SelectWithAvatar.spec.js.snap +0 -0
  141. /package/lib/{Select → select}/index.js +0 -0
package/es/Tab/Tabs.js CHANGED
@@ -8,6 +8,7 @@
8
8
  }]
9
9
  */
10
10
  import React from 'react';
11
+ import EmptySearch from '@zohodesk/svg/lib/emptystate/version3/EmptySearch';
11
12
  import Tab from './Tab';
12
13
  import { Tabs_defaultProps } from './props/defaultProps';
13
14
  import { Tabs_propTypes } from './props/propTypes';
@@ -18,6 +19,7 @@ import ListItem from '../ListItem/ListItem';
18
19
  import { Icon } from '@zohodesk/icons';
19
20
  import tabsStyle from './Tabs.module.css';
20
21
  import Popup from '../Popup/Popup';
22
+ import TextBoxIcon from '../TextBoxIcon/TextBoxIcon';
21
23
  import ResponsiveDropBox from '../ResponsiveDropBox/ResponsiveDropBox';
22
24
  import { ResponsiveReceiver } from '../Responsive/CustomResponsive';
23
25
  import btnstyle from '../semantic/Button/semanticButton.module.css';
@@ -30,9 +32,10 @@ class Tabs extends React.Component {
30
32
  tabDimensions: {},
31
33
  highlightInitialDimension: null,
32
34
  renderVirtualTabs: true,
33
- tabKeys: []
35
+ tabKeys: [],
36
+ searchValue: ''
34
37
  };
35
- bind.apply(this, ['moreTabSelect', 'onResize', 'onTabResize', 'getHighlightRef', 'getTabsRef', 'getTabRef', 'getHighlightDim', 'onSizeChange', 'onScroll', 'togglePopup', 'setMaxDim']);
38
+ bind.apply(this, ['moreTabSelect', 'onResize', 'onTabResize', 'getHighlightRef', 'getTabsRef', 'getTabRef', 'getHighlightDim', 'onSizeChange', 'onScroll', 'togglePopup', 'setMaxDim', 'handleChange', 'handleSearchValueClear', 'getMoreList', 'renderEmptyState']);
36
39
  this.tabsObserver = new ResizeObserver(this.onResize);
37
40
  this.tabObserver = {};
38
41
  }
@@ -130,12 +133,14 @@ class Tabs extends React.Component {
130
133
  let {
131
134
  children,
132
135
  selectedTab,
133
- childType
136
+ childType,
137
+ isPopupOpen
134
138
  } = this.props;
135
139
  let {
136
140
  tabDimensions,
137
141
  totalDimension,
138
- tabKeys
142
+ tabKeys,
143
+ searchValue
139
144
  } = this.state;
140
145
 
141
146
  if (prevProps.children && children) {
@@ -169,6 +174,10 @@ class Tabs extends React.Component {
169
174
  if (prevProps.selectedTab !== selectedTab || newTabKeys.length === 1) {
170
175
  this.moveHighlight();
171
176
  }
177
+
178
+ if (prevProps.isPopupOpen != isPopupOpen && searchValue.length) {
179
+ this.handleSearchValueClear();
180
+ }
172
181
  }
173
182
  }
174
183
 
@@ -373,6 +382,7 @@ class Tabs extends React.Component {
373
382
 
374
383
  e.preventDefault();
375
384
  onSelect(tab);
385
+ this.togglePopup();
376
386
  }
377
387
 
378
388
  onScroll(e) {
@@ -407,6 +417,69 @@ class Tabs extends React.Component {
407
417
  };
408
418
  }
409
419
 
420
+ handleChange(value, e) {
421
+ this.setState({
422
+ searchValue: value
423
+ });
424
+ }
425
+
426
+ handleSearchValueClear(e) {
427
+ this.setState({
428
+ searchValue: ''
429
+ });
430
+ }
431
+
432
+ getMoreList(_ref2) {
433
+ let {
434
+ moreTabs
435
+ } = _ref2;
436
+ const valideElements = [];
437
+ {
438
+ React.Children.map(moreTabs, child => {
439
+ const isValidElement = /*#__PURE__*/React.isValidElement(child);
440
+
441
+ if (isValidElement) {
442
+ valideElements.push(child.props);
443
+ }
444
+ });
445
+ }
446
+ return valideElements;
447
+ }
448
+
449
+ handleFilterSuggestions(_ref3) {
450
+ let {
451
+ moreTabs
452
+ } = _ref3;
453
+ const {
454
+ searchValue
455
+ } = this.state;
456
+ const options = this.getMoreList({
457
+ moreTabs
458
+ });
459
+ const filteredOptions = options.filter(list => {
460
+ const {
461
+ id = ''
462
+ } = list;
463
+ const value = id;
464
+ return value.toLowerCase().includes(searchValue);
465
+ });
466
+ return filteredOptions;
467
+ }
468
+
469
+ renderEmptyState() {
470
+ const {
471
+ searchErrorText
472
+ } = this.props;
473
+ return /*#__PURE__*/React.createElement("div", {
474
+ className: tabsStyle.emptyStateContainer
475
+ }, /*#__PURE__*/React.createElement(EmptySearch, {
476
+ size: "small"
477
+ }), /*#__PURE__*/React.createElement("div", {
478
+ className: tabsStyle.emptyStateTitle
479
+ }, searchErrorText));
480
+ return ''; // return <EmptySearch size='small' />;
481
+ }
482
+
410
483
  renderTabs(mainTabs, moreTabs, isVirtual) {
411
484
  let {
412
485
  selectedTab,
@@ -434,14 +507,26 @@ class Tabs extends React.Component {
434
507
  customProps,
435
508
  getCustomDropBoxHeaderPlaceHolder,
436
509
  dataSelectorId,
437
- dataId
510
+ dataId,
511
+ placeHolderText,
512
+ searchBoxSize,
513
+ ariaTitleId,
514
+ TextBoxIconProps,
515
+ removeClose
438
516
  } = this.props;
517
+ const {
518
+ searchValue
519
+ } = this.state;
439
520
  let {
440
521
  DropBoxProps = {},
441
522
  ListItemProps = {},
442
523
  MoreButtonProps = {}
443
524
  } = customProps;
444
525
  let popupClass = align === 'vertical' ? tabsStyle[position] ? tabsStyle[position] : '' : '';
526
+ const listItemArray = this.handleFilterSuggestions({
527
+ moreTabs
528
+ });
529
+ const isSearch = moreTabs.length > 4;
445
530
  return /*#__PURE__*/React.createElement(React.Fragment, null, React.Children.map(mainTabs, child => {
446
531
  if (!child) {
447
532
  return null;
@@ -491,10 +576,10 @@ class Tabs extends React.Component {
491
576
  })), isPopupOpen && /*#__PURE__*/React.createElement(ResponsiveReceiver, {
492
577
  query: this.responsiveFunc,
493
578
  responsiveId: "Helmet"
494
- }, _ref2 => {
579
+ }, _ref4 => {
495
580
  let {
496
581
  tabletMode
497
- } = _ref2;
582
+ } = _ref4;
498
583
  return /*#__PURE__*/React.createElement(ResponsiveDropBox, {
499
584
  isActive: isPopupReady,
500
585
  isAnimate: true,
@@ -504,25 +589,44 @@ class Tabs extends React.Component {
504
589
  },
505
590
  boxPosition: position,
506
591
  getRef: getContainerRef,
507
- isBoxPaddingNeed: true,
592
+ isBoxPaddingNeed: false,
508
593
  isArrow: false,
509
594
  ...DropBoxProps,
510
595
  isResponsivePadding: true,
511
596
  needFocusScope: true,
512
- onClose: this.togglePopup,
513
- dataId: `${dataId}_dropbox`
514
- }, getCustomDropBoxHeaderPlaceHolder && getCustomDropBoxHeaderPlaceHolder(this.props), /*#__PURE__*/React.createElement(Box, {
597
+ dataId: `${dataId}_dropbox`,
598
+ onClick: removeClose
599
+ }, getCustomDropBoxHeaderPlaceHolder && getCustomDropBoxHeaderPlaceHolder(this.props), isSearch ? /*#__PURE__*/React.createElement(Box, {
600
+ className: tabsStyle.search
601
+ }, /*#__PURE__*/React.createElement(TextBoxIcon, {
602
+ placeHolder: placeHolderText,
603
+ onChange: this.handleChange,
604
+ value: searchValue,
605
+ onClear: this.handleSearchValueClear,
606
+ size: searchBoxSize,
607
+ customProps: {
608
+ TextBoxProps: {
609
+ 'data-a11y-autofocus': true
610
+ }
611
+ } //search
612
+ ,
613
+ dataId: `${dataId}_search`,
614
+ a11y: {
615
+ role: 'combobox',
616
+ ariaOwns: ariaTitleId,
617
+ ariaAutocomplete: 'list',
618
+ ariaHaspopup: true,
619
+ ariaExpanded: true
620
+ },
621
+ ...TextBoxIconProps
622
+ })) : null, /*#__PURE__*/React.createElement(Box, {
515
623
  flexible: true,
516
624
  shrink: true,
517
625
  scroll: "vertical",
518
- className: `${tabletMode ? '' : tabsStyle.menuBox} ${moreBoxClass}`,
626
+ className: `${tabsStyle.listWrapper} ${tabletMode ? '' : tabsStyle.menuBox} ${moreBoxClass}`,
519
627
  onScroll: this.onScroll,
520
628
  dataId: `${dataId}_Tabs`
521
- }, React.Children.map(moreTabs, child => {
522
- if (!child) {
523
- return null;
524
- }
525
-
629
+ }, listItemArray.length ? listItemArray.map(data => {
526
630
  let {
527
631
  text,
528
632
  id,
@@ -531,9 +635,9 @@ class Tabs extends React.Component {
531
635
  href,
532
636
  children,
533
637
  dataId
534
- } = child.props;
638
+ } = data;
535
639
  const value = text ? text : showTitleInMoreOptions ? title : null;
536
- return /*#__PURE__*/React.isValidElement(child) && /*#__PURE__*/React.createElement(ListItem, {
640
+ return /*#__PURE__*/React.createElement(ListItem, {
537
641
  key: id,
538
642
  value: value,
539
643
  onClick: this.moreTabSelect,
@@ -549,7 +653,7 @@ class Tabs extends React.Component {
549
653
  dataId: `${dataId}_Tab`,
550
654
  ...ListItemProps
551
655
  }, !showTitleInMoreOptions ? children : null);
552
- })));
656
+ }) : this.renderEmptyState()));
553
657
  })) : null);
554
658
  }
555
659
 
@@ -123,15 +123,46 @@
123
123
  .bottomRightToLeft,
124
124
  .topRightToLeft,
125
125
  .bottomCenterToLeft {
126
- right: calc(var(--tab_position_gap) * -1);
126
+ right: calc(var(--tab_position_gap) * -1);
127
127
  }
128
128
 
129
129
  .bottomLeftToRight,
130
130
  .topLeftToRight,
131
131
  .bottomCenterToRight {
132
- left: calc(var(--tab_position_gap) * -1);
132
+ left: calc(var(--tab_position_gap) * -1);
133
133
  }
134
134
 
135
135
  .hidden {
136
136
  visibility: hidden;
137
+ }
138
+
139
+ .search {
140
+ padding: 0 var(--zd_size20) 0 ;
141
+ }
142
+
143
+ .emptyStateContainer {
144
+ padding-bottom: var(--zd_size25);
145
+ }
146
+
147
+ .emptyStateTitle {
148
+ font-family: var(--zd_semibold);
149
+ color: var(--zdt_commonEmptyState_default_title);
150
+ word-wrap: break-word;
151
+ font-size: var(--zd_font_size16) ;
152
+ max-width: var(--zd_size430) ;
153
+ text-align: center;
154
+ }
155
+
156
+ [dir=ltr] .emptyStateTitle {
157
+ margin-left: auto ;
158
+ margin-right: auto ;
159
+ }
160
+
161
+ [dir=rtl] .emptyStateTitle {
162
+ margin-right: auto ;
163
+ margin-left: auto ;
164
+ }
165
+
166
+ .listWrapper {
167
+ padding: var(--zd_size10) 0 ;
137
168
  }
@@ -30,7 +30,9 @@ export const Tabs_defaultProps = {
30
30
  iconSize: '7',
31
31
  containerClass: '',
32
32
  customProps: {},
33
- dataSelectorId: 'tabs'
33
+ dataSelectorId: 'tabs',
34
+ searchBoxSize: 'small',
35
+ searchErrorText: 'No results'
34
36
  };
35
37
  export const TabWrapper_defaultProps = {
36
38
  hookToDisableInternalState: false,
@@ -89,7 +89,12 @@ export const Tabs_propTypes = {
89
89
  MoreButtonProps: PropTypes.object
90
90
  }),
91
91
  getCustomDropBoxHeaderPlaceHolder: PropTypes.func,
92
- dataSelectorId: PropTypes.string
92
+ dataSelectorId: PropTypes.string,
93
+ placeHolderText: PropTypes.string,
94
+ searchBoxSize: PropTypes.string,
95
+ ariaTitleId: PropTypes.string,
96
+ TextBoxIconProps: PropTypes.object,
97
+ searchErrorText: PropTypes.string
93
98
  };
94
99
  export const TabWrapper_propTypes = {
95
100
  align: PropTypes.oneOf(['vertical', 'horizontal']),
package/es/Tag/Tag.js CHANGED
@@ -80,6 +80,7 @@ export default class Tag extends PureComponent {
80
80
  tooltip,
81
81
  avatarPalette,
82
82
  customClass,
83
+ customAttributes,
83
84
  a11y,
84
85
  needEffect,
85
86
  isReadOnly
@@ -105,7 +106,8 @@ export default class Tag extends PureComponent {
105
106
  "data-title": tooltip ? tooltip : text,
106
107
  tabIndex: disabled ? '-1' : '0',
107
108
  "aria-labelledby": getAriaId,
108
- "data-selector-id": dataSelectorId
109
+ "data-selector-id": dataSelectorId,
110
+ ...customAttributes
109
111
  }, hasAvatar ? /*#__PURE__*/React.createElement("div", {
110
112
  className: style.avatar
111
113
  }, /*#__PURE__*/React.createElement(Avatar, {
@@ -232,4 +232,14 @@ describe('Tag component', () => {
232
232
  }));
233
233
  expect(asFragment()).toMatchSnapshot();
234
234
  });
235
+ test('rendering with customAttributes prop', () => {
236
+ const {
237
+ asFragment
238
+ } = render( /*#__PURE__*/React.createElement(Tag, {
239
+ customAttributes: {
240
+ 'data-custom-attribute': 'true'
241
+ }
242
+ }));
243
+ expect(asFragment()).toMatchSnapshot();
244
+ });
235
245
  });
@@ -3052,3 +3052,23 @@ exports[`Tag component rendering the Custom class 1`] = `
3052
3052
  </div>
3053
3053
  </DocumentFragment>
3054
3054
  `;
3055
+
3056
+ exports[`Tag component rendering with customAttributes prop 1`] = `
3057
+ <DocumentFragment>
3058
+ <div
3059
+ aria-labelledby="1"
3060
+ class="container effect medium lgRadius default "
3061
+ data-custom-attribute="true"
3062
+ data-id="tag_Tag"
3063
+ data-selector-id="tag"
3064
+ data-test-id="tag_Tag"
3065
+ tabindex="0"
3066
+ >
3067
+ <div
3068
+ aria-hidden="true"
3069
+ class="text mediumtext"
3070
+ id="1"
3071
+ />
3072
+ </div>
3073
+ </DocumentFragment>
3074
+ `;
@@ -7,6 +7,7 @@ export const defaultProps = {
7
7
  size: 'medium',
8
8
  dataId: 'tag',
9
9
  customClass: {},
10
+ customAttributes: {},
10
11
  a11y: {},
11
12
  needEffect: true,
12
13
  isReadOnly: false,
@@ -26,6 +26,7 @@ export const propTypes = {
26
26
  customTagIcon: PropTypes.string,
27
27
  customAvatar: PropTypes.string
28
28
  }),
29
+ customAttributes: PropTypes.object,
29
30
  a11y: PropTypes.shape({
30
31
  clearLabel: PropTypes.string
31
32
  }),
@@ -18,6 +18,7 @@ export default class TextBoxIcon extends React.Component {
18
18
  this.handleBlur = this.handleBlur.bind(this);
19
19
  this.handleRef = this.handleRef.bind(this);
20
20
  this.handleClear = this.handleClear.bind(this);
21
+ this.handleInputFocusOnClick = this.handleInputFocusOnClick.bind(this);
21
22
  }
22
23
 
23
24
  handleRef(ele) {
@@ -63,6 +64,12 @@ export default class TextBoxIcon extends React.Component {
63
64
  onBlur && onBlur(e);
64
65
  }
65
66
 
67
+ handleInputFocusOnClick() {
68
+ this.inputEle && this.inputEle.focus({
69
+ preventScroll: true
70
+ });
71
+ }
72
+
66
73
  render() {
67
74
  const {
68
75
  type,
@@ -100,7 +107,9 @@ export default class TextBoxIcon extends React.Component {
100
107
  isFocus,
101
108
  onClearMouseDown,
102
109
  isScrollPrevent,
103
- customProps
110
+ customProps,
111
+ needInputFocusOnWrapperClick,
112
+ renderRightPlaceholderNode
104
113
  } = this.props;
105
114
  const {
106
115
  isActive
@@ -122,7 +131,8 @@ export default class TextBoxIcon extends React.Component {
122
131
  isCover: false,
123
132
  className: `${style.container} ${isDisabled ? style.disabled : isReadOnly ? needEffect ? style.effect : style.readonly : style.effect} ${isActive || isFocus ? style.effectFocused : ''} ${customTBoxWrap} ${iconOnHover && (isReadOnly || isDisabled) ? style.iconOnHoverReadonly : iconOnHover && !(isReadOnly || isDisabled) ? style.iconOnHoverStyle : ''}`,
124
133
  dataSelectorId: dataSelectorId,
125
- "data-title": isDisabled ? title : null
134
+ "data-title": isDisabled ? title : null,
135
+ onClick: needInputFocusOnWrapperClick && !isDisabled ? this.handleInputFocusOnClick : null
126
136
  }, /*#__PURE__*/React.createElement(Box, {
127
137
  flexible: true
128
138
  }, /*#__PURE__*/React.createElement(TextBox, { ...this.props,
@@ -172,7 +182,7 @@ export default class TextBoxIcon extends React.Component {
172
182
  size: "14"
173
183
  }))) : null, children ? /*#__PURE__*/React.createElement(Box, {
174
184
  className: `${style.icon} ${iconRotated ? style.rotated : ''}`
175
- }, children) : null)), needBorder && /*#__PURE__*/React.createElement("div", {
185
+ }, children) : null, renderRightPlaceholderNode ? /*#__PURE__*/React.createElement(Box, null, renderRightPlaceholderNode) : null)), needBorder && /*#__PURE__*/React.createElement("div", {
176
186
  className: `${style.line} ${style[`borderColor_${borderColor}`]} ${customTBoxLine}`
177
187
  }));
178
188
  }
@@ -10,6 +10,7 @@ export const defaultProps = {
10
10
  needReadOnlyStyle: true,
11
11
  isClickable: false,
12
12
  needEffect: true,
13
+ needInputFocusOnWrapperClick: false,
13
14
  dataId: 'textBoxIcon',
14
15
  borderColor: 'default',
15
16
  showClearIcon: false,
@@ -20,6 +20,7 @@ export const propTypes = { ...TextBox_propTypes,
20
20
  needBorder: PropTypes.bool,
21
21
  needEffect: PropTypes.bool,
22
22
  needReadOnlyStyle: PropTypes.bool,
23
+ needInputFocusOnWrapperClick: PropTypes.bool,
23
24
  onBlur: PropTypes.func,
24
25
  onChange: PropTypes.func,
25
26
  onClear: PropTypes.func,
@@ -48,5 +49,6 @@ export const propTypes = { ...TextBox_propTypes,
48
49
  isScrollPrevent: PropTypes.bool,
49
50
  customProps: PropTypes.shape({
50
51
  TextBoxProps: PropTypes.object
51
- })
52
+ }),
53
+ renderRightPlaceholderNode: PropTypes.node
52
54
  };
@@ -749,7 +749,8 @@ export class SelectComponent extends Component {
749
749
  let {
750
750
  TextBoxProps = {},
751
751
  DropdownSearchTextBoxProps = {},
752
- SuggestionsProps = {}
752
+ SuggestionsProps = {},
753
+ TextBoxIconProps = {}
753
754
  } = customProps;
754
755
  return /*#__PURE__*/React.createElement("div", {
755
756
  className: `${isParentBased || isReadOnly || isDisabled ? style.container : ''} ${style[`box_${size}`]} ${isReadOnly ? style.readonly : ''} ${borderColor === 'transparent' ? style.transparentContainer : ''} ${iconOnHover && (isReadOnly || isDisabled) ? style.iconOnHoverReadonly : iconOnHover && !(isReadOnly || isDisabled) ? style.iconOnHoverStyle : ''}`,
@@ -803,14 +804,15 @@ export class SelectComponent extends Component {
803
804
  'data-title': title || selected,
804
805
  ...TextBoxProps
805
806
  }
806
- }
807
+ },
808
+ ...TextBoxIconProps
807
809
  }, /*#__PURE__*/React.createElement(Container, {
810
+ isInline: true,
811
+ isCover: false,
808
812
  alignBox: "row",
809
- align: "both"
810
- }, children ? /*#__PURE__*/React.createElement(Box, {
811
- className: isPopupOpen ? style.rotate : '',
812
- dataId: `${dataId}_children`
813
- }, children) : null, /*#__PURE__*/React.createElement(Container, {
813
+ align: "both",
814
+ className: style.rightPlaceholder
815
+ }, /*#__PURE__*/React.createElement(Container, {
814
816
  align: "both",
815
817
  dataId: `${dataId}_downIcon`,
816
818
  "aria-hidden": true,
@@ -818,7 +820,10 @@ export class SelectComponent extends Component {
818
820
  }, /*#__PURE__*/React.createElement(Icon, {
819
821
  name: "ZD-down",
820
822
  size: "7"
821
- })))) : /*#__PURE__*/React.createElement(Textbox, {
823
+ })), children ? /*#__PURE__*/React.createElement(Box, {
824
+ className: isPopupOpen ? style.rotate : '',
825
+ dataId: `${dataId}_children`
826
+ }, children) : null)) : /*#__PURE__*/React.createElement(Textbox, {
822
827
  a11y: {
823
828
  role: 'Menuitem',
824
829
  ariaLabel: TextBox_ally_label,
@@ -117,6 +117,9 @@
117
117
  .rotate {
118
118
  transform: rotateX(180deg);
119
119
  }
120
+ .rightPlaceholder{
121
+ height: 100% ;
122
+ }
120
123
 
121
124
  .iconOnHoverStyle .arrowIcon,
122
125
  .iconOnHoverReadonly .arrowIcon,
@@ -345,7 +345,8 @@ class SelectWithIcon extends Component {
345
345
  i18nKeys,
346
346
  htmlId,
347
347
  isLoading,
348
- dataSelectorId
348
+ dataSelectorId,
349
+ customProps
349
350
  } = this.props;
350
351
  i18nKeys = Object.assign({}, i18nKeys, {
351
352
  emptyText: i18nKeys.emptyText || emptyMessage,
@@ -359,6 +360,11 @@ class SelectWithIcon extends Component {
359
360
  } = this.state;
360
361
  let setAriaId = this.getNextAriaId();
361
362
  let ariaErrorId = this.getNextAriaId();
363
+ let {
364
+ TextBoxProps = {},
365
+ DropdownSearchTextBoxProps = {},
366
+ TextBoxIconProps = {}
367
+ } = customProps;
362
368
  return /*#__PURE__*/React.createElement("div", {
363
369
  className: `${style.container} ${style[`box_${size}`]} ${isReadOnly ? style.readonly : ''} ${borderColor === 'transparent' ? style.transparentContainer : ''}`,
364
370
  "data-title": isDisabled ? title : null,
@@ -413,10 +419,21 @@ class SelectWithIcon extends Component {
413
419
  needEffect: isReadOnly || isDisabled ? false : true,
414
420
  borderColor: borderColor,
415
421
  autoComplete: false,
416
- isFocus: isPopupReady
422
+ isFocus: isPopupReady,
423
+ customProps: {
424
+ TextBoxProps: {
425
+ 'data-title': title || selectedValue,
426
+ ...TextBoxProps
427
+ }
428
+ },
429
+ ...TextBoxIconProps
417
430
  }, /*#__PURE__*/React.createElement(Container, {
431
+ isInline: true,
432
+ isCover: false,
418
433
  align: "both",
419
- dataId: `${dataId}_downIcon`
434
+ dataId: `${dataId}_downIcon`,
435
+ alignBox: "both",
436
+ className: style.rightPlaceholder
420
437
  }, /*#__PURE__*/React.createElement(Icon, {
421
438
  name: "ZD-down",
422
439
  size: "7"
@@ -467,7 +484,10 @@ class SelectWithIcon extends Component {
467
484
  a11y: {
468
485
  ariaDescribedby: ariaErrorId
469
486
  },
470
- autoComplete: false
487
+ autoComplete: false,
488
+ customProps: {
489
+ TextBoxProps: DropdownSearchTextBoxProps
490
+ }
471
491
  }))) : null, /*#__PURE__*/React.createElement(CardContent, {
472
492
  customClass: `${tabletMode ? style.responsivedropBoxList : style.dropBoxList} ${!tabletMode && dropBoxSize ? style[dropBoxSize] : ''}`,
473
493
  shrink: true,
@@ -62,7 +62,7 @@ exports[`Select rendering the defult props 1`] = `
62
62
  data-test-id="boxComponent"
63
63
  >
64
64
  <div
65
- class="flex cover rowdir both"
65
+ class="rightPlaceholder inflex rowdir both"
66
66
  data-id="containerComponent"
67
67
  data-selector-id="container"
68
68
  data-test-id="containerComponent"
@@ -79,7 +79,7 @@ exports[`SelectWithIcon rendering the defult props 1`] = `
79
79
  data-test-id="boxComponent"
80
80
  >
81
81
  <div
82
- class="flex cover coldir both"
82
+ class="rightPlaceholder inflex both"
83
83
  data-id="selectWithIcon_downIcon"
84
84
  data-selector-id="container"
85
85
  data-test-id="selectWithIcon_downIcon"
@@ -116,5 +116,6 @@ export const SelectWithIcon_defaultProps = {
116
116
  needIcon: true,
117
117
  iconSize: '14',
118
118
  i18nKeys: {},
119
- isLoading: false
119
+ isLoading: false,
120
+ customProps: {}
120
121
  };
@@ -80,6 +80,7 @@ export const Select_propTypes = {
80
80
  iconOnHover: PropTypes.bool,
81
81
  customProps: PropTypes.shape({
82
82
  TextBoxProps: PropTypes.object,
83
+ TextBoxIconProps: PropTypes.object,
83
84
  DropdownSearchTextBoxProps: PropTypes.object,
84
85
  listItemProps: PropTypes.object,
85
86
  SuggestionsProps: PropTypes.object
@@ -284,5 +285,10 @@ export const SelectWithIcon_propTypes = {
284
285
  searchBoxSize: PropTypes.string,
285
286
  needResponsive: PropTypes.bool,
286
287
  boxSize: PropTypes.string,
287
- emptyMessage: PropTypes.string
288
+ emptyMessage: PropTypes.string,
289
+ customProps: PropTypes.shape({
290
+ TextBoxProps: PropTypes.object,
291
+ DropdownSearchTextBoxProps: PropTypes.object,
292
+ TextBoxIconProps: PropTypes.object
293
+ })
288
294
  };
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import useDropboxPosCalc from '../../../DropBox/DropBoxElement/useDropboxPosCalc';
3
3
  import cssJSLogic from '../../../DropBox/DropBoxElement/css/cssJSLogic';
4
- import { positionMapping } from '../../../DropBox/DropBoxPositionMapping.json';
4
+ import { positionMapping } from '../../../DropBox/DropBoxPositionMapping.js';
5
5
  import { DropBoxElementDefaultProps } from './props/defaultProps';
6
6
  import { DropBoxElementPropTypes } from './props/propTypes';
7
7
  import { mergeStyle } from '@zohodesk/utils';