@carbon/ibm-products 1.6.1 → 1.7.0

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 (47) hide show
  1. package/css/index-full-carbon.css +119 -8
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +2 -2
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon.css +73 -7
  6. package/css/index-without-carbon.css.map +1 -1
  7. package/css/index-without-carbon.min.css +2 -2
  8. package/css/index-without-carbon.min.css.map +1 -1
  9. package/css/index.css +73 -7
  10. package/css/index.css.map +1 -1
  11. package/css/index.min.css +2 -2
  12. package/css/index.min.css.map +1 -1
  13. package/es/components/ActionSet/ActionSet.js +1 -1
  14. package/es/components/AddSelect/AddSelect.js +11 -5
  15. package/es/components/AddSelect/AddSelectBreadcrumbs.js +1 -1
  16. package/es/components/AddSelect/AddSelectList.js +4 -4
  17. package/es/components/AddSelect/AddSelectSidebar.js +37 -5
  18. package/es/components/ButtonMenu/ButtonMenu.js +1 -1
  19. package/es/components/DataSpreadsheet/DataSpreadsheet.js +154 -0
  20. package/es/components/DataSpreadsheet/generateData.js +47 -0
  21. package/es/components/DataSpreadsheet/index.js +7 -0
  22. package/es/components/InlineEdit/InlineEdit.js +19 -22
  23. package/es/components/Tearsheet/TearsheetShell.js +3 -4
  24. package/es/components/index.js +2 -1
  25. package/es/global/js/package-settings.js +2 -1
  26. package/es/global/js/utils/getScrollbarWidth.js +14 -0
  27. package/lib/components/ActionSet/ActionSet.js +1 -1
  28. package/lib/components/AddSelect/AddSelect.js +11 -5
  29. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +1 -1
  30. package/lib/components/AddSelect/AddSelectList.js +4 -4
  31. package/lib/components/AddSelect/AddSelectSidebar.js +37 -4
  32. package/lib/components/ButtonMenu/ButtonMenu.js +1 -1
  33. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +171 -0
  34. package/lib/components/DataSpreadsheet/generateData.js +58 -0
  35. package/lib/components/DataSpreadsheet/index.js +13 -0
  36. package/lib/components/InlineEdit/InlineEdit.js +19 -22
  37. package/lib/components/Tearsheet/TearsheetShell.js +2 -3
  38. package/lib/components/index.js +9 -1
  39. package/lib/global/js/package-settings.js +2 -1
  40. package/lib/global/js/utils/getScrollbarWidth.js +23 -0
  41. package/package.json +11 -9
  42. package/scss/components/AddSelect/_add-select.scss +20 -0
  43. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +79 -0
  44. package/scss/components/DataSpreadsheet/_index.scss +8 -0
  45. package/scss/components/DataSpreadsheet/_storybook-styles.scss +6 -0
  46. package/scss/components/InlineEdit/_inline-edit.scss +6 -4
  47. package/scss/components/_index.scss +1 -0
