@carbon/ibm-products 1.14.0 → 1.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. package/css/components/Datagrid/styles/datagrid.css +4 -0
  2. package/css/components/Datagrid/styles/datagrid.css.map +1 -1
  3. package/css/components/Datagrid/styles/index.css +5 -1
  4. package/css/components/Datagrid/styles/index.css.map +1 -1
  5. package/css/components/Datagrid/styles/useNestedRows.css +1 -1
  6. package/css/index-full-carbon.css +75 -16
  7. package/css/index-full-carbon.css.map +1 -1
  8. package/css/index-full-carbon.min.css +6 -3
  9. package/css/index-full-carbon.min.css.map +1 -1
  10. package/css/index-without-carbon-released-only.css +13 -7
  11. package/css/index-without-carbon-released-only.css.map +1 -1
  12. package/css/index-without-carbon-released-only.min.css +5 -2
  13. package/css/index-without-carbon-released-only.min.css.map +1 -1
  14. package/css/index-without-carbon.css +75 -16
  15. package/css/index-without-carbon.css.map +1 -1
  16. package/css/index-without-carbon.min.css +6 -3
  17. package/css/index-without-carbon.min.css.map +1 -1
  18. package/css/index.css +75 -16
  19. package/css/index.css.map +1 -1
  20. package/css/index.min.css +6 -3
  21. package/css/index.min.css.map +1 -1
  22. package/es/components/AddSelect/AddSelect.js +34 -23
  23. package/es/components/AddSelect/AddSelectFilter.js +52 -9
  24. package/es/components/DataSpreadsheet/DataSpreadsheet.js +186 -129
  25. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +67 -15
  26. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +55 -11
  27. package/es/components/DataSpreadsheet/hooks/index.js +2 -1
  28. package/es/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +36 -8
  29. package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +113 -0
  30. package/es/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +16 -0
  31. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +29 -12
  32. package/es/components/DataSpreadsheet/utils/generateData.js +17 -9
  33. package/es/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +18 -0
  34. package/es/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +30 -0
  35. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +121 -0
  36. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +108 -0
  37. package/es/components/DataSpreadsheet/utils/handleEditSubmit.js +87 -0
  38. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -8
  39. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +153 -15
  40. package/es/components/DataSpreadsheet/utils/selectAllCells.js +53 -0
  41. package/es/components/Datagrid/Datagrid/Datagrid.js +24 -12
  42. package/es/components/Datagrid/Datagrid/DatagridHead.js +8 -16
  43. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +10 -10
  44. package/es/components/Datagrid/Datagrid/DatagridRow.js +12 -2
  45. package/es/components/Datagrid/Datagrid/index.js +6 -7
  46. package/es/components/Datagrid/index.js +1 -1
  47. package/es/components/Datagrid/useNestedRows.js +3 -3
  48. package/es/components/Datagrid/useRowExpander.js +1 -1
  49. package/es/components/ExportModal/ExportModal.js +10 -5
  50. package/es/components/MultiAddSelect/MultiAddSelect.js +150 -3
  51. package/es/components/PageHeader/PageHeader.js +3 -1
  52. package/es/components/SidePanel/SidePanel.js +5 -1
  53. package/es/components/SingleAddSelect/SingleAddSelect.js +90 -4
  54. package/es/components/TagSet/TagSet.js +13 -6
  55. package/es/components/Tearsheet/TearsheetShell.js +34 -10
  56. package/es/components/WebTerminal/WebTerminal.js +36 -11
  57. package/es/components/WebTerminal/WebTerminalContentWrapper.js +49 -0
  58. package/es/components/WebTerminal/index.js +2 -1
  59. package/es/components/index.js +1 -1
  60. package/es/global/js/package-settings.js +3 -1
  61. package/lib/components/AddSelect/AddSelect.js +34 -23
  62. package/lib/components/AddSelect/AddSelectFilter.js +51 -8
  63. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +190 -128
  64. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +69 -15
  65. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +58 -12
  66. package/lib/components/DataSpreadsheet/hooks/index.js +9 -1
  67. package/lib/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +36 -8
  68. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +129 -0
  69. package/lib/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +26 -0
  70. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +31 -13
  71. package/lib/components/DataSpreadsheet/utils/generateData.js +17 -9
  72. package/lib/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +27 -0
  73. package/lib/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +40 -0
  74. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +127 -0
  75. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +118 -0
  76. package/lib/components/DataSpreadsheet/utils/handleEditSubmit.js +94 -0
  77. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +48 -8
  78. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +161 -22
  79. package/lib/components/DataSpreadsheet/utils/selectAllCells.js +60 -0
  80. package/lib/components/Datagrid/Datagrid/Datagrid.js +25 -8
  81. package/lib/components/Datagrid/Datagrid/DatagridHead.js +8 -16
  82. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +10 -10
  83. package/lib/components/Datagrid/Datagrid/DatagridRow.js +14 -2
  84. package/lib/components/Datagrid/Datagrid/index.js +3 -5
  85. package/lib/components/Datagrid/index.js +2 -2
  86. package/lib/components/Datagrid/useNestedRows.js +3 -3
  87. package/lib/components/Datagrid/useRowExpander.js +1 -1
  88. package/lib/components/ExportModal/ExportModal.js +9 -4
  89. package/lib/components/MultiAddSelect/MultiAddSelect.js +150 -2
  90. package/lib/components/PageHeader/PageHeader.js +3 -1
  91. package/lib/components/SidePanel/SidePanel.js +5 -1
  92. package/lib/components/SingleAddSelect/SingleAddSelect.js +91 -3
  93. package/lib/components/TagSet/TagSet.js +13 -6
  94. package/lib/components/Tearsheet/TearsheetShell.js +36 -10
  95. package/lib/components/WebTerminal/WebTerminal.js +36 -10
  96. package/lib/components/WebTerminal/WebTerminalContentWrapper.js +58 -0
  97. package/lib/components/WebTerminal/index.js +9 -1
  98. package/lib/components/index.js +6 -0
  99. package/lib/global/js/package-settings.js +3 -1
  100. package/package.json +13 -13
  101. package/scss/components/AboutModal/_about-modal.scss +4 -0
  102. package/scss/components/AddSelect/_add-select.scss +9 -2
  103. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +39 -2
  104. package/scss/components/Datagrid/styles/datagrid.scss +8 -0
  105. package/scss/components/Datagrid/styles/useNestedRows.scss +1 -1
  106. package/scss/components/ExportModal/_export-modal.scss +0 -4
  107. package/scss/components/SidePanel/_side-panel.scss +22 -3
  108. package/scss/components/WebTerminal/_storybook-styles.scss +5 -0
  109. package/scss/components/WebTerminal/_web-terminal.scss +14 -4
