@tehw0lf/contact-form 0.21.4 → 0.21.6

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.
@@ -15,27 +15,27 @@ class ContactFormComponent {
15
15
  'background-color': '#333333',
16
16
  border: 'none',
17
17
  color: '#cc7832'
18
- }, ...(ngDevMode ? [{ debugName: "buttonStyle" }] : []));
18
+ }, ...(ngDevMode ? [{ debugName: "buttonStyle" }] : /* istanbul ignore next */ []));
19
19
  this.formStyle = input({
20
20
  color: '#437da8',
21
21
  'background-color': 'rgba(34, 34, 34, 0.75)',
22
22
  'backdrop-filter': 'blur(50px)',
23
23
  'box-shadow': '0 2px 10px rgba(0, 0, 0, 0.075)'
24
- }, ...(ngDevMode ? [{ debugName: "formStyle" }] : []));
25
- this.textStyle = input({ color: '#cc7832' }, ...(ngDevMode ? [{ debugName: "textStyle" }] : []));
26
- this.sendText = input('Send', ...(ngDevMode ? [{ debugName: "sendText" }] : []));
27
- this.sendSuccessfulText = input('E-Mail successfully sent', ...(ngDevMode ? [{ debugName: "sendSuccessfulText" }] : []));
28
- this.sendErrorText = input('Send error', ...(ngDevMode ? [{ debugName: "sendErrorText" }] : []));
24
+ }, ...(ngDevMode ? [{ debugName: "formStyle" }] : /* istanbul ignore next */ []));
25
+ this.textStyle = input({ color: '#cc7832' }, ...(ngDevMode ? [{ debugName: "textStyle" }] : /* istanbul ignore next */ []));
26
+ this.sendText = input('Send', ...(ngDevMode ? [{ debugName: "sendText" }] : /* istanbul ignore next */ []));
27
+ this.sendSuccessfulText = input('E-Mail successfully sent', ...(ngDevMode ? [{ debugName: "sendSuccessfulText" }] : /* istanbul ignore next */ []));
28
+ this.sendErrorText = input('Send error', ...(ngDevMode ? [{ debugName: "sendErrorText" }] : /* istanbul ignore next */ []));
29
29
  this.formConfig = input([
30
30
  { field: 'name', required: true },
31
31
  { field: 'email', required: true },
32
32
  { field: 'message', required: true, type: 'textarea' }
33
- ], ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
34
- this.apiCallback = input.required(...(ngDevMode ? [{ debugName: "apiCallback" }] : []));
33
+ ], ...(ngDevMode ? [{ debugName: "formConfig" }] : /* istanbul ignore next */ []));
34
+ this.apiCallback = input.required(...(ngDevMode ? [{ debugName: "apiCallback" }] : /* istanbul ignore next */ []));
35
35
  this.form = new FormGroup({});
36
36
  this.fields = [];
37
37
  this.model = {};
38
- this.emailSent = signal(null, ...(ngDevMode ? [{ debugName: "emailSent" }] : []));
38
+ this.emailSent = signal(null, ...(ngDevMode ? [{ debugName: "emailSent" }] : /* istanbul ignore next */ []));
39
39
  this.unsubscribe$ = new Subject();
40
40
  // Use an effect to rebuild config when formConfig changes
41
41
  effect(() => {
@@ -112,10 +112,10 @@ class ContactFormComponent {
112
112
  })
113
113
  .join('');
114
114
  }
