cmat 0.0.43 → 0.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/animations/dropdown.css +16 -0
  2. package/animations/expand-collapse.css +27 -0
  3. package/animations/fade.css +105 -0
  4. package/animations/shake.css +9 -0
  5. package/animations/slide.css +71 -0
  6. package/animations/zoom.css +21 -0
  7. package/components/drawer/index.d.ts +2 -2
  8. package/components/image-viewer/index.d.ts +9 -17
  9. package/components/material-datetimepicker/index.d.ts +19 -13
  10. package/components/navigation/index.d.ts +0 -2
  11. package/components/password-strength/index.d.ts +7 -2
  12. package/components/popover/index.d.ts +0 -1
  13. package/fesm2022/cmat-components-adapter.mjs +9 -9
  14. package/fesm2022/cmat-components-breadcrumb.mjs +9 -9
  15. package/fesm2022/cmat-components-card.mjs +4 -5
  16. package/fesm2022/cmat-components-card.mjs.map +1 -1
  17. package/fesm2022/cmat-components-carousel.mjs +12 -12
  18. package/fesm2022/cmat-components-cascade.mjs +10 -11
  19. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  20. package/fesm2022/cmat-components-chip-input.mjs +3 -3
  21. package/fesm2022/cmat-components-custom-formly.mjs +88 -88
  22. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
  23. package/fesm2022/cmat-components-date-range.mjs +3 -3
  24. package/fesm2022/cmat-components-drawer.mjs +28 -39
  25. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  26. package/fesm2022/cmat-components-fullscreen.mjs +3 -3
  27. package/fesm2022/cmat-components-highlight.mjs +6 -6
  28. package/fesm2022/cmat-components-image-viewer.mjs +49 -73
  29. package/fesm2022/cmat-components-image-viewer.mjs.map +1 -1
  30. package/fesm2022/cmat-components-json-editor.mjs +3 -3
  31. package/fesm2022/cmat-components-knob-input.mjs +3 -3
  32. package/fesm2022/cmat-components-masonry.mjs +4 -5
  33. package/fesm2022/cmat-components-masonry.mjs.map +1 -1
  34. package/fesm2022/cmat-components-material-color-picker.mjs +4 -5
  35. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  36. package/fesm2022/cmat-components-material-datetimepicker.mjs +130 -111
  37. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  38. package/fesm2022/cmat-components-navigation.mjs +75 -100
  39. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  40. package/fesm2022/cmat-components-opt-input.mjs +3 -3
  41. package/fesm2022/cmat-components-org-chart.mjs +9 -9
  42. package/fesm2022/cmat-components-pagination.mjs +12 -12
  43. package/fesm2022/cmat-components-password-strength.mjs +69 -163
  44. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  45. package/fesm2022/cmat-components-popover.mjs +11 -11
  46. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  47. package/fesm2022/cmat-components-progress-bar.mjs +3 -3
  48. package/fesm2022/cmat-components-qrcode.mjs +3 -3
  49. package/fesm2022/cmat-components-rating.mjs +3 -3
  50. package/fesm2022/cmat-components-select-search.mjs +9 -9
  51. package/fesm2022/cmat-components-select-table.mjs +3 -3
  52. package/fesm2022/cmat-components-select-tree.mjs +3 -3
  53. package/fesm2022/cmat-components-speed-dial.mjs +9 -9
  54. package/fesm2022/cmat-components-timeline.mjs +12 -12
  55. package/fesm2022/cmat-components-toast.mjs +9 -9
  56. package/fesm2022/cmat-components-transfer-picker.mjs +18 -18
  57. package/fesm2022/cmat-components-treetable.mjs +6 -6
  58. package/fesm2022/cmat-components-upload.mjs +9 -9
  59. package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
  60. package/fesm2022/cmat-directives-arrow-cursor.mjs +3 -3
  61. package/fesm2022/cmat-directives-autofocus.mjs +3 -3
  62. package/fesm2022/cmat-directives-data-exporter.mjs +21 -21
  63. package/fesm2022/cmat-directives-debounce.mjs +9 -9
  64. package/fesm2022/cmat-directives-digit-only.mjs +6 -6
  65. package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
  66. package/fesm2022/cmat-lib-mock-api.mjs +6 -6
  67. package/fesm2022/cmat-pipes-bytes.mjs +3 -3
  68. package/fesm2022/cmat-pipes-date-format.mjs +3 -3
  69. package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
  70. package/fesm2022/cmat-pipes-group-by.mjs +3 -3
  71. package/fesm2022/cmat-pipes-keys.mjs +3 -3
  72. package/fesm2022/cmat-pipes-secure.mjs +3 -3
  73. package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
  74. package/fesm2022/cmat-services-alert.mjs +3 -3
  75. package/fesm2022/cmat-services-config.mjs +6 -6
  76. package/fesm2022/cmat-services-confirmation.mjs +6 -6
  77. package/fesm2022/cmat-services-data.mjs +3 -3
  78. package/fesm2022/cmat-services-export-as.mjs +3 -3
  79. package/fesm2022/cmat-services-loading.mjs +6 -6
  80. package/fesm2022/cmat-services-local-storage.mjs +3 -3
  81. package/fesm2022/cmat-services-media-watcher.mjs +3 -3
  82. package/fesm2022/cmat-services-platform.mjs +3 -3
  83. package/fesm2022/cmat-services-splash-screen.mjs +3 -3
  84. package/fesm2022/cmat-services-title.mjs +3 -3
  85. package/fesm2022/cmat-services-translation.mjs +3 -3
  86. package/fesm2022/cmat-services-utils.mjs +3 -3
  87. package/package.json +54 -59
  88. package/styles/overrides/angular-material.scss +2 -2
  89. package/animations/index.d.ts +0 -5
  90. package/fesm2022/cmat-animations.mjs +0 -466
  91. package/fesm2022/cmat-animations.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Input, ChangeDetectionStrategy, ViewEncapsulation, Component, EventEmitter, Output } from '@angular/core';
2
+ import { Input, ChangeDetectionStrategy, ViewEncapsulation, Component, EventEmitter, Output, inject, ChangeDetectorRef } from '@angular/core';
3
3
  import * as i1 from '@angular/material/button';
4
4
  import { MatButtonModule } from '@angular/material/button';
5
5
  import * as i2 from '@angular/material/core';
@@ -9,7 +9,6 @@ import { MatIconModule } from '@angular/material/icon';
9
9
  import { FormControl, Validators } from '@angular/forms';
10
10
  import * as i1$1 from '@angular/material/progress-bar';
11
11
  import { MatProgressBarModule } from '@angular/material/progress-bar';
12
- import { animation, animate, keyframes, style, trigger, transition, query, stagger, animateChild, useAnimation } from '@angular/animations';
13
12
  import * as i1$2 from '@angular/material/card';
14
13
  import { MatCardModule } from '@angular/material/card';
15
14
 
