@plesk/ui-library 3.27.2 → 3.28.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.
- package/cjs/components/Dialog/Dialog.js +11 -2
- package/cjs/components/Form/Form.js +4 -2
- package/cjs/components/FormFieldPassword/FormFieldPassword.js +25 -239
- package/cjs/components/FormFieldPassword/PasswordMeter.js +81 -0
- package/cjs/components/FormFieldPassword/estimatePassword.js +212 -0
- package/cjs/components/FormFieldPassword/generatePassword.js +21 -0
- package/cjs/components/FormFieldPassword/index.js +5 -5
- package/cjs/components/Icon/constants.js +2 -2
- package/cjs/components/Icon/images/symbols.svg +9 -1
- package/cjs/components/ProgressDialog/ProgressDialog.js +2 -1
- package/cjs/components/Skeleton/Skeleton.js +49 -0
- package/cjs/components/Skeleton/Skeleton.stories.js +26 -0
- package/cjs/components/Skeleton/SkeletonTabs.js +41 -0
- package/cjs/components/Skeleton/SkeletonTabs.stories.js +17 -0
- package/cjs/components/Skeleton/SkeletonText.js +45 -0
- package/cjs/components/Skeleton/SkeletonText.stories.js +35 -0
- package/cjs/components/Skeleton/index.js +31 -0
- package/cjs/components/index.js +22 -1
- package/cjs/components/utils.js +6 -2
- package/cjs/index.js +1 -1
- package/dist/images/symbols.svg +9 -1
- 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 +607 -339
- 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/Form/Form.js +4 -2
- package/esm/components/FormFieldPassword/FormFieldPassword.js +23 -232
- package/esm/components/FormFieldPassword/PasswordMeter.js +61 -0
- package/esm/components/FormFieldPassword/estimatePassword.js +196 -0
- package/esm/components/FormFieldPassword/generatePassword.js +14 -0
- package/esm/components/FormFieldPassword/index.js +3 -2
- package/esm/components/Icon/constants.js +2 -2
- package/esm/components/Icon/images/symbols.svg +9 -1
- package/esm/components/ProgressDialog/ProgressDialog.js +2 -1
- package/esm/components/Skeleton/Skeleton.js +34 -0
- package/esm/components/Skeleton/Skeleton.stories.js +10 -0
- package/esm/components/Skeleton/SkeletonTabs.js +26 -0
- package/esm/components/Skeleton/SkeletonTabs.stories.js +4 -0
- package/esm/components/Skeleton/SkeletonText.js +30 -0
- package/esm/components/Skeleton/SkeletonText.stories.js +16 -0
- package/esm/components/Skeleton/index.js +4 -0
- package/esm/components/index.js +3 -1
- package/esm/components/utils.js +2 -1
- package/esm/index.js +1 -1
- package/package.json +3 -3
- package/styleguide/build/bundle.24d5b0eb.js +2 -0
- package/styleguide/build/{bundle.1c9c8500.js.LICENSE.txt → bundle.24d5b0eb.js.LICENSE.txt} +0 -0
- package/styleguide/images/symbols.svg +9 -1
- package/styleguide/index.html +2 -2
- 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/types/src/components/Icon/constants.d.ts +1 -1
- package/types/src/components/Skeleton/Skeleton.d.ts +49 -0
- package/types/src/components/Skeleton/Skeleton.stories.d.ts +12 -0
- package/types/src/components/Skeleton/SkeletonTabs.d.ts +23 -0
- package/types/src/components/Skeleton/SkeletonTabs.stories.d.ts +6 -0
- package/types/src/components/Skeleton/SkeletonText.d.ts +34 -0
- package/types/src/components/Skeleton/SkeletonText.stories.d.ts +38 -0
- package/types/src/components/Skeleton/index.d.ts +3 -0
- package/types/src/components/index.d.ts +2 -0
- package/types/src/components/utils.d.ts +1 -0
- package/cjs/components/FormFieldPassword/passwordScore.js +0 -132
- package/esm/components/FormFieldPassword/passwordScore.js +0 -123
- package/styleguide/build/bundle.1c9c8500.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,
|
|
@@ -267,9 +267,11 @@ class Form extends _react.Component {
|
|
|
267
267
|
let field;
|
|
268
268
|
let fieldErrors;
|
|
269
269
|
Object.keys(this.fields).every(name => {
|
|
270
|
-
|
|
270
|
+
const foundError = (0, _utils.getIn)(errors, name);
|
|
271
|
+
|
|
272
|
+
if (foundError && typeof foundError === 'object' && Object.keys(foundError).length > 0) {
|
|
271
273
|
field = this.fields[name];
|
|
272
|
-
fieldErrors =
|
|
274
|
+
fieldErrors = foundError;
|
|
273
275
|
return false;
|
|
274
276
|
}
|
|
275
277
|
|
|
@@ -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,40 +35,19 @@ 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);
|
|
63
47
|
(0, _defineProperty2.default)(this, "state", {
|
|
64
48
|
visible: false,
|
|
65
|
-
passwordMeterVisible: false
|
|
66
|
-
scoreResult: {
|
|
67
|
-
password: null,
|
|
68
|
-
intent: null,
|
|
69
|
-
strength: null,
|
|
70
|
-
unusedRules: []
|
|
71
|
-
}
|
|
49
|
+
passwordMeterVisible: false
|
|
72
50
|
});
|
|
73
|
-
(0, _defineProperty2.default)(this, "passwordOnScoring", null);
|
|
74
51
|
(0, _defineProperty2.default)(this, "targetRef", /*#__PURE__*/(0, _react.createRef)());
|
|
75
52
|
(0, _defineProperty2.default)(this, "handleToggleClick", () => {
|
|
76
53
|
this.setState(({
|
|
@@ -87,135 +64,6 @@ class FormFieldPassword extends _react.Component {
|
|
|
87
64
|
(0, _defineProperty2.default)(this, "handleBlur", this.handleClosePasswordMeter);
|
|
88
65
|
}
|
|
89
66
|
|
|
90
|
-
async passwordScore(value) {
|
|
91
|
-
if (!value) {
|
|
92
|
-
return {
|
|
93
|
-
password: null,
|
|
94
|
-
intent: null,
|
|
95
|
-
strength: null,
|
|
96
|
-
unusedRules: []
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const {
|
|
101
|
-
passwordScoreRules
|
|
102
|
-
} = this.props;
|
|
103
|
-
const {
|
|
104
|
-
password,
|
|
105
|
-
score,
|
|
106
|
-
unusedRules
|
|
107
|
-
} = await (0, _passwordScore.default)(value, passwordScoreRules);
|
|
108
|
-
let intent = 'success';
|
|
109
|
-
|
|
110
|
-
let strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
111
|
-
content: "FormFieldPassword.strengthVeryStrong",
|
|
112
|
-
fallback: _enUS.default.strengthVeryStrong
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
if (score < 16) {
|
|
116
|
-
intent = 'danger';
|
|
117
|
-
strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
118
|
-
content: "FormFieldPassword.strengthVeryWeak",
|
|
119
|
-
fallback: _enUS.default.strengthVeryWeak
|
|
120
|
-
});
|
|
121
|
-
} else if (score < 25) {
|
|
122
|
-
intent = 'danger';
|
|
123
|
-
strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
124
|
-
content: "FormFieldPassword.strengthWeak",
|
|
125
|
-
fallback: _enUS.default.strengthWeak
|
|
126
|
-
});
|
|
127
|
-
} else if (score < 35) {
|
|
128
|
-
intent = 'warning';
|
|
129
|
-
strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
130
|
-
content: "FormFieldPassword.strengthMedium",
|
|
131
|
-
fallback: _enUS.default.strengthMedium
|
|
132
|
-
});
|
|
133
|
-
} else if (score < 45) {
|
|
134
|
-
intent = 'success';
|
|
135
|
-
strength = /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
136
|
-
content: "FormFieldPassword.strengthStrong",
|
|
137
|
-
fallback: _enUS.default.strengthStrong
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return {
|
|
142
|
-
password,
|
|
143
|
-
intent,
|
|
144
|
-
strength,
|
|
145
|
-
unusedRules
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
renderPasswordMeter(value, target) {
|
|
150
|
-
const {
|
|
151
|
-
passwordMeterVisible
|
|
152
|
-
} = this.state;
|
|
153
|
-
const {
|
|
154
|
-
passwordMeterProps
|
|
155
|
-
} = this.props;
|
|
156
|
-
const {
|
|
157
|
-
password,
|
|
158
|
-
intent,
|
|
159
|
-
strength,
|
|
160
|
-
unusedRules
|
|
161
|
-
} = this.state.scoreResult;
|
|
162
|
-
|
|
163
|
-
if (!!value && value !== password && value !== this.passwordOnScoring) {
|
|
164
|
-
this.passwordOnScoring = value;
|
|
165
|
-
this.passwordScore(value).then(scoreResult => {
|
|
166
|
-
if (this.passwordOnScoring === scoreResult.password) {
|
|
167
|
-
this.passwordOnScoring = null;
|
|
168
|
-
this.setState({
|
|
169
|
-
scoreResult
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return /*#__PURE__*/_react.default.createElement(_Popover.default, (0, _extends2.default)({
|
|
176
|
-
visible: passwordMeterVisible && !!value,
|
|
177
|
-
target: target,
|
|
178
|
-
targetRef: this.targetRef,
|
|
179
|
-
placement: "bottom-right",
|
|
180
|
-
intent: intent,
|
|
181
|
-
canCloseOnOutsideClick: false,
|
|
182
|
-
canCloseOnEscapePress: false,
|
|
183
|
-
onClose: this.handleClosePasswordMeter
|
|
184
|
-
}, passwordMeterProps), /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
185
|
-
content: "FormFieldPassword.passwordStrength",
|
|
186
|
-
fallback: _enUS.default.passwordStrength,
|
|
187
|
-
params: {
|
|
188
|
-
strength: /*#__PURE__*/_react.default.createElement("b", null, strength)
|
|
189
|
-
}
|
|
190
|
-
}), /*#__PURE__*/_react.default.createElement("br", null), unusedRules.length ? /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
191
|
-
content: "FormFieldPassword.improvePassword",
|
|
192
|
-
fallback: _enUS.default.improvePassword
|
|
193
|
-
}), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("ul", null, unusedRules.slice(0, 3).map(({
|
|
194
|
-
rule
|
|
195
|
-
}, index) => {
|
|
196
|
-
const {
|
|
197
|
-
name
|
|
198
|
-
} = rule;
|
|
199
|
-
let {
|
|
200
|
-
message
|
|
201
|
-
} = rule;
|
|
202
|
-
|
|
203
|
-
if (name && !message) {
|
|
204
|
-
message = /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
205
|
-
content: `FormFieldPassword.${name}`,
|
|
206
|
-
fallback: _enUS.default[name]
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
return /*#__PURE__*/_react.default.createElement("li", {
|
|
211
|
-
key: name || index.toString()
|
|
212
|
-
}, message);
|
|
213
|
-
}))) : /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
214
|
-
content: "FormFieldPassword.yourPasswordIsStrong",
|
|
215
|
-
fallback: _enUS.default.yourPasswordIsStrong
|
|
216
|
-
}));
|
|
217
|
-
}
|
|
218
|
-
|
|
219
67
|
renderGenerateButton({
|
|
220
68
|
setValue,
|
|
221
69
|
isDisabled
|
|
@@ -226,7 +74,7 @@ class FormFieldPassword extends _react.Component {
|
|
|
226
74
|
} = this.props;
|
|
227
75
|
const generateButtonProps = {
|
|
228
76
|
className: `${baseClassName}__button--generate`,
|
|
229
|
-
onClick: () => setValue(
|
|
77
|
+
onClick: () => setValue((0, _generatePassword.default)()),
|
|
230
78
|
tooltip: /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
231
79
|
content: "FormFieldPassword.generateButtonHint",
|
|
232
80
|
fallback: _enUS.default.generateButtonHint
|
|
@@ -257,12 +105,15 @@ class FormFieldPassword extends _react.Component {
|
|
|
257
105
|
hideGenerateButton,
|
|
258
106
|
hidePasswordMeter,
|
|
259
107
|
passwordMeterProps,
|
|
260
|
-
passwordScoreRules,
|
|
261
108
|
size,
|
|
262
109
|
autoFocus,
|
|
263
110
|
autoComplete,
|
|
264
111
|
...props
|
|
265
112
|
} = this.props;
|
|
113
|
+
const {
|
|
114
|
+
visible,
|
|
115
|
+
passwordMeterVisible
|
|
116
|
+
} = this.state;
|
|
266
117
|
return /*#__PURE__*/_react.default.createElement(_FormField.default, (0, _extends2.default)({
|
|
267
118
|
className: (0, _classnames.default)(baseClassName, className)
|
|
268
119
|
}, props), ({
|
|
@@ -272,18 +123,19 @@ class FormFieldPassword extends _react.Component {
|
|
|
272
123
|
setValue,
|
|
273
124
|
isDisabled
|
|
274
125
|
}) => {
|
|
126
|
+
const value = getValue('');
|
|
127
|
+
|
|
275
128
|
const input = /*#__PURE__*/_react.default.createElement(_Input.default, {
|
|
276
129
|
id: getId(),
|
|
277
130
|
name: getName(),
|
|
278
|
-
type:
|
|
279
|
-
value:
|
|
131
|
+
type: visible ? 'text' : 'password',
|
|
132
|
+
value: value,
|
|
280
133
|
onChange: e => {
|
|
281
134
|
setValue(e.target.value);
|
|
282
135
|
this.setState({
|
|
283
136
|
passwordMeterVisible: true
|
|
284
137
|
});
|
|
285
138
|
},
|
|
286
|
-
onFocus: this.handleFocus,
|
|
287
139
|
onBlur: this.handleBlur,
|
|
288
140
|
autoFocus: autoFocus,
|
|
289
141
|
autoComplete: autoComplete,
|
|
@@ -292,8 +144,8 @@ class FormFieldPassword extends _react.Component {
|
|
|
292
144
|
suffix: hideShowButton ? null : /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
293
145
|
className: `${baseClassName}__button--show`,
|
|
294
146
|
onClick: this.handleToggleClick,
|
|
295
|
-
icon:
|
|
296
|
-
tooltip:
|
|
147
|
+
icon: visible ? 'visible' : 'invisible',
|
|
148
|
+
tooltip: visible ? /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
297
149
|
content: "FormFieldPassword.hidePassword",
|
|
298
150
|
fallback: _enUS.default.hidePassword
|
|
299
151
|
}) : /*#__PURE__*/_react.default.createElement(_Translate.default, {
|
|
@@ -313,7 +165,12 @@ class FormFieldPassword extends _react.Component {
|
|
|
313
165
|
className: (0, _classnames.default)(`${baseClassName}__control`, `${baseClassName}__control--${size}`)
|
|
314
166
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
315
167
|
className: (0, _classnames.default)(`${baseClassName}__field`, `${baseClassName}__field--${size}`)
|
|
316
|
-
}, 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({
|
|
317
174
|
setValue,
|
|
318
175
|
isDisabled
|
|
319
176
|
}));
|
|
@@ -322,88 +179,17 @@ class FormFieldPassword extends _react.Component {
|
|
|
322
179
|
|
|
323
180
|
}
|
|
324
181
|
|
|
325
|
-
FormFieldPassword
|
|
326
|
-
/**
|
|
327
|
-
* Is show button hidden?
|
|
328
|
-
* @since 0.0.59
|
|
329
|
-
*/
|
|
330
|
-
hideShowButton: _propTypes.default.bool,
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Is generate button hidden?
|
|
334
|
-
* @since 0.0.59
|
|
335
|
-
*/
|
|
336
|
-
hideGenerateButton: _propTypes.default.bool,
|
|
337
|
-
|
|
338
|
-
/**
|
|
339
|
-
* Is password meter hidden?
|
|
340
|
-
* @since 0.0.59
|
|
341
|
-
*/
|
|
342
|
-
hidePasswordMeter: _propTypes.default.bool,
|
|
343
|
-
|
|
344
|
-
/**
|
|
345
|
-
* Additional props for password meter. . See [Popover](#!/Popover) for more information.
|
|
346
|
-
* @since 1.5.6
|
|
347
|
-
*/
|
|
348
|
-
passwordMeterProps: _propTypes.default.object,
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* A set of custom password score rules.
|
|
352
|
-
* @since 3.21.0
|
|
353
|
-
*/
|
|
354
|
-
passwordScoreRules: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
355
|
-
name: _propTypes.default.string,
|
|
356
|
-
message: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.element]),
|
|
357
|
-
score: _propTypes.default.func.isRequired
|
|
358
|
-
})),
|
|
359
|
-
|
|
360
|
-
/**
|
|
361
|
-
* Size of the control
|
|
362
|
-
* @since 1.5.6
|
|
363
|
-
*/
|
|
364
|
-
size: _propTypes.default.oneOf(['md', 'lg', 'xl', 'fill']),
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* The browser will automatically focus on the component upon rendering the screen
|
|
368
|
-
* @since 1.9.0
|
|
369
|
-
*/
|
|
370
|
-
autoFocus: _propTypes.default.bool,
|
|
371
|
-
|
|
372
|
-
/**
|
|
373
|
-
* Prevent password autocompletion.
|
|
374
|
-
* @since 2.5.1
|
|
375
|
-
*/
|
|
376
|
-
autoComplete: _propTypes.default.oneOf(['new-password']),
|
|
377
|
-
|
|
378
|
-
/**
|
|
379
|
-
* A render function for customizing the password generation button.
|
|
380
|
-
* @since 3.13.0
|
|
381
|
-
*/
|
|
382
|
-
generateButton: _propTypes.default.func,
|
|
383
|
-
|
|
384
|
-
/**
|
|
385
|
-
* @ignore
|
|
386
|
-
*/
|
|
387
|
-
className: _propTypes.default.string,
|
|
388
|
-
|
|
389
|
-
/**
|
|
390
|
-
* @ignore
|
|
391
|
-
*/
|
|
392
|
-
baseClassName: _propTypes.default.string
|
|
393
|
-
};
|
|
394
|
-
FormFieldPassword.defaultProps = {
|
|
182
|
+
(0, _defineProperty2.default)(FormFieldPassword, "defaultProps", {
|
|
395
183
|
hideShowButton: false,
|
|
396
184
|
generateButton: undefined,
|
|
397
185
|
hideGenerateButton: false,
|
|
398
186
|
hidePasswordMeter: false,
|
|
399
187
|
passwordMeterProps: {},
|
|
400
|
-
passwordScoreRules: undefined,
|
|
401
188
|
size: 'md',
|
|
402
189
|
autoFocus: undefined,
|
|
403
190
|
autoComplete: undefined,
|
|
404
191
|
className: undefined,
|
|
405
192
|
baseClassName: `${_constants.CLS_PREFIX}form-field-password`
|
|
406
|
-
};
|
|
407
|
-
FormFieldPassword.PASSWORD_SCORE_RULES = _passwordScore.PASSWORD_SCORE_RULES;
|
|
193
|
+
});
|
|
408
194
|
var _default = FormFieldPassword;
|
|
409
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;
|