@plesk/ui-library 3.28.1 → 3.29.0

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 (39) hide show
  1. package/cjs/components/AutoClosable/AutoClosable.js +6 -2
  2. package/cjs/components/Button/Button.js +13 -6
  3. package/cjs/components/FormField/FormField.js +1 -1
  4. package/cjs/components/List/List.js +1 -6
  5. package/cjs/components/Overlay/Overlay.js +0 -2
  6. package/cjs/components/Select/Select.js +3 -3
  7. package/cjs/components/Toast/Toast.js +22 -7
  8. package/cjs/components/Toaster/Toaster.js +4 -6
  9. package/cjs/components/index.js +10 -1
  10. package/cjs/index.js +1 -1
  11. package/dist/plesk-ui-library-rtl.css +1 -1
  12. package/dist/plesk-ui-library-rtl.css.map +1 -1
  13. package/dist/plesk-ui-library.css +1 -1
  14. package/dist/plesk-ui-library.css.map +1 -1
  15. package/dist/plesk-ui-library.js +61 -35
  16. package/dist/plesk-ui-library.js.map +1 -1
  17. package/dist/plesk-ui-library.min.js +2 -2
  18. package/dist/plesk-ui-library.min.js.map +1 -1
  19. package/esm/components/AutoClosable/AutoClosable.js +6 -2
  20. package/esm/components/Button/Button.js +14 -7
  21. package/esm/components/FormField/FormField.js +1 -1
  22. package/esm/components/List/List.js +1 -6
  23. package/esm/components/Overlay/Overlay.js +0 -2
  24. package/esm/components/Select/Select.js +3 -3
  25. package/esm/components/Toast/Toast.js +20 -7
  26. package/esm/components/Toaster/Toaster.js +4 -5
  27. package/esm/components/index.js +2 -1
  28. package/esm/index.js +1 -1
  29. package/package.json +2 -2
  30. package/styleguide/build/bundle.2a86713c.js +2 -0
  31. package/styleguide/build/{bundle.fa6ff17e.js.LICENSE.txt → bundle.2a86713c.js.LICENSE.txt} +0 -0
  32. package/styleguide/index.html +2 -2
  33. package/types/src/components/Form/Form.d.ts +3 -54
  34. package/types/src/components/Form/types.d.ts +4 -4
  35. package/types/src/components/FormFieldPassword/FormFieldPassword.d.ts +2 -2
  36. package/types/src/components/Toast/Toast.d.ts +9 -0
  37. package/types/src/components/Toaster/Toaster.d.ts +2 -0
  38. package/types/src/components/index.d.ts +1 -0
  39. package/styleguide/build/bundle.fa6ff17e.js +0 -2
@@ -67,7 +67,9 @@ class AutoClosable extends Component {
67
67
  }
68
68
 