@@ -0,0 +1,154 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ var _excluded = ["className", "columns", "data"];
4
+
5
+ /**
6
+ * Copyright IBM Corp. 2022, 2022
7
+ *
8
+ * This source code is licensed under the Apache-2.0 license found in the
9
+ * LICENSE file in the root directory of this source tree.
10
+ */
11
+ // Import portions of React that are needed.
12
+ import React, { useMemo } from 'react';
13
+ import { useBlockLayout, useTable } from 'react-table';
14
+ import { FixedSizeList } from 'react-window'; // Other standard imports.
15
+
16
+ import PropTypes from 'prop-types';
17
+ import cx from 'classnames';
18
+ import { getDevtoolsProps } from '../../global/js/utils/devtools';
19
+ import { pkg
20
+ /*, carbon */
21
+ } from '../../settings';
22
+ import { getScrollbarWidth } from '../../global/js/utils/getScrollbarWidth'; // The block part of our conventional BEM class names (blockClass__E--M).
23
+
24
+ var blockClass = "".concat(pkg.prefix, "--data-spreadsheet");
25
+ var componentName = 'DataSpreadsheet';
26
+ /**
27
+ * DataSpreadsheet: used to organize and display large amounts of structured data, separated by columns and rows in a grid-like format.
28
+ */
29
+
30
+ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
31
+ var className = _ref.className,
32
+ columns = _ref.columns,
33
+ data = _ref.data,
34
+ rest = _objectWithoutProperties(_ref, _excluded);
35
+
36
+ var defaultColumn = useMemo(function () {
37
+ return {
38
+ width: 150,
39
+ rowHeaderWidth: 64
40
+ };
41
+ }, []);
42
+ var scrollBarSize = useMemo(function () {
43
+ return getScrollbarWidth();
44
+ }, []);
45
+
46
+ var _useTable = useTable({
47
+ columns: columns,
48
+ data: data,
49
+ defaultColumn: defaultColumn
50
+ }, useBlockLayout),
51
+ getTableProps = _useTable.getTableProps,
52
+ getTableBodyProps = _useTable.getTableBodyProps,
53
+ headerGroups = _useTable.headerGroups,
54
+ rows = _useTable.rows,
55
+ totalColumnsWidth = _useTable.totalColumnsWidth,
56
+ prepareRow = _useTable.prepareRow;
57
+
58
+ var RenderRow = React.useCallback(function (_ref2) {
59
+ var index = _ref2.index,
60
+ style = _ref2.style;
61
+ var row = rows[index];
62
+ prepareRow(row);
63
+ return /*#__PURE__*/React.createElement("div", _extends({}, row.getRowProps({
64
+ style: style
65
+ }), {
66
+ className: "tr",
67
+ "data-row-index": index
68
+ }), /*#__PURE__*/React.createElement("button", {
69
+ type: "button",
70
+ className: cx("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th")),
71
+ style: {
72
+ width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth,
73
+ display: 'flex',
74
+ justifyContent: 'flex-end',
75
+ alignItems: 'center'
76
+ }
77
+ }, index + 1), row.cells.map(function (cell, index) {
78
+ return /*#__PURE__*/React.createElement("button", _extends({
79
+ key: "cell_".concat(index)
80
+ }, cell.getCellProps(), {
81
+ type: "button",
82
+ className: "".concat(blockClass, "__td")
83
+ }), cell.render('Cell'));
84
+ }));
85
+ }, [prepareRow, rows, defaultColumn.rowHeaderWidth]);
86
+ return /*#__PURE__*/React.createElement("div", _extends({}, rest, getTableProps(), getDevtoolsProps(componentName), {
87
+ className: cx(blockClass, className),
88
+ ref: ref,
89
+ role: "grid"
90
+ }), /*#__PURE__*/React.createElement("div", null, headerGroups.map(function (headerGroup, index) {
91
+ return /*#__PURE__*/React.createElement("div", _extends({
92
+ key: "header_".concat(index)
93
+ }, headerGroup.getHeaderGroupProps(), {
94
+ className: "".concat(blockClass, "__tr")
95
+ }), /*#__PURE__*/React.createElement("button", {
96
+ type: "button",
97
+ className: "".concat(blockClass, "__th"),
98
+ style: {
99
+ width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
100
+ }
101
+ }, "\xA0"), headerGroup.headers.map(function (column, index) {
102
+ return /*#__PURE__*/React.createElement("button", _extends({
103
+ key: "column_".concat(index)
104
+ }, column.getHeaderProps(), {
105
+ type: "button",
106
+ className: "".concat(blockClass, "__th")
107
+ }), column.render('Header'));
108
+ }));
109
+ })), /*#__PURE__*/React.createElement("div", getTableBodyProps(), /*#__PURE__*/React.createElement(FixedSizeList, {
110
+ height: 400,
111
+ itemCount: rows.length,
112
+ itemSize: 36,
113
+ width: totalColumnsWidth + scrollBarSize
114
+ }, RenderRow)));
115
+ }); // Return a placeholder if not released and not enabled by feature flag
116
+
117
+ DataSpreadsheet = pkg.checkComponentEnabled(DataSpreadsheet, componentName); // The display name of the component, used by React. Note that displayName
118
+ // is used in preference to relying on function.name.
119
+
120
+ DataSpreadsheet.displayName = componentName; // The types and DocGen commentary for the component props,
121
+ // in alphabetical order (for consistency).
122
+ // See https://www.npmjs.com/package/prop-types#usage.
123
+
124
+ DataSpreadsheet.propTypes = {
125
+ /**
126
+ * Provide an optional class to be applied to the containing node.
127
+ */
128
+ className: PropTypes.string,
129
+
130
+ /**
131
+ * The data that will build the column headers
132
+ */
133
+ columns: PropTypes.arrayOf(PropTypes.shape({
134
+ Header: PropTypes.string,
135
+ accessor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
136
+ Cell: PropTypes.func // optional cell formatter
137
+
138
+ })),
139
+
140
+ /**
141
+ * The spreadsheet data that will be rendered in the body of the spreadsheet component
142
+ */
143
+ data: PropTypes.arrayOf(PropTypes.shape)
144
+ /* TODO: add types and DocGen for all props. */
145
+
146
+ }; // Default values for component props. Default values are not required for
147
+ // props that are required, nor for props where the component can apply
148
+ // 'undefined' values reasonably. Default values should be provided when the
149
+ // component needs to make a choice or assumption when a prop is not supplied.
150
+
151
+ DataSpreadsheet.defaultProps = {
152
+ data: [],
153
+ columns: []
154
+ };
@@ -0,0 +1,47 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
+
7
+ // cspell:disable
8
+ var pets = ['dog', 'cat', 'bird', 'lizard', 'frog', 'hamster', 'fish', 'rabbit', 'snake'];
9
+ var petNames = ['Bruno', 'Willow', 'Kona', 'Heidi', 'Rusty', 'Bonnie', 'Cash', 'Gucci', 'Brody', 'Emma', 'Loki', 'Angel', 'Astro', 'Sherman', 'Layla', 'Peanut', 'Grace', 'Mickey', 'Sasha', 'Finn', 'Tucker', 'Bear', 'Mocha', 'Roscoe']; // cspell:enable
10
+
11
+ var range = function range(len) {
12
+ var arr = [];
13
+
14
+ for (var i = 0; i < len; i++) {
15
+ arr.push(i);
16
+ }
17
+
18
+ return arr;
19
+ };
20
+
21
+ var newPet = function newPet() {
22
+ return {
23
+ petType: pets[Math.floor(Math.random() * pets.length)],
24
+ firstName: petNames[Math.floor(Math.random() * petNames.length)],
25
+ age: Math.floor(Math.random() * 30),
26
+ visits: Math.floor(Math.random() * 40),
27
+ health: Math.floor(Math.random() * 100)
28
+ };
29
+ };
30
+
31
+ export var generateData = function generateData() {
32
+ for (var _len = arguments.length, lens = new Array(_len), _key = 0; _key < _len; _key++) {
33
+ lens[_key] = arguments[_key];
34
+ }
35
+
36
+ var makeDataLevel = function makeDataLevel() {
37
+ var depth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
38
+ var len = lens[depth];
39
+ return range(len).map(function () {
40
+ return _objectSpread(_objectSpread({}, newPet()), {}, {
41
+ subRows: lens[depth + 1] ? makeDataLevel(depth + 1) : undefined
42
+ });
43
+ });
44
+ };
45
+
46
+ return makeDataLevel();
47
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export { DataSpreadsheet } from './DataSpreadsheet';
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
- var _excluded = ["cancelDescription", "className", "disabled", "editDescription", "editVisibleOnHoverOnly", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "saveDisabled", "size", "value", "warn", "warnText"];
5
+ var _excluded = ["cancelDescription", "className", "disabled", "editDescription", "editVisibleOnHoverOnly", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "size", "value", "warn", "warnText"];
6
6
 
7
7
  /**
8
8
  * Copyright IBM Corp. 2022, 2022
@@ -48,7 +48,6 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
48
48
  onChange = _ref.onChange,
49
49
  placeholder = _ref.placeholder,
50
50
  saveDescription = _ref.saveDescription,
51
- saveDisabled = _ref.saveDisabled,
52
51
  size = _ref.size,
53
52
  value = _ref.value,
54
53
  warn = _ref.warn,
@@ -69,9 +68,9 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
69
68
  internalValue = _useState4[0],
70
69
  setInternalValue = _useState4[1];
71
70
 
72
- var showValidationText = invalid || warn;
71
+ var showValidation = invalid || warn;
73
72
  var validationText = invalidText || warnText;
74
- var validationIcon = showValidationText ? invalid ? /*#__PURE__*/React.createElement(WarningFilled16, null) : /*#__PURE__*/React.createElement(WarningAltFilled16, null) : null;
73
+ var validationIcon = showValidation ? invalid ? /*#__PURE__*/React.createElement(WarningFilled16, null) : /*#__PURE__*/React.createElement(WarningAltFilled16, null) : null;
75
74
 
76
75
  var doSetEditing = function doSetEditing(value) {
77
76
  if (value === false) {
@@ -123,6 +122,14 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
123
122
  }
124
123
  };
125
124
 
125
+ var handleInput = function handleInput() {
126
+ setInternalValue(refInput.current.innerText);
127
+
128
+ if (onChange) {
129
+ onChange(refInput.current.innerText);
130
+ }
131
+ };
132
+
126
133
  var handlePaste = function handlePaste(ev) {
127
134
  ev.preventDefault(); // Get clipboard as plain text
128
135
 
@@ -150,14 +157,6 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
150
157
  }
151
158
  };
