{"version":3,"file":"tableau-ui-angular-radio-group.mjs","sources":["../../../projects/component-library/radio-group/src/radio-group.component.ts","../../../projects/component-library/radio-group/src/radio-group.component.html","../../../projects/component-library/radio-group/src/tableau-ui-radio-group.module.ts","../../../projects/component-library/radio-group/src/tableau-ui-angular-radio-group.ts"],"sourcesContent":["import type { Signal } from '@angular/core';\nimport { ChangeDetectionStrategy, Component, contentChild, contentChildren, forwardRef, model, signal } from '@angular/core';\n\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { IOptionGridContext } from 'tableau-ui-angular/common';\nimport { ErrorComponent, OptionComponent } from 'tableau-ui-angular/common';\nimport type { Primitive } from 'tableau-ui-angular/types';\nimport { generateRandomString } from 'tableau-ui-angular/utils';\n\n@Component({\n  selector: 'tab-radio-group',\n  standalone: false,\n  templateUrl: './radio-group.component.html',\n  styleUrl: './radio-group.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RadioGroupComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioGroupComponent<T extends Primitive> implements ControlValueAccessor {\n  readonly $disabled = signal(false);\n  readonly $value = model<T | undefined>(undefined, {\n    alias: 'value',\n  });\n  readonly name = this.generateRandomGroupName();\n  readonly $options = contentChildren<OptionComponent<T>>(OptionComponent<T>);\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  readonly $errorElement: Signal<ErrorComponent | undefined> = contentChild(ErrorComponent);\n\n  // eslint-disable-next-line  @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\n  onChange = (value: T | undefined) => {};\n  // eslint-disable-next-line  @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  writeValue(value: T | undefined): void {\n    this.$value.set(value);\n  }\n\n  registerOnChange(fn: (value: T | undefined) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.$disabled.set(isDisabled);\n  }\n\n  selectValue(option: OptionComponent<T>) {\n    if (!this.$disabled() && !option.$disabled()) {\n      if (this.$value() !== option.$value()) {\n        this.$value.set(option.$value());\n        this.onChange(this.$value());\n      }\n      this.onTouched();\n    }\n  }\n\n  onKeyDown(e: KeyboardEvent, option: OptionComponent<T>) {\n    if (e.key === 'Enter' || e.key === ' ') {\n      this.selectValue(option);\n      e.preventDefault();\n    }\n  }\n\n  generateRandomGroupName(length: number = 8): string {\n    return `group-${generateRandomString(length)}`;\n  }\n\n  optionTemplateContext: IOptionGridContext = {\n    renderIcon: true,\n    renderText: true,\n    renderHint: true,\n  };\n}\n","@for (option of $options(); track option.$value()) {\n  <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n  <label class=\"radio-option\" [class.disabled]=\"$disabled() || option.$disabled()\" [class.selected]=\"$value() === option.$value()\" (click)=\"selectValue(option)\">\n    <input\n      type=\"radio\"\n      [value]=\"option.$value()\"\n      [checked]=\"$value() === option.$value()\"\n      [tabindex]=\"$disabled() || option.$disabled() ? -1 : 0\"\n      [disabled]=\"$disabled() || option.$disabled()\"\n      [name]=\"name\"\n      (change)=\"selectValue(option)\"\n      (keydown)=\"onKeyDown($event, option)\"\n    />\n    <div class=\"box\">\n      @if ($value() === option.$value()) {\n        <div class=\"filler\"></div>\n      }\n    </div>\n\n    <div class=\"label\">\n      <ng-container [ngTemplateOutlet]=\"option.$template()\" [ngTemplateOutletContext]=\"optionTemplateContext\" />\n    </div>\n  </label>\n}\n\n@if ($errorElement()) {\n  <div class=\"extra-info\">\n    <ng-content select=\"tab-error\" />\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TableauUiCommonModule } from 'tableau-ui-angular/common';\nimport { RadioGroupComponent } from './radio-group.component';\n\n@NgModule({\n  imports: [CommonModule, TableauUiCommonModule],\n  declarations: [RadioGroupComponent],\n  exports: [RadioGroupComponent],\n})\nexport class TableauUiRadioGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}