@carbon/ibm-products 2.0.0-rc.6 → 2.0.0-rc.8

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 (65) hide show
  1. package/README.md +2 -2
  2. package/css/index-full-carbon.css +96 -12
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +3 -3
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon-released-only.css +6 -9
  7. package/css/index-without-carbon-released-only.css.map +1 -1
  8. package/css/index-without-carbon-released-only.min.css +2 -2
  9. package/css/index-without-carbon-released-only.min.css.map +1 -1
  10. package/css/index-without-carbon.css +96 -12
  11. package/css/index-without-carbon.css.map +1 -1
  12. package/css/index-without-carbon.min.css +3 -3
  13. package/css/index-without-carbon.min.css.map +1 -1
  14. package/css/index.css +89 -9
  15. package/css/index.css.map +1 -1
  16. package/css/index.min.css +3 -3
  17. package/css/index.min.css.map +1 -1
  18. package/es/components/ActionSet/ActionSet.js +7 -3
  19. package/es/components/AddSelect/add-select-utils.js +2 -2
  20. package/es/components/DataSpreadsheet/DataSpreadsheet.js +2 -1
  21. package/es/components/DataSpreadsheet/utils/handleCellDeletion.js +10 -1
  22. package/es/components/Datagrid/useNestedRowExpander.js +7 -2
  23. package/es/components/InlineEdit/InlineEdit.js +27 -427
  24. package/es/components/InlineEditV1/InlineEditV1.js +447 -0
  25. package/es/components/InlineEditV1/index.js +7 -0
  26. package/es/components/InlineEditV2/InlineEditV2.js +289 -0
  27. package/es/components/InlineEditV2/index.js +7 -0
  28. package/es/components/OptionsTile/OptionsTile.js +28 -12
  29. package/es/components/PageHeader/PageHeaderTitle.js +2 -4
  30. package/es/global/js/hooks/index.js +2 -1
  31. package/es/global/js/hooks/useControllableState.js +83 -0
  32. package/es/global/js/package-settings.js +3 -1
  33. package/lib/components/ActionSet/ActionSet.js +7 -3
  34. package/lib/components/AddSelect/add-select-utils.js +2 -2
  35. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +2 -1
  36. package/lib/components/DataSpreadsheet/utils/handleCellDeletion.js +10 -1
  37. package/lib/components/Datagrid/useNestedRowExpander.js +7 -1
  38. package/lib/components/InlineEdit/InlineEdit.js +27 -428
  39. package/lib/components/InlineEditV1/InlineEditV1.js +464 -0
  40. package/lib/components/InlineEditV1/index.js +13 -0
  41. package/lib/components/InlineEditV2/InlineEditV2.js +309 -0
  42. package/lib/components/InlineEditV2/index.js +13 -0
  43. package/lib/components/OptionsTile/OptionsTile.js +28 -11
  44. package/lib/components/PageHeader/PageHeaderTitle.js +2 -4
  45. package/lib/global/js/hooks/index.js +9 -1
  46. package/lib/global/js/hooks/useControllableState.js +94 -0
  47. package/lib/global/js/package-settings.js +3 -1
  48. package/package.json +2 -2
  49. package/scss/components/ActionSet/_action-set.scss +9 -4
  50. package/scss/components/Datagrid/styles/_useNestedRows.scss +17 -0
  51. package/scss/components/{InlineEdit → InlineEditV1}/_carbon-imports.scss +0 -0
  52. package/scss/components/{InlineEdit → InlineEditV1}/_index-with-carbon.scss +1 -1
  53. package/scss/components/{InlineEdit → InlineEditV1}/_index.scss +1 -1
  54. package/scss/components/{InlineEdit/_inline-edit.scss → InlineEditV1/_inline-edit-v1.scss} +0 -0
  55. package/scss/components/{InlineEdit → InlineEditV1}/_storybook-styles.scss +0 -0
  56. package/scss/components/InlineEditV2/_carbon-imports.scss +9 -0
  57. package/scss/components/InlineEditV2/_index-with-carbon.scss +9 -0
  58. package/scss/components/InlineEditV2/_index.scss +10 -0
  59. package/scss/components/InlineEditV2/_inline-edit-v2.scss +83 -0
  60. package/scss/components/InlineEditV2/_storybook-styles.scss +9 -0
  61. package/scss/components/PageHeader/_page-header.scss +0 -4
  62. package/scss/components/_index-released-only-with-carbon.scss +1 -1
  63. package/scss/components/_index-released-only.scss +1 -1
  64. package/scss/components/_index-with-carbon.scss +2 -1
  65. package/scss/components/_index.scss +2 -1
