@patter/ngx-components 0.0.1 → 0.5.1

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/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # NgxComponents
2
-
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.1.0.
4
-
5
- ## Code scaffolding
6
-
7
- Run `ng generate component component-name --project ngx-components` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-components`.
8
- > Note: Don't forget to add `--project ngx-components` or else it will be added to the default project in your `angular.json` file.
9
-
10
- ## Build
11
-
12
- Run `ng build ngx-components` to build the project. The build artifacts will be stored in the `dist/` directory.
13
-
14
- ## Publishing
15
-
16
- After building your library with `ng build ngx-components`, go to the dist folder `cd dist/ngx-components` and run `npm publish`.
17
-
18
- ## Running unit tests
19
-
20
- Run `ng test ngx-components` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
-
22
- ## Further help
23
-
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
1
+ # NgxComponents
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.1.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project ngx-components` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-components`.
8
+ > Note: Don't forget to add `--project ngx-components` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build ngx-components` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build ngx-components`, go to the dist folder `cd dist/ngx-components` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test ngx-components` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -0,0 +1,87 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from '@angular/core';
3
+ import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ export class PtrFormComponent {
8
+ config;
9
+ loading = false;
10
+ formChanges = new EventEmitter();
11
+ formSubmit = new EventEmitter();
12
+ form;
13
+ processedFields = [];
14
+ fb = inject(FormBuilder);
15
+ cdr = inject(ChangeDetectorRef);
16
+ ngOnInit() {
17
+ this.form = this.fb.group({});
18
+ this.processedFields = this.config.fields.map(field => this.processField(field));
19
+ this.processedFields.forEach(field => {
20
+ if (field.type === 'select') {
21
+ if (field.simpleOptions) {
22
+ this.form.addControl(field.id, this.fb.control(field.value ?? field.simpleOptions[0].value ?? null, field.required ? Validators.required : null));
23
+ }
24
+ else if (field.groupedOptions) {
25
+ this.form.addControl(field.id, this.fb.control(field.value || field.groupedOptions[0].options[0].value, field.required ? Validators.required : null));
26
+ }
27
+ else {
28
+ this.form.addControl(field.id, this.fb.control(field.value || '', field.required ? Validators.required : null));
29
+ }
30
+ }
31
+ else {
32
+ this.form.addControl(field.id, this.fb.control(field.value || '', field.required ? Validators.required : null));
33
+ }
34
+ });
35
+ this.form.valueChanges.subscribe(values => {
36
+ this.formChanges.emit(values);
37
+ });
38
+ }
39
+ processField(field) {
40
+ const classes = ['gfield'];
41
+ if (field.size)
42
+ classes.push(`gfield--width-${field.size}`);
43
+ if (field.type === 'hidden')
44
+ classes.push('gform_hidden');
45
+ if (field.class)
46
+ classes.push(field.class);
47
+ return {
48
+ ...field,
49
+ class: classes.join(' ')
50
+ };
51
+ }
52
+ onSubmit() {
53
+ if (this.form.valid) {
54
+ this.formSubmit.emit(this.form.value);
55
+ }
56
+ else {
57
+ console.log('Form is invalid');
58
+ }
59
+ }
60
+ resetForm() {
61
+ if (this.form) {
62
+ this.form.reset();
63
+ this.config.fields.forEach(field => {
64
+ this.form.get(field.id)?.setValue(field.value || null);
65
+ });
66
+ this.cdr.markForCheck();
67
+ }
68
+ }
69
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
70
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: PtrFormComponent, isStandalone: true, selector: "ptr-form", inputs: { config: "config", loading: "loading" }, outputs: { formChanges: "formChanges", formSubmit: "formSubmit" }, ngImport: i0, template: "<div [class]=\"'gform_wrapper ' + (config.formClass || 'small-section')\">\r\n <div *ngIf=\"config.title\" class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"gform_fields\">\r\n\r\n <ng-container *ngFor=\"let field of processedFields\">\r\n\r\n <div [class]=\"field.class\">\r\n <label *ngIf=\"field.type !== 'hidden'\" [for]=\"field.id\" class=\"gfield_label gform-field-label\">\r\n {{ field.name }}\r\n </label>\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <textarea *ngSwitchCase=\"'textarea'\" [id]=\"field.id\" [formControlName]=\"field.id\"></textarea>\r\n\r\n <select *ngSwitchCase=\"'select'\" [id]=\"field.id\" [formControlName]=\"field.id\">\r\n <ng-container *ngIf=\"field.simpleOptions\">\r\n <option *ngFor=\"let option of field.simpleOptions\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </ng-container>\r\n <ng-container *ngIf=\"field.groupedOptions\">\r\n <optgroup *ngFor=\"let group of field.groupedOptions\" [label]=\"group.label\">\r\n <option *ngFor=\"let option of group.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </optgroup>\r\n </ng-container>\r\n </select>\r\n\r\n <input *ngSwitchDefault [type]=\"field.type\" [id]=\"field.id\" [formControlName]=\"field.id\"\r\n [attr.maxlength]=\"field.maxlength\">\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n <div class=\"gform_footer\">\r\n <button type=\"submit\" [name]=\"config.submitName\"\r\n [disabled]=\"loading || !form.valid\">{{config.submitValue}}</button>\r\n </div>\r\n </form>\r\n\r\n <ng-content></ng-content>\r\n\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrFormComponent, decorators: [{
73
+ type: Component,
74
+ args: [{ selector: 'ptr-form', standalone: true, imports: [
75
+ CommonModule,
76
+ ReactiveFormsModule
77
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'gform_wrapper ' + (config.formClass || 'small-section')\">\r\n <div *ngIf=\"config.title\" class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"gform_fields\">\r\n\r\n <ng-container *ngFor=\"let field of processedFields\">\r\n\r\n <div [class]=\"field.class\">\r\n <label *ngIf=\"field.type !== 'hidden'\" [for]=\"field.id\" class=\"gfield_label gform-field-label\">\r\n {{ field.name }}\r\n </label>\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <textarea *ngSwitchCase=\"'textarea'\" [id]=\"field.id\" [formControlName]=\"field.id\"></textarea>\r\n\r\n <select *ngSwitchCase=\"'select'\" [id]=\"field.id\" [formControlName]=\"field.id\">\r\n <ng-container *ngIf=\"field.simpleOptions\">\r\n <option *ngFor=\"let option of field.simpleOptions\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </ng-container>\r\n <ng-container *ngIf=\"field.groupedOptions\">\r\n <optgroup *ngFor=\"let group of field.groupedOptions\" [label]=\"group.label\">\r\n <option *ngFor=\"let option of group.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </optgroup>\r\n </ng-container>\r\n </select>\r\n\r\n <input *ngSwitchDefault [type]=\"field.type\" [id]=\"field.id\" [formControlName]=\"field.id\"\r\n [attr.maxlength]=\"field.maxlength\">\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n <div class=\"gform_footer\">\r\n <button type=\"submit\" [name]=\"config.submitName\"\r\n [disabled]=\"loading || !form.valid\">{{config.submitValue}}</button>\r\n </div>\r\n </form>\r\n\r\n <ng-content></ng-content>\r\n\r\n</div>" }]
78
+ }], propDecorators: { config: [{
79
+ type: Input
80
+ }], loading: [{
81
+ type: Input
82
+ }], formChanges: [{
83
+ type: Output
84
+ }], formSubmit: [{
85
+ type: Output
86
+ }] } });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQW1CLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWExRyxNQUFNLE9BQU8sZ0JBQWdCO0lBRWxCLE1BQU0sQ0FBaUI7SUFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVmLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztJQUN2RCxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7SUFFaEUsSUFBSSxDQUFhO0lBQ2pCLGVBQWUsR0FBeUIsRUFBRSxDQUFDO0lBRTNDLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhDLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxD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S0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO3VHQWhFVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQix5TENmN0IsbWhFQW1ETSwyQ0QxQ0YsWUFBWSwyZ0JBQ1osbUJBQW1COzsyRkFLVixnQkFBZ0I7a0JBVjVCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjtxQkFDcEIsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUHRyRm9ybUNvbmZpZywgUHRyRm9ybUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3B0ci1mb3JtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyRm9ybUNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFB0ckZvcm1Db25maWc7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgZm9ybUNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEFic3RyYWN0Q29udHJvbDxhbnk+PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxBYnN0cmFjdENvbnRyb2w8YW55Pj4oKTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICBwcm9jZXNzZWRGaWVsZHM6IFB0ckZvcm1GaWVsZENvbmZpZ1tdID0gW107XHJcblxyXG4gIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcclxuICBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgdGhpcy5wcm9jZXNzZWRGaWVsZHMgPSB0aGlzLmNvbmZpZy5maWVsZHMubWFwKGZpZWxkID0+IHRoaXMucHJvY2Vzc0ZpZWxkKGZpZWxkKSk7XHJcbiAgICB0aGlzLnByb2Nlc3NlZEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLnNpbXBsZU9wdGlvbnMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLmlkLCB0aGlzLmZiLmNvbnRyb2woZmllbGQudmFsdWUgPz8gZmllbGQuc2ltcGxlT3B0aW9ucyFbMF0udmFsdWUgPz8gbnVsbCwgZmllbGQucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQuZ3JvdXBlZE9wdGlvbnMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLmlkLCB0aGlzLmZiLmNvbnRyb2woZmllbGQudmFsdWUgfHwgZmllbGQuZ3JvdXBlZE9wdGlvbnNbMF0ub3B0aW9uc1swXS52YWx1ZSwgZmllbGQucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChmaWVsZC5pZCwgdGhpcy5mYi5jb250cm9sKGZpZWxkLnZhbHVlIHx8ICcnLCBmaWVsZC5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLmlkLCB0aGlzLmZiLmNvbnRyb2woZmllbGQudmFsdWUgfHwgJycsIGZpZWxkLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWVzID0+IHtcclxuICAgICAgdGhpcy5mb3JtQ2hhbmdlcy5lbWl0KHZhbHVlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc0ZpZWxkKGZpZWxkOiBQdHJGb3JtRmllbGRDb25maWcpOiBQdHJGb3JtRmllbGRDb25maWcge1xyXG4gICAgY29uc3QgY2xhc3NlcyA9IFsnZ2ZpZWxkJ107XHJcbiAgICBpZiAoZmllbGQuc2l6ZSkgY2xhc3Nlcy5wdXNoKGBnZmllbGQtLXdpZHRoLSR7ZmllbGQuc2l6ZX1gKTtcclxuICAgIGlmIChmaWVsZC50eXBlID09PSAnaGlkZGVuJykgY2xhc3Nlcy5wdXNoKCdnZm9ybV9oaWRkZW4nKTtcclxuICAgIGlmIChmaWVsZC5jbGFzcykgY2xhc3Nlcy5wdXNoKGZpZWxkLmNsYXNzKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5maWVsZCxcclxuICAgICAgY2xhc3M6IGNsYXNzZXMuam9pbignICcpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnRm9ybSBpcyBpbnZhbGlkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldEZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICB0aGlzLmNvbmZpZy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldChmaWVsZC5pZCk/LnNldFZhbHVlKGZpZWxkLnZhbHVlIHx8IG51bGwpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IFtjbGFzc109XCInZ2Zvcm1fd3JhcHBlciAnICsgKGNvbmZpZy5mb3JtQ2xhc3MgfHwgJ3NtYWxsLXNlY3Rpb24nKVwiPlxyXG4gIDxkaXYgKm5nSWY9XCJjb25maWcudGl0bGVcIiBjbGFzcz1cImdmb3JtX2hlYWRpbmdcIj5cclxuICAgIDxoMiBjbGFzcz1cImdmb3JtX3RpdGxlXCI+e3sgY29uZmlnLnRpdGxlIH19PC9oMj5cclxuICA8L2Rpdj5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImdmb3JtX2ZpZWxkc1wiPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgcHJvY2Vzc2VkRmllbGRzXCI+XHJcblxyXG4gICAgICAgIDxkaXYgW2NsYXNzXT1cImZpZWxkLmNsYXNzXCI+XHJcbiAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJmaWVsZC50eXBlICE9PSAnaGlkZGVuJ1wiIFtmb3JdPVwiZmllbGQuaWRcIiBjbGFzcz1cImdmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICB7eyBmaWVsZC5uYW1lIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkLnR5cGVcIj5cclxuXHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiIFtpZF09XCJmaWVsZC5pZFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuaWRcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICAgICAgPHNlbGVjdCAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIiBbaWRdPVwiZmllbGQuaWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmlkXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLnNpbXBsZU9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWVsZC5zaW1wbGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5ncm91cGVkT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGdyb3VwICpuZ0Zvcj1cImxldCBncm91cCBvZiBmaWVsZC5ncm91cGVkT3B0aW9uc1wiIFtsYWJlbF09XCJncm91cC5sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ3JvdXAub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hEZWZhdWx0IFt0eXBlXT1cImZpZWxkLnR5cGVcIiBbaWRdPVwiZmllbGQuaWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmlkXCJcclxuICAgICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiZmllbGQubWF4bGVuZ3RoXCI+XHJcblxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2Zvcm1fZm9vdGVyXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtuYW1lXT1cImNvbmZpZy5zdWJtaXROYW1lXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCAhZm9ybS52YWxpZFwiPnt7Y29uZmlnLnN1Ym1pdFZhbHVlfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuXHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG5cclxuPC9kaXY+Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUHRyRm9ybUZpZWxkT3B0aW9uIHtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHRyRm9ybUZpZWxkT3B0aW9uR3JvdXAge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgb3B0aW9uczogUHRyRm9ybUZpZWxkT3B0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHRyRm9ybUZpZWxkQ29uZmlnIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIHR5cGU6ICd0ZXh0JyB8ICd0ZXh0YXJlYScgfCAnc2VsZWN0JyB8ICdkYXRlJyB8ICdoaWRkZW4nO1xyXG4gIHNpbXBsZU9wdGlvbnM/OiBQdHJGb3JtRmllbGRPcHRpb25bXTtcclxuICBncm91cGVkT3B0aW9ucz86IFB0ckZvcm1GaWVsZE9wdGlvbkdyb3VwW107XHJcbiAgc2l6ZT86ICdmdWxsJyB8ICdoYWxmJyB8ICd0aGlyZCc7XHJcbiAgdmFsdWU/OiBzdHJpbmc7XHJcbiAgY2xhc3M/OiBzdHJpbmc7XHJcbiAgbWF4bGVuZ3RoPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFB0ckZvcm1Db25maWcge1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIGZpZWxkczogUHRyRm9ybUZpZWxkQ29uZmlnW107XHJcbiAgc3VibWl0TmFtZTogc3RyaW5nO1xyXG4gIHN1Ym1pdFZhbHVlOiBzdHJpbmc7XHJcbiAgZm9ybUNsYXNzPzogc3RyaW5nO1xyXG59Il19
@@ -1,11 +1,18 @@
1
- import { Component } from '@angular/core';
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
3
+ import { RouterModule } from '@angular/router';
2
4
  import * as i0 from "@angular/core";
