@radix-ng/primitives 0.51.0 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/fesm2022/radix-ng-primitives-accordion.mjs +105 -38
  2. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  3. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +221 -129
  4. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-arrow.mjs +20 -4
  6. package/fesm2022/radix-ng-primitives-arrow.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-avatar.mjs +54 -61
  9. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-button.mjs +123 -0
  11. package/fesm2022/radix-ng-primitives-button.mjs.map +1 -0
  12. package/fesm2022/radix-ng-primitives-calendar.mjs +95 -83
  13. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-checkbox.mjs +378 -54
  15. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-collapsible.mjs +182 -81
  17. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-collection.mjs +40 -57
  19. package/fesm2022/radix-ng-primitives-collection.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-context-menu.mjs +140 -424
  22. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-core.mjs +845 -744
  24. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-cropper.mjs +288 -308
  26. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-date-field.mjs +104 -58
  28. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-dialog.mjs +655 -327
  30. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +70 -46
  32. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  33. package/fesm2022/radix-ng-primitives-drawer.mjs +960 -0
  34. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -0
  35. package/fesm2022/radix-ng-primitives-editable.mjs +304 -23
  36. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-field.mjs +363 -0
  38. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -0
  39. package/fesm2022/radix-ng-primitives-fieldset.mjs +79 -0
  40. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -0
  41. package/fesm2022/radix-ng-primitives-focus-scope.mjs +23 -8
  42. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-input.mjs +172 -0
  44. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -0
  45. package/fesm2022/radix-ng-primitives-label.mjs +6 -6
  46. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-menu.mjs +1907 -363
  48. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-menubar.mjs +290 -162
  50. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  51. package/fesm2022/radix-ng-primitives-meter.mjs +271 -0
  52. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -0
  53. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1052 -1553
  54. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  55. package/fesm2022/radix-ng-primitives-number-field.mjs +1102 -367
  56. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  57. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-popover.mjs +978 -989
  59. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-popper.mjs +111 -44
  61. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-portal.mjs +34 -10
  63. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-presence.mjs +134 -246
  65. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-preview-card.mjs +997 -0
  67. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -0
  68. package/fesm2022/radix-ng-primitives-progress.mjs +223 -84
  69. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-radio.mjs +191 -51
  71. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-roving-focus.mjs +96 -50
  73. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-scroll-area.mjs +923 -0
  75. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -0
  76. package/fesm2022/radix-ng-primitives-select.mjs +791 -509
  77. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  78. package/fesm2022/radix-ng-primitives-separator.mjs +12 -35
  79. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-slider.mjs +969 -717
  81. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  82. package/fesm2022/radix-ng-primitives-stepper.mjs +15 -19
  83. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  84. package/fesm2022/radix-ng-primitives-switch.mjs +125 -113
  85. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  86. package/fesm2022/radix-ng-primitives-tabs.mjs +390 -108
  87. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  88. package/fesm2022/radix-ng-primitives-time-field.mjs +55 -46
  89. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  90. package/fesm2022/radix-ng-primitives-toast.mjs +839 -0
  91. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -0
  92. package/fesm2022/radix-ng-primitives-toggle-group.mjs +121 -247
  93. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  94. package/fesm2022/radix-ng-primitives-toggle.mjs +98 -61
  95. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  96. package/fesm2022/radix-ng-primitives-toolbar.mjs +303 -92
  97. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  98. package/fesm2022/radix-ng-primitives-tooltip.mjs +699 -1072
  99. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  100. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +25 -66
  101. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  102. package/meter/README.md +3 -0
  103. package/navigation-menu/README.md +2 -1
  104. package/package.json +39 -18
  105. package/portal/README.md +2 -0
  106. package/preview-card/README.md +3 -0
  107. package/schematics/collection.json +1 -0
  108. package/schematics/ng-add/index.d.ts +3 -2
  109. package/schematics/ng-add/index.js +62 -31
  110. package/schematics/ng-add/index.js.map +1 -1
  111. package/schematics/ng-add/package-config.d.ts +4 -2
  112. package/schematics/ng-add/package-config.js +10 -2
  113. package/schematics/ng-add/package-config.js.map +1 -1
  114. package/schematics/ng-add/schema.d.ts +3 -0
  115. package/schematics/ng-add/schema.js +3 -0
  116. package/schematics/ng-add/schema.js.map +1 -0
  117. package/schematics/ng-add/schema.json +14 -0
  118. package/select/README.md +2 -0
  119. package/types/radix-ng-primitives-accordion.d.ts +51 -16
  120. package/types/radix-ng-primitives-alert-dialog.d.ts +95 -38
  121. package/types/radix-ng-primitives-arrow.d.ts +1 -1
  122. package/types/radix-ng-primitives-aspect-ratio.d.ts +1 -1
  123. package/types/radix-ng-primitives-avatar.d.ts +7 -11
  124. package/types/radix-ng-primitives-button.d.ts +73 -0
  125. package/types/radix-ng-primitives-calendar.d.ts +39 -20
  126. package/types/radix-ng-primitives-checkbox.d.ts +204 -35
  127. package/types/radix-ng-primitives-collapsible.d.ts +114 -40
  128. package/types/radix-ng-primitives-collection.d.ts +38 -34
  129. package/types/radix-ng-primitives-config.d.ts +1 -1
  130. package/types/radix-ng-primitives-context-menu.d.ts +61 -116
  131. package/types/radix-ng-primitives-core.d.ts +345 -235
  132. package/types/radix-ng-primitives-cropper.d.ts +89 -56
  133. package/types/radix-ng-primitives-date-field.d.ts +49 -28
  134. package/types/radix-ng-primitives-dialog.d.ts +283 -165
  135. package/types/radix-ng-primitives-dismissable-layer.d.ts +15 -7
  136. package/types/radix-ng-primitives-drawer.d.ts +426 -0
  137. package/types/radix-ng-primitives-editable.d.ts +91 -14
  138. package/types/radix-ng-primitives-field.d.ts +374 -0
  139. package/types/radix-ng-primitives-fieldset.d.ts +49 -0
  140. package/types/radix-ng-primitives-focus-scope.d.ts +15 -6
  141. package/types/radix-ng-primitives-input.d.ts +87 -0
  142. package/types/radix-ng-primitives-label.d.ts +0 -1
  143. package/types/radix-ng-primitives-menu.d.ts +584 -99
  144. package/types/radix-ng-primitives-menubar.d.ts +61 -50
  145. package/types/radix-ng-primitives-meter.d.ts +194 -0
  146. package/types/radix-ng-primitives-navigation-menu.d.ts +422 -340
  147. package/types/radix-ng-primitives-number-field.d.ts +405 -145
  148. package/types/radix-ng-primitives-pagination.d.ts +2 -2
  149. package/types/radix-ng-primitives-popover.d.ts +366 -351
  150. package/types/radix-ng-primitives-popper.d.ts +68 -11
  151. package/types/radix-ng-primitives-portal.d.ts +14 -6
  152. package/types/radix-ng-primitives-presence.d.ts +28 -76
  153. package/types/radix-ng-primitives-preview-card.d.ts +359 -0
  154. package/types/radix-ng-primitives-progress.d.ts +175 -48
  155. package/types/radix-ng-primitives-radio.d.ts +55 -25
  156. package/types/radix-ng-primitives-roving-focus.d.ts +33 -23
  157. package/types/radix-ng-primitives-scroll-area.d.ts +253 -0
  158. package/types/radix-ng-primitives-select.d.ts +475 -177
  159. package/types/radix-ng-primitives-separator.d.ts +7 -32
  160. package/types/radix-ng-primitives-slider.d.ts +315 -201
  161. package/types/radix-ng-primitives-stepper.d.ts +5 -7
  162. package/types/radix-ng-primitives-switch.d.ts +86 -71
  163. package/types/radix-ng-primitives-tabs.d.ts +213 -79
  164. package/types/radix-ng-primitives-time-field.d.ts +42 -27
  165. package/types/radix-ng-primitives-toast.d.ts +378 -0
  166. package/types/radix-ng-primitives-toggle-group.d.ts +86 -164
  167. package/types/radix-ng-primitives-toggle.d.ts +43 -53
  168. package/types/radix-ng-primitives-toolbar.d.ts +164 -38
  169. package/types/radix-ng-primitives-tooltip.d.ts +348 -384
  170. package/types/radix-ng-primitives-visually-hidden.d.ts +19 -19
  171. package/dropdown-menu/README.md +0 -1
  172. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +0 -581
  173. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +0 -1
  174. package/fesm2022/radix-ng-primitives-hover-card.mjs +0 -1238
  175. package/fesm2022/radix-ng-primitives-hover-card.mjs.map +0 -1
  176. package/fesm2022/radix-ng-primitives-select2.mjs +0 -897
  177. package/fesm2022/radix-ng-primitives-select2.mjs.map +0 -1
  178. package/fesm2022/radix-ng-primitives-tooltip2.mjs +0 -735
  179. package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +0 -1
  180. package/hover-card/README.md +0 -3
  181. package/select2/README.md +0 -3
  182. package/tooltip2/README.md +0 -3
  183. package/types/radix-ng-primitives-dropdown-menu.d.ts +0 -171
  184. package/types/radix-ng-primitives-hover-card.d.ts +0 -471
  185. package/types/radix-ng-primitives-select2.d.ts +0 -511
  186. package/types/radix-ng-primitives-tooltip2.d.ts +0 -325
