@radix-ng/primitives 1.0.10 → 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 (65) hide show
  1. package/README.md +26 -5
  2. package/fesm2022/radix-ng-primitives-autocomplete.mjs +88 -21
  3. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-checkbox.mjs +199 -129
  5. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  6. package/fesm2022/radix-ng-primitives-combobox.mjs +203 -52
  7. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-composite.mjs +221 -36
  9. package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-core.mjs +352 -24
  11. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-date-field.mjs +11 -5
  13. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-field.mjs +127 -23
  15. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-form.mjs +35 -4
  17. package/fesm2022/radix-ng-primitives-form.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-input.mjs +87 -15
  19. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-menu.mjs +34 -7
  21. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-number-field.mjs +38 -7
  23. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-popper.mjs +80 -11
  25. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-radio.mjs +49 -2
  27. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-scroll-area.mjs +6 -3
  29. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-select.mjs +70 -14
  31. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-signal-forms.mjs +27 -11
  33. package/fesm2022/radix-ng-primitives-signal-forms.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-slider.mjs +17 -2
  35. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  36. package/fesm2022/radix-ng-primitives-switch.mjs +60 -7
  37. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  38. package/fesm2022/radix-ng-primitives-time-field.mjs +12 -6
  39. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-toggle-group.mjs +25 -3
  41. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  42. package/package.json +8 -3
  43. package/types/radix-ng-primitives-autocomplete.d.ts +16 -2
  44. package/types/radix-ng-primitives-checkbox.d.ts +66 -44
  45. package/types/radix-ng-primitives-combobox.d.ts +74 -3
  46. package/types/radix-ng-primitives-composite.d.ts +48 -2
  47. package/types/radix-ng-primitives-core.d.ts +212 -96
  48. package/types/radix-ng-primitives-date-field.d.ts +7 -4
  49. package/types/radix-ng-primitives-field.d.ts +55 -8
  50. package/types/radix-ng-primitives-form.d.ts +9 -0
  51. package/types/radix-ng-primitives-input.d.ts +10 -2
  52. package/types/radix-ng-primitives-menu.d.ts +45 -4
  53. package/types/radix-ng-primitives-navigation-menu.d.ts +2 -2
  54. package/types/radix-ng-primitives-number-field.d.ts +12 -5
  55. package/types/radix-ng-primitives-popover.d.ts +2 -2
  56. package/types/radix-ng-primitives-popper.d.ts +60 -15
  57. package/types/radix-ng-primitives-preview-card.d.ts +2 -2
  58. package/types/radix-ng-primitives-radio.d.ts +6 -1
  59. package/types/radix-ng-primitives-select.d.ts +25 -4
  60. package/types/radix-ng-primitives-signal-forms.d.ts +22 -8
  61. package/types/radix-ng-primitives-slider.d.ts +2 -1
  62. package/types/radix-ng-primitives-switch.d.ts +19 -3
  63. package/types/radix-ng-primitives-time-field.d.ts +9 -6
  64. package/types/radix-ng-primitives-toggle-group.d.ts +5 -1
  65. package/types/radix-ng-primitives-tooltip.d.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-toggle-group.mjs","sources":["../../../packages/primitives/toggle-group/src/toggle-group-base.ts","../../../packages/primitives/toggle-group/src/toggle-group-context.ts","../../../packages/primitives/toggle-group/src/toggle-group.ts","../../../packages/primitives/toggle-group/src/toggle-group-without-focus.ts","../../../packages/primitives/toggle-group/radix-ng-primitives-toggle-group.ts"],"sourcesContent":["import { booleanAttribute, computed, Directive, effect, input, model, output, signal, untracked } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport {\n BooleanInput,\n createCancelableChangeEventDetails,\n DataOrientation,\n RdxCancelableChangeEventDetails,\n RdxFormUiControlBase,\n RdxFormUiTouchTarget,\n RdxFormValueControl\n} from '@radix-ng/primitives/core';\nimport { RdxToggleGroupContext } from './toggle-group-context';\n\nexport type RdxToggleGroupValueChangeReason = 'none';\nexport type RdxToggleGroupValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxToggleGroupValueChangeReason>;\n\nexport interface RdxToggleGroupValueChangeEvent {\n value: string[];\n eventDetails: RdxToggleGroupValueChangeEventDetails;\n}\n\n/** Builds the shared context a {@link RdxToggle} reads when it belongs to this group. */\nexport function toggleGroupContext(instance: RdxToggleGroupBase): RdxToggleGroupContext {\n return {\n value: instance.pressedValues,\n disabled: instance.isDisabled,\n orientation: instance.orientation,\n isValueInitialized: instance.isValueInitialized,\n toggle: (value, nextPressed, event, eventDetails) => instance.toggle(value, nextPressed, event, eventDetails)\n };\n}\n\n/**\n * Shared state and behavior for the toggle group. Concrete directives add the composite root\n * ({@link RdxToggleGroup}) or omit it when an ancestor already owns focus, e.g. a toolbar\n * ({@link RdxToggleGroupWithoutFocus}).\n */\n@Directive({\n host: {\n role: 'group',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'multiple() ? \"\" : undefined'\n }\n})\nexport abstract class RdxToggleGroupBase\n extends RdxFormUiControlBase\n implements ControlValueAccessor, RdxFormValueControl<string[] | undefined>\n{\n /**\n * The pressed values. Always an array — a single value is `[value]`. Use with `(onValueChange)`\n * for controlled state.\n */\n readonly value = model<string[]>();\n\n /** The values pressed when the group is initially rendered (uncontrolled). */\n readonly defaultValue = input<string[]>();\n\n /**\n * Whether multiple items can be pressed at the same time.\n *\n * @default false\n */\n readonly multiple = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the whole group is disabled.\n *\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * The orientation of the group, controlling arrow-key navigation.\n *\n * @default 'horizontal'\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n /** Event emitted when the pressed values change. */\n readonly onValueChange = output<RdxToggleGroupValueChangeEvent>();\n\n /** @ignore */\n readonly pressedValues = computed(() => this.value() ?? []);\n /** @ignore */\n readonly isValueInitialized = computed(() => this.value() !== undefined || this.defaultValue() !== undefined);\n\n protected readonly accessorDisabled = signal(false);\n /** @ignore */\n readonly isDisabled = computed(() => this.disabled() || this.accessorDisabled() || this.isExternallyDisabled());\n\n private onChange?: (value: string[]) => void;\n protected onTouched?: () => void;\n\n constructor() {\n super();\n\n effect(() => {\n const initial = this.defaultValue();\n if (initial !== undefined && untracked(this.value) === undefined) {\n this.value.set(initial);\n }\n });\n }\n\n /** @ignore Bridge the CVA `onTouched` so `markAsTouched()` also notifies Reactive/template forms. */\n protected override formUiTouchTarget(): RdxFormUiTouchTarget {\n return { markAsTouched: () => this.onTouched?.() };\n }\n\n /** @ignore Extra disabled state inherited from composite parents such as Toolbar. */\n protected isExternallyDisabled(): boolean {\n return false;\n }\n\n /** @ignore */\n toggle(\n value: string,\n nextPressed: boolean,\n event?: Event,\n eventDetails?: RdxToggleGroupValueChangeEventDetails\n ): void {\n if (this.isDisabled()) {\n return;\n }\n\n const current = this.pressedValues();\n let next: string[];\n\n // The item supplies the next pressed boolean (source of truth); the group only maps it onto its\n // value set — add `value` when pressed, remove it when not.\n if (this.multiple()) {\n next = nextPressed\n ? current.includes(value)\n ? current\n : [...current, value]\n : current.filter((item) => item !== value);\n } else {\n next = nextPressed ? [value] : [];\n }\n\n const resolvedEventDetails =\n eventDetails ??\n createCancelableChangeEventDetails(\n 'none',\n event ?? new Event('toggle-group.value-change'),\n event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined\n ).eventDetails;\n\n this.onValueChange.emit({ value: next, eventDetails: resolvedEventDetails });\n if (resolvedEventDetails.isCanceled()) {\n return;\n }\n\n this.value.set(next);\n this.formUi.markDirty();\n this.onChange?.(next);\n }\n\n /** @ignore */\n writeValue(value: string[] | string | null): void {\n this.value.set(value == null ? [] : Array.isArray(value) ? value : [value]);\n }\n\n /** @ignore */\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n /** @ignore */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @ignore */\n setDisabledState(isDisabled: boolean): void {\n this.accessorDisabled.set(isDisabled);\n }\n}\n","import { Signal } from '@angular/core';\nimport { createContext, DataOrientation, RdxCancelableChangeEventDetails } from '@radix-ng/primitives/core';\n\ntype RdxToggleGroupContextChangeReason = 'none';\n\n/**\n * Shared state a {@link RdxToggle} reads when it participates in a toggle group.\n */\nexport interface RdxToggleGroupContext {\n /** The currently pressed values. */\n readonly value: Signal<string[]>;\n\n /** Whether the whole group is disabled. */\n readonly disabled: Signal<boolean>;\n\n /** The orientation of the group. */\n readonly orientation: Signal<DataOrientation>;\n\n /** Whether the group value was initialized by `value` or `defaultValue`. */\n readonly isValueInitialized: Signal<boolean>;\n\n /**\n * Set the pressed state of `value` within the group. The item computes the next pressed boolean\n * (Base UI parity — the item is the source of truth), so the group applies it rather than\n * re-deriving the toggle from its current value set.\n */\n toggle(\n value: string,\n nextPressed: boolean,\n event?: Event,\n eventDetails?: RdxCancelableChangeEventDetails<RdxToggleGroupContextChangeReason>\n ): void;\n}\n\nexport const [injectToggleGroupContext, provideToggleGroupContext] = createContext<RdxToggleGroupContext>(\n 'RdxToggleGroupContext',\n 'components/toggle-group'\n);\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { RdxCompositeMetadata, RdxCompositeRoot } from '@radix-ng/primitives/composite';\nimport {\n BooleanInput,\n Direction,\n provideFormUiState,\n provideValueAccessor,\n RdxFormUiStateHost\n} from '@radix-ng/primitives/core';\nimport { injectDirection } from '@radix-ng/primitives/direction-provider';\nimport { RdxToggleGroupBase, toggleGroupContext } from './toggle-group-base';\nimport { provideToggleGroupContext } from './toggle-group-context';\n\n/**\n * A set of two-state buttons that can be toggled on or off. Owns composite keyboard focus over its\n * `[rdxToggle]` children.\n *\n * @see https://base-ui.com/react/components/toggle-group\n */\n@Directive({\n selector: '[rdxToggleGroup]',\n exportAs: 'rdxToggleGroup',\n hostDirectives: [RdxCompositeRoot, RdxFormUiStateHost],\n providers: [\n provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroup))),\n provideValueAccessor(RdxToggleGroup),\n provideFormUiState(() => inject(RdxToggleGroup).formUi)\n ]\n})\nexport class RdxToggleGroup extends RdxToggleGroupBase {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Text direction for arrow-key navigation. */\n readonly dirInput = input<Direction | undefined>(undefined, { alias: 'dir' });\n readonly dir = injectDirection(this.dirInput);\n\n /**\n * Whether keyboard navigation should loop from the last item back to the first.\n *\n * @default true\n */\n readonly loopFocus = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n private readonly compositeRoot = inject(RdxCompositeRoot, { self: true });\n private readonly itemMetadata = computed(() =>\n Array.from(this.compositeRoot.itemMap().values()).filter(isToggleItemMetadata)\n );\n private readonly disabledIndices = computed(() =>\n this.itemMetadata()\n .filter((metadata) => metadata.disabled)\n .map((metadata) => metadata.index)\n );\n private readonly activeIndex = computed(() => {\n const pressedValues = this.pressedValues();\n if (pressedValues.length === 0) {\n return -1;\n }\n\n return this.itemMetadata().find((metadata) => pressedValues.includes(metadata.value))?.index ?? -1;\n });\n\n constructor() {\n super();\n\n effect(() => {\n this.compositeRoot.setOrientation(this.orientation());\n this.compositeRoot.setDir(this.dir());\n this.compositeRoot.setLoopFocus(this.loopFocus());\n this.compositeRoot.setEnableHomeAndEndKeys(true);\n });\n\n effect(() => {\n this.compositeRoot.setDisabledIndices(this.disabledIndices());\n });\n\n effect(() => {\n const activeIndex = this.activeIndex();\n\n if (activeIndex === -1 || this.disabledIndices().includes(activeIndex)) {\n return;\n }\n\n const activeElement = this.elementRef.nativeElement.ownerDocument.activeElement;\n if (activeElement && this.elementRef.nativeElement.contains(activeElement)) {\n return;\n }\n\n this.compositeRoot.setHighlightedIndex(activeIndex);\n });\n }\n}\n\ninterface RdxToggleItemMetadata {\n [key: string]: unknown;\n disabled: boolean;\n value: string;\n}\n\nfunction isToggleItemMetadata(metadata: RdxCompositeMetadata): metadata is RdxCompositeMetadata<RdxToggleItemMetadata> {\n return typeof metadata['disabled'] === 'boolean' && typeof metadata['value'] === 'string';\n}\n","import { Directive, inject } from '@angular/core';\nimport { provideFormUiState, provideValueAccessor, RdxFormUiStateHost } from '@radix-ng/primitives/core';\nimport { injectToolbarGroupContext, injectToolbarRootContext } from '@radix-ng/primitives/toolbar';\nimport { RdxToggleGroupBase, toggleGroupContext } from './toggle-group-base';\nimport { provideToggleGroupContext } from './toggle-group-context';\n\n/**\n * A toggle group that does NOT create its own composite root, for use inside a container that\n * already owns keyboard focus (e.g. a toolbar). The `[rdxToggle]` children register with the nearest\n * ancestor composite root instead. Mirrors Base UI's behavior of skipping its composite root\n * when nested in a toolbar.\n */\n@Directive({\n selector: '[rdxToggleGroupWithoutFocus]',\n exportAs: 'rdxToggleGroupWithoutFocus',\n hostDirectives: [RdxFormUiStateHost],\n providers: [\n provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroupWithoutFocus))),\n provideValueAccessor(RdxToggleGroupWithoutFocus),\n provideFormUiState(() => inject(RdxToggleGroupWithoutFocus).formUi)\n ]\n})\nexport class RdxToggleGroupWithoutFocus extends RdxToggleGroupBase {\n private readonly toolbarRootContext = injectToolbarRootContext(true);\n private readonly toolbarGroupContext = injectToolbarGroupContext(true);\n\n protected override isExternallyDisabled(): boolean {\n return (this.toolbarRootContext?.disabled() ?? false) || (this.toolbarGroupContext?.disabled() ?? false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-toggle-group.mjs","sources":["../../../packages/primitives/toggle-group/src/toggle-group-base.ts","../../../packages/primitives/toggle-group/src/toggle-group-context.ts","../../../packages/primitives/toggle-group/src/toggle-group.ts","../../../packages/primitives/toggle-group/src/toggle-group-without-focus.ts","../../../packages/primitives/toggle-group/radix-ng-primitives-toggle-group.ts"],"sourcesContent":["import { booleanAttribute, computed, Directive, effect, input, model, output, signal, untracked } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport {\n BooleanInput,\n createCancelableChangeEventDetails,\n DataOrientation,\n RdxCancelableChangeEventDetails,\n RdxFormUiControlBase,\n RdxFormUiTouchTarget,\n RdxFormValueControl,\n serializeNativeFormValue,\n useNativeFormControl\n} from '@radix-ng/primitives/core';\nimport { RdxToggleGroupContext } from './toggle-group-context';\n\nexport type RdxToggleGroupValueChangeReason = 'none';\nexport type RdxToggleGroupValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxToggleGroupValueChangeReason>;\n\nexport interface RdxToggleGroupValueChangeEvent {\n value: string[];\n eventDetails: RdxToggleGroupValueChangeEventDetails;\n}\n\n/** Builds the shared context a {@link RdxToggle} reads when it belongs to this group. */\nexport function toggleGroupContext(instance: RdxToggleGroupBase): RdxToggleGroupContext {\n return {\n value: instance.pressedValues,\n disabled: instance.isDisabled,\n orientation: instance.orientation,\n isValueInitialized: instance.isValueInitialized,\n toggle: (value, nextPressed, event, eventDetails) => instance.toggle(value, nextPressed, event, eventDetails)\n };\n}\n\n/**\n * Shared state and behavior for the toggle group. Concrete directives add the composite root\n * ({@link RdxToggleGroup}) or omit it when an ancestor already owns focus, e.g. a toolbar\n * ({@link RdxToggleGroupWithoutFocus}).\n */\n@Directive({\n host: {\n role: 'group',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'multiple() ? \"\" : undefined'\n }\n})\nexport abstract class RdxToggleGroupBase\n extends RdxFormUiControlBase\n implements ControlValueAccessor, RdxFormValueControl<string[] | undefined>\n{\n /**\n * The pressed values. Always an array — a single value is `[value]`. Use with `(onValueChange)`\n * for controlled state.\n */\n readonly value = model<string[]>();\n\n /** The values pressed when the group is initially rendered (uncontrolled). */\n readonly defaultValue = input<string[]>();\n\n /** Native form field name. Pressed values are submitted as repeated entries under this name. */\n readonly name = input<string>();\n\n /** Associates the group with an external form by id. */\n readonly form = input<string>();\n\n /**\n * Whether multiple items can be pressed at the same time.\n *\n * @default false\n */\n readonly multiple = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the whole group is disabled.\n *\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * The orientation of the group, controlling arrow-key navigation.\n *\n * @default 'horizontal'\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n /** Event emitted when the pressed values change. */\n readonly onValueChange = output<RdxToggleGroupValueChangeEvent>();\n\n /** @ignore */\n readonly pressedValues = computed(() => this.value() ?? []);\n /** @ignore */\n readonly isValueInitialized = computed(() => this.value() !== undefined || this.defaultValue() !== undefined);\n\n protected readonly accessorDisabled = signal(false);\n /** @ignore */\n readonly isDisabled = computed(() => this.disabled() || this.accessorDisabled() || this.isExternallyDisabled());\n\n private onChange?: (value: string[]) => void;\n protected onTouched?: () => void;\n\n constructor() {\n super();\n\n useNativeFormControl({\n name: this.name,\n form: this.form,\n disabled: this.isDisabled,\n value: this.pressedValues,\n serialize: serializeNativeFormValue,\n defaultValue: () => [...(this.defaultValue() ?? this.pressedValues())],\n onReset: (value) => {\n const next = [...value];\n this.value.set(next);\n if (!this.resetNgControl(next)) {\n this.onChange?.(next);\n }\n this.formUi.resetInteractionState?.();\n }\n });\n\n effect(() => {\n const initial = this.defaultValue();\n if (initial !== undefined && untracked(this.value) === undefined) {\n this.value.set(initial);\n }\n });\n }\n\n /** @ignore Bridge the CVA `onTouched` so `markAsTouched()` also notifies Reactive/template forms. */\n protected override formUiTouchTarget(): RdxFormUiTouchTarget {\n return { markAsTouched: () => this.onTouched?.() };\n }\n\n /** @ignore Extra disabled state inherited from composite parents such as Toolbar. */\n protected isExternallyDisabled(): boolean {\n return false;\n }\n\n /** @ignore */\n toggle(\n value: string,\n nextPressed: boolean,\n event?: Event,\n eventDetails?: RdxToggleGroupValueChangeEventDetails\n ): void {\n if (this.isDisabled()) {\n return;\n }\n\n const current = this.pressedValues();\n let next: string[];\n\n // The item supplies the next pressed boolean (source of truth); the group only maps it onto its\n // value set — add `value` when pressed, remove it when not.\n if (this.multiple()) {\n next = nextPressed\n ? current.includes(value)\n ? current\n : [...current, value]\n : current.filter((item) => item !== value);\n } else {\n next = nextPressed ? [value] : [];\n }\n\n const resolvedEventDetails =\n eventDetails ??\n createCancelableChangeEventDetails(\n 'none',\n event ?? new Event('toggle-group.value-change'),\n event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined\n ).eventDetails;\n\n this.onValueChange.emit({ value: next, eventDetails: resolvedEventDetails });\n if (resolvedEventDetails.isCanceled()) {\n return;\n }\n\n this.value.set(next);\n this.formUi.markDirty();\n this.onChange?.(next);\n }\n\n /** @ignore */\n writeValue(value: string[] | string | null): void {\n this.value.set(value == null ? [] : Array.isArray(value) ? value : [value]);\n }\n\n /** @ignore */\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n /** @ignore */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @ignore */\n setDisabledState(isDisabled: boolean): void {\n this.accessorDisabled.set(isDisabled);\n }\n}\n","import { Signal } from '@angular/core';\nimport { createContext, DataOrientation, RdxCancelableChangeEventDetails } from '@radix-ng/primitives/core';\n\ntype RdxToggleGroupContextChangeReason = 'none';\n\n/**\n * Shared state a {@link RdxToggle} reads when it participates in a toggle group.\n */\nexport interface RdxToggleGroupContext {\n /** The currently pressed values. */\n readonly value: Signal<string[]>;\n\n /** Whether the whole group is disabled. */\n readonly disabled: Signal<boolean>;\n\n /** The orientation of the group. */\n readonly orientation: Signal<DataOrientation>;\n\n /** Whether the group value was initialized by `value` or `defaultValue`. */\n readonly isValueInitialized: Signal<boolean>;\n\n /**\n * Set the pressed state of `value` within the group. The item computes the next pressed boolean\n * (Base UI parity — the item is the source of truth), so the group applies it rather than\n * re-deriving the toggle from its current value set.\n */\n toggle(\n value: string,\n nextPressed: boolean,\n event?: Event,\n eventDetails?: RdxCancelableChangeEventDetails<RdxToggleGroupContextChangeReason>\n ): void;\n}\n\nexport const [injectToggleGroupContext, provideToggleGroupContext] = createContext<RdxToggleGroupContext>(\n 'RdxToggleGroupContext',\n 'components/toggle-group'\n);\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { RdxCompositeMetadata, RdxCompositeRoot } from '@radix-ng/primitives/composite';\nimport {\n BooleanInput,\n Direction,\n provideFormUiState,\n provideValueAccessor,\n RdxFormUiStateHost\n} from '@radix-ng/primitives/core';\nimport { injectDirection } from '@radix-ng/primitives/direction-provider';\nimport { RdxToggleGroupBase, toggleGroupContext } from './toggle-group-base';\nimport { provideToggleGroupContext } from './toggle-group-context';\n\n/**\n * A set of two-state buttons that can be toggled on or off. Owns composite keyboard focus over its\n * `[rdxToggle]` children.\n *\n * @see https://base-ui.com/react/components/toggle-group\n */\n@Directive({\n selector: '[rdxToggleGroup]',\n exportAs: 'rdxToggleGroup',\n hostDirectives: [RdxCompositeRoot, RdxFormUiStateHost],\n providers: [\n provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroup))),\n provideValueAccessor(RdxToggleGroup),\n provideFormUiState(() => inject(RdxToggleGroup).formUi)\n ]\n})\nexport class RdxToggleGroup extends RdxToggleGroupBase {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Text direction for arrow-key navigation. */\n readonly dirInput = input<Direction | undefined>(undefined, { alias: 'dir' });\n readonly dir = injectDirection(this.dirInput);\n\n /**\n * Whether keyboard navigation should loop from the last item back to the first.\n *\n * @default true\n */\n readonly loopFocus = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n private readonly compositeRoot = inject(RdxCompositeRoot, { self: true });\n private readonly itemMetadata = computed(() =>\n Array.from(this.compositeRoot.itemMap().values()).filter(isToggleItemMetadata)\n );\n private readonly disabledIndices = computed(() =>\n this.itemMetadata()\n .filter((metadata) => metadata.disabled)\n .map((metadata) => metadata.index)\n );\n private readonly activeIndex = computed(() => {\n const pressedValues = this.pressedValues();\n if (pressedValues.length === 0) {\n return -1;\n }\n\n return this.itemMetadata().find((metadata) => pressedValues.includes(metadata.value))?.index ?? -1;\n });\n\n constructor() {\n super();\n\n effect(() => {\n this.compositeRoot.setOrientation(this.orientation());\n this.compositeRoot.setDir(this.dir());\n this.compositeRoot.setLoopFocus(this.loopFocus());\n this.compositeRoot.setEnableHomeAndEndKeys(true);\n });\n\n effect(() => {\n this.compositeRoot.setDisabledIndices(this.disabledIndices());\n });\n\n effect(() => {\n const activeIndex = this.activeIndex();\n\n if (activeIndex === -1 || this.disabledIndices().includes(activeIndex)) {\n return;\n }\n\n const activeElement = this.elementRef.nativeElement.ownerDocument.activeElement;\n if (activeElement && this.elementRef.nativeElement.contains(activeElement)) {\n return;\n }\n\n this.compositeRoot.setHighlightedIndex(activeIndex);\n });\n }\n}\n\ninterface RdxToggleItemMetadata {\n [key: string]: unknown;\n disabled: boolean;\n value: string;\n}\n\nfunction isToggleItemMetadata(metadata: RdxCompositeMetadata): metadata is RdxCompositeMetadata<RdxToggleItemMetadata> {\n return typeof metadata['disabled'] === 'boolean' && typeof metadata['value'] === 'string';\n}\n","import { Directive, inject } from '@angular/core';\nimport { provideFormUiState, provideValueAccessor, RdxFormUiStateHost } from '@radix-ng/primitives/core';\nimport { injectToolbarGroupContext, injectToolbarRootContext } from '@radix-ng/primitives/toolbar';\nimport { RdxToggleGroupBase, toggleGroupContext } from './toggle-group-base';\nimport { provideToggleGroupContext } from './toggle-group-context';\n\n/**\n * A toggle group that does NOT create its own composite root, for use inside a container that\n * already owns keyboard focus (e.g. a toolbar). The `[rdxToggle]` children register with the nearest\n * ancestor composite root instead. Mirrors Base UI's behavior of skipping its composite root\n * when nested in a toolbar.\n */\n@Directive({\n selector: '[rdxToggleGroupWithoutFocus]',\n exportAs: 'rdxToggleGroupWithoutFocus',\n hostDirectives: [RdxFormUiStateHost],\n providers: [\n provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroupWithoutFocus))),\n provideValueAccessor(RdxToggleGroupWithoutFocus),\n provideFormUiState(() => inject(RdxToggleGroupWithoutFocus).formUi)\n ]\n})\nexport class RdxToggleGroupWithoutFocus extends RdxToggleGroupBase {\n private readonly toolbarRootContext = injectToolbarRootContext(true);\n private readonly toolbarGroupContext = injectToolbarGroupContext(true);\n\n protected override isExternallyDisabled(): boolean {\n return (this.toolbarRootContext?.disabled() ?? false) || (this.toolbarGroupContext?.disabled() ?? false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@radix-ng/primitives",
3
- "version": "1.0.10",
4
- "description": "Headless, signals-first UI primitives for Angular.",
3
+ "version": "1.1.1",
4
+ "description": "Headless, signals-first UI primitives with first-class Angular Forms support.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -15,8 +15,13 @@
15
15
  "components",
16
16
  "ui",
17
17
  "angular",
18
+ "angular-forms",
19
+ "signal-forms",
18
20
  "radix-ng",
19
- "headless"
21
+ "headless",
22
+ "headless-ui",
23
+ "accessibility",
24
+ "base-ui"
20
25
  ],
21
26
  "peerDependencies": {
22
27
  "@angular/core": "^21.0.0 || ^22.0.0",
@@ -80,6 +80,10 @@ declare class RdxAutocompleteRoot extends RdxFormUiControlBase implements Contro
80
80
  readonly readOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
81
81
  /** Whether a value is required (for forms). */
82
82
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
83
+ /** Name used when serializing this composite control into native `FormData`. */
84
+ readonly name: _angular_core.InputSignal<string | undefined>;
85
+ /** Id of an external form that owns this control. */
86
+ readonly form: _angular_core.InputSignal<string | undefined>;
83
87
  /** Whether keyboard navigation wraps at the list boundaries. */
84
88
  readonly loopFocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
85
89
  /**
@@ -109,6 +113,8 @@ declare class RdxAutocompleteRoot extends RdxFormUiControlBase implements Contro
109
113
  * built-in filtering disabled.
110
114
  */
111
115
  readonly filter: _angular_core.InputSignal<AutocompleteFilter | null | undefined>;
116
+ /** Locale for the default `contains` filter's string comparison. Defaults to the runtime locale. */
117
+ readonly locale: _angular_core.InputSignal<Intl.LocalesArgument>;
112
118
  /** Maximum number of matching items to show. `-1` (default) means no limit. */
113
119
  readonly limit: _angular_core.InputSignalWithTransform<number, unknown>;
114
120
  /** The full set of item values for {@link virtualized} mode. */
@@ -129,12 +135,16 @@ declare class RdxAutocompleteRoot extends RdxFormUiControlBase implements Contro
129
135
  readonly onOpenChangeComplete: _angular_core.OutputEmitterRef<boolean>;
130
136
  /** Constant signals exposed to the combobox context (autocomplete is always single-value). */
131
137
  readonly alwaysFalse: _angular_core.WritableSignal<boolean>;
138
+ readonly inputOwnsFormValue: _angular_core.Signal<boolean>;
132
139
  readonly noneMode: _angular_core.WritableSignal<"none">;
133
140
  private readonly cvaDisabled;
134
141
  readonly disabledState: _angular_core.Signal<boolean>;
142
+ private readonly nativeFormControl;
135
143
  readonly requiredState: _angular_core.Signal<boolean>;
136
144
  /** @ignore */
137
145
  readonly invalidState: _angular_core.Signal<boolean>;
146
+ readonly pendingState: _angular_core.Signal<boolean>;
147
+ readonly validState: _angular_core.Signal<boolean | null>;
138
148
  /** @ignore */
139
149
  readonly touchedState: _angular_core.Signal<boolean>;
140
150
  /** @ignore */
@@ -227,7 +237,7 @@ declare class RdxAutocompleteRoot extends RdxFormUiControlBase implements Contro
227
237
  registerOnTouched(fn: () => void): void;
228
238
  setDisabledState(isDisabled: boolean): void;
229
239
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxAutocompleteRoot, never>;
230
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxAutocompleteRoot, "[rdxAutocompleteRoot]", ["rdxAutocompleteRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "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; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "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; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringValue": { "alias": "itemToStringValue"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "onValueChange": "onValueChange"; "onOpenChange": "onOpenChange"; "onItemHighlighted": "onItemHighlighted"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1.RdxPopper; inputs: {}; outputs: {}; }]>;
240
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxAutocompleteRoot, "[rdxAutocompleteRoot]", ["rdxAutocompleteRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "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; }; "grid": { "alias": "grid"; "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; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringValue": { "alias": "itemToStringValue"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "onValueChange": "onValueChange"; "onOpenChange": "onOpenChange"; "onItemHighlighted": "onItemHighlighted"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1.RdxPopper; inputs: {}; outputs: {}; }]>;
231
241
  }
232
242
 
233
243
  /**
@@ -270,7 +280,6 @@ declare class RdxAutocompleteInput {
270
280
  /** Marks the input as invalid independently of any Field state. */
271
281
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
272
282
  protected readonly ariaAutocomplete: _angular_core.Signal<_radix_ng_primitives_autocomplete.AutocompleteMode>;
273
- protected readonly invalidState: _angular_core.Signal<boolean>;
274
283
  /**
275
284
  * Tri-state *displayed* validity: the enclosing Field's gated `validState` when inside a `rdxFieldRoot`
276
285
  * (so a field whose `validationMode` defers display (e.g. `onBlur`) keeps the input neutral until revealed), else the input's
@@ -587,6 +596,9 @@ declare class RdxAutocompleteEmpty {
587
596
  dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
588
597
  value: _angular_core.ModelSignal<_radix_ng_primitives_combobox.ComboboxValue>;
589
598
  inputValue: _angular_core.ModelSignal<string>;
599
+ name: _angular_core.InputSignal<string | undefined>;
600
+ form: _angular_core.InputSignal<string | undefined>;
601
+ inputOwnsFormValue: _angular_core.Signal<boolean>;
590
602
  open: _angular_core.ModelSignal<boolean>;
591
603
  present: _angular_core.Signal<boolean>;
592
604
  multiple: _angular_core.Signal<boolean>;
@@ -595,6 +607,8 @@ declare class RdxAutocompleteEmpty {
595
607
  readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
596
608
  requiredState: _angular_core.Signal<boolean>;
597
609
  invalidState: _angular_core.Signal<boolean>;
610
+ pendingState: _angular_core.Signal<boolean>;
611
+ validState: _angular_core.Signal<boolean | null>;
598
612
  touchedState: _angular_core.Signal<boolean>;
599
613
  dirtyState: _angular_core.Signal<boolean>;
600
614
  openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -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>;
@@ -64,11 +66,10 @@ declare const provideCheckboxRootContext: (useFactory: () => CheckboxRootContext
64
66
  */
65
67
  declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
66
68
  private readonly controlValueAccessor;
67
- private readonly elementRef;
68
- private readonly renderer;
69
- private uncheckedInputElement;
69
+ private readonly ngControlState;
70
70
  /** The group this checkbox belongs to, if it is rendered inside a `rdxCheckboxGroup`. */
71
71
  private readonly group;
72
+ private readonly nativeInput;
72
73
  /**
73
74
  * The controlled checked state of the checkbox. Must be used in conjunction with onCheckedChange.
74
75
  *
@@ -98,11 +99,12 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
98
99
  * Bound publicly as `[value]`; the TS member is named `submitValue` so the
99
100
  * directive can satisfy `RdxFormCheckboxControl`, whose contract reserves a
100
101
  * `value` member for `RdxFormValueControl` and forbids it on checkbox-style
101
- * controls. (Checkbox is not yet marked `implements` — its `checked` is still
102
- * `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.
103
105
  * @group Props
104
106
  */
105
- readonly submitValue: _angular_core.InputSignal<string>;
107
+ readonly submitValue: _angular_core.InputSignal<string | undefined>;
106
108
  /**
107
109
  * The value submitted with the form when the checkbox is unchecked.
108
110
  * By default, unchecked checkboxes do not submit any value, matching native checkbox behavior.
@@ -131,6 +133,8 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
131
133
  * @group Props
132
134
  */
133
135
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
136
+ /** Whether async validation is pending. Pending checkboxes publish neither valid nor invalid state. */
137
+ readonly pending: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
134
138
  /**
135
139
  * Whether the checkbox has been touched. A `model()` so Signal Forms can write it; the checkbox
136
140
  * also sets it on toggle (and emits {@link touch}).
@@ -148,8 +152,8 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
148
152
  */
149
153
  readonly errors: _angular_core.InputSignal<readonly RdxValidationError[]>;
150
154
  /**
151
- * Name of the form control. Submitted with the form as part of a name/value pair. Inside a
152
- * `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.
153
157
  * @group Props
154
158
  */
155
159
  readonly name: _angular_core.InputSignal<string | undefined>;
@@ -164,6 +168,14 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
164
168
  * @group Props
165
169
  */
166
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>;
167
179
  /**
168
180
  * Event emitted when the checkbox checked state changes.
169
181
  * @group Emits
@@ -177,8 +189,8 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
177
189
  /**
178
190
  * @ignore
179
191
  * The effective checked state as a `boolean`. Inside a `rdxCheckboxGroup` it is derived from the
180
- * group (a `parent` checkbox is checked only when every child is; a child from whether its `name`
181
- * 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.
182
194
  */
183
195
  readonly checkedState: Signal<boolean>;
184
196
  /**
@@ -191,8 +203,12 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
191
203
  readonly disabledState: Signal<boolean>;
192
204
  readonly readOnlyState: Signal<boolean>;
193
205
  private readonly dirtyValue;
206
+ /** Validation errors from the checkbox input and a same-host Reactive/template-driven form control. */
207
+ readonly validationErrors: Signal<readonly RdxValidationError[]>;
194
208
  /** @ignore Invalid when the `invalid` input is set or the `errors` list is non-empty. */
195
209
  readonly invalidState: Signal<boolean>;
210
+ /** @ignore Whether explicit or Angular-owned async validation is pending. */
211
+ readonly pendingState: Signal<boolean>;
196
212
  /** Tri-state display validity exposed by an enclosing Field; absent when standalone. */
197
213
  private readonly fieldValidity;
198
214
  /**
@@ -207,15 +223,15 @@ declare class RdxCheckboxRootDirective implements RdxFormCheckboxControl {
207
223
  /** @ignore */
208
224
  readonly dirtyState: Signal<boolean>;
209
225
  readonly state: Signal<"indeterminate" | "checked" | "unchecked">;
226
+ private readonly nativeInputOwnsValue;
210
227
  constructor();
211
228
  toggle(event?: Event): void;
212
- private syncUncheckedInput;
213
- private ensureUncheckedInput;
214
- private removeUncheckedInput;
215
- private setOptionalAttribute;
216
- private setBooleanAttribute;
229
+ /** Reset control-owned interaction state; Angular Signal Forms calls this from `FieldState.reset()`. */
230
+ reset(): void;
231
+ /** @ignore Register the optional native checkbox so it owns checked-value serialization. */
232
+ registerNativeInput(input: HTMLInputElement): () => void;
217
233
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxCheckboxRootDirective, never>;
218
- 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; }; "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: {}; }]>;
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: {}; }]>;
219
235
  }