@@ -20,10 +19,10 @@ class CmatPassToggleVisibilityComponent {
20
19
  get type() {
21
20
  return this.isVisible ? 'text' : 'password';
22
21
  }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CmatPassToggleVisibilityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CmatPassToggleVisibilityComponent, isStandalone: true, selector: "cmat-pass-toggle-visibility", inputs: { isVisible: "isVisible", tabindex: "tabindex" }, exportAs: ["cmatPassToggleVisibility"], ngImport: i0, template: "<button type=\"button\" class=\"matIconButton cdk-focused cdk-mouse-focused\" matIconButton \r\n matRipple [matRippleCentered]=\"true\" [attr.tabindex]=\"tabindex ? tabindex : null\" (click)=\"isVisible = !isVisible\">\r\n <mat-icon svgIcon=\"{{isVisible ? 'mat_outline:visibility' : 'mat_outline:visibility_off' }}\"></mat-icon>\r\n</button>", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CmatPassToggleVisibilityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.4", type: CmatPassToggleVisibilityComponent, isStandalone: true, selector: "cmat-pass-toggle-visibility", inputs: { isVisible: "isVisible", tabindex: "tabindex" }, exportAs: ["cmatPassToggleVisibility"], ngImport: i0, template: "<button type=\"button\" class=\"matIconButton cdk-focused cdk-mouse-focused\" matIconButton \r\n matRipple [matRippleCentered]=\"true\" [attr.tabindex]=\"tabindex ? tabindex : null\" (click)=\"isVisible = !isVisible\">\r\n <mat-icon svgIcon=\"{{isVisible ? 'mat_outline:visibility' : 'mat_outline:visibility_off' }}\"></mat-icon>\r\n</button>", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
25
24
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CmatPassToggleVisibilityComponent, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CmatPassToggleVisibilityComponent, decorators: [{
27
26
  type: Component,
28
27
  args: [{ selector: 'cmat-pass-toggle-visibility', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatPassToggleVisibility', imports: [MatButtonModule, MatRippleModule, MatIconModule], template: "<button type=\"button\" class=\"matIconButton cdk-focused cdk-mouse-focused\" matIconButton \r\n matRipple [matRippleCentered]=\"true\" [attr.tabindex]=\"tabindex ? tabindex : null\" (click)=\"isVisible = !isVisible\">\r\n <mat-icon svgIcon=\"{{isVisible ? 'mat_outline:visibility' : 'mat_outline:visibility_off' }}\"></mat-icon>\r\n</button>" }]
29
28
  }], propDecorators: { isVisible: [{
@@ -257,10 +256,10 @@ class CmatPasswordStrengthComponent {
257
256
  this.calculatePasswordStrength();
258
257
  this.passwordConfirmationFormControl.updateValueAndValidity();
259
258
  }
260
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CmatPasswordStrengthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
261
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CmatPasswordStrengthComponent, isStandalone: true, selector: "cmat-password-strength", inputs: { password: "password", externalError: "externalError", enableLengthRule: "enableLengthRule", enableLowerCaseLetterRule: "enableLowerCaseLetterRule", enableUpperCaseLetterRule: "enableUpperCaseLetterRule", enableDigitRule: "enableDigitRule", enableSpecialCharRule: "enableSpecialCharRule", min: "min", max: "max", customValidator: "customValidator", warnThreshold: "warnThreshold", accentThreshold: "accentThreshold" }, outputs: { strengthChanged: "strengthChanged" }, exportAs: ["cmatPasswordStrength"], usesOnChanges: true, ngImport: i0, template: "<mat-progress-bar mode=\"determinate\" [color]=\"color\" [value]=\"strength\"></mat-progress-bar>", dependencies: [{ kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
259
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CmatPasswordStrengthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
260
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.4", type: CmatPasswordStrengthComponent, isStandalone: true, selector: "cmat-password-strength", inputs: { password: "password", externalError: "externalError", enableLengthRule: "enableLengthRule", enableLowerCaseLetterRule: "enableLowerCaseLetterRule", enableUpperCaseLetterRule: "enableUpperCaseLetterRule", enableDigitRule: "enableDigitRule", enableSpecialCharRule: "enableSpecialCharRule", min: "min", max: "max", customValidator: "customValidator", warnThreshold: "warnThreshold", accentThreshold: "accentThreshold" }, outputs: { strengthChanged: "strengthChanged" }, exportAs: ["cmatPasswordStrength"], usesOnChanges: true, ngImport: i0, template: "<mat-progress-bar mode=\"determinate\" [color]=\"color\" [value]=\"strength\"></mat-progress-bar>", dependencies: [{ kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
262
261
  }
263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CmatPasswordStrengthComponent, decorators: [{
262
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CmatPasswordStrengthComponent, decorators: [{
264
263
  type: Component,
265
264
  args: [{ selector: 'cmat-password-strength', exportAs: 'cmatPasswordStrength', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatProgressBarModule], template: "<mat-progress-bar mode=\"determinate\" [color]=\"color\" [value]=\"strength\"></mat-progress-bar>" }]
266
265
  }], propDecorators: { password: [{
@@ -291,53 +290,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
291
290
  type: Output
292
291
  }] } });
293
292
 
294
- const flipInX = flipIn(1, 1, 0);
295
- const flipInY = flipIn(1, 0, 1);
296
- const shake = animation(animate('{{ timing }}s {{ delay }}s', keyframes([
297
- style({ transform: 'translate3d(0, 0, 0)', offset: 0 }),
298
- style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.1 }),
299
- style({ transform: 'translate3d(10px, 0, 0)', offset: 0.2 }),
300
- style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.3 }),
301
- style({ transform: 'translate3d(10px, 0, 0)', offset: 0.4 }),
302
- style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.5 }),
303
- style({ transform: 'translate3d(10px, 0, 0)', offset: 0.6 }),
304
- style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.7 }),
305
- style({ transform: 'translate3d(10px, 0, 0)', offset: 0.8 }),
306
- style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.9 }),
307
- style({ transform: 'translate3d(0, 0, 0)', offset: 1 }),
308
- ])), { params: { timing: 1, delay: 0 } });
309
- function flipIn(timing, rotateX, rotateY) {
310
- const params = { timing: timing, delay: 0, rotateX, rotateY };
311
- return animation([
312
- // eslint-disable-next-line @typescript-eslint/naming-convention
313
- style({ 'backface-visibility': 'visible' }),
314
- animate('{{ timing }}s {{ delay }}s ease-in', keyframes([
315
- style({
316
- opacity: 0,
317
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 90deg)',
318
- offset: 0,
319
- }),
320
- style({
321
- opacity: 1,
322
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -20deg)',
323
- offset: 0.4,
324
- }),
325
- style({
326
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 10deg)',
327
- offset: 0.6,
328
- }),
329
- style({
330
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -5deg)',
331
- offset: 0.8,
332
- }),
333
- style({
334
- transform: 'perspective(400px) rotate3d(0, 0, 0, 0)',
335
- offset: 1,
336
- }),
337
- ])),
338
- ], { params });
339
- }
340
-
341
293
  class CmatPasswordStrengthInfoComponent {
342
294
  constructor() {
343
295
  this.enableScoreInfo = false;
@@ -346,122 +298,76 @@ class CmatPasswordStrengthInfoComponent {
346
298
  this.digitsCriteriaMsg = '包含至少一个数字';
347
299
  this.specialCharsCriteriaMsg = '包含至少一个特殊字符';
348
300
  this.customCharsCriteriaMsg = '包含至少一个传统字符';
301
+ this.pageLoaded = false;
302
+ this._changeDetectorRef = inject(ChangeDetectorRef);
349
303
  }
350
304
  ngOnInit() {
351
305
  if (!this.minCharsCriteriaMsg) {
352
306
  this.minCharsCriteriaMsg = `包含至少 ${this.passwordComponent.min} 个字符`;
353
307
  }
354
308
  }
355
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CmatPasswordStrengthInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
356
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CmatPasswordStrengthInfoComponent, isStandalone: true, selector: "cmat-password-strength-info", inputs: { passwordComponent: "passwordComponent", enableScoreInfo: "enableScoreInfo", lowerCaseCriteriaMsg: "lowerCaseCriteriaMsg", upperCaseCriteriaMsg: "upperCaseCriteriaMsg", digitsCriteriaMsg: "digitsCriteriaMsg", specialCharsCriteriaMsg: "specialCharsCriteriaMsg", customCharsCriteriaMsg: "customCharsCriteriaMsg", minCharsCriteriaMsg: "minCharsCriteriaMsg" }, exportAs: ["cmatPasswordStrengthInfo"], ngImport: i0, template: "<mat-card @list class=\"info-card\">\r\n <mat-card-content>\r\n @if (passwordComponent.enableLowerCaseLetterRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneLowerCaseLetter) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{lowerCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableUpperCaseLetterRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneUpperCaseLetter) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{upperCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableDigitRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneDigit) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{digitsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableSpecialCharRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneSpecialChar) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{specialCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableLengthRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastMinChars) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{minCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.customValidator) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtCustomChars) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{customCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (enableScoreInfo) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.strength === 100) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>\u5BC6\u7801\u5F3A\u5EA6= {{passwordComponent.strength}} %100</span>\r\n </div>\r\n }\r\n\r\n </mat-card-content>\r\n</mat-card>", styles: ["cmat-password-strength-info{margin-top:20px}cmat-password-strength-info .mat-mdc-card{display:flex;flex-direction:row;flex:1 1 0%;margin:.5rem;box-sizing:border-box;place-content:stretch;align-items:stretch}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content{display:flex;flex-direction:column;box-sizing:border-box;max-width:100%;place-content:stretch;align-items:stretch}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content .mat-icon{margin-right:1rem}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content .info-row{display:flex;flex-direction:row;box-sizing:border-box;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1$2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1$2.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], animations: [
357
- // nice stagger effect when showing existing elements
358
- trigger('list', [
359
- transition(':enter', [
360
- // child animation selector + stagger
361
- query('@items', stagger(300, animateChild()))
362
- ]),
363
- ]),
364
- trigger('items', [
365
- // cubic-bezier for a tiny bouncing feel
366
- transition(':enter', [
367
- style({ transform: 'scale(0.5)', opacity: 0 }),
368
- animate('1s cubic-bezier(.8,-0.6,0.2,1.5)', style({ transform: 'scale(1)', opacity: 1 }))
369
- ]),
370
- transition(':leave', [
371
- style({ transform: 'scale(1)', opacity: 1, height: '*' }),
372
- animate('1s cubic-bezier(.8,-0.6,0.2,1.5)', style({ transform: 'scale(0.5)', opacity: 0, height: '0px', margin: '0px' }))
373
- ]),
374
- ]),
375
- trigger('positiveState', [
376
- transition(':enter', [
377
- // eslint-disable-next-line @typescript-eslint/naming-convention
378
- style({ 'backface-visibility': 'visible' }),
379
- animate('{{ timing }}s {{ delay }}s ease-in', keyframes([
380
- style({
381
- opacity: 0,
382
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 90deg)',
383
- offset: 0,
384
- }),
385
- style({
386
- opacity: 1,
387
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -20deg)',
388
- offset: 0.4,
389
- }),
390
- style({
391
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 10deg)',
392
- offset: 0.6,
393
- }),
394
- style({
395
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -5deg)',
396
- offset: 0.8,
397
- }),
398
- style({
399
- transform: 'perspective(400px) rotate3d(0, 0, 0, 0)',
400
- offset: 1,
401
- }),
402
- ])),
403
- ], { params: { timing: 1, delay: 0, rotateX: 1, rotateY: 0 } }),
404
- ]),
405
- trigger('negativeState', [
406
- transition(':enter', useAnimation(shake)),
407
- ]),
408
- ], encapsulation: i0.ViewEncapsulation.None }); }
309
+ ngAfterViewInit() {
310
+ setTimeout(() => {
311
+ this.pageLoaded = true;
312
+ this._changeDetectorRef.markForCheck();
313
+ }, 100);
314
+ }
315
+ getEnterIndex(itemType) {
316
+ const enabledItems = [];
317
+ if (this.passwordComponent.enableLowerCaseLetterRule) {
318
+ enabledItems.push('lowerCase');
319
+ }
320
+ if (this.passwordComponent.enableUpperCaseLetterRule) {
321
+ enabledItems.push('upperCase');
322
+ }
323
+ if (this.passwordComponent.enableDigitRule) {
324
+ enabledItems.push('digit');
325
+ }
326
+ if (this.passwordComponent.enableSpecialCharRule) {
327
+ enabledItems.push('specialChar');
328
+ }
329
+ if (this.passwordComponent.enableLengthRule) {
330
+ enabledItems.push('length');
331
+ }
332
+ if (this.passwordComponent.customValidator) {
333
+ enabledItems.push('custom');
334
+ }
335
+ if (this.enableScoreInfo) {
336
+ enabledItems.push('score');
337
+ }
338
+ return enabledItems.indexOf(itemType);
339
+ }
340
+ getLeaveIndex(itemType) {
341
+ const enabledItems = [];
342
+ if (this.passwordComponent.enableLowerCaseLetterRule) {
343
+ enabledItems.push('lowerCase');
344
+ }
345
+ if (this.passwordComponent.enableUpperCaseLetterRule) {
346
+ enabledItems.push('upperCase');
347
+ }
348
+ if (this.passwordComponent.enableDigitRule) {
349
+ enabledItems.push('digit');
350
+ }
351
+ if (this.passwordComponent.enableSpecialCharRule) {
352
+ enabledItems.push('specialChar');
353
+ }
354
+ if (this.passwordComponent.enableLengthRule) {
355
+ enabledItems.push('length');
356
+ }
357
+ if (this.passwordComponent.customValidator) {
358
+ enabledItems.push('custom');
359
+ }
360
+ if (this.enableScoreInfo) {
361
+ enabledItems.push('score');
362
+ }
363
+ return enabledItems.length - enabledItems.indexOf(itemType) - 1;
364
+ }
365
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CmatPasswordStrengthInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
366
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.4", type: CmatPasswordStrengthInfoComponent, isStandalone: true, selector: "cmat-password-strength-info", inputs: { passwordComponent: "passwordComponent", enableScoreInfo: "enableScoreInfo", lowerCaseCriteriaMsg: "lowerCaseCriteriaMsg", upperCaseCriteriaMsg: "upperCaseCriteriaMsg", digitsCriteriaMsg: "digitsCriteriaMsg", specialCharsCriteriaMsg: "specialCharsCriteriaMsg", customCharsCriteriaMsg: "customCharsCriteriaMsg", minCharsCriteriaMsg: "minCharsCriteriaMsg" }, exportAs: ["cmatPasswordStrengthInfo"], ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n<mat-card class=\"info-card\">\r\n <mat-card-content>\r\n @if (passwordComponent.enableLowerCaseLetterRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('lowerCase')\" [style.--leave-item-index]=\"getLeaveIndex('lowerCase')\">\r\n @if (passwordComponent.containAtLeastOneLowerCaseLetter) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{lowerCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableUpperCaseLetterRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('upperCase')\" [style.--leave-item-index]=\"getLeaveIndex('upperCase')\">\r\n @if (passwordComponent.containAtLeastOneUpperCaseLetter) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{upperCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableDigitRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('digit')\" [style.--leave-item-index]=\"getLeaveIndex('digit')\">\r\n @if (passwordComponent.containAtLeastOneDigit) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{digitsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableSpecialCharRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('specialChar')\"\r\n [style.--leave-item-index]=\"getLeaveIndex('specialChar')\">\r\n @if (passwordComponent.containAtLeastOneSpecialChar) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{specialCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableLengthRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('length')\" [style.--leave-item-index]=\"getLeaveIndex('length')\">\r\n @if (passwordComponent.containAtLeastMinChars) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{minCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.customValidator) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('custom')\" [style.--leave-item-index]=\"getLeaveIndex('custom')\">\r\n @if (passwordComponent.containAtCustomChars) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{customCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (enableScoreInfo) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('score')\" [style.--leave-item-index]=\"getLeaveIndex('score')\">\r\n @if (passwordComponent.strength === 100) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>\u5BC6\u7801\u5F3A\u5EA6= {{passwordComponent.strength}} %100</span>\r\n </div>\r\n }\r\n\r\n </mat-card-content>\r\n</mat-card>", styles: ["cmat-password-strength-info{margin-top:20px}cmat-password-strength-info .mat-mdc-card{display:flex;flex-direction:row;flex:1 1 0%;margin:.5rem;box-sizing:border-box;place-content:stretch;align-items:stretch}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content{display:flex;flex-direction:column;box-sizing:border-box;max-width:100%;place-content:stretch;align-items:stretch}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content .mat-icon{margin-right:1rem}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content .info-row{display:flex;flex-direction:row;box-sizing:border-box;align-items:center}cmat-password-strength-info .info-card .info-row.info-row-enter{transition-property:opacity,transform;transition-delay:calc(.3s * var(--enter-item-index, 0));transition-duration:1s;transition-timing-function:cubic-bezier(.8,-.6,.2,1.5)}@starting-style{cmat-password-strength-info .info-card .info-row.info-row-enter{transform:scale(.5);opacity:0}}cmat-password-strength-info .info-card .info-row.info-row-leave{transition-property:opacity,transform,height;transition-delay:calc(.3s * var(--leave-item-index, 0));transition-duration:1s;transition-timing-function:cubic-bezier(.8,-.6,.2,1.5);opacity:0;transform:scale(.5);height:0;margin:0}@starting-style{cmat-password-strength-info .info-card .info-row.info-row-leave{transform:scale(1);opacity:1;height:inherit}}cmat-password-strength-info .shake-info-animation{animation:shake 1s}cmat-password-strength-info .flip-in-x-animation{backface-visibility:visible;animation:flipInX 1s ease-in}cmat-password-strength-info .flip-in-y-animation{backface-visibility:visible;animation:flipInY 1s ease-in}@keyframes shake{0%{transform:translateZ(0)}10%{transform:translate3d(-10px,0,0)}20%{transform:translate3d(10px,0,0)}30%{transform:translate3d(-10px,0,0)}40%{transform:translate3d(10px,0,0)}50%{transform:translate3d(-10px,0,0)}60%{transform:translate3d(10px,0,0)}70%{transform:translate3d(-10px,0,0)}80%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-10px,0,0)}to{transform:translateZ(0)}}@keyframes flipInX{0%{opacity:0;transform:perspective(400px) rotateX(90deg)}40%{opacity:1;transform:perspective(400px) rotateX(-20deg)}60%{transform:perspective(400px) rotateX(10deg)}80%{transform:perspective(400px) rotateX(-5deg)}to{opacity:1;transform:perspective(400px) rotate3d(0,0,0,0)}}@keyframes flipInY{0%{opacity:0;transform:perspective(400px) rotateY(90deg)}40%{opacity:1;transform:perspective(400px) rotateY(-20deg)}60%{transform:perspective(400px) rotateY(10deg)}80%{transform:perspective(400px) rotateY(-5deg)}to{opacity:1;transform:perspective(400px) rotate3d(0,0,0,0)}}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1$2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1$2.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
409
367
  }