@@ -13,6 +13,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
13
13
 
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
 
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
16
18
  var _AddSelect = require("../AddSelect");
17
19
 
18
20
  var _devtools = require("../../global/js/utils/devtools");
@@ -23,7 +25,6 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
23
25
 
24
26
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
27
 
26
- // import PropTypes from 'prop-types';
27
28
  var componentName = 'MultiAddSelect';
28
29
  var MultiAddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
29
30
  return /*#__PURE__*/_react.default.createElement(_AddSelect.AddSelect, (0, _extends2.default)({}, props, {
@@ -33,5 +34,152 @@ var MultiAddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
33
34
  });
34
35
  exports.MultiAddSelect = MultiAddSelect;
35
36
  exports.MultiAddSelect = MultiAddSelect = _settings.pkg.checkComponentEnabled(MultiAddSelect, componentName);
36
- MultiAddSelect.propTypes = {};
37
+ MultiAddSelect.propTypes = {
38
+ /**
39
+ * optional class name
40
+ */
41
+ className: _propTypes.default.string,
42
+
43
+ /**
44
+ * placeholder for column input filter
45
+ */
46
+ columnInputPlaceholder: _propTypes.default.string,
47
+
48
+ /**
49
+ * text description that appears under the title
50
+ */
51
+ description: _propTypes.default.string,
52
+
53
+ /**
54
+ * options to display in the global filter box. values are generated
55
+ * from the id which should correlate with a specific property in an
56
+ * item entry
57
+ */
58
+ globalFilters: _propTypes.default.arrayOf(_propTypes.default.shape({
59
+ id: _propTypes.default.string,
60
+ label: _propTypes.default.string
61
+ })),
62
+ globalFiltersIconDescription: _propTypes.default.string,
63
+
64
+ /**
65
+ * placeholder text for the global filter dropdown
66
+ */
67
+ globalFiltersPlaceholderText: _propTypes.default.string,
68
+
69
+ /**
70
+ * text for the global filter primary button
71
+ */
72
+ globalFiltersPrimaryButtonText: _propTypes.default.string,
73
+
74
+ /**
75
+ * text for the global filter secondary button
76
+ */
77
+ globalFiltersSecondaryButtonText: _propTypes.default.string,
78
+
79
+ /**
80
+ * label for global search input
81
+ */
82
+ globalSearchLabel: _propTypes.default.string,
83
+
84
+ /**
85
+ * placeholder for global search input
86
+ */
87
+ globalSearchPlaceholder: _propTypes.default.string,
88
+
89
+ /**
90
+ * title that displays in the sidebar / influencer
91
+ */
92
+ influencerTitle: _propTypes.default.string,
93
+
94
+ /**
95
+ * object that contains the item data. for more information reference the
96
+ * "Structuring items" section in the docs tab
97
+ */
98
+ items: _propTypes.default.shape({
99
+ modifiers: _propTypes.default.shape({
100
+ label: _propTypes.default.string,
101
+ options: _propTypes.default.array
102
+ }),
103
+ sortBy: _propTypes.default.array,
104
+ filterBy: _propTypes.default.array,
105
+ entries: _propTypes.default.arrayOf(_propTypes.default.shape({
106
+ avatar: _propTypes.default.shape({
107
+ alt: _propTypes.default.string,
108
+ icon: _propTypes.default.object,
109
+ src: _propTypes.default.string
110
+ }),
111
+ children: _propTypes.default.object,
112
+ icon: _propTypes.default.object,
113
+ id: _propTypes.default.string.isRequired,
114
+ subtitle: _propTypes.default.string,
115
+ title: _propTypes.default.string.isRequired,
116
+ value: _propTypes.default.string.isRequired
117
+ }))
118
+ }),
119
+
120
+ /**
121
+ * label that display above the list of items
122
+ */
123
+ itemsLabel: _propTypes.default.string,
124
+
125
+ /**
126
+ * text to display when no results are found from the global search
127
+ */
128
+ noResultsDescription: _propTypes.default.string,
129
+
130
+ /**
131
+ * title to display when no results are found from the global search
132
+ */
133
+ noResultsTitle: _propTypes.default.string,
134
+
135
+ /**
136
+ * text body that displays in the sidebar when nothing is selected
137
+ */
138
+ noSelectionDescription: _propTypes.default.string,
139
+
140
+ /**
141
+ * title that displays in the sidebar when nothing is selected
142
+ */
143
+ noSelectionTitle: _propTypes.default.string,
144
+
145
+ /**
146
+ * function to call when the close button clicked
147
+ */
148
+ onClose: _propTypes.default.func,
149
+
150
+ /**
151
+ * text for close button
152
+ */
153
+ onCloseButtonText: _propTypes.default.string,
154
+
155
+ /**
156
+ * function to call when the submit button is clicked. returns a selection
157
+ */
158
+ onSubmit: _propTypes.default.func,
159
+
160
+ /**
161
+ * text for the submit button
162
+ */
163
+ onSubmitButtonText: _propTypes.default.string,
164
+
165
+ /**
166
+ * specifies if the component is open or not
167
+ */
168
+ open: _propTypes.default.bool,
169
+
170
+ /**
171
+ * description for the remove item icon
172
+ */
173
+ removeIconDescription: _propTypes.default.string,
174
+
175
+ /**
176
+ * text that displays when displaying filtered items
177
+ */
178
+ searchResultsLabel: _propTypes.default.string,
179
+
180
+ /**
181
+ * header text
182
+ */
183
+ title: _propTypes.default.string
184
+ };
37
185
  MultiAddSelect.displayName = componentName;
@@ -530,7 +530,8 @@ var TYPES = {
530
530
  gray: 'Gray',
531
531
  'cool-gray': 'Cool-Gray',
532
532
  'warm-gray': 'Warm-Gray',
533
- 'high-contrast': 'High-Contrast'
533
+ 'high-contrast': 'High-Contrast',
534
+ outline: 'Outline'
534
535
  };
535
536
  var tagTypes = Object.keys(TYPES);
536
537
  var deprecatedProps = {
@@ -545,6 +546,7 @@ var deprecatedProps = {
545
546
  hasBackgroundAlways: (0, _propsHelper.deprecateProp)(_propTypes.default.bool, 'Property replaced by `withoutBackground`')
546
547
  };
547
548
  exports.deprecatedProps = deprecatedProps;
549
+ PageHeader.tagTypes = tagTypes;
548
550
  PageHeader.propTypes = _objectSpread({
549
551
  /**
550
552
  * Specifies the action bar items which are the final items in the row top of the PageHeader.
@@ -296,13 +296,17 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
296
296
 
297
297
  var actionToolbarElement = document.querySelector(".".concat(blockClass, "__action-toolbar"));
298
298
 
299
+ var _labelText = document.querySelector(".".concat(blockClass, "__label-text"));
300
+
299
301
  var _sidePanelSubtitleElementHeight = (_sidePanelSubtitleElement === null || _sidePanelSubtitleElement === void 0 ? void 0 : _sidePanelSubtitleElement.offsetHeight) || 0;
300
302
 
301
303
  var sidePanelActionBarElementHeight = (actionToolbarElement === null || actionToolbarElement === void 0 ? void 0 : actionToolbarElement.offsetHeight) || 0;
302
304
  var titleHeight = (_sidePanelTitleElement === null || _sidePanelTitleElement === void 0 ? void 0 : _sidePanelTitleElement.offsetHeight) + 24;
305
+ var labelHeight = (_labelText === null || _labelText === void 0 ? void 0 : _labelText.offsetHeight) || 0;
303
306
  _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--title-text-height"), "".concat(titleHeight, "px"));
304
307
  _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--subtitle-container-height"), "".concat(_sidePanelSubtitleElementHeight, "px"));
305
308
  _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--action-bar-container-height"), "".concat(sidePanelActionBarElementHeight, "px"));
309
+ _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--label-text-height"), "".concat(labelHeight, "px"));
306
310
  }
307
311
  }, [open, animateTitle, animationComplete, shouldRender, panelHeight, title, size, reducedMotion.matches]); // click outside functionality if `includeOverlay` prop is set
308
312
 
@@ -515,7 +519,7 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
515
519
  className: "".concat(blockClass, "__visually-hidden")
516
520
  }, "Focus sentinel"), !animateTitle && renderHeader(), /*#__PURE__*/_react.default.createElement("div", {
517
521
  ref: sidePanelInnerRef,
518
- className: (0, _classnames.default)("".concat(blockClass, "__inner-content"), (_cx4 = {}, (0, _defineProperty2.default)(_cx4, "".concat(blockClass, "__static-inner-content"), !animateTitle), (0, _defineProperty2.default)(_cx4, "".concat(blockClass, "__inner-content-with-actions"), actions && actions.length), _cx4))
522
+ className: (0, _classnames.default)("".concat(blockClass, "__inner-content"), (_cx4 = {}, (0, _defineProperty2.default)(_cx4, "".concat(blockClass, "__static-inner-content"), !animateTitle), (0, _defineProperty2.default)(_cx4, "".concat(blockClass, "__static-inner-content-no-actions"), !animateTitle && !(actions !== null && actions !== void 0 && actions.length)), (0, _defineProperty2.default)(_cx4, "".concat(blockClass, "__inner-content-with-actions"), actions && actions.length), _cx4))
519
523
  }, animateTitle && renderHeader(), /*#__PURE__*/_react.default.createElement("div", {
520
524
  className: "".concat(blockClass, "__body-content")
521
525
  }, children), /*#__PURE__*/_react.default.createElement(_ActionSet.ActionSet, {
@@ -13,24 +13,112 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
13
13
 
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
 
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
16
18
  var _AddSelect = require("../AddSelect");
17
19
 
18
20
  var _devtools = require("../../global/js/utils/devtools");
19
21
 
20
22
  var _settings = require("../../settings");
21
23
 
24
+ var _propsHelper = require("../../global/js/utils/props-helper");
25
+
22
26
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
27
 
24
28
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
29
 
26
- // import PropTypes from 'prop-types';
27
30
  var componentName = 'SingleAddSelect';
28
31
  var SingleAddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
29
- return /*#__PURE__*/_react.default.createElement(_AddSelect.AddSelect, (0, _extends2.default)({}, props, {
32
+ // remove multi add select specific props
33
+ var validProps = (0, _propsHelper.prepareProps)(props, ['columnInputPlaceholder', 'globalFilters', 'globalFiltersIconDescription', 'globalFiltersPlaceholderText', 'globalFiltersPrimaryButtonText', 'globalFiltersSecondaryButtonText', 'influencerTitle', 'multi', 'noSelectionDescription', 'noSelectionTitle', 'removeIconDescription']);
34
+ return /*#__PURE__*/_react.default.createElement(_AddSelect.AddSelect, (0, _extends2.default)({}, validProps, {
30
35
  ref: ref
31
36
  }, (0, _devtools.getDevtoolsProps)(componentName)));
32
37
  });
33
38
  exports.SingleAddSelect = SingleAddSelect;
34
39
  exports.SingleAddSelect = SingleAddSelect = _settings.pkg.checkComponentEnabled(SingleAddSelect, componentName);
35
- SingleAddSelect.propTypes = {};
40
+ SingleAddSelect.propTypes = {
41
+ /**
42
+ * optional class name
43
+ */
44
+ className: _propTypes.default.string,
45
+
46
+ /**
47
+ * text description that appears under the title
48
+ */
49
+ description: _propTypes.default.string,
50
+
51
+ /**
52
+ * label for global search input
53
+ */
54
+ globalSearchLabel: _propTypes.default.string,
55
+
56
+ /**
57
+ * placeholder for global search input
58
+ */
59
+ globalSearchPlaceholder: _propTypes.default.string,
60
+
61
+ /**
62
+ * object that contains the item data. for more information reference the
63
+ * "Structuring items" section in the docs tab
64
+ */
65
+ items: _propTypes.default.shape({
66
+ entries: _propTypes.default.arrayOf(_propTypes.default.shape({
67
+ children: _propTypes.default.object,
68
+ id: _propTypes.default.string.isRequired,
69
+ title: _propTypes.default.string.isRequired,
70
+ value: _propTypes.default.string.isRequired
71
+ }))
72
+ }),
73
+
74
+ /**
75
+ * label that display above the list of items
76
+ */
77
+ itemsLabel: _propTypes.default.string,
78
+
79
+ /**
80
+ * text to display when no results are found from the global search
81
+ */
82
+ noResultsDescription: _propTypes.default.string,
83
+
84
+ /**
85
+ * title to display when no results are found from the global search
86
+ */
87
+ noResultsTitle: _propTypes.default.string,
88
+
89
+ /**
90
+ * function to call when the close button clicked
91
+ */
92
+ onClose: _propTypes.default.func,
93
+
94
+ /**
95
+ * text for close button
96
+ */
97
+ onCloseButtonText: _propTypes.default.string,
98
+
99
+ /**
100
+ * function to call when the submit button is clicked. returns a selection
101
+ */
102
+ onSubmit: _propTypes.default.func,
103
+
104
+ /**
105
+ * text for the submit button
106
+ */
107
+ onSubmitButtonText: _propTypes.default.string,
108
+
109
+ /**
110
+ * specifies if the component is open or not
111
+ */
112
+ open: _propTypes.default.bool,
113
+
114
+ /**
115
+ * text that displays when displaying filtered items
116
+ */
117
+ searchResultsLabel: _propTypes.default.string,
118
+
119
+ /**
120
+ * header text
121
+ */
122
+ title: _propTypes.default.string
123
+ };
36
124
  SingleAddSelect.displayName = componentName;
@@ -122,9 +122,13 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
122
122
  };
123
123
 
124
124
  (0, _react.useEffect)(function () {
125
- var _document;
126
-
127
- setAllTagsModalTarget(allTagsModalTargetIn !== null && allTagsModalTargetIn !== void 0 ? allTagsModalTargetIn : (_document = document) === null || _document === void 0 ? void 0 : _document.body);
125
+ if (allTagsModalTargetIn) {
126
+ setAllTagsModalTarget(allTagsModalTargetIn);
127
+ } else {
128
+ if (_settings.pkg.isFeatureEnabled('default-portal-target-body')) {
129
+ setAllTagsModalTarget(document.body);
130
+ }
131
+ }
128
132
  }, [allTagsModalTargetIn]);
129
133
  (0, _react.useEffect)(function () {
130
134
  var newSizingTags = []; // create sizing tags
@@ -260,14 +264,16 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
260
264
  }, hiddenSizingTags), /*#__PURE__*/_react.default.createElement("div", {
261
265
  className: "".concat(blockClass, "__tag-container"),
262
266
  ref: displayedArea
263
- }, displayedTags)), allTagsModalTarget && tags && displayCount < tags.length ? /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react.default.createElement(_TagSetModal.TagSetModal, {
267
+ }, displayedTags)), (allTagsModalTarget ? _reactDom.createPortal : function (children) {
268
+ return children;
269
+ })( /*#__PURE__*/_react.default.createElement(_TagSetModal.TagSetModal, {
264
270
  allTags: tags,
265
271
  open: showAllModalOpen,
266
272
  title: allTagsModalTitle,
267
273
  onClose: handleModalClose,
268
274
  searchLabel: allTagsModalSearchLabel,
269
275
  searchPlaceholder: allTagsModalSearchPlaceholderText
270
- }), allTagsModalTarget) : null);
276
+ }), allTagsModalTarget));
271
277
  }); // Return a placeholder if not released and not enabled by feature flag