220
236
 
221
237
  type RdxCheckboxGroupValueChangeReason = 'none';
@@ -225,45 +241,51 @@ interface RdxCheckboxGroupValueChangeEvent {
225
241
  eventDetails: RdxCheckboxGroupValueChangeEventDetails;
226
242
  }
227
243
  interface RdxCheckboxGroupContext {
228
- /** The names of the currently checked checkboxes. */
244
+ /** The values of the currently checked checkboxes. */
229
245
  value: Signal<string[]>;
230
- /** 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. */
231
247
  allValues: Signal<string[]>;
248
+ /** External owning form id inherited by optional child native inputs. */
249
+ form: Signal<string | undefined>;
232
250
  /** Whether the whole group is disabled. */
233
251
  disabled: Signal<boolean>;
234
252
  /** The derived state of a `parent` checkbox: all / none / some checked. */
235
253
  parentState: Signal<CheckedState>;
236
254
  /** The space-separated control ids the `parent` checkbox controls (for `aria-controls`). */
237
255
  controlledIds: Signal<string | undefined>;
238
- /** A stable id for a child's control element, derived from the group id and the child name. */
239
- controlId: (name: string) => string;
240
- /** Toggle a single child by name. */
241
- 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;
242
260
  /** Toggle every child on or off (used by a `parent` checkbox). */
243
261
  toggleAll: (event?: Event) => void;
244
- /** Register a child's name and disabled state so the parent can preserve disabled items. */
245
- 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;
246
264
  /** Register a child's control element id so the parent can reference it via `aria-controls`. */
247
- registerControl: (name: string, id: string) => () => void;
265
+ registerControl: (value: string, id: string) => () => void;
248
266
  }