@@ -1,9 +1,10 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _typeof from "@babel/runtime/helpers/typeof";
4
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
2
  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"];
3
+ var _excluded = ["v1"];
4
+
5
+ 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; }
6
+
7
+ 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; }
7
8
 
8
9
  /**
9
10
  * Copyright IBM Corp. 2022, 2022
@@ -11,437 +12,36 @@ var _excluded = ["buttonTooltipAlignment", "buttonTooltipPosition", "cancelDescr
11
12
  * This source code is licensed under the Apache-2.0 license found in the
12
13
  * LICENSE file in the root directory of this source tree.
13
14
  */
14
- // Import portions of React that are needed.
15
- import React, { useRef, useState } from 'react'; // Other standard imports.
16
-
15
+ import React, { forwardRef } from 'react';
17
16
  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 { Button, 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 = 'InlineEdit'; // 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'];
17
+ import { pkg } from '../../settings';
18
+ import { InlineEditV1 } from '../InlineEditV1';
19
+ import { InlineEditV2 } from '../InlineEditV2';
38
20
  /**
39
- * TODO: A description of the component.
21
+ * this is a wrapper component that will allow us to support v1 and v2 versions of InlineEdit
22
+ * in the V11 branch, v2 is the set by default.
23
+ * if the user passes in the v1 feature flag the v1 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
27
 
42
- export var InlineEdit = /*#__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,
28
+ var componentName = 'InlineEdit';
29
+ export var InlineEdit = /*#__PURE__*/forwardRef(function (_ref, ref) {
30
+ var v1 = _ref.v1,
66
31
  rest = _objectWithoutProperties(_ref, _excluded);
67
32
 
68
- var carbonPrefix = usePrefix();
69
- var refInput = useRef({
70
- textContent: value
33
+ var props = _objectSpread(_objectSpread({}, rest), {}, {
34
+ ref: ref
71
35
  });
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
36
 
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(Button, _extends({
289
- className: "".concat(blockClass, "__cancel"),
290
- kind: "ghost",
291
- hasIconOnly: true,
292
- iconDescription: cancelDescription,
293
- onClick: handleCancel,
294
- renderIcon: function renderIcon(props) {
295
- return /*#__PURE__*/React.createElement(Close, _extends({
296
- size: 16
297
- }, props));
298
- }
299
- }, tipPositions.cancel)), /*#__PURE__*/React.createElement(Button, _extends({
300
- className: "".concat(blockClass, "__save"),
301
- kind: "ghost",
302
- hasIconOnly: true,
303
- iconDescription: saveDescription,
304
- onClick: handleSave,
305
- renderIcon: function renderIcon(props) {
306
- return /*#__PURE__*/React.createElement(Checkmark, _extends({
307
- size: 16
308
- }, props));
309
- },
310
- disabled: value === internalValue
311
- }, tipPositions.save))) : /*#__PURE__*/React.createElement(IconButton, _extends({
312
- className: cx("".concat(blockClass, "__edit"), _defineProperty({}, "".concat(blockClass, "__edit--always-visible"), editAlwaysVisible)),
313
- kind: "ghost",
314
- label: editDescription,
315
- onClick: handleEdit,
316
- disabled: disabled
317
- }, tipPositions.edit), disabled ? /*#__PURE__*/React.createElement(EditOff, {
318
- size: 16
319
- }) : /*#__PURE__*/React.createElement(Edit, {
320
- size: 16
321
- })))), /*#__PURE__*/React.createElement("div", {
322
- className: cx("".concat(blockClass, "__disabled-cover"))
323
- }), showValidation && validationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
324
- className: "".concat(blockClass, "__validation-text ").concat(carbonPrefix, "--form-requirement")
325
- }, validationText))
326
- );
327
- }); // Return a placeholder if not released and not enabled by feature flag
328
-
329
- InlineEdit = pkg.checkComponentEnabled(InlineEdit, componentName); // The display name of the component, used by React. Note that displayName
330
- // is used in preference to relying on function.name.
331
-
332
- InlineEdit.displayName = componentName; // The types and DocGen commentary for the component props,
333
- // in alphabetical order (for consistency).
334
- // See https://www.npmjs.com/package/prop-types#usage.
37
+ if (v1 === true) {
38
+ return /*#__PURE__*/React.createElement(InlineEditV1, props);
39
+ }
335
40
 
