cmat 0.0.87 → 0.0.88
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/fesm2022/cmat-components-adapter.mjs +9 -9
- package/fesm2022/cmat-components-adapter.mjs.map +1 -1
- package/fesm2022/cmat-components-breadcrumb.mjs +98 -80
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +26 -34
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-carousel.mjs +467 -556
- package/fesm2022/cmat-components-carousel.mjs.map +1 -1
- package/fesm2022/cmat-components-cascade.mjs +270 -259
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +200 -116
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
- package/fesm2022/cmat-components-code-editor.mjs +85 -38
- package/fesm2022/cmat-components-code-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-color-picker.mjs +841 -0
- package/fesm2022/cmat-components-color-picker.mjs.map +1 -0
- package/fesm2022/cmat-components-custom-formly.mjs +1395 -838
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
- package/fesm2022/cmat-components-data-picker.mjs +996 -0
- package/fesm2022/cmat-components-data-picker.mjs.map +1 -0
- package/fesm2022/cmat-components-date-range.mjs +310 -264
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-date-time-display.mjs +16 -20
- package/fesm2022/cmat-components-date-time-display.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +120 -137
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-empty-state.mjs +17 -24
- package/fesm2022/cmat-components-empty-state.mjs.map +1 -1
- package/fesm2022/cmat-components-file-preview.mjs +18 -24
- package/fesm2022/cmat-components-file-preview.mjs.map +1 -1
- package/fesm2022/cmat-components-filter-toolbar.mjs +30 -39
- package/fesm2022/cmat-components-filter-toolbar.mjs.map +1 -1
- package/fesm2022/cmat-components-form-actions.mjs +12 -12
- package/fesm2022/cmat-components-form-actions.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +10 -10
- package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
- package/fesm2022/cmat-components-highlight.mjs +48 -41
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-image-viewer.mjs +104 -107
- package/fesm2022/cmat-components-image-viewer.mjs.map +1 -1
- package/fesm2022/cmat-components-inline-loading.mjs +12 -15
- package/fesm2022/cmat-components-inline-loading.mjs.map +1 -1
- package/fesm2022/cmat-components-json-editor.mjs +118 -75
- package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-knob-input.mjs +196 -178
- package/fesm2022/cmat-components-knob-input.mjs.map +1 -1
- package/fesm2022/cmat-components-masonry.mjs +26 -41
- package/fesm2022/cmat-components-masonry.mjs.map +1 -1
- package/fesm2022/cmat-components-material-color-picker.mjs +81 -80
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +1212 -1287
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +467 -450
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-opt-input.mjs +143 -132
- package/fesm2022/cmat-components-opt-input.mjs.map +1 -1
- package/fesm2022/cmat-components-org-chart.mjs +68 -83
- package/fesm2022/cmat-components-org-chart.mjs.map +1 -1
- package/fesm2022/cmat-components-page-header.mjs +18 -24
- package/fesm2022/cmat-components-page-header.mjs.map +1 -1
- package/fesm2022/cmat-components-pagination.mjs +220 -136
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +262 -215
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +227 -195
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +15 -34
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-qrcode.mjs +95 -88
- package/fesm2022/cmat-components-qrcode.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +70 -67
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-rich-text-editor.mjs +23 -26
- package/fesm2022/cmat-components-rich-text-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +190 -159
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-table.mjs +276 -213
- package/fesm2022/cmat-components-select-table.mjs.map +1 -1
- package/fesm2022/cmat-components-select-tree.mjs +178 -128
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-skeleton.mjs +44 -28
- package/fesm2022/cmat-components-skeleton.mjs.map +1 -1
- package/fesm2022/cmat-components-speed-dial.mjs +107 -163
- package/fesm2022/cmat-components-speed-dial.mjs.map +1 -1
- package/fesm2022/cmat-components-status-tag.mjs +29 -36
- package/fesm2022/cmat-components-status-tag.mjs.map +1 -1
- package/fesm2022/cmat-components-table-toolbar.mjs +14 -18
- package/fesm2022/cmat-components-table-toolbar.mjs.map +1 -1
- package/fesm2022/cmat-components-timeline.mjs +111 -118
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +65 -66
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +130 -160
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-treetable.mjs +32 -39
- package/fesm2022/cmat-components-treetable.mjs.map +1 -1
- package/fesm2022/cmat-components-upload.mjs +186 -176
- package/fesm2022/cmat-components-upload.mjs.map +1 -1
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +25 -28
- package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
- package/fesm2022/cmat-directives-arrow-cursor.mjs +85 -92
- package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -1
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
- package/fesm2022/cmat-directives-data-exporter.mjs +49 -50
- package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -1
- package/fesm2022/cmat-directives-debounce.mjs +16 -19
- package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
- package/fesm2022/cmat-directives-digit-only.mjs +60 -69
- package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -1
- package/fesm2022/cmat-directives-seamless-auto-scroll.mjs +31 -30
- package/fesm2022/cmat-directives-seamless-auto-scroll.mjs.map +1 -1
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-bytes.mjs.map +1 -1
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs.map +1 -1
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
- package/fesm2022/cmat-pipes-secure.mjs +7 -13
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -1
- package/fesm2022/cmat-services-alert.mjs +26 -27
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +14 -23
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +8 -8
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +6 -10
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-export-as.mjs +3 -3
- package/fesm2022/cmat-services-export-as.mjs.map +1 -1
- package/fesm2022/cmat-services-loading.mjs +30 -47
- package/fesm2022/cmat-services-loading.mjs.map +1 -1
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
- package/fesm2022/cmat-services-media-watcher.mjs +43 -34
- package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs.map +1 -1
- package/fesm2022/cmat-services-splash-screen.mjs +3 -3
- package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs.map +1 -1
- package/fesm2022/cmat-services-translation.mjs +11 -11
- package/fesm2022/cmat-services-translation.mjs.map +1 -1
- package/fesm2022/cmat-services-utils.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs.map +1 -1
- package/fesm2022/cmat.mjs +9228 -7507
- package/fesm2022/cmat.mjs.map +1 -1
- package/icons/material-icons/heroicons-outline.svg +3 -0
- package/icons/material-icons/heroicons-solid.svg +3 -0
- package/package.json +10 -1
- package/styles/components/bundle.scss +21 -0
- package/styles/overrides/angular-material.scss +22 -1
- package/tailwind/plugins/theming.js +183 -183
- package/types/cmat-components-breadcrumb.d.ts +40 -37
- package/types/cmat-components-card.d.ts +11 -13
- package/types/cmat-components-carousel.d.ts +87 -113
- package/types/cmat-components-cascade.d.ts +84 -65
- package/types/cmat-components-chip-input.d.ts +29 -24
- package/types/cmat-components-code-editor.d.ts +28 -12
- package/types/cmat-components-color-picker.d.ts +236 -0
- package/types/cmat-components-custom-formly.d.ts +316 -184
- package/types/cmat-components-data-picker.d.ts +372 -0
- package/types/cmat-components-date-range.d.ts +31 -36
- package/types/cmat-components-date-time-display.d.ts +8 -8
- package/types/cmat-components-drawer.d.ts +30 -32
- package/types/cmat-components-empty-state.d.ts +9 -10
- package/types/cmat-components-file-preview.d.ts +9 -9
- package/types/cmat-components-filter-toolbar.d.ts +15 -15
- package/types/cmat-components-form-actions.d.ts +5 -5
- package/types/cmat-components-fullscreen.d.ts +5 -5
- package/types/cmat-components-highlight.d.ts +13 -14
- package/types/cmat-components-image-viewer.d.ts +29 -33
- package/types/cmat-components-inline-loading.d.ts +6 -6
- package/types/cmat-components-json-editor.d.ts +15 -17
- package/types/cmat-components-knob-input.d.ts +58 -55
- package/types/cmat-components-masonry.d.ts +9 -12
- package/types/cmat-components-material-color-picker.d.ts +16 -21
- package/types/cmat-components-material-datetimepicker.d.ts +174 -216
- package/types/cmat-components-navigation.d.ts +34 -39
- package/types/cmat-components-opt-input.d.ts +35 -33
- package/types/cmat-components-org-chart.d.ts +8 -9
- package/types/cmat-components-page-header.d.ts +9 -9
- package/types/cmat-components-pagination.d.ts +36 -40
- package/types/cmat-components-password-strength.d.ts +58 -64
- package/types/cmat-components-popover.d.ts +22 -32
- package/types/cmat-components-progress-bar.d.ts +7 -10
- package/types/cmat-components-qrcode.d.ts +22 -22
- package/types/cmat-components-rating.d.ts +17 -19
- package/types/cmat-components-rich-text-editor.d.ts +11 -12
- package/types/cmat-components-select-search.d.ts +48 -36
- package/types/cmat-components-select-table.d.ts +38 -34
- package/types/cmat-components-select-tree.d.ts +17 -15
- package/types/cmat-components-skeleton.d.ts +27 -10
- package/types/cmat-components-speed-dial.d.ts +24 -33
- package/types/cmat-components-status-tag.d.ts +19 -9
- package/types/cmat-components-table-toolbar.d.ts +7 -7
- package/types/cmat-components-timeline.d.ts +33 -34
- package/types/cmat-components-toast.d.ts +26 -30
- package/types/cmat-components-transfer-picker.d.ts +51 -56
- package/types/cmat-components-treetable.d.ts +12 -13
- package/types/cmat-components-upload.d.ts +33 -38
- package/types/cmat-components-x6-angular-shape.d.ts +1 -1
- package/types/cmat-directives-animate-on-scroll.d.ts +7 -7
- package/types/cmat-directives-arrow-cursor.d.ts +18 -20
- package/types/cmat-directives-data-exporter.d.ts +10 -10
- package/types/cmat-directives-debounce.d.ts +5 -5
- package/types/cmat-directives-digit-only.d.ts +13 -13
- package/types/cmat-directives-seamless-auto-scroll.d.ts +7 -7
- package/types/cmat-pipes-secure.d.ts +1 -3
- package/types/cmat-services-alert.d.ts +11 -12
- package/types/cmat-services-config.d.ts +2 -7
- package/types/cmat-services-confirmation.d.ts +2 -2
- package/types/cmat-services-data.d.ts +0 -1
- package/types/cmat-services-loading.d.ts +14 -22
- package/types/cmat-services-media-watcher.d.ts +5 -5
- package/types/cmat-services-translation.d.ts +4 -5
- package/types/cmat.d.ts +2167 -1746
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { input, output, ChangeDetectionStrategy, ViewEncapsulation, Component, signal, computed, effect, untracked } 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';
|
|
@@ -14,22 +14,27 @@ import { MatCardModule } from '@angular/material/card';
|
|
|
14
14
|
|
|
15
15
|
class CmatPassToggleVisibilityComponent {
|
|
16
16
|
constructor() {
|
|
17
|
+
this.isVisible = input(false, /* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
|
|
19
|
+
this.isVisibleChange = output();
|
|
20
|
+
this.tabindex = input(/* @ts-ignore */
|
|
21
|
+
...(ngDevMode ? [undefined, { debugName: "tabindex" }] : /* istanbul ignore next */ []));
|
|
17
22
|
this._type = 'text';
|
|
18
23
|
}
|
|
19
24
|
get type() {
|
|
20
|
-
return this.isVisible ? 'text' : 'password';
|
|
25
|
+
return this.isVisible() ? 'text' : 'password';
|
|
21
26
|
}
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
toggleVisibility() {
|
|
28
|
+
const newValue = !this.isVisible();
|
|
29
|
+
this.isVisibleChange.emit(newValue);
|
|
30
|
+
}
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CmatPassToggleVisibilityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: CmatPassToggleVisibilityComponent, isStandalone: true, selector: "cmat-pass-toggle-visibility", inputs: { isVisible: { classPropertyName: "isVisible", publicName: "isVisible", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isVisibleChange: "isVisibleChange" }, 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)=\"toggleVisibility()\">\r\n <mat-icon svgIcon=\"{{isVisible() ? 'mat_outline:visibility' : 'mat_outline:visibility_off' }}\"></mat-icon>\r\n</button>\r\n", 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 }); }
|
|
24
33
|
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CmatPassToggleVisibilityComponent, decorators: [{
|
|
26
35
|
type: Component,
|
|
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)=\"
|
|
28
|
-
}], propDecorators: { isVisible: [{
|
|
29
|
-
type: Input
|
|
30
|
-
}], tabindex: [{
|
|
31
|
-
type: Input
|
|
32
|
-
}] } });
|
|
36
|
+
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)=\"toggleVisibility()\">\r\n <mat-icon svgIcon=\"{{isVisible() ? 'mat_outline:visibility' : 'mat_outline:visibility_off' }}\"></mat-icon>\r\n</button>\r\n" }]
|
|
37
|
+
}], propDecorators: { isVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "isVisible", required: false }] }], isVisibleChange: [{ type: i0.Output, args: ["isVisibleChange"] }], tabindex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabindex", required: false }] }] } });
|
|
33
38
|
|
|
34
39
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
35
40
|
var Colors;
|
|
@@ -97,294 +102,336 @@ const RegExpValidator = {
|
|
|
97
102
|
|
|
98
103
|
class CmatPasswordStrengthComponent {
|
|
99
104
|
constructor() {
|
|
100
|
-
this.
|
|
101
|
-
|
|
102
|
-
this.
|
|
103
|
-
|
|
104
|
-
this.
|
|
105
|
-
|
|
106
|
-
this.
|
|
107
|
-
|
|
108
|
-
this.
|
|
109
|
-
|
|
110
|
-
this.
|
|
105
|
+
this.password = input('', /* @ts-ignore */
|
|
106
|
+
...(ngDevMode ? [{ debugName: "password" }] : /* istanbul ignore next */ []));
|
|
107
|
+
this.externalError = input(false, /* @ts-ignore */
|
|
108
|
+
...(ngDevMode ? [{ debugName: "externalError" }] : /* istanbul ignore next */ []));
|
|
109
|
+
this.enableLengthRule = input(true, /* @ts-ignore */
|
|
110
|
+
...(ngDevMode ? [{ debugName: "enableLengthRule" }] : /* istanbul ignore next */ []));
|
|
111
|
+
this.enableLowerCaseLetterRule = input(true, /* @ts-ignore */
|
|
112
|
+
...(ngDevMode ? [{ debugName: "enableLowerCaseLetterRule" }] : /* istanbul ignore next */ []));
|
|
113
|
+
this.enableUpperCaseLetterRule = input(true, /* @ts-ignore */
|
|
114
|
+
...(ngDevMode ? [{ debugName: "enableUpperCaseLetterRule" }] : /* istanbul ignore next */ []));
|
|
115
|
+
this.enableDigitRule = input(true, /* @ts-ignore */
|
|
116
|
+
...(ngDevMode ? [{ debugName: "enableDigitRule" }] : /* istanbul ignore next */ []));
|
|
117
|
+
this.enableSpecialCharRule = input(true, /* @ts-ignore */
|
|
118
|
+
...(ngDevMode ? [{ debugName: "enableSpecialCharRule" }] : /* istanbul ignore next */ []));
|
|
119
|
+
this.min = input(8, /* @ts-ignore */
|
|
120
|
+
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
121
|
+
this.max = input(30, /* @ts-ignore */
|
|
122
|
+
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
123
|
+
this.customValidator = input(/* @ts-ignore */
|
|
124
|
+
...(ngDevMode ? [undefined, { debugName: "customValidator" }] : /* istanbul ignore next */ []));
|
|
125
|
+
this.warnThreshold = input(21, /* @ts-ignore */
|
|
126
|
+
...(ngDevMode ? [{ debugName: "warnThreshold" }] : /* istanbul ignore next */ []));
|
|
127
|
+
this.accentThreshold = input(81, /* @ts-ignore */
|
|
128
|
+
...(ngDevMode ? [{ debugName: "accentThreshold" }] : /* istanbul ignore next */ []));
|
|
129
|
+
this.strengthChanged = output();
|
|
130
|
+
this.criteriaMap = signal(new Map(), /* @ts-ignore */
|
|
131
|
+
...(ngDevMode ? [{ debugName: "criteriaMap" }] : /* istanbul ignore next */ []));
|
|
132
|
+
this.containAtLeastMinChars = signal(false, /* @ts-ignore */
|
|
133
|
+
...(ngDevMode ? [{ debugName: "containAtLeastMinChars" }] : /* istanbul ignore next */ []));
|
|
134
|
+
this.containAtLeastOneLowerCaseLetter = signal(false, /* @ts-ignore */
|
|
135
|
+
...(ngDevMode ? [{ debugName: "containAtLeastOneLowerCaseLetter" }] : /* istanbul ignore next */ []));
|
|
136
|
+
this.containAtLeastOneUpperCaseLetter = signal(false, /* @ts-ignore */
|
|
137
|
+
...(ngDevMode ? [{ debugName: "containAtLeastOneUpperCaseLetter" }] : /* istanbul ignore next */ []));
|
|
138
|
+
this.containAtLeastOneDigit = signal(false, /* @ts-ignore */
|
|
139
|
+
...(ngDevMode ? [{ debugName: "containAtLeastOneDigit" }] : /* istanbul ignore next */ []));
|
|
140
|
+
this.containAtLeastOneSpecialChar = signal(false, /* @ts-ignore */
|
|
141
|
+
...(ngDevMode ? [{ debugName: "containAtLeastOneSpecialChar" }] : /* istanbul ignore next */ []));
|
|
142
|
+
this.containAtCustomChars = signal(false, /* @ts-ignore */
|
|
143
|
+
...(ngDevMode ? [{ debugName: "containAtCustomChars" }] : /* istanbul ignore next */ []));
|
|
111
144
|
this.passwordFormControl = new FormControl();
|
|
112
145
|
this.passwordConfirmationFormControl = new FormControl();
|
|
113
|
-
this.validatorsArray = []
|
|
146
|
+
this.validatorsArray = signal([], /* @ts-ignore */
|
|
147
|
+
...(ngDevMode ? [{ debugName: "validatorsArray" }] : /* istanbul ignore next */ []));
|
|
148
|
+
this.validators = signal(null, /* @ts-ignore */
|
|
149
|
+
...(ngDevMode ? [{ debugName: "validators" }] : /* istanbul ignore next */ []));
|
|
150
|
+
this.strength = computed(() => this._strength() || 0, /* @ts-ignore */
|
|
151
|
+
...(ngDevMode ? [{ debugName: "strength" }] : /* istanbul ignore next */ []));
|
|
152
|
+
this.color = computed(() => this._color(), /* @ts-ignore */
|
|
153
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
114
154
|
this.cmatPasswordStrengthValidator = new CmatPasswordStrengthValidator();
|
|
115
|
-
this._strength = 0
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
get color() {
|
|
122
|
-
return this._color;
|
|
123
|
-
}
|
|
124
|
-
ngOnInit() {
|
|
155
|
+
this._strength = signal(0, /* @ts-ignore */
|
|
156
|
+
...(ngDevMode ? [{ debugName: "_strength" }] : /* istanbul ignore next */ []));
|
|
157
|
+
this._color = signal('warn', /* @ts-ignore */
|
|
158
|
+
...(ngDevMode ? [{ debugName: "_color" }] : /* istanbul ignore next */ []));
|
|
159
|
+
this._isProcessingEffect = false;
|
|
160
|
+
// 初始化时设置一次验证器
|
|
125
161
|
this.setRulesAndValidators();
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
this.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
this.
|
|
146
|
-
|
|
162
|
+
effect(() => {
|
|
163
|
+
if (this._isProcessingEffect) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const pwd = this.password();
|
|
167
|
+
untracked(() => {
|
|
168
|
+
// 密码为空时重置
|
|
169
|
+
if (!pwd || pwd.length === 0) {
|
|
170
|
+
this.reset();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// 密码存在时计算强度(不重建验证器)
|
|
174
|
+
this.calculatePasswordStrength(false);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
effect(() => {
|
|
178
|
+
if (this._isProcessingEffect) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const extError = this.externalError();
|
|
182
|
+
if (extError) {
|
|
183
|
+
this._color.set(Colors.warn);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// 监听配置变化,重新构建验证器
|
|
187
|
+
effect(() => {
|
|
188
|
+
if (this._isProcessingEffect) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// 读取所有配置项,任何一项变化都会触发此 effect
|
|
192
|
+
this.enableLengthRule();
|
|
193
|
+
this.enableLowerCaseLetterRule();
|
|
194
|
+
this.enableUpperCaseLetterRule();
|
|
195
|
+
this.enableDigitRule();
|
|
196
|
+
this.enableSpecialCharRule();
|
|
197
|
+
this.min();
|
|
198
|
+
this.max();
|
|
199
|
+
this.customValidator();
|
|
200
|
+
untracked(() => {
|
|
201
|
+
// 配置变化时重新构建验证器
|
|
202
|
+
this.setRulesAndValidators();
|
|
203
|
+
// 如果当前有密码,重新计算强度
|
|
204
|
+
const pwd = this.password();
|
|
205
|
+
if (pwd && pwd.length > 0) {
|
|
206
|
+
this.calculatePasswordStrength(false);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
});
|
|
147
210
|
}
|
|
148
211
|
parseCustomValidatorsRegex() {
|
|
149
|
-
|
|
150
|
-
|
|
212
|
+
const validator = this.customValidator();
|
|
213
|
+
if (validator instanceof RegExp) {
|
|
214
|
+
return validator;
|
|
151
215
|
}
|
|
152
216
|
else {
|
|
153
|
-
return RegExp(
|
|
217
|
+
return RegExp(validator);
|
|
154
218
|
}
|
|
155
219
|
}
|
|
156
220
|
setRulesAndValidators() {
|
|
157
|
-
this.validatorsArray
|
|
158
|
-
this.criteriaMap
|
|
221
|
+
this.validatorsArray.set([]);
|
|
222
|
+
this.criteriaMap.set(new Map());
|
|
159
223
|
this.passwordConfirmationFormControl
|
|
160
224
|
.setValidators(Validators.compose([
|
|
161
|
-
Validators.required, this.cmatPasswordStrengthValidator.confirm(this.password)
|
|
225
|
+
Validators.required, this.cmatPasswordStrengthValidator.confirm(this.password())
|
|
162
226
|
]));
|
|
163
|
-
|
|
164
|
-
if (this.enableLengthRule) {
|
|
165
|
-
this.criteriaMap.set(Criteria.at_least_eight_chars, RegExp(`^.{${this.min},${this.max}}$`));
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
if (this.enableLowerCaseLetterRule) {
|
|
170
|
-
this.criteriaMap.set(Criteria.at_least_one_lower_case_char, RegExpValidator.lowerCase);
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
if (this.enableUpperCaseLetterRule) {
|
|
174
|
-
this.criteriaMap.set(Criteria.at_least_one_upper_case_char, RegExpValidator.upperCase);
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
if (this.enableDigitRule) {
|
|
178
|
-
this.criteriaMap.set(Criteria.at_least_one_digit_char, RegExpValidator.digit);
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
if (this.enableSpecialCharRule) {
|
|
182
|
-
this.criteriaMap.set(Criteria.at_least_one_special_char, RegExpValidator.specialChar);
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
if (this.customValidator) {
|
|
186
|
-
this.criteriaMap.set(Criteria.at_custom_chars, this.parseCustomValidatorsRegex());
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
this.criteriaMap.forEach((value, key) => {
|
|
190
|
-
|
|
227
|
+
const validators = [Validators.required];
|
|
228
|
+
if (this.enableLengthRule()) {
|
|
229
|
+
this.criteriaMap().set(Criteria.at_least_eight_chars, RegExp(`^.{${this.min()},${this.max()}}$`));
|
|
230
|
+
validators.push(Validators.minLength(this.min()));
|
|
231
|
+
validators.push(Validators.maxLength(this.max()));
|
|
232
|
+
}
|
|
233
|
+
if (this.enableLowerCaseLetterRule()) {
|
|
234
|
+
this.criteriaMap().set(Criteria.at_least_one_lower_case_char, RegExpValidator.lowerCase);
|
|
235
|
+
validators.push(Validators.pattern(RegExpValidator.lowerCase));
|
|
236
|
+
}
|
|
237
|
+
if (this.enableUpperCaseLetterRule()) {
|
|
238
|
+
this.criteriaMap().set(Criteria.at_least_one_upper_case_char, RegExpValidator.upperCase);
|
|
239
|
+
validators.push(Validators.pattern(RegExpValidator.upperCase));
|
|
240
|
+
}
|
|
241
|
+
if (this.enableDigitRule()) {
|
|
242
|
+
this.criteriaMap().set(Criteria.at_least_one_digit_char, RegExpValidator.digit);
|
|
243
|
+
validators.push(Validators.pattern(RegExpValidator.digit));
|
|
244
|
+
}
|
|
245
|
+
if (this.enableSpecialCharRule()) {
|
|
246
|
+
this.criteriaMap().set(Criteria.at_least_one_special_char, RegExpValidator.specialChar);
|
|
247
|
+
validators.push(Validators.pattern(RegExpValidator.specialChar));
|
|
248
|
+
}
|
|
249
|
+
if (this.customValidator()) {
|
|
250
|
+
this.criteriaMap().set(Criteria.at_custom_chars, this.parseCustomValidatorsRegex());
|
|
251
|
+
validators.push(Validators.pattern(this.parseCustomValidatorsRegex()));
|
|
252
|
+
}
|
|
253
|
+
this.criteriaMap().forEach((value, key) => {
|
|
254
|
+
validators.push(this.cmatPasswordStrengthValidator.validate(key, value));
|
|
191
255
|
});
|
|
192
|
-
this.passwordFormControl.setValidators(Validators.compose([...
|
|
193
|
-
this.
|
|
256
|
+
this.passwordFormControl.setValidators(Validators.compose([...validators]));
|
|
257
|
+
this.validatorsArray.set(validators);
|
|
258
|
+
this.validators.set(Validators.compose([...validators]));
|
|
194
259
|
}
|
|
195
|
-
calculatePasswordStrength() {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
this.
|
|
260
|
+
calculatePasswordStrength(rebuildValidators = false) {
|
|
261
|
+
try {
|
|
262
|
+
this._isProcessingEffect = true;
|
|
263
|
+
// 如果需要重建验证器(仅在配置变化时)
|
|
264
|
+
if (rebuildValidators) {
|
|
265
|
+
this.setRulesAndValidators();
|
|
266
|
+
}
|
|
267
|
+
const requirements = [];
|
|
268
|
+
const unit = 100 / this.criteriaMap().size;
|
|
269
|
+
requirements.push(this.enableLengthRule() ? this._containAtLeastMinChars() : false, this.enableLowerCaseLetterRule() ? this._containAtLeastOneLowerCaseLetter() : false, this.enableUpperCaseLetterRule() ? this._containAtLeastOneUpperCaseLetter() : false, this.enableDigitRule() ? this._containAtLeastOneDigit() : false, this.enableSpecialCharRule() ? this._containAtLeastOneSpecialChar() : false, this.customValidator() ? this._containCustomChars() : false);
|
|
270
|
+
this._strength.set(requirements.filter(v => v).length * unit);
|
|
271
|
+
this.strengthChanged.emit(this.strength());
|
|
272
|
+
const currentStrength = this._strength();
|
|
273
|
+
if (currentStrength < this.warnThreshold()) {
|
|
274
|
+
this._color.set(Colors.warn);
|
|
275
|
+
}
|
|
276
|
+
else if (currentStrength < this.accentThreshold()) {
|
|
277
|
+
this._color.set(Colors.accent);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
this._color.set(Colors.primary);
|
|
281
|
+
}
|
|
207
282
|
}
|
|
208
|
-
|
|
209
|
-
this.
|
|
283
|
+
finally {
|
|
284
|
+
this._isProcessingEffect = false;
|
|
210
285
|
}
|
|
211
286
|
}
|
|
212
287
|
reset() {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
this.
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
288
|
+
try {
|
|
289
|
+
this._isProcessingEffect = true;
|
|
290
|
+
this._strength.set(0);
|
|
291
|
+
this.containAtLeastMinChars.set(false);
|
|
292
|
+
this.containAtLeastOneLowerCaseLetter.set(false);
|
|
293
|
+
this.containAtLeastOneUpperCaseLetter.set(false);
|
|
294
|
+
this.containAtLeastOneDigit.set(false);
|
|
295
|
+
this.containAtCustomChars.set(false);
|
|
296
|
+
this.containAtLeastOneSpecialChar.set(false);
|
|
297
|
+
this._color.set(Colors.warn);
|
|
298
|
+
this.strengthChanged.emit(this.strength());
|
|
299
|
+
}
|
|
300
|
+
finally {
|
|
301
|
+
this._isProcessingEffect = false;
|
|
302
|
+
}
|
|
222
303
|
}
|
|
223
304
|
_containAtLeastMinChars() {
|
|
224
|
-
|
|
225
|
-
|
|
305
|
+
const result = this.password().length >= this.min();
|
|
306
|
+
this.containAtLeastMinChars.set(result);
|
|
307
|
+
return result;
|
|
226
308
|
}
|
|
227
309
|
_containAtLeastOneLowerCaseLetter() {
|
|
228
|
-
this.
|
|
229
|
-
this.
|
|
230
|
-
|
|
231
|
-
return
|
|
310
|
+
const result = this.criteriaMap()
|
|
311
|
+
.get(Criteria.at_least_one_lower_case_char)?.test(this.password());
|
|
312
|
+
this.containAtLeastOneLowerCaseLetter.set(result);
|
|
313
|
+
return result ?? false;
|
|
232
314
|
}
|
|
233
315
|
_containAtLeastOneUpperCaseLetter() {
|
|
234
|
-
this.
|
|
235
|
-
this.
|
|
236
|
-
|
|
237
|
-
return
|
|
316
|
+
const result = this.criteriaMap()
|
|
317
|
+
.get(Criteria.at_least_one_upper_case_char)?.test(this.password());
|
|
318
|
+
this.containAtLeastOneUpperCaseLetter.set(result);
|
|
319
|
+
return result ?? false;
|
|
238
320
|
}
|
|
239
321
|
_containAtLeastOneDigit() {
|
|
240
|
-
this.
|
|
241
|
-
this.
|
|
242
|
-
|
|
243
|
-
return
|
|
322
|
+
const result = this.criteriaMap()
|
|
323
|
+
.get(Criteria.at_least_one_digit_char)?.test(this.password());
|
|
324
|
+
this.containAtLeastOneDigit.set(result);
|
|
325
|
+
return result ?? false;
|
|
244
326
|
}
|
|
245
327
|
_containAtLeastOneSpecialChar() {
|
|
246
|
-
this.
|
|
247
|
-
this.
|
|
248
|
-
|
|
249
|
-
return
|
|
328
|
+
const result = this.criteriaMap()
|
|
329
|
+
.get(Criteria.at_least_one_special_char)?.test(this.password());
|
|
330
|
+
this.containAtLeastOneSpecialChar.set(result);
|
|
331
|
+
return result ?? false;
|
|
250
332
|
}
|
|
251
333
|
_containCustomChars() {
|
|
252
|
-
this.
|
|
253
|
-
this.
|
|
254
|
-
|
|
255
|
-
return
|
|
334
|
+
const result = this.criteriaMap()
|
|
335
|
+
.get(Criteria.at_custom_chars)?.test(this.password());
|
|
336
|
+
this.containAtCustomChars.set(result);
|
|
337
|
+
return result ?? false;
|
|
256
338
|
}
|
|
257
339
|
_checkPassword() {
|
|
258
340
|
this.calculatePasswordStrength();
|
|
259
341
|
this.passwordConfirmationFormControl.updateValueAndValidity();
|
|
260
342
|
}
|
|
261
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
262
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
343
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CmatPasswordStrengthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
344
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: CmatPasswordStrengthComponent, isStandalone: true, selector: "cmat-password-strength", inputs: { password: { classPropertyName: "password", publicName: "password", isSignal: true, isRequired: false, transformFunction: null }, externalError: { classPropertyName: "externalError", publicName: "externalError", isSignal: true, isRequired: false, transformFunction: null }, enableLengthRule: { classPropertyName: "enableLengthRule", publicName: "enableLengthRule", isSignal: true, isRequired: false, transformFunction: null }, enableLowerCaseLetterRule: { classPropertyName: "enableLowerCaseLetterRule", publicName: "enableLowerCaseLetterRule", isSignal: true, isRequired: false, transformFunction: null }, enableUpperCaseLetterRule: { classPropertyName: "enableUpperCaseLetterRule", publicName: "enableUpperCaseLetterRule", isSignal: true, isRequired: false, transformFunction: null }, enableDigitRule: { classPropertyName: "enableDigitRule", publicName: "enableDigitRule", isSignal: true, isRequired: false, transformFunction: null }, enableSpecialCharRule: { classPropertyName: "enableSpecialCharRule", publicName: "enableSpecialCharRule", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, customValidator: { classPropertyName: "customValidator", publicName: "customValidator", isSignal: true, isRequired: false, transformFunction: null }, warnThreshold: { classPropertyName: "warnThreshold", publicName: "warnThreshold", isSignal: true, isRequired: false, transformFunction: null }, accentThreshold: { classPropertyName: "accentThreshold", publicName: "accentThreshold", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { strengthChanged: "strengthChanged" }, exportAs: ["cmatPasswordStrength"], 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 }); }
|
|
263
345
|
}
|
|
264
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
346
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CmatPasswordStrengthComponent, decorators: [{
|
|
265
347
|
type: Component,
|
|
266
|
-
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>" }]
|
|
267
|
-
}], propDecorators: { password: [{
|
|
268
|
-
type: Input
|
|
269
|
-
}], externalError: [{
|
|
270
|
-
type: Input
|
|
271
|
-
}], enableLengthRule: [{
|
|
272
|
-
type: Input
|
|
273
|
-
}], enableLowerCaseLetterRule: [{
|
|
274
|
-
type: Input
|
|
275
|
-
}], enableUpperCaseLetterRule: [{
|
|
276
|
-
type: Input
|
|
277
|
-
}], enableDigitRule: [{
|
|
278
|
-
type: Input
|
|
279
|
-
}], enableSpecialCharRule: [{
|
|
280
|
-
type: Input
|
|
281
|
-
}], min: [{
|
|
282
|
-
type: Input
|
|
283
|
-
}], max: [{
|
|
284
|
-
type: Input
|
|
285
|
-
}], customValidator: [{
|
|
286
|
-
type: Input
|
|
287
|
-
}], warnThreshold: [{
|
|
288
|
-
type: Input
|
|
289
|
-
}], accentThreshold: [{
|
|
290
|
-
type: Input
|
|
291
|
-
}], strengthChanged: [{
|
|
292
|
-
type: Output
|
|
293
|
-
}] } });
|
|
348
|
+
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>" }]
|
|
349
|
+
}], ctorParameters: () => [], propDecorators: { password: [{ type: i0.Input, args: [{ isSignal: true, alias: "password", required: false }] }], externalError: [{ type: i0.Input, args: [{ isSignal: true, alias: "externalError", required: false }] }], enableLengthRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLengthRule", required: false }] }], enableLowerCaseLetterRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLowerCaseLetterRule", required: false }] }], enableUpperCaseLetterRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableUpperCaseLetterRule", required: false }] }], enableDigitRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableDigitRule", required: false }] }], enableSpecialCharRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableSpecialCharRule", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], customValidator: [{ type: i0.Input, args: [{ isSignal: true, alias: "customValidator", required: false }] }], warnThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "warnThreshold", required: false }] }], accentThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "accentThreshold", required: false }] }], strengthChanged: [{ type: i0.Output, args: ["strengthChanged"] }] } });
|
|
294
350
|
|
|
295
351
|
class CmatPasswordStrengthInfoComponent {
|
|
296
352
|
constructor() {
|
|
297
|
-
this.
|
|
298
|
-
|
|
299
|
-
this.
|
|
300
|
-
|
|
301
|
-
this.
|
|
302
|
-
|
|
303
|
-
this.
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
|
|
353
|
+
this.passwordComponent = input.required(/* @ts-ignore */
|
|
354
|
+
...(ngDevMode ? [{ debugName: "passwordComponent" }] : /* istanbul ignore next */ []));
|
|
355
|
+
this.enableScoreInfo = input(false, /* @ts-ignore */
|
|
356
|
+
...(ngDevMode ? [{ debugName: "enableScoreInfo" }] : /* istanbul ignore next */ []));
|
|
357
|
+
this.lowerCaseCriteriaMsg = input('包含至少一个小写字母', /* @ts-ignore */
|
|
358
|
+
...(ngDevMode ? [{ debugName: "lowerCaseCriteriaMsg" }] : /* istanbul ignore next */ []));
|
|
359
|
+
this.upperCaseCriteriaMsg = input('包含至少一个大写字母', /* @ts-ignore */
|
|
360
|
+
...(ngDevMode ? [{ debugName: "upperCaseCriteriaMsg" }] : /* istanbul ignore next */ []));
|
|
361
|
+
this.digitsCriteriaMsg = input('包含至少一个数字', /* @ts-ignore */
|
|
362
|
+
...(ngDevMode ? [{ debugName: "digitsCriteriaMsg" }] : /* istanbul ignore next */ []));
|
|
363
|
+
this.specialCharsCriteriaMsg = input('包含至少一个特殊字符', /* @ts-ignore */
|
|
364
|
+
...(ngDevMode ? [{ debugName: "specialCharsCriteriaMsg" }] : /* istanbul ignore next */ []));
|
|
365
|
+
this.customCharsCriteriaMsg = input('包含至少一个传统字符', /* @ts-ignore */
|
|
366
|
+
...(ngDevMode ? [{ debugName: "customCharsCriteriaMsg" }] : /* istanbul ignore next */ []));
|
|
367
|
+
this.minCharsCriteriaMsg = input(/* @ts-ignore */
|
|
368
|
+
...(ngDevMode ? [undefined, { debugName: "minCharsCriteriaMsg" }] : /* istanbul ignore next */ []));
|
|
369
|
+
this.pageLoaded = signal(false, /* @ts-ignore */
|
|
370
|
+
...(ngDevMode ? [{ debugName: "pageLoaded" }] : /* istanbul ignore next */ []));
|
|
311
371
|
setTimeout(() => {
|
|
312
372
|
this.pageLoaded.set(true);
|
|
313
373
|
}, 100);
|
|
314
374
|
}
|
|
375
|
+
getMinCharsMsg() {
|
|
376
|
+
return this.minCharsCriteriaMsg() ?? `包含至少 ${this.passwordComponent().min()} 个字符`;
|
|
377
|
+
}
|
|
315
378
|
getEnterIndex(itemType) {
|
|
316
379
|
const enabledItems = [];
|
|
317
|
-
if (this.passwordComponent.enableLowerCaseLetterRule) {
|
|
380
|
+
if (this.passwordComponent().enableLowerCaseLetterRule()) {
|
|
318
381
|
enabledItems.push('lowerCase');
|
|
319
382
|
}
|
|
320
|
-
if (this.passwordComponent.enableUpperCaseLetterRule) {
|
|
383
|
+
if (this.passwordComponent().enableUpperCaseLetterRule()) {
|
|
321
384
|
enabledItems.push('upperCase');
|
|
322
385
|
}
|
|
323
|
-
if (this.passwordComponent.enableDigitRule) {
|
|
386
|
+
if (this.passwordComponent().enableDigitRule()) {
|
|
324
387
|
enabledItems.push('digit');
|
|
325
388
|
}
|
|
326
|
-
if (this.passwordComponent.enableSpecialCharRule) {
|
|
389
|
+
if (this.passwordComponent().enableSpecialCharRule()) {
|
|
327
390
|
enabledItems.push('specialChar');
|
|
328
391
|
}
|
|
329
|
-
if (this.passwordComponent.enableLengthRule) {
|
|
392
|
+
if (this.passwordComponent().enableLengthRule()) {
|
|
330
393
|
enabledItems.push('length');
|
|
331
394
|
}
|
|
332
|
-
if (this.passwordComponent.customValidator) {
|
|
395
|
+
if (this.passwordComponent().customValidator()) {
|
|
333
396
|
enabledItems.push('custom');
|
|
334
397
|
}
|
|
335
|
-
if (this.enableScoreInfo) {
|
|
398
|
+
if (this.enableScoreInfo()) {
|
|
336
399
|
enabledItems.push('score');
|
|
337
400
|
}
|
|
338
401
|
return enabledItems.findIndex(i => i === itemType);
|
|
339
402
|
}
|
|
340
403
|
getLeaveIndex(itemType) {
|
|
341
404
|
const enabledItems = [];
|
|
342
|
-
if (this.passwordComponent.enableLowerCaseLetterRule) {
|
|
405
|
+
if (this.passwordComponent().enableLowerCaseLetterRule()) {
|
|
343
406
|
enabledItems.push('lowerCase');
|
|
344
407
|
}
|
|
345
|
-
if (this.passwordComponent.enableUpperCaseLetterRule) {
|
|
408
|
+
if (this.passwordComponent().enableUpperCaseLetterRule()) {
|
|
346
409
|
enabledItems.push('upperCase');
|
|
347
410
|
}
|
|
348
|
-
if (this.passwordComponent.enableDigitRule) {
|
|
411
|
+
if (this.passwordComponent().enableDigitRule()) {
|
|
349
412
|
enabledItems.push('digit');
|
|
350
413
|
}
|
|
351
|
-
if (this.passwordComponent.enableSpecialCharRule) {
|
|
414
|
+
if (this.passwordComponent().enableSpecialCharRule()) {
|
|
352
415
|
enabledItems.push('specialChar');
|
|
353
416
|
}
|
|
354
|
-
if (this.passwordComponent.enableLengthRule) {
|
|
417
|
+
if (this.passwordComponent().enableLengthRule()) {
|
|
355
418
|
enabledItems.push('length');
|
|
356
419
|
}
|
|
357
|
-
if (this.passwordComponent.customValidator) {
|
|
420
|
+
if (this.passwordComponent().customValidator()) {
|
|
358
421
|
enabledItems.push('custom');
|
|
359
422
|
}
|
|
360
|
-
if (this.enableScoreInfo) {
|
|
423
|
+
if (this.enableScoreInfo()) {
|
|
361
424
|
enabledItems.push('score');
|
|
362
425
|
}
|
|
363
426
|
return enabledItems.length - enabledItems.findIndex(j => j === itemType) - 1;
|
|
364
427
|
}
|
|
365
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
366
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", 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>\u7035\u55D9\u721C\u5BEE\u54C4\u5BB3= {{passwordComponent.strength}} %100</span>\r\n </div>\r\n }\r\n\r\n </mat-card-content>\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</mat-card>\r\n", 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 }); }
|
|
428
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CmatPasswordStrengthInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
429
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: CmatPasswordStrengthInfoComponent, isStandalone: true, selector: "cmat-password-strength-info", inputs: { passwordComponent: { classPropertyName: "passwordComponent", publicName: "passwordComponent", isSignal: true, isRequired: true, transformFunction: null }, enableScoreInfo: { classPropertyName: "enableScoreInfo", publicName: "enableScoreInfo", isSignal: true, isRequired: false, transformFunction: null }, lowerCaseCriteriaMsg: { classPropertyName: "lowerCaseCriteriaMsg", publicName: "lowerCaseCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, upperCaseCriteriaMsg: { classPropertyName: "upperCaseCriteriaMsg", publicName: "upperCaseCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, digitsCriteriaMsg: { classPropertyName: "digitsCriteriaMsg", publicName: "digitsCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, specialCharsCriteriaMsg: { classPropertyName: "specialCharsCriteriaMsg", publicName: "specialCharsCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, customCharsCriteriaMsg: { classPropertyName: "customCharsCriteriaMsg", publicName: "customCharsCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, minCharsCriteriaMsg: { classPropertyName: "minCharsCriteriaMsg", publicName: "minCharsCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null } }, 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>{{getMinCharsMsg()}}</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<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</mat-card>\r\n", 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 }); }
|
|
367
430
|
}
|
|
368
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
431
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CmatPasswordStrengthInfoComponent, decorators: [{
|
|
369
432
|
type: Component,
|
|
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>{{
|
|
371
|
-
}], propDecorators: { passwordComponent: [{
|
|
372
|
-
type: Input
|
|
373
|
-
}], enableScoreInfo: [{
|
|
374
|
-
type: Input
|
|
375
|
-
}], lowerCaseCriteriaMsg: [{
|
|
376
|
-
type: Input
|
|
377
|
-
}], upperCaseCriteriaMsg: [{
|
|
378
|
-
type: Input
|
|
379
|
-
}], digitsCriteriaMsg: [{
|
|
380
|
-
type: Input
|
|
381
|
-
}], specialCharsCriteriaMsg: [{
|
|
382
|
-
type: Input
|
|
383
|
-
}], customCharsCriteriaMsg: [{
|
|
384
|
-
type: Input
|
|
385
|
-
}], minCharsCriteriaMsg: [{
|
|
386
|
-
type: Input
|
|
387
|
-
}] } });
|
|
433
|
+
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>{{getMinCharsMsg()}}</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<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</mat-card>\r\n", 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"] }]
|
|
434
|
+
}], ctorParameters: () => [], propDecorators: { passwordComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "passwordComponent", required: true }] }], enableScoreInfo: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableScoreInfo", required: false }] }], lowerCaseCriteriaMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "lowerCaseCriteriaMsg", required: false }] }], upperCaseCriteriaMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "upperCaseCriteriaMsg", required: false }] }], digitsCriteriaMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "digitsCriteriaMsg", required: false }] }], specialCharsCriteriaMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "specialCharsCriteriaMsg", required: false }] }], customCharsCriteriaMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "customCharsCriteriaMsg", required: false }] }], minCharsCriteriaMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "minCharsCriteriaMsg", required: false }] }] } });
|
|
388
435
|
|
|
389
436
|
/**
|
|
390
437
|
* Generated bundle index. Do not edit.
|