@letsprogram/ng-oat 0.1.3 → 0.1.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letsprogram/ng-oat",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Angular component library built on top of the Oat CSS framework — signals-first, lightweight, and accessible.",
5
5
  "license": "MIT",
6
6
  "author": "SashiKumar Yadav",
@@ -1,6 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { EnvironmentProviders, TemplateRef, ViewContainerRef, OnInit, OnDestroy, InjectionToken, AfterViewInit } from '@angular/core';
2
+ import { EnvironmentProviders, TemplateRef, ViewContainerRef, OnInit, OnDestroy, InjectionToken, AfterViewInit, ModelSignal } from '@angular/core';
3
3
  import { FormCheckboxControl, FormValueControl, ValidationError, FieldState } from '@angular/forms/signals';
4
+ import { ControlValueAccessor } from '@angular/forms';
4
5
 
5
6
  /** Configuration for provideNgOat() */
6
7
  interface NgOatOptions {
@@ -707,12 +708,13 @@ declare class NgOatSpinner {
707
708
  declare class NgOatSwitch implements FormCheckboxControl {
708
709
  readonly label: _angular_core.InputSignal<string>;
709
710
  readonly checked: _angular_core.ModelSignal<boolean>;
710
- readonly disabled: _angular_core.InputSignal<boolean>;
711
+ readonly disabled: _angular_core.ModelSignal<boolean>;
712
+ readonly touched: _angular_core.ModelSignal<boolean>;
711
713
  readonly value: undefined;
712
714
  readonly changed: _angular_core.OutputEmitterRef<boolean>;
713
715
  onInputChange(event: Event): void;
714
716
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatSwitch, never>;
715
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatSwitch, "ng-oat-switch", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
717
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatSwitch, "ng-oat-switch", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "disabled": "disabledChange"; "touched": "touchedChange"; "changed": "changed"; }, never, never, true, never>;
716
718
  }
717
719
 
718
720
  type NgOatSkeletonType = 'line' | 'box';
@@ -807,7 +809,8 @@ interface NgOatTableColumn {
807
809
  * <ng-oat-table
808
810
  * [columns]="[{key:'name', label:'Name'}, {key:'email', label:'Email'}]"
809
811
  * [data]="users"
810
- * [striped]="true"
812
+ * [scrollX]="true"
813
+ * [scrollY]="'320px'"
811
814
  * (rowClick)="onRowClick($event)">
812
815
  * </ng-oat-table>
813
816
  * ```
@@ -818,10 +821,12 @@ declare class NgOatTable {
818
821
  readonly striped: _angular_core.InputSignal<boolean>;
819
822
  readonly clickable: _angular_core.InputSignal<boolean>;
820
823
  readonly emptyText: _angular_core.InputSignal<string>;
824
+ readonly scrollX: _angular_core.InputSignal<boolean>;
825
+ readonly scrollY: _angular_core.InputSignal<string>;
821
826
  readonly rowClick: _angular_core.OutputEmitterRef<Record<string, any>>;
822
827
  onRowClick(row: Record<string, any>): void;
823
828
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatTable, never>;
824
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatTable, "ng-oat-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; }, { "rowClick": "rowClick"; }, never, never, true, never>;
829
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatTable, "ng-oat-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "scrollX": { "alias": "scrollX"; "required": false; "isSignal": true; }; "scrollY": { "alias": "scrollY"; "required": false; "isSignal": true; }; }, { "rowClick": "rowClick"; }, never, never, true, never>;
825
830
  }
826
831
 
827
832
  /**
@@ -1106,9 +1111,10 @@ declare class NgOatFileUpload {
1106
1111
  declare class NgOatInputOtp implements FormValueControl<string> {
1107
1112
  readonly length: _angular_core.InputSignal<number>;
1108
1113
  readonly separator: _angular_core.InputSignal<number>;
1109
- readonly disabled: _angular_core.InputSignal<boolean>;
1114
+ readonly disabled: _angular_core.ModelSignal<boolean>;
1110
1115
  readonly mask: _angular_core.InputSignal<boolean>;
1111
1116
  readonly value: _angular_core.ModelSignal<string>;
1117
+ readonly touched: _angular_core.ModelSignal<boolean>;
1112
1118
  readonly checked: undefined;
1113
1119
  private slotInputRefs;
1114
1120
  protected slots: _angular_core.Signal<string[]>;
@@ -1120,7 +1126,7 @@ declare class NgOatInputOtp implements FormValueControl<string> {
1120
1126
  private focusSlot;
1121
1127
  focus(options?: FocusOptions): void;
1122
1128
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatInputOtp, never>;
1123
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatInputOtp, "ng-oat-input-otp", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "mask": { "alias": "mask"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1129
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatInputOtp, "ng-oat-input-otp", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "mask": { "alias": "mask"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1124
1130
  }
1125
1131
 
1126
1132
  /**
@@ -1135,7 +1141,7 @@ declare class NgOatInputOtp implements FormValueControl<string> {
1135
1141
  */
1136
1142
  declare class NgOatSearchInput implements FormValueControl<string>, OnInit, OnDestroy {
1137
1143
  readonly placeholder: _angular_core.InputSignal<string>;
1138
- readonly disabled: _angular_core.InputSignal<boolean>;
1144
+ readonly disabled: _angular_core.ModelSignal<boolean>;
1139
1145
  readonly shortcut: _angular_core.InputSignal<string>;
1140
1146
  readonly debounceMs: _angular_core.InputSignal<number>;
1141
1147
  readonly value: _angular_core.ModelSignal<string>;
@@ -1157,7 +1163,7 @@ declare class NgOatSearchInput implements FormValueControl<string>, OnInit, OnDe
1157
1163
  focus(options?: FocusOptions): void;
1158
1164
  private focusInput;
1159
1165
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatSearchInput, never>;
1160
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatSearchInput, "ng-oat-search-input", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "search": "search"; "touched": "touchedChange"; }, never, never, true, never>;
1166
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatSearchInput, "ng-oat-search-input", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "value": "valueChange"; "search": "search"; "touched": "touchedChange"; }, never, never, true, never>;
1161
1167
  }
1162
1168
 
1163
1169
  type NgOatSeparatorOrientation = 'horizontal' | 'vertical';
@@ -1644,7 +1650,7 @@ declare class NgOatThemeSelectorIcon {
1644
1650
  */
1645
1651
  declare class NgOatThemeSelector implements OnInit {
1646
1652
  /** Display mode: dropdown menu or inline toggle group */
1647
- readonly mode: _angular_core.InputSignal<"dropdown" | "toggle">;
1653
+ readonly mode: _angular_core.InputSignal<"toggle" | "dropdown">;
1648
1654
  /** Initial theme (overrides localStorage if set) */
1649
1655
  readonly initialTheme: _angular_core.InputSignal<NgOatTheme | undefined>;
1650
1656
  /**
@@ -1711,7 +1717,7 @@ declare class NgOatInput implements FormValueControl<string> {
1711
1717
  private static nextId;
1712
1718
  readonly value: _angular_core.ModelSignal<string>;
1713
1719
  readonly checked: undefined;
1714
- readonly disabled: _angular_core.InputSignal<boolean>;
1720
+ readonly disabled: _angular_core.ModelSignal<boolean>;
1715
1721
  readonly readonly: _angular_core.InputSignal<boolean>;
1716
1722
  readonly required: _angular_core.InputSignal<boolean>;
1717
1723
  readonly invalid: _angular_core.InputSignal<boolean>;
@@ -1725,12 +1731,12 @@ declare class NgOatInput implements FormValueControl<string> {
1725
1731
  readonly type: _angular_core.InputSignal<NgOatInputType>;
1726
1732
  readonly placeholder: _angular_core.InputSignal<string>;
1727
1733
  readonly showErrors: _angular_core.InputSignal<boolean>;
1728
- protected inputId: _angular_core.Signal<string>;
1734
+ protected readonly inputId: string;
1729
1735
  onInput(event: Event): void;
1730
1736
  onBlur(): void;
1731
1737
  focus(options?: FocusOptions): void;
1732
1738
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatInput, never>;
1733
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatInput, "ng-oat-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1739
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatInput, "ng-oat-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "touched": "touchedChange"; }, never, never, true, never>;
1734
1740
  }
1735
1741
 
1736
1742
  /**
@@ -1751,7 +1757,7 @@ declare class NgOatTextarea implements FormValueControl<string> {
1751
1757
  private static nextId;
1752
1758
  readonly value: _angular_core.ModelSignal<string>;
1753
1759
  readonly checked: undefined;
1754
- readonly disabled: _angular_core.InputSignal<boolean>;
1760
+ readonly disabled: _angular_core.ModelSignal<boolean>;
1755
1761
  readonly readonly: _angular_core.InputSignal<boolean>;
1756
1762
  readonly required: _angular_core.InputSignal<boolean>;
1757
1763
  readonly invalid: _angular_core.InputSignal<boolean>;
@@ -1763,12 +1769,12 @@ declare class NgOatTextarea implements FormValueControl<string> {
1763
1769
  readonly placeholder: _angular_core.InputSignal<string>;
1764
1770
  readonly rows: _angular_core.InputSignal<number>;
1765
1771
  readonly showErrors: _angular_core.InputSignal<boolean>;
1766
- protected textareaId: _angular_core.Signal<string>;
1772
+ protected readonly textareaId: string;
1767
1773
  onInput(event: Event): void;
1768
1774
  onBlur(): void;
1769
1775
  focus(options?: FocusOptions): void;
1770
1776
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatTextarea, never>;
1771
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatTextarea, "ng-oat-textarea", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1777
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatTextarea, "ng-oat-textarea", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "touched": "touchedChange"; }, never, never, true, never>;
1772
1778
  }
1773
1779
 
1774
1780
  interface NgOatSelectOption {
@@ -1797,7 +1803,7 @@ declare class NgOatSelect implements FormValueControl<string> {
1797
1803
  private static nextId;
1798
1804
  readonly checked: undefined;
1799
1805
  readonly value: _angular_core.ModelSignal<string>;
1800
- readonly disabled: _angular_core.InputSignal<boolean>;
1806
+ readonly disabled: _angular_core.ModelSignal<boolean>;
1801
1807
  readonly required: _angular_core.InputSignal<boolean>;
1802
1808
  readonly invalid: _angular_core.InputSignal<boolean>;
1803
1809
  readonly errors: _angular_core.InputSignal<readonly ValidationError.WithOptionalFieldTree[]>;
@@ -1806,12 +1812,12 @@ declare class NgOatSelect implements FormValueControl<string> {
1806
1812
  readonly placeholder: _angular_core.InputSignal<string>;
1807
1813
  readonly options: _angular_core.InputSignal<NgOatSelectOption[]>;
1808
1814
  readonly showErrors: _angular_core.InputSignal<boolean>;
1809
- protected selectId: _angular_core.Signal<string>;
1815
+ protected readonly selectId: string;
1810
1816
  onChange(event: Event): void;
1811
1817
  onBlur(): void;
1812
1818
  focus(options?: FocusOptions): void;
1813
1819
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatSelect, never>;
1814
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatSelect, "ng-oat-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1820
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatSelect, "ng-oat-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "touched": "touchedChange"; }, never, never, true, never>;
1815
1821
  }
1816
1822
 
1817
1823
  /**
@@ -1830,13 +1836,14 @@ declare class NgOatSelect implements FormValueControl<string> {
1830
1836
  */
1831
1837
  declare class NgOatCheckbox implements FormCheckboxControl {
1832
1838
  readonly checked: _angular_core.ModelSignal<boolean>;
1833
- readonly disabled: _angular_core.InputSignal<boolean>;
1839
+ readonly disabled: _angular_core.ModelSignal<boolean>;
1840
+ readonly touched: _angular_core.ModelSignal<boolean>;
1834
1841
  /** FormCheckboxControl requires `value` to be undefined */
1835
1842
  readonly value: undefined;
1836
1843
  readonly label: _angular_core.InputSignal<string>;
1837
1844
  onChange(event: Event): void;
1838
1845
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatCheckbox, never>;
1839
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatCheckbox, "ng-oat-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, never, never, true, never>;
1846
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatCheckbox, "ng-oat-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "disabled": "disabledChange"; "touched": "touchedChange"; }, never, never, true, never>;
1840
1847
  }
1841
1848
 
1842
1849
  interface NgOatRadioOption {
@@ -1871,7 +1878,7 @@ declare class NgOatRadioGroup implements FormValueControl<string> {
1871
1878
  private static nextId;
1872
1879
  readonly value: _angular_core.ModelSignal<string>;
1873
1880
  readonly checked: undefined;
1874
- readonly disabled: _angular_core.InputSignal<boolean>;
1881
+ readonly disabled: _angular_core.ModelSignal<boolean>;
1875
1882
  readonly required: _angular_core.InputSignal<boolean>;
1876
1883
  readonly invalid: _angular_core.InputSignal<boolean>;
1877
1884
  readonly errors: _angular_core.InputSignal<readonly ValidationError.WithOptionalFieldTree[]>;
@@ -1879,29 +1886,134 @@ declare class NgOatRadioGroup implements FormValueControl<string> {
1879
1886
  readonly label: _angular_core.InputSignal<string>;
1880
1887
  readonly options: _angular_core.InputSignal<NgOatRadioOption[]>;
1881
1888
  readonly showErrors: _angular_core.InputSignal<boolean>;
1882
- protected groupName: _angular_core.Signal<string>;
1889
+ protected readonly groupName: string;
1883
1890
  onSelect(val: string): void;
1884
1891
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatRadioGroup, never>;
1885
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatRadioGroup, "ng-oat-radio-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1892
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatRadioGroup, "ng-oat-radio-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "touched": "touchedChange"; }, never, never, true, never>;
1886
1893
  }
1887
1894
 
1888
1895
  /**
1889
- * Displays validation errors for a Signal Forms field.
1890
- * Shows errors only when the field has been touched and is invalid.
1896
+ * Displays validation errors for form fields.
1891
1897
  *
1892
- * Usage:
1898
+ * **Signal Forms** — pass the `FieldState` directly:
1893
1899
  * ```html
1894
- * <ng-oat-input label="Email" [formField]="myForm.email" />
1895
1900
  * <ng-oat-form-error [control]="myForm.email" />
1896
1901
  * ```
1902
+ *
1903
+ * **Reactive / Template-driven** — pass error strings and a visibility flag:
1904
+ * ```html
1905
+ * <ng-oat-form-error [errors]="['Email is required']" [show]="email.touched && email.invalid" />
1906
+ * ```
1897
1907
  */
1898
1908
  declare class NgOatFormError {
1899
- readonly control: _angular_core.InputSignal<FieldState<unknown, string | number>>;
1909
+ /** Signal Forms FieldState for automatic error display. */
1910
+ readonly control: _angular_core.InputSignal<FieldState<unknown, string | number> | undefined>;
1911
+ /** Plain error message strings — for Reactive / Template-driven forms. */
1912
+ readonly errors: _angular_core.InputSignal<string[]>;
1913
+ /** External visibility flag — for Reactive / Template-driven forms. */
1914
+ readonly show: _angular_core.InputSignal<boolean>;
1915
+ /** Unified list of error message strings. */
1916
+ protected readonly errorMessages: _angular_core.Signal<(string | undefined)[]>;
1900
1917
  protected readonly shouldShowError: _angular_core.Signal<boolean>;
1901
1918
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatFormError, never>;
1902
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatFormError, "ng-oat-form-error", never, { "control": { "alias": "control"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1919
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatFormError, "ng-oat-form-error", never, { "control": { "alias": "control"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "show": { "alias": "show"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1920
+ }
1921
+
1922
+ /**
1923
+ * ControlValueAccessor adapter for ng-oat **value-type** components.
1924
+ *
1925
+ * Auto-activates when a Reactive Forms or Template-driven directive is present
1926
+ * (`formControlName`, `[formControl]`, or `[(ngModel)]`).
1927
+ *
1928
+ * Add this directive to your component's `imports` alongside the form component:
1929
+ * ```typescript
1930
+ * imports: [ReactiveFormsModule, NgOatInput, NgOatValueCva]
1931
+ * ```
1932
+ *
1933
+ * ```html
1934
+ * <ng-oat-input label="Email" formControlName="email" />
1935
+ * <ng-oat-input label="Name" [(ngModel)]="name" />
1936
+ * ```
1937
+ */
1938
+ declare class NgOatValueCva implements ControlValueAccessor {
1939
+ private readonly host;
1940
+ private onChange;
1941
+ private onTouched;
1942
+ /**
1943
+ * Listen for native `input` and `change` events that bubble from the inner
1944
+ * `<input>`, `<textarea>`, or `<select>` element up to the host component.
1945
+ */
1946
+ onHostValueChange(): void;
1947
+ /** Mark as touched when focus leaves the host element tree. */
1948
+ onHostBlur(): void;
1949
+ writeValue(val: string): void;
1950
+ registerOnChange(fn: (val: string) => void): void;
1951
+ registerOnTouched(fn: () => void): void;
1952
+ setDisabledState(isDisabled: boolean): void;
1953
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatValueCva, never>;
1954
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgOatValueCva, "ng-oat-input[formControlName],ng-oat-input[formControl],ng-oat-input[ngModel],ng-oat-textarea[formControlName],ng-oat-textarea[formControl],ng-oat-textarea[ngModel],ng-oat-select[formControlName],ng-oat-select[formControl],ng-oat-select[ngModel],ng-oat-radio-group[formControlName],ng-oat-radio-group[formControl],ng-oat-radio-group[ngModel],ng-oat-search-input[formControlName],ng-oat-search-input[formControl],ng-oat-search-input[ngModel],ng-oat-input-otp[formControlName],ng-oat-input-otp[formControl],ng-oat-input-otp[ngModel]", never, {}, {}, never, never, true, never>;
1903
1955
  }
1904
1956
 
1957
+ /**
1958
+ * ControlValueAccessor adapter for ng-oat **checkbox-type** components.
1959
+ *
1960
+ * Auto-activates when a Reactive Forms or Template-driven directive is present
1961
+ * (`formControlName`, `[formControl]`, or `[(ngModel)]`).
1962
+ *
1963
+ * Add this directive to your component's `imports` alongside the form component:
1964
+ * ```typescript
1965
+ * imports: [ReactiveFormsModule, NgOatCheckbox, NgOatCheckboxCva]
1966
+ * ```
1967
+ *
1968
+ * ```html
1969
+ * <ng-oat-checkbox label="Accept terms" formControlName="accepted" />
1970
+ * <ng-oat-switch label="Alerts" [(ngModel)]="alertsOn" />
1971
+ * ```
1972
+ */
1973
+ declare class NgOatCheckboxCva implements ControlValueAccessor {
1974
+ private readonly host;
1975
+ private onChange;
1976
+ private onTouched;
1977
+ /**
1978
+ * Listen for native `change` events that bubble from the inner
1979
+ * `<input type="checkbox">` up to the host component.
1980
+ */
1981
+ onHostChange(): void;
1982
+ /** Mark as touched when focus leaves the host element tree. */
1983
+ onHostBlur(): void;
1984
+ writeValue(val: boolean): void;
1985
+ registerOnChange(fn: (val: boolean) => void): void;
1986
+ registerOnTouched(fn: () => void): void;
1987
+ setDisabledState(isDisabled: boolean): void;
1988
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatCheckboxCva, never>;
1989
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgOatCheckboxCva, "ng-oat-checkbox[formControlName],ng-oat-checkbox[formControl],ng-oat-checkbox[ngModel],ng-oat-switch[formControlName],ng-oat-switch[formControl],ng-oat-switch[ngModel]", never, {}, {}, never, never, true, never>;
1990
+ }
1991
+
1992
+ /**
1993
+ * Host interface for ng-oat components that carry a string `value`.
1994
+ * Used by the CVA adapter directives to bridge Reactive & Template-driven forms.
1995
+ */
1996
+ interface NgOatValueHost {
1997
+ readonly value: ModelSignal<string>;
1998
+ readonly touched: ModelSignal<boolean>;
1999
+ readonly disabled: ModelSignal<boolean>;
2000
+ }
2001
+ /**
2002
+ * Host interface for ng-oat checkbox-style components that carry a boolean `checked`.
2003
+ */
2004
+ interface NgOatCheckboxHost {
2005
+ readonly checked: ModelSignal<boolean>;
2006
+ readonly touched: ModelSignal<boolean>;
2007
+ readonly disabled: ModelSignal<boolean>;
2008
+ }
2009
+ /** Injection token provided by each value-type ng-oat form component. */
2010
+ declare const NG_OAT_VALUE_HOST: InjectionToken<NgOatValueHost>;
2011
+ /** Injection token provided by each checkbox-type ng-oat form component. */
2012
+ declare const NG_OAT_CHECKBOX_HOST: InjectionToken<NgOatCheckboxHost>;
2013
+
2014
+ /** Convenience array — import both CVA adapters at once. */
2015
+ declare const NgOatFormsCva: readonly [typeof NgOatValueCva, typeof NgOatCheckboxCva];
2016
+
1905
2017
  /** Upstream Oat version this build is synced to. */
1906
2018
  declare const OAT_VERSION = "0.0.0-vendored";
1907
2019
 
@@ -1920,5 +2032,5 @@ interface TooltipPositioner {
1920
2032
  /** DI token for tooltip positioning strategy */
1921
2033
  declare const TOOLTIP_POSITIONER: InjectionToken<TooltipPositioner>;
1922
2034
 
1923
- export { NG_OAT_CHIP_GROUP, NG_OAT_TOGGLE_GROUP, NgOatAccordion, NgOatAlert, NgOatAvatar, NgOatBadge, NgOatBreadcrumb, NgOatButton, NgOatCard, NgOatCardCarousel, NgOatCardFooter, NgOatCardHeader, NgOatCarousel, NgOatCheckbox, NgOatChip, NgOatChipGroup, NgOatChipInput, NgOatDialog, NgOatDialogComponent, NgOatDropdown, NgOatDropdownComponent, NgOatFileUpload, NgOatFormError, NgOatInput, NgOatInputOtp, NgOatMeter, NgOatPagination, NgOatProgress, NgOatRadioGroup, NgOatSearchInput, NgOatSelect, NgOatSeparator, NgOatSidebar, NgOatSidebarComponent, NgOatSkeleton, NgOatSpinner, NgOatSplitButton, NgOatSwitch, NgOatTable, NgOatTabs, NgOatTabsComponent, NgOatTextarea, NgOatThemeRef, NgOatThemeSelector, NgOatThemeSelectorIcon, NgOatToast, NgOatToggle, NgOatToggleGroup, NgOatToolbar, NgOatToolbarRow, NgOatTooltip, NgOatTooltipComponent, OAT_TOKEN_MAP, OAT_VERSION, OAT_VERSION_TOKEN, TOOLTIP_POSITIONER, provideNgOat, provideNgOatTheme };
1924
- export type { NgOatAccordionItem, NgOatAlertVariant, NgOatAvatarSize, NgOatBadgeVariant, NgOatButtonSize, NgOatButtonStyle, NgOatButtonVariant, NgOatCarouselAspectRatio, NgOatCarouselOrientation, NgOatCarouselSlide, NgOatChipGroupHost, NgOatChipSize, NgOatChipVariant, NgOatInputType, NgOatOptions, NgOatProductCard, NgOatRadioOption, NgOatSelectOption, NgOatSeparatorOrientation, NgOatSkeletonType, NgOatSpinnerSize, NgOatTabItem, NgOatTableColumn, NgOatTheme, NgOatThemeConfig, NgOatThemeOption, NgOatToastOptions, NgOatToastPlacement, NgOatToastVariant, NgOatToggleGroupHost, NgOatToggleGroupSize, NgOatToggleGroupVariant, NgOatToggleSize, NgOatToggleVariant, NgOatToolbarColor, OatBreadcrumbItem, OatTokens, Placement, TooltipPositioner };
2035
+ export { NG_OAT_CHECKBOX_HOST, NG_OAT_CHIP_GROUP, NG_OAT_TOGGLE_GROUP, NG_OAT_VALUE_HOST, NgOatAccordion, NgOatAlert, NgOatAvatar, NgOatBadge, NgOatBreadcrumb, NgOatButton, NgOatCard, NgOatCardCarousel, NgOatCardFooter, NgOatCardHeader, NgOatCarousel, NgOatCheckbox, NgOatCheckboxCva, NgOatChip, NgOatChipGroup, NgOatChipInput, NgOatDialog, NgOatDialogComponent, NgOatDropdown, NgOatDropdownComponent, NgOatFileUpload, NgOatFormError, NgOatFormsCva, NgOatInput, NgOatInputOtp, NgOatMeter, NgOatPagination, NgOatProgress, NgOatRadioGroup, NgOatSearchInput, NgOatSelect, NgOatSeparator, NgOatSidebar, NgOatSidebarComponent, NgOatSkeleton, NgOatSpinner, NgOatSplitButton, NgOatSwitch, NgOatTable, NgOatTabs, NgOatTabsComponent, NgOatTextarea, NgOatThemeRef, NgOatThemeSelector, NgOatThemeSelectorIcon, NgOatToast, NgOatToggle, NgOatToggleGroup, NgOatToolbar, NgOatToolbarRow, NgOatTooltip, NgOatTooltipComponent, NgOatValueCva, OAT_TOKEN_MAP, OAT_VERSION, OAT_VERSION_TOKEN, TOOLTIP_POSITIONER, provideNgOat, provideNgOatTheme };
2036
+ export type { NgOatAccordionItem, NgOatAlertVariant, NgOatAvatarSize, NgOatBadgeVariant, NgOatButtonSize, NgOatButtonStyle, NgOatButtonVariant, NgOatCarouselAspectRatio, NgOatCarouselOrientation, NgOatCarouselSlide, NgOatCheckboxHost, NgOatChipGroupHost, NgOatChipSize, NgOatChipVariant, NgOatInputType, NgOatOptions, NgOatProductCard, NgOatRadioOption, NgOatSelectOption, NgOatSeparatorOrientation, NgOatSkeletonType, NgOatSpinnerSize, NgOatTabItem, NgOatTableColumn, NgOatTheme, NgOatThemeConfig, NgOatThemeOption, NgOatToastOptions, NgOatToastPlacement, NgOatToastVariant, NgOatToggleGroupHost, NgOatToggleGroupSize, NgOatToggleGroupVariant, NgOatToggleSize, NgOatToggleVariant, NgOatToolbarColor, NgOatValueHost, OatBreadcrumbItem, OatTokens, Placement, TooltipPositioner };