410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CmatPasswordStrengthInfoComponent, decorators: [{
368
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CmatPasswordStrengthInfoComponent, decorators: [{
411
369
  type: Component,
412
- args: [{ selector: 'cmat-password-strength-info', exportAs: 'cmatPasswordStrengthInfo', encapsulation: ViewEncapsulation.None, animations: [
413
- // nice stagger effect when showing existing elements
414
- trigger('list', [
415
- transition(':enter', [
416
- // child animation selector + stagger
417
- query('@items', stagger(300, animateChild()))
418
- ]),
419
- ]),
420
- trigger('items', [
421
- // cubic-bezier for a tiny bouncing feel
422
- transition(':enter', [
423
- style({ transform: 'scale(0.5)', opacity: 0 }),
424
- animate('1s cubic-bezier(.8,-0.6,0.2,1.5)', style({ transform: 'scale(1)', opacity: 1 }))
425
- ]),
426
- transition(':leave', [
427
- style({ transform: 'scale(1)', opacity: 1, height: '*' }),
428
- animate('1s cubic-bezier(.8,-0.6,0.2,1.5)', style({ transform: 'scale(0.5)', opacity: 0, height: '0px', margin: '0px' }))
429
- ]),
430
- ]),
431
- trigger('positiveState', [
432
- transition(':enter', [
433
- // eslint-disable-next-line @typescript-eslint/naming-convention
434
- style({ 'backface-visibility': 'visible' }),
435
- animate('{{ timing }}s {{ delay }}s ease-in', keyframes([
436
- style({
437
- opacity: 0,
438
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 90deg)',
439
- offset: 0,
440
- }),
441
- style({
442
- opacity: 1,
443
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -20deg)',
444
- offset: 0.4,
445
- }),
446
- style({
447
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 10deg)',
448
- offset: 0.6,
449
- }),
450
- style({
451
- transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -5deg)',
452
- offset: 0.8,
453
- }),
454
- style({
455
- transform: 'perspective(400px) rotate3d(0, 0, 0, 0)',
456
- offset: 1,
457
- }),
458
- ])),
459
- ], { params: { timing: 1, delay: 0, rotateX: 1, rotateY: 0 } }),
460
- ]),
461
- trigger('negativeState', [
462
- transition(':enter', useAnimation(shake)),
463
- ]),
464
- ], imports: [MatCardModule, MatIconModule], template: "<mat-card @list class=\"info-card\">\r\n <mat-card-content>\r\n @if (passwordComponent.enableLowerCaseLetterRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneLowerCaseLetter) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{lowerCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableUpperCaseLetterRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneUpperCaseLetter) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{upperCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableDigitRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneDigit) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{digitsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableSpecialCharRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneSpecialChar) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{specialCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableLengthRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastMinChars) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{minCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.customValidator) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtCustomChars) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{customCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (enableScoreInfo) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.strength === 100) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>\u5BC6\u7801\u5F3A\u5EA6= {{passwordComponent.strength}} %100</span>\r\n </div>\r\n }\r\n\r\n </mat-card-content>\r\n</mat-card>", styles: ["cmat-password-strength-info{margin-top:20px}cmat-password-strength-info .mat-mdc-card{display:flex;flex-direction:row;flex:1 1 0%;margin:.5rem;box-sizing:border-box;place-content:stretch;align-items:stretch}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content{display:flex;flex-direction:column;box-sizing:border-box;max-width:100%;place-content:stretch;align-items:stretch}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content .mat-icon{margin-right:1rem}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content .info-row{display:flex;flex-direction:row;box-sizing:border-box;align-items:center}\n"] }]
370
+ args: [{ selector: 'cmat-password-strength-info', exportAs: 'cmatPasswordStrengthInfo', encapsulation: ViewEncapsulation.None, imports: [MatCardModule, MatIconModule], template: "<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n<mat-card class=\"info-card\">\r\n <mat-card-content>\r\n @if (passwordComponent.enableLowerCaseLetterRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('lowerCase')\" [style.--leave-item-index]=\"getLeaveIndex('lowerCase')\">\r\n @if (passwordComponent.containAtLeastOneLowerCaseLetter) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{lowerCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableUpperCaseLetterRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('upperCase')\" [style.--leave-item-index]=\"getLeaveIndex('upperCase')\">\r\n @if (passwordComponent.containAtLeastOneUpperCaseLetter) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{upperCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableDigitRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('digit')\" [style.--leave-item-index]=\"getLeaveIndex('digit')\">\r\n @if (passwordComponent.containAtLeastOneDigit) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{digitsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableSpecialCharRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('specialChar')\"\r\n [style.--leave-item-index]=\"getLeaveIndex('specialChar')\">\r\n @if (passwordComponent.containAtLeastOneSpecialChar) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{specialCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableLengthRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('length')\" [style.--leave-item-index]=\"getLeaveIndex('length')\">\r\n @if (passwordComponent.containAtLeastMinChars) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{minCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.customValidator) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('custom')\" [style.--leave-item-index]=\"getLeaveIndex('custom')\">\r\n @if (passwordComponent.containAtCustomChars) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{customCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (enableScoreInfo) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('score')\" [style.--leave-item-index]=\"getLeaveIndex('score')\">\r\n @if (passwordComponent.strength === 100) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>\u5BC6\u7801\u5F3A\u5EA6= {{passwordComponent.strength}} %100</span>\r\n </div>\r\n }\r\n\r\n </mat-card-content>\r\n</mat-card>", styles: ["cmat-password-strength-info{margin-top:20px}cmat-password-strength-info .mat-mdc-card{display:flex;flex-direction:row;flex:1 1 0%;margin:.5rem;box-sizing:border-box;place-content:stretch;align-items:stretch}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content{display:flex;flex-direction:column;box-sizing:border-box;max-width:100%;place-content:stretch;align-items:stretch}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content .mat-icon{margin-right:1rem}cmat-password-strength-info .mat-mdc-card .mat-mdc-card-content .info-row{display:flex;flex-direction:row;box-sizing:border-box;align-items:center}cmat-password-strength-info .info-card .info-row.info-row-enter{transition-property:opacity,transform;transition-delay:calc(.3s * var(--enter-item-index, 0));transition-duration:1s;transition-timing-function:cubic-bezier(.8,-.6,.2,1.5)}@starting-style{cmat-password-strength-info .info-card .info-row.info-row-enter{transform:scale(.5);opacity:0}}cmat-password-strength-info .info-card .info-row.info-row-leave{transition-property:opacity,transform,height;transition-delay:calc(.3s * var(--leave-item-index, 0));transition-duration:1s;transition-timing-function:cubic-bezier(.8,-.6,.2,1.5);opacity:0;transform:scale(.5);height:0;margin:0}@starting-style{cmat-password-strength-info .info-card .info-row.info-row-leave{transform:scale(1);opacity:1;height:inherit}}cmat-password-strength-info .shake-info-animation{animation:shake 1s}cmat-password-strength-info .flip-in-x-animation{backface-visibility:visible;animation:flipInX 1s ease-in}cmat-password-strength-info .flip-in-y-animation{backface-visibility:visible;animation:flipInY 1s ease-in}@keyframes shake{0%{transform:translateZ(0)}10%{transform:translate3d(-10px,0,0)}20%{transform:translate3d(10px,0,0)}30%{transform:translate3d(-10px,0,0)}40%{transform:translate3d(10px,0,0)}50%{transform:translate3d(-10px,0,0)}60%{transform:translate3d(10px,0,0)}70%{transform:translate3d(-10px,0,0)}80%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-10px,0,0)}to{transform:translateZ(0)}}@keyframes flipInX{0%{opacity:0;transform:perspective(400px) rotateX(90deg)}40%{opacity:1;transform:perspective(400px) rotateX(-20deg)}60%{transform:perspective(400px) rotateX(10deg)}80%{transform:perspective(400px) rotateX(-5deg)}to{opacity:1;transform:perspective(400px) rotate3d(0,0,0,0)}}@keyframes flipInY{0%{opacity:0;transform:perspective(400px) rotateY(90deg)}40%{opacity:1;transform:perspective(400px) rotateY(-20deg)}60%{transform:perspective(400px) rotateY(10deg)}80%{transform:perspective(400px) rotateY(-5deg)}to{opacity:1;transform:perspective(400px) rotate3d(0,0,0,0)}}\n"] }]
465
371
  }], propDecorators: { passwordComponent: [{
466
372
  type: Input
467
373
  }], enableScoreInfo: [{
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-components-password-strength.mjs","sources":["../../../projects/cmat/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.ts","../../../projects/cmat/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.html","../../../projects/cmat/components/password-strength/enum.ts","../../../projects/cmat/components/password-strength/mat-password-strength-validator.ts","../../../projects/cmat/components/password-strength/regexp.class.ts","../../../projects/cmat/components/password-strength/mat-password-strength/mat-password-strength.component.ts","../../../projects/cmat/components/password-strength/mat-password-strength/mat-password-strength.component.html","../../../projects/cmat/components/password-strength/animations/index.ts","../../../projects/cmat/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.ts","../../../projects/cmat/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.html","../../../projects/cmat/components/password-strength/cmat-components-password-strength.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\ntype Type = 'text' | 'password';\r\n\r\n@Component({\r\n selector: 'cmat-pass-toggle-visibility',\r\n templateUrl: './mat-pass-toggle-visibility.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'cmatPassToggleVisibility',\r\n imports: [MatButtonModule, MatRippleModule, MatIconModule]\r\n})\r\nexport class CmatPassToggleVisibilityComponent {\r\n @Input()\r\n isVisible: boolean;\r\n @Input()\r\n tabindex?: string;\r\n\r\n _type: Type = 'text';\r\n\r\n get type(): string {\r\n return this.isVisible ? 'text' : 'password';\r\n }\r\n\r\n}\r\n","<button type=\"button\" class=\"matIconButton cdk-focused cdk-mouse-focused\" matIconButton \r\n matRipple [matRippleCentered]=\"true\" [attr.tabindex]=\"tabindex ? tabindex : null\" (click)=\"isVisible = !isVisible\">\r\n <mat-icon svgIcon=\"{{isVisible ? 'mat_outline:visibility' : 'mat_outline:visibility_off' }}\"></mat-icon>\r\n</button>","/* eslint-disable @typescript-eslint/naming-convention */\r\nexport enum Colors {\r\n primary = 'primary',\r\n accent = 'accent',\r\n warn = 'warn'\r\n}\r\n\r\nexport enum Criteria {\r\n at_least_eight_chars = 'minChar',\r\n at_least_one_lower_case_char = 'lowerCase',\r\n at_least_one_upper_case_char = 'upperCase',\r\n at_least_one_digit_char = 'digit',\r\n at_least_one_special_char = ' specialChar',\r\n at_custom_chars = 'customChars'\r\n}\r\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\r\n\r\nexport class CmatPasswordStrengthValidator {\r\n isUndefinedOrEmpty(control: AbstractControl): void {\r\n if (!control?.value || control.value.length === 0) {\r\n return void 0;\r\n }\r\n }\r\n\r\n validate(criteria: string, regex: RegExp): ValidatorFn {\r\n return (control: AbstractControl): Record<string, any> | null => {\r\n this.isUndefinedOrEmpty(control);\r\n if (!regex.test(control.value)) {\r\n const failed: any = {};\r\n failed[criteria] = {\r\n actualValue: control.value,\r\n requiredPattern: regex\r\n };\r\n return failed;\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n confirm(password: string): ValidatorFn {\r\n return (control: AbstractControl): Record<string, any> | null => {\r\n this.isUndefinedOrEmpty(control);\r\n if (control.value !== password) {\r\n return {\r\n notConfirmed: {\r\n password: password,\r\n passwordConfirmation: control.value\r\n }\r\n };\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n}\r\n","// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const RegExpValidator = {\r\n 'lowerCase': RegExp(/^(?=.*?[a-z])/),\r\n 'upperCase': RegExp(/^(?=.*?[A-Z])/),\r\n 'digit': RegExp(/^(?=.*?[0-9])/),\r\n 'specialChar': RegExp(/^(?=.*?[\" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\"])/),\r\n};\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { FormControl, ValidatorFn, Validators } from '@angular/forms';\r\nimport { ThemePalette } from '@angular/material/core';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { Colors, Criteria } from '../enum';\r\nimport { CmatPasswordStrengthValidator } from '../mat-password-strength-validator';\r\nimport { RegExpValidator } from '../regexp.class';\r\n\r\n@Component({\r\n selector: 'cmat-password-strength',\r\n exportAs: 'cmatPasswordStrength',\r\n templateUrl: './mat-password-strength.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatProgressBarModule]\r\n})\r\nexport class CmatPasswordStrengthComponent implements OnInit, OnChanges {\r\n @Input() password: string;\r\n @Input() externalError: boolean;\r\n\r\n @Input() enableLengthRule = true;\r\n @Input() enableLowerCaseLetterRule = true;\r\n @Input() enableUpperCaseLetterRule = true;\r\n @Input() enableDigitRule = true;\r\n @Input() enableSpecialCharRule = true;\r\n\r\n @Input() min = 8;\r\n @Input() max = 30;\r\n @Input() customValidator: RegExp;\r\n\r\n @Input() warnThreshold = 21;\r\n @Input() accentThreshold = 81;\r\n\r\n @Output()\r\n strengthChanged = new EventEmitter<number>();\r\n\r\n criteriaMap = new Map<Criteria, RegExp>();\r\n\r\n containAtLeastMinChars: boolean | void;\r\n containAtLeastOneLowerCaseLetter: boolean | void;\r\n containAtLeastOneUpperCaseLetter: boolean | void;\r\n containAtLeastOneDigit: boolean | void;\r\n containAtLeastOneSpecialChar: boolean | void;\r\n containAtCustomChars: boolean | void;\r\n\r\n // TO ACCESS VIA CONTENT CHILD\r\n passwordFormControl: FormControl = new FormControl();\r\n passwordConfirmationFormControl: FormControl = new FormControl();\r\n\r\n validatorsArray: ValidatorFn[] = [];\r\n validators: ValidatorFn | null;\r\n cmatPasswordStrengthValidator = new CmatPasswordStrengthValidator();\r\n\r\n private _strength = 0;\r\n private _color: ThemePalette = 'warn';\r\n\r\n get strength(): number {\r\n return this._strength ? this._strength : 0;\r\n }\r\n get color(): ThemePalette {\r\n return this._color;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setRulesAndValidators();\r\n\r\n if (this.password) {\r\n this.calculatePasswordStrength();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ((changes['externalError']?.firstChange) || (changes['password']?.isFirstChange())) {\r\n return;\r\n } else if (changes['externalError']?.currentValue) {\r\n this._color = Colors.warn;\r\n return;\r\n } else if (changes['password'] && changes['password'].previousValue === changes['password'].currentValue && !changes['password'].firstChange) {\r\n this._checkPassword();\r\n } else if (this.password && this.password.length > 0) {\r\n this._checkPassword();\r\n } else {\r\n this.reset();\r\n }\r\n }\r\n\r\n parseCustomValidatorsRegex(): RegExp {\r\n if (this.customValidator instanceof RegExp) {\r\n return this.customValidator;\r\n } else {\r\n return RegExp(this.customValidator);\r\n }\r\n }\r\n\r\n setRulesAndValidators(): void {\r\n this.validatorsArray = [];\r\n this.criteriaMap = new Map<Criteria, RegExp>();\r\n this.passwordConfirmationFormControl\r\n .setValidators(Validators.compose([\r\n Validators.required, this.cmatPasswordStrengthValidator.confirm(this.password)\r\n ]));\r\n this.validatorsArray.push(Validators.required);\r\n if (this.enableLengthRule) {\r\n this.criteriaMap.set(Criteria.at_least_eight_chars, RegExp(`^.{${this.min},${this.max}}$`));\r\n this.validatorsArray.push(Validators.minLength(this.min));\r\n this.validatorsArray.push(Validators.maxLength(this.max));\r\n }\r\n if (this.enableLowerCaseLetterRule) {\r\n this.criteriaMap.set(Criteria.at_least_one_lower_case_char, RegExpValidator.lowerCase);\r\n this.validatorsArray.push(Validators.pattern(RegExpValidator.lowerCase));\r\n }\r\n if (this.enableUpperCaseLetterRule) {\r\n this.criteriaMap.set(Criteria.at_least_one_upper_case_char, RegExpValidator.upperCase);\r\n this.validatorsArray.push(Validators.pattern(RegExpValidator.upperCase));\r\n }\r\n if (this.enableDigitRule) {\r\n this.criteriaMap.set(Criteria.at_least_one_digit_char, RegExpValidator.digit);\r\n this.validatorsArray.push(Validators.pattern(RegExpValidator.digit));\r\n }\r\n if (this.enableSpecialCharRule) {\r\n this.criteriaMap.set(Criteria.at_least_one_special_char, RegExpValidator.specialChar);\r\n this.validatorsArray.push(Validators.pattern(RegExpValidator.specialChar));\r\n }\r\n if (this.customValidator) {\r\n this.criteriaMap.set(Criteria.at_custom_chars, this.parseCustomValidatorsRegex());\r\n this.validatorsArray.push(Validators.pattern(this.parseCustomValidatorsRegex()));\r\n }\r\n\r\n this.criteriaMap.forEach((value: any, key: string) => {\r\n this.validatorsArray.push(this.cmatPasswordStrengthValidator.validate(key, value));\r\n });\r\n\r\n this.passwordFormControl.setValidators(Validators.compose([...this.validatorsArray]));\r\n this.validators = Validators.compose([...this.validatorsArray]);\r\n\r\n }\r\n\r\n calculatePasswordStrength(): void {\r\n const requirements: boolean[] = [];\r\n const unit = 100 / this.criteriaMap.size;\r\n\r\n requirements.push(\r\n this.enableLengthRule ? this._containAtLeastMinChars() : false,\r\n this.enableLowerCaseLetterRule ? this._containAtLeastOneLowerCaseLetter() : false,\r\n this.enableUpperCaseLetterRule ? this._containAtLeastOneUpperCaseLetter() : false,\r\n this.enableDigitRule ? this._containAtLeastOneDigit() : false,\r\n this.enableSpecialCharRule ? this._containAtLeastOneSpecialChar() : false,\r\n this.customValidator ? this._containCustomChars() : false\r\n );\r\n\r\n this._strength = requirements.filter(v => v).length * unit;\r\n this.strengthChanged.emit(this.strength);\r\n this.setRulesAndValidators();\r\n\r\n if (this._strength < this.warnThreshold) {\r\n this._color = Colors.warn;\r\n } else if (this._strength < this.accentThreshold) {\r\n this._color = Colors.accent;\r\n } else {\r\n this._color = Colors.primary;\r\n }\r\n }\r\n\r\n reset(): void {\r\n this._strength = 0;\r\n this.containAtLeastMinChars =\r\n this.containAtLeastOneLowerCaseLetter =\r\n this.containAtLeastOneUpperCaseLetter =\r\n this.containAtLeastOneDigit =\r\n this.containAtCustomChars =\r\n this.containAtLeastOneSpecialChar = false;\r\n\r\n this._color = Colors.warn;\r\n this.strengthChanged.emit(this.strength);\r\n }\r\n\r\n private _containAtLeastMinChars(): boolean {\r\n this.containAtLeastMinChars = this.password.length >= this.min;\r\n return this.containAtLeastMinChars;\r\n }\r\n\r\n private _containAtLeastOneLowerCaseLetter(): boolean {\r\n this.containAtLeastOneLowerCaseLetter =\r\n this.criteriaMap\r\n .get(Criteria.at_least_one_lower_case_char)?.test(this.password);\r\n return this.containAtLeastOneLowerCaseLetter ?? false;\r\n }\r\n\r\n private _containAtLeastOneUpperCaseLetter(): boolean {\r\n this.containAtLeastOneUpperCaseLetter =\r\n this.criteriaMap\r\n .get(Criteria.at_least_one_upper_case_char)?.test(this.password);\r\n return this.containAtLeastOneUpperCaseLetter ?? false;\r\n }\r\n\r\n private _containAtLeastOneDigit(): boolean {\r\n this.containAtLeastOneDigit =\r\n this.criteriaMap\r\n .get(Criteria.at_least_one_digit_char)?.test(this.password);\r\n return this.containAtLeastOneDigit ?? false;\r\n }\r\n\r\n private _containAtLeastOneSpecialChar(): boolean {\r\n this.containAtLeastOneSpecialChar =\r\n this.criteriaMap\r\n .get(Criteria.at_least_one_special_char)?.test(this.password);\r\n return this.containAtLeastOneSpecialChar ?? false;\r\n }\r\n\r\n private _containCustomChars(): boolean {\r\n this.containAtCustomChars =\r\n this.criteriaMap\r\n .get(Criteria.at_custom_chars)?.test(this.password);\r\n return this.containAtCustomChars ?? false;\r\n }\r\n\r\n private _checkPassword(): void {\r\n this.calculatePasswordStrength();\r\n this.passwordConfirmationFormControl.updateValueAndValidity();\r\n }\r\n}\r\n","<mat-progress-bar mode=\"determinate\" [color]=\"color\" [value]=\"strength\"></mat-progress-bar>","import { animate, animation, AnimationReferenceMetadata, keyframes, style } from '@angular/animations';\r\n\r\nexport const flipInX = flipIn(1, 1, 0);\r\nexport const flipInY = flipIn(1, 0, 1);\r\n\r\nexport const shake = animation(\r\n animate(\r\n '{{ timing }}s {{ delay }}s',\r\n keyframes([\r\n style({ transform: 'translate3d(0, 0, 0)', offset: 0 }),\r\n style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.1 }),\r\n style({ transform: 'translate3d(10px, 0, 0)', offset: 0.2 }),\r\n style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.3 }),\r\n style({ transform: 'translate3d(10px, 0, 0)', offset: 0.4 }),\r\n style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.5 }),\r\n style({ transform: 'translate3d(10px, 0, 0)', offset: 0.6 }),\r\n style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.7 }),\r\n style({ transform: 'translate3d(10px, 0, 0)', offset: 0.8 }),\r\n style({ transform: 'translate3d(-10px, 0, 0)', offset: 0.9 }),\r\n style({ transform: 'translate3d(0, 0, 0)', offset: 1 }),\r\n ])\r\n ),\r\n { params: { timing: 1, delay: 0 } }\r\n);\r\n\r\n\r\nfunction flipIn(timing: number, rotateX: number, rotateY: number): AnimationReferenceMetadata {\r\n const params = { timing: timing, delay: 0, rotateX, rotateY };\r\n\r\n return animation(\r\n [\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n style({ 'backface-visibility': 'visible' }),\r\n animate(\r\n '{{ timing }}s {{ delay }}s ease-in',\r\n keyframes([\r\n style({\r\n opacity: 0,\r\n transform:\r\n 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 90deg)',\r\n offset: 0,\r\n }),\r\n style({\r\n opacity: 1,\r\n transform:\r\n 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -20deg)',\r\n offset: 0.4,\r\n }),\r\n style({\r\n transform:\r\n 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 10deg)',\r\n offset: 0.6,\r\n }),\r\n style({\r\n transform:\r\n 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -5deg)',\r\n offset: 0.8,\r\n }),\r\n style({\r\n transform: 'perspective(400px) rotate3d(0, 0, 0, 0)',\r\n offset: 1,\r\n }),\r\n ])\r\n ),\r\n ],\r\n { params }\r\n );\r\n}\r\n","import { animate, animateChild, keyframes, query, stagger, style, transition, trigger, useAnimation } from '@angular/animations';\r\nimport { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { shake } from '../animations'\r\nimport { CmatPasswordStrengthComponent } from '../mat-password-strength/mat-password-strength.component';\r\n\r\n@Component({\r\n selector: 'cmat-password-strength-info',\r\n exportAs: 'cmatPasswordStrengthInfo',\r\n templateUrl: './mat-password-strength-info.component.html',\r\n styleUrls: ['./mat-password-strength-info.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n // nice stagger effect when showing existing elements\r\n trigger('list', [\r\n transition(':enter', [\r\n // child animation selector + stagger\r\n query('@items', stagger(300, animateChild()))\r\n ]),\r\n ]),\r\n trigger('items', [\r\n // cubic-bezier for a tiny bouncing feel\r\n transition(':enter', [\r\n style({ transform: 'scale(0.5)', opacity: 0 }),\r\n animate('1s cubic-bezier(.8,-0.6,0.2,1.5)', style({ transform: 'scale(1)', opacity: 1 }))\r\n ]),\r\n transition(':leave', [\r\n style({ transform: 'scale(1)', opacity: 1, height: '*' }),\r\n animate('1s cubic-bezier(.8,-0.6,0.2,1.5)', style({ transform: 'scale(0.5)', opacity: 0, height: '0px', margin: '0px' }))\r\n ]),\r\n ]),\r\n trigger('positiveState', [\r\n transition(':enter', [\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n style({ 'backface-visibility': 'visible' }),\r\n animate('{{ timing }}s {{ delay }}s ease-in', keyframes([\r\n style({\r\n opacity: 0,\r\n transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 90deg)',\r\n offset: 0,\r\n }),\r\n style({\r\n opacity: 1,\r\n transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -20deg)',\r\n offset: 0.4,\r\n }),\r\n style({\r\n transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, 10deg)',\r\n offset: 0.6,\r\n }),\r\n style({\r\n transform: 'perspective(400px) rotate3d({{ rotateX }}, {{ rotateY }}, 0, -5deg)',\r\n offset: 0.8,\r\n }),\r\n style({\r\n transform: 'perspective(400px) rotate3d(0, 0, 0, 0)',\r\n offset: 1,\r\n }),\r\n ])),\r\n ], { params: { timing: 1, delay: 0, rotateX: 1, rotateY: 0 } }),\r\n ]),\r\n trigger('negativeState', [\r\n transition(':enter', useAnimation(shake)),\r\n ]),\r\n ],\r\n imports: [MatCardModule, MatIconModule]\r\n})\r\nexport class CmatPasswordStrengthInfoComponent implements OnInit {\r\n\r\n @Input()\r\n passwordComponent: CmatPasswordStrengthComponent;\r\n\r\n @Input()\r\n enableScoreInfo = false;\r\n\r\n @Input()\r\n lowerCaseCriteriaMsg = '包含至少一个小写字母';\r\n\r\n @Input()\r\n upperCaseCriteriaMsg = '包含至少一个大写字母';\r\n\r\n @Input()\r\n digitsCriteriaMsg = '包含至少一个数字';\r\n\r\n @Input()\r\n specialCharsCriteriaMsg = '包含至少一个特殊字符';\r\n\r\n @Input()\r\n customCharsCriteriaMsg = '包含至少一个传统字符';\r\n\r\n @Input()\r\n minCharsCriteriaMsg: string;\r\n\r\n ngOnInit(): void {\r\n if (!this.minCharsCriteriaMsg) {\r\n this.minCharsCriteriaMsg = `包含至少 ${this.passwordComponent.min} 个字符`;\r\n }\r\n }\r\n\r\n}\r\n","<mat-card @list class=\"info-card\">\r\n <mat-card-content>\r\n @if (passwordComponent.enableLowerCaseLetterRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneLowerCaseLetter) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{lowerCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableUpperCaseLetterRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneUpperCaseLetter) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{upperCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableDigitRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneDigit) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{digitsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableSpecialCharRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastOneSpecialChar) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{specialCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableLengthRule) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtLeastMinChars) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{minCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.customValidator) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.containAtCustomChars) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>{{customCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (enableScoreInfo) {\r\n <div @items class=\"info-row\">\r\n @if (passwordComponent.strength === 100) {\r\n <mat-icon @positiveState color=\"primary\" svgIcon=\"mat_outline:done\"></mat-icon>\r\n } @else {\r\n <mat-icon @negativeState color=\"warn\" svgIcon=\"mat_outline:error\"></mat-icon>\r\n }\r\n <span>密码强度= {{passwordComponent.strength}} %100</span>\r\n </div>\r\n }\r\n\r\n </mat-card-content>\r\n</mat-card>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"cmat-components-password-strength.mjs","sources":["../../../projects/cmat/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.ts","../../../projects/cmat/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.html","../../../projects/cmat/components/password-strength/enum.ts","../../../projects/cmat/components/password-strength/mat-password-strength-validator.ts","../../../projects/cmat/components/password-strength/regexp.class.ts","../../../projects/cmat/components/password-strength/mat-password-strength/mat-password-strength.component.ts","../../../projects/cmat/components/password-strength/mat-password-strength/mat-password-strength.component.html","../../../projects/cmat/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.ts","../../../projects/cmat/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.html","../../../projects/cmat/components/password-strength/cmat-components-password-strength.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\ntype Type = 'text' | 'password';\r\n\r\n@Component({\r\n selector: 'cmat-pass-toggle-visibility',\r\n templateUrl: './mat-pass-toggle-visibility.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'cmatPassToggleVisibility',\r\n imports: [MatButtonModule, MatRippleModule, MatIconModule]\r\n})\r\nexport class CmatPassToggleVisibilityComponent {\r\n @Input()\r\n isVisible: boolean;\r\n @Input()\r\n tabindex?: string;\r\n\r\n _type: Type = 'text';\r\n\r\n get type(): string {\r\n return this.isVisible ? 'text' : 'password';\r\n }\r\n\r\n}\r\n","<button type=\"button\" class=\"matIconButton cdk-focused cdk-mouse-focused\" matIconButton \r\n matRipple [matRippleCentered]=\"true\" [attr.tabindex]=\"tabindex ? tabindex : null\" (click)=\"isVisible = !isVisible\">\r\n <mat-icon svgIcon=\"{{isVisible ? 'mat_outline:visibility' : 'mat_outline:visibility_off' }}\"></mat-icon>\r\n</button>","/* eslint-disable @typescript-eslint/naming-convention */\r\nexport enum Colors {\r\n primary = 'primary',\r\n accent = 'accent',\r\n warn = 'warn'\r\n}\r\n\r\nexport enum Criteria {\r\n at_least_eight_chars = 'minChar',\r\n at_least_one_lower_case_char = 'lowerCase',\r\n at_least_one_upper_case_char = 'upperCase',\r\n at_least_one_digit_char = 'digit',\r\n at_least_one_special_char = ' specialChar',\r\n at_custom_chars = 'customChars'\r\n}\r\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\r\n\r\nexport class CmatPasswordStrengthValidator {\r\n isUndefinedOrEmpty(control: AbstractControl): void {\r\n if (!control?.value || control.value.length === 0) {\r\n return void 0;\r\n }\r\n }\r\n\r\n validate(criteria: string, regex: RegExp): ValidatorFn {\r\n return (control: AbstractControl): Record<string, any> | null => {\r\n this.isUndefinedOrEmpty(control);\r\n if (!regex.test(control.value)) {\r\n const failed: any = {};\r\n failed[criteria] = {\r\n actualValue: control.value,\r\n requiredPattern: regex\r\n };\r\n return failed;\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n confirm(password: string): ValidatorFn {\r\n return (control: AbstractControl): Record<string, any> | null => {\r\n this.isUndefinedOrEmpty(control);\r\n if (control.value !== password) {\r\n return {\r\n notConfirmed: {\r\n password: password,\r\n passwordConfirmation: control.value\r\n }\r\n };\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n}\r\n","// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const RegExpValidator = {\r\n 'lowerCase': RegExp(/^(?=.*?[a-z])/),\r\n 'upperCase': RegExp(/^(?=.*?[A-Z])/),\r\n 'digit': RegExp(/^(?=.*?[0-9])/),\r\n 'specialChar': RegExp(/^(?=.*?[\" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\"])/),\r\n};\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { FormControl, ValidatorFn, Validators } from '@angular/forms';\r\nimport { ThemePalette } from '@angular/material/core';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { Colors, Criteria } from '../enum';\r\nimport { CmatPasswordStrengthValidator } from '../mat-password-strength-validator';\r\nimport { RegExpValidator } from '../regexp.class';\r\n\r\n@Component({\r\n selector: 'cmat-password-strength',\r\n exportAs: 'cmatPasswordStrength',\r\n templateUrl: './mat-password-strength.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatProgressBarModule]\r\n})\r\nexport class CmatPasswordStrengthComponent implements OnInit, OnChanges {\r\n @Input() password: string;\r\n @Input() externalError: boolean;\r\n\r\n @Input() enableLengthRule = true;\r\n @Input() enableLowerCaseLetterRule = true;\r\n @Input() enableUpperCaseLetterRule = true;\r\n @Input() enableDigitRule = true;\r\n @Input() enableSpecialCharRule = true;\r\n\r\n @Input() min = 8;\r\n @Input() max = 30;\r\n @Input() customValidator: RegExp;\r\n\r\n @Input() warnThreshold = 21;\r\n @Input() accentThreshold = 81;\r\n\r\n @Output()\r\n strengthChanged = new EventEmitter<number>();\r\n\r\n criteriaMap = new Map<Criteria, RegExp>();\r\n\r\n containAtLeastMinChars: boolean | void;\r\n containAtLeastOneLowerCaseLetter: boolean | void;\r\n containAtLeastOneUpperCaseLetter: boolean | void;\r\n containAtLeastOneDigit: boolean | void;\r\n containAtLeastOneSpecialChar: boolean | void;\r\n containAtCustomChars: boolean | void;\r\n\r\n // TO ACCESS VIA CONTENT CHILD\r\n passwordFormControl: FormControl = new FormControl();\r\n passwordConfirmationFormControl: FormControl = new FormControl();\r\n\r\n validatorsArray: ValidatorFn[] = [];\r\n validators: ValidatorFn | null;\r\n cmatPasswordStrengthValidator = new CmatPasswordStrengthValidator();\r\n\r\n private _strength = 0;\r\n private _color: ThemePalette = 'warn';\r\n\r\n get strength(): number {\r\n return this._strength ? this._strength : 0;\r\n }\r\n get color(): ThemePalette {\r\n return this._color;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setRulesAndValidators();\r\n\r\n if (this.password) {\r\n this.calculatePasswordStrength();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ((changes['externalError']?.firstChange) || (changes['password']?.isFirstChange())) {\r\n return;\r\n } else if (changes['externalError']?.currentValue) {\r\n this._color = Colors.warn;\r\n return;\r\n } else if (changes['password'] && changes['password'].previousValue === changes['password'].currentValue && !changes['password'].firstChange) {\r\n this._checkPassword();\r\n } else if (this.password && this.password.length > 0) {\r\n this._checkPassword();\r\n } else {\r\n this.reset();\r\n }\r\n }\r\n\r\n parseCustomValidatorsRegex(): RegExp {\r\n if (this.customValidator instanceof RegExp) {\r\n return this.customValidator;\r\n } else {\r\n return RegExp(this.customValidator);\r\n }\r\n }\r\n\r\n setRulesAndValidators(): void {\r\n this.validatorsArray = [];\r\n this.criteriaMap = new Map<Criteria, RegExp>();\r\n this.passwordConfirmationFormControl\r\n .setValidators(Validators.compose([\r\n Validators.required, this.cmatPasswordStrengthValidator.confirm(this.password)\r\n ]));\r\n this.validatorsArray.push(Validators.required);\r\n if (this.enableLengthRule) {\r\n this.criteriaMap.set(Criteria.at_least_eight_chars, RegExp(`^.{${this.min},${this.max}}$`));\r\n this.validatorsArray.push(Validators.minLength(this.min));\r\n this.validatorsArray.push(Validators.maxLength(this.max));\r\n }\r\n if (this.enableLowerCaseLetterRule) {\r\n this.criteriaMap.set(Criteria.at_least_one_lower_case_char, RegExpValidator.lowerCase);\r\n this.validatorsArray.push(Validators.pattern(RegExpValidator.lowerCase));\r\n }\r\n if (this.enableUpperCaseLetterRule) {\r\n this.criteriaMap.set(Criteria.at_least_one_upper_case_char, RegExpValidator.upperCase);\r\n this.validatorsArray.push(Validators.pattern(RegExpValidator.upperCase));\r\n }\r\n if (this.enableDigitRule) {\r\n this.criteriaMap.set(Criteria.at_least_one_digit_char, RegExpValidator.digit);\r\n this.validatorsArray.push(Validators.pattern(RegExpValidator.digit));\r\n }\r\n if (this.enableSpecialCharRule) {\r\n this.criteriaMap.set(Criteria.at_least_one_special_char, RegExpValidator.specialChar);\r\n this.validatorsArray.push(Validators.pattern(RegExpValidator.specialChar));\r\n }\r\n if (this.customValidator) {\r\n this.criteriaMap.set(Criteria.at_custom_chars, this.parseCustomValidatorsRegex());\r\n this.validatorsArray.push(Validators.pattern(this.parseCustomValidatorsRegex()));\r\n }\r\n\r\n this.criteriaMap.forEach((value: any, key: string) => {\r\n this.validatorsArray.push(this.cmatPasswordStrengthValidator.validate(key, value));\r\n });\r\n\r\n this.passwordFormControl.setValidators(Validators.compose([...this.validatorsArray]));\r\n this.validators = Validators.compose([...this.validatorsArray]);\r\n\r\n }\r\n\r\n calculatePasswordStrength(): void {\r\n const requirements: boolean[] = [];\r\n const unit = 100 / this.criteriaMap.size;\r\n\r\n requirements.push(\r\n this.enableLengthRule ? this._containAtLeastMinChars() : false,\r\n this.enableLowerCaseLetterRule ? this._containAtLeastOneLowerCaseLetter() : false,\r\n this.enableUpperCaseLetterRule ? this._containAtLeastOneUpperCaseLetter() : false,\r\n this.enableDigitRule ? this._containAtLeastOneDigit() : false,\r\n this.enableSpecialCharRule ? this._containAtLeastOneSpecialChar() : false,\r\n this.customValidator ? this._containCustomChars() : false\r\n );\r\n\r\n this._strength = requirements.filter(v => v).length * unit;\r\n this.strengthChanged.emit(this.strength);\r\n this.setRulesAndValidators();\r\n\r\n if (this._strength < this.warnThreshold) {\r\n this._color = Colors.warn;\r\n } else if (this._strength < this.accentThreshold) {\r\n this._color = Colors.accent;\r\n } else {\r\n this._color = Colors.primary;\r\n }\r\n }\r\n\r\n reset(): void {\r\n this._strength = 0;\r\n this.containAtLeastMinChars =\r\n this.containAtLeastOneLowerCaseLetter =\r\n this.containAtLeastOneUpperCaseLetter =\r\n this.containAtLeastOneDigit =\r\n this.containAtCustomChars =\r\n this.containAtLeastOneSpecialChar = false;\r\n\r\n this._color = Colors.warn;\r\n this.strengthChanged.emit(this.strength);\r\n }\r\n\r\n private _containAtLeastMinChars(): boolean {\r\n this.containAtLeastMinChars = this.password.length >= this.min;\r\n return this.containAtLeastMinChars;\r\n }\r\n\r\n private _containAtLeastOneLowerCaseLetter(): boolean {\r\n this.containAtLeastOneLowerCaseLetter =\r\n this.criteriaMap\r\n .get(Criteria.at_least_one_lower_case_char)?.test(this.password);\r\n return this.containAtLeastOneLowerCaseLetter ?? false;\r\n }\r\n\r\n private _containAtLeastOneUpperCaseLetter(): boolean {\r\n this.containAtLeastOneUpperCaseLetter =\r\n this.criteriaMap\r\n .get(Criteria.at_least_one_upper_case_char)?.test(this.password);\r\n return this.containAtLeastOneUpperCaseLetter ?? false;\r\n }\r\n\r\n private _containAtLeastOneDigit(): boolean {\r\n this.containAtLeastOneDigit =\r\n this.criteriaMap\r\n .get(Criteria.at_least_one_digit_char)?.test(this.password);\r\n return this.containAtLeastOneDigit ?? false;\r\n }\r\n\r\n private _containAtLeastOneSpecialChar(): boolean {\r\n this.containAtLeastOneSpecialChar =\r\n this.criteriaMap\r\n .get(Criteria.at_least_one_special_char)?.test(this.password);\r\n return this.containAtLeastOneSpecialChar ?? false;\r\n }\r\n\r\n private _containCustomChars(): boolean {\r\n this.containAtCustomChars =\r\n this.criteriaMap\r\n .get(Criteria.at_custom_chars)?.test(this.password);\r\n return this.containAtCustomChars ?? false;\r\n }\r\n\r\n private _checkPassword(): void {\r\n this.calculatePasswordStrength();\r\n this.passwordConfirmationFormControl.updateValueAndValidity();\r\n }\r\n}\r\n","<mat-progress-bar mode=\"determinate\" [color]=\"color\" [value]=\"strength\"></mat-progress-bar>","import { AfterViewInit, ChangeDetectorRef, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { CmatPasswordStrengthComponent } from '../mat-password-strength/mat-password-strength.component';\r\n\r\n@Component({\r\n selector: 'cmat-password-strength-info',\r\n exportAs: 'cmatPasswordStrengthInfo',\r\n templateUrl: './mat-password-strength-info.component.html',\r\n styleUrls: ['./mat-password-strength-info.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [MatCardModule, MatIconModule]\r\n})\r\nexport class CmatPasswordStrengthInfoComponent implements OnInit, AfterViewInit {\r\n\r\n @Input()\r\n passwordComponent: CmatPasswordStrengthComponent;\r\n\r\n @Input()\r\n enableScoreInfo = false;\r\n\r\n @Input()\r\n lowerCaseCriteriaMsg = '包含至少一个小写字母';\r\n\r\n @Input()\r\n upperCaseCriteriaMsg = '包含至少一个大写字母';\r\n\r\n @Input()\r\n digitsCriteriaMsg = '包含至少一个数字';\r\n\r\n @Input()\r\n specialCharsCriteriaMsg = '包含至少一个特殊字符';\r\n\r\n @Input()\r\n customCharsCriteriaMsg = '包含至少一个传统字符';\r\n\r\n @Input()\r\n minCharsCriteriaMsg: string;\r\n\r\n pageLoaded = false;\r\n\r\n private _changeDetectorRef = inject(ChangeDetectorRef);\r\n ngOnInit(): void {\r\n if (!this.minCharsCriteriaMsg) {\r\n this.minCharsCriteriaMsg = `包含至少 ${this.passwordComponent.min} 个字符`;\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.pageLoaded = true;\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }, 100);\r\n }\r\n getEnterIndex(itemType: string): number {\r\n const enabledItems: string[] = [];\r\n\r\n if (this.passwordComponent.enableLowerCaseLetterRule) {\r\n enabledItems.push('lowerCase');\r\n }\r\n if (this.passwordComponent.enableUpperCaseLetterRule) {\r\n enabledItems.push('upperCase');\r\n }\r\n if (this.passwordComponent.enableDigitRule) {\r\n enabledItems.push('digit');\r\n }\r\n if (this.passwordComponent.enableSpecialCharRule) {\r\n enabledItems.push('specialChar');\r\n }\r\n if (this.passwordComponent.enableLengthRule) {\r\n enabledItems.push('length');\r\n }\r\n if (this.passwordComponent.customValidator) {\r\n enabledItems.push('custom');\r\n }\r\n if (this.enableScoreInfo) {\r\n enabledItems.push('score');\r\n }\r\n\r\n return enabledItems.indexOf(itemType);\r\n }\r\n\r\n getLeaveIndex(itemType: string): number {\r\n const enabledItems: string[] = [];\r\n\r\n if (this.passwordComponent.enableLowerCaseLetterRule) {\r\n enabledItems.push('lowerCase');\r\n }\r\n if (this.passwordComponent.enableUpperCaseLetterRule) {\r\n enabledItems.push('upperCase');\r\n }\r\n if (this.passwordComponent.enableDigitRule) {\r\n enabledItems.push('digit');\r\n }\r\n if (this.passwordComponent.enableSpecialCharRule) {\r\n enabledItems.push('specialChar');\r\n }\r\n if (this.passwordComponent.enableLengthRule) {\r\n enabledItems.push('length');\r\n }\r\n if (this.passwordComponent.customValidator) {\r\n enabledItems.push('custom');\r\n }\r\n if (this.enableScoreInfo) {\r\n enabledItems.push('score');\r\n }\r\n\r\n return enabledItems.length - enabledItems.indexOf(itemType) - 1;\r\n }\r\n\r\n}\r\n","<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n<mat-card class=\"info-card\">\r\n <mat-card-content>\r\n @if (passwordComponent.enableLowerCaseLetterRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('lowerCase')\" [style.--leave-item-index]=\"getLeaveIndex('lowerCase')\">\r\n @if (passwordComponent.containAtLeastOneLowerCaseLetter) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{lowerCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableUpperCaseLetterRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('upperCase')\" [style.--leave-item-index]=\"getLeaveIndex('upperCase')\">\r\n @if (passwordComponent.containAtLeastOneUpperCaseLetter) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{upperCaseCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableDigitRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('digit')\" [style.--leave-item-index]=\"getLeaveIndex('digit')\">\r\n @if (passwordComponent.containAtLeastOneDigit) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{digitsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableSpecialCharRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('specialChar')\"\r\n [style.--leave-item-index]=\"getLeaveIndex('specialChar')\">\r\n @if (passwordComponent.containAtLeastOneSpecialChar) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{specialCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.enableLengthRule) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('length')\" [style.--leave-item-index]=\"getLeaveIndex('length')\">\r\n @if (passwordComponent.containAtLeastMinChars) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{minCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (passwordComponent.customValidator) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('custom')\" [style.--leave-item-index]=\"getLeaveIndex('custom')\">\r\n @if (passwordComponent.containAtCustomChars) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>{{customCharsCriteriaMsg}}</span>\r\n </div>\r\n }\r\n\r\n @if (enableScoreInfo) {\r\n <div class=\"info-row info-row-enter\" animate.leave=\"info-row-leave\"\r\n [style.--enter-item-index]=\"getEnterIndex('score')\" [style.--leave-item-index]=\"getLeaveIndex('score')\">\r\n @if (passwordComponent.strength === 100) {\r\n <mat-icon animate.enter=\"flip-in-x-animation\" color=\"primary\" svgIcon=\"mat_outline:done\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n } @else {\r\n <mat-icon animate.enter=\"shake-info-animation\" color=\"warn\" svgIcon=\"mat_outline:error\" [class.animate-none]=\"!pageLoaded\"></mat-icon>\r\n }\r\n <span>密码强度= {{passwordComponent.strength}} %100</span>\r\n </div>\r\n }\r\n\r\n </mat-card-content>\r\n</mat-card>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}