@radix-ng/primitives 1.1.0 → 1.1.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 (31) hide show
  1. package/fesm2022/radix-ng-primitives-autocomplete.mjs +66 -7
  2. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
  3. package/fesm2022/radix-ng-primitives-checkbox.mjs +147 -125
  4. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-combobox.mjs +171 -37
  6. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-core.mjs +173 -5
  8. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  9. package/fesm2022/radix-ng-primitives-number-field.mjs +38 -7
  10. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  11. package/fesm2022/radix-ng-primitives-radio.mjs +49 -2
  12. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-select.mjs +35 -3
  14. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  15. package/fesm2022/radix-ng-primitives-slider.mjs +17 -2
  16. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  17. package/fesm2022/radix-ng-primitives-switch.mjs +60 -7
  18. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-toggle-group.mjs +25 -3
  20. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  21. package/package.json +1 -1
  22. package/types/radix-ng-primitives-autocomplete.d.ts +10 -1
  23. package/types/radix-ng-primitives-checkbox.d.ts +56 -43
  24. package/types/radix-ng-primitives-combobox.d.ts +46 -2
  25. package/types/radix-ng-primitives-core.d.ts +62 -4
  26. package/types/radix-ng-primitives-number-field.d.ts +12 -5
  27. package/types/radix-ng-primitives-radio.d.ts +6 -1
  28. package/types/radix-ng-primitives-select.d.ts +8 -1
  29. package/types/radix-ng-primitives-slider.d.ts +2 -1
  30. package/types/radix-ng-primitives-switch.d.ts +19 -3
  31. package/types/radix-ng-primitives-toggle-group.d.ts +5 -1
