@carbon/ibm-products 1.35.0 → 1.35.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. package/css/index-full-carbon.css +257 -237
  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-released-only.css.map +1 -1
  6. package/css/index-without-carbon-released-only.min.css.map +1 -1
  7. package/css/index-without-carbon.css +257 -237
  8. package/css/index-without-carbon.css.map +1 -1
  9. package/css/index-without-carbon.min.css +2 -2
  10. package/css/index-without-carbon.min.css.map +1 -1
  11. package/css/index.css +257 -237
  12. package/css/index.css.map +1 -1
  13. package/css/index.min.css +2 -2
  14. package/css/index.min.css.map +1 -1
  15. package/es/components/CreateTearsheet/CreateTearsheet.js +7 -1
  16. package/es/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  17. package/es/components/Datagrid/Datagrid/DatagridRow.js +3 -3
  18. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +4 -2
  19. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +1 -1
  20. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +4 -3
  21. package/es/components/Datagrid/useRowExpander.js +13 -1
  22. package/es/components/InlineEdit/InlineEdit.js +22 -385
  23. package/es/components/InlineEditV1/InlineEditV1.js +406 -0
  24. package/es/components/InlineEditV1/index.js +8 -0
  25. package/es/components/InlineEditV2/InlineEditV2.js +48 -21
  26. package/es/components/InlineEditV2/index.js +7 -0
  27. package/es/components/PageHeader/PageHeader.js +3 -3
  28. package/es/components/index.js +1 -1
  29. package/es/global/js/hooks/useResetCreateComponent.js +6 -2
  30. package/es/global/js/package-settings.js +1 -0
  31. package/es/global/js/utils/getNumberOfHiddenSteps.js +19 -0
  32. package/lib/components/CreateTearsheet/CreateTearsheet.js +7 -1
  33. package/lib/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  34. package/lib/components/Datagrid/Datagrid/DatagridRow.js +3 -3
  35. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +4 -2
  36. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +1 -1
  37. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +4 -3
  38. package/lib/components/Datagrid/useColumnOrder.js +2 -1
  39. package/lib/components/Datagrid/useRowExpander.js +13 -1
  40. package/lib/components/InlineEdit/InlineEdit.js +22 -379
  41. package/lib/components/InlineEditV1/InlineEditV1.js +403 -0
  42. package/lib/components/InlineEditV1/index.js +12 -0
  43. package/lib/components/InlineEditV2/InlineEditV2.js +38 -20
  44. package/lib/components/PageHeader/PageHeader.js +3 -3
  45. package/lib/components/index.js +1 -1
  46. package/lib/global/js/hooks/useResetCreateComponent.js +6 -2
  47. package/lib/global/js/package-settings.js +1 -0
  48. package/lib/global/js/utils/getNumberOfHiddenSteps.js +26 -0
  49. package/package.json +10 -10
  50. package/scss/components/Datagrid/styles/_useExpandedRow.scss +18 -0
  51. package/scss/components/{InlineEdit → InlineEditV1}/_index.scss +1 -1
  52. package/scss/components/{InlineEdit/_inline-edit.scss → InlineEditV1/_inline-edit-v1.scss} +0 -0
  53. package/scss/components/{InlineEdit → InlineEditV1}/_storybook-styles.scss +0 -0
  54. package/scss/components/InlineEditV2/_index.scss +1 -1
  55. package/scss/components/InlineEditV2/_inline-edit-v2.scss +5 -1
  56. package/scss/components/InlineEditV2/_storybook-styles.scss +6 -0
  57. package/scss/components/_index-released-only.scss +1 -1
  58. package/scss/components/_index.scss +2 -1
@@ -0,0 +1,19 @@
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
+
8
+ export var getNumberOfHiddenSteps = function getNumberOfHiddenSteps(stepData, initialStep) {
9
+ var numberOfHiddenSteps = 0;
10
+ stepData.forEach(function (step, stepIndex) {
11
+ if (stepIndex + 1 > initialStep) {
12
+ return;
13
+ }
14
+ if (step.shouldIncludeStep === false) {
15
+ numberOfHiddenSteps += 1;
16
+ }
17
+ });
18
+ return numberOfHiddenSteps;
19
+ };
@@ -20,6 +20,7 @@ var _settings = require("../../settings");
20
20
  var _hooks = require("../../global/js/hooks");
