@ntbjs/react-components 1.2.0-rc.99 → 1.3.0-rc.1

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.
@@ -24,7 +24,7 @@ require('./CompactStarRating-405e4508.js');
24
24
  require('./CompactTextInput-0d53acdf.js');
25
25
  require('./MultiSelect-efd60232.js');
26
26
  require('./Radio-32d0513a.js');
27
- require('./TextArea-a5579cc8.js');
27
+ require('./TextArea-1da16eb4.js');
28
28
  require('./TextInput-0d109708.js');
29
29
  require('./Switch-4a41585f.js');
30
30
  var ContextMenu = require('./ContextMenu-4ec3d9f3.js');
@@ -5,7 +5,7 @@ var lodash = require('lodash');
5
5
  var React = require('react');
6
6
  var warningCircle = require('./warning-circle-24522402.js');
7
7
  var CompactAutocompleteSelect = require('./CompactAutocompleteSelect-b68618b3.js');
8
- var TextArea = require('./TextArea-a5579cc8.js');
8
+ var TextArea = require('./TextArea-1da16eb4.js');
9
9
  var styled = require('styled-components');
10
10
 
11
11
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -3,6 +3,7 @@
3
3
  var defaultTheme = require('./defaultTheme-ea44e34a.js');
4
4
  var React = require('react');
5
5
  var useMergedRefs = require('./useMergedRefs-b6d2f8fc.js');
6
+ var lodash = require('lodash');
6
7
  var nanoid = require('nanoid');
7
8
  require('./Alert-13b75102.js');
8
9
  require('./Badge-aec841c8.js');
@@ -33,8 +34,8 @@ var InputIconContainer = styled__default['default'].div.attrs(defaultTheme.apply
33
34
  }, function (props) {
34
35
  return props.disabled && styled.css(_templateObject6 || (_templateObject6 = defaultTheme._taggedTemplateLiteral(["\n display: none;\n "])));
35
36
  });