272
278
 
273
279
 
@@ -295,7 +301,8 @@ var TYPES = {
295
301
  gray: 'Gray',
296
302
  'cool-gray': 'Cool-Gray',
297
303
  'warm-gray': 'Warm-Gray',
298
- 'high-contrast': 'High-Contrast'
304
+ 'high-contrast': 'High-Contrast',
305
+ outline: 'Outline'
299
306
  };
300
307
  var tagTypes = Object.keys(TYPES);
301
308
  TagSet.types = tagTypes;
@@ -19,6 +19,8 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
19
19
 
20
20
  var _react = _interopRequireWildcard(require("react"));
21
21
 
22
+ var _reactDom = require("react-dom");
23
+
22
24
  var _reactResizeDetector = require("react-resize-detector");
23
25
 
24
26
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -35,7 +37,7 @@ var _ActionSet = require("../ActionSet");
35
37
 
36
38
  var _Wrap = require("../../global/js/utils/Wrap");
37
39
 
38
- var _excluded = ["actions", "children", "className", "closeIconDescription", "description", "hasCloseIcon", "headerActions", "influencer", "influencerPosition", "influencerWidth", "label", "navigation", "onClose", "open", "selectorPrimaryFocus", "size", "title", "verticalPosition"];
40
+ var _excluded = ["actions", "children", "className", "closeIconDescription", "description", "hasCloseIcon", "headerActions", "influencer", "influencerPosition", "influencerWidth", "label", "navigation", "onClose", "open", "selectorPrimaryFocus", "size", "portalTarget", "title", "verticalPosition"];
39
41
 