3
- export class MenuComponent {
4
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: MenuComponent, isStandalone: true, selector: "ptr-menu", ngImport: i0, template: "<p>menu works!</p>\n", styles: [""] });
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/router";
7
+ export class PtrMenuComponent {
8
+ menuItems = [];
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: PtrMenuComponent, isStandalone: true, selector: "ptr-menu", inputs: { menuItems: "menuItems" }, ngImport: i0, template: "<nav class=\"ptr-menu\">\r\n <ul class=\"menu\">\r\n <li class=\"menu-item\" *ngFor=\"let item of menuItems\" routerLinkActive=\"current_page_item\"\r\n [routerLinkActiveOptions]=\"{exact: true}\">\r\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\r\n </li>\r\n </ul>\r\n</nav>\r\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6
11
  }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MenuComponent, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrMenuComponent, decorators: [{
8
13
  type: Component,
9
- args: [{ selector: 'ptr-menu', standalone: true, imports: [], template: "<p>menu works!</p>\n" }]
10
- }] });
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUzFDLE1BQU0sT0FBTyxhQUFhO3VHQUFiLGFBQWE7MkZBQWIsYUFBYSxvRUNUMUIsc0JBQ0E7OzJGRFFhLGFBQWE7a0JBUHpCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUCxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B0ci1tZW51JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21lbnUuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCB7XG5cbn1cbiIsIjxwPm1lbnUgd29ya3MhPC9wPlxuIl19
14
+ args: [{ selector: 'ptr-menu', standalone: true, imports: [CommonModule, RouterModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav class=\"ptr-menu\">\r\n <ul class=\"menu\">\r\n <li class=\"menu-item\" *ngFor=\"let item of menuItems\" routerLinkActive=\"current_page_item\"\r\n [routerLinkActiveOptions]=\"{exact: true}\">\r\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\r\n </li>\r\n </ul>\r\n</nav>\r\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"] }]
15
+ }], propDecorators: { menuItems: [{
16
+ type: Input
17
+ }] } });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFnQi9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFFbEIsU0FBUyxHQUFrQixFQUFFLENBQUM7dUdBRjVCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLHdHQ2xCN0IsdVRBUUEsb2xEREtZLFlBQVksMkpBQUUsWUFBWTs7MkZBS3pCLGdCQUFnQjtrQkFSNUIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxtQkFFcEIsdUJBQXVCLENBQUMsTUFBTTs4QkFLdEMsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFB0ck1lbnVJdGVtIHtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIGxpbms/OiBzdHJpbmc7XHJcbiAgY2hpbGRyZW4/OiBQdHJNZW51SXRlbVtdO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3B0ci1tZW51JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyTWVudUNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIG1lbnVJdGVtczogUHRyTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxufVxyXG4iLCI8bmF2IGNsYXNzPVwicHRyLW1lbnVcIj5cclxuICA8dWwgY2xhc3M9XCJtZW51XCI+XHJcbiAgICA8bGkgY2xhc3M9XCJtZW51LWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtZW51SXRlbXNcIiByb3V0ZXJMaW5rQWN0aXZlPVwiY3VycmVudF9wYWdlX2l0ZW1cIlxyXG4gICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OiB0cnVlfVwiPlxyXG4gICAgICA8YSBbcm91dGVyTGlua109XCJpdGVtLmxpbmsgfHwgJyMnXCI+e3tpdGVtLmxhYmVsfX08L2E+XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcbjwvbmF2PlxyXG4iXX0=
@@ -0,0 +1,42 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
+ import { ActivatedRoute, NavigationEnd, Router, TitleStrategy } from '@angular/router';
4
+ import { filter, map } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class PtrTitleComponent {
8
+ router = inject(Router);
9
+ activatedRoute = inject(ActivatedRoute);
10
+ titleStrategy = inject(TitleStrategy);
11
+ title$;
12
+ hideTitle$;
13
+ ngOnInit() {
14
+ const routeEvents$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd), map(() => this.getRoute(this.activatedRoute)));
15
+ this.hideTitle$ = routeEvents$.pipe(map(route => !!route.snapshot.data['hideTitle']));
16
+ this.title$ = routeEvents$.pipe(map(route => {
17
+ if (route.snapshot.data['hideTitle']) {
18
+ return '';
19
+ }
20
+ return this.titleStrategy.getResolvedTitleForRoute(route.snapshot) || '';
21
+ }));
22
+ }
23
+ getRoute(route) {
24
+ while (route.firstChild) {
25
+ route = route.firstChild;
26
+ }
27
+ return route;
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: PtrTitleComponent, isStandalone: true, selector: "ptr-title", ngImport: i0, template: '<header class="entry-header is-layout-constrained my-3" *ngIf="!(hideTitle$ | async)"><h1 class="entry-title">{{ title$ | async }}</h1></header>', isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrTitleComponent, decorators: [{
33
+ type: Component,
34
+ args: [{
35
+ selector: 'ptr-title',
36
+ standalone: true,
37
+ imports: [CommonModule],
38
+ template: '<header class="entry-header is-layout-constrained my-3" *ngIf="!(hideTitle$ | async)"><h1 class="entry-title">{{ title$ | async }}</h1></header>',
39
+ changeDetection: ChangeDetectionStrategy.OnPush
40
+ }]
41
+ }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLXRpdGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL3B0ci10aXRsZS9wdHItdGl0bGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVuRixPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7OztBQVMvQyxNQUFNLE9BQU8saUJBQWlCO0lBRXBCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sQ0FBc0I7SUFDNUIsVUFBVSxDQUF1QjtJQUVqQyxRQUFRO1FBQ04sTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMxQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQTBCLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLEVBQ3pFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUM5QyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDakQsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FDN0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUosQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFxQjtRQUNwQyxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3VHQW5DVSxpQkFBaUI7MkZBQWpCLGlCQUFpQixxRUFIbEIsa0pBQWtKLDJEQURsSixZQUFZOzsyRkFJWCxpQkFBaUI7a0JBUDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFFBQVEsRUFBRSxrSkFBa0o7b0JBQzVKLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFRpdGxlU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwdHItdGl0bGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGU6ICc8aGVhZGVyIGNsYXNzPVwiZW50cnktaGVhZGVyIGlzLWxheW91dC1jb25zdHJhaW5lZCBteS0zXCIgKm5nSWY9XCIhKGhpZGVUaXRsZSQgfCBhc3luYylcIj48aDEgY2xhc3M9XCJlbnRyeS10aXRsZVwiPnt7IHRpdGxlJCB8IGFzeW5jIH19PC9oMT48L2hlYWRlcj4nLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdHJUaXRsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgcHJpdmF0ZSB0aXRsZVN0cmF0ZWd5ID0gaW5qZWN0KFRpdGxlU3RyYXRlZ3kpO1xyXG5cclxuICB0aXRsZSQhOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgaGlkZVRpdGxlJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3Qgcm91dGVFdmVudHMkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXHJcbiAgICAgIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXHJcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmdldFJvdXRlKHRoaXMuYWN0aXZhdGVkUm91dGUpKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmhpZGVUaXRsZSQgPSByb3V0ZUV2ZW50cyQucGlwZShcclxuICAgICAgbWFwKHJvdXRlID0+ICEhcm91dGUuc25hcHNob3QuZGF0YVsnaGlkZVRpdGxlJ10pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudGl0bGUkID0gcm91dGVFdmVudHMkLnBpcGUoXHJcbiAgICAgIG1hcChyb3V0ZSA9PiB7XHJcbiAgICAgICAgaWYgKHJvdXRlLnNuYXBzaG90LmRhdGFbJ2hpZGVUaXRsZSddKSB7XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRpdGxlU3RyYXRlZ3kuZ2V0UmVzb2x2ZWRUaXRsZUZvclJvdXRlKHJvdXRlLnNuYXBzaG90KSB8fCAnJztcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSb3V0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBBY3RpdmF0ZWRSb3V0ZSB7XHJcbiAgICB3aGlsZSAocm91dGUuZmlyc3RDaGlsZCkge1xyXG4gICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm91dGU7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -2,4 +2,8 @@
2
2
  * Public API Surface of ngx-components
3
3
  */
4
4
  export * from './lib/menu/menu.component';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1jb21wb25lbnRzXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVudS9tZW51LmNvbXBvbmVudCc7XG4iXX0=
5
+ export * from './lib/forms/interfaces';
6
+ export { PtrFormComponent } from './lib/forms/form/form.component';
7
+ export { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';
8
+ // export { PtrTitleStrategy } from './lib/ptr-title/ptr-title-strategy';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSx5RUFBeUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LWNvbXBvbmVudHNcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZW51L21lbnUuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm1zL2ludGVyZmFjZXMnO1xyXG5leHBvcnQgeyBQdHJGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvZm9ybXMvZm9ybS9mb3JtLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgeyBQdHJUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4vbGliL3B0ci10aXRsZS9wdHItdGl0bGUuY29tcG9uZW50JztcclxuLy8gZXhwb3J0IHsgUHRyVGl0bGVTdHJhdGVneSB9IGZyb20gJy4vbGliL3B0ci10aXRsZS9wdHItdGl0bGUtc3RyYXRlZ3knOyJdfQ==
@@ -1,22 +1,150 @@
1
+ import * as i1 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
1
3
  import * as i0 from '@angular/core';
2
- import { Component } from '@angular/core';
4
+ import { Component, ChangeDetectionStrategy, Input, EventEmitter, inject, ChangeDetectorRef, Output } from '@angular/core';
5
+ import * as i2 from '@angular/router';
6
+ import { RouterModule, Router, ActivatedRoute, TitleStrategy, NavigationEnd } from '@angular/router';
7
+ import * as i2$1 from '@angular/forms';
8
+ import { FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
9
+ import { filter, map } from 'rxjs';
3
10
 
4
- class MenuComponent {
5
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: MenuComponent, isStandalone: true, selector: "ptr-menu", ngImport: i0, template: "<p>menu works!</p>\n", styles: [""] });
11
+ class PtrMenuComponent {
12
+ menuItems = [];
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: PtrMenuComponent, isStandalone: true, selector: "ptr-menu", inputs: { menuItems: "menuItems" }, ngImport: i0, template: "<nav class=\"ptr-menu\">\r\n <ul class=\"menu\">\r\n <li class=\"menu-item\" *ngFor=\"let item of menuItems\" routerLinkActive=\"current_page_item\"\r\n [routerLinkActiveOptions]=\"{exact: true}\">\r\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\r\n </li>\r\n </ul>\r\n</nav>\r\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7
15
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MenuComponent, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrMenuComponent, decorators: [{
9
17
  type: Component,
10
- args: [{ selector: 'ptr-menu', standalone: true, imports: [], template: "<p>menu works!</p>\n" }]
18
+ args: [{ selector: 'ptr-menu', standalone: true, imports: [CommonModule, RouterModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav class=\"ptr-menu\">\r\n <ul class=\"menu\">\r\n <li class=\"menu-item\" *ngFor=\"let item of menuItems\" routerLinkActive=\"current_page_item\"\r\n [routerLinkActiveOptions]=\"{exact: true}\">\r\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\r\n </li>\r\n </ul>\r\n</nav>\r\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"] }]
19
+ }], propDecorators: { menuItems: [{
20
+ type: Input
21
+ }] } });
22
+
23
+ class PtrFormComponent {
24
+ config;
25
+ loading = false;
26
+ formChanges = new EventEmitter();
27
+ formSubmit = new EventEmitter();
28
+ form;
29
+ processedFields = [];
30
+ fb = inject(FormBuilder);
31
+ cdr = inject(ChangeDetectorRef);
32
+ ngOnInit() {
33
+ this.form = this.fb.group({});
34
+ this.processedFields = this.config.fields.map(field => this.processField(field));
35
+ this.processedFields.forEach(field => {
36
+ if (field.type === 'select') {
37
+ if (field.simpleOptions) {
38
+ this.form.addControl(field.id, this.fb.control(field.value ?? field.simpleOptions[0].value ?? null, field.required ? Validators.required : null));
39
+ }
40
+ else if (field.groupedOptions) {
41
+ this.form.addControl(field.id, this.fb.control(field.value || field.groupedOptions[0].options[0].value, field.required ? Validators.required : null));
42
+ }
43
+ else {
44
+ this.form.addControl(field.id, this.fb.control(field.value || '', field.required ? Validators.required : null));
45
+ }
46
+ }
47
+ else {
48
+ this.form.addControl(field.id, this.fb.control(field.value || '', field.required ? Validators.required : null));
49
+ }
50
+ });
51
+ this.form.valueChanges.subscribe(values => {
52
+ this.formChanges.emit(values);
53
+ });
54
+ }
55
+ processField(field) {
56
+ const classes = ['gfield'];
57
+ if (field.size)
58
+ classes.push(`gfield--width-${field.size}`);
59
+ if (field.type === 'hidden')
60
+ classes.push('gform_hidden');
61
+ if (field.class)
62
+ classes.push(field.class);
63
+ return {
64
+ ...field,
65
+ class: classes.join(' ')
66
+ };
67
+ }
68
+ onSubmit() {
69
+ if (this.form.valid) {
70
+ this.formSubmit.emit(this.form.value);
71
+ }
72
+ else {
73
+ console.log('Form is invalid');
74
+ }
75
+ }
76
+ resetForm() {
77
+ if (this.form) {
78
+ this.form.reset();
79
+ this.config.fields.forEach(field => {
80
+ this.form.get(field.id)?.setValue(field.value || null);
81
+ });
82
+ this.cdr.markForCheck();
83
+ }
84
+ }
85
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
86
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: PtrFormComponent, isStandalone: true, selector: "ptr-form", inputs: { config: "config", loading: "loading" }, outputs: { formChanges: "formChanges", formSubmit: "formSubmit" }, ngImport: i0, template: "<div [class]=\"'gform_wrapper ' + (config.formClass || 'small-section')\">\r\n <div *ngIf=\"config.title\" class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"gform_fields\">\r\n\r\n <ng-container *ngFor=\"let field of processedFields\">\r\n\r\n <div [class]=\"field.class\">\r\n <label *ngIf=\"field.type !== 'hidden'\" [for]=\"field.id\" class=\"gfield_label gform-field-label\">\r\n {{ field.name }}\r\n </label>\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <textarea *ngSwitchCase=\"'textarea'\" [id]=\"field.id\" [formControlName]=\"field.id\"></textarea>\r\n\r\n <select *ngSwitchCase=\"'select'\" [id]=\"field.id\" [formControlName]=\"field.id\">\r\n <ng-container *ngIf=\"field.simpleOptions\">\r\n <option *ngFor=\"let option of field.simpleOptions\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </ng-container>\r\n <ng-container *ngIf=\"field.groupedOptions\">\r\n <optgroup *ngFor=\"let group of field.groupedOptions\" [label]=\"group.label\">\r\n <option *ngFor=\"let option of group.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </optgroup>\r\n </ng-container>\r\n </select>\r\n\r\n <input *ngSwitchDefault [type]=\"field.type\" [id]=\"field.id\" [formControlName]=\"field.id\"\r\n [attr.maxlength]=\"field.maxlength\">\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n <div class=\"gform_footer\">\r\n <button type=\"submit\" [name]=\"config.submitName\"\r\n [disabled]=\"loading || !form.valid\">{{config.submitValue}}</button>\r\n </div>\r\n </form>\r\n\r\n <ng-content></ng-content>\r\n\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
87
+ }
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrFormComponent, decorators: [{
89
+ type: Component,
90
+ args: [{ selector: 'ptr-form', standalone: true, imports: [
91
+ CommonModule,
92
+ ReactiveFormsModule
93
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'gform_wrapper ' + (config.formClass || 'small-section')\">\r\n <div *ngIf=\"config.title\" class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"gform_fields\">\r\n\r\n <ng-container *ngFor=\"let field of processedFields\">\r\n\r\n <div [class]=\"field.class\">\r\n <label *ngIf=\"field.type !== 'hidden'\" [for]=\"field.id\" class=\"gfield_label gform-field-label\">\r\n {{ field.name }}\r\n </label>\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <textarea *ngSwitchCase=\"'textarea'\" [id]=\"field.id\" [formControlName]=\"field.id\"></textarea>\r\n\r\n <select *ngSwitchCase=\"'select'\" [id]=\"field.id\" [formControlName]=\"field.id\">\r\n <ng-container *ngIf=\"field.simpleOptions\">\r\n <option *ngFor=\"let option of field.simpleOptions\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </ng-container>\r\n <ng-container *ngIf=\"field.groupedOptions\">\r\n <optgroup *ngFor=\"let group of field.groupedOptions\" [label]=\"group.label\">\r\n <option *ngFor=\"let option of group.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </optgroup>\r\n </ng-container>\r\n </select>\r\n\r\n <input *ngSwitchDefault [type]=\"field.type\" [id]=\"field.id\" [formControlName]=\"field.id\"\r\n [attr.maxlength]=\"field.maxlength\">\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n <div class=\"gform_footer\">\r\n <button type=\"submit\" [name]=\"config.submitName\"\r\n [disabled]=\"loading || !form.valid\">{{config.submitValue}}</button>\r\n </div>\r\n </form>\r\n\r\n <ng-content></ng-content>\r\n\r\n</div>" }]
94
+ }], propDecorators: { config: [{
95
+ type: Input
96
+ }], loading: [{
97
+ type: Input
98
+ }], formChanges: [{
99
+ type: Output
100
+ }], formSubmit: [{
101
+ type: Output
102
+ }] } });
103
+
104
+ class PtrTitleComponent {
105
+ router = inject(Router);
106
+ activatedRoute = inject(ActivatedRoute);
107
+ titleStrategy = inject(TitleStrategy);
108
+ title$;
109
+ hideTitle$;
110
+ ngOnInit() {
111
+ const routeEvents$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd), map(() => this.getRoute(this.activatedRoute)));
112
+ this.hideTitle$ = routeEvents$.pipe(map(route => !!route.snapshot.data['hideTitle']));
113
+ this.title$ = routeEvents$.pipe(map(route => {
114
+ if (route.snapshot.data['hideTitle']) {
115
+ return '';
116
+ }
117
+ return this.titleStrategy.getResolvedTitleForRoute(route.snapshot) || '';
118
+ }));
119
+ }
120
+ getRoute(route) {
121
+ while (route.firstChild) {
122
+ route = route.firstChild;
123
+ }
124
+ return route;
125
+ }
126
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
127
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: PtrTitleComponent, isStandalone: true, selector: "ptr-title", ngImport: i0, template: '<header class="entry-header is-layout-constrained my-3" *ngIf="!(hideTitle$ | async)"><h1 class="entry-title">{{ title$ | async }}</h1></header>', isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: PtrTitleComponent, decorators: [{
130
+ type: Component,
131
+ args: [{
132
+ selector: 'ptr-title',
133
+ standalone: true,
134
+ imports: [CommonModule],
135
+ template: '<header class="entry-header is-layout-constrained my-3" *ngIf="!(hideTitle$ | async)"><h1 class="entry-title">{{ title$ | async }}</h1></header>',
136
+ changeDetection: ChangeDetectionStrategy.OnPush
137
+ }]
11
138
  }] });