21
21
  var _devtools = require("../../global/js/utils/devtools");
22
22
  var _lastIndexInArray = require("../../global/js/utils/lastIndexInArray");
23
+ var _getNumberOfHiddenSteps = require("../../global/js/utils/getNumberOfHiddenSteps");
23
24
  var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "description", "influencerWidth", "initialStep", "label", "nextButtonText", "onClose", "onRequestSubmit", "open", "submitButtonText", "title", "verticalPosition"];
24
25
  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); }
25
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; }
@@ -117,7 +118,11 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
117
118
  if (lastItem !== lastIncludedStep) {
118
119
  setLastIncludedStep(lastItem);
119
120
  }
120
- }, [stepData, firstIncludedStep, lastIncludedStep]);
121
+ if (open && initialStep) {
122
+ var numberOfHiddenSteps = (0, _getNumberOfHiddenSteps.getNumberOfHiddenSteps)(stepData, initialStep);
123
+ setCurrentStep(initialStep + numberOfHiddenSteps);
124
+ }
125
+ }, [stepData, firstIncludedStep, lastIncludedStep, initialStep, open]);
121
126
  (0, _hooks.useCreateComponentFocus)({
122
127
  previousState: previousState,
123
128
  currentStep: currentStep,
@@ -130,6 +135,7 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
130
135
  previousState: previousState,
131
136
  open: open,
132
137
  setCurrentStep: setCurrentStep,
138
+ stepData: stepData,
133
139
  initialStep: initialStep,
134
140
  totalSteps: stepData === null || stepData === void 0 ? void 0 : stepData.length,
135
141
  componentName: componentName
@@ -109,7 +109,7 @@ var DatagridContent = function DatagridContent(_ref) {
109
109
  return;
110
110
  }
111
111
  var gridElement = document.querySelector("#".concat(tableId));
112
- var tableHeader = document.querySelector(".".concat(_settings.carbon.prefix, "--data-table-header"));
112
+ var tableHeader = gridElement === null || gridElement === void 0 ? void 0 : gridElement.querySelector(".".concat(_settings.carbon.prefix, "--data-table-header"));
113
113
  gridElement.style.setProperty("--".concat(blockClass, "--grid-width"), (0, _layout.px)(totalColumnsWidth + 32));
114
114
  if (gridActive) {
115
115
  gridElement.style.setProperty("--".concat(blockClass, "--grid-header-height"), (0, _layout.px)((tableHeader === null || tableHeader === void 0 ? void 0 : tableHeader.clientHeight) || 0));
@@ -126,7 +126,7 @@ var DatagridContent = function DatagridContent(_ref) {
126
126
  className: "".concat(blockClass, "__datagridLeftPanel")
127
127
  }, leftPanel.panelContent), withInlineEdit ? /*#__PURE__*/_react.default.createElement("div", {
128
128
  ref: multiKeyTrackingRef
129
- }, renderTable()) : renderTable())), (rows === null || rows === void 0 ? void 0 : rows.length) > 0 && !isFetching && DatagridPagination && DatagridPagination(datagridState), CustomizeColumnsModal && /*#__PURE__*/_react.default.createElement(CustomizeColumnsModal, {
129
+ }, renderTable()) : renderTable())), (rows === null || rows === void 0 ? void 0 : rows.length) > 0 && !isFetching && DatagridPagination && /*#__PURE__*/_react.default.createElement(DatagridPagination, datagridState), CustomizeColumnsModal && /*#__PURE__*/_react.default.createElement(CustomizeColumnsModal, {
130
130
  instance: datagridState
131
131
  }));
132
132
  };
