{"version":3,"file":"ng-forge-dynamic-forms-primeng-lazy-radio.mjs","mappings":";;;;;;;;;;;AA4EmB;;;;;;;;;;;;;;;;AAiBR;;;;AAKT;AACE;;AAEE;AACA;AACD;;;AAKD;;;AAjCS;;;;;;;;;;;;;;;;;;AA9BV;;;;;AAtBC;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACqBU;;;;AAIH;;;AAJU;;;;;;;;;;;;;AAnBlB;;;;AAjBS","names":[],"ignoreList":[],"sources":["../../../../packages/dynamic-forms-primeng/src/lib/fields/radio/prime-radio-group.component.ts","../../../../packages/dynamic-forms-primeng/src/lib/fields/radio/prime-radio.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { FieldMeta, FieldOption, ValueType } from '@ng-forge/dynamic-forms';\nimport { DynamicTextPipe } from '@ng-forge/dynamic-forms/integration';\nimport { NgForgeField, setupMetaTracking } from '@ng-forge/dynamic-forms/integration';\nimport { AsyncPipe } from '@angular/common';\nimport { RadioButton } from 'primeng/radiobutton';\n\nexport interface PrimeRadioGroupProps {\n  /** Custom CSS class for the radio buttons */\n  styleClass?: string;\n}\n\n/**\n * PrimeNG radio group implementing FormValueControl. Rendered inside\n * `df-prime-radio` — picks up meta + aria from the ambient parent NgForgeField\n * via `setupMetaTracking` (selector: `'input[type=\"radio\"]'`).\n */\n@Component({\n  selector: 'df-prime-radio-group',\n  imports: [RadioButton, FormsModule, DynamicTextPipe, AsyncPipe],\n  host: {\n    '[attr.aria-invalid]': 'parentField?.ariaInvalid() || null',\n    '[attr.aria-required]': 'parentField?.ariaRequired()',\n    '[attr.aria-describedby]': 'parentField?.ariaDescribedBy()',\n  },\n  template: `\n    <div class=\"radio-group\">\n      @for (option of options(); track option.value; let i = $index) {\n        <div class=\"radio-option\">\n          <p-radiobutton\n            [name]=\"name()\"\n            [value]=\"option.value\"\n            [ngModel]=\"value()\"\n            (ngModelChange)=\"value.set($event)\"\n            (onBlur)=\"onBlur()\"\n            [disabled]=\"disabled() || option.disabled || false\"\n            [inputId]=\"name() + '_' + i\"\n            [styleClass]=\"properties()?.styleClass\"\n          />\n          <label [for]=\"name() + '_' + i\" class=\"radio-option-label\">{{ option.label | dynamicText | async }}</label>\n        </div>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n\n      .radio-group {\n        display: flex;\n        flex-direction: column;\n        gap: 0.75rem;\n      }\n\n      .radio-option {\n        display: flex;\n        align-items: center;\n        gap: 0.5rem;\n      }\n\n      .radio-option-label {\n        cursor: pointer;\n        user-select: none;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\n// Note: FormValueControl is from @angular/forms/signals and provides the contract for\n// components that expose a `value` model for use with [formField]. This is the same\n// pattern used by the Bootstrap radio group adapter (BsRadioGroupComponent).\nexport class PrimeRadioGroupComponent implements FormValueControl<ValueType | undefined> {\n  private readonly elementRef = inject(ElementRef<HTMLElement>);\n  protected readonly parentField = inject(NgForgeField, { optional: true });\n\n  // Value model - FormField directive binds form value to this\n  readonly value = model<ValueType | undefined>(undefined);\n\n  /** Tracks whether the field has been touched - used by Field directive */\n  readonly touched = model<boolean>(false);\n\n  // Optional FormValueControl properties - Field directive will bind these\n  readonly disabled = input<boolean>(false);\n  readonly readonly = input<boolean>(false);\n  readonly invalid = input<boolean>(false);\n  readonly name = input<string>('');\n\n  // Component-specific inputs\n  readonly options = input.required<FieldOption<ValueType>[]>();\n  readonly properties = input<PrimeRadioGroupProps>();\n\n  // Meta reads from the ambient parent NgForgeField.\n  protected readonly meta = computed<FieldMeta | undefined>(() => this.parentField?.meta());\n\n  constructor() {\n    this.parentField?.markClaimed();\n    setupMetaTracking(this.elementRef, this.meta, {\n      selector: 'input[type=\"radio\"]',\n      dependents: [this.options],\n    });\n  }\n\n  /** Marks the field as touched when a radio button loses focus */\n  protected onBlur(): void {\n    this.touched.set(true);\n  }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { FieldOption, ValueType } from '@ng-forge/dynamic-forms';\nimport { DynamicTextPipe } from '@ng-forge/dynamic-forms/integration';\nimport { injectNgForgeField, NgForgeFieldHost } from '@ng-forge/dynamic-forms/integration';\nimport { PrimeRadioProps } from './prime-radio.type';\nimport { AsyncPipe } from '@angular/common';\nimport { PrimeRadioGroupComponent } from './prime-radio-group.component';\n\n@Component({\n  selector: 'df-prime-radio',\n  imports: [PrimeRadioGroupComponent, FormField, DynamicTextPipe, AsyncPipe],\n  styleUrl: '../../styles/_form-field.scss',\n  hostDirectives: [NgForgeFieldHost],\n  template: `\n    @let f = ngf.field();\n    @if (ngf.label()) {\n      <div class=\"radio-label\">{{ ngf.label() | dynamicText | async }}</div>\n    }\n\n    <df-prime-radio-group [formField]=\"f\" [options]=\"options()\" [properties]=\"props()\" />\n\n    @if (ngf.errorsToDisplay()[0]; as error) {\n      <small class=\"p-error\" [id]=\"ngf.errorId()\" role=\"alert\">{{ error.message }}</small>\n    } @else if (props()?.hint; as hint) {\n      <small class=\"p-hint\" [id]=\"ngf.hintId()\" [attr.hidden]=\"f().hidden() || null\">{{ hint | dynamicText | async }}</small>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n\n      :host([hidden]) {\n        display: none !important;\n      }\n\n      .radio-label {\n        margin-bottom: 0.5rem;\n        font-weight: 500;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class PrimeRadioFieldComponent {\n  protected readonly ngf = injectNgForgeField<ValueType>();\n\n  readonly options = input<FieldOption<ValueType>[]>([]);\n  readonly props = input<PrimeRadioProps>();\n}\n"]}