249
267
  declare const injectCheckboxGroupContext: _radix_ng_primitives_core.InjectContext<RdxCheckboxGroupContext>;
250
268
  declare const provideCheckboxGroupContext: (useFactory: () => RdxCheckboxGroupContext) => _angular_core.Provider;
251
269
  /**
252
- * 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).
253
271
  *
254
- * Each child `rdxCheckboxRoot` participates by its `name`. A child marked `parent` becomes a
255
- * "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`.
256
274
  */
257
275
  declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements ControlValueAccessor, RdxFormValueControl<string[]> {
258
- /** 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)]`. */
259
277
  readonly value: _angular_core.ModelSignal<string[]>;
260
- /** The names checked initially when the group is uncontrolled. */
278
+ /** The values checked initially when the group is uncontrolled. */
261
279
  readonly defaultValue: _angular_core.InputSignal<string[] | undefined>;
262
- /** 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. */
263
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>;
264
286
  /** Whether the whole group is disabled. */
265
287
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
266
- /** Emits the new array of checked names whenever the value changes. */
288
+ /** Emits the new array of checked values whenever the value changes. */
267
289
  readonly onValueChange: _angular_core.OutputEmitterRef<RdxCheckboxGroupValueChangeEvent>;
268
290
  private readonly disabledByCva;
269
291
  readonly disabledState: Signal<boolean>;
@@ -277,11 +299,11 @@ declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements
277
299
  private seeded;
278
300
  /** Where the parent is in its mixed → on → off cycle. Reset to `mixed` on any direct child change. */
279
301
  private parentStatus;
280
- /** Per-name disabled signals, so the parent can preserve disabled-but-checked children. */
281
- private readonly disabledByName;
302
+ /** Per-value disabled signals, so the parent can preserve disabled-but-checked children. */
303
+ private readonly disabledByValue;
282
304
  /** Stable group id used to derive child control ids when the consumer sets none. */
283
305
  private readonly elementId;
284
- /** Registered control element ids, keyed by child name. */
306
+ /** Registered control element ids, keyed by child value. */
285
307
  private readonly controlIds;
286
308
  /** The space-separated control ids in `allValues` order, for the parent's `aria-controls`. */
287
309
  readonly controlledIds: Signal<string | undefined>;
@@ -291,14 +313,14 @@ declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements
291
313
  constructor();
292
314
  /** @ignore Bridge the CVA `onTouched` so `markAsTouched()` also notifies Reactive/template forms. */
293
315
  protected formUiTouchTarget(): RdxFormUiTouchTarget;
294
- /** @ignore Register a child's disabled signal keyed by its name. */
295
- registerChild(name: string, disabled: Signal<boolean>): () => void;
296
- /** A stable control id for a child, derived from the group id and the child name. */
297
- 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;
298
320
  /** @ignore Register a child's control element id so the parent can list it in `aria-controls`. */
299
- registerControl(name: string, id: string): () => void;
300
- /** Add/remove a single child name from the value (a direct child change). */
301
- 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;
302
324
  /**
303
325
  * Toggle from the `parent` checkbox. Mirrors Base UI's `useCheckboxGroupParent`:
304
326
  *
@@ -309,7 +331,7 @@ declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements
309
331
  * Disabled-but-checked children are always preserved (they cannot be toggled programmatically).
310
332
  */
311
333
  toggleAll(event?: Event): void;
312
- private isNameDisabled;
334
+ private isValueDisabled;
313
335
  /** Seed the remembered selection from the current value the first time the parent is used. */
314
336
  private ensureSeeded;
315
337
  private emit;
@@ -322,7 +344,7 @@ declare class RdxCheckboxGroupDirective extends RdxFormUiControlBase implements
322
344
  /** @ignore */
323
345
  setDisabledState(isDisabled: boolean): void;
324
346
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxCheckboxGroupDirective, never>;
325
- 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: {}; }]>;
326
348
  }
327
349
 
328
350
  declare class RdxCheckboxIndicatorDirective {