linear-react-components-ui 0.4.76-rc.9 → 0.4.76

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 (120) hide show
  1. package/.husky/pre-commit +2 -2
  2. package/.tool-versions +1 -0
  3. package/.vscode/settings.json +1 -2
  4. package/README.md +40 -5
  5. package/lib/assets/styles/button.scss +19 -10
  6. package/lib/assets/styles/checkbox.scss +92 -70
  7. package/lib/assets/styles/commons.scss +36 -0
  8. package/lib/assets/styles/drawers.scss +22 -6
  9. package/lib/assets/styles/dropdown.scss +28 -2
  10. package/lib/assets/styles/effects.scss +32 -0
  11. package/lib/assets/styles/floatMenu.scss +0 -1
  12. package/lib/assets/styles/gridlayout.scss +2 -1
  13. package/lib/assets/styles/input.scss +21 -0
  14. package/lib/assets/styles/label.scss +9 -1
  15. package/lib/assets/styles/list.scss +8 -0
  16. package/lib/assets/styles/multiSelect.scss +105 -0
  17. package/lib/assets/styles/panel.scss +3 -1
  18. package/lib/assets/styles/periodpicker.scss +65 -0
  19. package/lib/assets/styles/progress.scss +8 -1
  20. package/lib/assets/styles/radio.scss +19 -0
  21. package/lib/assets/styles/select.scss +4 -3
  22. package/lib/assets/styles/sidenav.scss +11 -1
  23. package/lib/assets/styles/skeleton.scss +48 -0
  24. package/lib/assets/styles/table.scss +25 -5
  25. package/lib/assets/styles/tabs.scss +116 -75
  26. package/lib/assets/styles/treeview.scss +41 -0
  27. package/lib/assets/styles/uitour.scss +112 -0
  28. package/lib/avatar/avatar.spec.js +17 -6
  29. package/lib/avatar/index.js +1 -1
  30. package/lib/buttons/DefaultButton.js +13 -4
  31. package/lib/buttons/split_button/index.js +8 -4
  32. package/lib/checkbox/Label.js +37 -0
  33. package/lib/checkbox/checkbox.spec.js +16 -16
  34. package/lib/checkbox/index.js +33 -12
  35. package/lib/dialog/base/index.js +15 -6
  36. package/lib/dialog/form/index.js +24 -4
  37. package/lib/drawer/Drawer.js +9 -5
  38. package/lib/drawer/Header.js +15 -5
  39. package/lib/drawer/index.js +4 -1
  40. package/lib/dropdown/Popup.js +3 -2
  41. package/lib/form/Field.js +2 -0
  42. package/lib/form/FieldNumber.js +11 -3
  43. package/lib/form/FieldPeriod.js +100 -0
  44. package/lib/form/form.spec.js +8 -0
  45. package/lib/form/helpers.js +20 -1
  46. package/lib/form/index.js +220 -218
  47. package/lib/form/withFieldHOC.js +5 -1
  48. package/lib/form/withFormSecurity.js +106 -0
  49. package/lib/icons/helper.js +24 -0
  50. package/lib/inputs/base/InputTextBase.js +30 -5
  51. package/lib/inputs/base/helpers.js +13 -9
  52. package/lib/inputs/date/Dropdown.js +3 -3
  53. package/lib/inputs/date/date.spec.js +46 -36
  54. package/lib/inputs/date/helpers.js +36 -0
  55. package/lib/inputs/date/index.js +12 -10
  56. package/lib/inputs/mask/Phone.js +10 -1
  57. package/lib/inputs/mask/imaskHOC.js +2 -1
  58. package/lib/inputs/mask/input_mask.spec.js +21 -4
  59. package/lib/inputs/multiSelect/ActionButtons.js +68 -0
  60. package/lib/inputs/multiSelect/Dropdown.js +200 -0
  61. package/lib/inputs/multiSelect/helper.js +18 -0
  62. package/lib/inputs/multiSelect/index.js +343 -0
  63. package/lib/inputs/number/BaseNumber.js +1 -1
  64. package/lib/inputs/number/index.js +7 -5
  65. package/lib/inputs/period/Dialog.js +38 -0
  66. package/lib/inputs/period/Dropdown.js +90 -0
  67. package/lib/inputs/period/PeriodList.js +79 -0
  68. package/lib/inputs/period/helper.js +118 -0
  69. package/lib/inputs/period/index.js +490 -0
  70. package/lib/inputs/search/index.js +2 -0
  71. package/lib/inputs/select/Dropdown.js +55 -65
  72. package/lib/inputs/select/helper.js +65 -2
  73. package/lib/inputs/select/index.js +26 -3
  74. package/lib/inputs/select/multiple/index.js +16 -11
  75. package/lib/inputs/select/simple/index.js +39 -24
  76. package/lib/internals/constants.js +4 -3
  77. package/lib/internals/withTooltip.js +86 -82
  78. package/lib/labels/DefaultLabel.js +7 -4
  79. package/lib/list/Item.js +35 -9
  80. package/lib/list/helpers.js +8 -3
  81. package/lib/list/index.js +172 -14
  82. package/lib/list/list.spec.js +290 -89
  83. package/lib/menus/float/MenuItem.js +25 -8
  84. package/lib/menus/sidenav/NavMenuItem.js +17 -8
  85. package/lib/menus/sidenav/index.js +59 -86
  86. package/lib/menus/sidenav/popup_menu_search/index.js +26 -17
  87. package/lib/menus/sidenav/sidenav.spec.js +86 -19
  88. package/lib/panel/Header.js +4 -3
  89. package/lib/progress/Bar.js +40 -9
  90. package/lib/progress/index.js +12 -4
  91. package/lib/radio/index.js +9 -6
  92. package/lib/skeleton/SkeletonContainer.js +42 -0
  93. package/lib/skeleton/index.js +84 -0
  94. package/lib/spinner/index.js +6 -1
  95. package/lib/split/Split.js +5 -11
  96. package/lib/table/Body.js +55 -11
  97. package/lib/table/Header.js +14 -1
  98. package/lib/table/HeaderColumn.js +26 -3
  99. package/lib/table/Row.js +19 -8
  100. package/lib/table/RowColumn.js +23 -3
  101. package/lib/table/helpers.js +11 -1
  102. package/lib/table/index.js +41 -8
  103. package/lib/tabs/DropdownItems.js +84 -0
  104. package/lib/tabs/Menu.js +12 -9
  105. package/lib/tabs/MenuItems.js +15 -9
  106. package/lib/tabs/Panel.js +1 -3
  107. package/lib/tabs/index.js +156 -22
  108. package/lib/tabs/tabs.spec.js +8 -5
  109. package/lib/toolbar/ButtonBar.js +30 -24
  110. package/lib/toolbar/LabelBar.js +22 -27
  111. package/lib/toolbar/helpers.js +12 -0
  112. package/lib/toolbar/index.js +24 -9
  113. package/lib/tooltip/index.js +20 -7
  114. package/lib/treeview/Node.js +364 -49
  115. package/lib/treeview/index.js +475 -36
  116. package/lib/treeview/treeview.spec.js +18 -0
  117. package/lib/uitour/helpers.js +15 -0
  118. package/lib/uitour/index.js +271 -0
  119. package/lib/uitour/uitour.spec.js +176 -0
  120. package/package.json +9 -8
