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

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