40
42
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
43
 
@@ -95,9 +97,26 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
95
97
  open = _ref.open,
96
98
  selectorPrimaryFocus = _ref.selectorPrimaryFocus,
97
99
  size = _ref.size,
100
+ portalTargetIn = _ref.portalTarget,
98
101
  title = _ref.title,
99
102
  verticalPosition = _ref.verticalPosition,
100
103
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
104
+
105
+ // node the modal tearsheet is hosted in
106
+ var _useState = (0, _react.useState)(null),
107
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
108
+ portalTarget = _useState2[0],
109
+ setPortalTarget = _useState2[1];
110
+
111
+ (0, _react.useEffect)(function () {
112
+ if (portalTargetIn) {
113
+ setPortalTarget(portalTargetIn);
114
+ } else {
115
+ if (_settings.pkg.isFeatureEnabled('default-portal-target-body')) {
116
+ setPortalTarget(document.body);
117
+ }
118
+ }
119
+ }, [portalTargetIn]);
101
120
  var localRef = (0, _react.useRef)();
102
121
  var modalRef = ref || localRef;
103
122
 
@@ -108,15 +127,15 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
108
127
  resizer = _useResizeDetector.ref; // Keep track of the stack depth and our position in it (1-based, 0=closed)
109
128
 
110
129
 
