@carbon/ibm-products 2.0.0-rc.27 → 2.0.0-rc.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. package/css/config.css +3 -0
  2. package/css/config.css.map +1 -0
  3. package/css/index-full-carbon.css +126 -355
  4. package/css/index-full-carbon.css.map +1 -1
  5. package/css/index-full-carbon.min.css +6 -6
  6. package/css/index-full-carbon.min.css.map +1 -1
  7. package/css/index-without-carbon-released-only.css +196 -252
  8. package/css/index-without-carbon-released-only.css.map +1 -1
  9. package/css/index-without-carbon-released-only.min.css +4 -4
  10. package/css/index-without-carbon-released-only.min.css.map +1 -1
  11. package/css/index-without-carbon.css +126 -355
  12. package/css/index-without-carbon.css.map +1 -1
  13. package/css/index-without-carbon.min.css +6 -6
  14. package/css/index-without-carbon.min.css.map +1 -1
  15. package/css/index.css +126 -355
  16. package/css/index.css.map +1 -1
  17. package/css/index.min.css +6 -6
  18. package/css/index.min.css.map +1 -1
  19. package/es/components/AboutModal/AboutModal.js +44 -66
  20. package/es/components/ActionBar/ActionBar.js +13 -29
  21. package/es/components/AddSelect/AddSelectBody.js +4 -2
  22. package/es/components/AddSelect/AddSelectColumn.js +11 -5
  23. package/es/components/AddSelect/AddSelectFilter.js +5 -4
  24. package/es/components/AddSelect/AddSelectRow.js +3 -3
  25. package/es/components/AddSelect/AddSelectSort.js +2 -1
  26. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +15 -21
  27. package/es/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +7 -11
  28. package/es/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +7 -8
  29. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +6 -5
  30. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +3 -4
  31. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +17 -3
  32. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +19 -4
  33. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +8 -5
  34. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +2 -1
  35. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +19 -1
  36. package/es/components/Datagrid/index.js +1 -0
  37. package/es/components/Datagrid/useEditableCell.js +13 -0
  38. package/es/components/Datagrid/useFiltering.js +4 -2
  39. package/es/components/Datagrid/useInlineEdit.js +16 -11
  40. package/es/components/Datagrid/useOnRowClick.js +11 -1
  41. package/es/components/Datagrid/useSelectRows.js +2 -0
  42. package/es/components/{InlineEditV2/InlineEditV2.js → EditInPlace/EditInPlace.js} +92 -30
  43. package/es/components/{InlineEdit → EditInPlace}/index.js +1 -1
  44. package/es/components/ExampleComponent/ExampleDeprecatedComponent.js +24 -0
  45. package/es/components/PageHeader/PageHeader.js +36 -35
  46. package/es/components/PageHeader/PageHeaderTitle.js +18 -18
  47. package/es/components/SidePanel/SidePanel.js +25 -26
  48. package/es/components/TagSet/TagSet.js +5 -7
  49. package/es/components/Tearsheet/Tearsheet.js +5 -0
  50. package/es/components/Tearsheet/TearsheetShell.js +4 -6
  51. package/es/components/index.js +1 -2
  52. package/es/global/js/hooks/useResizeObserver.js +79 -0
  53. package/es/global/js/hooks/useWindowResize.js +6 -0
  54. package/es/global/js/hooks/useWindowScroll.js +7 -0
  55. package/es/global/js/package-settings.js +4 -6
  56. package/es/settings.js +40 -20
  57. package/lib/components/AboutModal/AboutModal.js +43 -66
  58. package/lib/components/ActionBar/ActionBar.js +13 -29
  59. package/lib/components/AddSelect/AddSelectBody.js +4 -2
  60. package/lib/components/AddSelect/AddSelectColumn.js +11 -5
  61. package/lib/components/AddSelect/AddSelectFilter.js +4 -3
  62. package/lib/components/AddSelect/AddSelectRow.js +2 -2
  63. package/lib/components/AddSelect/AddSelectSort.js +2 -1
  64. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +13 -19
  65. package/lib/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +7 -11
  66. package/lib/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +2 -1
  67. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +5 -4
  68. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +3 -4
  69. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +17 -3
  70. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +19 -4
  71. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +8 -5
  72. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +2 -1
  73. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +18 -1
  74. package/lib/components/Datagrid/index.js +8 -0
  75. package/lib/components/Datagrid/useEditableCell.js +23 -0
  76. package/lib/components/Datagrid/useFiltering.js +4 -2
  77. package/lib/components/Datagrid/useInlineEdit.js +22 -11
  78. package/lib/components/Datagrid/useOnRowClick.js +11 -1
  79. package/lib/components/Datagrid/useSelectRows.js +2 -0
  80. package/lib/components/{InlineEditV2/InlineEditV2.js → EditInPlace/EditInPlace.js} +100 -34
  81. package/lib/components/{InlineEdit → EditInPlace}/index.js +3 -3
  82. package/lib/components/ExampleComponent/ExampleDeprecatedComponent.js +38 -0
  83. package/lib/components/PageHeader/PageHeader.js +36 -35
  84. package/lib/components/PageHeader/PageHeaderTitle.js +19 -19
  85. package/lib/components/SidePanel/SidePanel.js +25 -26
  86. package/lib/components/TagSet/TagSet.js +5 -7
  87. package/lib/components/Tearsheet/Tearsheet.js +5 -0
  88. package/lib/components/Tearsheet/TearsheetShell.js +4 -6
  89. package/lib/components/index.js +7 -15
  90. package/lib/global/js/hooks/useResizeObserver.js +91 -0
  91. package/lib/global/js/hooks/useWindowScroll.js +6 -0
  92. package/lib/global/js/package-settings.js +4 -6
  93. package/lib/settings.js +43 -21
  94. package/package.json +3 -4
  95. package/scss/components/AboutModal/_about-modal.scss +34 -53
  96. package/scss/components/AboutModal/_storybook-styles.scss +10 -4
  97. package/scss/components/AddSelect/_add-select.scss +7 -3
  98. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +10 -1
  99. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +1 -1
  100. package/scss/components/Datagrid/styles/_useSelectAllToggle.scss +11 -7
  101. package/scss/components/{InlineEditV2/_inline-edit-v2.scss → EditInPlace/_edit-in-place.scss} +56 -14
  102. package/scss/components/{InlineEditV1 → EditInPlace}/_index-with-carbon.scss +1 -1
  103. package/scss/components/{InlineEditV2 → EditInPlace}/_index.scss +1 -1
  104. package/scss/components/{InlineEditV1 → EditInPlace}/_storybook-styles.scss +3 -15
  105. package/scss/components/PageHeader/_page-header.scss +1 -7
  106. package/scss/components/_index-released-only-with-carbon.scss +1 -1
  107. package/scss/components/_index-released-only.scss +1 -1
  108. package/scss/components/_index-with-carbon.scss +1 -3
  109. package/scss/components/_index.scss +1 -3
  110. package/scss/config.scss +1 -0
  111. package/es/components/InlineEdit/InlineEdit.js +0 -47
  112. package/es/components/InlineEditV1/InlineEditV1.js +0 -442
  113. package/es/components/InlineEditV1/index.js +0 -7
  114. package/es/components/InlineEditV2/index.js +0 -7
  115. package/es/components/ModifiedTabs/ModifiedTabLabelNew.js +0 -34
  116. package/es/components/ModifiedTabs/ModifiedTabLabelWithClose.js +0 -47
  117. package/es/components/ModifiedTabs/ModifiedTabs.js +0 -141
  118. package/es/components/ModifiedTabs/index.js +0 -1
  119. package/lib/components/InlineEdit/InlineEdit.js +0 -63
  120. package/lib/components/InlineEditV1/InlineEditV1.js +0 -459
  121. package/lib/components/InlineEditV1/index.js +0 -13
  122. package/lib/components/InlineEditV2/index.js +0 -13
  123. package/lib/components/ModifiedTabs/ModifiedTabLabelNew.js +0 -50
  124. package/lib/components/ModifiedTabs/ModifiedTabLabelWithClose.js +0 -63
  125. package/lib/components/ModifiedTabs/ModifiedTabs.js +0 -164
  126. package/lib/components/ModifiedTabs/index.js +0 -13
  127. package/scss/components/InlineEditV1/_carbon-imports.scss +0 -6
  128. package/scss/components/InlineEditV1/_index.scss +0 -8
  129. package/scss/components/InlineEditV1/_inline-edit-v1.scss +0 -269
  130. package/scss/components/InlineEditV2/_index-with-carbon.scss +0 -9
  131. package/scss/components/InlineEditV2/_storybook-styles.scss +0 -9
  132. package/scss/components/ModifiedTabs/_carbon-imports.scss +0 -10
  133. package/scss/components/ModifiedTabs/_index-with-carbon.scss +0 -9
  134. package/scss/components/ModifiedTabs/_index.scss +0 -8
  135. package/scss/components/ModifiedTabs/_modified-tabs.scss +0 -89
  136. package/scss/components/ModifiedTabs/_storybook-styles.scss +0 -6
  137. /package/scss/components/{InlineEditV2 → EditInPlace}/_carbon-imports.scss +0 -0
