Fields for selecting one or multiple values from a set of options.
select
Single or multi-select dropdown.
{
key: 'country',
type: 'select',
value: '',
label: 'Country',
required: true,
options: [
{ value: 'us', label: 'United States' },
{ value: 'uk', label: 'United Kingdom' },
],
placeholder: 'Select country',
}Core Properties:
options: Array of{ label: DynamicText, value: T, disabled?: boolean }objects (at field level, not in props).labelaccepts static strings, signals, or observables;disabledmakes the option non-selectableplaceholder: Placeholder text when no value selected (at field level, not in props)
Adapter Props
Compose NgForgeField via hostDirectives and register the field type with optionsFieldMapper. See Building an Adapter for the full guide.
// my-select.component.ts
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
import {
injectNgForgeField,
NgForgeControl,
NgForgeFieldHost,
type SelectField,
} from '@ng-forge/dynamic-forms/integration';
@Component({
selector: 'my-select',
imports: [NgForgeControl],
hostDirectives: [NgForgeFieldHost],
template: `<!-- mark the control element with ngForgeControl so meta + aria land there -->`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export default class MySelectComponent {
protected readonly ngf = injectNgForgeField<unknown>();
readonly props = input<SelectField['props']>();
}
// my-select.type.ts
import type { FieldTypeDefinition } from '@ng-forge/dynamic-forms/integration';
import { optionsFieldMapper } from '@ng-forge/dynamic-forms/integration';
export const MySelectType: FieldTypeDefinition = {
name: 'select',
loadComponent: () => import('./my-select.component'),
mapper: optionsFieldMapper,
};radio
Single selection from multiple options.
{
key: 'plan',
type: 'radio',
value: '',
label: 'Subscription Plan',
required: true,
options: [
{ value: 'free', label: 'Free' },
{ value: 'pro', label: 'Pro - $10/month' },
{ value: 'enterprise', label: 'Enterprise - $50/month' },
],
}Core Properties:
options: Array of{ label: DynamicText, value: string, disabled?: boolean }objects (at field level, not in props).labelaccepts static strings, signals, or observables;disabledmakes the option non-selectable
Adapter Props
Compose NgForgeField via hostDirectives and register the field type with optionsFieldMapper. See Building an Adapter for the full guide.
// my-radio.component.ts
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
import {
injectNgForgeField,
NgForgeControl,
NgForgeFieldHost,
type RadioField,
} from '@ng-forge/dynamic-forms/integration';
@Component({
selector: 'my-radio',
imports: [NgForgeControl],
hostDirectives: [NgForgeFieldHost],
template: `<!-- mark the control element with ngForgeControl so meta + aria land there -->`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export default class MyRadioComponent {
protected readonly ngf = injectNgForgeField<unknown>();
readonly props = input<RadioField['props']>();
}
// my-radio.type.ts
import type { FieldTypeDefinition } from '@ng-forge/dynamic-forms/integration';
import { optionsFieldMapper } from '@ng-forge/dynamic-forms/integration';
export const MyRadioType: FieldTypeDefinition = {
name: 'radio',
loadComponent: () => import('./my-radio.component'),
mapper: optionsFieldMapper,
};checkbox
Boolean toggle control.
{
key: 'newsletter',
type: 'checkbox',
value: false,
label: 'Subscribe to newsletter',
}Adapter Props
Compose NgForgeField via hostDirectives and register the field type with checkboxFieldMapper. See Building an Adapter for the full guide.
// my-checkbox.component.ts
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
import {
injectNgForgeField,
NgForgeControl,
NgForgeFieldHost,
type CheckboxField,
} from '@ng-forge/dynamic-forms/integration';
@Component({
selector: 'my-checkbox',
imports: [NgForgeControl],
hostDirectives: [NgForgeFieldHost],
template: `<!-- mark the control element with ngForgeControl so meta + aria land there -->`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export default class MyCheckboxComponent {
protected readonly ngf = injectNgForgeField<boolean>();
readonly props = input<CheckboxField['props']>();
}
// my-checkbox.type.ts
import type { FieldTypeDefinition } from '@ng-forge/dynamic-forms/integration';
import { checkboxFieldMapper } from '@ng-forge/dynamic-forms/integration';
export const MyCheckboxType: FieldTypeDefinition = {
name: 'checkbox',
loadComponent: () => import('./my-checkbox.component'),
mapper: checkboxFieldMapper,
};toggle
Boolean switch control. Similar to checkbox but with a switch UI.
{
key: 'darkMode',
type: 'toggle',
label: 'Enable Dark Mode',
value: false,
}Adapter Props
Compose NgForgeField via hostDirectives and register the field type with checkboxFieldMapper. See Building an Adapter for the full guide.
// my-toggle.component.ts
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
import {
injectNgForgeField,
NgForgeControl,
NgForgeFieldHost,
type ToggleField,
} from '@ng-forge/dynamic-forms/integration';
@Component({
selector: 'my-toggle',
imports: [NgForgeControl],
hostDirectives: [NgForgeFieldHost],
template: `<!-- mark the control element with ngForgeControl so meta + aria land there -->`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export default class MyToggleComponent {
protected readonly ngf = injectNgForgeField<boolean>();
readonly props = input<ToggleField['props']>();
}
// my-toggle.type.ts
import type { FieldTypeDefinition } from '@ng-forge/dynamic-forms/integration';
import { checkboxFieldMapper } from '@ng-forge/dynamic-forms/integration';
export const MyToggleType: FieldTypeDefinition = {
name: 'toggle',
loadComponent: () => import('./my-toggle.component'),
mapper: checkboxFieldMapper,
};multi-checkbox
Multiple selection from a list of checkboxes. Value is an array of selected values.
{
key: 'interests',
type: 'multi-checkbox',
label: 'Interests',
value: [],
options: [
{ value: 'tech', label: 'Technology' },
{ value: 'sports', label: 'Sports' },
{ value: 'music', label: 'Music' },
],
}Core Properties:
options: Array of{ label: DynamicText, value: T, disabled?: boolean }objects (at field level, not in props).labelaccepts static strings, signals, or observables;disabledmakes the option non-selectable
Adapter Props
Compose NgForgeField via hostDirectives and register the field type with optionsFieldMapper. See Building an Adapter for the full guide.
// my-multi-checkbox.component.ts
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
import {
injectNgForgeField,
NgForgeControl,
NgForgeFieldHost,
type MultiCheckboxField,
} from '@ng-forge/dynamic-forms/integration';
@Component({
selector: 'my-multi-checkbox',
imports: [NgForgeControl],
hostDirectives: [NgForgeFieldHost],
template: `<!-- mark the control element with ngForgeControl so meta + aria land there -->`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export default class MyMultiCheckboxComponent {
protected readonly ngf = injectNgForgeField<unknown[]>();
readonly props = input<MultiCheckboxField['props']>();
}
// my-multi-checkbox.type.ts
import type { FieldTypeDefinition } from '@ng-forge/dynamic-forms/integration';
import { optionsFieldMapper } from '@ng-forge/dynamic-forms/integration';
export const MyMultiCheckboxType: FieldTypeDefinition = {
name: 'multi-checkbox',
loadComponent: () => import('./my-multi-checkbox.component'),
mapper: optionsFieldMapper,
};