anguland 0.0.6 → 0.0.10
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.
|
@@ -8,31 +8,41 @@ export class FormErrorComponent {
|
|
|
8
8
|
this.controlName = input.required();
|
|
9
9
|
this.validationKey = input.required();
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
</ng-container>
|
|
11
|
+
get validationsForKey() {
|
|
12
|
+
return this.VALIDATION_MESSAGES[this.validationKey()];
|
|
13
|
+
}
|
|
14
|
+
get control() {
|
|
15
|
+
return this.formGroup().get(this.controlName());
|
|
16
|
+
}
|
|
17
|
+
hasError(errorType) {
|
|
18
|
+
const hasError = this.control?.hasError(errorType) && this.control?.touched && !this.control?.pristine || false;
|
|
19
|
+
return hasError;
|
|
21
20
|
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: FormErrorComponent, isStandalone: true, selector: "lib-form-error", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, controlName: { classPropertyName: "controlName", publicName: "controlName", isSignal: true, isRequired: true, transformFunction: null }, validationKey: { classPropertyName: "validationKey", publicName: "validationKey", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
23
|
+
@for (validation of validationsForKey; track $index) {
|
|
24
|
+
<ng-container>
|
|
25
|
+
@if(hasError(validation.type)) {
|
|
26
|
+
<small class="smallError">
|
|
27
|
+
{{ validation.message }}
|
|
28
|
+
</small>
|
|
29
|
+
}
|
|
30
|
+
</ng-container>
|
|
31
|
+
}
|
|
22
32
|
`, isInline: true, styles: [".smallError{color:#f44336;font-size:.7rem}\n"] }); }
|
|
23
33
|
}
|
|
24
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, decorators: [{
|
|
25
35
|
type: Component,
|
|
26
|
-
args: [{ selector: 'lib-form-error', standalone: true, template: `
|
|
27
|
-
@for (validation of
|
|
28
|
-
<ng-container>
|
|
29
|
-
@if(
|
|
30
|
-
<small class="smallError">
|
|
31
|
-
{{ validation.message }}
|
|
32
|
-
</small>
|
|
33
|
-
}
|
|
34
|
-
</ng-container>
|
|
35
|
-
}
|
|
36
|
+
args: [{ selector: 'lib-form-error', standalone: true, template: `
|
|
37
|
+
@for (validation of validationsForKey; track $index) {
|
|
38
|
+
<ng-container>
|
|
39
|
+
@if(hasError(validation.type)) {
|
|
40
|
+
<small class="smallError">
|
|
41
|
+
{{ validation.message }}
|
|
42
|
+
</small>
|
|
43
|
+
}
|
|
44
|
+
</ng-container>
|
|
45
|
+
}
|
|
36
46
|
`, styles: [".smallError{color:#f44336;font-size:.7rem}\n"] }]
|
|
37
47
|
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybUVycm9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYW5kL3NyYy9saWIvZm9ybUVycm9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQXlDLE1BQU0sY0FBYyxDQUFDOztBQXVCMUYsTUFBTSxPQUFPLGtCQUFrQjtJQXJCL0I7UUFzQkUsd0JBQW1CLEdBQXVCLG1CQUFtQixDQUFDO1FBQzlELGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLGdCQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0tBZ0IxQztJQVpDLElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFpQjtRQUN4QixNQUFNLFFBQVEsR0FBWSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUN6SCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzhHQW5CVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixpZkFsQm5COzs7Ozs7Ozs7O0dBVVQ7OzJGQVFVLGtCQUFrQjtrQkFyQjlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxZQUNOOzs7Ozs7Ozs7O0dBVVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVkFMSURBVElPTl9NRVNTQUdFUywgVmFsaWRhdGlvbk1lc3NhZ2UsIFZhbGlkYXRpb25NZXNzYWdlcyB9IGZyb20gJy4vdmFsaWRhdGlvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1mb3JtLWVycm9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICBAZm9yICh2YWxpZGF0aW9uIG9mIHZhbGlkYXRpb25zRm9yS2V5OyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICBAaWYoaGFzRXJyb3IodmFsaWRhdGlvbi50eXBlKSkge1xyXG4gICAgICAgIDxzbWFsbCBjbGFzcz1cInNtYWxsRXJyb3JcIj5cclxuICAgICAgICAgIHt7IHZhbGlkYXRpb24ubWVzc2FnZSB9fVxyXG4gICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuICBgLFxyXG4gIHN0eWxlczogYFxyXG4gICAgLnNtYWxsRXJyb3J7XHJcbiAgICAgIGNvbG9yOiAjZjQ0MzM2O1xyXG4gICAgICBmb250LXNpemU6IDAuN3JlbTtcclxuICAgIH1cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRXJyb3JDb21wb25lbnQge1xyXG4gIFZBTElEQVRJT05fTUVTU0FHRVM6IFZhbGlkYXRpb25NZXNzYWdlcyA9IFZBTElEQVRJT05fTUVTU0FHRVM7XHJcbiAgZm9ybUdyb3VwID0gaW5wdXQucmVxdWlyZWQ8Rm9ybUdyb3VwPih7fSk7XHJcbiAgY29udHJvbE5hbWUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgdmFsaWRhdGlvbktleSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcclxuXHJcblxyXG5cclxuICBnZXQgdmFsaWRhdGlvbnNGb3JLZXkoKTogVmFsaWRhdGlvbk1lc3NhZ2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5WQUxJREFUSU9OX01FU1NBR0VTW3RoaXMudmFsaWRhdGlvbktleSgpXTtcclxuICB9XHJcblxyXG4gIGdldCBjb250cm9sKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwKCkuZ2V0KHRoaXMuY29udHJvbE5hbWUoKSk7XHJcbiAgfVxyXG5cclxuICBoYXNFcnJvcihlcnJvclR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaGFzRXJyb3I6IGJvb2xlYW4gPSB0aGlzLmNvbnRyb2w/Lmhhc0Vycm9yKGVycm9yVHlwZSkgJiYgdGhpcy5jb250cm9sPy50b3VjaGVkICYmICF0aGlzLmNvbnRyb2w/LnByaXN0aW5lIHx8IGZhbHNlO1xyXG4gICAgcmV0dXJuIGhhc0Vycm9yO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -68,6 +68,10 @@ export const VALIDATION_MESSAGES = {
|
|
|
68
68
|
{ type: 'required', message: 'Eingabe erforderlich' },
|
|
69
69
|
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
70
70
|
],
|
|
71
|
+
url: [
|
|
72
|
+
{ type: 'required', message: 'URL erforderlich' },
|
|
73
|
+
{ type: 'pattern', message: 'Ungültige URL' },
|
|
74
|
+
],
|
|
71
75
|
};
|
|
72
76
|
export function matchValidator(matchTo, reverse) {
|
|
73
77
|
return (control) => {
|
|
@@ -85,4 +89,13 @@ export function matchValidator(matchTo, reverse) {
|
|
|
85
89
|
: { matching: true };
|
|
86
90
|
};
|
|
87
91
|
}
|
|
88
|
-
|
|
92
|
+
export function urlValidator() {
|
|
93
|
+
const urlPattern = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
|
|
94
|
+
return (control) => {
|
|
95
|
+
if (!control.value) {
|
|
96
|
+
return null; // Don't validate empty values to allow required validator to handle them
|
|
97
|
+
}
|
|
98
|
+
return urlPattern.test(control.value) ? null : { pattern: true };
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYW5kL3NyYy9saWIvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBdUI7SUFDckQsUUFBUSxFQUFFO1FBQ1IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRTtRQUMxRCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFO1FBQ2xEO1lBQ0UsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLGdDQUFnQyxtQkFBbUIsb0JBQW9CO1NBQ2pGO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsK0JBQStCLG1CQUFtQixvQkFBb0I7U0FDaEY7UUFDRDtZQUNFLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLHFFQUFxRTtTQUMvRTtLQUNGO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRTtRQUNwRCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFO1FBQzlDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUU7UUFDL0QsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRTtRQUNsRCxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUU7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QU0sRUFBRSxRQUFnQixDQUFBLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztZQUNsRSxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVk7SUFDMUIsTUFBTSxVQUFVLEdBQUcsdUNBQXVDLENBQUM7SUFDM0QsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7UUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyxDQUFDLHlFQUF5RTtRQUN4RixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNuRSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbk1lc3NhZ2Uge1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbk1lc3NhZ2VzIHtcclxuICBba2V5OiBzdHJpbmddOiBWYWxpZGF0aW9uTWVzc2FnZVtdO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUEFTU1dPUkRfTUlOX0xFTkdUSCA9IDY7XHJcbmV4cG9ydCBjb25zdCBVU0VSTkFNRV9NSU5fTEVOR1RIID0gMjtcclxuZXhwb3J0IGNvbnN0IFVTRVJOQU1FX01BWF9MRU5HVEggPSAzMDtcclxuXHJcbmV4cG9ydCBjb25zdCBWQUxJREFUSU9OX01FU1NBR0VTOiBWYWxpZGF0aW9uTWVzc2FnZXMgPSB7XHJcbiAgdXNlcm5hbWU6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ0JlbnV0emVybmFtZSBlcmZvcmRlcmxpY2gnIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogJ21pbmxlbmd0aCcsXHJcbiAgICAgIG1lc3NhZ2U6IGBCZW51dHplcm5hbWUgbXVzcyBtaW5kZXN0ZW5zICR7VVNFUk5BTUVfTUlOX0xFTkdUSH0gWmVpY2hlbiBsYW5nIHNlaW5gLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogJ21heGxlbmd0aCcsXHJcbiAgICAgIG1lc3NhZ2U6IGBCZW51dHplcm5hbWUgZGFyZiBow7ZjaHN0ZW5zICR7VVNFUk5BTUVfTUFYX0xFTkdUSH0gWmVpY2hlbiBsYW5nIHNlaW5gLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogJ3BhdHRlcm4nLFxyXG4gICAgICBtZXNzYWdlOiAnQmVudXR6ZXJuYW1lIGRhcmYgbnVyIEJ1Y2hzdGFiZW4sIFphaGxlbiB1bmQgVW50ZXJzdHJpY2hlIGVudGhhbHRlbicsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgZW1haWw6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ0UtTWFpbCBlcmZvcmRlcmxpY2gnIH0sXHJcbiAgICB7IHR5cGU6ICdlbWFpbCcsIG1lc3NhZ2U6ICdVbmfDvGx0aWdlIEUtTWFpbCcgfSxcclxuICAgIHsgdHlwZTogJ2FscmVhZHlJblVzZScsIG1lc3NhZ2U6ICdFLU1haWwgYmVyZWl0cyBpbiBHZWJyYXVjaCcgfSxcclxuICAgIHsgdHlwZTogJ3Vua25vd24nLCBtZXNzYWdlOiAnVW5iZWthbm50ZXIgRmVobGVyJyB9LFxyXG4gICAgeyB0eXBlOiAndW5hdXRoZW50aWNhdGVkJywgbWVzc2FnZTogJ0JlbnV0emVybmFtZSBvZGVyIFBhc3N3b3J0IGZhbHNjaCcgfSxcclxuICBdLFxyXG4gIGNvbmZpcm1QYXNzd29yZDogW1xyXG4gICAgeyB0eXBlOiAncmVxdWlyZWQnLCBtZXNzYWdlOiAnUGFzc3dvcnQgZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAnbWF0Y2hpbmcnLCBtZXNzYWdlOiAnUGFzc3dvcnQgc3RpbW10IG5pY2h0IMO8YmVyZWluJyB9LFxyXG4gIF0sXHJcbiAgcGFzc3dvcmQ6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ1Bhc3N3b3J0IGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ21pbmxlbmd0aCcsIG1lc3NhZ2U6IGBNaW5kZXN0bMOkbmdlICR7UEFTU1dPUkRfTUlOX0xFTkdUSH0gWmVpY2hlbmAgfSxcclxuICAgIHsgdHlwZTogJ3VuYXV0aGVudGljYXRlZCcsIG1lc3NhZ2U6ICdCZW51dHplcm5hbWUgb2RlciBQYXNzd29ydCBmYWxzY2gnIH0sXHJcbiAgXSxcclxuICBuYW1lOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdOYW1lIGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ3Vua25vd24nLCBtZXNzYWdlOiAnVW5iZWthbm50ZXIgRmVobGVyJyB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiAnbWlubGVuZ3RoJyxcclxuICAgICAgbWVzc2FnZTogYE5hbWUgbXVzcyBtaW5kZXN0ZW5zICR7VVNFUk5BTUVfTUlOX0xFTkdUSH0gWmVpY2hlbiBsYW5nIHNlaW5gLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogJ21heGxlbmd0aCcsXHJcbiAgICAgIG1lc3NhZ2U6IGBOYW1lIGRhcmYgaMO2Y2hzdGVucyAke1VTRVJOQU1FX01BWF9MRU5HVEh9IFplaWNoZW4gbGFuZyBzZWluYCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgbWVzc2FnZTogJ05hbWUgZGFyZiBudXIgQnVjaHN0YWJlbiwgWmFobGVuIHVuZCBVbnRlcnN0cmljaGUgZW50aGFsdGVuJyxcclxuICAgIH0sXHJcbiAgXSxcclxuICBwaG9uZTogW1xyXG4gICAgeyB0eXBlOiAncmVxdWlyZWQnLCBtZXNzYWdlOiAnVGVsZWZvbm51bW1lciBlcmZvcmRlcmxpY2gnIH0sXHJcbiAgICB7IHR5cGU6ICdwYXR0ZXJuJywgbWVzc2FnZTogJ1VuZ8O8bHRpZ2UgVGVsZWZvbm51bW1lcicgfSxcclxuICAgIHsgdHlwZTogJ3Vua25vd24nLCBtZXNzYWdlOiAnVW5iZWthbm50ZXIgRmVobGVyJyB9LFxyXG4gIF0sXHJcbiAgZGF0ZTogW1xyXG4gICAgeyB0eXBlOiAncmVxdWlyZWQnLCBtZXNzYWdlOiAnRGF0dW0gZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAndW5rbm93bicsIG1lc3NhZ2U6ICdVbmJla2FubnRlciBGZWhsZXInIH0sXHJcbiAgXSxcclxuICB6aXBDb2RlOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdQTFogZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAncGF0dGVybicsIG1lc3NhZ2U6ICdVbmfDvGx0aWdlIFBMWicgfSxcclxuICAgIHsgdHlwZTogJ3Vua25vd24nLCBtZXNzYWdlOiAnVW5iZWthbm50ZXIgRmVobGVyJyB9LFxyXG4gIF0sXHJcbiAgb3RoZXI6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ0VpbmdhYmUgZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAndW5rbm93bicsIG1lc3NhZ2U6ICdVbmJla2FubnRlciBGZWhsZXInIH0sXHJcbiAgXSxcclxuICB1cmw6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ1VSTCBlcmZvcmRlcmxpY2gnIH0sXHJcbiAgICB7IHR5cGU6ICdwYXR0ZXJuJywgbWVzc2FnZTogJ1VuZ8O8bHRpZ2UgVVJMJyB9LFxyXG4gIF0sXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hWYWxpZGF0b3IoXHJcbiAgbWF0Y2hUbzogc3RyaW5nLFxyXG4gIHJldmVyc2U/OiBib29sZWFuXHJcbik6IFZhbGlkYXRvckZuIHtcclxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgIGlmIChjb250cm9sLnBhcmVudCAmJiByZXZlcnNlKSB7XHJcbiAgICAgIGNvbnN0IGMgPSAoY29udHJvbC5wYXJlbnQ/LmNvbnRyb2xzIGFzIGFueSlbbWF0Y2hUb10gYXMgQWJzdHJhY3RDb250cm9sO1xyXG4gICAgICBpZiAoYykge1xyXG4gICAgICAgIGMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhY29udHJvbC5wYXJlbnQgJiZcclxuICAgICAgISFjb250cm9sLnBhcmVudC52YWx1ZSAmJlxyXG4gICAgICBjb250cm9sLnZhbHVlID09PSAoY29udHJvbC5wYXJlbnQ/LmNvbnRyb2xzIGFzIGFueSlbbWF0Y2hUb10udmFsdWVcclxuICAgICAgPyBudWxsXHJcbiAgICAgIDogeyBtYXRjaGluZzogdHJ1ZSB9O1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1cmxWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gIGNvbnN0IHVybFBhdHRlcm4gPSAvXihodHRwcz98ZnRwKTpcXC9cXC9bXlxccy8kLj8jXS5bXlxcc10qJC9pO1xyXG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBudWxsOyAvLyBEb24ndCB2YWxpZGF0ZSBlbXB0eSB2YWx1ZXMgdG8gYWxsb3cgcmVxdWlyZWQgdmFsaWRhdG9yIHRvIGhhbmRsZSB0aGVtXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXJsUGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgcGF0dGVybjogdHJ1ZSB9O1xyXG4gIH07XHJcbn0iXX0=
|
package/fesm2022/anguland.mjs
CHANGED
|
@@ -71,6 +71,10 @@ const VALIDATION_MESSAGES = {
|
|
|
71
71
|
{ type: 'required', message: 'Eingabe erforderlich' },
|
|
72
72
|
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
73
73
|
],
|
|
74
|
+
url: [
|
|
75
|
+
{ type: 'required', message: 'URL erforderlich' },
|
|
76
|
+
{ type: 'pattern', message: 'Ungültige URL' },
|
|
77
|
+
],
|
|
74
78
|
};
|
|
75
79
|
function matchValidator(matchTo, reverse) {
|
|
76
80
|
return (control) => {
|
|
@@ -88,6 +92,15 @@ function matchValidator(matchTo, reverse) {
|
|
|
88
92
|
: { matching: true };
|
|
89
93
|
};
|
|
90
94
|
}
|
|
95
|
+
function urlValidator() {
|
|
96
|
+
const urlPattern = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
|
|
97
|
+
return (control) => {
|
|
98
|
+
if (!control.value) {
|
|
99
|
+
return null; // Don't validate empty values to allow required validator to handle them
|
|
100
|
+
}
|
|
101
|
+
return urlPattern.test(control.value) ? null : { pattern: true };
|
|
102
|
+
};
|
|
103
|
+
}
|
|
91
104
|
|
|
92
105
|
class FormErrorComponent {
|
|
93
106
|
constructor() {
|
|
@@ -96,31 +109,41 @@ class FormErrorComponent {
|
|
|
96
109
|
this.controlName = input.required();
|
|
97
110
|
this.validationKey = input.required();
|
|
98
111
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
</ng-container>
|
|
112
|
+
get validationsForKey() {
|
|
113
|
+
return this.VALIDATION_MESSAGES[this.validationKey()];
|
|
114
|
+
}
|
|
115
|
+
get control() {
|
|
116
|
+
return this.formGroup().get(this.controlName());
|
|
117
|
+
}
|
|
118
|
+
hasError(errorType) {
|
|
119
|
+
const hasError = this.control?.hasError(errorType) && this.control?.touched && !this.control?.pristine || false;
|
|
120
|
+
return hasError;
|
|
109
121
|
}
|
|
122
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
123
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: FormErrorComponent, isStandalone: true, selector: "lib-form-error", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, controlName: { classPropertyName: "controlName", publicName: "controlName", isSignal: true, isRequired: true, transformFunction: null }, validationKey: { classPropertyName: "validationKey", publicName: "validationKey", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
124
|
+
@for (validation of validationsForKey; track $index) {
|
|
125
|
+
<ng-container>
|
|
126
|
+
@if(hasError(validation.type)) {
|
|
127
|
+
<small class="smallError">
|
|
128
|
+
{{ validation.message }}
|
|
129
|
+
</small>
|
|
130
|
+
}
|
|
131
|
+
</ng-container>
|
|
132
|
+
}
|
|
110
133
|
`, isInline: true, styles: [".smallError{color:#f44336;font-size:.7rem}\n"] }); }
|
|
111
134
|
}
|
|
112
135
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, decorators: [{
|
|
113
136
|
type: Component,
|
|
114
|
-
args: [{ selector: 'lib-form-error', standalone: true, template: `
|
|
115
|
-
@for (validation of
|
|
116
|
-
<ng-container>
|
|
117
|
-
@if(
|
|
118
|
-
<small class="smallError">
|
|
119
|
-
{{ validation.message }}
|
|
120
|
-
</small>
|
|
121
|
-
}
|
|
122
|
-
</ng-container>
|
|
123
|
-
}
|
|
137
|
+
args: [{ selector: 'lib-form-error', standalone: true, template: `
|
|
138
|
+
@for (validation of validationsForKey; track $index) {
|
|
139
|
+
<ng-container>
|
|
140
|
+
@if(hasError(validation.type)) {
|
|
141
|
+
<small class="smallError">
|
|
142
|
+
{{ validation.message }}
|
|
143
|
+
</small>
|
|
144
|
+
}
|
|
145
|
+
</ng-container>
|
|
146
|
+
}
|
|
124
147
|
`, styles: [".smallError{color:#f44336;font-size:.7rem}\n"] }]
|
|
125
148
|
}] });
|
|
126
149
|
|
|
@@ -172,5 +195,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
172
195
|
* Generated bundle index. Do not edit.
|
|
173
196
|
*/
|
|
174
197
|
|
|
175
|
-
export { DarkModeToggleComponent, FormErrorComponent, PASSWORD_MIN_LENGTH, USERNAME_MAX_LENGTH, USERNAME_MIN_LENGTH, VALIDATION_MESSAGES, matchValidator };
|
|
198
|
+
export { DarkModeToggleComponent, FormErrorComponent, PASSWORD_MIN_LENGTH, USERNAME_MAX_LENGTH, USERNAME_MIN_LENGTH, VALIDATION_MESSAGES, matchValidator, urlValidator };
|
|
176
199
|
//# sourceMappingURL=anguland.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anguland.mjs","sources":["../../../projects/anguland/src/lib/validation.ts","../../../projects/anguland/src/lib/formError.component.ts","../../../projects/anguland/src/lib/dark-mode-toggle.component.ts","../../../projects/anguland/src/anguland.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport const PASSWORD_MIN_LENGTH = 6;\r\nexport const USERNAME_MIN_LENGTH = 2;\r\nexport const USERNAME_MAX_LENGTH = 30;\r\n\r\nexport const VALIDATION_MESSAGES = {\r\n username: [\r\n { type: 'required', message: 'Benutzername erforderlich' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n {\r\n type: 'minlength',\r\n message: `Benutzername muss mindestens ${USERNAME_MIN_LENGTH} Zeichen lang sein`,\r\n },\r\n {\r\n type: 'maxlength',\r\n message: `Benutzername darf höchstens ${USERNAME_MAX_LENGTH} Zeichen lang sein`,\r\n },\r\n {\r\n type: 'pattern',\r\n message: 'Benutzername darf nur Buchstaben, Zahlen und Unterstriche enthalten',\r\n },\r\n ],\r\n email: [\r\n { type: 'required', message: 'E-Mail erforderlich' },\r\n { type: 'email', message: 'Ungültige E-Mail' },\r\n { type: 'alreadyInUse', message: 'E-Mail bereits in Gebrauch' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n { type: 'unauthenticated', message: 'Benutzername oder Passwort falsch' },\r\n ],\r\n confirmPassword: [\r\n { type: 'required', message: 'Passwort erforderlich' },\r\n { type: 'matching', message: 'Passwort stimmt nicht überein' },\r\n ],\r\n password: [\r\n { type: 'required', message: 'Passwort erforderlich' },\r\n { type: 'minlength', message: `Mindestlänge ${PASSWORD_MIN_LENGTH} Zeichen` },\r\n { type: 'unauthenticated', message: 'Benutzername oder Passwort falsch' },\r\n ],\r\n name: [\r\n { type: 'required', message: 'Name erforderlich' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n {\r\n type: 'minlength',\r\n message: `Name muss mindestens ${USERNAME_MIN_LENGTH} Zeichen lang sein`,\r\n },\r\n {\r\n type: 'maxlength',\r\n message: `Name darf höchstens ${USERNAME_MAX_LENGTH} Zeichen lang sein`,\r\n },\r\n {\r\n type: 'pattern',\r\n message: 'Name darf nur Buchstaben, Zahlen und Unterstriche enthalten',\r\n },\r\n ],\r\n phone: [\r\n { type: 'required', message: 'Telefonnummer erforderlich' },\r\n { type: 'pattern', message: 'Ungültige Telefonnummer' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n ],\r\n date: [\r\n { type: 'required', message: 'Datum erforderlich' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n ],\r\n zipCode: [\r\n { type: 'required', message: 'PLZ erforderlich' },\r\n { type: 'pattern', message: 'Ungültige PLZ' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n ],\r\n other: [\r\n { type: 'required', message: 'Eingabe erforderlich' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n ],\r\n};\r\n\r\nexport function matchValidator(\r\n matchTo: string,\r\n reverse?: boolean\r\n): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (control.parent && reverse) {\r\n const c = (control.parent?.controls as any)[matchTo] as AbstractControl;\r\n if (c) {\r\n c.updateValueAndValidity();\r\n }\r\n return null;\r\n }\r\n return !!control.parent &&\r\n !!control.parent.value &&\r\n control.value === (control.parent?.controls as any)[matchTo].value\r\n ? null\r\n : { matching: true };\r\n };\r\n}\r\n","import { Component, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { VALIDATION_MESSAGES } from './validation';\n\n@Component({\n selector: 'lib-form-error',\n standalone: true,\n template: `\n @for (validation of VALIDATION_MESSAGES[validationKey()]; track $index) {\n <ng-container>\n @if(formGroup().get(controlName())?.hasError(validation.type) && formGroup().get(controlName())?.touched && !formGroup().get(controlName())?.pristine) {\n <small class=\"smallError\">\n {{ validation.message }}\n </small>\n }\n </ng-container>\n }\n `,\n styles: `\n .smallError{\n color: #f44336;\n font-size: 0.7rem;\n }\n `\n})\nexport class FormErrorComponent {\n VALIDATION_MESSAGES: ValidationMessages = VALIDATION_MESSAGES;\n formGroup = input.required<FormGroup>({});\n controlName = input.required<string>();\n validationKey = input.required<string>();\n}\n\ninterface ValidationMessages {\n [key: string]: ValidationMessage[];\n}\n\ninterface ValidationMessage {\n type: string;\n message: string;\n}\n\n","import { Component, input, output } from '@angular/core';\n\n@Component({\n selector: 'lib-dark-mode-toggle',\n standalone: true,\n imports: [],\n template: `\n <div class=\"darkModeToggleButton\">\n <input type=\"checkbox\" id=\"switch\" [checked]=\"isDarkMode()\" (change)=\"toggleDarkMode($event)\" />\n <div class=\"switch-btn\">\n <label>\n <div class=\"icons\">\n <span><i class=\"material-icons\">light_mode</i></span>\n <span><i class=\"material-icons\">dark_mode</i></span>\n </div>\n </label>\n </div>\n </div>\n\n `,\n styles: [`\n .darkModeToggleButton {\n position: relative;\n * {\n transition: all 0.75s ease;\n }\n --switch-width: 60px;\n --switch-height: 30px;\n --label-width: 30px;\n --switch-radius: 20px;\n }\n\n input[type=\"checkbox\"] {\n outline: none;\n -webkit-tap-highlight-color: transparent;\n position: absolute; \n top: 0;\n left: 0;\n width: var(--switch-width);\n height: 100%;\n opacity: 0; \n z-index: 2; \n cursor: pointer;\n }\n\n .switch-btn {\n width: var(--switch-width);\n height: var(--switch-height) + 5px;\n background-color: #eceef1;\n border: 3px solid #d1d6db;\n border-radius: var(--switch-radius);\n position: relative;\n z-index: 1;\n padding: 3px;\n }\n\n label {\n width: var(--label-width);\n height: var(--switch-height);\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f8f8f9;\n border-radius: var(--switch-radius);\n overflow: hidden;\n cursor: pointer;\n }\n\n .icons {\n display: flex;\n align-items: center;\n gap: 20px;\n transform: translate(-11px, 19px) rotate(110deg);\n user-select: none;\n color: #17193f;\n }\n\n input[type=\"checkbox\"]:checked ~ .switch-btn {\n border: 3px solid #2e3052;\n background-color: #17193f;\n }\n\n input[type=\"checkbox\"]:checked ~ .switch-btn label {\n transform: translateX(calc(var(--switch-width) - var(--label-width)));\n box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.2);\n }\n\n input[type=\"checkbox\"]:checked ~ .switch-btn label .icons {\n transform: translateX(-20px);\n }\n\n `]\n})\nexport class DarkModeToggleComponent {\n\n isDarkMode = input.required<boolean>();\n //Would also work\n // isDarkMode = model<boolean>();\n darkModeToggled = output<boolean>();\n\n toggleDarkMode(e: any) {\n this.darkModeToggled.emit(e.target.checked);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"anguland.mjs","sources":["../../../projects/anguland/src/lib/validation.ts","../../../projects/anguland/src/lib/formError.component.ts","../../../projects/anguland/src/lib/dark-mode-toggle.component.ts","../../../projects/anguland/src/anguland.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport interface ValidationMessage {\r\n type: string;\r\n message: string;\r\n}\r\n\r\nexport interface ValidationMessages {\r\n [key: string]: ValidationMessage[];\r\n}\r\n\r\nexport const PASSWORD_MIN_LENGTH = 6;\r\nexport const USERNAME_MIN_LENGTH = 2;\r\nexport const USERNAME_MAX_LENGTH = 30;\r\n\r\nexport const VALIDATION_MESSAGES: ValidationMessages = {\r\n username: [\r\n { type: 'required', message: 'Benutzername erforderlich' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n {\r\n type: 'minlength',\r\n message: `Benutzername muss mindestens ${USERNAME_MIN_LENGTH} Zeichen lang sein`,\r\n },\r\n {\r\n type: 'maxlength',\r\n message: `Benutzername darf höchstens ${USERNAME_MAX_LENGTH} Zeichen lang sein`,\r\n },\r\n {\r\n type: 'pattern',\r\n message: 'Benutzername darf nur Buchstaben, Zahlen und Unterstriche enthalten',\r\n },\r\n ],\r\n email: [\r\n { type: 'required', message: 'E-Mail erforderlich' },\r\n { type: 'email', message: 'Ungültige E-Mail' },\r\n { type: 'alreadyInUse', message: 'E-Mail bereits in Gebrauch' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n { type: 'unauthenticated', message: 'Benutzername oder Passwort falsch' },\r\n ],\r\n confirmPassword: [\r\n { type: 'required', message: 'Passwort erforderlich' },\r\n { type: 'matching', message: 'Passwort stimmt nicht überein' },\r\n ],\r\n password: [\r\n { type: 'required', message: 'Passwort erforderlich' },\r\n { type: 'minlength', message: `Mindestlänge ${PASSWORD_MIN_LENGTH} Zeichen` },\r\n { type: 'unauthenticated', message: 'Benutzername oder Passwort falsch' },\r\n ],\r\n name: [\r\n { type: 'required', message: 'Name erforderlich' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n {\r\n type: 'minlength',\r\n message: `Name muss mindestens ${USERNAME_MIN_LENGTH} Zeichen lang sein`,\r\n },\r\n {\r\n type: 'maxlength',\r\n message: `Name darf höchstens ${USERNAME_MAX_LENGTH} Zeichen lang sein`,\r\n },\r\n {\r\n type: 'pattern',\r\n message: 'Name darf nur Buchstaben, Zahlen und Unterstriche enthalten',\r\n },\r\n ],\r\n phone: [\r\n { type: 'required', message: 'Telefonnummer erforderlich' },\r\n { type: 'pattern', message: 'Ungültige Telefonnummer' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n ],\r\n date: [\r\n { type: 'required', message: 'Datum erforderlich' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n ],\r\n zipCode: [\r\n { type: 'required', message: 'PLZ erforderlich' },\r\n { type: 'pattern', message: 'Ungültige PLZ' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n ],\r\n other: [\r\n { type: 'required', message: 'Eingabe erforderlich' },\r\n { type: 'unknown', message: 'Unbekannter Fehler' },\r\n ],\r\n url: [\r\n { type: 'required', message: 'URL erforderlich' },\r\n { type: 'pattern', message: 'Ungültige URL' },\r\n ],\r\n};\r\n\r\nexport function matchValidator(\r\n matchTo: string,\r\n reverse?: boolean\r\n): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (control.parent && reverse) {\r\n const c = (control.parent?.controls as any)[matchTo] as AbstractControl;\r\n if (c) {\r\n c.updateValueAndValidity();\r\n }\r\n return null;\r\n }\r\n return !!control.parent &&\r\n !!control.parent.value &&\r\n control.value === (control.parent?.controls as any)[matchTo].value\r\n ? null\r\n : { matching: true };\r\n };\r\n}\r\n\r\nexport function urlValidator(): ValidatorFn {\r\n const urlPattern = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i;\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null; // Don't validate empty values to allow required validator to handle them\r\n }\r\n return urlPattern.test(control.value) ? null : { pattern: true };\r\n };\r\n}","import { Component, input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { VALIDATION_MESSAGES, ValidationMessage, ValidationMessages } from './validation';\r\n\r\n@Component({\r\n selector: 'lib-form-error',\r\n standalone: true,\r\n template: `\r\n @for (validation of validationsForKey; track $index) {\r\n <ng-container>\r\n @if(hasError(validation.type)) {\r\n <small class=\"smallError\">\r\n {{ validation.message }}\r\n </small>\r\n }\r\n </ng-container>\r\n }\r\n `,\r\n styles: `\r\n .smallError{\r\n color: #f44336;\r\n font-size: 0.7rem;\r\n }\r\n `\r\n})\r\nexport class FormErrorComponent {\r\n VALIDATION_MESSAGES: ValidationMessages = VALIDATION_MESSAGES;\r\n formGroup = input.required<FormGroup>({});\r\n controlName = input.required<string>();\r\n validationKey = input.required<string>();\r\n\r\n\r\n\r\n get validationsForKey(): ValidationMessage[] {\r\n return this.VALIDATION_MESSAGES[this.validationKey()];\r\n }\r\n\r\n get control() {\r\n return this.formGroup().get(this.controlName());\r\n }\r\n\r\n hasError(errorType: string): boolean {\r\n const hasError: boolean = this.control?.hasError(errorType) && this.control?.touched && !this.control?.pristine || false;\r\n return hasError;\r\n }\r\n}\r\n","import { Component, input, output } from '@angular/core';\n\n@Component({\n selector: 'lib-dark-mode-toggle',\n standalone: true,\n imports: [],\n template: `\n <div class=\"darkModeToggleButton\">\n <input type=\"checkbox\" id=\"switch\" [checked]=\"isDarkMode()\" (change)=\"toggleDarkMode($event)\" />\n <div class=\"switch-btn\">\n <label>\n <div class=\"icons\">\n <span><i class=\"material-icons\">light_mode</i></span>\n <span><i class=\"material-icons\">dark_mode</i></span>\n </div>\n </label>\n </div>\n </div>\n\n `,\n styles: [`\n .darkModeToggleButton {\n position: relative;\n * {\n transition: all 0.75s ease;\n }\n --switch-width: 60px;\n --switch-height: 30px;\n --label-width: 30px;\n --switch-radius: 20px;\n }\n\n input[type=\"checkbox\"] {\n outline: none;\n -webkit-tap-highlight-color: transparent;\n position: absolute; \n top: 0;\n left: 0;\n width: var(--switch-width);\n height: 100%;\n opacity: 0; \n z-index: 2; \n cursor: pointer;\n }\n\n .switch-btn {\n width: var(--switch-width);\n height: var(--switch-height) + 5px;\n background-color: #eceef1;\n border: 3px solid #d1d6db;\n border-radius: var(--switch-radius);\n position: relative;\n z-index: 1;\n padding: 3px;\n }\n\n label {\n width: var(--label-width);\n height: var(--switch-height);\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f8f8f9;\n border-radius: var(--switch-radius);\n overflow: hidden;\n cursor: pointer;\n }\n\n .icons {\n display: flex;\n align-items: center;\n gap: 20px;\n transform: translate(-11px, 19px) rotate(110deg);\n user-select: none;\n color: #17193f;\n }\n\n input[type=\"checkbox\"]:checked ~ .switch-btn {\n border: 3px solid #2e3052;\n background-color: #17193f;\n }\n\n input[type=\"checkbox\"]:checked ~ .switch-btn label {\n transform: translateX(calc(var(--switch-width) - var(--label-width)));\n box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.2);\n }\n\n input[type=\"checkbox\"]:checked ~ .switch-btn label .icons {\n transform: translateX(-20px);\n }\n\n `]\n})\nexport class DarkModeToggleComponent {\n\n isDarkMode = input.required<boolean>();\n //Would also work\n // isDarkMode = model<boolean>();\n darkModeToggled = output<boolean>();\n\n toggleDarkMode(e: any) {\n this.darkModeToggled.emit(e.target.checked);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
import { FormGroup } from '@angular/forms';
|
|
2
|
+
import { ValidationMessage, ValidationMessages } from './validation';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export declare class FormErrorComponent {
|
|
4
5
|
VALIDATION_MESSAGES: ValidationMessages;
|
|
5
6
|
formGroup: import("@angular/core").InputSignal<FormGroup<any>>;
|
|
6
7
|
controlName: import("@angular/core").InputSignal<string>;
|
|
7
8
|
validationKey: import("@angular/core").InputSignal<string>;
|
|
9
|
+
get validationsForKey(): ValidationMessage[];
|
|
10
|
+
get control(): import("@angular/forms").AbstractControl<any, any> | null;
|
|
11
|
+
hasError(errorType: string): boolean;
|
|
8
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormErrorComponent, never>;
|
|
9
13
|
static ɵcmp: i0.ɵɵComponentDeclaration<FormErrorComponent, "lib-form-error", never, { "formGroup": { "alias": "formGroup"; "required": true; "isSignal": true; }; "controlName": { "alias": "controlName"; "required": true; "isSignal": true; }; "validationKey": { "alias": "validationKey"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
10
14
|
}
|
|
11
|
-
interface ValidationMessages {
|
|
12
|
-
[key: string]: ValidationMessage[];
|
|
13
|
-
}
|
|
14
|
-
interface ValidationMessage {
|
|
15
|
-
type: string;
|
|
16
|
-
message: string;
|
|
17
|
-
}
|
|
18
|
-
export {};
|
package/lib/validation.d.ts
CHANGED
|
@@ -1,43 +1,14 @@
|
|
|
1
1
|
import { ValidatorFn } from '@angular/forms';
|
|
2
|
+
export interface ValidationMessage {
|
|
3
|
+
type: string;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ValidationMessages {
|
|
7
|
+
[key: string]: ValidationMessage[];
|
|
8
|
+
}
|
|
2
9
|
export declare const PASSWORD_MIN_LENGTH = 6;
|
|
3
10
|
export declare const USERNAME_MIN_LENGTH = 2;
|
|
4
11
|
export declare const USERNAME_MAX_LENGTH = 30;
|
|
5
|
-
export declare const VALIDATION_MESSAGES:
|
|
6
|
-
username: {
|
|
7
|
-
type: string;
|
|
8
|
-
message: string;
|
|
9
|
-
}[];
|
|
10
|
-
email: {
|
|
11
|
-
type: string;
|
|
12
|
-
message: string;
|
|
13
|
-
}[];
|
|
14
|
-
confirmPassword: {
|
|
15
|
-
type: string;
|
|
16
|
-
message: string;
|
|
17
|
-
}[];
|
|
18
|
-
password: {
|
|
19
|
-
type: string;
|
|
20
|
-
message: string;
|
|
21
|
-
}[];
|
|
22
|
-
name: {
|
|
23
|
-
type: string;
|
|
24
|
-
message: string;
|
|
25
|
-
}[];
|
|
26
|
-
phone: {
|
|
27
|
-
type: string;
|
|
28
|
-
message: string;
|
|
29
|
-
}[];
|
|
30
|
-
date: {
|
|
31
|
-
type: string;
|
|
32
|
-
message: string;
|
|
33
|
-
}[];
|
|
34
|
-
zipCode: {
|
|
35
|
-
type: string;
|
|
36
|
-
message: string;
|
|
37
|
-
}[];
|
|
38
|
-
other: {
|
|
39
|
-
type: string;
|
|
40
|
-
message: string;
|
|
41
|
-
}[];
|
|
42
|
-
};
|
|
12
|
+
export declare const VALIDATION_MESSAGES: ValidationMessages;
|
|
43
13
|
export declare function matchValidator(matchTo: string, reverse?: boolean): ValidatorFn;
|
|
14
|
+
export declare function urlValidator(): ValidatorFn;
|