@@ -1,442 +0,0 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _typeof from "@babel/runtime/helpers/typeof";
4
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
- import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
6
- var _excluded = ["buttonTooltipAlignment", "buttonTooltipPosition", "cancelDescription", "className", "disabled", "editAlwaysVisible", "editDescription", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "size", "value"];
7
-
8
- /**
9
- * Copyright IBM Corp. 2022, 2022
10
- *
11
- * This source code is licensed under the Apache-2.0 license found in the
12
- * LICENSE file in the root directory of this source tree.
13
- */
14
- // Import portions of React that are needed.
15
- import React, { useRef, useState } from 'react'; // Other standard imports.
16
-
17
- import PropTypes from 'prop-types';
18
- import cx from 'classnames';
19
- import { getDevtoolsProps } from '../../global/js/utils/devtools';
20
- import { pkg } from '../../settings'; // Carbon and package components we use.
21
-
22
- /* TODO: @use(s) of carbon components and other package components. */
23
-
24
- import { IconButton, usePrefix } from '@carbon/react';
25
- import { Close, Edit, EditOff, Checkmark, WarningFilled } from '@carbon/react/icons'; // The block part of our conventional BEM class names (blockClass__E--M).
26
-
27
- var blockClass = "".concat(pkg.prefix, "--inline-edit");
28
- var componentName = 'InlineEditV1'; // NOTE: the component SCSS is not imported here: it is rolled up separately.
29
-
30
- var defaults = {
31
- buttonTooltipAlignment: 'center',
32
- buttonTooltipPosition: 'top',
33
- light: true,
34
- // defaults to true to reflect design
35
- size: 'md'
36
- };
37
- var buttons = ['cancel', 'edit', 'save'];
38
- /**
39
- * TODO: A description of the component.
40
- */
41
-
42
- export var InlineEditV1 = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
43
- var _cx, _refInput$current, _refInput$current$tex, _cx3;
44
-
45
- var buttonTooltipAlignment = _ref.buttonTooltipAlignment,
46
- buttonTooltipPosition = _ref.buttonTooltipPosition,
47
- cancelDescription = _ref.cancelDescription,
48
- className = _ref.className,
49
- disabled = _ref.disabled,
50
- editAlwaysVisible = _ref.editAlwaysVisible,
51
- editDescription = _ref.editDescription,
52
- id = _ref.id,
53
- invalid = _ref.invalid,
54
- invalidText = _ref.invalidText,
55
- labelText = _ref.labelText,
56
- _ref$light = _ref.light,
57
- light = _ref$light === void 0 ? defaults.light : _ref$light,
58
- onCancel = _ref.onCancel,
59
- onSave = _ref.onSave,
60
- onChange = _ref.onChange,
61
- placeholder = _ref.placeholder,
62
- saveDescription = _ref.saveDescription,
63
- _ref$size = _ref.size,
64
- size = _ref$size === void 0 ? defaults.size : _ref$size,
65
- value = _ref.value,
66
- rest = _objectWithoutProperties(_ref, _excluded);
67
-
68
- var carbonPrefix = usePrefix();
69
- var refInput = useRef({
70
- textContent: value
71
- });
72
- var localRef = useRef(null);
73
- var ref = refIn || localRef;
74
-
75
- var _useState = useState(false),
76
- _useState2 = _slicedToArray(_useState, 2),
77
- editing = _useState2[0],
78
- setEditing = _useState2[1];
79
-
80
- var _useState3 = useState(value),
81
- _useState4 = _slicedToArray(_useState3, 2),
82
- internalValue = _useState4[0],
83
- setInternalValue = _useState4[1];
84
-
85
- var showValidation = invalid; // || warn;
86
-
87
- var validationText = invalidText; // || warnText;
88
-
89
- var validationIcon = showValidation ? /*#__PURE__*/React.createElement(WarningFilled, {
90
- size: 16
91
- }) : null; // sanitize the tooltip values
92
-
93
- var alignIsObject = _typeof(buttonTooltipAlignment) === 'object';
94
- var directionIsObject = _typeof(buttonTooltipPosition) === 'object';
95
- var tipPositions = buttons.reduce(function (acc, button) {
96
- var _ref2, _ref3;
97
-
98
- var tooltipAlignment = (_ref2 = alignIsObject ? buttonTooltipAlignment[button] : buttonTooltipAlignment) !== null && _ref2 !== void 0 ? _ref2 : defaults.buttonTooltipAlignment;
99
- var tooltipPosition = (_ref3 = directionIsObject ? buttonTooltipPosition[button] : buttonTooltipPosition) !== null && _ref3 !== void 0 ? _ref3 : defaults.buttonTooltipPosition;
100
- acc[button] = {
101
- tooltipAlignment: tooltipAlignment,
102
- tooltipPosition: tooltipPosition
103
- };
104
- return acc;
105
- }, {});
106
-
107
- var doSetEditing = function doSetEditing(value) {
108
- if (value === false) {
109
- // move scroll to start
110
- refInput.current.scrollLeft = 0;
111
- }
112
-
113
- setEditing(!disabled && value);
114
- };
115
-
116
- var handleEdit = function handleEdit(ev) {
117
- /* istanbul ignore else */
118
- if (!disabled) {
119
- var rightOfInput = ev.currentTarget.classList.contains("".concat(blockClass, "__edit")) || ev.target.classList.contains("".concat(blockClass, "__after-input-elements"));
120
- var leftOfInput = ev.currentTarget = ev.target.classList.contains("".concat(blockClass)); // clicking on the content editable element should not set either of these to true
121
-
122
- if (rightOfInput || leftOfInput) {
123
- doSetEditing(true);
124
- setTimeout(function () {
125
- refInput.current.focus(); // select all the content
126
-
127
- document.getSelection().selectAllChildren(refInput.current);
128
-
129
- if (rightOfInput) {
130
- document.getSelection().collapseToEnd();
131
- refInput.current.scrollLeft = 9999; // never going to get there but ensures at end.
132
- } else {
133
- document.getSelection().collapseToStart();
134
- refInput.current.scrollLeft = 0; // scroll to start
135
- }
136
- }, 0);
137
- }
138
- }
139
- };
140
-
141
- var handleFocus = function handleFocus(ev) {
142
- ev.preventDefault();
143
-
144
- if (!editing && ev.target.classList.contains("".concat(blockClass, "__input"))) {
145
- doSetEditing(true);
146
- }
147
- };
148
-
149
- var handleSave = function handleSave() {
150
- doSetEditing(false);
151
- document.getSelection().removeAllRanges();
152
-
153
- if (onSave) {
154
- onSave(refInput.current.textContent);
155
- }
156
- };
157
-
158
- var handleInput = function handleInput() {
159
- setInternalValue(refInput.current.textContent);
160
-
161
- if (onChange) {
162
- onChange(refInput.current.textContent);
163
- }
164
- }; // pasting into contentEditable not supported by userEvent
165
-
166
-
167
- var handlePaste =
168
- /* istanbul ignore next */
169
- function handlePaste(ev) {
170
- ev.preventDefault(); // Get clipboard as plain text
171
-
172
- var text = (ev.clipboardData || window.clipboardData).getData('text/plain'); // remove \n
173
-
174
- var sanitizedText = text.replaceAll(/\n/g, '') // remove carriage returns
175
- .replaceAll(/\t/g, ' '); // replace tab with two spaces
176
-
177
- if (document.queryCommandSupported('insertText')) {
178
- document.execCommand('insertText', false, sanitizedText);
179
- } else {
180
- // Insert text at the current position of caret
181
- var range = document.getSelection().getRangeAt(0);
182
- range.deleteContents();
183
- var textNode = document.createTextNode(sanitizedText);
184
- range.insertNode(textNode); // move selection end of textNode
185
-
186
- range.selectNodeContents(textNode);
187
- range.collapse(false); // remove existing range
188
-
189
- var selection = document.getSelection();
190
- selection.removeAllRanges(); // set the new range
191
-
192
- selection.addRange(range);
193
- }
194
- };
195
-
196
- var handleCancel = function handleCancel() {
197
- refInput.current.textContent = value;
198
- handleInput(value);
199
- doSetEditing(false);
200
- document.getSelection().removeAllRanges();
201
-
202
- if (onCancel) {
203
- onCancel(value);
204
- }
205
- };
206
-
207
- var handleBlur = function handleBlur(ev) {
208
- if (!ref.current.contains(ev.relatedTarget)) {
209
- handleSave();
210
- }
211
- };
212
-
213
- var handleKeyDown = function handleKeyDown(ev) {
214
- switch (ev.key) {
215
- case 'Enter':
216
- ev.preventDefault();
217
- refInput.current.blur(); // will cause save
218
-
219
- break;
220
-
221
- case 'Escape':
222
- handleCancel();
223
- break;
224
- }
225
- };
226
- /*
227
- The HTML is structured as follows:
228
- <container>
229
- <!-- margin left of input to match Carbon -->
230
- <content-editable>
231
- <-- margin right of input space for after-input-elements -->
232
- <after-input-elements>
233
- </container>
234
- NOTE:
235
- - An input is not used as this would not permit a heading tag e.g. <h2>.
236
- - Some padding is added to the left 16px standard for a Carbon text input
237
- - The after-input-elements are position absolute with a margin to on the input to reserve space. Using inline-flex
238
- - does not measure space properly for the input otherwise.
239
- - The content editable is not expected to change size when buttons are added, to ensure the text does not move space
240
- is reserved up front for buttons and invalid icon. Mostly this is only noticed if the width of the component is not 100%.
241
- which can be shown by setting inlineEditFullWidth to false in storybook.
242
- In making content-editable behave like an input of type text we have to account for.
243
- - Enforcing a single line
244
- - Pasting of non-text e.g. html or text with carriage returns
245
- - The padding and border not hiding typed in text.
246
- - Placing the cursor at the start or end depending on area clicked (before for left-padding)
247
- */
248
-
249
-
250
- var toolbarAnimation = true;
251
- return (
252
- /*#__PURE__*/
253
- // eslint-disable-next-line
254
- React.createElement("div", {
255
- className: cx(blockClass, // Apply the block class to the main HTML element
256
- className, // Apply any supplied class names to the main HTML element.
257
- "".concat(blockClass, "--").concat(size), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "--disabled"), disabled), _defineProperty(_cx, "".concat(blockClass, "--editing"), editing), _defineProperty(_cx, "".concat(blockClass, "--invalid"), invalid), _defineProperty(_cx, "".concat(blockClass, "--light"), light), _defineProperty(_cx, "".concat(blockClass, "--overflows"), refInput.current && refInput.current.scrollWidth > refInput.current.offsetWidth), _cx)),
258
- onClick: handleEdit // disabled eslint for click handler
259
- ,
260
- onBlur: handleBlur,
261
- ref: ref
262
- }, /*#__PURE__*/React.createElement("div", _extends({}, rest, getDevtoolsProps(componentName), {
263
- id: id,
264
- size: size,
265
- className: cx("".concat(blockClass, "__input"), _defineProperty({}, "".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)),
266
- contentEditable: true,
267
- "aria-label": labelText,
268
- role: "textbox",
269
- tabIndex: disabled ? -1 : 0,
270
- onFocus: handleFocus,
271
- onInput: handleInput,
272
- onKeyDown: handleKeyDown,
273
- onPaste: handlePaste,
274
- suppressContentEditableWarning: true,
275
- ref: refInput,
276
- "data-placeholder": placeholder
277
- }), value), /*#__PURE__*/React.createElement("div", {
278
- className: cx("".concat(blockClass, "__after-input-elements")) // tabindex -1 fixes blur target test when clicking on after-input-elements background
279
- ,
280
- tabIndex: "-1"
281
- }, /*#__PURE__*/React.createElement("div", {
282
- className: "".concat(blockClass, "__ellipsis"),
283
- "aria-hidden": !editing
284
- }, "\u2026"), /*#__PURE__*/React.createElement("div", {
285
- className: cx("".concat(blockClass, "__toolbar"), (_cx3 = {}, _defineProperty(_cx3, "".concat(blockClass, "__toolbar--animation"), toolbarAnimation), _defineProperty(_cx3, "".concat(blockClass, "__toolbar--saveable"), refInput.current && value !== internalValue), _cx3))
286
- }, showValidation && /*#__PURE__*/React.createElement("div", {
287
- className: "".concat(blockClass, "__validation-icon")
288
- }, validationIcon), editing ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(IconButton, _extends({
289
- className: "".concat(blockClass, "__cancel"),
290
- kind: "ghost",
291
- label: cancelDescription,
292
- onClick: handleCancel,
293
- size: size
294
- }, tipPositions.cancel), /*#__PURE__*/React.createElement(Close, {
295
- size: 16
296
- })), /*#__PURE__*/React.createElement(IconButton, _extends({
297
- className: "".concat(blockClass, "__save"),
298
- kind: "ghost",
299
- label: saveDescription,
300
- onClick: handleSave,
301
- disabled: value === internalValue,
302
- size: size
303
- }, tipPositions.save), /*#__PURE__*/React.createElement(Checkmark, {
304
- size: 16
305
- }))) : /*#__PURE__*/React.createElement(IconButton, _extends({
306
- className: cx("".concat(blockClass, "__edit"), _defineProperty({}, "".concat(blockClass, "__edit--always-visible"), editAlwaysVisible)),
307
- kind: "ghost",
308
- label: editDescription,
309
- onClick: handleEdit,
310
- disabled: disabled,
311
- size: size
312
- }, tipPositions.edit), disabled ? /*#__PURE__*/React.createElement(EditOff, {
313
- size: 16
314
- }) : /*#__PURE__*/React.createElement(Edit, {
315
- size: 16
316
- })))), /*#__PURE__*/React.createElement("div", {
317
- className: cx("".concat(blockClass, "__disabled-cover"))
318
- }), showValidation && validationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
319
- className: "".concat(blockClass, "__validation-text ").concat(carbonPrefix, "--form-requirement")
320
- }, validationText))
321
- );
322
- }); // Return a placeholder if not released and not enabled by feature flag
323
-
324
- InlineEditV1 = pkg.checkComponentEnabled(InlineEditV1, componentName); // The display name of the component, used by React. Note that displayName
325
- // is used in preference to relying on function.name.
326
-
327
- InlineEditV1.displayName = componentName; // The types and DocGen commentary for the component props,
328
- // in alphabetical order (for consistency).
329
- // See https://www.npmjs.com/package/prop-types#usage.
330
-
331
- InlineEditV1.propTypes = {
332
- /**
333
- * buttonTooltipAlignment from the standard tooltip. Default center.
334
- *
335
- * Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
336
- */
337
- buttonTooltipAlignment: PropTypes.oneOfType([PropTypes.oneOf(['start', 'center', 'end']), PropTypes.shape({
338
- cancel: PropTypes.oneOf(['start', 'center', 'end']),
339
- edit: PropTypes.oneOf(['start', 'center', 'end']),
340
- save: PropTypes.oneOf(['start', 'center', 'end'])
341
- })]),
342
-
343
- /**
344
- * buttonTooltipPosition from the standard tooltip
345
- *
346
- * Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
347
- */
348
- buttonTooltipPosition: PropTypes.oneOfType([PropTypes.oneOf(['top', 'right', 'bottom', 'left']), PropTypes.shape({
349
- cancel: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
350
- edit: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
351
- save: PropTypes.oneOf(['top', 'right', 'bottom', 'left'])
352
- })]),
353
-
354
- /**
355
- * label for cancel button
356
- */
357
- cancelDescription: PropTypes.string.isRequired,
358
-
359
- /**
360
- * Provide an optional class to be applied to the containing node.
361
- */
362
- className: PropTypes.string,
363
-
364
- /**
365
- * disable edit
366
- */
367
- disabled: PropTypes.bool,
368
-
369
- /**
370
- * By default the edit icon is shown on hover only.
371
- */
372
- editAlwaysVisible: PropTypes.bool,
373
-
374
- /**
375
- * Label for the edit button
376
- */
377
- editDescription: PropTypes.string.isRequired,
378
-
379
- /**
380
- * ID for inline edit
381
- */
382
- id: PropTypes.string,
383
-
384
- /**
385
- * set invalid state for input
386
- */
387
- invalid: PropTypes.bool,
388
-
389
- /**
390
- * text shown when invalid is true
391
- */
392
- invalidText: PropTypes.string,
393
-
394
- /**
395
- * label for text input
396
- */
397
- labelText: PropTypes.string,
398
-
399
- /**
400
- * change background to light version (mimic React TextInput)
401
- */
402
- light: PropTypes.bool,
403
-
404
- /**
405
- * method called on cancel event
406
- */
407
- onCancel: PropTypes.func,
408
-
409
- /**
410
- * method called on input event (it's a React thing onChange behaves like on input).
411
- *
412
- * NOTE: caller to handle invalid states and associated text
413
- */
414
- onChange: PropTypes.func,
415
-
416
- /**
417
- * method called on change event
418
- *
419
- * NOTE: caller to handle invalid states and associated text
420
- */
421
- onSave: PropTypes.func,
422
-
423
- /**
424
- * placeholder for text input
425
- */
426
- placeholder: PropTypes.string,
427
-
428
- /**
429
- * label for save button
430
- */
431
- saveDescription: PropTypes.string.isRequired,
432
-
433
- /**
434
- * vertical size of control
435
- */
436
- size: PropTypes.oneOf(['sm', 'md', 'lg']),
437
-
438
- /**
439
- * initial/unedited value
440
- */
441
- value: PropTypes.string
442
- };
@@ -1,7 +0,0 @@
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 { InlineEditV1 } from './InlineEditV1';
@@ -1,7 +0,0 @@
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 { InlineEditV2 } from './InlineEditV2';
@@ -1,34 +0,0 @@
1
- //
2
- // Copyright IBM Corp. 2020, 2020
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
- import React from 'react';
8
- import PropTypes from 'prop-types';
9
- import { Add } from '@carbon/react/icons';
10
- import { pkg } from '../../settings';
11
- var blockClass = "".concat(pkg.prefix, "--modified-tabs");
12
- export var ModifiedTabLabelNew = function ModifiedTabLabelNew(_ref) {
13
- var label = _ref.label;
14
- return /*#__PURE__*/React.createElement("span", {
15
- className: "".concat(blockClass, "__tab-new")
16
- }, /*#__PURE__*/React.createElement("span", {
17
- className: "".concat(blockClass, "__tab-new__label")
18
- }, label), /*#__PURE__*/React.createElement("span", {
19
- className: "".concat(blockClass, "__tab-new-img")
20
- }, /*#__PURE__*/React.createElement(Add, {
21
- size: 20
22
- })));
23
- };
24
- ModifiedTabLabelNew.propTypes = {
25
- /**
26
- * Label content of the tab
27
- */
28
- label: PropTypes.string,
29
-
30
- /**
31
- * Optional onClick handler
32
- */
33
- onClick: PropTypes.func
34
- };
@@ -1,47 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { Close, CloseFilled } from '@carbon/react/icons';
4
- import { pkg } from '../../settings';
5
- var blockClass = "".concat(pkg.prefix, "--modified-tabs");
6
- export var ModifiedTabLabelWithClose = function ModifiedTabLabelWithClose(_ref) {
7
- var unsavedContent = _ref.unsavedContent,
8
- label = _ref.label,
9
- onClose = _ref.onClose;
10
-
11
- var handleClose = function handleClose() {
12
- if (onClose) {
13
- onClose();
14
- }
15
- };
16
-
17
- return /*#__PURE__*/React.createElement("span", {
18
- className: "".concat(blockClass, "__tab")
19
- }, /*#__PURE__*/React.createElement("span", {
20
- className: "".concat(blockClass, "__tab-label")
21
- }, label), /*#__PURE__*/React.createElement("button", {
22
- title: "Close button",
23
- onClick: handleClose,
24
- className: "".concat(blockClass, "__tab-close"),
25
- type: "button"
26
- }, unsavedContent ? /*#__PURE__*/React.createElement(CloseFilled, {
27
- size: 16
28
- }) : /*#__PURE__*/React.createElement(Close, {
29
- size: 16
30
- })));
31
- };
32
- ModifiedTabLabelWithClose.propTypes = {
33
- /**
34
- * Label content of the tab
35
- */
36
- label: PropTypes.string.isRequired,
37
-
38
- /**
39
- * Optional onClose handler
40
- */
41
- onClose: PropTypes.func,
42
-
43
- /**
44
- * unsavedContent indicates tab contents have not been saved
45
- */
46
- unsavedContent: PropTypes.bool
47
- };
@@ -1,141 +0,0 @@
1
- //
2
- // Copyright IBM Corp. 2020, 2020
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
- import React, { useRef, forwardRef } from 'react';
8
- import PropTypes from 'prop-types';
9
- import cx from 'classnames';
10
- import { Tabs, Tab, TabList, TabPanels, TabPanel } from '@carbon/react';
11
- import { ModifiedTabLabelWithClose } from './ModifiedTabLabelWithClose';
12
- import { ModifiedTabLabelNew } from './ModifiedTabLabelNew';
13
- import { pkg } from '../../settings';
14
- var blockClass = "".concat(pkg.prefix, "--modified-tabs");
15
- var componentName = 'ModifiedTabs'; // Default values for props
16
-
17
- var defaults = {
18
- newTabLabel: 'New tab',
19
- newTabContent: 'Your new tab will be here soon',
20
- onNewTab: undefined,
21
- onCloseTab: undefined,
22
- tabs: []
23
- };
24
- export var ModifiedTabs = /*#__PURE__*/forwardRef(function (_ref, ref) {
25
- var className = _ref.className,
26
- _ref$tabs = _ref.tabs,
27
- tabs = _ref$tabs === void 0 ? defaults.tabs : _ref$tabs,
28
- _ref$newTabLabel = _ref.newTabLabel,
29
- newTabLabel = _ref$newTabLabel === void 0 ? defaults.newTabLabel : _ref$newTabLabel,
30
- _ref$newTabContent = _ref.newTabContent,
31
- newTabContent = _ref$newTabContent === void 0 ? defaults.newTabContent : _ref$newTabContent,
32
- _ref$onNewTab = _ref.onNewTab,
33
- onNewTab = _ref$onNewTab === void 0 ? defaults.onNewTab : _ref$onNewTab,
34
- _ref$onCloseTab = _ref.onCloseTab,
35
- onCloseTab = _ref$onCloseTab === void 0 ? defaults.onCloseTab : _ref$onCloseTab,
36
- tabListAriaLabel = _ref.tabListAriaLabel;
37
- var tabsRef = useRef();
38
- var localRef = ref || tabsRef;
39
-
40
- var handleNewTab = function handleNewTab() {
41
- if (onNewTab) {
42
- onNewTab();
43
- setTimeout(function () {
44
- // set focus to the new tab
45
- var addNewTabButton = localRef.current.querySelector(".".concat(blockClass, "__tab-new"));
46
- var tab = addNewTabButton === null || addNewTabButton === void 0 ? void 0 : addNewTabButton.previousSibling;
47
- tab === null || tab === void 0 ? void 0 : tab.focus();
48
- });
49
- }
50
- };
51
-
52
- var handleClose = function handleClose(id) {
53
- if (onCloseTab) {
54
- onCloseTab(id);
55
- }
56
- };
57
-
58
- return /*#__PURE__*/React.createElement("div", {
59
- className: cx(blockClass, className),
60
- ref: localRef
61
- }, /*#__PURE__*/React.createElement(Tabs, {
62
- className: "modified-tabs"
63
- }, /*#__PURE__*/React.createElement(TabList, {
64
- "aria-label": tabListAriaLabel
65
- }, tabs.map(function (tab) {
66
- return /*#__PURE__*/React.createElement(Tab, {
67
- key: tab.id
68
- }, /*#__PURE__*/React.createElement(ModifiedTabLabelWithClose, {
69
- label: tab.label,
70
- onClose: function onClose() {
71
- return handleClose(tab.id);
72
- },
73
- unsavedContent: tab.unsavedContent
74
- }));
75
- }), /*#__PURE__*/React.createElement(Tab, {
76
- id: "modified-tabs__tab-new",
77
- onClick: handleNewTab,
78
- onKeyUp: function onKeyUp(ev) {
79
- return ev.keyCode === 32 && handleNewTab();
80
- },
81
- role: "button",
82
- className: "".concat(blockClass, "__tab-new")
83
- }, /*#__PURE__*/React.createElement(ModifiedTabLabelNew, {
84
- label: newTabLabel
85
- }))), /*#__PURE__*/React.createElement(TabPanels, null, tabs.map(function (tab) {
86
- var _tab$content;
87
-
88
- return /*#__PURE__*/React.createElement(TabPanel, {
89
- key: tab.id,
90
- id: tab.id
91
- }, /*#__PURE__*/React.createElement("div", {
92
- className: "".concat(blockClass, "__tab-content")
93
- }, (_tab$content = tab.content) === null || _tab$content === void 0 ? void 0 : _tab$content.call(tab)));
94
- }), /*#__PURE__*/React.createElement(TabPanel, null, /*#__PURE__*/React.createElement("div", {
95
- className: "".concat(blockClass, "__tab-content")
96
- }, newTabContent)))));
97
- }); // Return a placeholder if not released and not enabled by feature flag
98
-
99
- ModifiedTabs = pkg.checkComponentEnabled(ModifiedTabs, componentName);
100
- ModifiedTabs.propTypes = {
101
- /**
102
- * Provide an optional class to be applied to the containing node.
103
- */
104
- className: PropTypes.string,
105
-
106
- /**
107
- * New tab content
108
- */
109
- newTabContent: PropTypes.object,
110
-
111
- /**
112
- * New tab label
113
- */
114
- newTabLabel: PropTypes.string,
115
-
116
- /**
117
- * Optional onCloseTab handler
118
- */
119
- onCloseTab: PropTypes.func,
120
-
121
- /**
122
- * New tab content
123
- */
124
- onNewTab: PropTypes.func,
125
-
126
- /**
127
- * Tab list aria label, passed to Carbon TabList
128
- */
129
- tabListAriaLabel: PropTypes.string.isRequired,
130
-
131
- /**
132
- * Tabs array containing tab object { id, label, content }
133
- */
134
- tabs: PropTypes.arrayOf(PropTypes.shape({
135
- id: PropTypes.string,
136
- label: PropTypes.node,
137
- content: PropTypes.func,
138
- unsavedContent: PropTypes.bool
139
- })).isRequired
140
- };
141
- ModifiedTabs.displayName = componentName;
@@ -1 +0,0 @@
1
- export { ModifiedTabs } from './ModifiedTabs';