111
- var _useState = (0, _react.useState)(0),
112
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
113
- depth = _useState2[0],
114
- setDepth = _useState2[1];
115
-
116
130
  var _useState3 = (0, _react.useState)(0),
117
131
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
118
- position = _useState4[0],
119
- setPosition = _useState4[1]; // Keep a record of the previous value of depth.
132
+ depth = _useState4[0],
133
+ setDepth = _useState4[1];
134
+
135
+ var _useState5 = (0, _react.useState)(0),
136
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
137
+ position = _useState6[0],
138
+ setPosition = _useState6[1]; // Keep a record of the previous value of depth.
120
139
 
121
140
 
122
141
  var prevDepth = (0, _react.useRef)();
@@ -202,7 +221,9 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
202
221
  var includeHeader = label || title || description || headerActions || navigation || effectiveHasCloseIcon; // Include an ActionSet if and only if one or more actions is given.
203
222
 
204
223
  var includeActions = actions && (actions === null || actions === void 0 ? void 0 : actions.length) > 0;
205
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ComposedModal, (0, _extends2.default)({}, rest, {
224
+ return (portalTarget ? _reactDom.createPortal : function (children) {
225
+ return children;
226
+ })( /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ComposedModal, (0, _extends2.default)({}, rest, {
206
227
  "aria-label": title,
207
228
  className: (0, _classnames.default)(bc, className, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(bc, "--stacked-").concat(position, "-of-").concat(depth), // Don't apply this on the initial open of a single tearsheet.
208
229
  depth > 1 || depth === 1 && prevDepth.current > 1), (0, _defineProperty2.default)(_cx, "".concat(bc, "--wide"), size === 'wide'), (0, _defineProperty2.default)(_cx, "".concat(bc, "--narrow"), size !== 'wide'), _cx)),
@@ -263,7 +284,7 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
263
284
  })))), /*#__PURE__*/_react.default.createElement("div", {
264
285
  className: "".concat(bc, "__resize-detector"),
265
286
  ref: resizer
266
- }));
287
+ })), portalTarget);
267
288
  } else {
268
289
  _pconsole.default.warn('Tearsheet not rendered: maximum stacking depth exceeded.');
269
290
 
@@ -407,6 +428,11 @@ TearsheetShell.propTypes = _objectSpread({
407
428
  */
408
429
  open: _propTypes.default.bool,
409
430
 
431
+ /**
432
+ * portal target for the all tags modal
433
+ */
434
+ portalTarget: _propTypes.default.node,
435
+
410
436
  /**
411
437
  * Specifies the width of the tearsheet, 'narrow' or 'wide'.
412
438
  */
@@ -29,6 +29,8 @@ var _iconsReact = require("@carbon/icons-react");
29
29
 
30
30
  var _carbonComponentsReact = require("carbon-components-react");
31
31
 
32
+ var _motion = require("@carbon/motion");
33
+
32
34
  var _excluded = ["actions", "children", "className", "closeIconDescription", "closeTerminal", "documentationLinks", "documentationLinksIconDescription", "open"];
33
35
 
34
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -50,7 +52,7 @@ var defaults = {
50
52
  };
51
53
 
52
54
  var WebTerminal = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
53
- var _ref2;
55
+ var _ref3;
54
56
 
55
57
  var _ref$actions = _ref.actions,
56
58
  actions = _ref$actions === void 0 ? defaults.actions : _ref$actions,
@@ -70,6 +72,12 @@ var WebTerminal = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
70
72
  shouldRender = _useState2[0],
71
73
  setRender = _useState2[1];
72
74
 
75
+ var _ref2 = window && window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : {
76
+ matches: true
77
+ },
78
+ prefersReducedMotion = _ref2.matches;
79
+
80
+ var webTerminalAnimationName = "".concat(open ? 'web-terminal-entrance' : 'web-terminal-exit', " ").concat(_motion.moderate02);
73
81
  var showDocumentationLinks = (0, _react.useMemo)(function () {
74
82
  return documentationLinks.length > 0;
75
83
  }, [documentationLinks]);
@@ -78,6 +86,9 @@ var WebTerminal = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
78
86
  setRender(true);
79
87
  }
80
88
  }, [open]);