@@ -0,0 +1,374 @@
1
+ import * as _radix_ng_primitives_field from '@radix-ng/primitives/field';
2
+ import * as _angular_core from '@angular/core';
3
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
+ import { BooleanInput } from '@radix-ng/primitives/core';
5
+
6
+ /**
7
+ * Connects a form control to the field label, description, error, and state.
8
+ *
9
+ * @group Components
10
+ */
11
+ declare class RdxFieldControl {
12
+ protected readonly rootContext: {
13
+ controlId: _angular_core.WritableSignal<string>;
14
+ descriptionIds: _angular_core.WritableSignal<string[]>;
15
+ errorIds: _angular_core.WritableSignal<string[]>;
16
+ invalidState: _angular_core.Signal<boolean>;
17
+ disabledState: _angular_core.Signal<boolean>;
18
+ requiredState: _angular_core.Signal<boolean>;
19
+ dirtyState: _angular_core.Signal<boolean>;
20
+ touchedState: _angular_core.Signal<boolean>;
21
+ filledState: _angular_core.Signal<boolean>;
22
+ focusedState: _angular_core.Signal<boolean>;
23
+ setControlId: (id: string) => void;
24
+ addDescriptionId: (id: string) => void;
25
+ removeDescriptionId: (id: string) => void;
26
+ addErrorId: (id: string) => void;
27
+ removeErrorId: (id: string) => void;
28
+ setFocused: (value: boolean) => void;
29
+ setFilled: (value: boolean) => void;
30
+ setDirty: (value: boolean) => void;
31
+ setTouched: (value: boolean) => void;
32
+ setStateProvider: (provider: _radix_ng_primitives_field.RdxFieldState | null) => _radix_ng_primitives_field.RdxFieldState | null;
33
+ hasStateProvider: _angular_core.Signal<boolean>;
34
+ };
35
+ private readonly elementRef;
36
+ private initialValue;
37
+ /**
38
+ * Control id. Labels and descriptions use this value for accessible relationships.
39
+ *
40
+ * @group Props
41
+ */
42
+ readonly id: _angular_core.InputSignal<string>;
43
+ protected readonly describedBy: _angular_core.Signal<string | undefined>;
44
+ constructor();
45
+ onFocus(): void;
46
+ onBlur(): void;
47
+ syncFilled(): void;
48
+ protected isNativeFormControl(): boolean;
49
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
50
+ private currentValue;
51
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxFieldControl, never>;
52
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxFieldControl, "[rdxFieldControl]", ["rdxFieldControl"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
53
+ }
54
+
55
+ /**
56
+ * Describes the field control.
57
+ *
58
+ * @group Components
59
+ */
60
+ declare class RdxFieldDescription {
61
+ protected readonly rootContext: {
62
+ controlId: _angular_core.WritableSignal<string>;
63
+ descriptionIds: _angular_core.WritableSignal<string[]>;
64
+ errorIds: _angular_core.WritableSignal<string[]>;
65
+ invalidState: _angular_core.Signal<boolean>;
66
+ disabledState: _angular_core.Signal<boolean>;
67
+ requiredState: _angular_core.Signal<boolean>;
68
+ dirtyState: _angular_core.Signal<boolean>;
69
+ touchedState: _angular_core.Signal<boolean>;
70
+ filledState: _angular_core.Signal<boolean>;
71
+ focusedState: _angular_core.Signal<boolean>;
72
+ setControlId: (id: string) => void;
73
+ addDescriptionId: (id: string) => void;
74
+ removeDescriptionId: (id: string) => void;
75
+ addErrorId: (id: string) => void;
76
+ removeErrorId: (id: string) => void;
77
+ setFocused: (value: boolean) => void;
78
+ setFilled: (value: boolean) => void;
79
+ setDirty: (value: boolean) => void;
80
+ setTouched: (value: boolean) => void;
81
+ setStateProvider: (provider: _radix_ng_primitives_field.RdxFieldState | null) => _radix_ng_primitives_field.RdxFieldState | null;
82
+ hasStateProvider: _angular_core.Signal<boolean>;
83
+ };
84
+ /**
85
+ * Description id.
86
+ *
87
+ * @group Props
88
+ */
89
+ readonly id: _angular_core.InputSignal<string>;
90
+ constructor();
91
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
92
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxFieldDescription, never>;
93
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxFieldDescription, "[rdxFieldDescription]", ["rdxFieldDescription"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
94
+ }
95
+
96
+ /**
97
+ * Describes an invalid field control.
98
+ *
99
+ * @group Components
100
+ */
101
+ declare class RdxFieldError {
102
+ protected readonly rootContext: {
103
+ controlId: _angular_core.WritableSignal<string>;
104
+ descriptionIds: _angular_core.WritableSignal<string[]>;
105
+ errorIds: _angular_core.WritableSignal<string[]>;
106
+ invalidState: _angular_core.Signal<boolean>;
107
+ disabledState: _angular_core.Signal<boolean>;
108
+ requiredState: _angular_core.Signal<boolean>;
109
+ dirtyState: _angular_core.Signal<boolean>;
110
+ touchedState: _angular_core.Signal<boolean>;
111
+ filledState: _angular_core.Signal<boolean>;
112
+ focusedState: _angular_core.Signal<boolean>;
113
+ setControlId: (id: string) => void;
114
+ addDescriptionId: (id: string) => void;
115
+ removeDescriptionId: (id: string) => void;
116
+ addErrorId: (id: string) => void;
117
+ removeErrorId: (id: string) => void;
118
+ setFocused: (value: boolean) => void;
119
+ setFilled: (value: boolean) => void;
120
+ setDirty: (value: boolean) => void;
121
+ setTouched: (value: boolean) => void;
122
+ setStateProvider: (provider: _radix_ng_primitives_field.RdxFieldState | null) => _radix_ng_primitives_field.RdxFieldState | null;
123
+ hasStateProvider: _angular_core.Signal<boolean>;
124
+ };
125
+ /**
126
+ * Error message id.
127
+ *
128
+ * @group Props
129
+ */
130
+ readonly id: _angular_core.InputSignal<string>;
131
+ constructor();
132
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
133
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxFieldError, never>;
134
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxFieldError, "[rdxFieldError]", ["rdxFieldError"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
135
+ }
136
+
137
+ /**
138
+ * Labels the field control.
139
+ *
140
+ * @group Components
141
+ */
142
+ declare class RdxFieldLabel {
143
+ protected readonly rootContext: {
144
+ controlId: _angular_core.WritableSignal<string>;
145
+ descriptionIds: _angular_core.WritableSignal<string[]>;
146
+ errorIds: _angular_core.WritableSignal<string[]>;
147
+ invalidState: _angular_core.Signal<boolean>;
148
+ disabledState: _angular_core.Signal<boolean>;
149
+ requiredState: _angular_core.Signal<boolean>;
150
+ dirtyState: _angular_core.Signal<boolean>;
151
+ touchedState: _angular_core.Signal<boolean>;
152
+ filledState: _angular_core.Signal<boolean>;
153
+ focusedState: _angular_core.Signal<boolean>;
154
+ setControlId: (id: string) => void;
155
+ addDescriptionId: (id: string) => void;
156
+ removeDescriptionId: (id: string) => void;
157
+ addErrorId: (id: string) => void;
158
+ removeErrorId: (id: string) => void;
159
+ setFocused: (value: boolean) => void;
160
+ setFilled: (value: boolean) => void;
161
+ setDirty: (value: boolean) => void;
162
+ setTouched: (value: boolean) => void;
163
+ setStateProvider: (provider: _radix_ng_primitives_field.RdxFieldState | null) => _radix_ng_primitives_field.RdxFieldState | null;
164
+ hasStateProvider: _angular_core.Signal<boolean>;
165
+ };
166
+ /**
167
+ * Label id.
168
+ *
169
+ * @group Props
170
+ */
171
+ readonly id: _angular_core.InputSignal<string>;
172
+ readonly htmlFor: () => string;
173
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
174
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxFieldLabel, never>;
175
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxFieldLabel, "[rdxFieldLabel]", ["rdxFieldLabel"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
176
+ }
177
+
178
+ /**
179
+ * External owner of field state. An adapter (e.g. a future Signal Forms
180
+ * `[rdxSignalField]` directive, or a Reactive Forms bridge) registers one via
181
+ * `setStateProvider` so Field reads authoritative form state instead of
182
+ * self-computing it from the DOM. Each member is an optional signal-like
183
+ * accessor; only the states the adapter owns need to be provided — the rest
184
+ * fall back to the root's inputs / DOM heuristic. Keeping these as plain
185
+ * `() => boolean` accessors keeps Field framework-agnostic (no dependency on
186
+ * `@angular/forms/signals`).
187
+ *
188
+ * See ADR 0004 and `signal-forms-readiness.md` (prep #4).
189
+ */
190
+ interface RdxFieldState {
191
+ invalid?: () => boolean;
192
+ disabled?: () => boolean;
193
+ required?: () => boolean;
194
+ dirty?: () => boolean;
195
+ touched?: () => boolean;
196
+ filled?: () => boolean;
197
+ focused?: () => boolean;
198
+ }
199
+ declare const fieldRootContext: () => {
200
+ controlId: _angular_core.WritableSignal<string>;
201
+ descriptionIds: _angular_core.WritableSignal<string[]>;
202
+ errorIds: _angular_core.WritableSignal<string[]>;
203
+ invalidState: _angular_core.Signal<boolean>;
204
+ disabledState: _angular_core.Signal<boolean>;
205
+ requiredState: _angular_core.Signal<boolean>;
206
+ dirtyState: _angular_core.Signal<boolean>;
207
+ touchedState: _angular_core.Signal<boolean>;
208
+ filledState: _angular_core.Signal<boolean>;
209
+ focusedState: _angular_core.Signal<boolean>;
210
+ setControlId: (id: string) => void;
211
+ addDescriptionId: (id: string) => void;
212
+ removeDescriptionId: (id: string) => void;
213
+ addErrorId: (id: string) => void;
214
+ removeErrorId: (id: string) => void;
215
+ setFocused: (value: boolean) => void;
216
+ setFilled: (value: boolean) => void;
217
+ setDirty: (value: boolean) => void;
218
+ setTouched: (value: boolean) => void;
219
+ /**
220
+ * Register (or clear with `null`) an external owner of field state.
221
+ * While a provider is registered, any state it exposes takes precedence
222
+ * over the root inputs and the DOM-derived values. Returns the previous
223
+ * provider so adapters can restore it on teardown.
224
+ */
225
+ setStateProvider: (provider: RdxFieldState | null) => RdxFieldState | null;
226
+ hasStateProvider: _angular_core.Signal<boolean>;
227
+ };
228
+ type RdxFieldRootContext = ReturnType<typeof fieldRootContext>;
229
+ declare const injectFieldRootContext: _radix_ng_primitives_core.InjectContext<{
230
+ controlId: _angular_core.WritableSignal<string>;
231
+ descriptionIds: _angular_core.WritableSignal<string[]>;
232
+ errorIds: _angular_core.WritableSignal<string[]>;
233
+ invalidState: _angular_core.Signal<boolean>;
234
+ disabledState: _angular_core.Signal<boolean>;
235
+ requiredState: _angular_core.Signal<boolean>;
236
+ dirtyState: _angular_core.Signal<boolean>;
237
+ touchedState: _angular_core.Signal<boolean>;
238
+ filledState: _angular_core.Signal<boolean>;
239
+ focusedState: _angular_core.Signal<boolean>;
240
+ setControlId: (id: string) => void;
241
+ addDescriptionId: (id: string) => void;
242
+ removeDescriptionId: (id: string) => void;
243
+ addErrorId: (id: string) => void;
244
+ removeErrorId: (id: string) => void;
245
+ setFocused: (value: boolean) => void;
246
+ setFilled: (value: boolean) => void;
247
+ setDirty: (value: boolean) => void;
248
+ setTouched: (value: boolean) => void;
249
+ /**
250
+ * Register (or clear with `null`) an external owner of field state.
251
+ * While a provider is registered, any state it exposes takes precedence
252
+ * over the root inputs and the DOM-derived values. Returns the previous
253
+ * provider so adapters can restore it on teardown.
254
+ */
255
+ setStateProvider: (provider: RdxFieldState | null) => RdxFieldState | null;
256
+ hasStateProvider: _angular_core.Signal<boolean>;
257
+ }>;
258
+ declare const provideFieldRootContext: (useFactory: () => {
259
+ controlId: _angular_core.WritableSignal<string>;
260
+ descriptionIds: _angular_core.WritableSignal<string[]>;
261
+ errorIds: _angular_core.WritableSignal<string[]>;
262
+ invalidState: _angular_core.Signal<boolean>;
263
+ disabledState: _angular_core.Signal<boolean>;
264
+ requiredState: _angular_core.Signal<boolean>;
265
+ dirtyState: _angular_core.Signal<boolean>;
266
+ touchedState: _angular_core.Signal<boolean>;
267
+ filledState: _angular_core.Signal<boolean>;
268
+ focusedState: _angular_core.Signal<boolean>;
269
+ setControlId: (id: string) => void;
270
+ addDescriptionId: (id: string) => void;
271
+ removeDescriptionId: (id: string) => void;
272
+ addErrorId: (id: string) => void;
273
+ removeErrorId: (id: string) => void;
274
+ setFocused: (value: boolean) => void;
275
+ setFilled: (value: boolean) => void;
276
+ setDirty: (value: boolean) => void;
277
+ setTouched: (value: boolean) => void;
278
+ /**
279
+ * Register (or clear with `null`) an external owner of field state.
280
+ * While a provider is registered, any state it exposes takes precedence
281
+ * over the root inputs and the DOM-derived values. Returns the previous
282
+ * provider so adapters can restore it on teardown.
283
+ */
284
+ setStateProvider: (provider: RdxFieldState | null) => RdxFieldState | null;
285
+ hasStateProvider: _angular_core.Signal<boolean>;
286
+ }) => _angular_core.Provider;
287
+ /**
288
+ * Groups a form control with its label, description, error message, and field state.
289
+ *
290
+ * @group Components
291
+ */
292
+ declare class RdxFieldRoot {
293
+ /**
294
+ * Whether the field is invalid.
295
+ *
296
+ * @group Props
297
+ * @defaultValue false
298
+ */
299
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
300
+ /**
301
+ * Whether the field is disabled.
302
+ *
303
+ * @group Props
304
+ * @defaultValue false
305
+ */
306
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
307
+ /**
308
+ * Whether the field is required.
309
+ *
310
+ * @group Props
311
+ * @defaultValue false
312
+ */
313
+ readonly required: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
314
+ /**
315
+ * Whether the field value has changed from its initial value.
316
+ *
317
+ * @group Props
318
+ * @defaultValue false
319
+ */
320
+ readonly dirty: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
321
+ /**
322
+ * Whether the field has been blurred after receiving focus.
323
+ *
324
+ * @group Props
325
+ * @defaultValue false
326
+ */
327
+ readonly touched: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
328
+ /**
329
+ * Overrides whether the control has a non-empty value.
330
+ *
331
+ * @group Props
332
+ */
333
+ readonly filled: _angular_core.InputSignal<boolean | undefined>;
334
+ /**
335
+ * Overrides whether the control is focused.
336
+ *
337
+ * @group Props
338
+ */
339
+ readonly focused: _angular_core.InputSignal<boolean | undefined>;
340
+ readonly controlId: _angular_core.WritableSignal<string>;
341
+ readonly descriptionIds: _angular_core.WritableSignal<string[]>;
342
+ readonly errorIds: _angular_core.WritableSignal<string[]>;
343
+ readonly focusedValue: _angular_core.WritableSignal<boolean>;
344
+ readonly filledValue: _angular_core.WritableSignal<boolean>;
345
+ readonly dirtyValue: _angular_core.WritableSignal<boolean>;
346
+ readonly touchedValue: _angular_core.WritableSignal<boolean>;
347
+ /** External state owner registered through the context; `null` when Field self-computes. */
348
+ private readonly stateProvider;
349
+ /** Whether an external adapter currently owns field state. */
350
+ readonly hasStateProvider: _angular_core.Signal<boolean>;
351
+ readonly invalidState: _angular_core.Signal<boolean>;
352
+ readonly disabledState: _angular_core.Signal<boolean>;
353
+ readonly requiredState: _angular_core.Signal<boolean>;
354
+ readonly dirtyState: _angular_core.Signal<boolean>;
355
+ readonly touchedState: _angular_core.Signal<boolean>;
356
+ readonly filledState: _angular_core.Signal<boolean>;
357
+ readonly focusedState: _angular_core.Signal<boolean>;
358
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
359
+ /**
360
+ * Register an external owner of field state, returning the previous one.
361
+ * @ignore
362
+ */
363
+ setStateProvider(provider: RdxFieldState | null): RdxFieldState | null;
364
+ /**
365
+ * Prefer the registered provider's value for `key` when it exposes one,
366
+ * otherwise fall back to the root inputs / DOM-derived signals.
367
+ */
368
+ private resolve;
369
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxFieldRoot, never>;
370
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxFieldRoot, "[rdxFieldRoot]", ["rdxFieldRoot"], { "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "filled": { "alias": "filled"; "required": false; "isSignal": true; }; "focused": { "alias": "focused"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
371
+ }
372
+
373
+ export { RdxFieldControl, RdxFieldDescription, RdxFieldError, RdxFieldLabel, RdxFieldRoot, injectFieldRootContext, provideFieldRootContext };
374
+ export type { RdxFieldRootContext, RdxFieldState };
@@ -0,0 +1,49 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
3
+ import { BooleanInput } from '@radix-ng/primitives/core';
4
+
5
+ /**
6
+ * Labels the fieldset.
7
+ *
8
+ * @group Components
9
+ */
10
+ declare class RdxFieldsetLegend {
11
+ protected readonly rootContext: {
12
+ disabledState: _angular_core.Signal<boolean>;
13
+ };
14
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
15
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxFieldsetLegend, never>;
16
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxFieldsetLegend, "legend[rdxFieldsetLegend]", ["rdxFieldsetLegend"], {}, {}, never, never, true, never>;
17
+ }
18
+
19
+ declare const fieldsetRootContext: () => {
20
+ disabledState: _angular_core.Signal<boolean>;
21
+ };
22
+ type RdxFieldsetRootContext = ReturnType<typeof fieldsetRootContext>;
23
+ declare const injectFieldsetRootContext: _radix_ng_primitives_core.InjectContext<{
24
+ disabledState: _angular_core.Signal<boolean>;
25
+ }>;
26
+ declare const provideFieldsetRootContext: (useFactory: () => {
27
+ disabledState: _angular_core.Signal<boolean>;
28
+ }) => _angular_core.Provider;
29
+ /**
30
+ * Groups related form controls and disables them as a set.
31
+ *
32
+ * @group Components
33
+ */
34
+ declare class RdxFieldsetRoot {
35
+ /**
36
+ * Whether all controls in the fieldset are disabled.
37
+ *
38
+ * @group Props
39
+ * @defaultValue false
40
+ */
41
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
42
+ readonly disabledState: _angular_core.Signal<boolean>;
43
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
44
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxFieldsetRoot, never>;
45
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxFieldsetRoot, "fieldset[rdxFieldsetRoot]", ["rdxFieldsetRoot"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
46
+ }
47
+
48
+ export { RdxFieldsetLegend, RdxFieldsetRoot, injectFieldsetRootContext, provideFieldsetRootContext };
49
+ export type { RdxFieldsetRootContext };
@@ -1,6 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { WritableSignal, Signal } from '@angular/core';
3
- import { BooleanInput } from '@angular/cdk/coercion';
2
+ import { WritableSignal, Signal, InjectionToken, Provider } from '@angular/core';
3
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
+ import { BooleanInput } from '@radix-ng/primitives/core';
4
5
 
5
6
  interface FocusScopeAPI {
6
7
  paused: WritableSignal<boolean>;
@@ -12,7 +13,7 @@ interface FocusScopeContext {
12
13
  loop?: Signal<boolean>;
13
14
  trapped?: Signal<boolean>;
14
15
  }
15
- declare const injectFocusScopeContext: (optional?: boolean) => FocusScopeContext | null;
16
+ declare const injectFocusScopeContext: _radix_ng_primitives_core.InjectContext<FocusScopeContext>;
16
17
  declare const provideFocusScopeContext: (useFactory: () => FocusScopeContext) => _angular_core.Provider;
17
18
  /**
18
19
  * @group Components
@@ -21,6 +22,7 @@ declare class RdxFocusScope {
21
22
  private readonly injector;
22
23
  private readonly destroyRef;
23
24
  private readonly elementRef;
25
+ private readonly config;
24
26
  /**
25
27
  * When `true`, tabbing from last item will focus first tabbable
26
28
  * and shift+tab from first item will focus last tababble.
@@ -36,7 +38,8 @@ declare class RdxFocusScope {
36
38
  * @group Props
37
39
  * @defaultValue false
38
40
  */
39
- readonly trapped: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
41
+ readonly trapped: _angular_core.InputSignalWithTransform<boolean | undefined, BooleanInput>;
42
+ readonly isTrapped: Signal<boolean>;
40
43
  /**
41
44
  * Event handler called when auto-focusing on mount.
42
45
  * Can be prevented.
@@ -61,5 +64,11 @@ declare class RdxFocusScope {
61
64
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxFocusScope, "[rdxFocusScope]", never, { "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "trapped": { "alias": "trapped"; "required": false; "isSignal": true; }; }, { "mountAutoFocus": "mountAutoFocus"; "unmountAutoFocus": "unmountAutoFocus"; }, never, never, true, never>;
62
65
  }
63
66
 
64
- export { RdxFocusScope, injectFocusScopeContext, provideFocusScopeContext };
65
- export type { FocusScopeContext };
67
+ type RdxFocusScopeConfig = {
68
+ trapped: Signal<boolean>;
69
+ };
70
+ declare const RdxFocusScopeConfigToken: InjectionToken<RdxFocusScopeConfig>;
71
+ declare function provideRdxFocusScopeConfig(factory: () => RdxFocusScopeConfig): Provider;
72
+
73
+ export { RdxFocusScope, RdxFocusScopeConfigToken, injectFocusScopeContext, provideFocusScopeContext, provideRdxFocusScopeConfig };
74
+ export type { FocusScopeContext, RdxFocusScopeConfig };
@@ -0,0 +1,87 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { RdxFormValueControl, BooleanInput } from '@radix-ng/primitives/core';
3
+
4
+ type RdxInputValue = string | number | readonly string[];
5
+ interface RdxInputValueChangeEventDetails {
6
+ event: Event;
7
+ cancel: () => void;
8
+ isCanceled: () => boolean;
9
+ }
10
+ interface RdxInputValueChangeEvent {
11
+ value: string;
12
+ eventDetails: RdxInputValueChangeEventDetails;
13
+ }
14
+ /**
15
+ * A headless text input that can integrate with Field for accessible labeling,
16
+ * descriptions, validation state, and data attributes.
17
+ *
18
+ * @group Components
19
+ */
20
+ declare class RdxInputDirective implements RdxFormValueControl<RdxInputValue | undefined> {
21
+ private readonly element;
22
+ private readonly fieldRootContext;
23
+ private initialValue;
24
+ private defaultValueApplied;
25
+ private readonly filledValue;
26
+ private readonly focusedValue;
27
+ /**
28
+ * The input id. Field labels and descriptions use this value for accessible relationships.
29
+ *
30
+ * @group Props
31
+ */
32
+ readonly id: _angular_core.InputSignal<string>;
33
+ /**
34
+ * The controlled input value.
35
+ *
36
+ * @group Props
37
+ */
38
+ readonly value: _angular_core.ModelSignal<RdxInputValue | undefined>;
39
+ /**
40
+ * The initial value when the input is uncontrolled.
41
+ *
42
+ * @group Props
43
+ */
44
+ readonly defaultValue: _angular_core.InputSignal<RdxInputValue | undefined>;
45
+ /**
46
+ * Whether the input is disabled.
47
+ *
48
+ * @group Props
49
+ */
50
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
51
+ /**
52
+ * Whether the input is required.
53
+ *
54
+ * @group Props
55
+ */
56
+ readonly required: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
57
+ /**
58
+ * Whether the input is invalid.
59
+ *
60
+ * @group Props
61
+ */
62
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
63
+ /**
64
+ * Emits when the input value changes.
65
+ *
66
+ * @group Emits
67
+ */
68
+ readonly onValueChange: _angular_core.OutputEmitterRef<RdxInputValueChangeEvent>;
69
+ protected readonly invalidState: _angular_core.Signal<boolean>;
70
+ protected readonly disabledState: _angular_core.Signal<boolean>;
71
+ protected readonly requiredState: _angular_core.Signal<boolean>;
72
+ protected readonly filledState: _angular_core.Signal<boolean>;
73
+ protected readonly focusedState: _angular_core.Signal<boolean>;
74
+ protected readonly describedBy: _angular_core.Signal<string | undefined>;
75
+ constructor();
76
+ onFocus(): void;
77
+ onBlur(): void;
78
+ onInput(event: Event): void;
79
+ syncFieldState(): void;
80
+ private writeValue;
81
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
82
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxInputDirective, never>;
83
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxInputDirective, "input[rdxInput]", ["rdxInput"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "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; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, never>;
84
+ }
85
+
86
+ export { RdxInputDirective };
87
+ export type { RdxInputValue, RdxInputValueChangeEvent, RdxInputValueChangeEventDetails };
@@ -15,7 +15,6 @@ declare class RdxLabelDirective {
15
15
  * @defaultValue false
16
16
  */
17
17
  readonly htmlFor: _angular_core.InputSignal<string | undefined>;
18
- protected readonly elementId: _angular_core.Signal<string | null>;
19
18
  /**
20
19
  * @ignore
21
20
  */