{"version":3,"file":"talenra-ngx-base-toggle.mjs","sources":["../../../projects/ngx-base/toggle/src/toggle/toggle.component.ts","../../../projects/ngx-base/toggle/src/toggle/toggle.component.html","../../../projects/ngx-base/toggle/talenra-ngx-base-toggle.ts"],"sourcesContent":["import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  OnInit,\n  Output,\n  forwardRef,\n  inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { guid } from '@talenra/ngx-base/dev-kit';\nimport { OnOffControlBaseComponent } from '@talenra/ngx-base/shared';\n\n/**\n * Event emitted when the toggle's `checked` value changes.\n */\nexport interface ToggleChange {\n  /** Reference to the emitting toggle component */\n  source: ToggleComponent;\n  /** Current value of the checked property */\n  checked: boolean;\n}\n\n/**\n * `<talenra-toggle>` is an on/off control. Think of a checkbox (which the control\n * technically is), displayed as a toggle switch.\n *\n * #### Reactive form\n *\n * ```typescript\n * // Component class\n * sampleForm: FormGroup = new FormGroup({\n *   rememberMe: new FormControl(true),\n *   disabledToggle: new FormControl({ value: false, disabled: true }),\n * });\n * ```\n *\n * ```html\n * <!-- Component template -->\n * <form [formGroup]=\"sampleForm\">\n *   <talenra-toggle formControlName=\"rememberMe\" label=\"Remember me\"></talenra-toggle>\n *   <talenra-toggle formControlName=\"disabledToggle\" label=\"Toggle (disabled)\"></talenra-toggle>\n * </form>\n * ```\n *\n * #### Template driven form\n *\n * ```typescript\n * // Import `FormsModule` in the declaring module\n * import { FormsModule } from '@angular/forms';\n * @NgModule({\n *  // ...\n *  imports: [FormsModule],\n *})\n * ```\n *\n * ```typescript\n * // Component class\n * sampleValue = true;\n * ```\n *\n * ```html\n * <!-- Component template -->\n * <form #templateDrivenForm=\"ngForm\">\n *   <talenra-toggle name=\"sampleValue\" [(ngModel)]=\"sampleValue\" label=\"Sample value\"></talenra-toggle>\n * </form>\n * ```\n *\n * #### Formless\n *\n * ```typescript\n * // Component class\n * sampleValue = true;\n * ```\n *\n * ```html\n * <!-- Component template -->\n * <talenra-toggle [(ngModel)]=\"sampleValue\" label=\"Sample value\"></talenra-toggle>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { ToggleModule } from '@talenra/ngx-base/toggle';\n * ```\n *\n * <example-url>../../#/on-off-controls</example-url>\n */\n@Component({\n  selector: 'talenra-toggle',\n  templateUrl: './toggle.component.html',\n  styleUrls: ['./toggle.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'hostClass',\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ToggleComponent),\n      multi: true,\n    },\n  ],\n})\nexport class ToggleComponent extends OnOffControlBaseComponent implements ControlValueAccessor, OnInit, AfterViewInit {\n  private useTransition = false;\n  private hostClass = '';\n  protected changeDetector: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  /** @internal */\n  ngOnInit(): void {\n    this.id = `talenra-toggle--${guid()}`;\n    this.updateHostClass();\n  }\n\n  /** @internal */\n  ngAfterViewInit(): void {\n    // Prevent animation on initialization\n    setTimeout(() => {\n      this.useTransition = true;\n      this.updateHostClass();\n    }, 50);\n  }\n\n  /**\n   * Event emitted when the toggle's `checked` value changes.\n   *\n   * ```typescript\n   * // Component class\n   * import { ToggleChange } from '@talenra/ngx-base/toggle';\n   * public checkedChange(change: ToggleChange): void {\n   *   console.log(`Toggle (id: ${change.source.id}) is ${change.checked ? '' : 'not '}checked`);\n   * }\n   * ```\n   *\n   * ```html\n   * <!-- Component template -->\n   * <talenra-toggle\n   *   formControlName=\"accept\"\n   *   label=\"Accept terms\"\n   *   (checkedChange)=\"checkedChange($event)></talenra-toggle>\n   * ```\n   */\n  @Output()\n  // eslint-disable-next-line @angular-eslint/no-output-native\n  checkedChange: EventEmitter<ToggleChange> = new EventEmitter<ToggleChange>();\n\n  /**\n   * Handle user click\n   *\n   * @internal\n   */\n  public handleClick(): void {\n    this.value = !this.value;\n    this.checkedChange.emit({ source: this, checked: this.value } as ToggleChange);\n  }\n\n  /** @internal */\n  setDisabledState(isDisabled: boolean): void {\n    super.setDisabledState(isDisabled);\n    this.updateHostClass();\n    this.changeDetector.markForCheck();\n  }\n\n  private updateHostClass(): void {\n    this.hostClass = [this.disabled ? 'disabled' : '', this.useTransition ? 'use-transition' : '']\n      .filter((item) => item)\n      .join(' ');\n  }\n}\n","<input\n  type=\"checkbox\"\n  class=\"checkbox\"\n  role=\"switch\"\n  tabindex=\"0\"\n  [attr.aria-checked]=\"checked\"\n  [checked]=\"checked\"\n  [disabled]=\"disabled\"\n  [id]=\"id\"\n  [value]=\"value\"\n  (blur)=\"handleBlur()\"\n  (click)=\"handleClick()\" />\n<label class=\"label\" [attr.for]=\"id\">{{ label }}</label>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}