@ng-modular-forms/core 0.7.6 → 0.7.8

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.
@@ -18,6 +18,7 @@ class FormControlBase {
18
18
  placeholder = input('');
19
19
  _disabledByInput = input(false, {
20
20
  transform: booleanAttribute,
21
+ alias: 'disabledOverride',
21
22
  });
22
23
  _disabledByCva = signal(false);
23
24
  ngControl = inject(NgControl, {
@@ -105,7 +106,7 @@ class FormControlBase {
105
106
  }
106
107
  }
107
108
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: FormControlBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
108
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.21", type: FormControlBase, isStandalone: true, inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, classList: { classPropertyName: "classList", publicName: "classList", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, _disabledByInput: { classPropertyName: "_disabledByInput", publicName: "_disabledByInput", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
109
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.21", type: FormControlBase, isStandalone: true, inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, classList: { classPropertyName: "classList", publicName: "classList", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, _disabledByInput: { classPropertyName: "_disabledByInput", publicName: "disabledOverride", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
109
110
  }
110
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: FormControlBase, decorators: [{
111
112
  type: Directive
@@ -186,6 +187,13 @@ class FormHandlerBase {
186
187
  this.registeredControls[controlName] = control;
187
188
  });
188
189
  }
190
+ getControl(key) {
191
+ const control = this.registeredControls[key];
192
+ if (!control) {
193
+ throw new Error(`Control with name: "${key}" not found. Ensure it is registered in registerControls(...) before usage.`);
194
+ }
195
+ return control;
196
+ }
189
197
  valueChangesOf(key) {
190
198
  const control = this.registeredControls[key];
191
199
  if (!control) {
@@ -199,7 +207,7 @@ class FormMapperBase {
199
207
  fromModel(model) {
200
208
  return structuredClone(model);
201
209
  }
202
- toRequest(formValue) {
210
+ toRequest(formValue, _options) {
203
211
  return formValue;
204
212
  }
205
213
  }
@@ -260,6 +268,71 @@ class TextBehavior {
260
268
  }
261
269
  }
262
270
 
271
+ class FormFieldComponent {
272
+ label = input();
273
+ isRequired = input();
274
+ loading = input();
275
+ errorMessage = input();
276
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
277
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: FormFieldComponent, isStandalone: true, selector: "nmf-form-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isRequired: { classPropertyName: "isRequired", publicName: "isRequired", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
278
+ <div class="nmf-field" [class.loading]="loading()">
279
+ @if (label()) {
280
+ <label class="nmf-label">
281
+ {{ label() }}
282
+ @if (isRequired()) {
283
+ <span class="nmf-required">*</span>
284
+ }
285
+ </label>
286
+ }
287
+
288
+ <ng-content></ng-content>
289
+
290
+ @if (loading()) {
291
+ <div class="nmf-loading">
292
+ <span class="nmf-spinner"></span>
293
+ </div>
294
+ }
295
+
296
+ <p class="nmf-error">
297
+ {{ errorMessage() }}
298
+ </p>
299
+ </div>
300
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
301
+ }
302
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: FormFieldComponent, decorators: [{
303
+ type: Component,
304
+ args: [{
305
+ selector: 'nmf-form-field',
306
+ standalone: true,
307
+ imports: [CommonModule, ReactiveFormsModule],
308
+ changeDetection: ChangeDetectionStrategy.OnPush,
309
+ template: `
310
+ <div class="nmf-field" [class.loading]="loading()">
311
+ @if (label()) {
312
+ <label class="nmf-label">
313
+ {{ label() }}
314
+ @if (isRequired()) {
315
+ <span class="nmf-required">*</span>
316
+ }
317
+ </label>
318
+ }
319
+
320
+ <ng-content></ng-content>
321
+
322
+ @if (loading()) {
323
+ <div class="nmf-loading">
324
+ <span class="nmf-spinner"></span>
325
+ </div>
326
+ }
327
+
328
+ <p class="nmf-error">
329
+ {{ errorMessage() }}
330
+ </p>
331
+ </div>
332
+ `,
333
+ }]
334
+ }] });
335
+
263
336
  class InputCurrencyComponent extends FormControlBase {
264
337
  displayValue = signal(null);
265
338
  behavior = new CurrencyBehavior();
@@ -289,16 +362,12 @@ class InputCurrencyComponent extends FormControlBase {
289
362
  });
290
363
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputCurrencyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
291
364
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: InputCurrencyComponent, isStandalone: true, selector: "nmf-currency", usesInheritance: true, ngImport: i0, template: `
292
- <div class="nmf-field">
293
- @if (label()) {
294
- <label class="nmf-label">
295
- {{ label() }}
296
- @if (isRequired()) {
297
- <span class="nmf-required">*</span>
298
- }
299
- </label>
300
- }
301
-
365
+ <nmf-form-field
366
+ [label]="label()"
367
+ [isRequired]="isRequired()"
368
+ [loading]="loading()"
369
+ [errorMessage]="errorMessage()"
370
+ >
302
371
  <div class="nmf-input-wrapper nmf-input-prefix">
303
372
  @if (displayValue() != null) {
304
373
  <span
@@ -331,39 +400,23 @@ class InputCurrencyComponent extends FormControlBase {
331
400
  (keydown)="handleKeyDown($event)"
332
401
  />
333
402
  </div>
334
-
335
- <ng-content></ng-content>
336
-
337
- @if (loading()) {
338
- <div class="nmf-loading">
339
- <span class="nmf-spinner"></span>
340
- </div>
341
- }
342
-
343
- <p class="nmf-error">
344
- {{ errorMessage() }}
345
- </p>
346
- </div>
347
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
403
+ </nmf-form-field>
404
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: FormFieldComponent, selector: "nmf-form-field", inputs: ["label", "isRequired", "loading", "errorMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
348
405
  }
349
406
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputCurrencyComponent, decorators: [{
350
407
  type: Component,
351
408
  args: [{
352
409
  selector: 'nmf-currency',
353
410
  standalone: true,
354
- imports: [CommonModule, ReactiveFormsModule],
411
+ imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],
355
412
  changeDetection: ChangeDetectionStrategy.OnPush,
356
413
  template: `
357
- <div class="nmf-field">
358
- @if (label()) {
359
- <label class="nmf-label">
360
- {{ label() }}
361
- @if (isRequired()) {
362
- <span class="nmf-required">*</span>
363
- }
364
- </label>
365
- }
366
-
414
+ <nmf-form-field
415
+ [label]="label()"
416
+ [isRequired]="isRequired()"
417
+ [loading]="loading()"
418
+ [errorMessage]="errorMessage()"
419
+ >
367
420
  <div class="nmf-input-wrapper nmf-input-prefix">
368
421
  @if (displayValue() != null) {
369
422
  <span
@@ -396,19 +449,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
396
449
  (keydown)="handleKeyDown($event)"
397
450
  />
398
451
  </div>
399
-
400
- <ng-content></ng-content>
401
-
402
- @if (loading()) {
403
- <div class="nmf-loading">
404
- <span class="nmf-spinner"></span>
405
- </div>
406
- }
407
-
408
- <p class="nmf-error">
409
- {{ errorMessage() }}
410
- </p>
411
- </div>
452
+ </nmf-form-field>
412
453
  `,
413
454
  }]
414
455
  }] });
@@ -445,17 +486,13 @@ class InputDatepickerComponent extends FormControlBase {
445
486
  this.onChange(parsed);
446
487
  }
447
488
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputDatepickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
448
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: InputDatepickerComponent, isStandalone: true, selector: "nmf-datepicker", inputs: { minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
449
- <div class="nmf-field" [class.loading]="loading()">
450
- @if (label()) {
451
- <label class="nmf-label">
452
- {{ label() }}
453
- @if (isRequired()) {
454
- <span class="nmf-required">*</span>
455
- }
456
- </label>
457
- }
458
-
489
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.21", type: InputDatepickerComponent, isStandalone: true, selector: "nmf-datepicker", inputs: { minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
490
+ <nmf-form-field
491
+ [label]="label()"
492
+ [isRequired]="isRequired()"
493
+ [loading]="loading()"
494
+ [errorMessage]="errorMessage()"
495
+ >
459
496
  <input
460
497
  type="date"
461
498
  class="nmf-input"
@@ -473,39 +510,23 @@ class InputDatepickerComponent extends FormControlBase {
473
510
  (blur)="onTouched()"
474
511
  (input)="onInput($event)"
475
512
  />
476
-
477
- <ng-content></ng-content>
478
-
479
- @if (loading()) {
480
- <div class="nmf-loading">
481
- <span class="nmf-spinner"></span>
482
- </div>
483
- }
484
-
485
- <p class="nmf-error">
486
- {{ errorMessage() }}
487
- </p>
488
- </div>
489
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
513
+ </nmf-form-field>
514
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: FormFieldComponent, selector: "nmf-form-field", inputs: ["label", "isRequired", "loading", "errorMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
490
515
  }
491
516
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputDatepickerComponent, decorators: [{
492
517
  type: Component,
493
518
  args: [{
494
519
  selector: 'nmf-datepicker',
495
520
  standalone: true,
496
- imports: [CommonModule, ReactiveFormsModule],
521
+ imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],
497
522
  changeDetection: ChangeDetectionStrategy.OnPush,
498
523
  template: `
499
- <div class="nmf-field" [class.loading]="loading()">
500
- @if (label()) {
501
- <label class="nmf-label">
502
- {{ label() }}
503
- @if (isRequired()) {
504
- <span class="nmf-required">*</span>
505
- }
506
- </label>
507
- }
508
-
524
+ <nmf-form-field
525
+ [label]="label()"
526
+ [isRequired]="isRequired()"
527
+ [loading]="loading()"
528
+ [errorMessage]="errorMessage()"
529
+ >
509
530
  <input
510
531
  type="date"
511
532
  class="nmf-input"
@@ -523,25 +544,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
523
544
  (blur)="onTouched()"
524
545
  (input)="onInput($event)"
525
546
  />
526
-
527
- <ng-content></ng-content>
528
-
529
- @if (loading()) {
530
- <div class="nmf-loading">
531
- <span class="nmf-spinner"></span>
532
- </div>
533
- }
534
-
535
- <p class="nmf-error">
536
- {{ errorMessage() }}
537
- </p>
538
- </div>
547
+ </nmf-form-field>
539
548
  `,
540
549
  }]
541
550
  }] });
542
551
 
543
552
  class InputNumberComponent extends FormControlBase {
544
- formatNumberValue = input(false);
553
+ formatValue = input(false);
545
554
  displayValue = signal('');
546
555
  behavior = new TextBehavior();
547
556
  currencyBehavior = new CurrencyBehavior();
@@ -561,7 +570,7 @@ class InputNumberComponent extends FormControlBase {
561
570
  this.onChange(parsed);
562
571
  }
563
572
  updateDisplayValue(value) {
564
- if (this.formatNumberValue() && value != null) {
573
+ if (this.formatValue() && value != null) {
565
574
  this.displayValue.set(formatNumber(value) ?? '');
566
575
  }
567
576
  else {
@@ -569,17 +578,13 @@ class InputNumberComponent extends FormControlBase {
569
578
  }
570
579
  }
571
580
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputNumberComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
572
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: InputNumberComponent, isStandalone: true, selector: "nmf-number", inputs: { formatNumberValue: { classPropertyName: "formatNumberValue", publicName: "formatNumberValue", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
573
- <div class="nmf-field">
574
- @if (label()) {
575
- <label class="nmf-label">
576
- {{ label() }}
577
- @if (isRequired()) {
578
- <span class="nmf-required">*</span>
579
- }
580
- </label>
581
- }
582
-
581
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.21", type: InputNumberComponent, isStandalone: true, selector: "nmf-number", inputs: { formatValue: { classPropertyName: "formatValue", publicName: "formatValue", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
582
+ <nmf-form-field
583
+ [label]="label()"
584
+ [isRequired]="isRequired()"
585
+ [loading]="loading()"
586
+ [errorMessage]="errorMessage()"
587
+ >
583
588
  <input
584
589
  autocomplete="off"
585
590
  class="nmf-input"
@@ -588,7 +593,7 @@ class InputNumberComponent extends FormControlBase {
588
593
  [class.disabled]="disabled()"
589
594
  [id]="id()"
590
595
  [name]="name()"
591
- [type]="formatNumberValue() ? 'text' : 'number'"
596
+ [type]="formatValue() ? 'text' : 'number'"
592
597
  [value]="displayValue()"
593
598
  [disabled]="disabled()"
594
599
  [required]="isRequired()"
@@ -597,39 +602,23 @@ class InputNumberComponent extends FormControlBase {
597
602
  (input)="onInput($event)"
598
603
  (keydown)="handleKeyDown($event)"
599
604
  />
600
-
601
- <ng-content></ng-content>
602
-
603
- <p class="nmf-error">
604
- {{ errorMessage() }}
605
- </p>
606
-
607
- @if (loading()) {
608
- <div class="nmf-loading">
609
- <span class="nmf-spinner"></span>
610
- </div>
611
- }
612
- </div>
613
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
605
+ </nmf-form-field>
606
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: FormFieldComponent, selector: "nmf-form-field", inputs: ["label", "isRequired", "loading", "errorMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
614
607
  }
615
608
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputNumberComponent, decorators: [{
616
609
  type: Component,
617
610
  args: [{
618
611
  selector: 'nmf-number',
619
612
  standalone: true,
620
- imports: [CommonModule, ReactiveFormsModule],
613
+ imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],
621
614
  changeDetection: ChangeDetectionStrategy.OnPush,
622
615
  template: `
623
- <div class="nmf-field">
624
- @if (label()) {
625
- <label class="nmf-label">
626
- {{ label() }}
627
- @if (isRequired()) {
628
- <span class="nmf-required">*</span>
629
- }
630
- </label>
631
- }
632
-
616
+ <nmf-form-field
617
+ [label]="label()"
618
+ [isRequired]="isRequired()"
619
+ [loading]="loading()"
620
+ [errorMessage]="errorMessage()"
621
+ >
633
622
  <input
634
623
  autocomplete="off"
635
624
  class="nmf-input"
@@ -638,7 +627,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
638
627
  [class.disabled]="disabled()"
639
628
  [id]="id()"
640
629
  [name]="name()"
641
- [type]="formatNumberValue() ? 'text' : 'number'"
630
+ [type]="formatValue() ? 'text' : 'number'"
642
631
  [value]="displayValue()"
643
632
  [disabled]="disabled()"
644
633
  [required]="isRequired()"
@@ -647,19 +636,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
647
636
  (input)="onInput($event)"
648
637
  (keydown)="handleKeyDown($event)"
649
638
  />
650
-
651
- <ng-content></ng-content>
652
-
653
- <p class="nmf-error">
654
- {{ errorMessage() }}
655
- </p>
656
-
657
- @if (loading()) {
658
- <div class="nmf-loading">
659
- <span class="nmf-spinner"></span>
660
- </div>
661
- }
662
- </div>
639
+ </nmf-form-field>
663
640
  `,
664
641
  }]
665
642
  }] });
@@ -670,15 +647,12 @@ class InputSelectComponent extends FormControlBase {
670
647
  clearOptionLabel = input('Clear selection');
671
648
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
672
649
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: InputSelectComponent, isStandalone: true, selector: "nmf-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, emptyOptionLabel: { classPropertyName: "emptyOptionLabel", publicName: "emptyOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, clearOptionLabel: { classPropertyName: "clearOptionLabel", publicName: "clearOptionLabel", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
673
- <div class="nmf-field" [class.loading]="loading()">
674
- @if (label()) {
675
- <label class="nmf-label">
676
- {{ label() }}
677
- @if (isRequired()) {
678
- <span class="nmf-required">*</span>
679
- }
680
- </label>
681
- }
650
+ <nmf-form-field
651
+ [label]="label()"
652
+ [isRequired]="isRequired()"
653
+ [loading]="loading()"
654
+ [errorMessage]="errorMessage()"
655
+ >
682
656
  <div class="select-wrapper" [class.disabled]="disabled()">
683
657
  <select
684
658
  class="nmf-input"
@@ -709,36 +683,23 @@ class InputSelectComponent extends FormControlBase {
709
683
  }
710
684
  </select>
711
685
  </div>
712
-
713
- @if (loading()) {
714
- <div class="nmf-loading">
715
- <span class="nmf-spinner"></span>
716
- </div>
717
- }
718
-
719
- <p class="nmf-error">
720
- {{ errorMessage() }}
721
- </p>
722
- </div>
723
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
686
+ </nmf-form-field>
687
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FormFieldComponent, selector: "nmf-form-field", inputs: ["label", "isRequired", "loading", "errorMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
724
688
  }
725
689
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputSelectComponent, decorators: [{
726
690
  type: Component,
727
691
  args: [{
728
692
  selector: 'nmf-select',
729
693
  standalone: true,
730
- imports: [CommonModule, ReactiveFormsModule],
694
+ imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],
731
695
  changeDetection: ChangeDetectionStrategy.OnPush,
732
696
  template: `
733
- <div class="nmf-field" [class.loading]="loading()">
734
- @if (label()) {
735
- <label class="nmf-label">
736
- {{ label() }}
737
- @if (isRequired()) {
738
- <span class="nmf-required">*</span>
739
- }
740
- </label>
741
- }
697
+ <nmf-form-field
698
+ [label]="label()"
699
+ [isRequired]="isRequired()"
700
+ [loading]="loading()"
701
+ [errorMessage]="errorMessage()"
702
+ >
742
703
  <div class="select-wrapper" [class.disabled]="disabled()">
743
704
  <select
744
705
  class="nmf-input"
@@ -769,17 +730,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
769
730
  }
770
731
  </select>
771
732
  </div>
772
-
773
- @if (loading()) {
774
- <div class="nmf-loading">
775
- <span class="nmf-spinner"></span>
776
- </div>
777
- }
778
-
779
- <p class="nmf-error">
780
- {{ errorMessage() }}
781
- </p>
782
- </div>
733
+ </nmf-form-field>
783
734
  `,
784
735
  }]
785
736
  }] });
@@ -792,16 +743,12 @@ class InputTextComponent extends FormControlBase {
792
743
  : this.type());
793
744
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputTextComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
794
745
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: InputTextComponent, isStandalone: true, selector: "nmf-text", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
795
- <div class="nmf-field">
796
- @if (label()) {
797
- <label class="nmf-label">
798
- {{ label() }}
799
- @if (isRequired()) {
800
- <span class="nmf-required">*</span>
801
- }
802
- </label>
803
- }
804
-
746
+ <nmf-form-field
747
+ [label]="label()"
748
+ [isRequired]="isRequired()"
749
+ [loading]="loading()"
750
+ [errorMessage]="errorMessage()"
751
+ >
805
752
  <div class="nmf-input-wrapper">
806
753
  <input
807
754
  class="nmf-input"
@@ -832,19 +779,7 @@ class InputTextComponent extends FormControlBase {
832
779
  </button>
833
780
  }
834
781
  </div>
835
-
836
- <ng-content></ng-content>
837
-
838
- <p class="nmf-error">
839
- {{ errorMessage() }}
840
- </p>
841
-
842
- @if (loading()) {
843
- <div class="nmf-loading">
844
- <span class="nmf-spinner"></span>
845
- </div>
846
- }
847
- </div>
782
+ </nmf-form-field>
848
783
 
849
784
  <ng-template #eyeIcon>
850
785
  <svg
@@ -880,26 +815,22 @@ class InputTextComponent extends FormControlBase {
880
815
  />
881
816
  </svg>
882
817
  </ng-template>
883
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
818
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FormFieldComponent, selector: "nmf-form-field", inputs: ["label", "isRequired", "loading", "errorMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
884
819
  }
885
820
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputTextComponent, decorators: [{
886
821
  type: Component,
887
822
  args: [{
888
823
  selector: 'nmf-text',
889
824
  standalone: true,
890
- imports: [CommonModule, ReactiveFormsModule],
825
+ imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],
891
826
  changeDetection: ChangeDetectionStrategy.OnPush,
892
827
  template: `
893
- <div class="nmf-field">
894
- @if (label()) {
895
- <label class="nmf-label">
896
- {{ label() }}
897
- @if (isRequired()) {
898
- <span class="nmf-required">*</span>
899
- }
900
- </label>
901
- }
902
-
828
+ <nmf-form-field
829
+ [label]="label()"
830
+ [isRequired]="isRequired()"
831
+ [loading]="loading()"
832
+ [errorMessage]="errorMessage()"
833
+ >
903
834
  <div class="nmf-input-wrapper">
904
835
  <input
905
836
  class="nmf-input"
@@ -930,19 +861,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
930
861
  </button>
931
862
  }