@@ -45,6 +45,7 @@ interface CheckboxRootContext {
45
45
  required: Signal<boolean>;
46
46
  value: Signal<string>;
47
47
  name: Signal<string | undefined>;
48
+ itemValue: Signal<string | undefined>;
48
49
  parent: Signal<boolean>;
49
50
  form: Signal<string | undefined>;
50
51
  readonly: Signal<boolean>;
@@ -55,6 +56,7 @@ interface CheckboxRootContext {
55
56
  touchedState: Signal<boolean>;
56
57
  dirtyState: Signal<boolean>;
57
58
  uncheckedValue: Signal<string | undefined>;
59
+ registerNativeInput: (input: HTMLInputElement) => () => void;
58
60
  toggle: (event?: Event) => void;
59
61
  }
60
62
  declare const injectCheckboxRootContext: _radix_ng_primitives_core.InjectContext<CheckboxRootContext>;
@@ -65,11 +67,9 @@ declare const provideCheckboxRootContext: (useFactory: () => CheckboxRootContext
65
67
  declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
66
68
  private readonly controlValueAccessor;
67
69
  private readonly ngControlState;
68
- private readonly elementRef;
69
- private readonly renderer;
70
- private uncheckedInputElement;
71
70
  /** The group this checkbox belongs to, if it is rendered inside a `rdxCheckboxGroup`. */
72
71
  private readonly group;
72
+ private readonly nativeInput;
73
73
  /**
74
74
  * The controlled checked state of the checkbox. Must be used in conjunction with onCheckedChange.
75
75
  *
@@ -99,11 +99,12 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
99
99
  * Bound publicly as `[value]`; the TS member is named `submitValue` so the
100
100
  * directive can satisfy `RdxFormCheckboxControl`, whose contract reserves a
101
101
  * `value` member for `RdxFormValueControl` and forbids it on checkbox-style
102
- * controls. (Checkbox is not yet marked `implements` — its `checked` is still
103
- * `CheckedState`; see the `indeterminate` half of collision #1.)
102
+ * controls.
103
+ * When omitted, native submission uses the browser checkbox default (`on`). Inside a
104
+ * `rdxCheckboxGroup`, the child's `name` is used as a compatibility fallback.
104
105
  * @group Props
105
106
  */
106
- readonly submitValue: _angular_core.InputSignal<string>;
107
+ readonly submitValue: _angular_core.InputSignal<string | undefined>;
107
108
  /**
108
109
  * The value submitted with the form when the checkbox is unchecked.
109
110
  * By default, unchecked checkboxes do not submit any value, matching native checkbox behavior.
@@ -151,8 +152,8 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
151
152
  */
152
153
  readonly errors: _angular_core.InputSignal<readonly RdxValidationError[]>;
153
154
  /**
154
- * Name of the form control. Submitted with the form as part of a name/value pair. Inside a
155
- * `rdxCheckboxGroup` this also identifies the checkbox in the group's value array.
155
+ * Name of a standalone form control. Inside a `rdxCheckboxGroup`, prefer `[value]` to identify
156
+ * the item; `name` remains a compatibility fallback for existing group templates.
156
157
  * @group Props
157
158
  */
158
159
  readonly name: _angular_core.InputSignal<string | undefined>;
@@ -167,6 +168,14 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
167
168
  * @group Props
168
169
  */
169
170
  readonly form: _angular_core.InputSignal<string | undefined>;
171
+ /** @ignore Item identity inside a checkbox group (`value`, falling back to the legacy child name). */
172
+ readonly itemValue: Signal<string | undefined>;
173
+ /** @ignore Native checkbox value; browsers default an omitted checkbox value to `on`. */
174
+ readonly nativeValue: Signal<string>;
175
+ /** @ignore A checkbox group owns the successful-control name and serializes its children centrally. */
176
+ readonly nativeName: Signal<string | undefined>;
177
+ /** @ignore Child native inputs inherit an external form association from their checkbox group. */
178
+ readonly nativeForm: Signal<string | undefined>;
170
179
  /**
171
180
  * Event emitted when the checkbox checked state changes.
172
181
  * @group Emits
@@ -180,8 +189,8 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
180
189
  /**
181
190
  * @ignore
182
191
  * The effective checked state as a `boolean`. Inside a `rdxCheckboxGroup` it is derived from the
183
- * group (a `parent` checkbox is checked only when every child is; a child from whether its `name`
184
- * is in the group value); standalone it reads the CVA value.
192
+ * group (a `parent` checkbox is checked only when every child is; a child from whether its item
193
+ * value is in the group value); standalone it reads the CVA value.
185
194
  */
186
195
  readonly checkedState: Signal<boolean>;
187
196
  /**
@@ -214,15 +223,13 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
214
223
  /** @ignore */
215
224
  readonly dirtyState: Signal<boolean>;
216
225
  readonly state: Signal<"indeterminate" | "checked" | "unchecked">;
226
+ private readonly nativeInputOwnsValue;
217
227
  constructor();
218
228
  toggle(event?: Event): void;
219
229
  /** Reset control-owned interaction state; Angular Signal Forms calls this from `FieldState.reset()`. */
220
230
  reset(): void;
221
- private syncUncheckedInput;
222
- private ensureUncheckedInput;
223
- private removeUncheckedInput;
224
- private setOptionalAttribute;
225
- private setBooleanAttribute;
231
+ /** @ignore Register the optional native checkbox so it owns checked-value serialization. */
232
+ registerNativeInput(input: HTMLInputElement): () => void;
226
233
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxCheckboxRootDirective, never>;
227
234
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxCheckboxRootDirective, "[rdxCheckboxRoot]", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "defaultChecked": { "alias": "defaultChecked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "submitValue": { "alias": "value"; "required": false; "isSignal": true; }; "uncheckedValue": { "alias": "uncheckedValue"; "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; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "parent": { "alias": "parent"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "indeterminate": "indeterminateChange"; "touched": "touchedChange"; "onCheckedChange": "onCheckedChange"; "touch": "touch"; }, never, never, true, [{ directive: typeof _radix_ng_primitives_core.RdxControlValueAccessor; inputs: { "value": "checked"; "disabled": "disabled"; }; outputs: {}; }]>;
228
235
  }
@@ -234,45 +241,51 @@ interface RdxCheckboxGroupValueChangeEvent {
234
241
  eventDetails: RdxCheckboxGroupValueChangeEventDetails;
235
242
  }
236
243
  interface RdxCheckboxGroupContext {
237
- /** The names of the currently checked checkboxes. */
244
+ /** The values of the currently checked checkboxes. */
238
245
  value: Signal<string[]>;
239
- /** All checkbox names, used by a `parent` checkbox to check/uncheck every child. */
246
+ /** All checkbox values, used by a `parent` checkbox to check/uncheck every child. */
240
247
  allValues: Signal<string[]>;
248
+ /** External owning form id inherited by optional child native inputs. */
249
+ form: Signal<string | undefined>;
241
250
  /** Whether the whole group is disabled. */
242
251
  disabled: Signal<boolean>;
243
252
  /** The derived state of a `parent` checkbox: all / none / some checked. */
244
253
  parentState: Signal<CheckedState>;
245
254
  /** The space-separated control ids the `parent` checkbox controls (for `aria-controls`). */
246
255
  controlledIds: Signal<string | undefined>;
247
- /** A stable id for a child's control element, derived from the group id and the child name. */
248
- controlId: (name: string) => string;
249
- /** Toggle a single child by name. */
250
- toggleValue: (name: string, event?: Event) => void;
256
+ /** A stable id for a child's control element, derived from the group id and item value. */
257
+ controlId: (value: string) => string;
258
+ /** Toggle a single child by value. */
259
+ toggleValue: (value: string, event?: Event) => void;
251
260
  /** Toggle every child on or off (used by a `parent` checkbox). */
252
261
  toggleAll: (event?: Event) => void;
253
- /** Register a child's name and disabled state so the parent can preserve disabled items. */
254
- registerChild: (name: string, disabled: Signal<boolean>) => () => void;
262
+ /** Register a child's value and disabled state so the parent can preserve disabled items. */
263
+ registerChild: (value: string, disabled: Signal<boolean>) => () => void;
255
264
  /** Register a child's control element id so the parent can reference it via `aria-controls`. */
256
- registerControl: (name: string, id: string) => () => void;
265
+ registerControl: (value: string, id: string) => () => void;
257
266
  }
258
267
  declare const injectCheckboxGroupContext: _radix_ng_primitives_core.InjectContext<RdxCheckboxGroupContext>;
259
268
  declare const provideCheckboxGroupContext: (useFactory: () => RdxCheckboxGroupContext) => _angular_core.Provider;
260
269
  /**
261
- * Groups a set of checkboxes that share a single array value (the names of the checked boxes).
270
+ * Groups a set of checkboxes that share a single array value (the values of the checked boxes).
262
271
  *
263
- * Each child `rdxCheckboxRoot` participates by its `name`. A child marked `parent` becomes a
264
- * "select all" checkbox whose state is derived from `allValues`.
272
+ * Each child `rdxCheckboxRoot` participates by its `value` (falling back to `name`). A child marked
273
+ * `parent` becomes a "select all" checkbox whose state is derived from `allValues`.
265
274
  */
266
275
  declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements ControlValueAccessor, RdxFormValueControl<string[]> {
267
- /** The names of the currently checked checkboxes. Use with `onValueChange` or `[(value)]`. */
276
+ /** The values of the currently checked checkboxes. Use with `onValueChange` or `[(value)]`. */
268
277
  readonly value: _angular_core.ModelSignal<string[]>;
269
- /** The names checked initially when the group is uncontrolled. */
278
+ /** The values checked initially when the group is uncontrolled. */
270
279
  readonly defaultValue: _angular_core.InputSignal<string[] | undefined>;
271
- /** All checkbox names in the group. Required for a `parent` (select-all) checkbox. */
280
+ /** All checkbox values in the group. Required for a `parent` (select-all) checkbox. */
272
281
  readonly allValues: _angular_core.InputSignal<string[]>;
282
+ /** Native form field name. Selected values are submitted as repeated entries under this name. */
283
+ readonly name: _angular_core.InputSignal<string | undefined>;
284
+ /** Associates the group with an external form by id. */
285
+ readonly form: _angular_core.InputSignal<string | undefined>;
273
286
  /** Whether the whole group is disabled. */
274
287
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
275
- /** Emits the new array of checked names whenever the value changes. */
288
+ /** Emits the new array of checked values whenever the value changes. */
276
289
  readonly onValueChange: _angular_core.OutputEmitterRef<RdxCheckboxGroupValueChangeEvent>;
277
290
  private readonly disabledByCva;
278
291
  readonly disabledState: Signal<boolean>;
@@ -286,11 +299,11 @@ declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements
286
299
  private seeded;
287
300
  /** Where the parent is in its mixed → on → off cycle. Reset to `mixed` on any direct child change. */
288
301
  private parentStatus;
289
- /** Per-name disabled signals, so the parent can preserve disabled-but-checked children. */
290
- private readonly disabledByName;
302
+ /** Per-value disabled signals, so the parent can preserve disabled-but-checked children. */
303
+ private readonly disabledByValue;
291
304
  /** Stable group id used to derive child control ids when the consumer sets none. */
292
305
  private readonly elementId;
293
- /** Registered control element ids, keyed by child name. */
306
+ /** Registered control element ids, keyed by child value. */
294
307
  private readonly controlIds;
295
308
  /** The space-separated control ids in `allValues` order, for the parent's `aria-controls`. */
296
309
  readonly controlledIds: Signal<string | undefined>;
@@ -300,14 +313,14 @@ declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements
300
313
  constructor();
301
314
  /** @ignore Bridge the CVA `onTouched` so `markAsTouched()` also notifies Reactive/template forms. */
302
315
  protected formUiTouchTarget(): RdxFormUiTouchTarget;
303
- /** @ignore Register a child's disabled signal keyed by its name. */
304
- registerChild(name: string, disabled: Signal<boolean>): () => void;
305
- /** A stable control id for a child, derived from the group id and the child name. */
306
- controlId(name: string): string;
316
+ /** @ignore Register a child's disabled signal keyed by its value. */
317
+ registerChild(value: string, disabled: Signal<boolean>): () => void;
318
+ /** A stable control id for a child, derived from the group id and item value. */
319
+ controlId(value: string): string;
307
320
  /** @ignore Register a child's control element id so the parent can list it in `aria-controls`. */
308
- registerControl(name: string, id: string): () => void;
309
- /** Add/remove a single child name from the value (a direct child change). */
310
- toggleValue(name: string, event?: Event): void;
321
+ registerControl(value: string, id: string): () => void;
322
+ /** Add/remove a single child value from the group value (a direct child change). */
323
+ toggleValue(value: string, event?: Event): void;
311
324
  /**
312
325
  * Toggle from the `parent` checkbox. Mirrors Base UI's `useCheckboxGroupParent`:
313
326
  *
@@ -318,7 +331,7 @@ declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements
318
331
  * Disabled-but-checked children are always preserved (they cannot be toggled programmatically).
319
332
  */
320
333
  toggleAll(event?: Event): void;
321
- private isNameDisabled;
334
+ private isValueDisabled;
322
335
  /** Seed the remembered selection from the current value the first time the parent is used. */
323
336
  private ensureSeeded;
324
337
  private emit;
@@ -331,7 +344,7 @@ declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements
331
344
  /** @ignore */
332
345
  setDisabledState(isDisabled: boolean): void;
333
346
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxCheckboxGroupDirective, never>;
334
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxCheckboxGroupDirective, "[rdxCheckboxGroup]", ["rdxCheckboxGroup"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "allValues": { "alias": "allValues"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, [{ directive: typeof _radix_ng_primitives_core.RdxFormUiStateHost; inputs: {}; outputs: {}; }]>;
347
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxCheckboxGroupDirective, "[rdxCheckboxGroup]", ["rdxCheckboxGroup"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "allValues": { "alias": "allValues"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, [{ directive: typeof _radix_ng_primitives_core.RdxFormUiStateHost; inputs: {}; outputs: {}; }]>;
335
348
  }
336
349
 
337
350
  declare class RdxCheckboxIndicatorDirective {
@@ -144,7 +144,7 @@ declare function useComboboxEngine(config: ComboboxEngineConfig): {
144
144
  readonly triggerElement: HTMLElement | null;
145
145
  setTrigger(el: HTMLElement | null): void;
146
146
  orderedItems: Signal<ComboboxItemRef[]>;
147
- visibleItems: Signal<ComboboxItemRef[]>;
147
+ visibleItems: Signal<readonly ComboboxItemRef[]>;
148
148
  visibleCount: Signal<number>;
149
149
  filteredItems: Signal<readonly AcceptableValue[]>;
150
150
  isVisible: (item: ComboboxItemRef) => boolean;
@@ -220,6 +220,9 @@ declare const context: () => {
220
220
  dir: _angular_core.Signal<Direction>;
221
221
  value: _angular_core.ModelSignal<ComboboxValue>;
222
222
  inputValue: _angular_core.ModelSignal<string>;
223
+ name: _angular_core.InputSignal<string | undefined>;
224
+ form: _angular_core.InputSignal<string | undefined>;
225
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
223
226
  open: _angular_core.ModelSignal<boolean>;
224
227
  present: _angular_core.Signal<boolean>;
225
228
  multiple: _angular_core.Signal<boolean>;
@@ -297,6 +300,9 @@ declare const injectComboboxRootContext: _radix_ng_primitives_core.InjectContext
297
300
  dir: _angular_core.Signal<Direction>;
298
301
  value: _angular_core.ModelSignal<ComboboxValue>;
299
302
  inputValue: _angular_core.ModelSignal<string>;
303
+ name: _angular_core.InputSignal<string | undefined>;
304
+ form: _angular_core.InputSignal<string | undefined>;
305
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
300
306
  open: _angular_core.ModelSignal<boolean>;
301
307
  present: _angular_core.Signal<boolean>;
302
308
  multiple: _angular_core.Signal<boolean>;
@@ -373,6 +379,9 @@ declare const provideComboboxRootContext: (useFactory: () => {
373
379
  dir: _angular_core.Signal<Direction>;
374
380
  value: _angular_core.ModelSignal<ComboboxValue>;
375
381
  inputValue: _angular_core.ModelSignal<string>;
382
+ name: _angular_core.InputSignal<string | undefined>;
383
+ form: _angular_core.InputSignal<string | undefined>;
384
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
376
385
  open: _angular_core.ModelSignal<boolean>;
377
386
  present: _angular_core.Signal<boolean>;
378
387
  multiple: _angular_core.Signal<boolean>;
@@ -475,6 +484,8 @@ declare class RdxComboboxRoot extends RdxFormUiControlBase implements ControlVal
475
484
  readonly mode: _angular_core.Signal<"none" | "single" | "multiple">;
476
485
  /** Whether the combobox is in multiple-selection mode. */
477
486
  readonly multiple: _angular_core.Signal<boolean>;
487
+ /** Whether the visible text input owns native serialization in filter-only mode. */
488
+ readonly inputOwnsFormValue: _angular_core.Signal<boolean>;
478
489
  /** In `'none'` mode, whether pressing an item fills the input with its label. */
479
490
  readonly fillInputOnItemPress: _angular_core.InputSignalWithTransform<boolean, unknown>;
480
491
  /** Text direction. */
@@ -486,6 +497,10 @@ declare class RdxComboboxRoot extends RdxFormUiControlBase implements ControlVal
486
497
  readonly readOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
487
498
  /** Whether a value is required (for forms). */
488
499
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
500
+ /** Name used when serializing the committed selection into native `FormData`. */
501
+ readonly name: _angular_core.InputSignal<string | undefined>;
502
+ /** Id of an external form that owns this control. */
503
+ readonly form: _angular_core.InputSignal<string | undefined>;
489
504
  /** Whether keyboard navigation wraps at the list boundaries. */
490
505
  readonly loopFocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
491
506
  /**
@@ -549,6 +564,8 @@ declare class RdxComboboxRoot extends RdxFormUiControlBase implements ControlVal
549
564
  readonly isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
550
565
  /** Converts a value to its display label. Defaults to the matching item's text. */
551
566
  readonly itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
567
+ /** Converts an item value to the string submitted by a native form. */
568
+ readonly itemToStringValue: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
552
569
  /** Emits before the selection changes; call `eventDetails.cancel()` to veto it. */
553
570
  readonly onValueChange: _angular_core.OutputEmitterRef<RdxComboboxValueChange>;
554
571
  /** Emits before the input text changes; call `eventDetails.cancel()` to veto it. */
@@ -564,6 +581,8 @@ declare class RdxComboboxRoot extends RdxFormUiControlBase implements ControlVal
564
581
  readonly onOpenChangeComplete: _angular_core.OutputEmitterRef<boolean>;
565
582
  private readonly cvaDisabled;
566
583
  readonly disabledState: _angular_core.Signal<boolean>;
584
+ private readonly nativeFormValue;
585
+ private readonly nativeFormControl;
567
586
  readonly requiredState: _angular_core.Signal<boolean>;
568
587
  /** @ignore */
569
588
  readonly invalidState: _angular_core.Signal<boolean>;
@@ -660,7 +679,7 @@ declare class RdxComboboxRoot extends RdxFormUiControlBase implements ControlVal
660
679
  registerOnTouched(fn: () => void): void;
661
680
  setDisabledState(isDisabled: boolean): void;
662
681
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxComboboxRoot, never>;
663
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxRoot, "[rdxComboboxRoot]", ["rdxComboboxRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "inputValue": { "alias": "inputValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "multipleInput": { "alias": "multiple"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "fillInputOnItemPress": { "alias": "fillInputOnItemPress"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "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; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "highlightItemOnHover": { "alias": "highlightItemOnHover"; "required": false; "isSignal": true; }; "keepHighlight": { "alias": "keepHighlight"; "required": false; "isSignal": true; }; "openOnInputClick": { "alias": "openOnInputClick"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "submitOnItemClick": { "alias": "submitOnItemClick"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "virtualized": { "alias": "virtualized"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputValue": "inputValueChange"; "open": "openChange"; "onValueChange": "onValueChange"; "onInputValueChange": "onInputValueChange"; "onOpenChange": "onOpenChange"; "onItemHighlighted": "onItemHighlighted"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1.RdxPopper; inputs: {}; outputs: {}; }]>;
682
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxRoot, "[rdxComboboxRoot]", ["rdxComboboxRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "inputValue": { "alias": "inputValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "multipleInput": { "alias": "multiple"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "fillInputOnItemPress": { "alias": "fillInputOnItemPress"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "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; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "highlightItemOnHover": { "alias": "highlightItemOnHover"; "required": false; "isSignal": true; }; "keepHighlight": { "alias": "keepHighlight"; "required": false; "isSignal": true; }; "openOnInputClick": { "alias": "openOnInputClick"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "submitOnItemClick": { "alias": "submitOnItemClick"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "virtualized": { "alias": "virtualized"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; "itemToStringValue": { "alias": "itemToStringValue"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputValue": "inputValueChange"; "open": "openChange"; "onValueChange": "onValueChange"; "onInputValueChange": "onInputValueChange"; "onOpenChange": "onOpenChange"; "onItemHighlighted": "onItemHighlighted"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1.RdxPopper; inputs: {}; outputs: {}; }]>;
664
683
  }
665
684
 
666
685
  /**
@@ -691,6 +710,9 @@ declare class RdxComboboxInput {
691
710
  dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
692
711
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
693
712
  inputValue: _angular_core.ModelSignal<string>;
713
+ name: _angular_core.InputSignal<string | undefined>;
714
+ form: _angular_core.InputSignal<string | undefined>;
715
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
694
716
  open: _angular_core.ModelSignal<boolean>;
695
717
  present: _angular_core.Signal<boolean>;
696
718
  multiple: _angular_core.Signal<boolean>;
@@ -814,6 +836,9 @@ declare class RdxComboboxInputGroup {
814
836
  dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
815
837
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
816
838
  inputValue: _angular_core.ModelSignal<string>;
839
+ name: _angular_core.InputSignal<string | undefined>;
840
+ form: _angular_core.InputSignal<string | undefined>;
841
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
817
842
  open: _angular_core.ModelSignal<boolean>;
818
843
  present: _angular_core.Signal<boolean>;
819
844
  multiple: _angular_core.Signal<boolean>;
@@ -936,6 +961,9 @@ declare class RdxComboboxTrigger {
936
961
  dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
937
962
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
938
963
  inputValue: _angular_core.ModelSignal<string>;
964
+ name: _angular_core.InputSignal<string | undefined>;
965
+ form: _angular_core.InputSignal<string | undefined>;
966
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
939
967
  open: _angular_core.ModelSignal<boolean>;
940
968
  present: _angular_core.Signal<boolean>;
941
969
  multiple: _angular_core.Signal<boolean>;
@@ -1039,6 +1067,9 @@ declare class RdxComboboxClear {
1039
1067
  dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
1040
1068
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
1041
1069
  inputValue: _angular_core.ModelSignal<string>;
1070
+ name: _angular_core.InputSignal<string | undefined>;
1071
+ form: _angular_core.InputSignal<string | undefined>;
1072
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
1042
1073
  open: _angular_core.ModelSignal<boolean>;
1043
1074
  present: _angular_core.Signal<boolean>;
1044
1075
  multiple: _angular_core.Signal<boolean>;
@@ -1171,6 +1202,9 @@ declare class RdxComboboxBackdrop {
1171
1202
  dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
1172
1203
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
1173
1204
  inputValue: _angular_core.ModelSignal<string>;
1205
+ name: _angular_core.InputSignal<string | undefined>;
1206
+ form: _angular_core.InputSignal<string | undefined>;
1207
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
1174
1208
  open: _angular_core.ModelSignal<boolean>;
1175
1209
  present: _angular_core.Signal<boolean>;
1176
1210
  multiple: _angular_core.Signal<boolean>;
@@ -1275,6 +1309,9 @@ declare class RdxComboboxPopup {
1275
1309
  dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
1276
1310
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
1277
1311
  inputValue: _angular_core.ModelSignal<string>;
1312
+ name: _angular_core.InputSignal<string | undefined>;
1313
+ form: _angular_core.InputSignal<string | undefined>;
1314
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
1278
1315
  open: _angular_core.ModelSignal<boolean>;
1279
1316
  present: _angular_core.Signal<boolean>;
1280
1317
  multiple: _angular_core.Signal<boolean>;
@@ -1386,6 +1423,9 @@ declare class RdxComboboxList {
1386
1423
  dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
1387
1424
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
1388
1425
  inputValue: _angular_core.ModelSignal<string>;
1426
+ name: _angular_core.InputSignal<string | undefined>;
1427
+ form: _angular_core.InputSignal<string | undefined>;
1428
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
1389
1429
  open: _angular_core.ModelSignal<boolean>;
1390
1430
  present: _angular_core.Signal<boolean>;
1391
1431
  multiple: _angular_core.Signal<boolean>;
@@ -1588,6 +1628,7 @@ declare class RdxComboboxGroup {
1588
1628
  private readonly rootContext;
1589
1629
  readonly labelId: _angular_core.WritableSignal<string | undefined>;
1590
1630
  private readonly items;
1631
+ private readonly itemsTick;
1591
1632
  protected readonly hasItems: _angular_core.Signal<boolean>;
1592
1633
  protected readonly hasVisibleItems: _angular_core.Signal<boolean>;
1593
1634
  registerItem(item: ComboboxItemRef): void;
@@ -1638,6 +1679,9 @@ declare class RdxComboboxEmpty {
1638
1679
  dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
1639
1680
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
1640
1681
  inputValue: _angular_core.ModelSignal<string>;
1682
+ name: _angular_core.InputSignal<string | undefined>;
1683
+ form: _angular_core.InputSignal<string | undefined>;
1684
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
1641
1685
  open: _angular_core.ModelSignal<boolean>;
1642
1686
  present: _angular_core.Signal<boolean>;
1643
1687
  multiple: _angular_core.Signal<boolean>;
@@ -197,6 +197,8 @@ interface RdxNgControlState {
197
197
  readonly errors: Signal<readonly RdxValidationError[]>;
198
198
  readonly dirty: Signal<boolean>;
199
199
  readonly touched: Signal<boolean>;
200
+ /** Resets a connected Reactive/template-driven control; returns whether one was connected. */
201
+ reset(value: unknown): boolean;
200
202
  }
201
203
  /**
202
204
  * Lazily connects to the same-host `NgControl` without creating a circular dependency while Angular
@@ -773,8 +775,9 @@ type ItemValueComparator<T = unknown> = ((a: T, b: T) => boolean) | string;
773
775
  */
774
776
  declare function itemToStringLabel(value: unknown): string;
775
777
  /**
776
- * Converts an item value to the string used for form serialization. Defaults to the same rules as
777
- * {@link itemToStringLabel}; kept as a separate export so a primitive can diverge label vs. value.
778
+ * Converts an item value to the string used for form serialization. A conventional `{ value, label }`
779
+ * item serializes its `value` member; other non-string values use Base UI-compatible JSON serialization
780
+ * with `String()` as a fallback. Kept separate so a primitive can diverge label vs. value.
778
781
  */
779
782
  declare function itemToStringValue(value: unknown): string;
780
783
  /**
@@ -1083,6 +1086,12 @@ declare abstract class RdxFormUiControlBase {
1083
1086
  * (Signal-Forms-only controls such as date-field).
1084
1087
  */
1085
1088
  protected formUiTouchTarget(): RdxFormUiTouchTarget | null;
1089
+ /**
1090
+ * Resets a same-host Reactive/template-driven control without reporting the reset as a user edit.
1091
+ * Returns `false` when no Angular `NgControl` is connected, so a control can fall back to its CVA
1092
+ * change callback for an unusually early native reset.
1093
+ */
1094
+ protected resetNgControl(value: unknown): boolean;
1086
1095
  /**
1087
1096
  * Reset control-owned interaction state. Angular Signal Forms calls this optional custom-control
1088
1097
  * hook from `FieldState.reset()` after restoring the field value.
@@ -1795,6 +1804,55 @@ declare function elementSize({ elementRef, injector }: {
1795
1804
  */
1796
1805
  declare function getActiveElement(root?: DocumentOrShadowRoot): Element | null;
1797
1806
 
1807
+ /** Configuration for a composite control that participates in a native HTML form. */
1808
+ interface RdxNativeFormControlOptions<T> {
1809
+ /** Form-field name. No value is contributed while it is absent. */
1810
+ readonly name: Signal<string | undefined>;
1811
+ /** Optional id of an external owning form. */
1812
+ readonly form: Signal<string | undefined>;
1813
+ /** Disabled controls are excluded from successful form controls. */
1814
+ readonly disabled: Signal<boolean>;
1815
+ /** Current control value, used when the form constructs `FormData`. */
1816
+ readonly value?: Signal<T>;
1817
+ /** Converts a value to one or more form entries. Omit for controls with their own native inputs. */
1818
+ readonly serialize?: (value: T) => readonly string[];
1819
+ /** Whether a consumer-rendered native input currently owns serialization. */
1820
+ readonly hasNativeControl?: Signal<boolean>;
1821
+ /** Synchronizes a consumer-rendered native control immediately before an imperative submit. */
1822
+ readonly syncNativeControl?: () => void;
1823
+ /** Value restored by a native form reset. Captured once after inputs bind. */
1824
+ readonly defaultValue?: () => T;
1825
+ /** Applies the captured default value after a native form reset. */
1826
+ readonly onReset?: (value: T) => void;
1827
+ }
1828
+ /** Imperative operations needed by controls that submit immediately after a value change. */
1829
+ interface RdxNativeFormControl {
1830
+ /** The current owning form, including an external form selected by the `form` input. */
1831
+ ownerForm(): HTMLFormElement | null;
1832
+ /** Synchronizes generated/native controls with the current signals. */
1833
+ sync(): void;
1834
+ /** Synchronizes the value and requests submission from the owning form. */
1835
+ requestSubmit(): void;
1836
+ }
1837
+ /**
1838
+ * Converts a scalar or array model to HTML form values. `null` and `undefined` represent no
1839
+ * successful control; arrays deliberately become repeated entries under the same field name.
1840
+ */
1841
+ declare function serializeNativeFormValue(value: unknown, itemToStringValue?: (entry: unknown) => string): readonly string[];
1842
+ /**
1843
+ * Adds native form semantics to a composite control, rendering hidden inputs only when the control
1844
+ * has no native successful control of its own.
1845
+ *
1846
+ * A hidden input is necessary for a headless root to enter the platform's successful-controls tree
1847
+ * (including older engines that do not dispatch `formdata` for `new FormData(form)`). One input is
1848
+ * created per serialized value, preserving repeated-field semantics; controls with their own native
1849
+ * input use this solely for reset and imperative-submit coordination.
1850
+ *
1851
+ * Generated inputs are browser-only. Rendering imperative sibling nodes on the server would put DOM
1852
+ * outside Angular's hydration graph; the client creates them after its view has been claimed instead.
1853
+ */
1854
+ declare function useNativeFormControl<T>(options: RdxNativeFormControlOptions<T>): RdxNativeFormControl;
1855
+
1798
1856
  /**
1799
1857
  * Creates a resize observer effect for element
1800
1858
  *
@@ -2114,5 +2172,5 @@ declare enum RdxPositionAlign {
2114
2172
  End = "end"
2115
2173
  }
2116
2174
 
2117
- export { A, ALT, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ASTERISK, BACKSPACE, CAPS_LOCK, CONTROL, CTRL, DELETE, DOCS_BASE_URL, END, ENTER, ESCAPE, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, HOME, META, P, PAGE_DOWN, PAGE_UP, RDX_DEFAULT_VALIDATION_MODE, RDX_FIELD_VALIDITY, RDX_FLOATING_REGISTRATION, RDX_FLOATING_ROOT_CONTEXT, RDX_FLOATING_TREE, RDX_FORM_UI_STATE, RDX_INTERNAL_BACKDROP_ATTR, RDX_SCROLL_LOCKED_ATTR, RdxControlValueAccessor, RdxFloatingNode, RdxFloatingNodeRegistration, RdxFloatingRegistrationContext, RdxFloatingRootContext, RdxFloatingTree, RdxFormUiControlBase, RdxFormUiStateHost, RdxIdGenerator, RdxLiveAnnouncer, RdxPositionAlign, RdxPositionSide, RdxTriggerRegistry, SHIFT, SPACE, SPACE_CODE, TAB, TIME_GRANULARITIES, a, areAllDaysBetweenValid, clamp, createCancelableChangeEventDetails, createContent, createContext, createFloatingEvents, createFloatingRootContext, createFormUiState, createFormatter, createMonth, createMonths, docsUrl, elementSize, formUiStateContext, getActiveElement, getDaysBetween, getDaysInMonth, getDefaultDate, getDefaultTime, getLastFirstDayOfWeek, getMaxTransitionDuration, getNextLastDayOfWeek, getOptsByGranularity, getPlaceholder, getSegmentElements, getWeekNumber, handleAndDispatchCustomEvent, handleCalendarInitialFocus, hasTime, initializeSegmentValues, injectControlValueAccessor, injectDocument, injectFloatingRootContext, injectId, injectNgControlState, isAcceptableSegmentKey, isAfter, isAfterOrSame, isBefore, isBeforeOrSame, isBetween, isBetweenInclusive, isCalendarDateTime, isEqual, isItemEqualToValue, isNullish, isNumberString, isSegmentNavigationKey, isValidationRevealed, isZonedDateTime, itemToStringLabel, itemToStringValue, j, k, n, normalizeDateStep, normalizeHour12, normalizeHourCycle, p, provideExistingToken, provideFloatingRegistration, provideFloatingRootContext, provideFloatingTree, provideFormUiState, provideValueAccessor, rdxCheckLabelElement, rdxCheckTriggerElement, rdxDevError, rdxDevWarning, resetRdxDevWarnings, resizeEffect, resolveDisplayValid, resolveFloatingTree, roundToStepPrecision, segmentBuilders, setupInternalBackdrop, snapValueToStep, syncSegmentValues, syncTimeSegmentValues, toDate, useAnchoredScrollLock, useArrowNavigation, useDateField, useFilter, useGraceArea, useListHighlight, usePointerDrag, useScrollLock, useTransitionStatus, watch };
2118
- export type { AcceptableValue, AnyExceptLiteral, AriaLivePoliteness, BooleanInput, CreateMonthProps, DataOrientation, DateAndTimeSegmentObj, DateFormatterOptions, DateMatcher, DateRange, DateSegmentObj, DateSegmentPart, DateStep, DayPeriod, Direction, EditableSegmentPart, FilterPredicates, Formatter, Granularity, HourCycle, InjectContext, ItemValueComparator, ListHighlight, Month, NonEditableSegmentPart, Nullable, NumberInput, PlaceholderMap, RdxAnchoredScrollLockOptions, RdxCancelableChangeEventDetails, RdxCancelableChangeEventTransaction, RdxFloatingEventMap, RdxFloatingEvents, RdxFloatingLifecycle, RdxFloatingNodeInit, RdxFloatingParentOverride, RdxFloatingRegistrationReader, RdxFloatingRegistrationStatus, RdxFloatingRootContextEventMap, RdxFloatingRootContextInit, RdxFormCheckboxControl, RdxFormStateInput, RdxFormUiControl, RdxFormUiState, RdxFormUiStateContext, RdxFormUiStateOptions, RdxFormUiTouchTarget, RdxFormValueControl, RdxInternalBackdropOptions, RdxNgControlState, RdxPointerDragHandlers, RdxScrollLockOptions, RdxTransitionStatus, RdxTransitionStatusRef, RdxValidationError, RdxValidationInteraction, RdxValidationMode, SafeFunction, SegmentContentObj, SegmentPart, SegmentValueObj, TimeGranularity, TimeSegmentObj, TimeSegmentPart, TimeValue, UseDateFieldProps, UseFilterOptions, UseListHighlightOptions };
2175
+ export { A, ALT, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ASTERISK, BACKSPACE, CAPS_LOCK, CONTROL, CTRL, DELETE, DOCS_BASE_URL, END, ENTER, ESCAPE, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, HOME, META, P, PAGE_DOWN, PAGE_UP, RDX_DEFAULT_VALIDATION_MODE, RDX_FIELD_VALIDITY, RDX_FLOATING_REGISTRATION, RDX_FLOATING_ROOT_CONTEXT, RDX_FLOATING_TREE, RDX_FORM_UI_STATE, RDX_INTERNAL_BACKDROP_ATTR, RDX_SCROLL_LOCKED_ATTR, RdxControlValueAccessor, RdxFloatingNode, RdxFloatingNodeRegistration, RdxFloatingRegistrationContext, RdxFloatingRootContext, RdxFloatingTree, RdxFormUiControlBase, RdxFormUiStateHost, RdxIdGenerator, RdxLiveAnnouncer, RdxPositionAlign, RdxPositionSide, RdxTriggerRegistry, SHIFT, SPACE, SPACE_CODE, TAB, TIME_GRANULARITIES, a, areAllDaysBetweenValid, clamp, createCancelableChangeEventDetails, createContent, createContext, createFloatingEvents, createFloatingRootContext, createFormUiState, createFormatter, createMonth, createMonths, docsUrl, elementSize, formUiStateContext, getActiveElement, getDaysBetween, getDaysInMonth, getDefaultDate, getDefaultTime, getLastFirstDayOfWeek, getMaxTransitionDuration, getNextLastDayOfWeek, getOptsByGranularity, getPlaceholder, getSegmentElements, getWeekNumber, handleAndDispatchCustomEvent, handleCalendarInitialFocus, hasTime, initializeSegmentValues, injectControlValueAccessor, injectDocument, injectFloatingRootContext, injectId, injectNgControlState, isAcceptableSegmentKey, isAfter, isAfterOrSame, isBefore, isBeforeOrSame, isBetween, isBetweenInclusive, isCalendarDateTime, isEqual, isItemEqualToValue, isNullish, isNumberString, isSegmentNavigationKey, isValidationRevealed, isZonedDateTime, itemToStringLabel, itemToStringValue, j, k, n, normalizeDateStep, normalizeHour12, normalizeHourCycle, p, provideExistingToken, provideFloatingRegistration, provideFloatingRootContext, provideFloatingTree, provideFormUiState, provideValueAccessor, rdxCheckLabelElement, rdxCheckTriggerElement, rdxDevError, rdxDevWarning, resetRdxDevWarnings, resizeEffect, resolveDisplayValid, resolveFloatingTree, roundToStepPrecision, segmentBuilders, serializeNativeFormValue, setupInternalBackdrop, snapValueToStep, syncSegmentValues, syncTimeSegmentValues, toDate, useAnchoredScrollLock, useArrowNavigation, useDateField, useFilter, useGraceArea, useListHighlight, useNativeFormControl, usePointerDrag, useScrollLock, useTransitionStatus, watch };
2176
+ export type { AcceptableValue, AnyExceptLiteral, AriaLivePoliteness, BooleanInput, CreateMonthProps, DataOrientation, DateAndTimeSegmentObj, DateFormatterOptions, DateMatcher, DateRange, DateSegmentObj, DateSegmentPart, DateStep, DayPeriod, Direction, EditableSegmentPart, FilterPredicates, Formatter, Granularity, HourCycle, InjectContext, ItemValueComparator, ListHighlight, Month, NonEditableSegmentPart, Nullable, NumberInput, PlaceholderMap, RdxAnchoredScrollLockOptions, RdxCancelableChangeEventDetails, RdxCancelableChangeEventTransaction, RdxFloatingEventMap, RdxFloatingEvents, RdxFloatingLifecycle, RdxFloatingNodeInit, RdxFloatingParentOverride, RdxFloatingRegistrationReader, RdxFloatingRegistrationStatus, RdxFloatingRootContextEventMap, RdxFloatingRootContextInit, RdxFormCheckboxControl, RdxFormStateInput, RdxFormUiControl, RdxFormUiState, RdxFormUiStateContext, RdxFormUiStateOptions, RdxFormUiTouchTarget, RdxFormValueControl, RdxInternalBackdropOptions, RdxNativeFormControl, RdxNativeFormControlOptions, RdxNgControlState, RdxPointerDragHandlers, RdxScrollLockOptions, RdxTransitionStatus, RdxTransitionStatusRef, RdxValidationError, RdxValidationInteraction, RdxValidationMode, SafeFunction, SegmentContentObj, SegmentPart, SegmentValueObj, TimeGranularity, TimeSegmentObj, TimeSegmentPart, TimeValue, UseDateFieldProps, UseFilterOptions, UseListHighlightOptions };
@@ -106,9 +106,9 @@ declare class RdxNumberFieldRoot extends RdxFormUiControlBase implements RdxForm
106
106
  * @default false
107
107
  */
108
108
  readonly required: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
109
- /** Name of the hidden input rendered by `[rdxNumberFieldHiddenInput]`, for form submission. */
109
+ /** Name used when serializing this field into native `FormData`. */
110
110
  readonly name: _angular_core.InputSignal<string | undefined>;
111
- /** Id of the form the hidden input belongs to. Useful when it is rendered outside the form. */
111
+ /** Id of an external form that owns this field. */
112
112
  readonly form: _angular_core.InputSignal<string | undefined>;
113
113
  /** The uncontrolled value of the field when it is initially rendered. */
114
114
  readonly defaultValue: _angular_core.InputSignal<number | undefined>;
@@ -127,6 +127,8 @@ declare class RdxNumberFieldRoot extends RdxFormUiControlBase implements RdxForm
127
127
  readonly isScrubbing: _angular_core.WritableSignal<boolean>;
128
128
  /** @ignore The native input element, registered by `[rdxNumberFieldInput]`. */
129
129
  readonly inputEl: _angular_core.WritableSignal<HTMLInputElement | undefined>;
130
+ /** @ignore Optional native number input that owns constraints/autofill and form serialization. */
131
+ readonly nativeInputEl: _angular_core.WritableSignal<HTMLInputElement | null>;
130
132
  /**
131
133
  * @ignore Gate that prevents the formatted value from overwriting in-progress typing.
132
134
  * Plain field (not a signal): it is toggled imperatively inside event handlers.
@@ -148,6 +150,7 @@ declare class RdxNumberFieldRoot extends RdxFormUiControlBase implements RdxForm
148
150
  private readonly parser;
149
151
  /** @ignore The current numeric value (`null` when empty). */
150
152
  readonly currentValue: _angular_core.Signal<number | null>;
153
+ private readonly nativeFormControl;
151
154
  /** @ignore */
152
155
  readonly minWithDefault: _angular_core.Signal<number>;
153
156
  /** @ignore */
@@ -174,6 +177,8 @@ declare class RdxNumberFieldRoot extends RdxFormUiControlBase implements RdxForm
174
177
  }): number;
175
178
  /** @ignore Registers the native input element. */
176
179
  registerInput(el: HTMLInputElement): void;
180
+ /** @ignore Registers the optional native constraint/autofill input. */
181
+ registerNativeInput(el: HTMLInputElement | null): void;
177
182
  /** @ignore Sets the displayed text without changing the numeric value. */
178
183
  setInputValue(text: string): void;
179
184
  /**
@@ -241,14 +246,16 @@ declare class RdxNumberFieldInput {
241
246
  }
242
247
 
243
248
  /**
244
- * The hidden native `input[type=number]` that mirrors the field value for native form submission
245
- * and browser constraint validation (min/max/step/required). Place it inside the root, alongside
246
- * the visible `[rdxNumberFieldInput]`.
249
+ * The optional hidden native `input[type=number]` that mirrors the field value for browser constraint
250
+ * validation (min/max/step/required) and autofill. When present it also owns native form serialization;
251
+ * without it the root generates a plain hidden entry. Place it inside the root, alongside the visible
252
+ * `[rdxNumberFieldInput]`.
247
253
  *
248
254
  * @see https://base-ui.com/react/components/number-field
249
255
  */
250
256
  declare class RdxNumberFieldHiddenInput {
251
257
  protected readonly rootContext: _radix_ng_primitives_number_field.RdxNumberFieldRoot;
258
+ constructor();
252
259
  /** Move focus to the visible input when the hidden one is focused (e.g. via form validation). */
253
260
  onFocus(): void;
254
261
  /** Handle browser autofill, which writes directly to the hidden numeric input. */
@@ -20,6 +20,7 @@ interface RadioRootContext {
20
20
  required: Signal<boolean>;
21
21
  name: Signal<string | undefined>;
22
22
  form: Signal<string | undefined>;
23
+ registerNativeInput(value: string, input: HTMLInputElement): () => void;
23
24
  select(value: string | null, event?: Event, reason?: RdxRadioValueChangeReason): void;
24
25
  setArrowNavigation(value: boolean): void;
25
26
  isArrowNavigation(): boolean;
@@ -55,6 +56,8 @@ declare class RdxRadioGroupDirective extends RdxFormUiControlBase implements Con
55
56
  readonly touchedState: Signal<boolean>;
56
57
  readonly dirtyState: Signal<boolean>;
57
58
  private readonly arrowNavigation;
59
+ private readonly nativeInputs;
60
+ private readonly selectedItemHasNativeInput;
58
61
  private readonly itemMetadata;
59
62
  private readonly disabledIndices;
60
63
  private readonly activeIndex;
@@ -98,6 +101,8 @@ declare class RdxRadioGroupDirective extends RdxFormUiControlBase implements Con
98
101
  setDisabledState(isDisabled: boolean): void;
99
102
  setArrowNavigation(value: boolean): void;
100
103
  isArrowNavigation(): boolean;
104
+ /** @ignore Register an optional native radio input by its item value. */
105
+ registerNativeInput(value: string, input: HTMLInputElement): () => void;
101
106
  /**
102
107
  * Marks the control touched when focus leaves the whole group (Base UI `RadioGroup` parity and the
103
108
  * ADR 0004 CVA strategy) — moving focus between items stays inside, so `relatedTarget` is checked.
@@ -128,7 +133,7 @@ declare class RdxRadioItemInputDirective {
128
133
  private readonly input;
129
134
  readonly name: _angular_core.Signal<string | undefined>;
130
135
  readonly form: _angular_core.Signal<string | undefined>;
131
- readonly value: _angular_core.Signal<string | undefined>;
136
+ readonly value: _angular_core.Signal<string>;
132
137
  readonly checked: _angular_core.Signal<boolean>;
133
138
  readonly required: _angular_core.Signal<boolean>;
134
139
  readonly disabled: _angular_core.Signal<boolean>;