115
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ContactFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
116
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: ContactFormComponent, isStandalone: true, selector: "contact-form", inputs: { buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null }, formStyle: { classPropertyName: "formStyle", publicName: "formStyle", isSignal: true, isRequired: false, transformFunction: null }, textStyle: { classPropertyName: "textStyle", publicName: "textStyle", isSignal: true, isRequired: false, transformFunction: null }, sendText: { classPropertyName: "sendText", publicName: "sendText", isSignal: true, isRequired: false, transformFunction: null }, sendSuccessfulText: { classPropertyName: "sendSuccessfulText", publicName: "sendSuccessfulText", isSignal: true, isRequired: false, transformFunction: null }, sendErrorText: { classPropertyName: "sendErrorText", publicName: "sendErrorText", isSignal: true, isRequired: false, transformFunction: null }, formConfig: { classPropertyName: "formConfig", publicName: "formConfig", isSignal: true, isRequired: false, transformFunction: null }, apiCallback: { classPropertyName: "apiCallback", publicName: "apiCallback", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<form\n [ngStyle]=\"formStyle()\"\n class=\"contact-form flex-column flex-fxflex\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submitFormData(model)\"\n>\n <formly-form [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n <button\n [ngStyle]=\"buttonStyle()\"\n class=\"form-button\"\n type=\"submit\"\n [disabled]=\"!form.valid\"\n >\n {{ sendText() }}\n </button>\n <div [ngStyle]=\"textStyle()\" class=\"form-status\">\n @if (emailSent()) {\n {{ sendSuccessfulText() }}\n } @else if (emailSent() === false) {\n {{ sendErrorText() }}\n }\n </div>\n</form>\n", styles: [".flex-align-start{justify-content:flex-start}.flex-align-stretch{align-content:stretch;align-items:stretch}.flex-column{display:flex;flex-direction:column;box-sizing:border-box}.flex-row{display:flex;flex-direction:row;box-sizing:border-box}.flex-row-wrap{display:flex;flex-direction:row;flex-wrap:wrap;box-sizing:border-box}.flex-fxflex{flex:1 1 0%}.flex-fxflex-responsive{flex:0 1 calc(33.3% - 32px)}.flex-fxflex-lt-md{flex:0 1 calc(50% - 32px)}.flex-fxflex-lt-sm{flex:100%}.flex-fxflex-fill{height:100%;min-height:100%;min-width:100%;width:100%}.flex-gap-5{margin-right:5px}.flex-gap-12{margin-right:12px}.flex-gap-20{margin-right:20px}.contact-form{max-width:500px;margin:auto;padding:40px 40px 30px;box-sizing:border-box}.form-button{margin-top:.33rem;display:block;border-radius:.25rem;height:36px;width:100%;padding:.375rem .75rem}.form-status{height:19px;margin-top:1rem}\n"], dependencies: [{ kind: "ngmodule", type: LayoutModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2.LegacyFormlyForm, selector: "formly-form" }, { kind: "ngmodule", type: FormlyMaterialModule }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ContactFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ContactFormComponent, isStandalone: true, selector: "contact-form", inputs: { buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null }, formStyle: { classPropertyName: "formStyle", publicName: "formStyle", isSignal: true, isRequired: false, transformFunction: null }, textStyle: { classPropertyName: "textStyle", publicName: "textStyle", isSignal: true, isRequired: false, transformFunction: null }, sendText: { classPropertyName: "sendText", publicName: "sendText", isSignal: true, isRequired: false, transformFunction: null }, sendSuccessfulText: { classPropertyName: "sendSuccessfulText", publicName: "sendSuccessfulText", isSignal: true, isRequired: false, transformFunction: null }, sendErrorText: { classPropertyName: "sendErrorText", publicName: "sendErrorText", isSignal: true, isRequired: false, transformFunction: null }, formConfig: { classPropertyName: "formConfig", publicName: "formConfig", isSignal: true, isRequired: false, transformFunction: null }, apiCallback: { classPropertyName: "apiCallback", publicName: "apiCallback", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<form\n [ngStyle]=\"formStyle()\"\n class=\"contact-form flex-column flex-fxflex\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submitFormData(model)\"\n>\n <formly-form [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n <button\n [ngStyle]=\"buttonStyle()\"\n class=\"form-button\"\n type=\"submit\"\n [disabled]=\"!form.valid\"\n >\n {{ sendText() }}\n </button>\n <div [ngStyle]=\"textStyle()\" class=\"form-status\">\n @if (emailSent()) {\n {{ sendSuccessfulText() }}\n } @else if (emailSent() === false) {\n {{ sendErrorText() }}\n }\n </div>\n</form>\n", styles: [".flex-align-start{justify-content:flex-start}.flex-align-stretch{align-content:stretch;align-items:stretch}.flex-column{display:flex;flex-direction:column;box-sizing:border-box}.flex-row{display:flex;flex-direction:row;box-sizing:border-box}.flex-row-wrap{display:flex;flex-direction:row;flex-wrap:wrap;box-sizing:border-box}.flex-fxflex{flex:1 1 0%}.flex-fxflex-responsive{flex:0 1 calc(33.3% - 32px)}.flex-fxflex-lt-md{flex:0 1 calc(50% - 32px)}.flex-fxflex-lt-sm{flex:100%}.flex-fxflex-fill{height:100%;min-height:100%;min-width:100%;width:100%}.flex-gap-5{margin-right:5px}.flex-gap-12{margin-right:12px}.flex-gap-20{margin-right:20px}.contact-form{max-width:500px;margin:auto;padding:40px 40px 30px;box-sizing:border-box}.form-button{margin-top:.33rem;display:block;border-radius:.25rem;height:36px;width:100%;padding:.375rem .75rem}.form-status{height:19px;margin-top:1rem}\n"], dependencies: [{ kind: "ngmodule", type: LayoutModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2.LegacyFormlyForm, selector: "formly-form" }, { kind: "ngmodule", type: FormlyMaterialModule }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
117
117
  }
118
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ContactFormComponent, decorators: [{
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ContactFormComponent, decorators: [{
119
119
  type: Component,
120
120
  args: [{ selector: 'contact-form', encapsulation: ViewEncapsulation.None, imports: [
121
121
  LayoutModule,
@@ -1 +1 @@
1
- {"version":3,"file":"tehw0lf-contact-form.mjs","sources":["../../../../libs/contact-form/src/lib/contact-form/contact-form.component.ts","../../../../libs/contact-form/src/lib/contact-form/contact-form.component.html","../../../../libs/contact-form/src/tehw0lf-contact-form.ts"],"sourcesContent":["import { LayoutModule } from '@angular/cdk/layout';\nimport { NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n input,\n OnDestroy,\n signal,\n ViewEncapsulation,\n effect\n} from '@angular/core';\nimport { FormGroup, ReactiveFormsModule, AbstractControl } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { Observable, Subject, takeUntil, tap } from 'rxjs';\n\ninterface FormValue {\n [key: string]: string;\n}\n\ninterface FormConfigEntry {\n field: string;\n value?: string;\n required?: boolean;\n type?: 'input' | 'textarea' | 'email' | 'number';\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'contact-form',\n templateUrl: './contact-form.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./contact-form.component.scss'],\n imports: [\n LayoutModule,\n ReactiveFormsModule,\n FormlyModule,\n FormlyMaterialModule,\n NgStyle\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContactFormComponent implements OnDestroy {\n buttonStyle = input({\n 'background-color': '#333333',\n border: 'none',\n color: '#cc7832'\n });\n\n formStyle = input({\n color: '#437da8',\n 'background-color': 'rgba(34, 34, 34, 0.75)',\n 'backdrop-filter': 'blur(50px)',\n 'box-shadow': '0 2px 10px rgba(0, 0, 0, 0.075)'\n });\n\n textStyle = input({ color: '#cc7832' });\n\n sendText = input('Send');\n\n sendSuccessfulText = input('E-Mail successfully sent');\n\n sendErrorText = input('Send error');\n\n formConfig = input<FormConfigEntry[]>([\n { field: 'name', required: true },\n { field: 'email', required: true },\n { field: 'message', required: true, type: 'textarea' }\n ]);\n\n apiCallback = input.required<(formValue: FormValue) => Observable<boolean>>();\n\n form = new FormGroup({});\n fields: FormlyFieldConfig[] = [];\n model: { [key: string]: string } = {};\n\n emailSent = signal<boolean | null>(null);\n\n private unsubscribe$: Subject<void> = new Subject();\n\n constructor() {\n // Use an effect to rebuild config when formConfig changes\n effect(() => {\n // Read the formConfig signal to establish dependency\n this.formConfig();\n this.buildConfig();\n });\n }\n\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n submitFormData(formData: { [key: string]: string }) {\n this.apiCallback()(formData)\n .pipe(\n tap((success: boolean) => {\n this.emailSent.set(success);\n }),\n takeUntil(this.unsubscribe$)\n )\n .subscribe();\n }\n\n private buildConfig(): void {\n // Clear existing fields and model\n this.fields = [];\n this.model = {};\n \n this.formConfig().forEach((entry: FormConfigEntry) => {\n if (entry.value) {\n this.model[entry.field] = entry.value;\n }\n\n const fieldConfig: FormlyFieldConfig = {\n key: entry.field,\n type: entry.type ? entry.type : 'input',\n props: {\n label: entry.field.toLocaleUpperCase(),\n placeholder: 'Enter ' + entry.field,\n required: entry.required,\n attributes: { style: this.flattenStyle(this.textStyle()) }\n },\n templateOptions:\n entry.type === 'textarea'\n ? {\n autosize: true,\n minRows: 5,\n maxRows: 10\n }\n : {}\n };\n\n // Add email validation for email fields\n if (entry.field.toLowerCase() === 'email') {\n if (fieldConfig.props) {\n fieldConfig.props.type = 'email';\n }\n fieldConfig.validators = {\n email: {\n expression: (control: AbstractControl) => !control.value || /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(control.value),\n message: 'Please enter a valid email address'\n }\n };\n }\n\n // Add required validation message\n if (entry.required) {\n fieldConfig.validators = {\n ...fieldConfig.validators,\n required: {\n expression: (control: AbstractControl) => !!control.value,\n message: `${entry.field} is required`\n }\n };\n }\n\n this.fields.push(fieldConfig);\n });\n }\n\n private flattenStyle(styleObject: { [key: string]: string }): string {\n return Object.entries(styleObject)\n .flatMap((entry) => {\n return `${entry[0]}: ${entry[1]};`;\n })\n .join('');\n }\n}\n","<form\n [ngStyle]=\"formStyle()\"\n class=\"contact-form flex-column flex-fxflex\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submitFormData(model)\"\n>\n <formly-form [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n <button\n [ngStyle]=\"buttonStyle()\"\n class=\"form-button\"\n type=\"submit\"\n [disabled]=\"!form.valid\"\n >\n {{ sendText() }}\n </button>\n <div [ngStyle]=\"textStyle()\" class=\"form-status\">\n @if (emailSent()) {\n {{ sendSuccessfulText() }}\n } @else if (emailSent() === false) {\n {{ sendErrorText() }}\n }\n </div>\n</form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tehw0lf-contact-form.mjs","sources":["../../../../libs/contact-form/src/lib/contact-form/contact-form.component.ts","../../../../libs/contact-form/src/lib/contact-form/contact-form.component.html","../../../../libs/contact-form/src/tehw0lf-contact-form.ts"],"sourcesContent":["import { LayoutModule } from '@angular/cdk/layout';\nimport { NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n input,\n OnDestroy,\n signal,\n ViewEncapsulation,\n effect\n} from '@angular/core';\nimport { FormGroup, ReactiveFormsModule, AbstractControl } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { Observable, Subject, takeUntil, tap } from 'rxjs';\n\ninterface FormValue {\n [key: string]: string;\n}\n\ninterface FormConfigEntry {\n field: string;\n value?: string;\n required?: boolean;\n type?: 'input' | 'textarea' | 'email' | 'number';\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'contact-form',\n templateUrl: './contact-form.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./contact-form.component.scss'],\n imports: [\n LayoutModule,\n ReactiveFormsModule,\n FormlyModule,\n FormlyMaterialModule,\n NgStyle\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContactFormComponent implements OnDestroy {\n buttonStyle = input({\n 'background-color': '#333333',\n border: 'none',\n color: '#cc7832'\n });\n\n formStyle = input({\n color: '#437da8',\n 'background-color': 'rgba(34, 34, 34, 0.75)',\n 'backdrop-filter': 'blur(50px)',\n 'box-shadow': '0 2px 10px rgba(0, 0, 0, 0.075)'\n });\n\n textStyle = input({ color: '#cc7832' });\n\n sendText = input('Send');\n\n sendSuccessfulText = input('E-Mail successfully sent');\n\n sendErrorText = input('Send error');\n\n formConfig = input<FormConfigEntry[]>([\n { field: 'name', required: true },\n { field: 'email', required: true },\n { field: 'message', required: true, type: 'textarea' }\n ]);\n\n apiCallback = input.required<(formValue: FormValue) => Observable<boolean>>();\n\n form = new FormGroup({});\n fields: FormlyFieldConfig[] = [];\n model: { [key: string]: string } = {};\n\n emailSent = signal<boolean | null>(null);\n\n private unsubscribe$: Subject<void> = new Subject();\n\n constructor() {\n // Use an effect to rebuild config when formConfig changes\n effect(() => {\n // Read the formConfig signal to establish dependency\n this.formConfig();\n this.buildConfig();\n });\n }\n\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n submitFormData(formData: { [key: string]: string }) {\n this.apiCallback()(formData)\n .pipe(\n tap((success: boolean) => {\n this.emailSent.set(success);\n }),\n takeUntil(this.unsubscribe$)\n )\n .subscribe();\n }\n\n private buildConfig(): void {\n // Clear existing fields and model\n this.fields = [];\n this.model = {};\n \n this.formConfig().forEach((entry: FormConfigEntry) => {\n if (entry.value) {\n this.model[entry.field] = entry.value;\n }\n\n const fieldConfig: FormlyFieldConfig = {\n key: entry.field,\n type: entry.type ? entry.type : 'input',\n props: {\n label: entry.field.toLocaleUpperCase(),\n placeholder: 'Enter ' + entry.field,\n required: entry.required,\n attributes: { style: this.flattenStyle(this.textStyle()) }\n },\n templateOptions:\n entry.type === 'textarea'\n ? {\n autosize: true,\n minRows: 5,\n maxRows: 10\n }\n : {}\n };\n\n // Add email validation for email fields\n if (entry.field.toLowerCase() === 'email') {\n if (fieldConfig.props) {\n fieldConfig.props.type = 'email';\n }\n fieldConfig.validators = {\n email: {\n expression: (control: AbstractControl) => !control.value || /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(control.value),\n message: 'Please enter a valid email address'\n }\n };\n }\n\n // Add required validation message\n if (entry.required) {\n fieldConfig.validators = {\n ...fieldConfig.validators,\n required: {\n expression: (control: AbstractControl) => !!control.value,\n message: `${entry.field} is required`\n }\n };\n }\n\n this.fields.push(fieldConfig);\n });\n }\n\n private flattenStyle(styleObject: { [key: string]: string }): string {\n return Object.entries(styleObject)\n .flatMap((entry) => {\n return `${entry[0]}: ${entry[1]};`;\n })\n .join('');\n }\n}\n","<form\n [ngStyle]=\"formStyle()\"\n class=\"contact-form flex-column flex-fxflex\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submitFormData(model)\"\n>\n <formly-form [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n <button\n [ngStyle]=\"buttonStyle()\"\n class=\"form-button\"\n type=\"submit\"\n [disabled]=\"!form.valid\"\n >\n {{ sendText() }}\n </button>\n <div [ngStyle]=\"textStyle()\" class=\"form-status\">\n @if (emailSent()) {\n {{ sendSuccessfulText() }}\n } @else if (emailSent() === false) {\n {{ sendErrorText() }}\n }\n </div>\n</form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tehw0lf/contact-form",
3
- "version": "0.21.4",
3
+ "version": "0.21.6",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/tehw0lf/tehwol.fi.git",
6
6
  "repository": {
@@ -8,10 +8,10 @@
8
8
  "url": "git+https://github.com/tehw0lf/tehwol.fi.git"
9
9
  },
10
10
  "peerDependencies": {
11
- "@angular/animations": "21.2.1",
12
- "@angular/common": "21.2.1",
13
- "@angular/core": "21.2.1",
14
- "@angular/forms": "21.2.1",
11
+ "@angular/animations": "21.2.8",
12
+ "@angular/common": "21.2.8",
13
+ "@angular/core": "21.2.8",
14
+ "@angular/forms": "21.2.8",
15
15
  "@ngx-formly/core": "7.1.0",
16
16
  "@ngx-formly/material": "7.1.0",
17
17
  "@tehw0lf/mvc": "0.0.8"
@@ -30,5 +30,6 @@
30
30
  "default": "./fesm2022/tehw0lf-contact-form.mjs"
31
31
  }
32
32
  },
33
- "sideEffects": false
33
+ "sideEffects": false,
34
+ "type": "module"
34
35
  }