932
863
  </div>
933
-
934
- <ng-content></ng-content>
935
-
936
- <p class="nmf-error">
937
- {{ errorMessage() }}
938
- </p>
939
-
940
- @if (loading()) {
941
- <div class="nmf-loading">
942
- <span class="nmf-spinner"></span>
943
- </div>
944
- }
945
- </div>
864
+ </nmf-form-field>
946
865
 
947
866
  <ng-template #eyeIcon>
948
867
  <svg
@@ -986,17 +905,13 @@ class InputTextareaComponent extends FormControlBase {
986
905
  rows = input(5);
987
906
  cols = input(5);
988
907
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputTextareaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
989
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: InputTextareaComponent, isStandalone: true, selector: "nmf-textarea", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, cols: { classPropertyName: "cols", publicName: "cols", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
990
- <div class="nmf-field">
991
- @if (label()) {
992
- <label class="nmf-label">
993
- {{ label() }}
994
- @if (isRequired()) {
995
- <span class="nmf-required">*</span>
996
- }
997
- </label>
998
- }
999
-
908
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.21", type: InputTextareaComponent, isStandalone: true, selector: "nmf-textarea", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, cols: { classPropertyName: "cols", publicName: "cols", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
909
+ <nmf-form-field
910
+ [label]="label()"
911
+ [isRequired]="isRequired()"
912
+ [loading]="loading()"
913
+ [errorMessage]="errorMessage()"
914
+ >
1000
915
  <textarea
1001
916
  class="nmf-input"
1002
917
  [ngClass]="classList()"
@@ -1010,37 +925,23 @@ class InputTextareaComponent extends FormControlBase {
1010
925
  [formControl]="formControl"
1011
926
  (blur)="onTouched()"
1012
927
  ></textarea>
1013
-
1014
- <p class="nmf-error">
1015
- {{ errorMessage() }}
1016
- </p>
1017
-
1018
- @if (loading()) {
1019
- <div class="nmf-loading">
1020
- <span class="nmf-spinner"></span>
1021
- </div>
1022
- }
1023
- </div>
1024
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
928
+ </nmf-form-field>
929
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FormFieldComponent, selector: "nmf-form-field", inputs: ["label", "isRequired", "loading", "errorMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1025
930
  }
1026
931
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputTextareaComponent, decorators: [{
1027
932
  type: Component,
1028
933
  args: [{
1029
934
  selector: 'nmf-textarea',
1030
935
  standalone: true,
1031
- imports: [CommonModule, ReactiveFormsModule],
936
+ imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],
1032
937
  changeDetection: ChangeDetectionStrategy.OnPush,
1033
938
  template: `
1034
- <div class="nmf-field">
1035
- @if (label()) {
1036
- <label class="nmf-label">
1037
- {{ label() }}
1038
- @if (isRequired()) {
1039
- <span class="nmf-required">*</span>
1040
- }
1041
- </label>
1042
- }
1043
-
939
+ <nmf-form-field
940
+ [label]="label()"
941
+ [isRequired]="isRequired()"
942
+ [loading]="loading()"
943
+ [errorMessage]="errorMessage()"
944
+ >
1044
945
  <textarea
1045
946
  class="nmf-input"
1046
947
  [ngClass]="classList()"
@@ -1054,17 +955,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
1054
955
  [formControl]="formControl"
1055
956
  (blur)="onTouched()"
1056
957
  ></textarea>
1057
-
1058
- <p class="nmf-error">
1059
- {{ errorMessage() }}
1060
- </p>
1061
-
1062
- @if (loading()) {
1063
- <div class="nmf-loading">
1064
- <span class="nmf-spinner"></span>
1065
- </div>
1066
- }
1067
- </div>
958
+ </nmf-form-field>
1068
959
  `,
1069
960
  }]
1070
961
  }] });