152
159
 
153
- var handleInput = function handleInput() {
154
- setInternalValue(refInput.current.innerText);
155
-
156
- if (onChange) {
157
- onChange(refInput.current.innerText);
158
- }
159
- };
160
-
161
160
  var handleCancel = function handleCancel() {
162
161
  refInput.current.innerText = value;
163
162
  handleInput(value);
@@ -171,7 +170,6 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
171
170
 
172
171
  var handleBlur = function handleBlur(ev) {
173
172
  if (!ref.current.contains(ev.relatedTarget)) {
174
- doSetEditing(false);
175
173
  handleSave();
176
174
  }
177
175
  };
@@ -242,7 +240,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
242
240
  "aria-hidden": !editing
243
241
  }, "\u2026"), /*#__PURE__*/React.createElement("div", {
244
242
  className: cx("".concat(blockClass, "__toolbar"), (_cx3 = {}, _defineProperty(_cx3, "".concat(blockClass, "__toolbar--animation"), toolbarAnimation), _defineProperty(_cx3, "".concat(blockClass, "__toolbar--saveable"), refInput.current && value !== internalValue), _cx3))
245
- }, showValidationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
243
+ }, showValidation && /*#__PURE__*/React.createElement("div", {
246
244
  className: "".concat(blockClass, "__validation-icon")
247
245
  }, validationIcon), editing ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
