@plesk/ui-library 3.27.0 → 3.27.3

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 (46) hide show
  1. package/cjs/components/Dialog/Dialog.js +11 -2
  2. package/cjs/components/Drawer/DrawerProgress.js +15 -1
  3. package/cjs/components/FormFieldPassword/FormFieldPassword.js +24 -214
  4. package/cjs/components/FormFieldPassword/PasswordMeter.js +81 -0
  5. package/cjs/components/FormFieldPassword/estimatePassword.js +203 -0
  6. package/cjs/components/FormFieldPassword/generatePassword.js +21 -0
  7. package/cjs/components/FormFieldPassword/index.js +5 -5
  8. package/cjs/components/Icon/Icon.js +1 -1
  9. package/cjs/components/List/List.js +1 -1
  10. package/cjs/components/ProgressDialog/ProgressDialog.js +2 -1
  11. package/cjs/components/Rating/images/rating.svg +5 -5
  12. package/cjs/index.js +1 -1
  13. package/dist/images/rating.svg +5 -5
  14. package/dist/plesk-ui-library-rtl.css +1 -1
  15. package/dist/plesk-ui-library-rtl.css.map +1 -1
  16. package/dist/plesk-ui-library.css +1 -1
  17. package/dist/plesk-ui-library.css.map +1 -1
  18. package/dist/plesk-ui-library.js +336 -309
  19. package/dist/plesk-ui-library.js.map +1 -1
  20. package/dist/plesk-ui-library.min.js +5 -5
  21. package/dist/plesk-ui-library.min.js.map +1 -1
  22. package/esm/components/Dialog/Dialog.js +11 -2
  23. package/esm/components/Drawer/DrawerProgress.js +16 -2
  24. package/esm/components/FormFieldPassword/FormFieldPassword.js +22 -206
  25. package/esm/components/FormFieldPassword/PasswordMeter.js +61 -0
  26. package/esm/components/FormFieldPassword/estimatePassword.js +187 -0
  27. package/esm/components/FormFieldPassword/generatePassword.js +14 -0
  28. package/esm/components/FormFieldPassword/index.js +3 -2
  29. package/esm/components/Icon/Icon.js +1 -1
  30. package/esm/components/List/List.js +1 -1
  31. package/esm/components/ProgressDialog/ProgressDialog.js +2 -1
  32. package/esm/components/Rating/images/rating.svg +5 -5
  33. package/esm/index.js +1 -1
  34. package/package.json +13 -8
  35. package/styleguide/build/bundle.f38c467d.js +2 -0
  36. package/styleguide/build/{bundle.ff1f903a.js.LICENSE.txt → bundle.f38c467d.js.LICENSE.txt} +0 -0
  37. package/styleguide/images/rating.svg +5 -5
  38. package/styleguide/index.html +2 -2
  39. package/types/package.d.ts +5 -0
  40. package/types/src/components/FormFieldPassword/FormFieldPassword.d.ts +91 -0
  41. package/types/src/components/FormFieldPassword/PasswordMeter.d.ts +9 -0
  42. package/types/src/components/FormFieldPassword/estimatePassword.d.ts +13 -0
  43. package/types/src/components/FormFieldPassword/index.d.ts +2 -0
  44. package/cjs/components/FormFieldPassword/passwordScore.js +0 -131
  45. package/esm/components/FormFieldPassword/passwordScore.js +0 -122
  46. package/styleguide/build/bundle.ff1f903a.js +0 -2