@@ -1102,17 +993,13 @@ class InputTimepickerComponent extends FormControlBase {
1102
993
  this.onChange(parsed);
1103
994
  }
1104
995
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputTimepickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1105
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: InputTimepickerComponent, isStandalone: true, selector: "nmf-timepicker", inputs: { step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
1106
- <div class="nmf-field" [class.loading]="loading()">
1107
- @if (label()) {
1108
- <label class="nmf-label">
1109
- {{ label() }}
1110
- @if (isRequired()) {
1111
- <span class="nmf-required">*</span>
1112
- }
1113
- </label>
1114
- }
1115
-
996
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.21", type: InputTimepickerComponent, isStandalone: true, selector: "nmf-timepicker", inputs: { step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
997
+ <nmf-form-field
998
+ [label]="label()"
999
+ [isRequired]="isRequired()"
1000
+ [loading]="loading()"
1001
+ [errorMessage]="errorMessage()"
1002
+ >
1116
1003
  <input
1117
1004
  type="time"
1118
1005
  autocomplete="off"
@@ -1130,39 +1017,23 @@ class InputTimepickerComponent extends FormControlBase {
1130
1017
  (blur)="onTouched()"
1131
1018
  (input)="onInput($event)"
1132
1019
  />
1133
-
1134
- <ng-content></ng-content>
1135
-
1136
- @if (loading()) {
1137
- <div class="nmf-loading">
1138
- <span class="nmf-spinner"></span>
1139
- </div>
1140
- }
1141
-
1142
- <p class="nmf-error">
1143
- {{ errorMessage() }}
1144
- </p>
1145
- </div>
1146
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1020
+ </nmf-form-field>
1021
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: FormFieldComponent, selector: "nmf-form-field", inputs: ["label", "isRequired", "loading", "errorMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1147
1022
  }
1148
1023
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: InputTimepickerComponent, decorators: [{
1149
1024
  type: Component,
1150
1025
  args: [{
1151
1026
  selector: 'nmf-timepicker',
1152
1027
  standalone: true,
1153
- imports: [CommonModule, ReactiveFormsModule],
1028
+ imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],
1154
1029
  changeDetection: ChangeDetectionStrategy.OnPush,
1155
1030
  template: `
1156
- <div class="nmf-field" [class.loading]="loading()">
1157
- @if (label()) {
1158
- <label class="nmf-label">
1159
- {{ label() }}
1160
- @if (isRequired()) {
1161
- <span class="nmf-required">*</span>
1162
- }
1163
- </label>
1164
- }
1165
-
1031
+ <nmf-form-field
1032
+ [label]="label()"
1033
+ [isRequired]="isRequired()"
1034
+ [loading]="loading()"
1035
+ [errorMessage]="errorMessage()"
1036
+ >
1166
1037
  <input
1167
1038
  type="time"
1168
1039
  autocomplete="off"
@@ -1180,19 +1051,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
1180
1051
  (blur)="onTouched()"
1181
1052
  (input)="onInput($event)"
1182
1053
  />
1183
-
1184
- <ng-content></ng-content>
1185
-
1186
- @if (loading()) {
1187
- <div class="nmf-loading">
1188
- <span class="nmf-spinner"></span>
1189
- </div>
1190
- }
1191
-
1192
- <p class="nmf-error">
1193
- {{ errorMessage() }}
1194
- </p>
1195
- </div>
1054
+ </nmf-form-field>
1196
1055
  `,
1197
1056
  }]
1198
1057
  }] });