@@ -32,7 +32,7 @@ var DatagridRow = function DatagridRow(datagridState) {
32
32
  var activeCellId = state.activeCellId;
33
33
  var activeCellObject = activeCellId && (0, _getCellIdAsObject.getCellIdAsObject)(activeCellId);
34
34
  return /*#__PURE__*/_react.default.createElement(TableRow, (0, _extends2.default)({
35
- className: (0, _classnames.default)("".concat(blockClass, "__carbon-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expanded"), row.isExpanded), (0, _defineProperty2.default)(_cx, "".concat(_settings.carbon.prefix, "--data-table--selected"), row.isSelected), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-hover-active"), activeCellObject && row.index === activeCellObject.row), _cx))
35
+ className: (0, _classnames.default)("".concat(blockClass, "__carbon-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expanded"), row.isExpanded), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expandable"), row.canExpand), (0, _defineProperty2.default)(_cx, "".concat(_settings.carbon.prefix, "--data-table--selected"), row.isSelected), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-hover-active"), activeCellObject && row.index === activeCellObject.row), _cx))
36
36
  }, row.getRowProps(), {
37
37
  key: row.id,
38
38
  onMouseEnter: function onMouseEnter(event) {
@@ -43,7 +43,7 @@ var DatagridRow = function DatagridRow(datagridState) {
43
43
  var hoverRow = event.target.closest(".".concat(blockClass, "__carbon-row-expanded"));
44
44
  hoverRow === null || hoverRow === void 0 ? void 0 : hoverRow.classList.remove("".concat(blockClass, "__carbon-row-expanded-hover-active"));
45
45
  }
46
- }), row.cells.map(function (cell) {
46
+ }), row.cells.map(function (cell, index) {
47
47
  var cellProps = cell.getCellProps();
48
48
  var children = cellProps.children,
49
49
  restProps = (0, _objectWithoutProperties2.default)(cellProps, _excluded);
@@ -55,7 +55,7 @@ var DatagridRow = function DatagridRow(datagridState) {
55
55
  });
56
56
  }
