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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYW5kL3NyYy9saWIvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxRQUFRLEVBQUU7UUFDUixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFO1FBQzFELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUU7UUFDbEQ7WUFDRSxJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsZ0NBQWdDLG1CQUFtQixvQkFBb0I7U0FDakY7UUFDRDtZQUNFLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSwrQkFBK0IsbUJBQW1CLG9CQUFvQjtTQUNoRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUscUVBQXFFO1NBQy9FO0tBQ0Y7SUFDRCxLQUFLLEVBQUU7UUFDTCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFO1FBQ3BELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUU7UUFDOUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRTtRQUMvRCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFO1FBQ2xELEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRTtLQUMxRTtJQUNELGVBQWUsRUFBRTtRQUNmLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUU7UUFDdEQsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRTtLQUMvRDtJQUNELFFBQVEsRUFBRTtRQUNSLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUU7UUFDdEQsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsbUJBQW1CLFVBQVUsRUFBRTtRQUM3RSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUU7S0FDMUU7SUFDRCxJQUFJLEVBQUU7UUFDSixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO1FBQ2xELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUU7UUFDbEQ7WUFDRSxJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsd0JBQXdCLG1CQUFtQixvQkFBb0I7U0FDekU7UUFDRDtZQUNFLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSx1QkFBdUIsbUJBQW1CLG9CQUFvQjtTQUN4RTtRQUNEO1lBQ0UsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsNkRBQTZEO1NBQ3ZFO0tBQ0Y7SUFDRCxLQUFLLEVBQUU7UUFDTCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFO1FBQzNELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUU7UUFDdkQsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRTtLQUNuRDtJQUNELElBQUksRUFBRTtRQUNKLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUU7UUFDbkQsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRTtLQUNuRDtJQUNELE9BQU8sRUFBRTtRQUNQLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUU7UUFDakQsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUU7UUFDN0MsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRTtLQUNuRDtJQUNELEtBQUssRUFBRTtRQUNMLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUU7UUFDckQsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRTtLQUNuRDtDQUNGLENBQUM7QUFFRixNQUFNLFVBQVUsY0FBYyxDQUM1QixPQUFlLEVBQ2YsT0FBaUI7SUFFakIsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7UUFDM0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFnQixDQUFBLENBQUMsT0FBTyxDQUFvQixDQUFDO1lBQ3hFLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDN0IsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDdEIsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBZ0IsQ0FBQSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUs7WUFDbEUsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5leHBvcnQgY29uc3QgUEFTU1dPUkRfTUlOX0xFTkdUSCA9IDY7XHJcbmV4cG9ydCBjb25zdCBVU0VSTkFNRV9NSU5fTEVOR1RIID0gMjtcclxuZXhwb3J0IGNvbnN0IFVTRVJOQU1FX01BWF9MRU5HVEggPSAzMDtcclxuXHJcbmV4cG9ydCBjb25zdCBWQUxJREFUSU9OX01FU1NBR0VTID0ge1xyXG4gIHVzZXJuYW1lOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdCZW51dHplcm5hbWUgZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAndW5rbm93bicsIG1lc3NhZ2U6ICdVbmJla2FubnRlciBGZWhsZXInIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtaW5sZW5ndGgnLFxyXG4gICAgICBtZXNzYWdlOiBgQmVudXR6ZXJuYW1lIG11c3MgbWluZGVzdGVucyAke1VTRVJOQU1FX01JTl9MRU5HVEh9IFplaWNoZW4gbGFuZyBzZWluYCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtYXhsZW5ndGgnLFxyXG4gICAgICBtZXNzYWdlOiBgQmVudXR6ZXJuYW1lIGRhcmYgaMO2Y2hzdGVucyAke1VTRVJOQU1FX01BWF9MRU5HVEh9IFplaWNoZW4gbGFuZyBzZWluYCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgbWVzc2FnZTogJ0JlbnV0emVybmFtZSBkYXJmIG51ciBCdWNoc3RhYmVuLCBaYWhsZW4gdW5kIFVudGVyc3RyaWNoZSBlbnRoYWx0ZW4nLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIGVtYWlsOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdFLU1haWwgZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAnZW1haWwnLCBtZXNzYWdlOiAnVW5nw7xsdGlnZSBFLU1haWwnIH0sXHJcbiAgICB7IHR5cGU6ICdhbHJlYWR5SW5Vc2UnLCBtZXNzYWdlOiAnRS1NYWlsIGJlcmVpdHMgaW4gR2VicmF1Y2gnIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICAgIHsgdHlwZTogJ3VuYXV0aGVudGljYXRlZCcsIG1lc3NhZ2U6ICdCZW51dHplcm5hbWUgb2RlciBQYXNzd29ydCBmYWxzY2gnIH0sXHJcbiAgXSxcclxuICBjb25maXJtUGFzc3dvcmQ6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ1Bhc3N3b3J0IGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ21hdGNoaW5nJywgbWVzc2FnZTogJ1Bhc3N3b3J0IHN0aW1tdCBuaWNodCDDvGJlcmVpbicgfSxcclxuICBdLFxyXG4gIHBhc3N3b3JkOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdQYXNzd29ydCBlcmZvcmRlcmxpY2gnIH0sXHJcbiAgICB7IHR5cGU6ICdtaW5sZW5ndGgnLCBtZXNzYWdlOiBgTWluZGVzdGzDpG5nZSAke1BBU1NXT1JEX01JTl9MRU5HVEh9IFplaWNoZW5gIH0sXHJcbiAgICB7IHR5cGU6ICd1bmF1dGhlbnRpY2F0ZWQnLCBtZXNzYWdlOiAnQmVudXR6ZXJuYW1lIG9kZXIgUGFzc3dvcnQgZmFsc2NoJyB9LFxyXG4gIF0sXHJcbiAgbmFtZTogW1xyXG4gICAgeyB0eXBlOiAncmVxdWlyZWQnLCBtZXNzYWdlOiAnTmFtZSBlcmZvcmRlcmxpY2gnIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogJ21pbmxlbmd0aCcsXHJcbiAgICAgIG1lc3NhZ2U6IGBOYW1lIG11c3MgbWluZGVzdGVucyAke1VTRVJOQU1FX01JTl9MRU5HVEh9IFplaWNoZW4gbGFuZyBzZWluYCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtYXhsZW5ndGgnLFxyXG4gICAgICBtZXNzYWdlOiBgTmFtZSBkYXJmIGjDtmNoc3RlbnMgJHtVU0VSTkFNRV9NQVhfTEVOR1RIfSBaZWljaGVuIGxhbmcgc2VpbmAsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiAncGF0dGVybicsXHJcbiAgICAgIG1lc3NhZ2U6ICdOYW1lIGRhcmYgbnVyIEJ1Y2hzdGFiZW4sIFphaGxlbiB1bmQgVW50ZXJzdHJpY2hlIGVudGhhbHRlbicsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgcGhvbmU6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ1RlbGVmb25udW1tZXIgZXJmb3JkZXJsaWNoJyB9LFxyXG4gICAgeyB0eXBlOiAncGF0dGVybicsIG1lc3NhZ2U6ICdVbmfDvGx0aWdlIFRlbGVmb25udW1tZXInIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICBdLFxyXG4gIGRhdGU6IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ0RhdHVtIGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ3Vua25vd24nLCBtZXNzYWdlOiAnVW5iZWthbm50ZXIgRmVobGVyJyB9LFxyXG4gIF0sXHJcbiAgemlwQ29kZTogW1xyXG4gICAgeyB0eXBlOiAncmVxdWlyZWQnLCBtZXNzYWdlOiAnUExaIGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ3BhdHRlcm4nLCBtZXNzYWdlOiAnVW5nw7xsdGlnZSBQTFonIH0sXHJcbiAgICB7IHR5cGU6ICd1bmtub3duJywgbWVzc2FnZTogJ1VuYmVrYW5udGVyIEZlaGxlcicgfSxcclxuICBdLFxyXG4gIG90aGVyOiBbXHJcbiAgICB7IHR5cGU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6ICdFaW5nYWJlIGVyZm9yZGVybGljaCcgfSxcclxuICAgIHsgdHlwZTogJ3Vua25vd24nLCBtZXNzYWdlOiAnVW5iZWthbm50ZXIgRmVobGVyJyB9LFxyXG4gIF0sXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hWYWxpZGF0b3IoXHJcbiAgbWF0Y2hUbzogc3RyaW5nLFxyXG4gIHJldmVyc2U/OiBib29sZWFuXHJcbik6IFZhbGlkYXRvckZuIHtcclxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgIGlmIChjb250cm9sLnBhcmVudCAmJiByZXZlcnNlKSB7XHJcbiAgICAgIGNvbnN0IGMgPSAoY29udHJvbC5wYXJlbnQ/LmNvbnRyb2xzIGFzIGFueSlbbWF0Y2hUb10gYXMgQWJzdHJhY3RDb250cm9sO1xyXG4gICAgICBpZiAoYykge1xyXG4gICAgICAgIGMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhY29udHJvbC5wYXJlbnQgJiZcclxuICAgICAgISFjb250cm9sLnBhcmVudC52YWx1ZSAmJlxyXG4gICAgICBjb250cm9sLnZhbHVlID09PSAoY29udHJvbC5wYXJlbnQ/LmNvbnRyb2xzIGFzIGFueSlbbWF0Y2hUb10udmFsdWVcclxuICAgICAgPyBudWxsXHJcbiAgICAgIDogeyBtYXRjaGluZzogdHJ1ZSB9O1xyXG4gIH07XHJcbn1cclxuIl19
@@ -1,6 +1,3 @@
1
- /*
2
- * Public API Surface of anguland
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
@@ -1,42 +1,176 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component } from '@angular/core';
2
+ import { input, Component, output } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
4
+ import { FormsModule } from '@angular/forms';
3
5
 
4
- class AngulandService {
5
- constructor() { }
6
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandService, providedIn: 'root' }); }
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 AngulandComponent {
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AngulandComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: AngulandComponent, isStandalone: true, selector: "lib-anguland", ngImport: i0, template: `
19
- <p>
20
- anguland works!
21
- </p>
22
- `, isInline: true, styles: [""] }); }
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: AngulandComponent, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormErrorComponent, decorators: [{
25
115
  type: Component,
26
- args: [{ selector: 'lib-anguland', standalone: true, imports: [], template: `
27
- <p>
28
- anguland works!
29
- </p>
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
- * Public API Surface of anguland
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 { AngulandComponent, AngulandService };
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anguland",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.0",
6
6
  "@angular/core": "^18.0.0"
package/public-api.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './lib/anguland.service';
2
- export * from './lib/anguland.component';
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
@@ -1,5 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class AngulandComponent {
3
- static ɵfac: i0.ɵɵFactoryDeclaration<AngulandComponent, never>;
4
- static ɵcmp: i0.ɵɵComponentDeclaration<AngulandComponent, "lib-anguland", never, {}, {}, never, never, true, never>;
5
- }
@@ -1,6 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class AngulandService {
3
- constructor();
4
- static ɵfac: i0.ɵɵFactoryDeclaration<AngulandService, never>;
5
- static ɵprov: i0.ɵɵInjectableDeclaration<AngulandService>;
6
- }