@@ -65,6 +65,7 @@ const Dialog = ({
65
65
  closable,
66
66
  onClose,
67
67
  closingConfirmation,
68
+ canClose,
68
69
  ...props
69
70
  }) => {
70
71
  const [isVisible, setIsVisible] = (0, _react.useState)(isOpen);
@@ -175,8 +176,8 @@ const Dialog = ({
175
176
  className: (0, _classnames.default)(baseClassName, className),
176
177
  isOpen: isVisible,
177
178
  onClose: onCloseWithConfirmation,
178
- canCloseOnBackdropClick: closable,
179
- canCloseOnEscapePress: closable,
179
+ canCloseOnBackdropClick: canClose && closable,
180
+ canCloseOnEscapePress: canClose && closable,
180
181
  size: size
181
182
  }, props), (title || subtitle || actions) && /*#__PURE__*/_react.default.createElement("header", {
182
183
  className: `${baseClassName}__header`
@@ -199,6 +200,7 @@ const Dialog = ({
199
200
  className: `${baseClassName}__header-actions`
200
201
  }, actions, closable && /*#__PURE__*/_react.default.createElement(_Button.default, {
201
202
  className: `${baseClassName}__header-close`,
203
+ disabled: !canClose,
202
204
  ghost: true,
203
205
  size: "lg",
204
206
  icon: "cross-mark",
@@ -304,6 +306,12 @@ Dialog.propTypes = {
304
306
  */
305
307
  closable: _propTypes.default.bool,
306
308
 
309
+ /**
310
+ * Disable close dialog button
311
+ * @since 4.0.0
312
+ */
313
+ canClose: _propTypes.default.bool,
314
+
307
315
  /**
308
316
  * On close event handler. Called immediately after dialog closed by "cancel" button or "Esc" key.
309
317
  * @since 0.0.68
@@ -347,6 +355,7 @@ Dialog.defaultProps = {
347
355
  form: undefined,
348
356
  size: 'md',
349
357
  closable: true,
358
+ canClose: true,
350
359
  onClose: undefined,
351
360
  closingConfirmation: undefined,
352
361
  children: undefined,
@@ -30,6 +30,20 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
30
30
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof 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; }
31
31
 
32
32
  // Copyright 1999-2019. Plesk International GmbH. All rights reserved.
33
+ const renderAdditionalButtons = buttons => {
34
+ const buttonProcessing = button => {
35
+ if ( /*#__PURE__*/(0, _react.isValidElement)(button) && button.type === _Button.default) {
36
+ return /*#__PURE__*/(0, _react.cloneElement)(button, {
37
+ size: 'lg'
38
+ });
39
+ }
40
+
41
+ return button;
42
+ };
43
+
44
+ return Array.isArray(buttons) ? buttons.map(buttonProcessing) : buttonProcessing(buttons);
45
+ };
46
+
33
47
  class DrawerProgress extends _react.Component {
34
48
  constructor(...args) {
35
49
  super(...args);
@@ -143,7 +157,7 @@ class DrawerProgress extends _react.Component {
143
157
 
144
158
  const footer = hasFooter ? /*#__PURE__*/_react.default.createElement("div", {
145
159
  className: `${baseClassName}__footer`
146
- }, buttons, canCancel && /*#__PURE__*/_react.default.createElement(_Button.default, {
160
+ }, renderAdditionalButtons(buttons), canCancel && /*#__PURE__*/_react.default.createElement(_Button.default, {
147
161
  onClick: this.handleCancel,
148
162
  size: "lg"
149
163
  }, /*#__PURE__*/_react.default.createElement(_Translate.default, {
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.generatePassword = exports.default = void 0;
8
+ exports.default = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
@@ -13,8 +13,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
13
13
 
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
 
16
- var _propTypes = _interopRequireDefault(require("prop-types"));
17
-
18
16
  var _classnames = _interopRequireDefault(require("classnames"));
19
17
 
20
18
  var _constants = require("../../constants");
@@ -25,11 +23,11 @@ var _FormField = _interopRequireDefault(require("../FormField"));
25
23
 
26
24
  var _Input = _interopRequireDefault(require("../Input"));
27
25
 
28
- var _Popover = _interopRequireDefault(require("../Popover"));
29
-
30
26
  var _Translate = _interopRequireDefault(require("../Translate"));
31
27
 
32
- var _passwordScore = _interopRequireWildcard(require("./passwordScore"));
28
+ var _PasswordMeter = _interopRequireDefault(require("./PasswordMeter"));
29
+
30
+ var _generatePassword = _interopRequireDefault(require("./generatePassword"));
33
31
 
34
32
  var _enUS = _interopRequireDefault(require("./locale/en-US"));
35
33
 
@@ -37,26 +35,12 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
37
35
 
38
36
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof 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; }
39
37
 
40
- // Copyright 1999-2021. Plesk International GmbH. All rights reserved.
41
- const symbolClasses = {
42
- upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
43
- lower: 'abcdefghijklmnopqrstuvwxyz',
44
- number: '0123456789',
45
- special: '!@#$%^&*?_~'
46
- };
38
+ // Copyright 1999-2022. Plesk International GmbH. All rights reserved.
47
39
 
48
- const generatePassword = () => {
49
- const password = ['upper', 'lower', 'lower', 'lower', 'number', 'number', 'special', 'number', 'upper', 'upper', 'lower', 'lower', 'lower', 'lower', 'lower', 'lower'];
50
- return password.sort((a, b) => Math.floor(b.length * Math.random()) - Math.floor(a.length * Math.random())).map(symbolClass => symbolClasses[symbolClass][Math.floor(symbolClasses[symbolClass].length * Math.random())]).join('');
51
- };
52
40
  /**
53
41
  * `FormFieldPassword` component provides secure way to enter a password.
54
42
  * @since 0.0.58
55
43
  */
56
-
57
-
58
- exports.generatePassword = generatePassword;
59
-
60
44
  class FormFieldPassword extends _react.Component {
61
45
  constructor(...args) {
62
46
  super(...args);
@@ -80,118 +64,6 @@ class FormFieldPassword extends _react.Component {
80
64
  (0, _defineProperty2.default)(this, "handleBlur", this.handleClosePasswordMeter);
81
65
  }
82
66
 
83
- passwordScore(value) {
84
- if (!value) {
85
- return {
86
- intent: null,
87
- strength: null,
88
- unusedRules: []
89
- };
90
- }
91
-
92
- const {
93
- passwordScoreRules
94
- } = this.props;
95
- const {
96
- score,
97
- unusedRules
98
- } = (0, _passwordScore.default)(value, passwordScoreRules);
99
- let intent = 'success';
100
-
101
- let strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
102
- content: "FormFieldPassword.strengthVeryStrong",
103
- fallback: _enUS.default.strengthVeryStrong
104
- });
105
-
106
- if (score < 16) {
107
- intent = 'danger';
108
- strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
109
- content: "FormFieldPassword.strengthVeryWeak",
110
- fallback: _enUS.default.strengthVeryWeak
111
- });
112
- } else if (score < 25) {
113
- intent = 'danger';
114
- strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
115
- content: "FormFieldPassword.strengthWeak",
116
- fallback: _enUS.default.strengthWeak
117
- });
118
- } else if (score < 35) {
119
- intent = 'warning';
120
- strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
121
- content: "FormFieldPassword.strengthMedium",
122
- fallback: _enUS.default.strengthMedium
123
- });
124
- } else if (score < 45) {
125
- intent = 'success';
126
- strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
127
- content: "FormFieldPassword.strengthStrong",
128
- fallback: _enUS.default.strengthStrong
129
- });
130
- }
131
-
132
- return {
133
- intent,
134
- strength,
135
- unusedRules
136
- };
137
- }
138
-
139
- renderPasswordMeter(value, target) {
140
- const {
141
- passwordMeterVisible
142
- } = this.state;
143
- const {
144
- passwordMeterProps
145
- } = this.props;
146
- const {
147
- intent,
148
- strength,
149
- unusedRules
150
- } = this.passwordScore(value);
151
- return /*#__PURE__*/_react.default.createElement(_Popover.default, (0, _extends2.default)({
152
- visible: passwordMeterVisible && !!value,
153
- target: target,
154
- targetRef: this.targetRef,
155
- placement: "bottom-right",
156
- intent: intent,
157
- canCloseOnOutsideClick: false,
158
- canCloseOnEscapePress: false,
159
- onClose: this.handleClosePasswordMeter
160
- }, passwordMeterProps), /*#__PURE__*/_react.default.createElement(_Translate.default, {
161
- content: "FormFieldPassword.passwordStrength",
162
- fallback: _enUS.default.passwordStrength,
163
- params: {
164
- strength: /*#__PURE__*/_react.default.createElement("b", null, strength)
165
- }
166
- }), /*#__PURE__*/_react.default.createElement("br", null), unusedRules.length ? /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Translate.default, {
167
- content: "FormFieldPassword.improvePassword",
168
- fallback: _enUS.default.improvePassword
169
- }), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("ul", null, unusedRules.slice(0, 3).map(({
170
- rule
171
- }, index) => {
172
- const {
173
- name
174
- } = rule;
175
- let {
176
- message
177
- } = rule;
178
-
179
- if (name && !message) {
180
- message = /*#__PURE__*/_react.default.createElement(_Translate.default, {
181
- content: `FormFieldPassword.${name}`,
182
- fallback: _enUS.default[name]
183
- });
184
- }
185
-
186
- return /*#__PURE__*/_react.default.createElement("li", {
187
- key: name || index.toString()
188
- }, message);
189
- }))) : /*#__PURE__*/_react.default.createElement(_Translate.default, {
190
- content: "FormFieldPassword.yourPasswordIsStrong",
191
- fallback: _enUS.default.yourPasswordIsStrong
192
- }));
193
- }
194
-
195
67
  renderGenerateButton({
196
68
  setValue,
197
69
  isDisabled
@@ -202,7 +74,7 @@ class FormFieldPassword extends _react.Component {
202
74
  } = this.props;
203
75
  const generateButtonProps = {
204
76
  className: `${baseClassName}__button--generate`,
205
- onClick: () => setValue(generatePassword()),
77
+ onClick: () => setValue((0, _generatePassword.default)()),
206
78
  tooltip: /*#__PURE__*/_react.default.createElement(_Translate.default, {
207
79
  content: "FormFieldPassword.generateButtonHint",
208
80
  fallback: _enUS.default.generateButtonHint
@@ -233,12 +105,15 @@ class FormFieldPassword extends _react.Component {
233
105
  hideGenerateButton,
234
106
  hidePasswordMeter,
235
107
  passwordMeterProps,
236
- passwordScoreRules,
237
108
  size,
238
109
  autoFocus,
239
110
  autoComplete,
240
111
  ...props
241
112
  } = this.props;
113
+ const {
114
+ visible,
115
+ passwordMeterVisible
116
+ } = this.state;
242
117
  return /*#__PURE__*/_react.default.createElement(_FormField.default, (0, _extends2.default)({
243
118
  className: (0, _classnames.default)(baseClassName, className)
244
119
  }, props), ({
@@ -248,18 +123,19 @@ class FormFieldPassword extends _react.Component {
248
123
  setValue,
249
124
  isDisabled
250
125
  }) => {
126
+ const value = getValue('');
127
+
251
128
  const input = /*#__PURE__*/_react.default.createElement(_Input.default, {
252
129
  id: getId(),
253
130
  name: getName(),
254
- type: this.state.visible ? 'text' : 'password',
255
- value: getValue(''),
131
+ type: visible ? 'text' : 'password',
132
+ value: value,
256
133
  onChange: e => {
257
134
  setValue(e.target.value);
258
135
  this.setState({
259
136
  passwordMeterVisible: true
260
137
  });
261
138
  },
262
- onFocus: this.handleFocus,
263
139
  onBlur: this.handleBlur,
264
140
  autoFocus: autoFocus,
265
141
  autoComplete: autoComplete,
@@ -268,8 +144,8 @@ class FormFieldPassword extends _react.Component {
268
144
  suffix: hideShowButton ? null : /*#__PURE__*/_react.default.createElement(_Button.default, {
269
145
  className: `${baseClassName}__button--show`,
270
146
  onClick: this.handleToggleClick,
271
- icon: this.state.visible ? 'visible' : 'invisible',
272
- tooltip: this.state.visible ? /*#__PURE__*/_react.default.createElement(_Translate.default, {
147
+ icon: visible ? 'visible' : 'invisible',
148
+ tooltip: visible ? /*#__PURE__*/_react.default.createElement(_Translate.default, {
273
149
  content: "FormFieldPassword.hidePassword",
274
150
  fallback: _enUS.default.hidePassword
275
151
  }) : /*#__PURE__*/_react.default.createElement(_Translate.default, {
@@ -289,7 +165,12 @@ class FormFieldPassword extends _react.Component {
289
165
  className: (0, _classnames.default)(`${baseClassName}__control`, `${baseClassName}__control--${size}`)
290
166
  }, /*#__PURE__*/_react.default.createElement("div", {
291
167
  className: (0, _classnames.default)(`${baseClassName}__field`, `${baseClassName}__field--${size}`)
292
- }, hidePasswordMeter ? input : this.renderPasswordMeter(getValue(), input)), hideGenerateButton ? null : this.renderGenerateButton({
168
+ }, hidePasswordMeter ? input : /*#__PURE__*/_react.default.createElement(_PasswordMeter.default, (0, _extends2.default)({
169
+ value: value,
170
+ targetRef: this.targetRef,
171
+ visible: passwordMeterVisible && value !== '',
172
+ onClose: this.handleClosePasswordMeter
173
+ }, passwordMeterProps), input)), hideGenerateButton ? null : this.renderGenerateButton({
293
174
  setValue,
294
175
  isDisabled
295
176
  }));
@@ -298,88 +179,17 @@ class FormFieldPassword extends _react.Component {
298
179
 
299
180
  }
300
181
 
301
- FormFieldPassword.propTypes = {
302
- /**
303
- * Is show button hidden?
304
- * @since 0.0.59
305
- */
306
- hideShowButton: _propTypes.default.bool,
307
-
308
- /**
309
- * Is generate button hidden?
310
- * @since 0.0.59
311
- */
312
- hideGenerateButton: _propTypes.default.bool,
313
-
314
- /**
315
- * Is password meter hidden?
316
- * @since 0.0.59
317
- */
318
- hidePasswordMeter: _propTypes.default.bool,
319
-
320
- /**
321
- * Additional props for password meter. . See [Popover](#!/Popover) for more information.
322
- * @since 1.5.6
323
- */
324
- passwordMeterProps: _propTypes.default.object,
325
-
326
- /**
327
- * A set of custom password score rules.
328
- * @since 3.21.0
329
- */
330
- passwordScoreRules: _propTypes.default.arrayOf(_propTypes.default.shape({
331
- name: _propTypes.default.string,
332
- message: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.element]),
333
- score: _propTypes.default.func.isRequired
334
- })),
335
-
336
- /**
337
- * Size of the control
338
- * @since 1.5.6
339
- */
340
- size: _propTypes.default.oneOf(['md', 'lg', 'xl', 'fill']),
341
-
342
- /**
343
- * The browser will automatically focus on the component upon rendering the screen
344
- * @since 1.9.0
345
- */
346
- autoFocus: _propTypes.default.bool,
347
-
348
- /**
349
- * Prevent password autocompletion.
350
- * @since 2.5.1
351
- */
352
- autoComplete: _propTypes.default.oneOf(['new-password']),
353
-
354
- /**
355
- * A render function for customizing the password generation button.
356
- * @since 3.13.0
357
- */
358
- generateButton: _propTypes.default.func,
359
-
360
- /**
361
- * @ignore
362
- */
363
- className: _propTypes.default.string,
364
-
365
- /**
366
- * @ignore
367
- */
368
- baseClassName: _propTypes.default.string
369
- };
370
- FormFieldPassword.defaultProps = {
182
+ (0, _defineProperty2.default)(FormFieldPassword, "defaultProps", {
371
183
  hideShowButton: false,
372
184
  generateButton: undefined,
373
185
  hideGenerateButton: false,
374
186
  hidePasswordMeter: false,
375
187
  passwordMeterProps: {},
376
- passwordScoreRules: undefined,
377
188
  size: 'md',
378
189
  autoFocus: undefined,
379
190
  autoComplete: undefined,
380
191
  className: undefined,
381
192
  baseClassName: `${_constants.CLS_PREFIX}form-field-password`
382
- };
383
- FormFieldPassword.PASSWORD_SCORE_RULES = _passwordScore.PASSWORD_SCORE_RULES;
193
+ });
384
194
  var _default = FormFieldPassword;
385
195
  exports.default = _default;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ var _Popover = _interopRequireDefault(require("../Popover"));
15
+
16
+ var _Translate = _interopRequireDefault(require("../Translate"));
17
+
18
+ var _estimatePassword = _interopRequireWildcard(require("./estimatePassword"));
19
+
20
+ var _enUS = _interopRequireDefault(require("./locale/en-US"));
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof 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; }
25
+
26
+ // Copyright 1999-2022. Plesk International GmbH. All rights reserved.
27
+ const strengthIntents = {
28
+ VeryWeak: 'danger',
29
+ Weak: 'danger',
30
+ Medium: 'warning',
31
+ Strong: 'success',
32
+ VeryStrong: 'success'
33
+ };
34
+
35
+ const PasswordMeter = ({
36
+ value,
37
+ visible,
38
+ onEstimate,
39
+ children,
40
+ ...props
41
+ }) => {
42
+ const [result, setResult] = (0, _react.useState)(null);
43
+ (0, _react.useEffect)(() => {
44
+ if (!visible) {
45
+ return;
46
+ }
47
+
48
+ Promise.resolve(onEstimate ? onEstimate(value, _estimatePassword.default, _estimatePassword.DEFAULT_RULES) : (0, _estimatePassword.default)(value)).then(result => {
49
+ setResult(result);
50
+ });
51
+ }, [visible, value, onEstimate]);
52
+ return /*#__PURE__*/_react.default.createElement(_Popover.default, (0, _extends2.default)({
53
+ visible: visible && result !== null,
54
+ target: children,
55
+ placement: "bottom-right",
56
+ intent: result ? strengthIntents[result.strength] : undefined,
57
+ canCloseOnOutsideClick: false,
58
+ canCloseOnEscapePress: false
59
+ }, props), result !== null && result !== void 0 && result.strength ? /*#__PURE__*/_react.default.createElement(_Translate.default, {
60
+ component: "div",
61
+ content: "FormFieldPassword.passwordStrength",
62
+ fallback: _enUS.default.passwordStrength,
63
+ params: {
64
+ strength: /*#__PURE__*/_react.default.createElement("b", null, /*#__PURE__*/_react.default.createElement(_Translate.default, {
65
+ content: `FormFieldPassword.strength${result === null || result === void 0 ? void 0 : result.strength}`,
66
+ fallback: _enUS.default[`strength${result === null || result === void 0 ? void 0 : result.strength}`]
67
+ }))
68
+ }
69
+ }) : null, result !== null && result !== void 0 && result.suggestions.length ? /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Translate.default, {
70
+ content: "FormFieldPassword.improvePassword",
71
+ fallback: _enUS.default.improvePassword
72
+ }), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("ul", null, result.suggestions.slice(0, 3).map((suggestion, index) => /*#__PURE__*/_react.default.createElement("li", {
73
+ key: index.toString()
74
+ }, suggestion)))) : /*#__PURE__*/_react.default.createElement(_Translate.default, {
75
+ content: "FormFieldPassword.yourPasswordIsStrong",
76
+ fallback: _enUS.default.yourPasswordIsStrong
77
+ }));
78
+ };
79
+
80
+ var _default = PasswordMeter;
81
+ exports.default = _default;