{"version":3,"file":"edsis-component-checkbox.mjs","sources":["../../../library/component/checkbox/checkbox.component.ts","../../../library/component/checkbox/edsis-component-checkbox.ts"],"sourcesContent":["import {\n  booleanAttribute,\n  Component,\n  computed,\n  forwardRef,\n  input,\n  output,\n  signal,\n  viewChild,\n  type ElementRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { cn } from '@edsis/component/class';\nimport { uniqueId } from '@edsis/component/id';\n\n/**\n * Checkbox built on a native `<input type=\"checkbox\">` (shadcn pattern) — no\n * Material dependency. Projected content renders as the clickable label.\n */\n@Component({\n  selector: 'Checkbox',\n  providers: [\n    { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxComponent), multi: true },\n  ],\n  host: { '[class]': 'hostClasses()' },\n  template: `\n    <label [class]=\"labelClasses()\" [attr.for]=\"id()\">\n      <input\n        #ref\n        type=\"checkbox\"\n        class=\"peer sr-only\"\n        [id]=\"id()\"\n        [attr.name]=\"name()\"\n        [checked]=\"checked()\"\n        [indeterminate]=\"indeterminate()\"\n        [disabled]=\"isDisabled()\"\n        [required]=\"required()\"\n        [attr.aria-label]=\"ariaLabel()\"\n        [attr.aria-describedby]=\"ariaDescribedby()\"\n        [attr.aria-labelledby]=\"ariaLabelledby()\"\n        [attr.aria-invalid]=\"ariaInvalidAttr()\"\n        (change)=\"handleChange($event)\"\n        (blur)=\"handleBlur()\"\n      />\n      <span aria-hidden=\"true\" [class]=\"boxClasses()\">\n        @if (indeterminate()) {\n          <svg\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"3\"\n            class=\"size-3\"\n          >\n            <path d=\"M5 12h14\" />\n          </svg>\n        } @else if (checked()) {\n          <svg\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"3\"\n            class=\"size-3\"\n          >\n            <path d=\"M20 6 9 17l-5-5\" />\n          </svg>\n        }\n      </span>\n      <ng-content />\n    </label>\n  `,\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n  readonly id = input<string>(uniqueId('Checkbox'));\n  readonly name = input<string | null>(null);\n  readonly disabled = input(false, { transform: booleanAttribute });\n  readonly indeterminate = input<boolean>(false);\n  readonly required = input<boolean>(false);\n  readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n  readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n  readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n  readonly ariaInvalid = input<boolean | string | null>(null, { alias: 'aria-invalid' });\n  readonly class = input<string>('');\n\n  readonly checkedChange = output<boolean>();\n\n  private readonly ref = viewChild.required<ElementRef<HTMLInputElement>>('ref');\n\n  protected readonly checked = signal<boolean>(false);\n  protected readonly disabledState = signal(false);\n  protected readonly ariaInvalidAttr = computed(() => {\n    const value = this.ariaInvalid();\n\n    if (value === false || value === 'false' || value == null) {\n      return null;\n    }\n\n    return value === true || value === '' ? 'true' : `${value}`;\n  });\n  protected readonly isDisabled = computed(() => this.disabled() || this.disabledState());\n  protected readonly hostClasses = computed(() => cn('Checkbox inline-flex', this.class()));\n  protected readonly labelClasses = computed(() =>\n    cn(\n      'inline-flex select-none items-center gap-2 text-sm font-medium leading-none',\n      this.isDisabled() ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n    ),\n  );\n  protected readonly boxClasses = computed(() =>\n    cn(\n      'inline-flex size-4 shrink-0 items-center justify-center rounded-sm border shadow-sm transition-colors',\n      'peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-background',\n      this.invalid()\n        ? 'border-destructive'\n        : this.checked() || this.indeterminate()\n          ? 'border-primary'\n          : 'border-input',\n      this.checked() || this.indeterminate()\n        ? this.invalid()\n          ? 'bg-destructive text-destructive-foreground'\n          : 'bg-primary text-primary-foreground'\n        : 'bg-background',\n    ),\n  );\n\n  private readonly invalid = computed(() => this.ariaInvalidAttr() === 'true');\n\n  private onChange: (v: boolean) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  protected handleChange(event: Event): void {\n    const next = (event.target as HTMLInputElement).checked;\n    this.checked.set(next);\n    this.onChange(next);\n    this.checkedChange.emit(next);\n  }\n\n  protected handleBlur(): void {\n    this.onTouched();\n  }\n\n  focus(): void {\n    this.ref().nativeElement.focus();\n  }\n\n  writeValue(v: boolean): void {\n    this.checked.set(!!v);\n  }\n  registerOnChange(fn: (v: boolean) => void): void {\n    this.onChange = fn;\n  }\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n  setDisabledState(d: boolean): void {\n    this.disabledState.set(d);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}