89
+ /**
90
+ When the web terminal slide in animation is complete, sets render to false.
91
+ */
81
92
 
82
93
  var onAnimationEnd = function onAnimationEnd() {
83
94
  if (!open) {
@@ -85,11 +96,23 @@ var WebTerminal = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
85
96
  }
86
97
  };
87
98
 
99
+ var handleCloseTerminal = function handleCloseTerminal() {
100
+ /**
101
+ If the user prefers reduced motion, we have to manually set render to false
102
+ because onAnimationEnd will never be called.
103
+ */
104
+ if (prefersReducedMotion) {
105
+ setRender(false);
106
+ }
107
+
108
+ closeTerminal();
109
+ };
110
+
88
111
  return shouldRender ? /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
89
112
  ref: ref,
90
- className: (0, _classnames.default)([className, blockClass, (_ref2 = {}, (0, _defineProperty2.default)(_ref2, "".concat(blockClass, "--open"), open), (0, _defineProperty2.default)(_ref2, "".concat(blockClass, "--closed"), !open), _ref2)]),
113
+ className: (0, _classnames.default)([className, blockClass, (_ref3 = {}, (0, _defineProperty2.default)(_ref3, "".concat(blockClass, "--open"), open), (0, _defineProperty2.default)(_ref3, "".concat(blockClass, "--closed"), !open), _ref3)]),
91
114
  style: {
92
- animation: "".concat(open ? 'web-terminal-entrance 250ms' : 'web-terminal-exit 250ms')
115
+ animation: !prefersReducedMotion && webTerminalAnimationName
93
116
  },
