anguland 0.0.1 → 0.0.3
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/esm2022/lib/dark-mode-toggle.component.mjs +46 -0
- package/esm2022/lib/formError.component.mjs +38 -0
- package/esm2022/lib/validation.mjs +88 -0
- package/esm2022/public-api.mjs +3 -6
- package/fesm2022/anguland.mjs +162 -28
- package/fesm2022/anguland.mjs.map +1 -1
- package/lib/dark-mode-toggle.component.d.ts +8 -0
- package/lib/formError.component.d.ts +18 -0
- package/lib/validation.d.ts +43 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -2
- package/esm2022/lib/anguland.component.mjs +0 -19
- package/esm2022/lib/anguland.service.mjs +0 -14
- package/lib/anguland.component.d.ts +0 -5
- package/lib/anguland.service.d.ts +0 -6
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Component, input, output } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/forms";
|
|
5
|
+
export class DarkModeToggleComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.isDarkMode = input.required();
|
|
8
|
+
this.darkModeToggled = output();
|
|
9
|
+
}
|
|
10
|
+
toggleDarkMode(e) {
|
|
11
|
+
this.darkModeToggled.emit(e.target.checked);
|
|
12
|
+
}
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DarkModeToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.0", type: DarkModeToggleComponent, isStandalone: true, selector: "lib-dark-mode-toggle", inputs: { isDarkMode: { classPropertyName: "isDarkMode", publicName: "isDarkMode", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { darkModeToggled: "darkModeToggled" }, ngImport: i0, template: `
|
|
15
|
+
<div class="darkModeToggleButton">
|
|
16
|
+
<input type="checkbox" id="switch" [ngModel]="isDarkMode()" (change)="toggleDarkMode($event)" />
|
|
17
|
+
<div class="switch-btn">
|
|
18
|
+
<label>
|
|
19
|
+
<div class="icons">
|
|
20
|
+
<span><i class="material-icons">light_mode</i></span>
|
|
21
|
+
<span><i class="material-icons">dark_mode</i></span>
|
|
22
|
+
</div>
|
|
23
|
+
</label>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
`, isInline: true, styles: [".darkModeToggleButton{position:relative;--switch-width: 60px;--switch-height: 25px;--label-width: 30px;--switch-radius: 20px}.darkModeToggleButton *{transition:all .75s ease}input[type=checkbox]{outline:none;-webkit-tap-highlight-color:transparent;position:absolute;top:0;left:0;width:var(--switch-width);height:100%;opacity:0;z-index:2;cursor:pointer}.switch-btn{width:var(--switch-width);height:var(--switch-height) + 10px;background-color:#eceef1;border:3px solid #d1d6db;border-radius:var(--switch-radius);position:relative;z-index:1;padding:6px}label{width:var(--label-width);height:var(--switch-height);display:flex;align-items:center;justify-content:center;background:#f8f8f9;border-radius:var(--switch-radius);overflow:hidden;cursor:pointer}.icons{display:flex;align-items:center;gap:20px;transform:translate(-11px,19px) rotate(120deg);-webkit-user-select:none;user-select:none;color:#17193f}input[type=checkbox]:checked~.switch-btn{border:3px solid #2e3052;background-color:#17193f}input[type=checkbox]:checked~.switch-btn label{transform:translate(calc(var(--switch-width) - var(--label-width)));box-shadow:0 3px 5px #0003}input[type=checkbox]:checked~.switch-btn label .icons{transform:translate(-20px)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DarkModeToggleComponent, decorators: [{
|
|
30
|
+
type: Component,
|
|
31
|
+
args: [{ selector: 'lib-dark-mode-toggle', standalone: true, imports: [FormsModule], template: `
|
|
32
|
+
<div class="darkModeToggleButton">
|
|
33
|
+
<input type="checkbox" id="switch" [ngModel]="isDarkMode()" (change)="toggleDarkMode($event)" />
|
|
34
|
+
<div class="switch-btn">
|
|
35
|
+
<label>
|
|
36
|
+
<div class="icons">
|
|
37
|
+
<span><i class="material-icons">light_mode</i></span>
|
|
38
|
+
<span><i class="material-icons">dark_mode</i></span>
|
|
39
|
+
</div>
|
|
40
|
+
</label>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
`, styles: [".darkModeToggleButton{position:relative;--switch-width: 60px;--switch-height: 25px;--label-width: 30px;--switch-radius: 20px}.darkModeToggleButton *{transition:all .75s ease}input[type=checkbox]{outline:none;-webkit-tap-highlight-color:transparent;position:absolute;top:0;left:0;width:var(--switch-width);height:100%;opacity:0;z-index:2;cursor:pointer}.switch-btn{width:var(--switch-width);height:var(--switch-height) + 10px;background-color:#eceef1;border:3px solid #d1d6db;border-radius:var(--switch-radius);position:relative;z-index:1;padding:6px}label{width:var(--label-width);height:var(--switch-height);display:flex;align-items:center;justify-content:center;background:#f8f8f9;border-radius:var(--switch-radius);overflow:hidden;cursor:pointer}.icons{display:flex;align-items:center;gap:20px;transform:translate(-11px,19px) rotate(120deg);-webkit-user-select:none;user-select:none;color:#17193f}input[type=checkbox]:checked~.switch-btn{border:3px solid #2e3052;background-color:#17193f}input[type=checkbox]:checked~.switch-btn label{transform:translate(calc(var(--switch-width) - var(--label-width)));box-shadow:0 3px 5px #0003}input[type=checkbox]:checked~.switch-btn label .icons{transform:translate(-20px)}\n"] }]
|
|
45
|
+
}] });
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFyay1tb2RlLXRvZ2dsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFuZC9zcmMvbGliL2RhcmstbW9kZS10b2dnbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQTZGN0MsTUFBTSxPQUFPLHVCQUF1QjtJQTNGcEM7UUE2RkUsZUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUN2QyxvQkFBZSxHQUFHLE1BQU0sRUFBVyxDQUFDO0tBS3JDO0lBSEMsY0FBYyxDQUFDLENBQU07UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDOzhHQVBVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLG1SQXZGeEI7Ozs7Ozs7Ozs7Ozs7R0FhVCx5d0NBZFMsV0FBVzs7MkZBd0ZWLHVCQUF1QjtrQkEzRm5DLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFdBQVcsQ0FBQyxZQUNaOzs7Ozs7Ozs7Ozs7O0dBYVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGFyay1tb2RlLXRvZ2dsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRhcmtNb2RlVG9nZ2xlQnV0dG9uXCI+XG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwic3dpdGNoXCIgW25nTW9kZWxdPVwiaXNEYXJrTW9kZSgpXCIgKGNoYW5nZSk9XCJ0b2dnbGVEYXJrTW9kZSgkZXZlbnQpXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwic3dpdGNoLWJ0blwiPlxuICAgICAgPGxhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbnNcIj5cbiAgICAgICAgICA8c3Bhbj48aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+bGlnaHRfbW9kZTwvaT48L3NwYW4+XG4gICAgICAgICAgPHNwYW4+PGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmRhcmtfbW9kZTwvaT48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgICAgLmRhcmtNb2RlVG9nZ2xlQnV0dG9uIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIFNldCBjb250ZXh0IGZvciBhYnNvbHV0ZSBwb3NpdGlvbmluZyAqL1xuICAgICoge1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNzVzIGVhc2U7XG4gICAgfVxuICAgIC0tc3dpdGNoLXdpZHRoOiA2MHB4O1xuICAgIC0tc3dpdGNoLWhlaWdodDogMjVweDtcbiAgICAtLWxhYmVsLXdpZHRoOiAzMHB4O1xuICAgIC0tc3dpdGNoLXJhZGl1czogMjBweDtcbiAgfVxuXG4gIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgLyogQWJzb2x1dGVseSBwb3NpdGlvbiB0aGUgY2hlY2tib3ggKi9cbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogdmFyKC0tc3dpdGNoLXdpZHRoKTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3BhY2l0eTogMDsgLyogTWFrZSBpdCBpbnZpc2libGUgKi9cbiAgICB6LWluZGV4OiAyOyAvKiBFbnN1cmUgaXQgc2l0cyBhYm92ZSB0aGUgc3dpdGNoLWJ0biAqL1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5zd2l0Y2gtYnRuIHtcbiAgICB3aWR0aDogdmFyKC0tc3dpdGNoLXdpZHRoKTtcbiAgICBoZWlnaHQ6IHZhcigtLXN3aXRjaC1oZWlnaHQpICsgMTBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlZWYxO1xuICAgIGJvcmRlcjogM3B4IHNvbGlkICNkMWQ2ZGI7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc3dpdGNoLXJhZGl1cyk7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBFbnN1cmUgaXQncyBzdGFja2VkIGJlbG93IHRoZSBjaGVja2JveCAqL1xuICAgIHotaW5kZXg6IDE7XG4gICAgcGFkZGluZzogNnB4O1xuICB9XG5cbiAgbGFiZWwge1xuICAgIHdpZHRoOiB2YXIoLS1sYWJlbC13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZDogI2Y4ZjhmOTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zd2l0Y2gtcmFkaXVzKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5pY29ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMjBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTFweCwgMTlweCkgcm90YXRlKDEyMGRlZyk7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgY29sb3I6ICMxNzE5M2Y7XG4gIH1cblxuICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZCB+IC5zd2l0Y2gtYnRuIHtcbiAgICBib3JkZXI6IDNweCBzb2xpZCAjMmUzMDUyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMxNzE5M2Y7XG4gIH1cblxuICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZCB+IC5zd2l0Y2gtYnRuIGxhYmVsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gdmFyKC0tbGFiZWwtd2lkdGgpKSk7XG4gICAgYm94LXNoYWRvdzogMHB4IDNweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgfVxuXG4gIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkIH4gLnN3aXRjaC1idG4gbGFiZWwgLmljb25zIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTIwcHgpO1xuICB9XG5cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgRGFya01vZGVUb2dnbGVDb21wb25lbnQge1xuXG4gIGlzRGFya01vZGUgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xuICBkYXJrTW9kZVRvZ2dsZWQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICB0b2dnbGVEYXJrTW9kZShlOiBhbnkpIHtcbiAgICB0aGlzLmRhcmtNb2RlVG9nZ2xlZC5lbWl0KGUudGFyZ2V0LmNoZWNrZWQpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Component, input } from '@angular/core';
|
|
2
|
+
import { VALIDATION_MESSAGES } from './validation';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class FormErrorComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.VALIDATION_MESSAGES = VALIDATION_MESSAGES;
|
|
7
|
+
this.formGroup = input.required({});
|
|
8
|
+
this.controlName = input.required();
|
|
9
|
+
this.validationKey = input.required();
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
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: `
|
|
13
|
+
@for (validation of VALIDATION_MESSAGES[validationKey()]; track $index) {
|
|
14
|
+
<ng-container>
|
|
15
|
+
@if(formGroup().get(controlName())?.hasError(validation.type) && formGroup().get(controlName())?.touched && !formGroup().get(controlName())?.pristine) {
|
|
16
|
+
<small class="smallError">
|
|
17
|
+
{{ validation.message }}
|
|
18
|
+
</small>
|
|
19
|
+
}
|
|
20
|
+
</ng-container>
|
|
21
|
+
}
|
|
22
|
+
`, isInline: true, styles: [".smallError{color:#f44336;font-size:.7rem}\n"] }); }
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, decorators: [{
|
|
25
|
+
type: Component,
|
|
26
|
+
args: [{ selector: 'lib-form-error', standalone: true, template: `
|
|
27
|
+
@for (validation of VALIDATION_MESSAGES[validationKey()]; track $index) {
|
|
28
|
+
<ng-container>
|
|
29
|
+
@if(formGroup().get(controlName())?.hasError(validation.type) && formGroup().get(controlName())?.touched && !formGroup().get(controlName())?.pristine) {
|
|
30
|
+
<small class="smallError">
|
|
31
|
+
{{ validation.message }}
|
|
32
|
+
</small>
|
|
33
|
+
}
|
|
34
|
+
</ng-container>
|
|
35
|
+
}
|
|
36
|
+
`, styles: [".smallError{color:#f44336;font-size:.7rem}\n"] }]
|
|
37
|
+
}] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybUVycm9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYW5kL3NyYy9saWIvZm9ybUVycm9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBdUJuRCxNQUFNLE9BQU8sa0JBQWtCO0lBckIvQjtRQXNCRSx3QkFBbUIsR0FBdUIsbUJBQW1CLENBQUM7UUFDOUQsY0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQVksRUFBRSxDQUFDLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDdkMsa0JBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7S0FDMUM7OEdBTFksa0JBQWtCO2tHQUFsQixrQkFBa0IsaWZBbEJuQjs7Ozs7Ozs7OztHQVVUOzsyRkFRVSxrQkFBa0I7a0JBckI5QixTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksWUFDTjs7Ozs7Ozs7OztHQVVUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVkFMSURBVElPTl9NRVNTQUdFUyB9IGZyb20gJy4vdmFsaWRhdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1mb3JtLWVycm9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAZm9yICh2YWxpZGF0aW9uIG9mIFZBTElEQVRJT05fTUVTU0FHRVNbdmFsaWRhdGlvbktleSgpXTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICBAaWYoZm9ybUdyb3VwKCkuZ2V0KGNvbnRyb2xOYW1lKCkpPy5oYXNFcnJvcih2YWxpZGF0aW9uLnR5cGUpICYmIGZvcm1Hcm91cCgpLmdldChjb250cm9sTmFtZSgpKT8udG91Y2hlZCAmJiAhZm9ybUdyb3VwKCkuZ2V0KGNvbnRyb2xOYW1lKCkpPy5wcmlzdGluZSkge1xuICAgICAgICA8c21hbGwgY2xhc3M9XCJzbWFsbEVycm9yXCI+XG4gICAgICAgICAge3sgdmFsaWRhdGlvbi5tZXNzYWdlIH19XG4gICAgICAgIDwvc21hbGw+XG4gICAgICAgIH1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVzOiBgXG4gICAgLnNtYWxsRXJyb3J7XG4gICAgICBjb2xvcjogI2Y0NDMzNjtcbiAgICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICB9XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUVycm9yQ29tcG9uZW50IHtcbiAgVkFMSURBVElPTl9NRVNTQUdFUzogVmFsaWRhdGlvbk1lc3NhZ2VzID0gVkFMSURBVElPTl9NRVNTQUdFUztcbiAgZm9ybUdyb3VwID0gaW5wdXQucmVxdWlyZWQ8Rm9ybUdyb3VwPih7fSk7XG4gIGNvbnRyb2xOYW1lID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICB2YWxpZGF0aW9uS2V5ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xufVxuXG5pbnRlcmZhY2UgVmFsaWRhdGlvbk1lc3NhZ2VzIHtcbiAgW2tleTogc3RyaW5nXTogVmFsaWRhdGlvbk1lc3NhZ2VbXTtcbn1cblxuaW50ZXJmYWNlIFZhbGlkYXRpb25NZXNzYWdlIHtcbiAgdHlwZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbiJdfQ==
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export const PASSWORD_MIN_LENGTH = 6;
|
|
2
|
+
export const USERNAME_MIN_LENGTH = 2;
|
|
3
|
+
export const USERNAME_MAX_LENGTH = 30;
|
|
4
|
+
export const VALIDATION_MESSAGES = {
|
|
5
|
+
username: [
|
|
6
|
+
{ type: 'required', message: 'Benutzername erforderlich' },
|
|
7
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
8
|
+
{
|
|
9
|
+
type: 'minlength',
|
|
10
|
+
message: `Benutzername muss mindestens ${USERNAME_MIN_LENGTH} Zeichen lang sein`,
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
type: 'maxlength',
|
|
14
|
+
message: `Benutzername darf höchstens ${USERNAME_MAX_LENGTH} Zeichen lang sein`,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
type: 'pattern',
|
|
18
|
+
message: 'Benutzername darf nur Buchstaben, Zahlen und Unterstriche enthalten',
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
email: [
|
|
22
|
+
{ type: 'required', message: 'E-Mail erforderlich' },
|
|
23
|
+
{ type: 'email', message: 'Ungültige E-Mail' },
|
|
24
|
+
{ type: 'alreadyInUse', message: 'E-Mail bereits in Gebrauch' },
|
|
25
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
26
|
+
{ type: 'unauthenticated', message: 'Benutzername oder Passwort falsch' },
|
|
27
|
+
],
|
|
28
|
+
confirmPassword: [
|
|
29
|
+
{ type: 'required', message: 'Passwort erforderlich' },
|
|
30
|
+
{ type: 'matching', message: 'Passwort stimmt nicht überein' },
|
|
31
|
+
],
|
|
32
|
+
password: [
|
|
33
|
+
{ type: 'required', message: 'Passwort erforderlich' },
|
|
34
|
+
{ type: 'minlength', message: `Mindestlänge ${PASSWORD_MIN_LENGTH} Zeichen` },
|
|
35
|
+
{ type: 'unauthenticated', message: 'Benutzername oder Passwort falsch' },
|
|
36
|
+
],
|
|
37
|
+
name: [
|
|
38
|
+
{ type: 'required', message: 'Name erforderlich' },
|
|
39
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
40
|
+
{
|
|
41
|
+
type: 'minlength',
|
|
42
|
+
message: `Name muss mindestens ${USERNAME_MIN_LENGTH} Zeichen lang sein`,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'maxlength',
|
|
46
|
+
message: `Name darf höchstens ${USERNAME_MAX_LENGTH} Zeichen lang sein`,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'pattern',
|
|
50
|
+
message: 'Name darf nur Buchstaben, Zahlen und Unterstriche enthalten',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
phone: [
|
|
54
|
+
{ type: 'required', message: 'Telefonnummer erforderlich' },
|
|
55
|
+
{ type: 'pattern', message: 'Ungültige Telefonnummer' },
|
|
56
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
57
|
+
],
|
|
58
|
+
date: [
|
|
59
|
+
{ type: 'required', message: 'Datum erforderlich' },
|
|
60
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
61
|
+
],
|
|
62
|
+
zipCode: [
|
|
63
|
+
{ type: 'required', message: 'PLZ erforderlich' },
|
|
64
|
+
{ type: 'pattern', message: 'Ungültige PLZ' },
|
|
65
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
66
|
+
],
|
|
67
|
+
other: [
|
|
68
|
+
{ type: 'required', message: 'Eingabe erforderlich' },
|
|
69
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
export function matchValidator(matchTo, reverse) {
|
|
73
|
+
return (control) => {
|
|
74
|
+
if (control.parent && reverse) {
|
|
75
|
+
const c = (control.parent?.controls)[matchTo];
|
|
76
|
+
if (c) {
|
|
77
|
+
c.updateValueAndValidity();
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return !!control.parent &&
|
|
82
|
+
!!control.parent.value &&
|
|
83
|
+
control.value === (control.parent?.controls)[matchTo].value
|
|
84
|
+
? null
|
|
85
|
+
: { matching: true };
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYW5kL3NyYy9saWIvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxRQUFRLEVBQUU7UUFDUixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFO1FBQzFELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUU7UUFDbEQ7WUFDRSxJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsZ0NBQWdDLG1CQUFtQixvQkFBb0I7U0FDakY7UUFDRDtZQUNFLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSwrQkFBK0IsbUJBQW1CLG9CQUFvQjtTQUNoRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUscUVBQXFFO1NBQy9FO0tBQ0Y7SUFDRCxLQUFLLEVBQUU7UUFDTCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFO1FBQ3BELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUU7UUFDOUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRTtRQUMvRCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFO1FBQ2xELEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRTtL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O0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5leHBvcnQgY29uc3QgUEFTU1dPUkRfTUlOX0xFTkdUSCA9IDY7XHJcbmV4cG9ydCBjb25zdCBVU0VSTkFNRV9NSU5fTEVOR1RIID0gMjtcclxuZXhwb3J0IGNvbnN0IFVTRVJOQU1FX01BWF9MRU5HVEggPSAzMDtcclxuXHJcbmV4cG9ydCBjb25zdCBWQUxJREFUSU9OX01FU1NBR0VTID0ge1xyXG4gIHVzZXJuYW1lOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdCZW51dHplcm5hbWUgZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAndW5rbm93bicsIG1lc3NhZ2U6ICdVbmJla2FubnRlciBGZWhsZXInIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtaW5sZW5ndGgnLFxyXG4gICAgICBtZXNzYWdlOiBgQmVudXR6ZXJuYW1lIG11c3MgbWluZGVzdGVucyAke1VTRVJOQU1FX01JTl9MRU5HVEh9IFplaWNoZW4gbGFuZyBzZWluYCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtYXhsZW5ndGgnLFxyXG4gICAgICBtZXNzYWdlOiBgQmVudXR6ZXJuYW1lIGRhcmYgaMO2Y2hzdGVucyAke1VTRVJOQU1FX01BWF9MRU5HVEh9IFplaWNoZW4gbGFuZyBzZWluYCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgbWVzc2FnZTogJ0JlbnV0emVybmFtZSBkYXJmIG51ciBCdWNoc3RhYmVuLCBaYWhsZW4gdW5kIFVudGVyc3RyaWNoZSBlbnRoYWx0ZW4nLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIGVtYWlsOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdFLU1haWwgZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAnZW1haWwnLCBtZXNzYWdlOiAnVW5nw7xsdGlnZSBFLU1haWwnIH0sXHJcbiAgICB7IHR5cGU6ICdhbHJlYWR5SW5Vc2UnLCBtZXNzYWdlOiAnRS1NYWlsIGJlcmVpdHMgaW4gR2VicmF1Y2gnIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICAgIHsgdHlwZTogJ3VuYXV0aGVudGljYXRlZCcsIG1lc3NhZ2U6ICdCZW51dHplcm5hbWUgb2RlciBQYXNzd29ydCBmYWxzY2gnIH0sXHJcbiAgXSxcclxuICBjb25maXJtUGFzc3dvcmQ6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ1Bhc3N3b3J0IGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ21hdGNoaW5nJywgbWVzc2FnZTogJ1Bhc3N3b3J0IHN0aW1tdCBuaWNodCDDvGJlcmVpbicgfSxcclxuICBdLFxyXG4gIHBhc3N3b3JkOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdQYXNzd29ydCBlcmZvcmRlcmxpY2gnIH0sXHJcbiAgICB7IHR5cGU6ICdtaW5sZW5ndGgnLCBtZXNzYWdlOiBgTWluZGVzdGzDpG5nZSAke1BBU1NXT1JEX01JTl9MRU5HVEh9IFplaWNoZW5gIH0sXHJcbiAgICB7IHR5cGU6ICd1bmF1dGhlbnRpY2F0ZWQnLCBtZXNzYWdlOiAnQmVudXR6ZXJuYW1lIG9kZXIgUGFzc3dvcnQgZmFsc2NoJyB9LFxyXG4gIF0sXHJcbiAgbmFtZTogW1xyXG4gICAgeyB0eXBlOiAncmVxdWlyZWQnLCBtZXNzYWdlOiAnTmFtZSBlcmZvcmRlcmxpY2gnIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogJ21pbmxlbmd0aCcsXHJcbiAgICAgIG1lc3NhZ2U6IGBOYW1lIG11c3MgbWluZGVzdGVucyAke1VTRVJOQU1FX01JTl9MRU5HVEh9IFplaWNoZW4gbGFuZyBzZWluYCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtYXhsZW5ndGgnLFxyXG4gICAgICBtZXNzYWdlOiBgTmFtZSBkYXJmIGjDtmNoc3RlbnMgJHtVU0VSTkFNRV9NQVhfTEVOR1RIfSBaZWljaGVuIGxhbmcgc2VpbmAsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiAncGF0dGVybicsXHJcbiAgICAgIG1lc3NhZ2U6ICdOYW1lIGRhcmYgbnVyIEJ1Y2hzdGFiZW4sIFphaGxlbiB1bmQgVW50ZXJzdHJpY2hlIGVudGhhbHRlbicsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgcGhvbmU6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ1RlbGVmb25udW1tZXIgZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAncGF0dGVybicsIG1lc3NhZ2U6ICdVbmfDvGx0aWdlIFRlbGVmb25udW1tZXInIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICBdLFxyXG4gIGRhdGU6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ0RhdHVtIGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ3Vua25vd24nLCBtZXNzYWdlOiAnVW5iZWthbm50ZXIgRmVobGVyJyB9LFxyXG4gIF0sXHJcbiAgemlwQ29kZTogW1xyXG4gICAgeyB0eXBlOiAncmVxdWlyZWQnLCBtZXNzYWdlOiAnUExaIGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ3BhdHRlcm4nLCBtZXNzYWdlOiAnVW5nw7xsdGlnZSBQTFonIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICBdLFxyXG4gIG90aGVyOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdFaW5nYWJlIGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ3Vua25vd24nLCBtZXNzYWdlOiAnVW5iZWthbm50ZXIgRmVobGVyJyB9LFxyXG4gIF0sXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hWYWxpZGF0b3IoXHJcbiAgbWF0Y2hUbzogc3RyaW5nLFxyXG4gIHJldmVyc2U/OiBib29sZWFuXHJcbik6IFZhbGlkYXRvckZuIHtcclxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgIGlmIChjb250cm9sLnBhcmVudCAmJiByZXZlcnNlKSB7XHJcbiAgICAgIGNvbnN0IGMgPSAoY29udHJvbC5wYXJlbnQ/LmNvbnRyb2xzIGFzIGFueSlbbWF0Y2hUb10gYXMgQWJzdHJhY3RDb250cm9sO1xyXG4gICAgICBpZiAoYykge1xyXG4gICAgICAgIGMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhY29udHJvbC5wYXJlbnQgJiZcclxuICAgICAgISFjb250cm9sLnBhcmVudC52YWx1ZSAmJlxyXG4gICAgICBjb250cm9sLnZhbHVlID09PSAoY29udHJvbC5wYXJlbnQ/LmNvbnRyb2xzIGFzIGFueSlbbWF0Y2hUb10udmFsdWVcclxuICAgICAgPyBudWxsXHJcbiAgICAgIDogeyBtYXRjaGluZzogdHJ1ZSB9O1xyXG4gIH07XHJcbn1cclxuIl19
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
export * from './lib/anguland.service';
|
|
5
|
-
export * from './lib/anguland.component';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYW5kL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBhbmd1bGFuZFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2FuZ3VsYW5kLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYW5ndWxhbmQuY29tcG9uZW50JztcbiJdfQ==
|
|
1
|
+
export * from './lib/formError.component';
|
|
2
|
+
export * from './lib/dark-mode-toggle.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYW5kL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm1FcnJvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGFyay1tb2RlLXRvZ2dsZS5jb21wb25lbnQnO1xuIl19
|
package/fesm2022/anguland.mjs
CHANGED
|
@@ -1,42 +1,176 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { input, Component, output } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/forms';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const PASSWORD_MIN_LENGTH = 6;
|
|
7
|
+
const USERNAME_MIN_LENGTH = 2;
|
|
8
|
+
const USERNAME_MAX_LENGTH = 30;
|
|
9
|
+
const VALIDATION_MESSAGES = {
|
|
10
|
+
username: [
|
|
11
|
+
{ type: 'required', message: 'Benutzername erforderlich' },
|
|
12
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
13
|
+
{
|
|
14
|
+
type: 'minlength',
|
|
15
|
+
message: `Benutzername muss mindestens ${USERNAME_MIN_LENGTH} Zeichen lang sein`,
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
type: 'maxlength',
|
|
19
|
+
message: `Benutzername darf höchstens ${USERNAME_MAX_LENGTH} Zeichen lang sein`,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: 'pattern',
|
|
23
|
+
message: 'Benutzername darf nur Buchstaben, Zahlen und Unterstriche enthalten',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
email: [
|
|
27
|
+
{ type: 'required', message: 'E-Mail erforderlich' },
|
|
28
|
+
{ type: 'email', message: 'Ungültige E-Mail' },
|
|
29
|
+
{ type: 'alreadyInUse', message: 'E-Mail bereits in Gebrauch' },
|
|
30
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
31
|
+
{ type: 'unauthenticated', message: 'Benutzername oder Passwort falsch' },
|
|
32
|
+
],
|
|
33
|
+
confirmPassword: [
|
|
34
|
+
{ type: 'required', message: 'Passwort erforderlich' },
|
|
35
|
+
{ type: 'matching', message: 'Passwort stimmt nicht überein' },
|
|
36
|
+
],
|
|
37
|
+
password: [
|
|
38
|
+
{ type: 'required', message: 'Passwort erforderlich' },
|
|
39
|
+
{ type: 'minlength', message: `Mindestlänge ${PASSWORD_MIN_LENGTH} Zeichen` },
|
|
40
|
+
{ type: 'unauthenticated', message: 'Benutzername oder Passwort falsch' },
|
|
41
|
+
],
|
|
42
|
+
name: [
|
|
43
|
+
{ type: 'required', message: 'Name erforderlich' },
|
|
44
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
45
|
+
{
|
|
46
|
+
type: 'minlength',
|
|
47
|
+
message: `Name muss mindestens ${USERNAME_MIN_LENGTH} Zeichen lang sein`,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'maxlength',
|
|
51
|
+
message: `Name darf höchstens ${USERNAME_MAX_LENGTH} Zeichen lang sein`,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'pattern',
|
|
55
|
+
message: 'Name darf nur Buchstaben, Zahlen und Unterstriche enthalten',
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
phone: [
|
|
59
|
+
{ type: 'required', message: 'Telefonnummer erforderlich' },
|
|
60
|
+
{ type: 'pattern', message: 'Ungültige Telefonnummer' },
|
|
61
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
62
|
+
],
|
|
63
|
+
date: [
|
|
64
|
+
{ type: 'required', message: 'Datum erforderlich' },
|
|
65
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
66
|
+
],
|
|
67
|
+
zipCode: [
|
|
68
|
+
{ type: 'required', message: 'PLZ erforderlich' },
|
|
69
|
+
{ type: 'pattern', message: 'Ungültige PLZ' },
|
|
70
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
71
|
+
],
|
|
72
|
+
other: [
|
|
73
|
+
{ type: 'required', message: 'Eingabe erforderlich' },
|
|
74
|
+
{ type: 'unknown', message: 'Unbekannter Fehler' },
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
function matchValidator(matchTo, reverse) {
|
|
78
|
+
return (control) => {
|
|
79
|
+
if (control.parent && reverse) {
|
|
80
|
+
const c = (control.parent?.controls)[matchTo];
|
|
81
|
+
if (c) {
|
|
82
|
+
c.updateValueAndValidity();
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return !!control.parent &&
|
|
87
|
+
!!control.parent.value &&
|
|
88
|
+
control.value === (control.parent?.controls)[matchTo].value
|
|
89
|
+
? null
|
|
90
|
+
: { matching: true };
|
|
91
|
+
};
|
|
8
92
|
}
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandService, decorators: [{
|
|
10
|
-
type: Injectable,
|
|
11
|
-
args: [{
|
|
12
|
-
providedIn: 'root'
|
|
13
|
-
}]
|
|
14
|
-
}], ctorParameters: () => [] });
|
|
15
93
|
|
|
16
|
-
class
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
94
|
+
class FormErrorComponent {
|
|
95
|
+
constructor() {
|
|
96
|
+
this.VALIDATION_MESSAGES = VALIDATION_MESSAGES;
|
|
97
|
+
this.formGroup = input.required({});
|
|
98
|
+
this.controlName = input.required();
|
|
99
|
+
this.validationKey = input.required();
|
|
100
|
+
}
|
|
101
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
|
+
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: `
|
|
103
|
+
@for (validation of VALIDATION_MESSAGES[validationKey()]; track $index) {
|
|
104
|
+
<ng-container>
|
|
105
|
+
@if(formGroup().get(controlName())?.hasError(validation.type) && formGroup().get(controlName())?.touched && !formGroup().get(controlName())?.pristine) {
|
|
106
|
+
<small class="smallError">
|
|
107
|
+
{{ validation.message }}
|
|
108
|
+
</small>
|
|
109
|
+
}
|
|
110
|
+
</ng-container>
|
|
111
|
+
}
|
|
112
|
+
`, isInline: true, styles: [".smallError{color:#f44336;font-size:.7rem}\n"] }); }
|
|
23
113
|
}
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type:
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, decorators: [{
|
|
25
115
|
type: Component,
|
|
26
|
-
args: [{ selector: 'lib-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
116
|
+
args: [{ selector: 'lib-form-error', standalone: true, template: `
|
|
117
|
+
@for (validation of VALIDATION_MESSAGES[validationKey()]; track $index) {
|
|
118
|
+
<ng-container>
|
|
119
|
+
@if(formGroup().get(controlName())?.hasError(validation.type) && formGroup().get(controlName())?.touched && !formGroup().get(controlName())?.pristine) {
|
|
120
|
+
<small class="smallError">
|
|
121
|
+
{{ validation.message }}
|
|
122
|
+
</small>
|
|
123
|
+
}
|
|
124
|
+
</ng-container>
|
|
125
|
+
}
|
|
126
|
+
`, styles: [".smallError{color:#f44336;font-size:.7rem}\n"] }]
|
|
31
127
|
}] });
|
|
32
128
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
129
|
+
class DarkModeToggleComponent {
|
|
130
|
+
constructor() {
|
|
131
|
+
this.isDarkMode = input.required();
|
|
132
|
+
this.darkModeToggled = output();
|
|
133
|
+
}
|
|
134
|
+
toggleDarkMode(e) {
|
|
135
|
+
this.darkModeToggled.emit(e.target.checked);
|
|
136
|
+
}
|
|
137
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DarkModeToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
138
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.0", type: DarkModeToggleComponent, isStandalone: true, selector: "lib-dark-mode-toggle", inputs: { isDarkMode: { classPropertyName: "isDarkMode", publicName: "isDarkMode", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { darkModeToggled: "darkModeToggled" }, ngImport: i0, template: `
|
|
139
|
+
<div class="darkModeToggleButton">
|
|
140
|
+
<input type="checkbox" id="switch" [ngModel]="isDarkMode()" (change)="toggleDarkMode($event)" />
|
|
141
|
+
<div class="switch-btn">
|
|
142
|
+
<label>
|
|
143
|
+
<div class="icons">
|
|
144
|
+
<span><i class="material-icons">light_mode</i></span>
|
|
145
|
+
<span><i class="material-icons">dark_mode</i></span>
|
|
146
|
+
</div>
|
|
147
|
+
</label>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
`, isInline: true, styles: [".darkModeToggleButton{position:relative;--switch-width: 60px;--switch-height: 25px;--label-width: 30px;--switch-radius: 20px}.darkModeToggleButton *{transition:all .75s ease}input[type=checkbox]{outline:none;-webkit-tap-highlight-color:transparent;position:absolute;top:0;left:0;width:var(--switch-width);height:100%;opacity:0;z-index:2;cursor:pointer}.switch-btn{width:var(--switch-width);height:var(--switch-height) + 10px;background-color:#eceef1;border:3px solid #d1d6db;border-radius:var(--switch-radius);position:relative;z-index:1;padding:6px}label{width:var(--label-width);height:var(--switch-height);display:flex;align-items:center;justify-content:center;background:#f8f8f9;border-radius:var(--switch-radius);overflow:hidden;cursor:pointer}.icons{display:flex;align-items:center;gap:20px;transform:translate(-11px,19px) rotate(120deg);-webkit-user-select:none;user-select:none;color:#17193f}input[type=checkbox]:checked~.switch-btn{border:3px solid #2e3052;background-color:#17193f}input[type=checkbox]:checked~.switch-btn label{transform:translate(calc(var(--switch-width) - var(--label-width)));box-shadow:0 3px 5px #0003}input[type=checkbox]:checked~.switch-btn label .icons{transform:translate(-20px)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
152
|
+
}
|
|
153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DarkModeToggleComponent, decorators: [{
|
|
154
|
+
type: Component,
|
|
155
|
+
args: [{ selector: 'lib-dark-mode-toggle', standalone: true, imports: [FormsModule], template: `
|
|
156
|
+
<div class="darkModeToggleButton">
|
|
157
|
+
<input type="checkbox" id="switch" [ngModel]="isDarkMode()" (change)="toggleDarkMode($event)" />
|
|
158
|
+
<div class="switch-btn">
|
|
159
|
+
<label>
|
|
160
|
+
<div class="icons">
|
|
161
|
+
<span><i class="material-icons">light_mode</i></span>
|
|
162
|
+
<span><i class="material-icons">dark_mode</i></span>
|
|
163
|
+
</div>
|
|
164
|
+
</label>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
`, styles: [".darkModeToggleButton{position:relative;--switch-width: 60px;--switch-height: 25px;--label-width: 30px;--switch-radius: 20px}.darkModeToggleButton *{transition:all .75s ease}input[type=checkbox]{outline:none;-webkit-tap-highlight-color:transparent;position:absolute;top:0;left:0;width:var(--switch-width);height:100%;opacity:0;z-index:2;cursor:pointer}.switch-btn{width:var(--switch-width);height:var(--switch-height) + 10px;background-color:#eceef1;border:3px solid #d1d6db;border-radius:var(--switch-radius);position:relative;z-index:1;padding:6px}label{width:var(--label-width);height:var(--switch-height);display:flex;align-items:center;justify-content:center;background:#f8f8f9;border-radius:var(--switch-radius);overflow:hidden;cursor:pointer}.icons{display:flex;align-items:center;gap:20px;transform:translate(-11px,19px) rotate(120deg);-webkit-user-select:none;user-select:none;color:#17193f}input[type=checkbox]:checked~.switch-btn{border:3px solid #2e3052;background-color:#17193f}input[type=checkbox]:checked~.switch-btn label{transform:translate(calc(var(--switch-width) - var(--label-width)));box-shadow:0 3px 5px #0003}input[type=checkbox]:checked~.switch-btn label .icons{transform:translate(-20px)}\n"] }]
|
|
169
|
+
}] });
|
|
36
170
|
|
|
37
171
|
/**
|
|
38
172
|
* Generated bundle index. Do not edit.
|
|
39
173
|
*/
|
|
40
174
|
|
|
41
|
-
export {
|
|
175
|
+
export { DarkModeToggleComponent, FormErrorComponent };
|
|
42
176
|
//# sourceMappingURL=anguland.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anguland.mjs","sources":["../../../projects/anguland/src/lib/anguland.service.ts","../../../projects/anguland/src/lib/anguland.component.ts","../../../projects/anguland/src/public-api.ts","../../../projects/anguland/src/anguland.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AngulandService {\n\n constructor() { }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-anguland',\n standalone: true,\n imports: [],\n template: `\n <p>\n anguland works!\n </p>\n `,\n styles: ``\n})\nexport class AngulandComponent {\n\n}\n","/*\n * Public API Surface of anguland\n */\n\nexport * from './lib/anguland.service';\nexport * from './lib/anguland.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAKa,eAAe,CAAA;AAE1B,IAAA,WAAA,GAAA,GAAiB;8GAFN,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCSY,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAPlB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAX7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACZ,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,EAAE,EACD,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,CAAA;;;ACVH;;AAEG;;ACFH;;AAEG;;;;"}
|
|
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';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'lib-dark-mode-toggle',\n standalone: true,\n imports: [FormsModule],\n template: `\n <div class=\"darkModeToggleButton\">\n <input type=\"checkbox\" id=\"switch\" [ngModel]=\"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; /* Set context for absolute positioning */\n * {\n transition: all 0.75s ease;\n }\n --switch-width: 60px;\n --switch-height: 25px;\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; /* Absolutely position the checkbox */\n top: 0;\n left: 0;\n width: var(--switch-width);\n height: 100%;\n opacity: 0; /* Make it invisible */\n z-index: 2; /* Ensure it sits above the switch-btn */\n cursor: pointer;\n }\n\n .switch-btn {\n width: var(--switch-width);\n height: var(--switch-height) + 10px;\n background-color: #eceef1;\n border: 3px solid #d1d6db;\n border-radius: var(--switch-radius);\n position: relative; /* Ensure it's stacked below the checkbox */\n z-index: 1;\n padding: 6px;\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(120deg);\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 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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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class DarkModeToggleComponent {
|
|
3
|
+
isDarkMode: import("@angular/core").InputSignal<boolean>;
|
|
4
|
+
darkModeToggled: import("@angular/core").OutputEmitterRef<boolean>;
|
|
5
|
+
toggleDarkMode(e: any): void;
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DarkModeToggleComponent, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DarkModeToggleComponent, "lib-dark-mode-toggle", never, { "isDarkMode": { "alias": "isDarkMode"; "required": true; "isSignal": true; }; }, { "darkModeToggled": "darkModeToggled"; }, never, never, true, never>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FormGroup } from '@angular/forms';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class FormErrorComponent {
|
|
4
|
+
VALIDATION_MESSAGES: ValidationMessages;
|
|
5
|
+
formGroup: import("@angular/core").InputSignal<FormGroup<any>>;
|
|
6
|
+
controlName: import("@angular/core").InputSignal<string>;
|
|
7
|
+
validationKey: import("@angular/core").InputSignal<string>;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FormErrorComponent, never>;
|
|
9
|
+
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
|
+
}
|
|
11
|
+
interface ValidationMessages {
|
|
12
|
+
[key: string]: ValidationMessage[];
|
|
13
|
+
}
|
|
14
|
+
interface ValidationMessage {
|
|
15
|
+
type: string;
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ValidatorFn } from '@angular/forms';
|
|
2
|
+
export declare const PASSWORD_MIN_LENGTH = 6;
|
|
3
|
+
export declare const USERNAME_MIN_LENGTH = 2;
|
|
4
|
+
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
|
+
};
|
|
43
|
+
export declare function matchValidator(matchTo: string, reverse?: boolean): ValidatorFn;
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './lib/
|
|
2
|
-
export * from './lib/
|
|
1
|
+
export * from './lib/formError.component';
|
|
2
|
+
export * from './lib/dark-mode-toggle.component';
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class AngulandComponent {
|
|
4
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: AngulandComponent, isStandalone: true, selector: "lib-anguland", ngImport: i0, template: `
|
|
6
|
-
<p>
|
|
7
|
-
anguland works!
|
|
8
|
-
</p>
|
|
9
|
-
`, isInline: true, styles: [""] }); }
|
|
10
|
-
}
|
|
11
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandComponent, decorators: [{
|
|
12
|
-
type: Component,
|
|
13
|
-
args: [{ selector: 'lib-anguland', standalone: true, imports: [], template: `
|
|
14
|
-
<p>
|
|
15
|
-
anguland works!
|
|
16
|
-
</p>
|
|
17
|
-
` }]
|
|
18
|
-
}] });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhbmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhbmQvc3JjL2xpYi9hbmd1bGFuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFhMUMsTUFBTSxPQUFPLGlCQUFpQjs4R0FBakIsaUJBQWlCO2tHQUFqQixpQkFBaUIsd0VBUGxCOzs7O0dBSVQ7OzJGQUdVLGlCQUFpQjtrQkFYN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLEVBQUUsWUFDRDs7OztHQUlUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hbmd1bGFuZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxwPlxuICAgICAgYW5ndWxhbmQgd29ya3MhXG4gICAgPC9wPlxuICBgLFxuICBzdHlsZXM6IGBgXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYW5kQ29tcG9uZW50IHtcblxufVxuIl19
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class AngulandService {
|
|
4
|
-
constructor() { }
|
|
5
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandService, providedIn: 'root' }); }
|
|
7
|
-
}
|
|
8
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandService, decorators: [{
|
|
9
|
-
type: Injectable,
|
|
10
|
-
args: [{
|
|
11
|
-
providedIn: 'root'
|
|
12
|
-
}]
|
|
13
|
-
}], ctorParameters: () => [] });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhbmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYW5kL3NyYy9saWIvYW5ndWxhbmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sZUFBZTtJQUUxQixnQkFBZ0IsQ0FBQzs4R0FGTixlQUFlO2tIQUFmLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhbmRTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxufVxuIl19
|