248
246
  className: "".concat(blockClass, "__cancel"),
@@ -258,7 +256,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
258
256
  iconDescription: saveDescription,
259
257
  onClick: handleSave,
260
258
  renderIcon: Checkmark16,
261
- disabled: invalid || saveDisabled || value === internalValue
259
+ disabled: value === internalValue
262
260
  })) : /*#__PURE__*/React.createElement(Button, {
263
261
  "aria-hidden": "true",
264
262
  className: cx("".concat(blockClass, "__edit"), _defineProperty({}, "".concat(blockClass, "__edit--hover-visible"), editVisibleOnHoverOnly)),
@@ -271,7 +269,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
271
269
  tabIndex: -1
272
270
  }))), /*#__PURE__*/React.createElement("div", {
273
271
  className: cx("".concat(blockClass, "__disabled-cover"))
274
- }), showValidationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
272
+ }), showValidation && validationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
275
273
  className: "".concat(blockClass, "__validation-text ").concat(carbon.prefix, "--form-requirement")
276
274
  }, validationText))
277
275
  );
@@ -342,12 +340,16 @@ InlineEdit.propTypes = {
342
340
  onCancel: PropTypes.func,
343
341
 
344
342
  /**
345
- * method called on input event (it's a React thing onChange behaves like on input)
343
+ * method called on input event (it's a React thing onChange behaves like on input).
344
+ *
345
+ * NOTE: caller to handle invalid/warn states and associated text
346
346
  */
347
347
  onChange: PropTypes.func,
348
348
 
349
349
  /**
350
350
  * method called on change event
351
+ *
352
+ * NOTE: caller to handle invalid/warn states and associated text
351
353
  */
352
354
  onSave: PropTypes.func,
353
355
 
@@ -361,11 +363,6 @@ InlineEdit.propTypes = {
361
363
  */
362
364
  saveDescription: PropTypes.string.isRequired,
363
365
 
364
- /**
365
- * disabled state of the save button
366
- */
367
- saveDisabled: PropTypes.bool,
368
-
369
366
  /**
370
367
  * vertical size of control
371
368
  */
@@ -15,7 +15,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
15
15
  * LICENSE file in the root directory of this source tree.
16
16
  */
17
17
  // Import portions of React that are needed.
18
- import React, { useEffect, useLayoutEffect, useState, useRef } from 'react';
18
+ import React, { useEffect, useState, useRef } from 'react';
19
19
  import { useResizeDetector } from 'react-resize-detector'; // Other standard imports.
20
20
 
21
21
  import PropTypes from 'prop-types';
@@ -120,10 +120,9 @@ export var TearsheetShell = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
120
120
  setTimeout(function () {
121
121
  return element.focus();
122
122
  }, 1);
123
- }; // Hook called whenever the tearsheet mounts, unmounts, or 'open' changes.
123
+ };
124
124
 