69
69
  componentDidMount() {
70
- document.body.addEventListener('click', this.onOutsideClick);
70
+ document.body.addEventListener('click', this.onOutsideClick, {
71
+ capture: true
72
+ });
71
73
 
72
74
  if (this.context) {
73
75
  this.context.addChild(this);
@@ -75,7 +77,9 @@ class AutoClosable extends Component {
75
77
  }
76
78
 
77
79
  componentWillUnmount() {
78
- document.body.removeEventListener('click', this.onOutsideClick);
80
+ document.body.removeEventListener('click', this.onOutsideClick, {
81
+ capture: true
82
+ });
79
83
 
80
84
  if (this.context) {
81
85
  this.context.removeChild(this);
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
2
2
  // Copyright 1999-2020. Plesk International GmbH. All rights reserved.
3
3
 
4
4
  /* eslint-disable react/no-deprecated */
5
- import React, { cloneElement, isValidElement, useContext, useState } from 'react';
5
+ import React, { cloneElement, forwardRef, isValidElement, useContext, useState } from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import classNames from 'classnames';
8
8
  import { CLS_PREFIX } from '../../constants';
@@ -72,7 +72,7 @@ const renderCaret = ({
72
72
  */
73
73
 
74
74
 
75
- const Button = ({
75
+ const Button = /*#__PURE__*/forwardRef(({
76
76
  baseClassName,
77
77
  className,
78
78
  component: Tag,
@@ -90,7 +90,7 @@ const Button = ({
90
90
  arrow,
91
91
  disabled,
92
92
  ...props
93
- }) => {
93
+ }, ref) => {
94
94
  const [selectedState, setSelectedState] = useState(false);
95
95
 
96
96
  const handleToggle = () => {
@@ -145,6 +145,7 @@ const Button = ({
145
145
  const isArrowButton = arrow === 'forward' || arrow === 'backward';
146
146
  const hasAriaDisabled = Tag === 'button' && disabled && tooltip;
147
147
  let button = /*#__PURE__*/React.createElement(Tag, _extends({
148
+ ref: ref,
148
149
  className: classNames(baseClassName, {
149
150
  [`${baseClassName}--${size}`]: size,
150
151
  [`${baseClassName}--${intent}`]: intent && !ghost,
@@ -184,8 +185,8 @@ const Button = ({
184
185
  }
185
186
 
186
187
  return button;
187
- };
188
-
188
+ });
189
+ Button.displayName = 'Button';
189
190
  Button.propTypes = {
190
191
  /**
191
192
  * Button size.
@@ -279,7 +280,12 @@ Button.propTypes = {
279
280
  /**
280
281
  * @ignore
281
282
  */
282
- baseClassName: PropTypes.string
283
+ baseClassName: PropTypes.string,
284
+
285
+ /**
286
+ * @ignore
287
+ */
288
+ onClick: PropTypes.func
283
289
  };
284
290
  Button.defaultProps = {
285
291
  size: undefined,
@@ -297,6 +303,7 @@ Button.defaultProps = {
297
303
  component: 'button',
298
304
  className: undefined,
299
305
  baseClassName: `${CLS_PREFIX}button`,
300
- arrow: undefined
306
+ arrow: undefined,
307
+ onClick: undefined
301
308
  };
302
309
  export default Button;
@@ -199,7 +199,7 @@ class FormField extends Component {
199
199
  multi
200
200
  } = this.props;
201
201
 
202
- if (!description || multi && this.state.value.length - 1 > index) {
202
+ if (!description || multi && this.fieldApi.getValue().length - 1 > index) {
203
203
  return null;
204
204
  }
205
205
 
@@ -875,14 +875,9 @@ class List extends Component {
875
875
 
876
876
  if (totalRows && /*#__PURE__*/isValidElement(pagination)) {
877
877
  const {
878
- itemsPerPageOptions = ITEMS_PER_PAGE_OPTIONS,
879
- itemsPerPage
878
+ itemsPerPageOptions = ITEMS_PER_PAGE_OPTIONS
880
879
  } = pagination.props;
881
880
 
882
- if (Number.isInteger(itemsPerPage)) {
883
- return totalRows > itemsPerPage;
884
- }
885
-
886
881
  if (Array.isArray(itemsPerPageOptions)) {
887
882
  const numericOptions = itemsPerPageOptions.filter(v => Number(v) === v);
888
883
 
@@ -87,8 +87,6 @@ export default class Overlay extends Component {
87
87
  isExist: true
88
88
  }, () => {
89
89
  this.prevFocusElement = document.activeElement;
90
- });
91
- setTimeout(() => {
92
90
  this.setState({
93
91
  isOpened: true
94
92
  }, () => {
@@ -172,8 +172,8 @@ const Select = ({
172
172
 
173
173
  if (filterValue) {
174
174
  const lowerFilterValue = filterValue.toLowerCase();
175
- groupFns.push(group => !!group.label && group.label.toLowerCase().indexOf(lowerFilterValue) === 0);
176
- optionFns.push(option => option.label.toLowerCase().indexOf(lowerFilterValue) === 0);
175
+ groupFns.push(group => !!group.label && group.label.toLowerCase().includes(lowerFilterValue));
176
+ optionFns.push(option => option.label.toLowerCase().includes(lowerFilterValue));
177
177
  }
178
178
 
179
179
  if (groupFns.length || optionFns.length) {
@@ -253,7 +253,7 @@ const Select = ({
253
253
 
254
254
  const handleHighlightSearch = query => {
255
255
  const lowerQuery = query.toLowerCase();
256
- const index = options.findIndex(o => !o.disabled && o.label.toLowerCase().indexOf(lowerQuery) === 0);
256
+ const index = options.findIndex(o => !o.disabled && o.label.toLowerCase().includes(lowerQuery));
257
257
 
258
258
  if (index !== -1) {
259
259
  setHighlightedIndex(index);
@@ -7,6 +7,7 @@ import { CLS_PREFIX } from '../../constants';
7
7
  import Icon from '../Icon';
8
8
  import Button from '../Button';
9
9
  import { intentIconMap } from '../intentIconMap';
10
+ import OnDarkContext from '../OnDarkContext';
10
11
  const AUTOCLOSE_TIMEOUT = 6000;
11
12
  export default class Toast extends Component {
12
13
  constructor(...args) {
@@ -51,6 +52,10 @@ export default class Toast extends Component {
51
52
  className,
52
53
  message,
53
54
  intent,
55
+ accent,
56
+ icon = intent && /*#__PURE__*/React.createElement(Icon, {
57
+ name: intentIconMap[intent]
58
+ }),
54
59
  onClose,
55
60
  closable = true,
56
61
  autoClosable,
@@ -58,18 +63,18 @@ export default class Toast extends Component {
58
63
  innerRef,
59
64
  ...props
60
65
  } = this.props;
61
- return /*#__PURE__*/React.createElement("div", _extends({
66
+ const result = /*#__PURE__*/React.createElement("div", _extends({
62
67
  tabIndex: 0,
63
- className: classNames(baseClassName, intent && `${baseClassName}--${intent}`, className)
68
+ className: classNames(baseClassName, intent && `${baseClassName}--${intent}`, accent && `${baseClassName}--accent`, className)
64
69
  }, props, {
65
70
  ref: innerRef
66
- }), intent ? /*#__PURE__*/React.createElement("span", {
71
+ }), icon ? /*#__PURE__*/React.createElement("div", {
67
72
  className: `${baseClassName}__icon`
68
- }, /*#__PURE__*/React.createElement(Icon, {
69
- name: intentIconMap[intent]
70
- })) : null, /*#__PURE__*/React.createElement("span", {
73
+ }, Icon.create(icon, {
74
+ intent
75
+ })) : null, /*#__PURE__*/React.createElement("div", {
71
76
  className: `${baseClassName}__content`
72
- }, message), closable ? /*#__PURE__*/React.createElement("span", {
77
+ }, message), closable ? /*#__PURE__*/React.createElement("div", {
73
78
  className: `${baseClassName}__action`
74
79
  }, /*#__PURE__*/React.createElement(Button, {
75
80
  ghost: true,
@@ -80,6 +85,14 @@ export default class Toast extends Component {
80
85
  className: `${baseClassName}__close`,
81
86
  onClick: onClose
82
87
  })) : null);
88
+
89
+ if (accent) {
90
+ return result;
91
+ }
92
+
93
+ return /*#__PURE__*/React.createElement(OnDarkContext.Provider, {
94
+ value: true
95
+ }, result);
83
96
  }
84
97
 
85
98
  }
@@ -8,7 +8,6 @@ import classNames from 'classnames';
8
8
  import { CLS_PREFIX, Z_INDEX_TOASTER } from '../../constants';
9
9
  import Toast from '../Toast';
10
10
  import Layer from '../Layer';
11
- import OnDarkContext from '../OnDarkContext';
12
11
  let toastId = 0;
13
12
 
14
13
  /**
@@ -44,6 +43,8 @@ export default class Toaster extends Component {
44
43
  * Add a new toast
45
44
  *
46
45
  * `intent` - Visual intent color to apply to component. (Type: `oneOf` 'info', 'success', 'warning', 'danger'. *Required*.)<br>
46
+ * `accent` - Contrast (light) version of the component. (Type: `boolean`. Default: 'undefined'.)<br>
47
+ * `icon` - Name of icon or [Icon](#!/Icon) component. (Type: `oneOfType` 'string', 'object', 'element'. Default: `undefined`.)<br>
47
48
  * `message` - Message to display in the body of the toast. (Type: `any`. Default: `undefined`.)<br>
48
49
  * `onClose` - onClose handler. (Type: `func`. Default: `undefined`.)<br>
49
50
  * `closable` - Show close control (cross mark). (Type: `boolean`. Default: `true`.)<br>
@@ -133,9 +134,7 @@ export default class Toaster extends Component {
133
134
  stack.reverse();
134
135
  }
135
136
 
136
- return /*#__PURE__*/React.createElement(OnDarkContext.Provider, {
137
- value: true
138
- }, /*#__PURE__*/React.createElement(Layer, {
137
+ return /*#__PURE__*/React.createElement(Layer, {
139
138
  level: Z_INDEX_TOASTER
140
139
  }, /*#__PURE__*/React.createElement("div", _extends({
141
140
  className: classNames(baseClassName, {
@@ -181,7 +180,7 @@ export default class Toaster extends Component {
181
180
  },
182
181
  innerRef: toastRef
183
182
  })));
184
- })))));
183
+ }))));
185
184
  }
186
185
 
187
186
  }
@@ -98,4 +98,5 @@ export { default as Tour } from './Tour';
98
98
  export { default as Translate } from './Translate';
99
99
  export { default as Link } from './Link';
100
100
  export { default as Skeleton } from './Skeleton';
101
- export * from './Skeleton';
101
+ export * from './Skeleton';
102
+ export { PortalContext } from './Layer';
package/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Copyright 1999-2018. Plesk International GmbH. All rights reserved.
2
2
  import svg4everybody from 'svg4everybody';
3
- const version = "3.28.1";
3
+ const version = "3.29.0";
4
4
  export * from './publicPath';
5
5
  export { version };
6
6
  export * from './utils';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plesk/ui-library",
3
- "version": "3.28.1",
3
+ "version": "3.29.0",
4
4
  "description": "Plesk UI Library",
5
5
  "main": "index.js",
6
6
  "module": "esm/index.js",
@@ -137,7 +137,7 @@
137
137
  "resolutions": {
138
138
  "@babel/types": "^7.15.6",
139
139
  "@types/node": "^12.12.8",
140
- "**/caniuse-lite": "1.0.30001307"
140
+ "**/caniuse-lite": "1.0.30001390"
141
141
  },
142
142
  "browserslist": [
143
143
  "last 2 versions",