36
- var TextInputField = styled__default['default'].textarea.attrs(defaultTheme.applyDefaultTheme)(_templateObject7 || (_templateObject7 = defaultTheme._taggedTemplateLiteral(["\n width: 100%;\n font-family: inherit;\n font-size: 0.875rem;\n border-radius: 2px;\n padding: 5px 10px;\n resize: vertical;\n z-index: 0;\n border-radius: 3px;\n box-sizing: border-box;\n appearance: none;\n border: 1px solid;\n", "\n ", "\n transition: height 550ms ease-in-out; border-color 350ms;\n\n ", "\n\n ", "\n\n ", "\n\n ", "\n \n ", "\n \n ", "\n\n ", "\n \n ", "\n\n ", "\n\n ", " \n\n ", " \n \n\n ", " \n\n \n \n ", "\n\n ", " \n\n ", "\n \n \n ", "\n\n ", "\n\n\n ", ";\n\n ", ";\n\n ", "\n\n ", "\n\n ", "\n\n ", "\n\n\n\n &&:hover:not(:focus) {\n ", ";\n\n ", ";\n\n ", ";\n\n \n ", "; \n\n\n ", ";\n transition: background 350ms;\n & + ", " {\n opacity: 1;\n ", ";\n transition: opacity 350ms;\n }\n }\n\n &::placeholder {\n ", "\n\n ", "\n }\n\n &&:focus {\n outline: none;\n ", "\n\n ", ";\n\n \n ", " \n \n ", "\n\n }\n\n &&:not(:hover):not(:focus) {\n ", ";\n ", ";\n\n ", "\n\n ", ";\n\n \n }\n"])), function (props) {
37
- return !props.expanded && props.showMore && styled.css(_templateObject8 || (_templateObject8 = defaultTheme._taggedTemplateLiteral(["\n -webkit-mask-image: linear-gradient(0deg, transparent 5px, white 45px);\n "])));
37
+ var TextInputField = styled__default['default'].textarea.attrs(defaultTheme.applyDefaultTheme)(_templateObject7 || (_templateObject7 = defaultTheme._taggedTemplateLiteral(["\n width: 100%;\n font-family: inherit;\n font-size: 0.875rem;\n border-radius: 2px;\n padding: 5px 10px;\n resize: vertical;\n z-index: 0;\n border-radius: 3px;\n box-sizing: border-box;\n appearance: none;\n border: 1px solid;\n ", "\n \n\n ", "\n\n \n \n\n transition: height 550ms ease-in-out; border-color 350ms;\n\n ", "\n\n ", "\n\n ", "\n\n ", "\n \n ", "\n \n ", "\n\n ", "\n \n ", "\n\n ", "\n\n ", " \n\n ", " \n \n\n ", " \n\n \n \n ", "\n\n ", " \n\n ", "\n \n \n ", "\n\n ", "\n\n\n ", ";\n\n ", ";\n\n ", "\n\n ", "\n\n ", "\n\n ", "\n\n\n\n &&:hover:not(:focus) {\n ", ";\n\n ", ";\n\n ", ";\n\n \n ", "; \n\n\n ", ";\n transition: background 350ms;\n & + ", " {\n opacity: 1;\n ", ";\n transition: opacity 350ms;\n }\n }\n\n &::placeholder {\n ", "\n\n ", "\n }\n\n &&:focus {\n outline: none;\n ", "\n\n ", ";\n\n \n ", " \n \n ", "\n\n }\n\n &&:not(:hover):not(:focus) {\n ", ";\n ", ";\n\n ", "\n\n ", ";\n\n \n }\n"])), function (props) {
38
+ return props.showMore && !props.expanded && props.defaultHeight < props.maxHeight && styled.css(_templateObject8 || (_templateObject8 = defaultTheme._taggedTemplateLiteral(["\n -webkit-mask-image: linear-gradient(0deg, transparent 5px, white 45px);\n "])));
38
39
  }, function (props) {
39
40
  return props.borderRadius && styled.css(_templateObject9 || (_templateObject9 = defaultTheme._taggedTemplateLiteral(["\n border-radius: ", "px;\n "])), props.borderRadius);
40
41
  }, function (props) {
@@ -46,7 +47,7 @@ var TextInputField = styled__default['default'].textarea.attrs(defaultTheme.appl
46
47
  }, function (props) {
47
48
  return props.readOnly && styled.css(_templateObject12 || (_templateObject12 = defaultTheme._taggedTemplateLiteral(["\n padding: 12px 10px; ;\n "])));
48
49
  }, function (props) {
49
- return props.showMore && !props.expanded && styled.css(_templateObject13 || (_templateObject13 = defaultTheme._taggedTemplateLiteral(["\n overflow: hidden;\n "])));
50
+ return props.showMore && styled.css(_templateObject13 || (_templateObject13 = defaultTheme._taggedTemplateLiteral(["\n overflow: hidden;\n "])));
50
51
  }, function (props) {
51
52
  return props.theme.themeProp('color', props.theme.getColor('gray-100'), props.theme.getColor('gray-900'));
52
53
  }, function (props) {
@@ -200,12 +201,13 @@ var TextArea = React__default['default'].forwardRef(function TextArea(_ref, forw
200
201
  lightBackground = _ref.lightBackground,
201
202
  noBorder = _ref.noBorder,
202
203
  instructionsTextArea = _ref.instructionsTextArea,
204
+ isExpanded = _ref.isExpanded,
203
205
  loadingIcon = _ref.loadingIcon,
204
206
  successIcon = _ref.successIcon,
205
207
  padding = _ref.padding,
206
208
  descriptionToolTip = _ref.descriptionToolTip,
207
209
  borderRadius = _ref.borderRadius,
208
- rest = defaultTheme._objectWithoutProperties(_ref, ["value", "defaultValue", "name", "label", "placeholder", "required", "disabled", "hidden", "readOnly", "edit", "showMore", "showMoreText", "showLessText", "autoComplete", "description", "type", "icon", "rows", "className", "style", "onChange", "onBlur", "lightBackground", "noBorder", "instructionsTextArea", "loadingIcon", "successIcon", "padding", "descriptionToolTip", "borderRadius"]);
210
+ rest = defaultTheme._objectWithoutProperties(_ref, ["value", "defaultValue", "name", "label", "placeholder", "required", "disabled", "hidden", "readOnly", "edit", "showMore", "showMoreText", "showLessText", "autoComplete", "description", "type", "icon", "rows", "className", "style", "onChange", "onBlur", "lightBackground", "noBorder", "instructionsTextArea", "isExpanded", "loadingIcon", "successIcon", "padding", "descriptionToolTip", "borderRadius"]);
209
211
 
210
212
  var textInputDomNode = React.useRef(null);
211
213
  var textInputRef = useMergedRefs.useMergedRefs(forwardedRef, textInputDomNode);
@@ -225,49 +227,102 @@ var TextArea = React__default['default'].forwardRef(function TextArea(_ref, forw
225
227
  expanded = _useState6[0],
226
228
  setExpanded = _useState6[1];
227
229
 
228
- var _useState7 = React.useState(false),
230
+ var _useState7 = React.useState(''),
229
231
  _useState8 = defaultTheme._slicedToArray(_useState7, 2),
230
- autoFocus = _useState8[0],
231
- setAutoFocus = _useState8[1];
232
+ maxHeight = _useState8[0],
233
+ setMaxHeight = _useState8[1];
232
234
 
233
- var _useState9 = React.useState(nanoid.nanoid()),
234
- _useState10 = defaultTheme._slicedToArray(_useState9, 1),
235
- uniqueId = _useState10[0];
235
+ var _useState9 = React.useState(''),
236
+ _useState10 = defaultTheme._slicedToArray(_useState9, 2),
237
+ defaultHeight = _useState10[0],
238
+ setDefaultHeight = _useState10[1];
239
+
240
+ var _useState11 = React.useState(false),
241
+ _useState12 = defaultTheme._slicedToArray(_useState11, 2),
242
+ autoFocus = _useState12[0],
243
+ setAutoFocus = _useState12[1];
244
+
245
+ var _useState13 = React.useState(false),
246
+ _useState14 = defaultTheme._slicedToArray(_useState13, 2),
247
+ isInputHeightMore = _useState14[0],
248
+ setIsInputHeightMore = _useState14[1];
249
+
250
+ var _useState15 = React.useState(nanoid.nanoid()),
251
+ _useState16 = defaultTheme._slicedToArray(_useState15, 1),
252
+ uniqueId = _useState16[0];
236
253
 
237
254
  var memoizedDescriptionToolTip = React.useMemo(function () {
238
255
  return descriptionToolTip;
239
256
  }, [descriptionToolTip]);
240
-
241
- var calculateRows = function calculateRows() {
242
- var textareaRefCurrent = textInputDomNode === null || textInputDomNode === void 0 ? void 0 : textInputDomNode.current;
243
- var textAreaHeight = textareaRefCurrent === null || textareaRefCurrent === void 0 ? void 0 : textareaRefCurrent.scrollHeight;
244
- var lineHeight = 16;
245
- var calculatedRows = Math.floor(textAreaHeight / lineHeight);
246
- setMaxContentRows(calculatedRows);
247
- };
248
-
249
257
  React.useEffect(function () {
250
- calculateRows();
258
+ if (lodash.isEmpty(value) || lodash.isEmpty(defaultValue)) {
259
+ setExpanded(false);
260
+ }
251
261
  }, [value, defaultValue]);
252
262
  React.useEffect(function () {
253
263
  setExpanded(false);
264
+ isExpanded(false);
254
265
  setAutoFocus(false);
255
266
  }, [value, defaultValue]);
256
267
 
257
268
  var handleTextAreaChange = function handleTextAreaChange() {
258
269
  setExpanded(true);
270
+ isExpanded(true);
259
271
  };
260
272
 
261
273
  var handleTextAreaShowLess = function handleTextAreaShowLess() {
262
274
  setExpanded(!expanded);
275
+ isExpanded(!expanded);
263
276
  };
264
277
 
278
+ var calculateRows = function calculateRows() {
279
+ var textareaRefCurrent = textInputDomNode === null || textInputDomNode === void 0 ? void 0 : textInputDomNode.current;
280
+
281
+ if (textareaRefCurrent !== null) {
282
+ var textAreaHeight = textareaRefCurrent === null || textareaRefCurrent === void 0 ? void 0 : textareaRefCurrent.scrollHeight;
283
+ var lineHeight = 12;
284
+ var calculatedRows = Math.floor(textAreaHeight / lineHeight);
285
+ var defaultRowsHeight = rows * 20;
286
+ setMaxContentRows(calculatedRows);
287
+
288
+ if (calculatedRows > rows) {
289
+ setDefaultHeight(defaultRowsHeight);
290
+ setMaxHeight(textAreaHeight);
291
+ } else {
292
+ setMaxHeight();
293
+ }
294
+ }
295
+ };
296
+
297
+ React.useEffect(function () {
298
+ calculateRows();
299
+ }, [value, defaultValue]);
265
300
  var onKeyDown = React.useCallback(function (event) {
266
301
  if (event.key === 'Enter') {
267
302
  event.stopPropagation();
268
303
  }
269
304
  }, []);
270
305
 
306
+ var onChangeHeight = function onChangeHeight(e) {
307
+ var textareaRefCurrent = textInputDomNode === null || textInputDomNode === void 0 ? void 0 : textInputDomNode.current;
308
+ var newValue = e.target.value;
309
+
310
+ if (textareaRefCurrent !== null) {
311
+ textareaRefCurrent.value = newValue;
312
+ var heightOnInput = textareaRefCurrent === null || textareaRefCurrent === void 0 ? void 0 : textareaRefCurrent.scrollHeight;
313
+ var defaultRowsHeight = rows * 20;
314
+
315
+ if (heightOnInput > defaultRowsHeight) {
316
+ setMaxHeight(heightOnInput);
317
+ setIsInputHeightMore(false);
318
+ }
319
+
320
+ if (heightOnInput < defaultHeight) {
321
+ setIsInputHeightMore(true);
322
+ }
323
+ }
324
+ };
325
+
271
326
  var input = function input() {
272
327
  return React__default['default'].createElement(TextInput, {
273
328
  disabled: disabled,
@@ -278,12 +333,16 @@ var TextArea = React__default['default'].forwardRef(function TextArea(_ref, forw
278
333
  }, React__default['default'].createElement(TextInputFieldIconAlert, {
279
334
  type: type
280
335
  }, icon), React__default['default'].createElement(TextInputField, defaultTheme._extends({
336
+ style: {
337
+ height: expanded ? "".concat(maxHeight, "px") : "".concat(defaultHeight, "px")
338
+ },
281
339
  autoFocus: autoFocus,
282
340
  borderRadius: borderRadius,
283
341
  ref: textInputRef,
284
- rows: !showMore ? rows : !expanded ? rows : maxContentRows,
285
- maxContentRows: maxContentRows,
342
+ rows: rows,
286
343
  expanded: expanded,
344
+ defaultHeight: defaultHeight,
345
+ maxHeight: maxHeight,
287
346
  value: value,
288
347
  defaultValue: defaultValue,
289
348
  name: name,
@@ -318,6 +377,8 @@ var TextArea = React__default['default'].forwardRef(function TextArea(_ref, forw
318
377
  }
319
378
 
320
379
  _onChange(e);
380
+
381
+ onChangeHeight(e);
321
382
  },
322
383
  onKeyDown: onKeyDown,
323
384
  onBlur: onBlur,
@@ -335,7 +396,7 @@ var TextArea = React__default['default'].forwardRef(function TextArea(_ref, forw
335
396
  inputIsEmpty: inputIsEmpty
336
397
  }, label, required && ' *'), typeof description === 'string' && description.length > 0 && React__default['default'].createElement(Description, {
337
398
  type: type
338
- }, description), maxContentRows > rows && showMore && React__default['default'].createElement(ShowMoreText, {
399
+ }, description), maxContentRows > rows && showMore && !isInputHeightMore && React__default['default'].createElement(ShowMoreText, {
339
400
  onClick: showMore ? handleTextAreaShowLess : undefined,
340
401
  expanded: expanded
341
402
  }, !expanded ? showMoreText : showLessText));
@@ -363,6 +424,7 @@ TextArea.defaultProps = {
363
424
  padding: 'medium',
364
425
  instructionsTextArea: false,
365
426
  descriptionToolTip: '',
427
+ isExpanded: function isExpanded() {},
366
428
  onChange: function onChange() {},
367
429
  borderRadius: 0
368
430
  };
@@ -393,6 +455,7 @@ TextArea.propTypes = process.env.NODE_ENV !== "production" ? {
393
455
  onChange: defaultTheme.PropTypes.func,
394
456
  onBlur: defaultTheme.PropTypes.func,
395
457
  noBorder: defaultTheme.PropTypes.bool,
458
+ isExpanded: defaultTheme.PropTypes.func,
396
459
  type: defaultTheme.PropTypes.oneOf(['', 'error', 'error-border', 'warning-border', 'warning', 'loading', 'success']),
397
460
  instructionsTextArea: defaultTheme.PropTypes.bool,
398
461
  loadingIcon: defaultTheme.PropTypes.element,
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var TextArea = require('../../TextArea-a5579cc8.js');
3
+ var TextArea = require('../../TextArea-1da16eb4.js');
4
4
  require('../../defaultTheme-ea44e34a.js');
5
5
  require('styled-components');
6
6
  require('react');
7
7
  require('../../useMergedRefs-b6d2f8fc.js');
8
+ require('lodash');
8
9
  require('nanoid');
9
10
  require('../../Alert-13b75102.js');
10
- require('lodash');
11
11
  require('../../Badge-aec841c8.js');
12
12
  require('../../Popover-569cd272.js');
13
13
  require('polished');
package/inputs/index.js CHANGED
@@ -10,7 +10,7 @@ var CompactStarRating = require('../CompactStarRating-405e4508.js');
10
10
  var CompactTextInput = require('../CompactTextInput-0d53acdf.js');
11
11
  var MultiSelect = require('../MultiSelect-efd60232.js');
12
12
  var Radio = require('../Radio-32d0513a.js');
13
- var TextArea = require('../TextArea-a5579cc8.js');
13
+ var TextArea = require('../TextArea-1da16eb4.js');
14
14
  var TextInput = require('../TextInput-0d109708.js');
15
15
  var Switch = require('../Switch-4a41585f.js');
16
16
  var MultiLevelCheckboxSelect = require('../MultiLevelCheckboxSelect-f3de8047.js');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ntbjs/react-components",
3
- "version": "1.2.0-rc.99",
3
+ "version": "1.3.0-rc.1",
4
4
  "description": "NTBs common front-end design utilities and React components.",
5
5
  "scripts": {
6
6
  "build": "cross-env NODE_ENV=production rollup -c",
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var AssetGallery = require('../../AssetGallery-094ed34b.js');
3
+ var AssetGallery = require('../../AssetGallery-8462760f.js');
4
4
  require('../../defaultTheme-ea44e34a.js');
5
5
  require('styled-components');
6
6
  require('lodash');
@@ -41,7 +41,7 @@ require('../../CompactStarRating-405e4508.js');
41
41
  require('../../CompactTextInput-0d53acdf.js');
42
42
  require('../../MultiSelect-efd60232.js');
43
43
  require('../../Radio-32d0513a.js');
44
- require('../../TextArea-a5579cc8.js');
44
+ require('../../TextArea-1da16eb4.js');
45
45
  require('../../Switch-4a41585f.js');
46
46
  require('../../ContextMenuItem-ba2b697e.js');
47
47
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var Instructions = require('../../Instructions-b6d3e7bd.js');
3
+ var Instructions = require('../../Instructions-c5f3b7d6.js');
4
4
  require('../../defaultTheme-ea44e34a.js');
5
5
  require('styled-components');
6
6
  require('lodash');
@@ -25,7 +25,7 @@ require('../../react-select-creatable.esm-2f23d6c6.js');
25
25
  require('react-dom');
26
26
  require('../../close-ebf2f3cf.js');
27
27
  require('../../expand-more-94585605.js');
28
- require('../../TextArea-a5579cc8.js');
28
+ require('../../TextArea-1da16eb4.js');
29
29
  require('../../useMergedRefs-b6d2f8fc.js');
30
30
  require('../../edit-note-c47d292e.js');
31
31
 
package/widgets/index.js CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var AssetGallery = require('../AssetGallery-094ed34b.js');
5
+ var AssetGallery = require('../AssetGallery-8462760f.js');
6
6
  var ContextMenu = require('../ContextMenu-4ec3d9f3.js');
7
7
  var AssetPreviewTopBar = require('../AssetPreviewTopBar-912c3469.js');
8
- var Instructions = require('../Instructions-b6d3e7bd.js');
8
+ var Instructions = require('../Instructions-c5f3b7d6.js');
9
9
  require('../defaultTheme-ea44e34a.js');
10
10
  require('styled-components');
11
11
  require('lodash');
@@ -45,7 +45,7 @@ require('../CompactStarRating-405e4508.js');
45
45
  require('../CompactTextInput-0d53acdf.js');
46
46
  require('../MultiSelect-efd60232.js');
47
47
  require('../Radio-32d0513a.js');
48
- require('../TextArea-a5579cc8.js');
48
+ require('../TextArea-1da16eb4.js');
49
49
  require('../Switch-4a41585f.js');
50
50
  require('../ContextMenuItem-ba2b697e.js');
51
51