12
139
 
13
140
  /*
14
141
  * Public API Surface of ngx-components
15
142
  */
143
+ // export { PtrTitleStrategy } from './lib/ptr-title/ptr-title-strategy';
16
144
 
17
145
  /**
18
146
  * Generated bundle index. Do not edit.
19
147
  */
20
148
 
21
- export { MenuComponent };
149
+ export { PtrFormComponent, PtrMenuComponent, PtrTitleComponent };
22
150
  //# sourceMappingURL=patter-ngx-components.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"patter-ngx-components.mjs","sources":["../../../../projects/patter/ngx-components/src/lib/menu/menu.component.ts","../../../../projects/patter/ngx-components/src/lib/menu/menu.component.html","../../../../projects/patter/ngx-components/src/public-api.ts","../../../../projects/patter/ngx-components/src/patter-ngx-components.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'ptr-menu',\n standalone: true,\n imports: [],\n templateUrl: './menu.component.html',\n styleUrl: './menu.component.css'\n})\nexport class MenuComponent {\n\n}\n","<p>menu works!</p>\n","/*\n * Public API Surface of ngx-components\n */\n\nexport * from './lib/menu/menu.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MASa,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,oECT1B,sBACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA;;;AELb;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"patter-ngx-components.mjs","sources":["../../../../projects/patter/ngx-components/src/lib/menu/menu.component.ts","../../../../projects/patter/ngx-components/src/lib/menu/menu.component.html","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.ts","../../../../projects/patter/ngx-components/src/public-api.ts","../../../../projects/patter/ngx-components/src/patter-ngx-components.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nexport interface PtrMenuItem {\r\n label: string;\r\n link?: string;\r\n children?: PtrMenuItem[];\r\n}\r\n\r\n@Component({\r\n selector: 'ptr-menu',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule],\r\n templateUrl: './menu.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./menu.component.scss']\r\n})\r\nexport class PtrMenuComponent {\r\n\r\n @Input() menuItems: PtrMenuItem[] = [];\r\n\r\n}\r\n","<nav class=\"ptr-menu\">\r\n <ul class=\"menu\">\r\n <li class=\"menu-item\" *ngFor=\"let item of menuItems\" routerLinkActive=\"current_page_item\"\r\n [routerLinkActiveOptions]=\"{exact: true}\">\r\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\r\n </li>\r\n </ul>\r\n</nav>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { PtrFormConfig, PtrFormFieldConfig } from '../interfaces';\r\n\r\n@Component({\r\n selector: 'ptr-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule\r\n ],\r\n templateUrl: './form.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PtrFormComponent {\r\n\r\n @Input() config!: PtrFormConfig;\r\n @Input() loading = false;\r\n\r\n @Output() formChanges = new EventEmitter<AbstractControl<any>>();\r\n @Output() formSubmit = new EventEmitter<AbstractControl<any>>();\r\n\r\n form!: FormGroup;\r\n processedFields: PtrFormFieldConfig[] = [];\r\n\r\n fb = inject(FormBuilder);\r\n cdr = inject(ChangeDetectorRef);\r\n\r\n ngOnInit() {\r\n this.form = this.fb.group({});\r\n this.processedFields = this.config.fields.map(field => this.processField(field));\r\n this.processedFields.forEach(field => {\r\n if (field.type === 'select') {\r\n if (field.simpleOptions) {\r\n this.form.addControl(field.id, this.fb.control(field.value ?? field.simpleOptions![0].value ?? null, field.required ? Validators.required : null));\r\n } else if (field.groupedOptions) {\r\n this.form.addControl(field.id, this.fb.control(field.value || field.groupedOptions[0].options[0].value, field.required ? Validators.required : null));\r\n } else {\r\n this.form.addControl(field.id, this.fb.control(field.value || '', field.required ? Validators.required : null));\r\n }\r\n } else {\r\n this.form.addControl(field.id, this.fb.control(field.value || '', field.required ? Validators.required : null));\r\n }\r\n });\r\n\r\n this.form.valueChanges.subscribe(values => {\r\n this.formChanges.emit(values);\r\n });\r\n }\r\n\r\n private processField(field: PtrFormFieldConfig): PtrFormFieldConfig {\r\n const classes = ['gfield'];\r\n if (field.size) classes.push(`gfield--width-${field.size}`);\r\n if (field.type === 'hidden') classes.push('gform_hidden');\r\n if (field.class) classes.push(field.class);\r\n\r\n return {\r\n ...field,\r\n class: classes.join(' ')\r\n };\r\n }\r\n\r\n onSubmit() {\r\n if (this.form.valid) {\r\n this.formSubmit.emit(this.form.value);\r\n } else {\r\n console.log('Form is invalid');\r\n }\r\n }\r\n\r\n resetForm() {\r\n if (this.form) {\r\n this.form.reset();\r\n this.config.fields.forEach(field => {\r\n this.form.get(field.id)?.setValue(field.value || null);\r\n });\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n}\r\n","<div [class]=\"'gform_wrapper ' + (config.formClass || 'small-section')\">\r\n <div *ngIf=\"config.title\" class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"gform_fields\">\r\n\r\n <ng-container *ngFor=\"let field of processedFields\">\r\n\r\n <div [class]=\"field.class\">\r\n <label *ngIf=\"field.type !== 'hidden'\" [for]=\"field.id\" class=\"gfield_label gform-field-label\">\r\n {{ field.name }}\r\n </label>\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <textarea *ngSwitchCase=\"'textarea'\" [id]=\"field.id\" [formControlName]=\"field.id\"></textarea>\r\n\r\n <select *ngSwitchCase=\"'select'\" [id]=\"field.id\" [formControlName]=\"field.id\">\r\n <ng-container *ngIf=\"field.simpleOptions\">\r\n <option *ngFor=\"let option of field.simpleOptions\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </ng-container>\r\n <ng-container *ngIf=\"field.groupedOptions\">\r\n <optgroup *ngFor=\"let group of field.groupedOptions\" [label]=\"group.label\">\r\n <option *ngFor=\"let option of group.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </optgroup>\r\n </ng-container>\r\n </select>\r\n\r\n <input *ngSwitchDefault [type]=\"field.type\" [id]=\"field.id\" [formControlName]=\"field.id\"\r\n [attr.maxlength]=\"field.maxlength\">\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n <div class=\"gform_footer\">\r\n <button type=\"submit\" [name]=\"config.submitName\"\r\n [disabled]=\"loading || !form.valid\">{{config.submitValue}}</button>\r\n </div>\r\n </form>\r\n\r\n <ng-content></ng-content>\r\n\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRoute, NavigationEnd, Router, TitleStrategy } from '@angular/router';\r\nimport { filter, map, Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'ptr-title',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: '<header class=\"entry-header is-layout-constrained my-3\" *ngIf=\"!(hideTitle$ | async)\"><h1 class=\"entry-title\">{{ title$ | async }}</h1></header>',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PtrTitleComponent implements OnInit {\r\n\r\n private router = inject(Router);\r\n private activatedRoute = inject(ActivatedRoute);\r\n private titleStrategy = inject(TitleStrategy);\r\n\r\n title$!: Observable<string>;\r\n hideTitle$!: Observable<boolean>;\r\n\r\n ngOnInit() {\r\n const routeEvents$ = this.router.events.pipe(\r\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\r\n map(() => this.getRoute(this.activatedRoute))\r\n );\r\n\r\n this.hideTitle$ = routeEvents$.pipe(\r\n map(route => !!route.snapshot.data['hideTitle'])\r\n );\r\n\r\n this.title$ = routeEvents$.pipe(\r\n map(route => {\r\n if (route.snapshot.data['hideTitle']) {\r\n return '';\r\n }\r\n return this.titleStrategy.getResolvedTitleForRoute(route.snapshot) || '';\r\n })\r\n );\r\n\r\n }\r\n\r\n private getRoute(route: ActivatedRoute): ActivatedRoute {\r\n while (route.firstChild) {\r\n route = route.firstChild;\r\n }\r\n return route;\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of ngx-components\r\n */\r\n\r\nexport * from './lib/menu/menu.component';\r\n\r\nexport * from './lib/forms/interfaces';\r\nexport { PtrFormComponent } from './lib/forms/form/form.component';\r\n\r\nexport { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';\r\n// export { PtrTitleStrategy } from './lib/ptr-title/ptr-title-strategy';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectorRef, EventEmitter } from '@angular/core';
