@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.
- package/cjs/components/Dialog/Dialog.js +11 -2
- package/cjs/components/Drawer/DrawerProgress.js +15 -1
- package/cjs/components/FormFieldPassword/FormFieldPassword.js +24 -214
- package/cjs/components/FormFieldPassword/PasswordMeter.js +81 -0
- package/cjs/components/FormFieldPassword/estimatePassword.js +203 -0
- package/cjs/components/FormFieldPassword/generatePassword.js +21 -0
- package/cjs/components/FormFieldPassword/index.js +5 -5
- package/cjs/components/Icon/Icon.js +1 -1
- package/cjs/components/List/List.js +1 -1
- package/cjs/components/ProgressDialog/ProgressDialog.js +2 -1
- package/cjs/components/Rating/images/rating.svg +5 -5
- package/cjs/index.js +1 -1
- package/dist/images/rating.svg +5 -5
- package/dist/plesk-ui-library-rtl.css +1 -1
- package/dist/plesk-ui-library-rtl.css.map +1 -1
- package/dist/plesk-ui-library.css +1 -1
- package/dist/plesk-ui-library.css.map +1 -1
- package/dist/plesk-ui-library.js +336 -309
- package/dist/plesk-ui-library.js.map +1 -1
- package/dist/plesk-ui-library.min.js +5 -5
- package/dist/plesk-ui-library.min.js.map +1 -1
- package/esm/components/Dialog/Dialog.js +11 -2
- package/esm/components/Drawer/DrawerProgress.js +16 -2
- package/esm/components/FormFieldPassword/FormFieldPassword.js +22 -206
- package/esm/components/FormFieldPassword/PasswordMeter.js +61 -0
- package/esm/components/FormFieldPassword/estimatePassword.js +187 -0
- package/esm/components/FormFieldPassword/generatePassword.js +14 -0
- package/esm/components/FormFieldPassword/index.js +3 -2
- package/esm/components/Icon/Icon.js +1 -1
- package/esm/components/List/List.js +1 -1
- package/esm/components/ProgressDialog/ProgressDialog.js +2 -1
- package/esm/components/Rating/images/rating.svg +5 -5
- package/esm/index.js +1 -1
- package/package.json +13 -8
- package/styleguide/build/bundle.f38c467d.js +2 -0
- package/styleguide/build/{bundle.ff1f903a.js.LICENSE.txt → bundle.f38c467d.js.LICENSE.txt} +0 -0
- package/styleguide/images/rating.svg +5 -5
- package/styleguide/index.html +2 -2
- package/types/package.d.ts +5 -0
- package/types/src/components/FormFieldPassword/FormFieldPassword.d.ts +91 -0
- package/types/src/components/FormFieldPassword/PasswordMeter.d.ts +9 -0
- package/types/src/components/FormFieldPassword/estimatePassword.d.ts +13 -0
- package/types/src/components/FormFieldPassword/index.d.ts +2 -0
- package/cjs/components/FormFieldPassword/passwordScore.js +0 -131
- package/esm/components/FormFieldPassword/passwordScore.js +0 -122
- 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.
|
|
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
|
|
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-
|
|
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(
|
|
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:
|
|
255
|
-
value:
|
|
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:
|
|
272
|
-
tooltip:
|
|
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 :
|
|
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
|
|
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;
|