@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.
- package/README.md +26 -5
- package/fesm2022/radix-ng-primitives-autocomplete.mjs +88 -21
- package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +199 -129
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-combobox.mjs +203 -52
- package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-composite.mjs +221 -36
- package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +352 -24
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +11 -5
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +127 -23
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-form.mjs +35 -4
- package/fesm2022/radix-ng-primitives-form.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-input.mjs +87 -15
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +34 -7
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +38 -7
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs +80 -11
- package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-radio.mjs +49 -2
- package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +6 -3
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +70 -14
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-signal-forms.mjs +27 -11
- package/fesm2022/radix-ng-primitives-signal-forms.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +17 -2
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +60 -7
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +12 -6
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +25 -3
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/package.json +8 -3
- package/types/radix-ng-primitives-autocomplete.d.ts +16 -2
- package/types/radix-ng-primitives-checkbox.d.ts +66 -44
- package/types/radix-ng-primitives-combobox.d.ts +74 -3
- package/types/radix-ng-primitives-composite.d.ts +48 -2
- package/types/radix-ng-primitives-core.d.ts +212 -96
- package/types/radix-ng-primitives-date-field.d.ts +7 -4
- package/types/radix-ng-primitives-field.d.ts +55 -8
- package/types/radix-ng-primitives-form.d.ts +9 -0
- package/types/radix-ng-primitives-input.d.ts +10 -2
- package/types/radix-ng-primitives-menu.d.ts +45 -4
- package/types/radix-ng-primitives-navigation-menu.d.ts +2 -2
- package/types/radix-ng-primitives-number-field.d.ts +12 -5
- package/types/radix-ng-primitives-popover.d.ts +2 -2
- package/types/radix-ng-primitives-popper.d.ts +60 -15
- package/types/radix-ng-primitives-preview-card.d.ts +2 -2
- package/types/radix-ng-primitives-radio.d.ts +6 -1
- package/types/radix-ng-primitives-select.d.ts +25 -4
- package/types/radix-ng-primitives-signal-forms.d.ts +22 -8
- package/types/radix-ng-primitives-slider.d.ts +2 -1
- package/types/radix-ng-primitives-switch.d.ts +19 -3
- package/types/radix-ng-primitives-time-field.d.ts +9 -6
- package/types/radix-ng-primitives-toggle-group.d.ts +5 -1
- 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.
|
|
4
|
-
"description": "Headless, signals-first UI primitives
|
|
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
|
|
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.
|
|
102
|
-
*
|
|
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
|
|
152
|
-
* `
|
|
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
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
|
244
|
+
/** The values of the currently checked checkboxes. */
|
|
229
245
|
value: Signal<string[]>;
|
|
230
|
-
/** All checkbox
|
|
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
|
|
239
|
-
controlId: (
|
|
240
|
-
/** Toggle a single child by
|
|
241
|
-
toggleValue: (
|
|
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
|
|
245
|
-
registerChild: (
|
|
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: (
|
|
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
|
|
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 `
|
|
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
|
|
276
|
+
/** The values of the currently checked checkboxes. Use with `onValueChange` or `[(value)]`. */
|
|
259
277
|
readonly value: _angular_core.ModelSignal<string[]>;
|
|
260
|
-
/** The
|
|
278
|
+
/** The values checked initially when the group is uncontrolled. */
|
|
261
279
|
readonly defaultValue: _angular_core.InputSignal<string[] | undefined>;
|
|
262
|
-
/** 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
|
|
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-
|
|
281
|
-
private readonly
|
|
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
|
|
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
|
|
295
|
-
registerChild(
|
|
296
|
-
/** A stable control id for a child, derived from the group id and
|
|
297
|
-
controlId(
|
|
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(
|
|
300
|
-
/** Add/remove a single child
|
|
301
|
-
toggleValue(
|
|
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
|
|
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 {
|