125
-
126
- useLayoutEffect(function () {
125
+ useEffect(function () {
127
126
  var notify = function notify() {
128
127
  return stack.all.forEach(function (handler) {
129
128
  handler(Math.min(stack.open.length, maxDepth), stack.open.indexOf(handler) + 1);
@@ -37,4 +37,5 @@ export { WebTerminal } from './WebTerminal';
37
37
  export { EditSidePanel } from './EditSidePanel';
38
38
  export { OptionsTile } from './OptionsTile';
39
39
  export { CancelableTextEdit } from './CancelableTextEdit';
40
- export { InlineEdit } from './InlineEdit';
40
+ export { InlineEdit } from './InlineEdit';
41
+ export { DataSpreadsheet } from './DataSpreadsheet';
@@ -63,7 +63,8 @@ var defaults = {
63
63
  EditSidePanel: false,
64
64
  OptionsTile: false,
65
65
  CancelableTextEdit: false,
66
- InlineEdit: false
66
+ InlineEdit: false,
67
+ DataSpreadsheet: false
67
68
  /* new component flags here - comment used by generate CLI */
68
69
 
69
70
  },
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export var getScrollbarWidth = function getScrollbarWidth() {
8
+ var scrollDiv = document.createElement('div');
9
+ scrollDiv.setAttribute('style', 'width: 100px; height: 100px; overflow: scroll; position:absolute; top:-9999px;');
10
+ document.body.appendChild(scrollDiv);
11
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
12
+ document.body.removeChild(scrollDiv);
13
+ return scrollbarWidth;
14
+ };
@@ -61,7 +61,7 @@ ActionSetButton.propTypes = _objectSpread(_objectSpread({}, _carbonComponentsRea
61
61
  label: _propTypes.default.string,
62
62
  loading: _propTypes.default.bool
63
63
  });
64
- var defaultKind = _carbonComponentsReact.Button.defaultProps.kind;
64
+ var defaultKind = 'primary';
65
65
 
66
66
  var willStack = function willStack(size, numberOfActions) {
67
67
  return size === 'xs' || size === 'sm' || size === 'md' && numberOfActions > 2;
@@ -37,7 +37,7 @@ var _AddSelectBreadcrumbs = require("./AddSelectBreadcrumbs");
37
37
 
38
38
  var _AddSelectList = require("./AddSelectList");
39
39
 
40
- var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "title"];
40
+ var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "textInputLabel", "title"];
41
41
 
42
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); }
43
43
 
@@ -64,6 +64,8 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
64
64
  onSubmit = _ref.onSubmit,
65
65
  onSubmitButtonText = _ref.onSubmitButtonText,
66
66
  open = _ref.open,
67
+ removeIconDescription = _ref.removeIconDescription,
68
+ textInputLabel = _ref.textInputLabel,
67
69
  title = _ref.title,
68
70
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
69
71
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select"); // hooks
@@ -118,7 +120,7 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
118
120
  } // otherwise use the default label filter
119
121
 
120
122
 
121
- return item.label.toLowerCase().includes(searchTerm);
123
+ return item.title.toLowerCase().includes(searchTerm);
122
124
  });
123
125
  return results;
124
126
  };