94
117
  onAnimationEnd: onAnimationEnd
95
118
  }), /*#__PURE__*/_react.default.createElement("header", {
@@ -101,15 +124,15 @@ var WebTerminal = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
101
124
  iconDescription: documentationLinksIconDescription,
102
125
  menuOptionsClass: "".concat(blockClass, "__documentation-overflow"),
103
126
  size: "lg"
104
- }, documentationLinks.map(function (_ref3, i) {
105
- var rest = (0, _extends2.default)({}, _ref3);
127
+ }, documentationLinks.map(function (_ref4, i) {
128
+ var rest = (0, _extends2.default)({}, _ref4);
106
129
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenuItem, (0, _extends2.default)({
107
130
  key: i
108
131
  }, rest));
109
- })), actions.map(function (_ref4) {
110
- var renderIcon = _ref4.renderIcon,
111
- onClick = _ref4.onClick,
112
- iconDescription = _ref4.iconDescription;
132
+ })), actions.map(function (_ref5) {
133
+ var renderIcon = _ref5.renderIcon,
134
+ onClick = _ref5.onClick,
135
+ iconDescription = _ref5.iconDescription;
113
136
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
114
137
  key: iconDescription,
115
138
  hasIconOnly: true,
@@ -123,7 +146,10 @@ var WebTerminal = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
123
146
  renderIcon: _iconsReact.Close16,
124
147
  kind: "ghost",
125
148
  iconDescription: closeIconDescription,
126
- onClick: closeTerminal
149
+ onClick: handleCloseTerminal,
150
+ onAnimationEnd: function onAnimationEnd(event) {
151
+ return event.stopPropagation();
152
+ }
127
153
  })), /*#__PURE__*/_react.default.createElement("div", {
128
154
  className: "".concat(blockClass, "__body")
129
155
  }, children)) : null;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.WebTerminalContentWrapper = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
