diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.html index 36c15fb..fe5bf72 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.html @@ -127,11 +127,13 @@ af-name="wholeDay" af-form="franvaro-report-form" > - + diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.ts index 56f4719..f3454f2 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.ts @@ -1,4 +1,3 @@ -import { RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; @@ -9,6 +8,7 @@ import { CustomError } from '@msfa-models/error/custom-error'; import { FranvaroReason } from '@msfa-models/franvaro-reason.model'; import { Franvaro } from '@msfa-models/franvaro.model'; import { formatDate } from '@msfa-utils/format-to-date.util'; +import { Radiobutton } from '@ui/radiobutton-group/radiobutton.model'; import { addDays } from 'date-fns'; import { BehaviorSubject, Observable } from 'rxjs'; import { map, shareReplay, switchMap, take } from 'rxjs/operators'; @@ -52,14 +52,12 @@ export class FranvaroReportFormComponent { reasons$: Observable = this.franvaroReportFormService.reasons$; otherKnownReasons$: Observable = this.franvaroReportFormService.otherKnownReasons$; - wholeDayOrPartOfDayRadiobuttons: RadiobuttonModel[] = [ + wholeDayOrPartOfDayRadiobuttons: Radiobutton[] = [ { label: 'Heldag', value: true }, { label: 'Del av dag', value: false }, ]; - constructor(private franvaroReportFormService: FranvaroReportFormService, private activatedRoute: ActivatedRoute) { - this.dateFormControl.valueChanges.subscribe(value => console.log(value)); - } + constructor(private franvaroReportFormService: FranvaroReportFormService, private activatedRoute: ActivatedRoute) {} get showOtherKnownReasonsSelect(): boolean { return this.reasonFormControl.value === ANNAN_KAND_ORSAK_ID; diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.module.ts index 1ccd187..ba3a146 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.module.ts @@ -1,7 +1,6 @@ import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog'; import { DigiNgFormDatepickerModule } from '@af/digi-ng/_form/form-datepicker'; import { DigiNgFormInputModule } from '@af/digi-ng/_form/form-input'; -import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group'; import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select'; import { DigiNgFormValidationMessageModule } from '@af/digi-ng/_form/form-validation-message'; import { CommonModule } from '@angular/common'; @@ -11,6 +10,7 @@ import { RouterModule } from '@angular/router'; import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module'; import { LayoutModule } from '@msfa-shared/components/layout/layout.module'; import { UiLoaderModule } from '@ui/loader/loader.module'; +import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module'; import { UiSkeletonModule } from '@ui/skeleton/skeleton.module'; import { UiTextareaModule } from '@ui/textarea/textarea.module'; import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module'; @@ -32,12 +32,12 @@ import { FranvaroReportFormService } from './franvaro-report-form.service'; ReportDescriptionListModule, DigiNgFormSelectModule, DigiNgFormDatepickerModule, - DigiNgFormRadiobuttonGroupModule, UiSkeletonModule, DigiNgFormInputModule, DigiNgFormValidationMessageModule, DigiNgDialogModule, UiTextareaModule, + UiRadiobuttonGroupModule, ], providers: [FranvaroReportFormService], exports: [FranvaroReportFormComponent], diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.html index 6c64a93..0446fb9 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.html @@ -46,12 +46,14 @@ af-name="distance" af-form="gemensam-planering-form-form" > - + [uiBooleanValues]="true" + [uiRequired]="true" + [uiAnnounceIfOptional]="true" + [uiRadiobuttons]="distanceRadiobuttons" + uiDirection="horizontal" + >

diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.ts index 4dfca21..651fac6 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.ts @@ -1,4 +1,4 @@ -import { RadiobuttonGroupDirection, RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group'; +import { RadiobuttonGroupDirection } from '@af/digi-ng/_form/form-radiobutton-group'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { FormArray, FormControl, FormGroup } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; @@ -9,6 +9,7 @@ import { GemensamPlanering, mapGemensamPlaneringToGemensamPlaneringPostRequest, } from '@msfa-models/gemensam-planering.model'; +import { Radiobutton } from '@ui/radiobutton-group/radiobutton.model'; import { addDays } from 'date-fns'; import { BehaviorSubject, Observable } from 'rxjs'; import { map, shareReplay, switchMap, take } from 'rxjs/operators'; @@ -48,7 +49,7 @@ export class GemensamPlaneringFormComponent { [GemensamPlaneringFormValidator.isGemensamPlaneringValid(this.obligatoryActivityIds)] ); - distanceRadiobuttons: RadiobuttonModel[] = [ + distanceRadiobuttons: Radiobutton[] = [ { label: 'Ja', value: true }, { label: 'Nej', value: false }, ]; diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.module.ts index 5e6f702..d03b761 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.module.ts @@ -1,6 +1,5 @@ import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog'; import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox'; -import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group'; import { DigiNgProgressProgressbarModule } from '@af/digi-ng/_progress/progressbar'; import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; @@ -9,6 +8,7 @@ import { RouterModule } from '@angular/router'; import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module'; import { LayoutModule } from '@msfa-shared/components/layout/layout.module'; import { UiLoaderModule } from '@ui/loader/loader.module'; +import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module'; import { UiSkeletonModule } from '@ui/skeleton/skeleton.module'; import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module'; import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module'; @@ -23,7 +23,7 @@ import { GemensamPlaneringFormService } from './gemensam-planering-form.service' RouterModule.forChild([{ path: '', component: GemensamPlaneringFormComponent }]), LayoutModule, DigiNgProgressProgressbarModule, - DigiNgFormRadiobuttonGroupModule, + UiRadiobuttonGroupModule, ReactiveFormsModule, ReportLayoutModule, BackLinkModule, diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.component.html index 80113e2..bc026f1 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.component.html @@ -51,23 +51,17 @@ af-name="languageSupport" af-form="periodisk-redovisning-form" > - + -

- - Ett val är obligatoriskt - -
@@ -76,22 +70,17 @@ af-name="jobOffered" af-form="periodisk-redovisning-form" > - + -
- - Ett val är obligatoriskt - -
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.component.ts index cc94427..d971e08 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.component.ts @@ -14,6 +14,7 @@ import { CustomError } from '@msfa-models/error/custom-error'; import { capitalizeWords } from '@msfa-utils/capitalize-words.util'; import { formatDate, formatToDate } from '@msfa-utils/format-to-date.util'; import { RequiredValidator } from '@msfa-validators/required.validator'; +import { Radiobutton } from '@ui/radiobutton-group/radiobutton.model'; import { subMonths } from 'date-fns'; import { BehaviorSubject, combineLatest, Observable } from 'rxjs'; import { map, shareReplay, switchMap, take } from 'rxjs/operators'; @@ -67,6 +68,11 @@ export class PeriodiskRedovisningFormComponent implements OnInit { shareReplay(1) ); + yesNoRadiobuttons: Radiobutton[] = [ + { label: 'Ja', value: true }, + { label: 'Nej', value: false }, + ]; + periods$: Observable = this.avrop$.pipe( map(avrop => extractAvropPeriods(avrop.startDate, avrop.endDate)) ); diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.module.ts index eb78bb7..1f50f3a 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/periodisk-redovisning-form/periodisk-redovisning-form.module.ts @@ -1,6 +1,5 @@ import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog'; import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox'; -import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group'; import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select'; import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; @@ -9,6 +8,7 @@ import { RouterModule } from '@angular/router'; import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module'; import { LayoutModule } from '@msfa-shared/components/layout/layout.module'; import { UiLoaderModule } from '@ui/loader/loader.module'; +import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module'; import { UiSkeletonModule } from '@ui/skeleton/skeleton.module'; import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module'; import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module'; @@ -30,8 +30,8 @@ import { PeriodiskRedovisningFormService } from './periodisk-redovisning-form.se UiSkeletonModule, DigiNgDialogModule, DigiNgFormSelectModule, - DigiNgFormRadiobuttonGroupModule, DigiNgFormCheckboxModule, + UiRadiobuttonGroupModule, ], providers: [PeriodiskRedovisningFormService], exports: [PeriodiskRedovisningFormComponent], diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/signal-form/signal-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/signal-form/signal-form.component.html index 1228aa9..2a79308 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/signal-form/signal-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/signal-form/signal-form.component.html @@ -44,11 +44,12 @@
- +
+
+ +
+
+ {{uiValidationMessage}} +
+
diff --git a/libs/ui/src/radiobutton-group/radiobutton-group.component.scss b/libs/ui/src/radiobutton-group/radiobutton-group.component.scss new file mode 100644 index 0000000..32dbbff --- /dev/null +++ b/libs/ui/src/radiobutton-group/radiobutton-group.component.scss @@ -0,0 +1,37 @@ +@import 'variables/gutters'; + +.ui-radiobutton-group { + display: flex; + flex-direction: column; + + &--invalid { + gap: var(--digi--layout--gutter--xs); + } + + &__radiobuttons { + display: flex; + gap: var(--digi--layout--gutter--s); + flex-direction: column; + + &--horizontal { + flex-direction: row; + align-items: center; + gap: $digi--layout--gutter--l; + } + } + + &__radiobutton { + ::ng-deep .digi-form-radiobutton__circle { + top: 50% !important; + transform: translateY(-50%); + + &::after { + top: 50% !important; + left: 50% !important; + } + } + ::ng-deep .digi-form-radiobutton__input:focus ~ .digi-form-radiobutton__circle { + box-shadow: var(--digi--ui--box-shadow--focus) !important; + } + } +} diff --git a/libs/ui/src/radiobutton-group/radiobutton-group.component.spec.ts b/libs/ui/src/radiobutton-group/radiobutton-group.component.spec.ts new file mode 100644 index 0000000..0a7c66d --- /dev/null +++ b/libs/ui/src/radiobutton-group/radiobutton-group.component.spec.ts @@ -0,0 +1,26 @@ +/* tslint:disable:no-unused-variable */ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RadiobuttonGroupComponent } from './radiobutton-group.component'; + +describe('RadiobuttonGroupComponent', () => { + let component: RadiobuttonGroupComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [RadiobuttonGroupComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(RadiobuttonGroupComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/libs/ui/src/radiobutton-group/radiobutton-group.component.stories.ts b/libs/ui/src/radiobutton-group/radiobutton-group.component.stories.ts new file mode 100644 index 0000000..11a0850 --- /dev/null +++ b/libs/ui/src/radiobutton-group/radiobutton-group.component.stories.ts @@ -0,0 +1,16 @@ +import { ReactiveFormsModule } from '@angular/forms'; +import { RadiobuttonGroupComponent } from './radiobutton-group.component'; +import { UiRadiobuttonGroupModule } from './radiobutton-group.module'; + +export default { title: 'RadiobuttonGroup', component: RadiobuttonGroupComponent }; + +const componentModule = { + moduleMetadata: { + imports: [ReactiveFormsModule, UiRadiobuttonGroupModule], + }, +}; + +export const standard = () => ({ + ...componentModule, + template: '', +}); diff --git a/libs/ui/src/radiobutton-group/radiobutton-group.component.ts b/libs/ui/src/radiobutton-group/radiobutton-group.component.ts new file mode 100644 index 0000000..8008591 --- /dev/null +++ b/libs/ui/src/radiobutton-group/radiobutton-group.component.ts @@ -0,0 +1,122 @@ +import { + AfterViewInit, + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Injector, + Input, + OnChanges, + Output, +} from '@angular/core'; +import { ControlValueAccessor, NgControl, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { RadiobuttonGroupDirection } from './radiobutton-group-direction.enum'; +import { Radiobutton } from './radiobutton.model'; + +/** + * A radiobutton-group component. + * + * ## Usage + * ``import {UiRadiobuttonGroupModule} from '@ui/radiobutton-group/radiobutton-group.module';`` + */ +@Component({ + selector: 'ui-radiobutton-group', + templateUrl: './radiobutton-group.component.html', + styleUrls: ['./radiobutton-group.component.scss'], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: RadiobuttonGroupComponent, + multi: true, + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RadiobuttonGroupComponent implements ControlValueAccessor, AfterViewInit, OnChanges { + @Input() uiDirection: RadiobuttonGroupDirection; + @Input() uiInvalid: boolean; + @Input() uiValidationMessage: string; + @Input() uiRadiobuttons: Radiobutton[]; + @Input() uiBooleanValues: boolean; + @Input() uiSecondary: boolean; + @Input() uiRequired: boolean; + @Input() uiName: string; + @Input() uiAnnounceIfOptional: boolean; + @Output() uiOnChange = new EventEmitter(); + + name: string | number; + onTouched: () => {}; + private onChange: (value: any) => {}; + private _value: any; + + constructor(private injector: Injector, private changeDetectorRef: ChangeDetectorRef) {} + + get currentValue(): any { + return this._value; + } + + get radiobuttonsModifierClass(): string { + if (this.uiDirection === RadiobuttonGroupDirection.HORIZONTAL) { + return `ui-radiobutton-group__radiobuttons--horizontal`; + } + return ''; + } + + private _transformValue(value: any): any { + return this.uiBooleanValues ? value === 'true' : value; + } + + private get _requiredText() { + if (this.uiRequired && !this.uiAnnounceIfOptional) { + return ' (obligatoriskt)'; + } + + if (!this.uiRequired && this.uiAnnounceIfOptional) { + return ' (frivilligt)'; + } + + return ''; + } + + getLabelText(label: string): string { + return `${label}${this._requiredText}`; + } + + ngAfterViewInit(): void { + const ngControl: NgControl = this.injector.get(NgControl, null); + if (ngControl) { + this.name = ngControl.name || this.uiName; + } + } + + ngOnChanges(): void { + const ngControl: NgControl = this.injector.get(NgControl, null); + if (ngControl) { + this.name = ngControl.name || this.uiName; + } + } + + checkForChange(rawValue: any): void { + const value = this._transformValue(rawValue); + if (this._value !== value) { + if (this.onChange) { + this.onChange(value); + } + this._value = value; + this.uiOnChange.emit(value); + } + } + + writeValue(value: any): void { + this._value = value; + this.changeDetectorRef.detectChanges(); + } + + registerOnChange(fn: (value: any) => {}) { + this.onChange = fn; + } + + registerOnTouched(fn: () => {}) { + this.onTouched = fn; + } +} diff --git a/libs/ui/src/radiobutton-group/radiobutton-group.module.ts b/libs/ui/src/radiobutton-group/radiobutton-group.module.ts new file mode 100644 index 0000000..4d6941f --- /dev/null +++ b/libs/ui/src/radiobutton-group/radiobutton-group.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; +import { RadiobuttonGroupComponent } from './radiobutton-group.component'; + +@NgModule({ + schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [CommonModule], + declarations: [RadiobuttonGroupComponent], + exports: [RadiobuttonGroupComponent], +}) +export class UiRadiobuttonGroupModule {} diff --git a/libs/ui/src/radiobutton-group/radiobutton.model.ts b/libs/ui/src/radiobutton-group/radiobutton.model.ts new file mode 100644 index 0000000..e1229a4 --- /dev/null +++ b/libs/ui/src/radiobutton-group/radiobutton.model.ts @@ -0,0 +1,4 @@ +export interface Radiobutton { + value: any; + label: string; +}