@@ -129,7 +131,7 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
129
131
  className: "".concat(blockClass, "__header")
130
132
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
131
133
  id: "temp-id",
132
- labelText: "temp label",
134
+ labelText: textInputLabel,
133
135
  placeholder: inputPlaceholder,
134
136
  value: searchTerm,
135
137
  onChange: handleSearch
@@ -182,7 +184,9 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
182
184
  items: items,
183
185
  multiSelection: multiSelection,
184
186
  noSelectionDescription: noSelectionDescription,
185
- noSelectionTitle: noSelectionTitle
187
+ noSelectionTitle: noSelectionTitle,
188
+ removeIconDescription: removeIconDescription,
189
+ setMultiSelection: setMultiSelection
186
190
  };
187
191
  var classNames = (0, _classnames.default)(className, blockClass, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__single"), !multi), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__multi"), multi), _cx));
188
192
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
@@ -201,7 +205,7 @@ AddSelect.propTypes = {
201
205
  inputPlaceholder: _propTypes.default.string,
202
206
  items: _propTypes.default.arrayOf(_propTypes.default.shape({
203
207
  id: _propTypes.default.string.isRequired,
204
- label: _propTypes.default.string.isRequired,
208
+ title: _propTypes.default.string.isRequired,
205
209
  value: _propTypes.default.string.isRequired
206
210
  })),
207
211
  itemsLabel: _propTypes.default.string,
@@ -216,6 +220,8 @@ AddSelect.propTypes = {
216
220
  onSubmit: _propTypes.default.func,
217
221
  onSubmitButtonText: _propTypes.default.string,
218
222
  open: _propTypes.default.bool,
223
+ removeIconDescription: _propTypes.default.string,
224
+ textInputLabel: _propTypes.default.string,
219
225
  title: _propTypes.default.string
220
226
  };
221
227
  AddSelect.defaultProps = {
@@ -58,7 +58,7 @@ var AddSelectBreadcrumbs = function AddSelectBreadcrumbs(_ref) {
58
58
  key: entry.id,
59
59
  isCurrentPage: isCurrentPage,
60
60
  onClick: crumbHandler
61
- }, entry.label);
61
+ }, entry.title);
62
62
  }));
63
63
  };
64
64
 
@@ -57,10 +57,10 @@ var AddSelectList = function AddSelectList(_ref) {
57
57
 
58
58
  var onNavigateItem = function onNavigateItem(_ref2) {
59
59
  var id = _ref2.id,
60
- label = _ref2.label;
60
+ title = _ref2.title;
61
61
  setPath([].concat((0, _toConsumableArray2.default)(path), [{
62
62
  id: id,
63
- label: label
63
+ title: title
64
64
  }]));
65
65
  };
66
66
 
@@ -79,7 +79,7 @@ var AddSelectList = function AddSelectList(_ref) {
79
79
  onChange: function onChange(value) {
80
80
  return handleMultiSelection(item.id, value);
81
81
  },
82
- labelText: item.label,
82
+ labelText: item.title,
83
83
  id: item.id,
84
84
  checked: multiSelection.includes(item.id)
85
85
  }) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