57
57
  return /*#__PURE__*/_react.default.createElement(TableCell, (0, _extends2.default)({
58
- className: "".concat(blockClass, "__cell")
58
+ className: (0, _classnames.default)("".concat(blockClass, "__cell"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__expandable-row-cell"), row.canExpand && index === 0))
59
59
  }, restProps, {
60
60
  key: cell.column.id
61
61
  }), content);
@@ -41,7 +41,8 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
41
41
  setReceivedInitialWidth = _useState6[1];
42
42
  var selectedFlatRows = datagridState.selectedFlatRows,
43
43
  toggleAllRowsSelected = datagridState.toggleAllRowsSelected,
44
- toolbarBatchActions = datagridState.toolbarBatchActions;
44
+ toolbarBatchActions = datagridState.toolbarBatchActions,
45
+ setGlobalFilter = datagridState.setGlobalFilter;
45
46
  var totalSelected = selectedFlatRows && selectedFlatRows.length;
46
47
 
47
48
  // Get initial width of batch actions container,
@@ -113,7 +114,8 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
113
114
  shouldShowBatchActions: totalSelected > 0,
114
115
  totalSelected: totalSelected,
115
116
  onCancel: function onCancel() {
116
- return toggleAllRowsSelected(false);
117
+ toggleAllRowsSelected(false);
118
+ setGlobalFilter(null);
117
119
  }
118
120
  }, !displayAllInMenu && toolbarBatchActions && (toolbarBatchActions === null || toolbarBatchActions === void 0 ? void 0 : toolbarBatchActions.map(function (batchAction, index) {
119
121
  if (index < 2 && toolbarBatchActions.length > 3 || index < 3 && toolbarBatchActions.length === 3) {
@@ -34,7 +34,7 @@ var RowSizeDropdown = function RowSizeDropdown(_ref) {
34
34
  hasIconOnly: true,
35
35
  ref: buttonRef,
36
36
  kind: "ghost",
37
- tooltipPosition: "left",
37
+ tooltipPosition: "bottom",
38
38
  renderIcon: _iconsReact.Settings16,
39
39
  onClick: function onClick() {
40
40
  return setIsOpen(!isOpen);
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _layout = require("@carbon/layout");
11
12
  var _carbonComponentsReact = require("carbon-components-react");
12
13
  var _isArray = _interopRequireDefault(require("lodash/isArray"));
13
14
  var _settings = require("../../../../../settings");
@@ -52,8 +53,8 @@ var RowSizeRadioGroup = function RowSizeRadioGroup(_ref) {
52
53
  return /*#__PURE__*/_react.default.createElement("div", {
53
54
  className: "".concat(blockClass, "__row-size-dropdown"),
54
55
  style: {
55
- top: top,
56
- right: right
56
+ top: (0, _layout.rem)(top),
57
+ right: (0, _layout.rem)(right)
57
58
  },
58
59
  role: "presentation",
59
60
  onClick: function onClick(e) {
@@ -96,7 +97,7 @@ var getDropdownPosition = function getDropdownPosition(buttonEle) {
96
97
  var parent = buttonEle.parentElement;
97
98
  if (parent instanceof HTMLElement) {
98
99
  var top = buttonEle.offsetTop + buttonEle.offsetHeight;
99
- var right = parent.offsetWidth - parent.offsetLeft - buttonEle.offsetLeft;
100
+ var right = parent.offsetWidth - (buttonEle.offsetLeft + buttonEle.offsetWidth);
100
101
  return {
101
102
  top: top,
102
103
  right: right
@@ -10,5 +10,6 @@ var _reactTable = require("react-table");
10
10
  *
11
11
  * This source code is licensed under the Apache-2.0 license found in the
12
12
  * LICENSE file in the root directory of this source tree.
13
- */var _default = _reactTable.useColumnOrder;
13
+ */
14
+ var _default = _reactTable.useColumnOrder;
14
15
  exports.default = _default;
@@ -6,8 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var _react = _interopRequireDefault(require("react"));
10
11
  var _iconsReact = require("@carbon/icons-react");
12
+ var _classnames = _interopRequireDefault(require("classnames"));
13
+ var _settings = require("../../settings");
11
14
  /* eslint-disable react/prop-types */
12
15
  /*
13
16
  * Licensed Materials - Property of IBM
@@ -17,13 +20,22 @@ var _iconsReact = require("@carbon/icons-react");
17
20
  * restricted by GSA ADP Schedule Contract with IBM Corp.
18
21
  */
19
22
 
23
+ var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
20
24
  var useRowExpander = function useRowExpander(hooks) {
21
25
  var visibleColumns = function visibleColumns(columns) {
22
26
  var expanderColumn = {
23
27
  id: 'expander',
24
28
  Cell: function Cell(_ref) {
25
29
  var row = _ref.row;
26
- return row.canExpand && /*#__PURE__*/_react.default.createElement("span", row.getToggleRowExpandedProps(), row.isExpanded ? /*#__PURE__*/_react.default.createElement(_iconsReact.ChevronUp16, null) : /*#__PURE__*/_react.default.createElement(_iconsReact.ChevronDown16, null));
30
+ return row.canExpand && /*#__PURE__*/_react.default.createElement("button", (0, _extends2.default)({
31
+ type: "button",
32
+ "aria-label": "Expand current row",
33
+ className: (0, _classnames.default)("".concat(blockClass, "__row-expander"), "".concat(_settings.carbon.prefix, "--btn"), "".concat(_settings.carbon.prefix, "--btn--ghost"))
34
+ }, row.getToggleRowExpandedProps()), row.isExpanded ? /*#__PURE__*/_react.default.createElement(_iconsReact.ChevronUp16, {
35
+ className: "".concat(blockClass, "__row-expander--icon")
36
+ }) : /*#__PURE__*/_react.default.createElement(_iconsReact.ChevronDown16, {
37
+ className: "".concat(blockClass, "__row-expander--icon")
38
+ }));
27
39
  },
28
40
  width: 48,
29
41
  disableResizing: true,
@@ -1,402 +1,45 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof3 = require("@babel/runtime/helpers/typeof");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.InlineEdit = void 0;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
14
11
  var _react = _interopRequireWildcard(require("react"));
15
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
16
- var _classnames = _interopRequireDefault(require("classnames"));
17
- var _devtools = require("../../global/js/utils/devtools");
18
13
  var _settings = require("../../settings");
19
- var _carbonComponentsReact = require("carbon-components-react");
20
- var _iconsReact = require("@carbon/icons-react");
21
- var _excluded = ["buttonTooltipAlignment", "buttonTooltipPosition", "cancelDescription", "className", "disabled", "editAlwaysVisible", "editDescription", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "size", "value"];
14
+ var _InlineEditV = require("../InlineEditV1");
15
+ var _InlineEditV2 = require("../InlineEditV2");
16
+ var _excluded = ["v2"];
22
17
  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
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(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; }
24
- // The block part of our conventional BEM class names (blockClass__E--M).
25
- var blockClass = "".concat(_settings.pkg.prefix, "--inline-edit");
26
- var componentName = 'InlineEdit';
27
- // NOTE: the component SCSS is not imported here: it is rolled up separately.
28
-
29
- var defaults = {
30
- buttonTooltipAlignment: 'center',
31
- buttonTooltipPosition: 'top',
32
- light: true,
33
- // defaults to true to reflect design
34
- size: 'md'
35
- };
36
- var buttons = ['cancel', 'edit', 'save'];
37
-
18
+ 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; }
19
+ 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; }
20
+ 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) { (0, _defineProperty2.default)(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; }
38
21
  /**
39
- * TODO: A description of the component.
22
+ * this is a wrapper component that will allow us to support v1 and v2 versions of InlineEdit
23
+ * if the user passes in the v2 feature flag the v2 version of the component will be rendered
24
+ * since this is a temporary solution the named export should just remain InlineEdit unlike how
25
+ * Card works as a base layer for Productive and Expressive cards.
40
26
  */
41
- var InlineEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref, refIn) {
42
- var _cx, _refInput$current, _refInput$current$tex, _cx3;
43
- var buttonTooltipAlignment = _ref.buttonTooltipAlignment,
44
- buttonTooltipPosition = _ref.buttonTooltipPosition,
45
- cancelDescription = _ref.cancelDescription,
46
- className = _ref.className,
47
- disabled = _ref.disabled,
48
- editAlwaysVisible = _ref.editAlwaysVisible,
49
- editDescription = _ref.editDescription,
50
- id = _ref.id,
51
- invalid = _ref.invalid,
52
- invalidText = _ref.invalidText,
53
- labelText = _ref.labelText,
54
- _ref$light = _ref.light,
55
- light = _ref$light === void 0 ? defaults.light : _ref$light,
56
- onCancel = _ref.onCancel,
57
- onSave = _ref.onSave,
58
- onChange = _ref.onChange,
59
- placeholder = _ref.placeholder,
60
- saveDescription = _ref.saveDescription,
61
- _ref$size = _ref.size,
62
- size = _ref$size === void 0 ? defaults.size : _ref$size,
63
- value = _ref.value,
27
+
28
+ var componentName = 'InlineEdit';
29
+ var InlineEdit = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
30
+ var v2 = _ref.v2,
64
31
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
65
- var refInput = (0, _react.useRef)({
66
- textContent: value
32
+ var props = _objectSpread(_objectSpread({}, rest), {}, {
33
+ ref: ref
67
34
  });
68
- var localRef = (0, _react.useRef)(null);
69
- var ref = refIn || localRef;
70
- var _useState = (0, _react.useState)(false),
71
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
72
- editing = _useState2[0],
73
- setEditing = _useState2[1];
74
- var _useState3 = (0, _react.useState)(value),
75
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
76
- internalValue = _useState4[0],
77
- setInternalValue = _useState4[1];
78
- var showValidation = invalid; // || warn;
79
- var validationText = invalidText; // || warnText;
80
- var validationIcon = showValidation ? /*#__PURE__*/_react.default.createElement(_iconsReact.WarningFilled16, null) : null;
81
-
82
- // sanitize the tooltip values
83
- var alignIsObject = (0, _typeof2.default)(buttonTooltipAlignment) === 'object';
84
- var directionIsObject = (0, _typeof2.default)(buttonTooltipPosition) === 'object';
85
- var tipPositions = buttons.reduce(function (acc, button) {
86
- var _ref2, _ref3;
87
- var tooltipAlignment = (_ref2 = alignIsObject ? buttonTooltipAlignment[button] : buttonTooltipAlignment) !== null && _ref2 !== void 0 ? _ref2 : defaults.buttonTooltipAlignment;
88
- var tooltipPosition = (_ref3 = directionIsObject ? buttonTooltipPosition[button] : buttonTooltipPosition) !== null && _ref3 !== void 0 ? _ref3 : defaults.buttonTooltipPosition;
89
- acc[button] = {
90
- tooltipAlignment: tooltipAlignment,
91
- tooltipPosition: tooltipPosition
92
- };
93
- return acc;
94
- }, {});
95
- var doSetEditing = function doSetEditing(value) {
96
- if (value === false) {
97
- // move scroll to start
98
- refInput.current.scrollLeft = 0;
99
- }
100
- setEditing(!disabled && value);
101
- };
102
- var handleEdit = function handleEdit(ev) {
103
- /* istanbul ignore else */
104
- if (!disabled) {
105
- var rightOfInput = ev.currentTarget.classList.contains("".concat(blockClass, "__edit")) || ev.target.classList.contains("".concat(blockClass, "__after-input-elements"));
106
- var leftOfInput = ev.currentTarget = ev.target.classList.contains("".concat(blockClass));
107
-
108
- // clicking on the content editable element should not set either of these to true
109
- if (rightOfInput || leftOfInput) {
110
- doSetEditing(true);
111
- setTimeout(function () {
112
- refInput.current.focus();
113
- // select all the content
114
- document.getSelection().selectAllChildren(refInput.current);
115
- if (rightOfInput) {
116
- document.getSelection().collapseToEnd();
117
- refInput.current.scrollLeft = 9999; // never going to get there but ensures at end.
118
- } else {
119
- document.getSelection().collapseToStart();
120
- refInput.current.scrollLeft = 0; // scroll to start
121
- }
122
- }, 0);
123
- }
124
- }
125
- };
126
- var handleFocus = function handleFocus(ev) {
127
- ev.preventDefault();
128
- if (!editing && ev.target.classList.contains("".concat(blockClass, "__input"))) {
129
- doSetEditing(true);
130
- }
131
- };
132
- var handleSave = function handleSave() {
133
- doSetEditing(false);
134
- document.getSelection().removeAllRanges();
135
- if (onSave) {
136
- onSave(refInput.current.textContent);
137
- }
138
- };
139
- var handleInput = function handleInput() {
140
- setInternalValue(refInput.current.textContent);
141
- if (onChange) {
142
- onChange(refInput.current.textContent);
143
- }
144
- };
145
-
146
- // pasting into contentEditable not supported by userEvent
147
- var handlePaste = /* istanbul ignore next */function handlePaste(ev) {
148
- ev.preventDefault();
149
-
150
- // Get clipboard as plain text
151
- var text = (ev.clipboardData || window.clipboardData).getData('text/plain');
152
-
153
- // remove \n
154
- var sanitizedText = text.replaceAll(/\n/g, '') // remove carriage returns
155
- .replaceAll(/\t/g, ' '); // replace tab with two spaces
156
-
157
- if (document.queryCommandSupported('insertText')) {
158
- document.execCommand('insertText', false, sanitizedText);
159
- } else {
160
- // Insert text at the current position of caret
161
- var range = document.getSelection().getRangeAt(0);
162
- range.deleteContents();
163
- var textNode = document.createTextNode(sanitizedText);
164
- range.insertNode(textNode);
165
- // move selection end of textNode
166
- range.selectNodeContents(textNode);
167
- range.collapse(false);
168
-
169
- // remove existing range
170
- var selection = document.getSelection();
171
- selection.removeAllRanges();
172
-
173
- // set the new range
174
- selection.addRange(range);
175
- }
176
- };
177
- var handleCancel = function handleCancel() {
178
- refInput.current.textContent = value;
179
- handleInput(value);
180
- doSetEditing(false);
181
- document.getSelection().removeAllRanges();
182
- if (onCancel) {
183
- onCancel(value);
184
- }
185
- };
186
- var handleBlur = function handleBlur(ev) {
187
- if (!ref.current.contains(ev.relatedTarget)) {
188
- handleSave();
189
- }
190
- };
191
- var handleKeyDown = function handleKeyDown(ev) {
192
- switch (ev.key) {
193
- case 'Enter':
194
- ev.preventDefault();
195
- refInput.current.blur(); // will cause save
196
- break;
197
- case 'Escape':
198
- handleCancel();
199
- break;
200
- }
201
- };
202
-
203
- /*
204
- The HTML is structured as follows:
205
- <container>
206
- <!-- margin left of input to match Carbon -->
207
- <content-editable>
208
- <-- margin right of input space for after-input-elements -->
209
- <after-input-elements>
210
- </container>
211
- NOTE:
212
- - An input is not used as this would not permit a heading tag e.g. <h2>.
213
- - Some padding is added to the left 16px standard for a Carbon text input
214
- - The after-input-elements are position absolute with a margin to on the input to reserve space. Using inline-flex
215
- - does not measure space properly for the input otherwise.
216
- - The content editable is not expected to change size when buttons are added, to ensure the text does not move space
217
- is reserved up front for buttons and invalid icon. Mostly this is only noticed if the width of the component is not 100%.
218
- which can be shown by setting inlineEditFullWidth to false in storybook.
219
- In making content-editable behave like an input of type text we have to account for.
220
- - Enforcing a single line
221
- - Pasting of non-text e.g. html or text with carriage returns
222
- - The padding and border not hiding typed in text.
223
- - Placing the cursor at the start or end depending on area clicked (before for left-padding)
224
- */
225
-
226
- var toolbarAnimation = true;
227
- return (
228
- /*#__PURE__*/
229
- // eslint-disable-next-line
230
- _react.default.createElement("div", {
231
- className: (0, _classnames.default)(blockClass,
232
- // Apply the block class to the main HTML element
233
- className, // Apply any supplied class names to the main HTML element.
234
- "".concat(blockClass, "--").concat(size), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--disabled"), disabled), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--editing"), editing), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--invalid"), invalid), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--light"), light), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--overflows"), refInput.current && refInput.current.scrollWidth > refInput.current.offsetWidth), _cx)),
235
- onClick: handleEdit // disabled eslint for click handler
236
- ,
237
- onBlur: handleBlur,
238
- ref: ref
239
- }, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, (0, _devtools.getDevtoolsProps)(componentName), {
240
- id: id,
241
- size: size,
242
- className: (0, _classnames.default)("".concat(blockClass, "__input"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__input--empty"), ((_refInput$current = refInput.current) === null || _refInput$current === void 0 ? void 0 : (_refInput$current$tex = _refInput$current.textContent) === null || _refInput$current$tex === void 0 ? void 0 : _refInput$current$tex.length) === 0)),
243
- contentEditable: true,
244
- "aria-label": labelText,
245
- role: "textbox",
246
- tabIndex: disabled ? -1 : 0,
247
- onFocus: handleFocus,
248
- onInput: handleInput,
249
- onKeyDown: handleKeyDown,
250
- onPaste: handlePaste,
251
- suppressContentEditableWarning: true,
252
- ref: refInput,
253
- "data-placeholder": placeholder
254
- }), value), /*#__PURE__*/_react.default.createElement("div", {
255
- className: (0, _classnames.default)("".concat(blockClass, "__after-input-elements"))
256
- // tabindex -1 fixes blur target test when clicking on after-input-elements background
257
- ,
258
- tabIndex: "-1"
259
- }, /*#__PURE__*/_react.default.createElement("div", {
260
- className: "".concat(blockClass, "__ellipsis"),
261
- "aria-hidden": !editing
262
- }, "\u2026"), /*#__PURE__*/_react.default.createElement("div", {
263
- className: (0, _classnames.default)("".concat(blockClass, "__toolbar"), (_cx3 = {}, (0, _defineProperty2.default)(_cx3, "".concat(blockClass, "__toolbar--animation"), toolbarAnimation), (0, _defineProperty2.default)(_cx3, "".concat(blockClass, "__toolbar--saveable"), refInput.current && value !== internalValue), _cx3))
264
- }, showValidation && /*#__PURE__*/_react.default.createElement("div", {
265
- className: "".concat(blockClass, "__validation-icon")
266
- }, validationIcon), editing ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({
267
- className: "".concat(blockClass, "__cancel"),
268
- kind: "ghost",
269
- hasIconOnly: true,
270
- iconDescription: cancelDescription,
271
- onClick: handleCancel,
272
- renderIcon: _iconsReact.Close16
273
- }, tipPositions.cancel)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({
274
- className: "".concat(blockClass, "__save"),
275
- kind: "ghost",
276
- hasIconOnly: true,
277
- iconDescription: saveDescription,
278
- onClick: handleSave,
279
- renderIcon: _iconsReact.Checkmark16,
280
- disabled: value === internalValue
281
- }, tipPositions.save))) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({
282
- className: (0, _classnames.default)("".concat(blockClass, "__edit"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__edit--always-visible"), editAlwaysVisible)),
283
- kind: "ghost",
284
- hasIconOnly: true,
285
- iconDescription: editDescription,
286
- onClick: handleEdit,
287
- renderIcon: disabled ? _iconsReact.EditOff16 : _iconsReact.Edit16,
288
- disabled: disabled,
289
- tabIndex: -1
290
- }, tipPositions.edit)))), /*#__PURE__*/_react.default.createElement("div", {
291
- className: (0, _classnames.default)("".concat(blockClass, "__disabled-cover"))
292
- }), showValidation && validationText && validationText.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
293
- className: "".concat(blockClass, "__validation-text ").concat(_settings.carbon.prefix, "--form-requirement")
294
- }, validationText))
295
- );
35
+ if (v2 === true) {
36
+ return /*#__PURE__*/_react.default.createElement(_InlineEditV2.InlineEditV2, props);
37
+ }
38
+ return /*#__PURE__*/_react.default.createElement(_InlineEditV.InlineEditV1, props);
296
39
  });
297
-
298
- // Return a placeholder if not released and not enabled by feature flag
299
40
  exports.InlineEdit = InlineEdit;
300
41
  exports.InlineEdit = InlineEdit = _settings.pkg.checkComponentEnabled(InlineEdit, componentName);
301
-
302
- // The display name of the component, used by React. Note that displayName
303
- // is used in preference to relying on function.name.
304
42
  InlineEdit.displayName = componentName;
305
-
306
- // The types and DocGen commentary for the component props,
307
- // in alphabetical order (for consistency).
308
- // See https://www.npmjs.com/package/prop-types#usage.
309
43
  InlineEdit.propTypes = {
310
- /**
311
- * buttonTooltipAlignment from the standard tooltip. Default center.
312
- *
313
- * Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
314
- */
315
- buttonTooltipAlignment: _propTypes.default.oneOfType([_propTypes.default.oneOf(['start', 'center', 'end']), _propTypes.default.shape({
316
- cancel: _propTypes.default.oneOf(['start', 'center', 'end']),
317
- edit: _propTypes.default.oneOf(['start', 'center', 'end']),
318
- save: _propTypes.default.oneOf(['start', 'center', 'end'])
319
- })]),
320
- /**
321
- * buttonTooltipPosition from the standard tooltip
322
- *
323
- * Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
324
- */
325
- buttonTooltipPosition: _propTypes.default.oneOfType([_propTypes.default.oneOf(['top', 'right', 'bottom', 'left']), _propTypes.default.shape({
326
- cancel: _propTypes.default.oneOf(['top', 'right', 'bottom', 'left']),
327
- edit: _propTypes.default.oneOf(['top', 'right', 'bottom', 'left']),
328
- save: _propTypes.default.oneOf(['top', 'right', 'bottom', 'left'])
329
- })]),
330
- /**
331
- * label for cancel button
332
- */
333
- cancelDescription: _propTypes.default.string.isRequired,
334
- /**
335
- * Provide an optional class to be applied to the containing node.
336
- */
337
- className: _propTypes.default.string,
338
- /**
339
- * disable edit
340
- */
341
- disabled: _propTypes.default.bool,
342
- /**
343
- * By default the edit icon is shown on hover only.
344
- */
345
- editAlwaysVisible: _propTypes.default.bool,
346
- /**
347
- * Label for the edit button
348
- */
349
- editDescription: _propTypes.default.string.isRequired,
350
- /**
351
- * ID for inline edit
352
- */
353
- id: _propTypes.default.string,
354
- /**
355
- * set invalid state for input
356
- */
357
- invalid: _propTypes.default.bool,
358
- /**
359
- * text shown when invalid is true
360
- */
361
- invalidText: _propTypes.default.string,
362
- /**
363
- * label for text input
364
- */
365
- labelText: _propTypes.default.string,
366
- /**
367
- * change background to light version (mimic React TextInput)
368
- */
369
- light: _propTypes.default.bool,
370
- /**
371
- * method called on cancel event
372
- */
373
- onCancel: _propTypes.default.func,
374
- /**
375
- * method called on input event (it's a React thing onChange behaves like on input).
376
- *
377
- * NOTE: caller to handle invalid states and associated text
378
- */
379
- onChange: _propTypes.default.func,
380
- /**
381
- * method called on change event
382
- *
383
- * NOTE: caller to handle invalid states and associated text
384
- */
385
- onSave: _propTypes.default.func,
386
- /**
387
- * placeholder for text input
388
- */
389
- placeholder: _propTypes.default.string,
390
- /**
391
- * label for save button
392
- */
393
- saveDescription: _propTypes.default.string.isRequired,
394
- /**
395
- * vertical size of control
396
- */
397
- size: _propTypes.default.oneOf(['sm', 'md', 'lg']),
398
- /**
399
- * initial/unedited value
400
- */
401
- value: _propTypes.default.string
44
+ v2: _propTypes.default.bool
402
45
  };