2
+ import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
3
+ import { PtrFormConfig, PtrFormFieldConfig } from '../interfaces';
4
+ import * as i0 from "@angular/core";
5
+ export declare class PtrFormComponent {
6
+ config: PtrFormConfig;
7
+ loading: boolean;
8
+ formChanges: EventEmitter<AbstractControl<any, any>>;
9
+ formSubmit: EventEmitter<AbstractControl<any, any>>;
10
+ form: FormGroup;
11
+ processedFields: PtrFormFieldConfig[];
12
+ fb: FormBuilder;
13
+ cdr: ChangeDetectorRef;
14
+ ngOnInit(): void;
15
+ private processField;
16
+ onSubmit(): void;
17
+ resetForm(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<PtrFormComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<PtrFormComponent, "ptr-form", never, { "config": { "alias": "config"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, { "formChanges": "formChanges"; "formSubmit": "formSubmit"; }, never, ["*"], true, never>;
20
+ }
@@ -0,0 +1,27 @@
1
+ export interface PtrFormFieldOption {
2
+ label: string;
3
+ value: string;
4
+ }
5
+ export interface PtrFormFieldOptionGroup {
6
+ label: string;
7
+ options: PtrFormFieldOption[];
8
+ }
9
+ export interface PtrFormFieldConfig {
10
+ id: string;
11
+ name?: string;
12
+ required?: boolean;
13
+ type: 'text' | 'textarea' | 'select' | 'date' | 'hidden';
14
+ simpleOptions?: PtrFormFieldOption[];
15
+ groupedOptions?: PtrFormFieldOptionGroup[];
16
+ size?: 'full' | 'half' | 'third';
17
+ value?: string;
18
+ class?: string;
19
+ maxlength?: number;
20
+ }
21
+ export interface PtrFormConfig {
22
+ title?: string;
23
+ fields: PtrFormFieldConfig[];
24
+ submitName: string;
25
+ submitValue: string;
26
+ formClass?: string;
27
+ }
@@ -1,5 +1,11 @@
1
1
  import * as i0 from "@angular/core";
2
- export declare class MenuComponent {
3
- static ɵfac: i0.ɵɵFactoryDeclaration<MenuComponent, never>;
4
- static ɵcmp: i0.ɵɵComponentDeclaration<MenuComponent, "ptr-menu", never, {}, {}, never, never, true, never>;
2
+ export interface PtrMenuItem {
3
+ label: string;
4
+ link?: string;
5
+ children?: PtrMenuItem[];
6
+ }
7
+ export declare class PtrMenuComponent {
8
+ menuItems: PtrMenuItem[];
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<PtrMenuComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<PtrMenuComponent, "ptr-menu", never, { "menuItems": { "alias": "menuItems"; "required": false; }; }, {}, never, never, true, never>;
5
11
  }
@@ -0,0 +1,14 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export declare class PtrTitleComponent implements OnInit {
5
+ private router;
6
+ private activatedRoute;
7
+ private titleStrategy;
8
+ title$: Observable<string>;
9
+ hideTitle$: Observable<boolean>;
10
+ ngOnInit(): void;
11
+ private getRoute;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<PtrTitleComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<PtrTitleComponent, "ptr-title", never, {}, {}, never, never, true, never>;
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patter/ngx-components",
3
- "version": "0.0.1",
3
+ "version": "0.5.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.1.0",
6
6
  "@angular/core": "^18.1.0"
Binary file
package/public-api.d.ts CHANGED
@@ -1 +1,4 @@
1
1
  export * from './lib/menu/menu.component';
2
+ export * from './lib/forms/interfaces';
3
+ export { PtrFormComponent } from './lib/forms/form/form.component';
4
+ export { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';
Binary file