41
+ return /*#__PURE__*/React.createElement(InlineEditV2, props);
42
+ });
43
+ InlineEdit = pkg.checkComponentEnabled(InlineEdit, componentName);
44
+ InlineEdit.displayName = componentName;
336
45
  InlineEdit.propTypes = {
337
- /**
338
- * buttonTooltipAlignment from the standard tooltip. Default center.
339
- *
340
- * Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
341
- */
342
- buttonTooltipAlignment: PropTypes.oneOfType([PropTypes.oneOf(['start', 'center', 'end']), PropTypes.shape({
343
- cancel: PropTypes.oneOf(['start', 'center', 'end']),
344
- edit: PropTypes.oneOf(['start', 'center', 'end']),
345
- save: PropTypes.oneOf(['start', 'center', 'end'])
346
- })]),
347
-
348
- /**
349
- * buttonTooltipPosition from the standard tooltip
350
- *
351
- * Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
352
- */
353
- buttonTooltipPosition: PropTypes.oneOfType([PropTypes.oneOf(['top', 'right', 'bottom', 'left']), PropTypes.shape({
354
- cancel: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
355
- edit: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
356
- save: PropTypes.oneOf(['top', 'right', 'bottom', 'left'])
357
- })]),
358
-
359
- /**
360
- * label for cancel button
361
- */
362
- cancelDescription: PropTypes.string.isRequired,
363
-
364
- /**
365
- * Provide an optional class to be applied to the containing node.
366
- */
367
- className: PropTypes.string,
368
-
369
- /**
370
- * disable edit
371
- */
372
- disabled: PropTypes.bool,
373
-
374
- /**
375
- * By default the edit icon is shown on hover only.
376
- */
377
- editAlwaysVisible: PropTypes.bool,
378
-
379
- /**
380
- * Label for the edit button
381
- */
382
- editDescription: PropTypes.string.isRequired,
383
-
384
- /**
385
- * ID for inline edit
386
- */
387
- id: PropTypes.string,
388
-
389
- /**
390
- * set invalid state for input
391
- */
392
- invalid: PropTypes.bool,
393
-
394
- /**
395
- * text shown when invalid is true
396
- */
397
- invalidText: PropTypes.string,
398
-
399
- /**
400
- * label for text input
401
- */
402
- labelText: PropTypes.string,
403
-
404
- /**
405
- * change background to light version (mimic React TextInput)
406
- */
407
- light: PropTypes.bool,
408
-
409
- /**
410
- * method called on cancel event
411
- */
412
- onCancel: PropTypes.func,
413
-
414
- /**
415
- * method called on input event (it's a React thing onChange behaves like on input).
416
- *
417
- * NOTE: caller to handle invalid states and associated text
418
- */
419
- onChange: PropTypes.func,
420
-
421
- /**
422
- * method called on change event
423
- *
424
- * NOTE: caller to handle invalid states and associated text
425
- */
426
- onSave: PropTypes.func,
427
-
428
- /**
429
- * placeholder for text input
430
- */
431
- placeholder: PropTypes.string,
432
-
433
- /**
434
- * label for save button
435
- */
436
- saveDescription: PropTypes.string.isRequired,
437
-
438
- /**
439
- * vertical size of control
440
- */
441
- size: PropTypes.oneOf(['sm', 'md', 'lg']),
442
-
443
- /**
444
- * initial/unedited value
445
- */
446
- value: PropTypes.string
46
+ v1: PropTypes.bool
447
47
  };