@@ -87,7 +87,7 @@ var AddSelectList = function AddSelectList(_ref) {
87
87
  name: "add-select-selections",
88
88
  id: item.id,
89
89
  value: item.value,
90
- labelText: item.label,
90
+ labelText: item.title,
91
91
  onChange: handleSingleSelection,
92
92
  selected: item.value === singleSelection
93
93
  }), item.children && /*#__PURE__*/_react.default.createElement(_iconsReact.ChevronRight16, {
@@ -13,6 +13,8 @@ var _react = _interopRequireDefault(require("react"));
13
13
 
14
14
  var _carbonComponentsReact = require("carbon-components-react");
15
15
 
16
+ var _iconsReact = require("@carbon/icons-react");
17
+
16
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
19
 
18
20
  var _NoDataEmptyState = require("../../components/EmptyStates/NoDataEmptyState");
@@ -27,8 +29,18 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
27
29
  items = _ref.items,
28
30
  multiSelection = _ref.multiSelection,
29
31
  noSelectionDescription = _ref.noSelectionDescription,
30
- noSelectionTitle = _ref.noSelectionTitle;
31
- var blockClass = "".concat(_settings.pkg.prefix, "--add-select__sidebar"); // utility to flatten the list of items and their children into a single searchable array
32
+ noSelectionTitle = _ref.noSelectionTitle,
33
+ removeIconDescription = _ref.removeIconDescription,
34
+ setMultiSelection = _ref.setMultiSelection;
35
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__sidebar");
36
+
37
+ var handleItemRemove = function handleItemRemove(id) {
38
+ var newSelections = multiSelection.filter(function (v) {
39
+ return v !== id;
40
+ });
41
+ setMultiSelection(newSelections);
42
+ }; // utility to flatten the list of items and their children into a single searchable array
43
+
32
44
 
33
45
  var flattenItems = function flattenItems(arr) {
34
46
  return arr.reduce(function (prev, cur) {
@@ -44,6 +56,25 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
44
56
  return item.id === selectedId;
45
57
  });
46
58
  });
59
+
60
+ var getTitle = function getTitle(_ref2) {
61
+ var title = _ref2.title,
62
+ subtitle = _ref2.subtitle,
63
+ id = _ref2.id;
64
+ return /*#__PURE__*/_react.default.createElement("div", {
65
+ className: "".concat(blockClass, "-accordion-title")
66
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", null, title), /*#__PURE__*/_react.default.createElement("p", null, subtitle)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
67
+ renderIcon: _iconsReact.SubtractAlt32,
68
+ iconDescription: removeIconDescription,
69
+ hasIconOnly: true,
70
+ onClick: function onClick() {
71
+ return handleItemRemove(id);
72
+ },
73
+ kind: "ghost",
74
+ className: "".concat(blockClass, "-item-remove-button")
75
+ }));
76
+ };
77
+
47
78
  return /*#__PURE__*/_react.default.createElement("div", {
48
79
  className: blockClass
49
80
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -57,7 +88,7 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
57
88
  align: "start"
58
89
  }, sidebarItems.map(function (item) {
59
90
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.AccordionItem, {
60
- title: item.value,
91
+ title: getTitle(item),
61
92
  key: item.id
62
93
  }, Object.keys(item).map(function (key) {
63
94
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -84,6 +115,8 @@ AddSelectSidebar.propTypes = {
84
115
  items: _propTypes.default.array,
85
116
  multiSelection: _propTypes.default.array,
86
117
  noSelectionDescription: _propTypes.default.string,
87
- noSelectionTitle: _propTypes.default.string
118
+ noSelectionTitle: _propTypes.default.string,
119
+ removeIconDescription: _propTypes.default.string,
120
+ setMultiSelection: _propTypes.default.func
88
121
  };
89
122
  AddSelectSidebar.displayName = componentName;
@@ -111,5 +111,5 @@ ButtonMenu.propTypes = {
111
111
  size: _carbonComponentsReact.Button.propTypes.size
112
112
  };
113
113
  ButtonMenu.defaultProps = {
114
- size: _carbonComponentsReact.Button.defaultProps.size
114
+ size: 'default'
115
115
  };