package/lib/list/Item.js CHANGED
@@ -17,10 +17,12 @@ var _icons = _interopRequireDefault(require("../icons"));
17
17
 
18
18
  var _checkbox = _interopRequireDefault(require("../checkbox"));
19
19
 
20
- var _helpers = _interopRequireDefault(require("./helpers"));
20
+ var _helpers = require("./helpers");
21
21
 
22
22
  var _withDropdown = require("../dropdown/withDropdown");
23
23
 
24
+ var constants = _interopRequireWildcard(require("../internals/constants"));
25
+
24
26
  var _permissionValidations = require("../permissionValidations");
25
27
 
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -44,7 +46,7 @@ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "und
44
46
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
45
47
 
46
48
  var Item = function Item(props) {
47
- var _onClick = props.onClick,
49
+ var onClick = props.onClick,
48
50
  leftIconName = props.leftIconName,
49
51
  leftIcon = props.leftIcon,
50
52
  displayCheckbox = props.displayCheckbox,
@@ -65,10 +67,13 @@ var Item = function Item(props) {
65
67
  visible = props.visible,
66
68
  permissionAttr = props.permissionAttr;
67
69
 
68
- var _useContext = (0, _react.useContext)(_helpers["default"]),
70
+ var _useContext = (0, _react.useContext)(_helpers.ListContext),
69
71
  handleSelectItem = _useContext.handleSelectItem,
70
72
  selectable = _useContext.selectable,
71
- selectedItemId = _useContext.selectedItemId;
73
+ selectedItemId = _useContext.selectedItemId,
74
+ selectedItemRef = _useContext.selectedItemRef,
75
+ skeletonize = _useContext.skeletonize,
76
+ selectOnEnter = _useContext.selectOnEnter;
72
77
 
73
78
  var dropdownContext = (0, _react.useContext)(_withDropdown.WithDropdownContext);
74
79
  var options = [_permissionValidations.OPTIONS_ON_DENIED.disabled, _permissionValidations.OPTIONS_ON_DENIED.unvisible];
@@ -77,6 +82,8 @@ var Item = function Item(props) {
77
82
  _useState2 = _slicedToArray(_useState, 1),
78
83
  onDenied = _useState2[0];
79
84
 
85
+ var history = (0, _reactRouterDom.useHistory)();
86
+
80
87
  var shouldDisable = function shouldDisable() {
81
88
  return disabled || onDenied.disabled;
82
89
  };
@@ -97,23 +104,42 @@ var Item = function Item(props) {
97
104
  return null;
98
105
  };
99
106
 
107
+ var handleOnSelectItem = function handleOnSelectItem(e) {
108
+ if (onClick !== undefined) onClick(e, itemId);
109
+ if (dropdownContext) dropdownContext.handleDropdownClose();
110
+ if (selectable) handleSelectItem(itemId, onClick);
111
+ };
112
+
113
+ var onKeyDown = (0, _react.useCallback)(function (e) {
114
+ if ([constants.keyCodes.ENTER].includes(e.keyCode) && !skeletonize) {
115
+ e.preventDefault();
116
+ handleOnSelectItem(e);
117
+ if (url) history.push(url);
118
+ }
119
+ }, [url]);
120
+
100
121
  var getProps = function getProps() {
101
122
  if (shouldDisable()) return undefined;
102
- if (_onClick === undefined && dropdownContext === undefined) return null;
123
+ if (onClick === undefined && dropdownContext === undefined && !selectable) return null;
103
124
  return {
104
125
  onClick: function onClick(e) {
105
- if (_onClick !== undefined) _onClick(e);
106
- if (dropdownContext) dropdownContext.handleDropdownClose();
107
- if (selectable && handleSelectItem(itemId)) ;
126
+ handleOnSelectItem(e);
108
127
  },
109
- onKeyDown: null,
110
128
  role: 'button',
129
+ onKeyDown: selectOnEnter && onKeyDown,
111
130
  tabIndex: '0'
112
131
  };
113
132
  };
114
133
 
134
+ (0, _react.useEffect)(function () {
135
+ if (selectOnEnter) document.addEventListener('keydown', onKeyDown);
136
+ return function () {
137
+ document.removeEventListener('keydown', onKeyDown);
138
+ };
139
+ }, []);
115
140
  if (!visible || onDenied.unvisible) return null;
116
141
  return /*#__PURE__*/_react["default"].createElement("li", _extends({
142
+ ref: itemId && selectedItemId === itemId ? selectedItemRef : null,
117
143
  style: style,
118
144
  className: "item-container ".concat(hovered && 'hovered', "\n ").concat(itemId && selectedItemId === itemId ? '-activedlist' : '')
119
145
  }, getProps(), {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports["default"] = void 0;
6
+ exports.LIST_ITEMS_TYPES = exports.ListContext = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
@@ -11,5 +11,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
11
11
 
12
12
  var ListContext = /*#__PURE__*/_react["default"].createContext();
13
13
 
14
- var _default = ListContext;
15
- exports["default"] = _default;
14
+ exports.ListContext = ListContext;
15
+ var LIST_ITEMS_TYPES = {
16
+ listHeader: 'Header',
17
+ listItem: 'Item',
18
+ listSeparator: 'Separator'
19
+ };
20
+ exports.LIST_ITEMS_TYPES = LIST_ITEMS_TYPES;
package/lib/list/index.js CHANGED
@@ -33,11 +33,15 @@ var _Header = _interopRequireDefault(require("./Header"));
33
33
 
34
34
  var _Item = _interopRequireDefault(require("./Item"));
35
35
 
36
+ var constants = _interopRequireWildcard(require("../internals/constants"));
37
+
38
+ var _skeleton = _interopRequireDefault(require("../skeleton"));
39
+
36
40
  var _Separator = _interopRequireDefault(require("./Separator"));
37
41
 
38
42
  require("../assets/styles/list.scss");
39
43
 
40
- var _helpers = _interopRequireDefault(require("./helpers"));
44
+ var _helpers = require("./helpers");
41
45
 
42
46
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
43
47
 
@@ -58,31 +62,173 @@ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "und
58
62
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
59
63
 
60
64
  var List = function List(props) {
65
+ var customClass = props.customClass,
66
+ condensed = props.condensed,
67
+ transparent = props.transparent,
68
+ style = props.style,
69
+ selectable = props.selectable,
70
+ onSelectItem = props.onSelectItem,
71
+ skeletonize = props.skeletonize,
72
+ skeletonItens = props.skeletonItens,
73
+ skeletonHeight = props.skeletonHeight,
74
+ children = props.children,
75
+ selectOnEnter = props.selectOnEnter;
76
+ var selectedItemRef = (0, _react.useRef)(null);
77
+ var listRef = (0, _react.useRef)(null);
78
+
61
79
  var _useState = (0, _react.useState)(''),
62
80
  _useState2 = _slicedToArray(_useState, 2),
63
81
  selectedItemId = _useState2[0],
64
82
  setSelectedItemId = _useState2[1];
65
83
 
66
- var children = props.children,
67
- customClass = props.customClass,
68
- condensed = props.condensed,
69
- transparent = props.transparent,
70
- style = props.style,
71
- selectable = props.selectable;
84
+ var _useState3 = (0, _react.useState)([]),
85
+ _useState4 = _slicedToArray(_useState3, 2),
86
+ itensId = _useState4[0],
87
+ setItensId = _useState4[1];
88
+
89
+ var _useState5 = (0, _react.useState)(children),
90
+ _useState6 = _slicedToArray(_useState5, 2),
91
+ newChildren = _useState6[0],
92
+ setNewChildren = _useState6[1];
93
+
72
94
  var contextValues = {
73
95
  selectable: selectable,
74
96
  selectedItemId: selectedItemId,
75
- handleSelectItem: function handleSelectItem(selectedId) {
76
- setSelectedItemId(selectedId);
97
+ selectedItemRef: selectedItemRef,
98
+ selectOnEnter: selectOnEnter,
99
+ children: children,
100
+ skeletonize: skeletonize,
101
+ handleSelectItem: function handleSelectItem(itemId, onClick) {
102
+ if (!onSelectItem && onClick) setSelectedItemId(itemId);
103
+ if (onSelectItem) onSelectItem(itemId);
77
104
  }
78
105
  };
79
- return /*#__PURE__*/_react["default"].createElement(_helpers["default"].Provider, {
106
+
107
+ var onKeyDown = function onKeyDown(e) {
108
+ if ([constants.keyCodes.ARROW_DOWN, constants.keyCodes.ARROW_UP].includes(e.keyCode) && !skeletonize) {
109
+ e.preventDefault();
110
+
111
+ if (e.keyCode === constants.keyCodes.ARROW_DOWN) {
112
+ if (selectedItemId === itensId[itensId.length - 1]) {
113
+ setSelectedItemId(itensId[0]);
114
+ } else {
115
+ var index = itensId.indexOf(selectedItemId === '' ? '0' : selectedItemId);
116
+ setSelectedItemId(itensId[index + 1]);
117
+ }
118
+ } else if (e.keyCode === constants.keyCodes.ARROW_UP) {
119
+ if (selectedItemId === itensId[0]) {
120
+ setSelectedItemId(itensId[itensId.length - 1]);
121
+ } else {
122
+ var _index = itensId.indexOf(selectedItemId);
123
+
124
+ setSelectedItemId(itensId[_index - 1]);
125
+ }
126
+ }
127
+
128
+ return selectedItemRef.current && selectedItemRef.current.focus();
129
+ }
130
+
131
+ return null;
132
+ };
133
+
134
+ var getSkeleton = function getSkeleton() {
135
+ var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
136
+ var maxSkeletonsItensExceeded = 2;
137
+ var skeletonItensCount = length > skeletonItens ? maxSkeletonsItensExceeded : Math.floor(skeletonItens / length);
138
+ var skeletonItensList = Array.from(Array(skeletonItensCount).keys());
139
+ return /*#__PURE__*/_react["default"].createElement("div", {
140
+ className: "skeleton-transparency"
141
+ }, skeletonItensList.map(function (id) {
142
+ return /*#__PURE__*/_react["default"].createElement(_Item["default"], {
143
+ key: id,
144
+ hovered: false,
145
+ style: {
146
+ pointerEvents: 'none'
147
+ }
148
+ }, /*#__PURE__*/_react["default"].createElement(_skeleton["default"], {
149
+ height: skeletonHeight,
150
+ style: {
151
+ margin: '6px 0'
152
+ }
153
+ }));
154
+ }));
155
+ };
156
+
157
+ var getNewChildren = function getNewChildren(headersChildren) {
158
+ return headersChildren.length > 0 ? headersChildren.map(function (item) {
159
+ return /*#__PURE__*/_react["default"].createElement(_react.Fragment, {
160
+ key: item.props.title
161
+ }, item, getSkeleton(headersChildren.length));
162
+ }) : /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, headersChildren, getSkeleton());
163
+ };
164
+
165
+ (0, _react.useEffect)(function () {
166
+ if (selectedItemRef.current && listRef.current && listRef.current.scroll) {
167
+ var selectedItemRect = selectedItemRef.current.getBoundingClientRect();
168
+ var listRect = listRef.current.getBoundingClientRect();
169
+ var defaultScrollTop = 0;
170
+ var defaultBottomOffset = 100;
171
+
172
+ if (selectedItemRect.top - selectedItemRect.height > listRect.bottom) {
173
+ listRef.current.scroll({
174
+ top: selectedItemRect.top
175
+ });
176
+ } else if (selectedItemRect.top + selectedItemRect.height - listRect.y >= listRect.height) {
177
+ listRef.current.scroll({
178
+ top: listRef.current.scrollTop + selectedItemRect.height
179
+ });
180
+ } else if (selectedItemRect.bottom < defaultBottomOffset) {
181
+ listRef.current.scroll({
182
+ top: defaultScrollTop
183
+ });
184
+ } else {
185
+ listRef.current.scroll({
186
+ top: listRef.current.scrollTop - selectedItemRect.height
187
+ });
188
+ }
189
+ }
190
+ }, [selectedItemRef.current]);
191
+ (0, _react.useEffect)(function () {
192
+ if (!skeletonize) document.addEventListener('keydown', onKeyDown);
193
+ return function () {
194
+ document.removeEventListener('keydown', onKeyDown);
195
+ };
196
+ }, [skeletonize, selectedItemId, itensId]);
197
+ (0, _react.useEffect)(function () {
198
+ if (onSelectItem && props.selectedItemId) {
199
+ setSelectedItemId(props.selectedItemId);
200
+ if (selectedItemRef.current) selectedItemRef.current.focus();
201
+ }
202
+ }, [props.selectedItemId]);
203
+ (0, _react.useEffect)(function () {
204
+ var newItensIds = children.length > 0 ? children.map(function (item) {
205
+ return item.props && item.props.itemId;
206
+ }).filter(Boolean) : [children.props.itemId];
207
+ setItensId(newItensIds);
208
+ }, [children]);
209
+ (0, _react.useEffect)(function () {
210
+ if (skeletonize) {
211
+ var headersChildren = children.type && children.type === _helpers.LIST_ITEMS_TYPES.listHeader && children;
212
+
213
+ if (children.length > 0) {
214
+ headersChildren = children.filter(function (item) {
215
+ return item.type && item.type.name === _helpers.LIST_ITEMS_TYPES.listHeader;
216
+ });
217
+ }
218
+
219
+ setNewChildren(getNewChildren(headersChildren));
220
+ } else {
221
+ setNewChildren(children);
222
+ }
223
+ }, [skeletonize, children]);
224
+ return /*#__PURE__*/_react["default"].createElement(_helpers.ListContext.Provider, {
80
225
  value: contextValues
81
226
  }, /*#__PURE__*/_react["default"].createElement("ul", {
82
227
  "data-testid": "list-component",
83
228
  style: style,
84
- className: "list-component ".concat(condensed && '-condensed', " ").concat(customClass, " ").concat(!transparent && '-listbackground')
85
- }, children));
229
+ ref: listRef,
230
+ className: "list-component ".concat(condensed && '-condensed', "\n ").concat(customClass, " ").concat(!transparent && '-listbackground')
231
+ }, newChildren));
86
232
  };
87
233
 
88
234
  List.propTypes = {
@@ -91,14 +237,26 @@ List.propTypes = {
91
237
  customClass: _propTypes["default"].string,
92
238
  condensed: _propTypes["default"].bool,
93
239
  selectable: _propTypes["default"].bool,
94
- style: _propTypes["default"].object
240
+ style: _propTypes["default"].object,
241
+ onSelectItem: _propTypes["default"].func,
242
+ selectedItemId: _propTypes["default"].string,
243
+ skeletonize: _propTypes["default"].bool,
244
+ skeletonItens: _propTypes["default"].number,
245
+ skeletonHeight: _propTypes["default"].number,
246
+ selectOnEnter: _propTypes["default"].bool
95
247
  };
96
248
  List.defaultProps = {
97
249
  customClass: '',
98
250
  condensed: false,
99
251
  transparent: false,
100
252
  selectable: false,
101
- style: {}
253
+ style: {},
254
+ onSelectItem: undefined,
255
+ selectedItemId: '',
256
+ skeletonize: false,
257
+ skeletonItens: 5,
258
+ skeletonHeight: 48,
259
+ selectOnEnter: false
102
260
  };
103
261
  var _default = List;
104
262
  exports["default"] = _default;