@@ -1232,14 +1091,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
1232
1091
  }] });
1233
1092
 
1234
1093
  class FormSerializer {
1235
- toRequest(form, registry = {}) {
1094
+ toRequest(form, registry = {}, options) {
1236
1095
  const result = {};
1237
1096
  Object.entries(form.controls).forEach(([key, control]) => {
1238
1097
  const mapFn = registry[key]?.toRequest;
1239
1098
  if (control instanceof FormGroup) {
1240
1099
  result[key] = mapFn
1241
- ? mapFn(control.value)
1242
- : this.toRequest(control, registry);
1100
+ ? mapFn(control.value, options)
1101
+ : this.toRequest(control, registry, options);
1243
1102
  return;
1244
1103
  }
1245
1104
  result[key] = control.value;
@@ -1311,7 +1170,7 @@ class FormOrchestrator extends FormMapperBase {
1311
1170
  if (!(key in model))
1312
1171
  return;
1313
1172
  const mapper = registry[key];
1314
- const value = model?.[key];
1173
+ const value = model[key];
1315
1174
  if (control instanceof FormGroup) {
1316
1175
  const mapped = mapper ? mapper.fromModel(value) : value;
1317
1176
  if (isRecord(mapped)) {
@@ -1320,8 +1179,8 @@ class FormOrchestrator extends FormMapperBase {
1320
1179
  }
1321
1180
  });
1322
1181
  }
1323
- buildRequest() {
1324
- return this.serializer.toRequest(this.form(), this.mapperRegistry());
1182
+ buildRequest(options) {
1183
+ return this.serializer.toRequest(this.form(), this.mapperRegistry(), options);
1325
1184
  }
1326
1185
  ngOnDestroy() {
1327
1186
  this._logicSubscription.unsubscribe();