@libs-ui/components-inputs-password 0.2.356-42 → 0.2.356-43
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/README.md
CHANGED
|
@@ -1,147 +1,422 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @libs-ui/components-inputs-password
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> Component nhập liệu mật khẩu với tính năng ẩn/hiện, kiểm tra quy tắc bảo mật và tự động tạo mật khẩu ngẫu nhiên.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Giới thiệu
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
- ✅ **Validation phức tạp**: Kiểm tra các quy tắc như độ dài tối thiểu/tối đa, sự xuất hiện của chữ hoa, chữ thường, số và ký tự đặc biệt.
|
|
9
|
-
- 🎲 **Tạo mật khẩu ngẫu nhiên**: Hỗ trợ generate mật khẩu dựa trên cấu hình bảo mật được thiết lập.
|
|
10
|
-
- 🛠️ **Tích hợp Validation**: Sử dụng `LibsUiComponentsInputsValidComponent` để hiển thị lỗi và quản lý trạng thái hợp lệ.
|
|
11
|
-
- 🎨 **Tùy biến cao**: Cho phép tùy chỉnh icon, placeholder, label và các thuộc tính CSS.
|
|
7
|
+
`@libs-ui/components-inputs-password` là component chuyên dụng để nhận input mật khẩu trong Angular. Component cung cấp tính năng chuyển đổi ẩn/hiện mật khẩu, hiển thị trực quan trạng thái đáp ứng từng quy tắc bảo mật (độ dài, ký tự hoa, thường, số, ký tự đặc biệt), và hỗ trợ tự động sinh mật khẩu ngẫu nhiên thỏa mãn cấu hình đã định.
|
|
12
8
|
|
|
13
|
-
##
|
|
9
|
+
## Tính năng
|
|
10
|
+
|
|
11
|
+
- ✅ Ẩn/hiện mật khẩu với icon mắt chuyển đổi động
|
|
12
|
+
- ✅ Kiểm tra quy tắc bảo mật: độ dài tối thiểu/tối đa, chữ hoa, chữ thường, chữ số, ký tự đặc biệt
|
|
13
|
+
- ✅ Hiển thị trực quan từng quy tắc đã thỏa mãn hay chưa (màu xanh/xám)
|
|
14
|
+
- ✅ Hỗ trợ 2 chế độ kiểm tra: `key: 'all'` (phải đáp ứng toàn bộ) hoặc theo số lượng quy tắc tối thiểu
|
|
15
|
+
- ✅ Tự động sinh mật khẩu ngẫu nhiên theo cấu hình bảo mật
|
|
16
|
+
- ✅ Tích hợp với `LibsUiComponentsInputsValidComponent` — hỗ trợ required, minLength, pattern validation
|
|
17
|
+
- ✅ Hỗ trợ chế độ readonly, label, placeholder, icon tùy chỉnh
|
|
18
|
+
- ✅ Ngăn tự động điền mật khẩu của trình duyệt (autocomplete)
|
|
19
|
+
- ✅ Cung cấp `FunctionsControl` getter để parent gọi `checkIsValid()` qua ViewChild
|
|
20
|
+
|
|
21
|
+
## Khi nào sử dụng
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
- Form đăng nhập, đăng ký tài khoản cần trường nhập mật khẩu tiêu chuẩn
|
|
24
|
+
- Trang đổi mật khẩu cần hiển thị checklist quy tắc bảo mật trực quan
|
|
25
|
+
- Form tạo tài khoản có nút sinh mật khẩu ngẫu nhiên cho admin
|
|
26
|
+
- Bất kỳ trường nhập liệu nào cần giao diện ẩn/hiện mật khẩu nhất quán trong toàn ứng dụng
|
|
27
|
+
|
|
28
|
+
## Cài đặt
|
|
16
29
|
|
|
17
30
|
```bash
|
|
18
31
|
npm install @libs-ui/components-inputs-password
|
|
19
32
|
```
|
|
20
33
|
|
|
21
|
-
##
|
|
22
|
-
|
|
23
|
-
### Import Module
|
|
34
|
+
## Import
|
|
24
35
|
|
|
25
36
|
```typescript
|
|
26
37
|
import { LibsUiComponentsInputsPasswordComponent } from '@libs-ui/components-inputs-password';
|
|
38
|
+
import { IConfig, IContentWhenHiddenOrShowPassword } from '@libs-ui/components-inputs-password';
|
|
27
39
|
|
|
28
40
|
@Component({
|
|
29
41
|
standalone: true,
|
|
30
42
|
imports: [LibsUiComponentsInputsPasswordComponent],
|
|
31
|
-
// ...
|
|
32
43
|
})
|
|
33
44
|
export class YourComponent {}
|
|
34
45
|
```
|
|
35
46
|
|
|
36
|
-
|
|
47
|
+
## Ví dụ sử dụng
|
|
48
|
+
|
|
49
|
+
### 1. Input mật khẩu cơ bản (đăng nhập)
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
// login.component.ts
|
|
53
|
+
import { LibsUiComponentsInputsPasswordComponent } from '@libs-ui/components-inputs-password';
|
|
54
|
+
import { signal } from '@angular/core';
|
|
55
|
+
|
|
56
|
+
@Component({
|
|
57
|
+
standalone: true,
|
|
58
|
+
imports: [LibsUiComponentsInputsPasswordComponent],
|
|
59
|
+
templateUrl: './login.component.html',
|
|
60
|
+
})
|
|
61
|
+
export class LoginComponent {
|
|
62
|
+
protected loginData = signal<Record<string, string>>({ password: '' });
|
|
63
|
+
}
|
|
64
|
+
```
|
|
37
65
|
|
|
38
66
|
```html
|
|
67
|
+
<!-- login.component.html -->
|
|
39
68
|
<libs_ui-components-inputs-password
|
|
40
69
|
[fieldNameBind]="'password'"
|
|
41
70
|
[(item)]="loginData"
|
|
42
71
|
[isPassword]="true"
|
|
43
|
-
[placeholder]="'Nhập mật khẩu của bạn'"
|
|
72
|
+
[placeholder]="'Nhập mật khẩu của bạn'">
|
|
73
|
+
</libs_ui-components-inputs-password>
|
|
44
74
|
```
|
|
45
75
|
|
|
46
|
-
###
|
|
76
|
+
### 2. Input mật khẩu bảo mật mạnh (đăng ký / đổi mật khẩu)
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// register.component.ts
|
|
80
|
+
import { LibsUiComponentsInputsPasswordComponent, IConfig } from '@libs-ui/components-inputs-password';
|
|
81
|
+
import { signal } from '@angular/core';
|
|
82
|
+
|
|
83
|
+
@Component({
|
|
84
|
+
standalone: true,
|
|
85
|
+
imports: [LibsUiComponentsInputsPasswordComponent],
|
|
86
|
+
templateUrl: './register.component.html',
|
|
87
|
+
})
|
|
88
|
+
export class RegisterComponent {
|
|
89
|
+
protected accountData = signal<Record<string, string>>({ newPassword: '' });
|
|
90
|
+
|
|
91
|
+
readonly secureConfig: IConfig = {
|
|
92
|
+
length_min: 8,
|
|
93
|
+
length_max: 16,
|
|
94
|
+
uppercase: 1,
|
|
95
|
+
lowercase: 1,
|
|
96
|
+
number: 1,
|
|
97
|
+
symbol: 1,
|
|
98
|
+
key: 'all', // phải thỏa mãn toàn bộ quy tắc
|
|
99
|
+
value: '4',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
```
|
|
47
103
|
|
|
48
104
|
```html
|
|
105
|
+
<!-- register.component.html -->
|
|
49
106
|
<libs_ui-components-inputs-password
|
|
50
107
|
[fieldNameBind]="'newPassword'"
|
|
51
108
|
[(item)]="accountData"
|
|
52
109
|
[isPassword]="true"
|
|
53
|
-
[config]="
|
|
54
|
-
[placeholder]="'
|
|
110
|
+
[config]="secureConfig"
|
|
111
|
+
[placeholder]="'Tối thiểu 8 ký tự, đủ hoa, thường, số, ký tự đặc biệt'">
|
|
112
|
+
</libs_ui-components-inputs-password>
|
|
55
113
|
```
|
|
56
114
|
|
|
115
|
+
### 3. Input mật khẩu ở chế độ chỉ đọc (xem thông tin)
|
|
116
|
+
|
|
57
117
|
```typescript
|
|
58
|
-
|
|
59
|
-
|
|
118
|
+
// profile.component.ts
|
|
119
|
+
import { LibsUiComponentsInputsPasswordComponent } from '@libs-ui/components-inputs-password';
|
|
120
|
+
import { signal } from '@angular/core';
|
|
121
|
+
|
|
122
|
+
@Component({
|
|
123
|
+
standalone: true,
|
|
124
|
+
imports: [LibsUiComponentsInputsPasswordComponent],
|
|
125
|
+
templateUrl: './profile.component.html',
|
|
126
|
+
})
|
|
127
|
+
export class ProfileComponent {
|
|
128
|
+
protected profileData = signal<Record<string, string>>({ pass: 'secret123' });
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```html
|
|
133
|
+
<!-- profile.component.html -->
|
|
134
|
+
<libs_ui-components-inputs-password
|
|
135
|
+
[fieldNameBind]="'pass'"
|
|
136
|
+
[(item)]="profileData"
|
|
137
|
+
[readonly]="true"
|
|
138
|
+
[labelConfig]="{ labelLeft: 'Mật khẩu hiện tại' }">
|
|
139
|
+
</libs_ui-components-inputs-password>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 4. Kiểm tra hợp lệ từ component cha qua ViewChild
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
// parent.component.ts
|
|
146
|
+
import { LibsUiComponentsInputsPasswordComponent, IConfig } from '@libs-ui/components-inputs-password';
|
|
147
|
+
import { IInputValidFunctionControlEvent } from '@libs-ui/components-inputs-valid';
|
|
148
|
+
import { signal, viewChild } from '@angular/core';
|
|
149
|
+
|
|
150
|
+
@Component({
|
|
151
|
+
standalone: true,
|
|
152
|
+
imports: [LibsUiComponentsInputsPasswordComponent],
|
|
153
|
+
templateUrl: './parent.component.html',
|
|
154
|
+
})
|
|
155
|
+
export class ParentComponent {
|
|
156
|
+
protected formData = signal<Record<string, string>>({ password: '' });
|
|
157
|
+
private passwordRef = viewChild<LibsUiComponentsInputsPasswordComponent>('passwordRef');
|
|
158
|
+
|
|
159
|
+
protected handlerFunctionsControl(event: IInputValidFunctionControlEvent): void {
|
|
160
|
+
event.stopPropagation();
|
|
161
|
+
// Lưu lại để gọi checkIsValid khi submit
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
protected async handlerSubmit(): Promise<void> {
|
|
165
|
+
const isValid = await this.passwordRef()?.FunctionsControl?.checkIsValid();
|
|
166
|
+
if (!isValid) return;
|
|
167
|
+
// Xử lý submit...
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
```html
|
|
173
|
+
<!-- parent.component.html -->
|
|
174
|
+
<libs_ui-components-inputs-password
|
|
175
|
+
#passwordRef
|
|
176
|
+
[fieldNameBind]="'password'"
|
|
177
|
+
[(item)]="formData"
|
|
178
|
+
[isPassword]="true"
|
|
179
|
+
[placeholder]="'Nhập mật khẩu'"
|
|
180
|
+
(outFunctionsControl)="handlerFunctionsControl($event)">
|
|
181
|
+
</libs_ui-components-inputs-password>
|
|
182
|
+
|
|
183
|
+
<button (click)="handlerSubmit()">Xác nhận</button>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 5. Cấu hình tùy chọn số quy tắc tối thiểu (không cần thỏa mãn toàn bộ)
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
// Chỉ cần thỏa mãn ít nhất 2 trong 4 loại ký tự
|
|
190
|
+
readonly flexConfig: IConfig = {
|
|
191
|
+
length_min: 6,
|
|
60
192
|
length_max: 20,
|
|
61
|
-
uppercase: 1,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
193
|
+
uppercase: 1,
|
|
194
|
+
lowercase: 1,
|
|
195
|
+
number: 1,
|
|
196
|
+
symbol: 1,
|
|
197
|
+
key: '', // không phải 'all' → dùng value để đếm
|
|
198
|
+
value: '2', // đủ 2 loại ký tự là được
|
|
65
199
|
};
|
|
66
200
|
```
|
|
67
201
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
|
81
|
-
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
96
|
-
| `
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
| `
|
|
105
|
-
| `
|
|
106
|
-
|
|
107
|
-
|
|
202
|
+
```html
|
|
203
|
+
<libs_ui-components-inputs-password
|
|
204
|
+
[fieldNameBind]="'password'"
|
|
205
|
+
[(item)]="formData"
|
|
206
|
+
[isPassword]="true"
|
|
207
|
+
[config]="flexConfig"
|
|
208
|
+
[placeholder]="'Ít nhất 2 trong 4 loại ký tự'">
|
|
209
|
+
</libs_ui-components-inputs-password>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## @Input()
|
|
213
|
+
|
|
214
|
+
| Input | Type | Default | Mô tả | Ví dụ |
|
|
215
|
+
|---|---|---|---|---|
|
|
216
|
+
| `fieldNameBind` | `string` | **(Bắt buộc)** | Tên key trong object `item` dùng để bind giá trị | `[fieldNameBind]="'password'"` |
|
|
217
|
+
| `item` | `Record<string, any>` | **(Bắt buộc, model)** | Object chứa dữ liệu nhập liệu, dùng two-way binding | `[(item)]="loginData"` |
|
|
218
|
+
| `isPassword` | `boolean` | `false` | Nếu `true`, hiển thị icon mắt để ẩn/hiện mật khẩu và mặc định type là `password` | `[isPassword]="true"` |
|
|
219
|
+
| `config` | `IConfig` | `defaultConfig()` | Cấu hình quy tắc bảo mật: độ dài, số lượng từng loại ký tự, chế độ kiểm tra | `[config]="secureConfig"` |
|
|
220
|
+
| `classIncludeInput` | `string` | `undefined` | Class CSS bổ sung cho wrapper bao ngoài input | `[classIncludeInput]="'mt-4'"` |
|
|
221
|
+
| `configUnitRight` | `IInputValidUnitConfig` | `undefined` | Cấu hình hiển thị đơn vị ở bên phải input | `[configUnitRight]="unitConfig"` |
|
|
222
|
+
| `contentPopoverOverlayIconShowOrHiddenPass` | `IContentWhenHiddenOrShowPassword` | `defaultContentWhenHiddenOrShowPassword()` | Nội dung tooltip hiển thị khi hover icon ẩn/hiện mật khẩu | `[contentPopoverOverlayIconShowOrHiddenPass]="{ show: 'Hiện', hidden: 'Ẩn' }"` |
|
|
223
|
+
| `defaultHeight` | `number` | `undefined` | Chiều cao mặc định (px) của input | `[defaultHeight]="40"` |
|
|
224
|
+
| `iconLeftClass` | `string` | `undefined` (model) | Class icon hiển thị bên trái input | `[(iconLeftClass)]="leftIcon"` |
|
|
225
|
+
| `iconRightClass` | `string` | Auto khi `isPassword=true` (model) | Class icon hiển thị bên phải input. Tự động set icon mắt khi `isPassword=true` | `[(iconRightClass)]="rightIcon"` |
|
|
226
|
+
| `ignoreWidthInput100` | `boolean` | `undefined` | Khi `true`, input không chiếm 100% chiều rộng | `[ignoreWidthInput100]="true"` |
|
|
227
|
+
| `keySelectedUnitRight` | `unknown` | `undefined` | Key của đơn vị mặc định được chọn ở bên phải | `[keySelectedUnitRight]="'vnd'"` |
|
|
228
|
+
| `labelConfig` | `ILabel` | `undefined` | Cấu hình label hiển thị trên hoặc bên trái input | `[labelConfig]="{ labelLeft: 'Mật khẩu' }"` |
|
|
229
|
+
| `maxLength` | `number` | `20` | Giới hạn số ký tự tối đa người dùng có thể nhập | `[maxLength]="32"` |
|
|
230
|
+
| `placeholder` | `string` | `undefined` | Văn bản gợi ý hiển thị khi input rỗng | `[placeholder]="'Nhập mật khẩu'"` |
|
|
231
|
+
| `popoverContentIconRight` | `string` | `undefined` | Nội dung tooltip hiển thị khi hover/click icon bên phải | `[popoverContentIconRight]="'Tạo mật khẩu'"` |
|
|
232
|
+
| `readonly` | `boolean` | `undefined` | Khi `true`, input chỉ hiển thị, không cho phép chỉnh sửa | `[readonly]="true"` |
|
|
233
|
+
| `resetAutoCompletePassword` | `boolean` | `undefined` | Khi `true`, vô hiệu hóa tính năng tự động điền mật khẩu của trình duyệt | `[resetAutoCompletePassword]="true"` |
|
|
234
|
+
| `typeInput` | `TYPE_INPUT` | `undefined` (model) | Kiểu input (`'text'` hoặc `'password'`), tự chuyển đổi khi click icon mắt | `[(typeInput)]="inputType"` |
|
|
235
|
+
| `unitsRight` | `Array<Record<string, unknown>>` | `undefined` | Danh sách các tùy chọn đơn vị hiển thị ở bên phải input | `[unitsRight]="currencyList"` |
|
|
236
|
+
| `validMinLength` | `IValidLength` | `defaultValidMinLength()` | Cấu hình thông báo lỗi khi mật khẩu chưa đủ độ dài tối thiểu | `[validMinLength]="{ length: 8, message: 'i18n_min_8' }"` |
|
|
237
|
+
| `validPattern` | `Array<IValidPattern>` | `undefined` | Danh sách các pattern regex validation tùy chỉnh bổ sung | `[validPattern]="customPatterns"` |
|
|
238
|
+
| `validRequired` | `IValidRequired` | `defaultValidRequired()` | Cấu hình validation khi trường bị để trống | `[validRequired]="{ isRequired: true, message: 'i18n_required' }"` |
|
|
239
|
+
| `zIndexPopoverOverlay` | `number` | `undefined` | Z-index của lớp overlay popover (dùng khi bị che bởi modal/dialog) | `[zIndexPopoverOverlay]="1050"` |
|
|
240
|
+
|
|
241
|
+
## @Output()
|
|
242
|
+
|
|
243
|
+
| Output | Type | Mô tả | Handler TS | Binding HTML |
|
|
244
|
+
|---|---|---|---|---|
|
|
245
|
+
| `(outClickIconRight)` | `void` | Phát ra khi người dùng click vào icon bên phải | `handlerClickIconRight(): void { event.stopPropagation(); }` | `(outClickIconRight)="handlerClickIconRight()"` |
|
|
246
|
+
| `(outFunctionsControl)` | `IInputValidFunctionControlEvent` | Cung cấp đối tượng điều khiển gồm `checkIsValid()` để validate từ bên ngoài | `handlerFunctionsControl(e: IInputValidFunctionControlEvent): void { e.stopPropagation(); this.controlRef = e; }` | `(outFunctionsControl)="handlerFunctionsControl($event)"` |
|
|
247
|
+
| `(outGeneratePassword)` | `string` | Phát ra mật khẩu ngẫu nhiên vừa được sinh ra | `handlerGeneratePassword(pass: string): void { event.stopPropagation(); console.log(pass); }` | `(outGeneratePassword)="handlerGeneratePassword($event)"` |
|
|
248
|
+
| `(outValueChange)` | `string \| number` | Phát ra giá trị mật khẩu mỗi khi người dùng nhập liệu | `handlerValueChange(value: string \| number): void { event.stopPropagation(); }` | `(outValueChange)="handlerValueChange($event)"` |
|
|
108
249
|
|
|
109
250
|
## Types & Interfaces
|
|
110
251
|
|
|
111
252
|
```typescript
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
253
|
+
import { IConfig, IContentWhenHiddenOrShowPassword } from '@libs-ui/components-inputs-password';
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### IConfig
|
|
257
|
+
|
|
258
|
+
Cấu hình quy tắc bảo mật mật khẩu:
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
interface IConfig {
|
|
262
|
+
length_min: number; // Độ dài tối thiểu (default: 4)
|
|
263
|
+
length_max: number; // Độ dài tối đa (default: 20)
|
|
264
|
+
uppercase: number; // Số chữ hoa tối thiểu (0 = không yêu cầu)
|
|
265
|
+
lowercase: number; // Số chữ thường tối thiểu (0 = không yêu cầu)
|
|
266
|
+
number: number; // Số chữ số tối thiểu (0 = không yêu cầu)
|
|
267
|
+
symbol: number; // Số ký tự đặc biệt tối thiểu (0 = không yêu cầu)
|
|
268
|
+
key: string; // 'all' = phải thỏa mãn tất cả loại, '' = dùng value
|
|
269
|
+
value: string; // Số lượng loại ký tự cần thỏa mãn (khi key !== 'all')
|
|
121
270
|
}
|
|
271
|
+
```
|
|
122
272
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
273
|
+
**Giá trị mặc định (`defaultConfig()`):**
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
{
|
|
277
|
+
length_max: 20,
|
|
278
|
+
length_min: 4,
|
|
279
|
+
uppercase: 0,
|
|
280
|
+
lowercase: 0,
|
|
281
|
+
symbol: 0,
|
|
282
|
+
key: '',
|
|
283
|
+
number: 0,
|
|
284
|
+
value: '0',
|
|
130
285
|
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Ví dụ cấu hình phổ biến:**
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
// Mật khẩu mạnh — bắt buộc đủ 4 loại ký tự
|
|
292
|
+
const strongConfig: IConfig = {
|
|
293
|
+
length_min: 8,
|
|
294
|
+
length_max: 20,
|
|
295
|
+
uppercase: 1,
|
|
296
|
+
lowercase: 1,
|
|
297
|
+
number: 1,
|
|
298
|
+
symbol: 1,
|
|
299
|
+
key: 'all',
|
|
300
|
+
value: '4',
|
|
301
|
+
};
|
|
131
302
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
303
|
+
// Mật khẩu trung bình — chỉ cần 2 trong 4 loại
|
|
304
|
+
const mediumConfig: IConfig = {
|
|
305
|
+
length_min: 6,
|
|
306
|
+
length_max: 20,
|
|
307
|
+
uppercase: 1,
|
|
308
|
+
lowercase: 1,
|
|
309
|
+
number: 1,
|
|
310
|
+
symbol: 1,
|
|
311
|
+
key: '',
|
|
312
|
+
value: '2',
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
// Chỉ kiểm tra độ dài, không giới hạn ký tự
|
|
316
|
+
const lengthOnlyConfig: IConfig = {
|
|
317
|
+
length_min: 8,
|
|
318
|
+
length_max: 32,
|
|
319
|
+
uppercase: 0,
|
|
320
|
+
lowercase: 0,
|
|
321
|
+
number: 0,
|
|
322
|
+
symbol: 0,
|
|
323
|
+
key: '',
|
|
324
|
+
value: '0',
|
|
325
|
+
};
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### IContentWhenHiddenOrShowPassword
|
|
329
|
+
|
|
330
|
+
Nội dung tooltip cho icon ẩn/hiện mật khẩu:
|
|
331
|
+
|
|
332
|
+
```typescript
|
|
333
|
+
interface IContentWhenHiddenOrShowPassword {
|
|
334
|
+
show: string; // Tooltip khi mật khẩu đang bị ẩn (icon mắt mở)
|
|
335
|
+
hidden: string; // Tooltip khi mật khẩu đang hiện (icon mắt gạch)
|
|
135
336
|
}
|
|
337
|
+
|
|
338
|
+
// Giá trị mặc định (dùng i18n key):
|
|
339
|
+
const defaultContent: IContentWhenHiddenOrShowPassword = {
|
|
340
|
+
show: 'i18n_show',
|
|
341
|
+
hidden: 'i18n_hidden',
|
|
342
|
+
};
|
|
136
343
|
```
|
|
137
344
|
|
|
138
|
-
|
|
345
|
+
### IValidStatus (internal)
|
|
139
346
|
|
|
140
|
-
|
|
141
|
-
- **I18n**: `@ngx-translate/core`
|
|
142
|
-
- **Validation**: `@libs-ui/components-inputs-valid`
|
|
143
|
-
- **Styling**: Vanilla SCSS + Tailwind CSS class support
|
|
347
|
+
Trạng thái kiểm tra từng quy tắc bảo mật — dùng nội bộ để render checklist:
|
|
144
348
|
|
|
145
|
-
|
|
349
|
+
```typescript
|
|
350
|
+
interface IValidStatus {
|
|
351
|
+
upper?: boolean; // Đủ chữ hoa
|
|
352
|
+
number?: boolean; // Đủ chữ số
|
|
353
|
+
lower?: boolean; // Đủ chữ thường
|
|
354
|
+
symbol?: boolean; // Đủ ký tự đặc biệt
|
|
355
|
+
numberOfChar?: boolean; // Đủ số loại ký tự
|
|
356
|
+
length_max?: boolean; // Không vượt quá độ dài tối đa
|
|
357
|
+
length_min?: boolean; // Đạt độ dài tối thiểu
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## FunctionsControl (Getter API)
|
|
362
|
+
|
|
363
|
+
Component expose getter `FunctionsControl` để component cha có thể gọi `checkIsValid()` qua ViewChild:
|
|
364
|
+
|
|
365
|
+
```typescript
|
|
366
|
+
// Định nghĩa trong component:
|
|
367
|
+
get FunctionsControl(): IInputValidFunctionControlEvent | undefined
|
|
368
|
+
|
|
369
|
+
// Trong IInputValidFunctionControlEvent:
|
|
370
|
+
interface IInputValidFunctionControlEvent {
|
|
371
|
+
checkIsValid: () => Promise<boolean>;
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**Ví dụ sử dụng từ component cha:**
|
|
376
|
+
|
|
377
|
+
```typescript
|
|
378
|
+
// parent.component.ts
|
|
379
|
+
import { LibsUiComponentsInputsPasswordComponent } from '@libs-ui/components-inputs-password';
|
|
380
|
+
import { viewChild } from '@angular/core';
|
|
381
|
+
|
|
382
|
+
export class ParentComponent {
|
|
383
|
+
private passwordRef = viewChild<LibsUiComponentsInputsPasswordComponent>('passwordRef');
|
|
384
|
+
|
|
385
|
+
protected async handlerSubmit(): Promise<void> {
|
|
386
|
+
const isValid = await this.passwordRef()?.FunctionsControl?.checkIsValid();
|
|
387
|
+
if (!isValid) return;
|
|
388
|
+
// Tiến hành submit...
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
```html
|
|
394
|
+
<libs_ui-components-inputs-password
|
|
395
|
+
#passwordRef
|
|
396
|
+
[fieldNameBind]="'password'"
|
|
397
|
+
[(item)]="formData"
|
|
398
|
+
[isPassword]="true">
|
|
399
|
+
</libs_ui-components-inputs-password>
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
## Lưu ý quan trọng
|
|
403
|
+
|
|
404
|
+
⚠️ **fieldNameBind phải khớp với key trong item**: Nếu `fieldNameBind="'password'"` thì object `item` phải có key `password`. Sai tên key sẽ khiến validation và generate password không hoạt động.
|
|
405
|
+
|
|
406
|
+
⚠️ **isPassword mặc định là false**: Nếu không truyền `[isPassword]="true"`, icon mắt sẽ không hiển thị và input sẽ render dưới dạng text thông thường thay vì password.
|
|
407
|
+
|
|
408
|
+
⚠️ **config.key = 'all' yêu cầu thỏa mãn toàn bộ**: Khi `key: 'all'`, tất cả các loại ký tự có số lượng > 0 đều phải đáp ứng. Nếu chỉ cần thỏa mãn một phần, đặt `key: ''` và dùng `value` để chỉ định số lượng tối thiểu.
|
|
409
|
+
|
|
410
|
+
⚠️ **validRequired mặc định isRequired = true**: Component mặc định kiểm tra trường bắt buộc. Nếu trường không bắt buộc, truyền `[validRequired]="{ isRequired: false, message: '' }"`.
|
|
411
|
+
|
|
412
|
+
⚠️ **Generate password dựa trên config**: Chức năng tự sinh mật khẩu chỉ hoạt động đúng khi label config có nút "Generate" (`outClickButtonLabel`) được kích hoạt từ `LibsUiComponentsInputsValidComponent`. Mật khẩu sinh ra sẽ tự điền vào `item[fieldNameBind]`.
|
|
413
|
+
|
|
414
|
+
⚠️ **Ký tự đặc biệt được hỗ trợ**: Bộ ký tự đặc biệt mặc định gồm: `~\`!@#$%^&*()_=+}{";:.,?|/<>-`. Không hỗ trợ tùy chỉnh bộ ký tự này.
|
|
415
|
+
|
|
416
|
+
## Demo
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
npx nx serve core-ui
|
|
420
|
+
```
|
|
146
421
|
|
|
147
|
-
|
|
422
|
+
Truy cập: http://localhost:4500/components/inputs/password
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, model, input, output,
|
|
2
|
+
import { signal, model, input, output, Component, ChangeDetectionStrategy } from '@angular/core';
|
|
3
3
|
import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';
|
|
4
4
|
import { set } from '@libs-ui/utils';
|
|
5
5
|
import * as i1 from '@ngx-translate/core';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-inputs-password.mjs","sources":["../../../../../../libs-ui/components/inputs/password/src/utils/password.ts","../../../../../../libs-ui/components/inputs/password/src/inputs-password.component.ts","../../../../../../libs-ui/components/inputs/password/src/inputs-password.component.html","../../../../../../libs-ui/components/inputs/password/src/libs-ui-components-inputs-password.ts"],"sourcesContent":["import { IValidLength, IValidRequired } from '@libs-ui/components-inputs-valid';\nimport { ICharacter, IConfig, IContentWhenHiddenOrShowPassword, IValidStatus } from '../interfaces/password.interface';\n\nexport const getValidStatus = (status: boolean): IValidStatus => {\n return {\n length_min: status,\n length_max: status,\n upper: status,\n lower: status,\n number: status,\n numberOfChar: status,\n symbol: status,\n };\n};\n\nexport const getCharacter = (): ICharacter => {\n return {\n numberCharacter: '0123456789',\n upperCharacter: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n lowerCharacter: 'abcdefghijklmnopqrstuvwxyz',\n specialCharacter: '~`!@#$%^&*()_=+}{\";:.,?|/<>-',\n };\n};\n\nexport const defaultConfig = (): IConfig => {\n return {\n length_max: 20,\n length_min: 4,\n uppercase: 0,\n lowercase: 0,\n symbol: 0,\n key: '',\n number: 0,\n value: '0',\n };\n};\n\nexport const defaultContentWhenHiddenOrShowPassword = (): IContentWhenHiddenOrShowPassword => {\n return {\n show: 'i18n_show',\n hidden: 'i18n_hidden',\n };\n};\n\nexport const defaultValidRequired = (): IValidRequired => {\n return {\n isRequired: true,\n message: 'i18n_password_is_required',\n };\n};\n\nexport const defaultValidMinLength = (): IValidLength => {\n return {\n length: 4,\n message: 'i18n_password_min_length',\n interpolateParams: { length: 4 },\n };\n};\n","import { ChangeDetectionStrategy, Component, input, model, OnInit, output, signal } from '@angular/core';\nimport { IInputValidFunctionControlEvent, IInputValidUnitConfig, IValidLength, IValidPattern, IValidRequired, LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';\nimport { ILabel } from '@libs-ui/components-label';\nimport { set } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ICharacter, IConfig, IContentWhenHiddenOrShowPassword, IValidStatus } from './interfaces/password.interface';\nimport { defaultConfig, defaultContentWhenHiddenOrShowPassword, defaultValidMinLength, defaultValidRequired, getCharacter, getValidStatus } from './utils/password';\nimport { TYPE_INPUT } from '@libs-ui/components-inputs-input';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-password',\n templateUrl: './inputs-password.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, LibsUiComponentsInputsValidComponent],\n})\nexport class LibsUiComponentsInputsPasswordComponent implements OnInit {\n // #region PROPERTY\n protected validStatus = signal<IValidStatus>(getValidStatus(false));\n protected validCharacters = signal<boolean>(false);\n\n private readonly character = signal<ICharacter>(getCharacter());\n private readonly inputValidFunctionControl = signal<IInputValidFunctionControlEvent | undefined>(undefined);\n\n // #region INPUT\n readonly typeInput = model<TYPE_INPUT>();\n readonly config = input<IConfig, IConfig | undefined>(defaultConfig(), { transform: (value) => value ?? defaultConfig() });\n readonly isPassword = input<boolean>(false);\n readonly readonly = input<boolean>();\n readonly labelConfig = input<ILabel>();\n readonly placeholder = input<string>();\n readonly iconLeftClass = model<string>();\n readonly iconRightClass = model<string>();\n readonly popoverContentIconRight = input<string>();\n readonly zIndexPopoverOverlay = input<number>();\n readonly item = model.required<Record<string, any>>({});\n readonly fieldNameBind = input.required<string>();\n readonly unitsRight = input<Array<Record<string, unknown>>>();\n readonly configUnitRight = input<IInputValidUnitConfig>();\n readonly keySelectedUnitRight = input<unknown>();\n readonly classIncludeInput = input<string>();\n readonly ignoreWidthInput100 = input<boolean>();\n readonly contentPopoverOverlayIconShowOrHiddenPass = input<IContentWhenHiddenOrShowPassword, IContentWhenHiddenOrShowPassword | undefined>(defaultContentWhenHiddenOrShowPassword(), {\n transform: (value) => value ?? defaultContentWhenHiddenOrShowPassword(),\n });\n readonly maxLength = input<number>(20);\n readonly validRequired = input<IValidRequired, IValidRequired | undefined>(defaultValidRequired(), { transform: (value) => value ?? defaultValidRequired() });\n readonly validMinLength = input<IValidLength, IValidLength | undefined>(defaultValidMinLength(), { transform: (value) => value ?? defaultValidMinLength() });\n readonly validPattern = input<Array<IValidPattern>>();\n readonly defaultHeight = input<number>();\n readonly resetAutoCompletePassword = input<boolean>();\n\n // #region OUTPUT\n readonly outGeneratePassword = output<string>();\n readonly outClickIconRight = output<void>();\n readonly outValueChange = output<string | number>();\n readonly outFunctionsControl = output<IInputValidFunctionControlEvent>();\n\n ngOnInit() {\n if (this.isPassword()) {\n this.iconRightClass.set('libs-ui-icon-eye-solid hover:text-[var(--libs-ui-color-default)] text-[16px] cursor-pointer text-[#6a7383]');\n }\n }\n\n /* FUNCTIONS */\n private async setValidStatus(status: boolean) {\n this.validCharacters.set(status);\n this.validStatus.set(getValidStatus(status));\n }\n\n protected async handlerFunctionControl(event: IInputValidFunctionControlEvent) {\n this.inputValidFunctionControl.set(event);\n this.outFunctionsControl.emit({ ...event, checkIsValid: async () => (await event.checkIsValid()) && (await this.checkValid()) });\n }\n\n public get FunctionsControl(): IInputValidFunctionControlEvent | undefined {\n return this.inputValidFunctionControl();\n }\n\n protected async handleValueChange(value: string | number) {\n this.checkValid();\n this.outValueChange.emit(value);\n }\n\n protected async checkValid() {\n const password = this.item()[this.fieldNameBind()] as string;\n this.setValidStatus(false);\n if (!password) {\n return true;\n }\n const length = password.length;\n if (length > this.config().length_max) {\n this.validStatus().length_max = false;\n }\n if (length > 0) {\n this.validStatus().length_max = true;\n }\n if (length >= this.config().length_min) {\n this.validStatus().length_min = true;\n }\n let symbol = 0,\n number = 0,\n upper = 0,\n lower = 0,\n total = 0;\n for (let i = 0; i < length; i++) {\n if (this.character().numberCharacter.includes(password.charAt(i))) {\n number++;\n }\n if (this.character().upperCharacter.includes(password.charAt(i))) {\n upper++;\n }\n if (this.character().lowerCharacter.includes(password.charAt(i))) {\n lower++;\n }\n if (this.character().specialCharacter.includes(password.charAt(i))) {\n symbol++;\n }\n }\n if (number >= this.config().number || !this.config().number) {\n this.validStatus().number = true;\n if (this.config().number) {\n total++;\n }\n }\n if (upper >= this.config().uppercase || !this.config().uppercase) {\n this.validStatus().upper = true;\n if (this.config().uppercase) {\n total++;\n }\n }\n if (lower >= this.config().lowercase || !this.config().lowercase) {\n this.validStatus().lower = true;\n if (this.config().lowercase) {\n total++;\n }\n }\n if (symbol >= this.config().symbol || !this.config().symbol) {\n this.validStatus().symbol = true;\n if (this.config().symbol) {\n total++;\n }\n }\n switch (this.config().key) {\n case 'all':\n if (this.validStatus().symbol && this.validStatus().lower && this.validStatus().upper && this.validStatus().number) {\n this.validCharacters.set(true);\n }\n break;\n default:\n if (total >= +this.config().value) {\n this.validCharacters.set(true);\n }\n break;\n }\n if (!this.validCharacters() || !this.validStatus().length_min || !this.validStatus().length_max) {\n this.validStatus.update((value) => ({ ...value }));\n return false;\n }\n this.validStatus.update((value) => ({ ...value }));\n return true;\n }\n\n protected async handleClickIconRight() {\n this.outClickIconRight.emit();\n if (this.isPassword()) {\n this.typeInput.update((value) => (value === 'password' ? 'text' : 'password'));\n if (this.typeInput() !== 'password') {\n this.iconRightClass.set('libs-ui-icon-eye-slash-solid hover:text-[var(--libs-ui-color-default)] text-[16px] cursor-pointer text-[#6a7383]');\n return;\n }\n this.iconRightClass.set('libs-ui-icon-eye-solid hover:text-[var(--libs-ui-color-default)] text-[16px] cursor-pointer text-[#6a7383]');\n }\n }\n\n protected async handlerGeneratePassword() {\n const words: Array<string> = [];\n if (this.config().number) {\n this.randomIndex(this.config().number, this.character().numberCharacter, words);\n }\n if (this.config().uppercase) {\n this.randomIndex(this.config().uppercase, this.character().upperCharacter, words);\n }\n if (this.config().lowercase) {\n this.randomIndex(this.config().lowercase, this.character().lowerCharacter, words);\n }\n if (this.config().symbol) {\n this.randomIndex(this.config().symbol, this.character().specialCharacter, words);\n }\n const length = +this.config().length_min + Math.floor((+this.config().length_max - +this.config().length_min) / 2) - words.length;\n if (length > 0) {\n this.randomIndex(length, this.character().lowerCharacter, words);\n }\n set(this.item, this.fieldNameBind(), words.join(''));\n this.inputValidFunctionControl()?.checkIsValid();\n this.outGeneratePassword.emit(words.join(''));\n this.setValidStatus(true);\n }\n\n protected async randomIndex(number: number, character: string, words: Array<string>) {\n for (let i = 1; i <= number; i++) {\n const randomIndex = Math.floor(Math.random() * character.length);\n words.push(character[randomIndex]);\n }\n }\n}\n","<libs_ui-components-inputs-valid\n [(item)]=\"item\"\n [labelConfig]=\"labelConfig()\"\n [fieldNameBind]=\"fieldNameBind()\"\n [validRequired]=\"validRequired()\"\n [validMinLength]=\"validMinLength()\"\n [validPattern]=\"validPattern()\"\n [dataType]=\"'string'\"\n [typeInput]=\"typeInput()\"\n [iconRightClass]=\"iconRightClass()\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [maxLength]=\"maxLength()\"\n [readonly]=\"readonly()\"\n [defaultHeight]=\"defaultHeight()\"\n [classIncludeInput]=\"classIncludeInput()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [popoverContentIconRight]=\"typeInput() === 'password' ? contentPopoverOverlayIconShowOrHiddenPass().show : contentPopoverOverlayIconShowOrHiddenPass().hidden\"\n [placeholder]=\"placeholder()\"\n [unitsRight]=\"unitsRight()\"\n [configUnitRight]=\"configUnitRight()\"\n [keySelectedUnitRight]=\"keySelectedUnitRight()\"\n [zIndexPopoverContent]=\"zIndexPopoverOverlay()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n (outClickButtonLabel)=\"handlerGeneratePassword()\"\n (outValueChange)=\"handleValueChange($event)\"\n (outIconRight)=\"handleClickIconRight()\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\" />\n<ng-content select=\".libs-ui-inputs-password-content-custom\"></ng-content>\n<div class=\"mt-[8px]\">\n <div\n class=\"flex items-center\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().length_min\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().length_min\">\n <i\n class=\"text-[12px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().length_min\"\n [class.libs-ui-icon-check-circle-solid]=\"readonly() || validStatus().length_min\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().length_min\"\n [class.libs-ui-icon-check-circle-outline]=\"!readonly() && !validStatus().length_min\"></i>\n <span class=\"libs-ui-font-h7r pl-[8px]\">{{ 'i18n_minimum_length_number' | translate: { number: config().length_min } }}</span>\n </div>\n <div\n class=\"pt-[4px] flex items-center\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().length_max\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().length_max\">\n <i\n class=\"text-[12px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().length_max\"\n [class.libs-ui-icon-check-circle-solid]=\"readonly() || validStatus().length_max\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().length_max\"\n [class.libs-ui-icon-check-circle-outline]=\"!readonly() && !validStatus().length_max\"></i>\n <span class=\"libs-ui-font-h7r pl-[8px]\">{{ 'i18n_maximum_length_number' | translate: { number: config().length_max } }}</span>\n </div>\n @if (config().uppercase || config().lowercase || config().number || config().symbol) {\n <div\n class=\"mt-[4px]\"\n [class.text-[#00bc62]]=\"readonly() || validCharacters()\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validCharacters()\">\n <div class=\"flex items-center\">\n <i\n class=\"text-[12px]\"\n [class.text-[#00bc62]]=\"readonly() || validCharacters()\"\n [class.libs-ui-icon-check-circle-solid]=\"readonly() || validCharacters()\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validCharacters()\"\n [class.libs-ui-icon-check-circle-outline]=\"!readonly() && !validCharacters()\"></i>\n @if (config().key === 'all') {\n <span class=\"libs-ui-font-h7r pl-[8px]\">{{ 'i18n_contains_all_types_of_characters_below' | translate }}</span>\n }\n @if (config().key !== 'all') {\n <span class=\"libs-ui-font-h7r pl-[8px]\">{{ 'i18n_contains_number_types_of_characters_below' | translate: { number: config().value } }}</span>\n }\n </div>\n @if (config().uppercase) {\n <div\n class=\"libs-ui-font-h7r pt-[4px] pl-[24px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().upper\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().upper\">\n {{ 'i18n_uppercase_minimum' | translate: { number: config().uppercase } }}\n </div>\n }\n @if (config().lowercase) {\n <div\n class=\"libs-ui-font-h7r pt-[4px] pl-[24px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().lower\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().lower\">\n {{ 'i18n_lowercase_minimum' | translate: { number: config().lowercase } }}\n </div>\n }\n @if (config().number) {\n <div\n class=\"libs-ui-font-h7r pt-[4px] pl-[24px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().number\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().number\">\n {{ 'i18n_number_minimum' | translate: { number: config().number } }}\n </div>\n }\n @if (config().symbol) {\n <div\n class=\"libs-ui-font-h7r pt-[4px] pl-[24px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().symbol\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().symbol\">\n {{ 'i18n_symbol_minimum' | translate: { number: config().symbol } }}\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-inputs-password.mjs","sources":["../../../../../../libs-ui/components/inputs/password/src/utils/password.ts","../../../../../../libs-ui/components/inputs/password/src/inputs-password.component.ts","../../../../../../libs-ui/components/inputs/password/src/inputs-password.component.html","../../../../../../libs-ui/components/inputs/password/src/libs-ui-components-inputs-password.ts"],"sourcesContent":["import { IValidLength, IValidRequired } from '@libs-ui/components-inputs-valid';\nimport { ICharacter, IConfig, IContentWhenHiddenOrShowPassword, IValidStatus } from '../interfaces/password.interface';\n\nexport const getValidStatus = (status: boolean): IValidStatus => {\n return {\n length_min: status,\n length_max: status,\n upper: status,\n lower: status,\n number: status,\n numberOfChar: status,\n symbol: status,\n };\n};\n\nexport const getCharacter = (): ICharacter => {\n return {\n numberCharacter: '0123456789',\n upperCharacter: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n lowerCharacter: 'abcdefghijklmnopqrstuvwxyz',\n specialCharacter: '~`!@#$%^&*()_=+}{\";:.,?|/<>-',\n };\n};\n\nexport const defaultConfig = (): IConfig => {\n return {\n length_max: 20,\n length_min: 4,\n uppercase: 0,\n lowercase: 0,\n symbol: 0,\n key: '',\n number: 0,\n value: '0',\n };\n};\n\nexport const defaultContentWhenHiddenOrShowPassword = (): IContentWhenHiddenOrShowPassword => {\n return {\n show: 'i18n_show',\n hidden: 'i18n_hidden',\n };\n};\n\nexport const defaultValidRequired = (): IValidRequired => {\n return {\n isRequired: true,\n message: 'i18n_password_is_required',\n };\n};\n\nexport const defaultValidMinLength = (): IValidLength => {\n return {\n length: 4,\n message: 'i18n_password_min_length',\n interpolateParams: { length: 4 },\n };\n};\n","import { ChangeDetectionStrategy, Component, input, model, OnInit, output, signal } from '@angular/core';\nimport { IInputValidFunctionControlEvent, IInputValidUnitConfig, IValidLength, IValidPattern, IValidRequired, LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';\nimport { ILabel } from '@libs-ui/components-label';\nimport { set } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ICharacter, IConfig, IContentWhenHiddenOrShowPassword, IValidStatus } from './interfaces/password.interface';\nimport { defaultConfig, defaultContentWhenHiddenOrShowPassword, defaultValidMinLength, defaultValidRequired, getCharacter, getValidStatus } from './utils/password';\nimport { TYPE_INPUT } from '@libs-ui/components-inputs-input';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-password',\n templateUrl: './inputs-password.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, LibsUiComponentsInputsValidComponent],\n})\nexport class LibsUiComponentsInputsPasswordComponent implements OnInit {\n // #region PROPERTY\n protected validStatus = signal<IValidStatus>(getValidStatus(false));\n protected validCharacters = signal<boolean>(false);\n\n private readonly character = signal<ICharacter>(getCharacter());\n private readonly inputValidFunctionControl = signal<IInputValidFunctionControlEvent | undefined>(undefined);\n\n // #region INPUT\n readonly typeInput = model<TYPE_INPUT>();\n readonly config = input<IConfig, IConfig | undefined>(defaultConfig(), { transform: (value) => value ?? defaultConfig() });\n readonly isPassword = input<boolean>(false);\n readonly readonly = input<boolean>();\n readonly labelConfig = input<ILabel>();\n readonly placeholder = input<string>();\n readonly iconLeftClass = model<string>();\n readonly iconRightClass = model<string>();\n readonly popoverContentIconRight = input<string>();\n readonly zIndexPopoverOverlay = input<number>();\n readonly item = model.required<Record<string, any>>({});\n readonly fieldNameBind = input.required<string>();\n readonly unitsRight = input<Array<Record<string, unknown>>>();\n readonly configUnitRight = input<IInputValidUnitConfig>();\n readonly keySelectedUnitRight = input<unknown>();\n readonly classIncludeInput = input<string>();\n readonly ignoreWidthInput100 = input<boolean>();\n readonly contentPopoverOverlayIconShowOrHiddenPass = input<IContentWhenHiddenOrShowPassword, IContentWhenHiddenOrShowPassword | undefined>(defaultContentWhenHiddenOrShowPassword(), {\n transform: (value) => value ?? defaultContentWhenHiddenOrShowPassword(),\n });\n readonly maxLength = input<number>(20);\n readonly validRequired = input<IValidRequired, IValidRequired | undefined>(defaultValidRequired(), { transform: (value) => value ?? defaultValidRequired() });\n readonly validMinLength = input<IValidLength, IValidLength | undefined>(defaultValidMinLength(), { transform: (value) => value ?? defaultValidMinLength() });\n readonly validPattern = input<Array<IValidPattern>>();\n readonly defaultHeight = input<number>();\n readonly resetAutoCompletePassword = input<boolean>();\n\n // #region OUTPUT\n readonly outGeneratePassword = output<string>();\n readonly outClickIconRight = output<void>();\n readonly outValueChange = output<string | number>();\n readonly outFunctionsControl = output<IInputValidFunctionControlEvent>();\n\n ngOnInit() {\n if (this.isPassword()) {\n this.iconRightClass.set('libs-ui-icon-eye-solid hover:text-[var(--libs-ui-color-default)] text-[16px] cursor-pointer text-[#6a7383]');\n }\n }\n\n /* FUNCTIONS */\n private async setValidStatus(status: boolean) {\n this.validCharacters.set(status);\n this.validStatus.set(getValidStatus(status));\n }\n\n protected async handlerFunctionControl(event: IInputValidFunctionControlEvent) {\n this.inputValidFunctionControl.set(event);\n this.outFunctionsControl.emit({ ...event, checkIsValid: async () => (await event.checkIsValid()) && (await this.checkValid()) });\n }\n\n public get FunctionsControl(): IInputValidFunctionControlEvent | undefined {\n return this.inputValidFunctionControl();\n }\n\n protected async handleValueChange(value: string | number) {\n this.checkValid();\n this.outValueChange.emit(value);\n }\n\n protected async checkValid() {\n const password = this.item()[this.fieldNameBind()] as string;\n this.setValidStatus(false);\n if (!password) {\n return true;\n }\n const length = password.length;\n if (length > this.config().length_max) {\n this.validStatus().length_max = false;\n }\n if (length > 0) {\n this.validStatus().length_max = true;\n }\n if (length >= this.config().length_min) {\n this.validStatus().length_min = true;\n }\n let symbol = 0,\n number = 0,\n upper = 0,\n lower = 0,\n total = 0;\n for (let i = 0; i < length; i++) {\n if (this.character().numberCharacter.includes(password.charAt(i))) {\n number++;\n }\n if (this.character().upperCharacter.includes(password.charAt(i))) {\n upper++;\n }\n if (this.character().lowerCharacter.includes(password.charAt(i))) {\n lower++;\n }\n if (this.character().specialCharacter.includes(password.charAt(i))) {\n symbol++;\n }\n }\n if (number >= this.config().number || !this.config().number) {\n this.validStatus().number = true;\n if (this.config().number) {\n total++;\n }\n }\n if (upper >= this.config().uppercase || !this.config().uppercase) {\n this.validStatus().upper = true;\n if (this.config().uppercase) {\n total++;\n }\n }\n if (lower >= this.config().lowercase || !this.config().lowercase) {\n this.validStatus().lower = true;\n if (this.config().lowercase) {\n total++;\n }\n }\n if (symbol >= this.config().symbol || !this.config().symbol) {\n this.validStatus().symbol = true;\n if (this.config().symbol) {\n total++;\n }\n }\n switch (this.config().key) {\n case 'all':\n if (this.validStatus().symbol && this.validStatus().lower && this.validStatus().upper && this.validStatus().number) {\n this.validCharacters.set(true);\n }\n break;\n default:\n if (total >= +this.config().value) {\n this.validCharacters.set(true);\n }\n break;\n }\n if (!this.validCharacters() || !this.validStatus().length_min || !this.validStatus().length_max) {\n this.validStatus.update((value) => ({ ...value }));\n return false;\n }\n this.validStatus.update((value) => ({ ...value }));\n return true;\n }\n\n protected async handleClickIconRight() {\n this.outClickIconRight.emit();\n if (this.isPassword()) {\n this.typeInput.update((value) => (value === 'password' ? 'text' : 'password'));\n if (this.typeInput() !== 'password') {\n this.iconRightClass.set('libs-ui-icon-eye-slash-solid hover:text-[var(--libs-ui-color-default)] text-[16px] cursor-pointer text-[#6a7383]');\n return;\n }\n this.iconRightClass.set('libs-ui-icon-eye-solid hover:text-[var(--libs-ui-color-default)] text-[16px] cursor-pointer text-[#6a7383]');\n }\n }\n\n protected async handlerGeneratePassword() {\n const words: Array<string> = [];\n if (this.config().number) {\n this.randomIndex(this.config().number, this.character().numberCharacter, words);\n }\n if (this.config().uppercase) {\n this.randomIndex(this.config().uppercase, this.character().upperCharacter, words);\n }\n if (this.config().lowercase) {\n this.randomIndex(this.config().lowercase, this.character().lowerCharacter, words);\n }\n if (this.config().symbol) {\n this.randomIndex(this.config().symbol, this.character().specialCharacter, words);\n }\n const length = +this.config().length_min + Math.floor((+this.config().length_max - +this.config().length_min) / 2) - words.length;\n if (length > 0) {\n this.randomIndex(length, this.character().lowerCharacter, words);\n }\n set(this.item, this.fieldNameBind(), words.join(''));\n this.inputValidFunctionControl()?.checkIsValid();\n this.outGeneratePassword.emit(words.join(''));\n this.setValidStatus(true);\n }\n\n protected async randomIndex(number: number, character: string, words: Array<string>) {\n for (let i = 1; i <= number; i++) {\n const randomIndex = Math.floor(Math.random() * character.length);\n words.push(character[randomIndex]);\n }\n }\n}\n","<libs_ui-components-inputs-valid\n [(item)]=\"item\"\n [labelConfig]=\"labelConfig()\"\n [fieldNameBind]=\"fieldNameBind()\"\n [validRequired]=\"validRequired()\"\n [validMinLength]=\"validMinLength()\"\n [validPattern]=\"validPattern()\"\n [dataType]=\"'string'\"\n [typeInput]=\"typeInput()\"\n [iconRightClass]=\"iconRightClass()\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [maxLength]=\"maxLength()\"\n [readonly]=\"readonly()\"\n [defaultHeight]=\"defaultHeight()\"\n [classIncludeInput]=\"classIncludeInput()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [popoverContentIconRight]=\"typeInput() === 'password' ? contentPopoverOverlayIconShowOrHiddenPass().show : contentPopoverOverlayIconShowOrHiddenPass().hidden\"\n [placeholder]=\"placeholder()\"\n [unitsRight]=\"unitsRight()\"\n [configUnitRight]=\"configUnitRight()\"\n [keySelectedUnitRight]=\"keySelectedUnitRight()\"\n [zIndexPopoverContent]=\"zIndexPopoverOverlay()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n (outClickButtonLabel)=\"handlerGeneratePassword()\"\n (outValueChange)=\"handleValueChange($event)\"\n (outIconRight)=\"handleClickIconRight()\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\" />\n<ng-content select=\".libs-ui-inputs-password-content-custom\"></ng-content>\n<div class=\"mt-[8px]\">\n <div\n class=\"flex items-center\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().length_min\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().length_min\">\n <i\n class=\"text-[12px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().length_min\"\n [class.libs-ui-icon-check-circle-solid]=\"readonly() || validStatus().length_min\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().length_min\"\n [class.libs-ui-icon-check-circle-outline]=\"!readonly() && !validStatus().length_min\"></i>\n <span class=\"libs-ui-font-h7r pl-[8px]\">{{ 'i18n_minimum_length_number' | translate: { number: config().length_min } }}</span>\n </div>\n <div\n class=\"pt-[4px] flex items-center\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().length_max\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().length_max\">\n <i\n class=\"text-[12px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().length_max\"\n [class.libs-ui-icon-check-circle-solid]=\"readonly() || validStatus().length_max\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().length_max\"\n [class.libs-ui-icon-check-circle-outline]=\"!readonly() && !validStatus().length_max\"></i>\n <span class=\"libs-ui-font-h7r pl-[8px]\">{{ 'i18n_maximum_length_number' | translate: { number: config().length_max } }}</span>\n </div>\n @if (config().uppercase || config().lowercase || config().number || config().symbol) {\n <div\n class=\"mt-[4px]\"\n [class.text-[#00bc62]]=\"readonly() || validCharacters()\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validCharacters()\">\n <div class=\"flex items-center\">\n <i\n class=\"text-[12px]\"\n [class.text-[#00bc62]]=\"readonly() || validCharacters()\"\n [class.libs-ui-icon-check-circle-solid]=\"readonly() || validCharacters()\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validCharacters()\"\n [class.libs-ui-icon-check-circle-outline]=\"!readonly() && !validCharacters()\"></i>\n @if (config().key === 'all') {\n <span class=\"libs-ui-font-h7r pl-[8px]\">{{ 'i18n_contains_all_types_of_characters_below' | translate }}</span>\n }\n @if (config().key !== 'all') {\n <span class=\"libs-ui-font-h7r pl-[8px]\">{{ 'i18n_contains_number_types_of_characters_below' | translate: { number: config().value } }}</span>\n }\n </div>\n @if (config().uppercase) {\n <div\n class=\"libs-ui-font-h7r pt-[4px] pl-[24px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().upper\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().upper\">\n {{ 'i18n_uppercase_minimum' | translate: { number: config().uppercase } }}\n </div>\n }\n @if (config().lowercase) {\n <div\n class=\"libs-ui-font-h7r pt-[4px] pl-[24px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().lower\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().lower\">\n {{ 'i18n_lowercase_minimum' | translate: { number: config().lowercase } }}\n </div>\n }\n @if (config().number) {\n <div\n class=\"libs-ui-font-h7r pt-[4px] pl-[24px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().number\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().number\">\n {{ 'i18n_number_minimum' | translate: { number: config().number } }}\n </div>\n }\n @if (config().symbol) {\n <div\n class=\"libs-ui-font-h7r pt-[4px] pl-[24px]\"\n [class.text-[#00bc62]]=\"readonly() || validStatus().symbol\"\n [class.text-[#9ca2ad]]=\"!readonly() && !validStatus().symbol\">\n {{ 'i18n_symbol_minimum' | translate: { number: config().symbol } }}\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/components-inputs-password",
|
|
3
|
-
"version": "0.2.356-
|
|
3
|
+
"version": "0.2.356-43",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": ">=18.0.0",
|
|
6
|
-
"@libs-ui/components-inputs-valid": "0.2.356-
|
|
7
|
-
"@libs-ui/components-label": "0.2.356-
|
|
8
|
-
"@libs-ui/utils": "0.2.356-
|
|
6
|
+
"@libs-ui/components-inputs-valid": "0.2.356-43",
|
|
7
|
+
"@libs-ui/components-label": "0.2.356-43",
|
|
8
|
+
"@libs-ui/utils": "0.2.356-43",
|
|
9
9
|
"@ngx-translate/core": "^15.0.0",
|
|
10
|
-
"@libs-ui/components-inputs-input": "0.2.356-
|
|
10
|
+
"@libs-ui/components-inputs-input": "0.2.356-43"
|
|
11
11
|
},
|
|
12
12
|
"sideEffects": false,
|
|
13
13
|
"module": "fesm2022/libs-ui-components-inputs-password.mjs",
|