+
16
+ var _react = _interopRequireDefault(require("react"));
17
+
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
+
20
+ var _classnames = _interopRequireDefault(require("classnames"));
21
+
22
+ var _settings = require("../../settings");
23
+
24
+ var _excluded = ["children", "isTerminalOpen"];
25
+ // The block part of our conventional BEM class names (blockClass__E--M).
26
+ var componentName = 'WebTerminalContentWrapper';
27
+ var blockClass = "".concat(_settings.pkg.prefix, "--web-terminal-content-wrapper");
28
+
29
+ var WebTerminalContentWrapper = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
30
+ var children = _ref.children,
31
+ isTerminalOpen = _ref.isTerminalOpen,
32
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
33
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
34
+ ref: ref,
35
+ className: (0, _classnames.default)([blockClass, (0, _defineProperty2.default)({}, "".concat(blockClass, "--open"), isTerminalOpen)])
36
+ }, rest), children);
37
+ }); // Return a placeholder if not released and not enabled by feature flag
38
+
39
+
40
+ exports.WebTerminalContentWrapper = WebTerminalContentWrapper;
41
+ exports.WebTerminalContentWrapper = WebTerminalContentWrapper = _settings.pkg.checkComponentEnabled(WebTerminalContentWrapper, componentName); // The display name of the component, used by React. Note that displayName
42
+ // is used in preference to relying on function.name.
43
+
44
+ WebTerminalContentWrapper.displayName = componentName; // The types and DocGen commentary for the component props,
45
+ // in alphabetical order (for consistency).
46
+ // See https://www.npmjs.com/package/prop-types#usage.
47
+
48
+ WebTerminalContentWrapper.propTypes = {
49
+ /**
50
+ * Pass in content as children.
51
+ */
52
+ children: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node), _propTypes.default.node]).isRequired,
53
+
54
+ /**
55
+ * A boolean to determine if the terminal is open.
56
+ */
57
+ isTerminalOpen: _propTypes.default.bool.isRequired
58
+ };
@@ -9,5 +9,13 @@ Object.defineProperty(exports, "WebTerminal", {
9
9
  return _WebTerminal.WebTerminal;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "WebTerminalContentWrapper", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _WebTerminalContentWrapper.WebTerminalContentWrapper;
16
+ }
17
+ });
18
+
19
+ var _WebTerminal = require("./WebTerminal");
12
20
 
13
- var _WebTerminal = require("./WebTerminal");
21
+ var _WebTerminalContentWrapper = require("./WebTerminalContentWrapper");
@@ -297,6 +297,12 @@ Object.defineProperty(exports, "WebTerminal", {
297
297
  return _WebTerminal.WebTerminal;
298
298
  }
299
299
  });
300
+ Object.defineProperty(exports, "WebTerminalContentWrapper", {
301
+ enumerable: true,
302
+ get: function get() {
303
+ return _WebTerminal.WebTerminalContentWrapper;
304
+ }
305
+ });
300
306
 
301
307
  var _AboutModal = require("./AboutModal");
302
308