{"version":3,"file":"edsis-component-accordion.mjs","sources":["../../../library/component/accordion/accordion.component.ts","../../../library/component/accordion/edsis-component-accordion.ts"],"sourcesContent":["import {\n  booleanAttribute,\n  Component,\n  Directive,\n  computed,\n  forwardRef,\n  inject,\n  input,\n  model,\n  signal,\n} from '@angular/core';\nimport { cn } from '@edsis/component/class';\nimport { uniqueId } from '@edsis/component/id';\n\nexport type AccordionType = 'single' | 'multiple';\n\n@Directive()\nexport abstract class AccordionContextBase {\n  abstract isOpen(value: string): boolean;\n  abstract toggle(value: string): void;\n}\n\n@Component({\n  selector: 'Accordion',\n  providers: [{ provide: AccordionContextBase, useExisting: forwardRef(() => AccordionComponent) }],\n  host: { '[class]': 'classes()' },\n  template: `<ng-content />`,\n})\nexport class AccordionComponent extends AccordionContextBase {\n  readonly type = input<AccordionType>('single');\n  readonly collapsible = input<boolean>(true);\n  readonly value = model<string | string[] | null>(null);\n  readonly class = input<string>('');\n\n  protected readonly classes = computed(() => cn('block', this.class()));\n\n  private readonly openSet = computed<Set<string>>(() => {\n    const v = this.value();\n    if (v == null) return new Set();\n    return new Set(Array.isArray(v) ? v : [v]);\n  });\n\n  override isOpen(value: string): boolean {\n    return this.openSet().has(value);\n  }\n\n  override toggle(value: string): void {\n    const isMulti = this.type() === 'multiple';\n    const current = this.openSet();\n    const open = current.has(value);\n    if (isMulti) {\n      const next = new Set(current);\n      open ? next.delete(value) : next.add(value);\n      this.value.set([...next]);\n    } else {\n      if (open) {\n        if (this.collapsible()) this.value.set(null);\n      } else {\n        this.value.set(value);\n      }\n    }\n  }\n}\n\n@Component({\n  selector: 'AccordionItem',\n  host: {\n    '[class]': 'classes()',\n    '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n  },\n  template: `<ng-content />`,\n})\nexport class AccordionItemComponent {\n  protected readonly ctx = inject(AccordionContextBase);\n  readonly value = input.required<string>();\n  readonly disabled = input(false, { transform: booleanAttribute });\n  readonly class = input<string>('');\n\n  readonly triggerId = uniqueId('AccordionTrigger');\n  readonly contentId = uniqueId('AccordionContent');\n\n  protected readonly classes = computed(() => cn('block border-b border-border', this.class()));\n\n  readonly open = computed(() => this.ctx.isOpen(this.value()));\n\n  toggle(): void {\n    if (!this.disabled()) this.ctx.toggle(this.value());\n  }\n}\n\n@Component({\n  selector: 'button[AccordionTrigger]',\n  host: {\n    '[class]': 'classes()',\n    type: 'button',\n    '[attr.id]': 'item.triggerId',\n    '[attr.aria-controls]': 'item.contentId',\n    '[attr.aria-expanded]': 'item.open()',\n    '[attr.data-state]': 'item.open() ? \"open\" : \"closed\"',\n    '[disabled]': 'item.disabled() || null',\n    '(click)': 'item.toggle()',\n  },\n  template: `\n    <ng-content />\n    <svg\n      aria-hidden=\"true\"\n      class=\"h-4 w-4 shrink-0 transition-transform duration-200\"\n      [class.rotate-180]=\"item.open()\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    >\n      <polyline points=\"6 9 12 15 18 9\" />\n    </svg>\n  `,\n})\nexport class AccordionTriggerComponent {\n  protected readonly item = inject(AccordionItemComponent);\n  readonly class = input<string>('');\n  protected readonly classes = computed(() =>\n    cn(\n      'flex flex-1 w-full items-center justify-between py-4 text-sm font-medium',\n      'transition-all hover:underline',\n      'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n      'disabled:pointer-events-none disabled:opacity-50',\n      this.class(),\n    ),\n  );\n}\n\n@Component({\n  selector: 'AccordionContent',\n  host: {\n    '[class]': 'classes()',\n    '[attr.id]': 'item.contentId',\n    '[attr.role]': '\"region\"',\n    '[attr.aria-labelledby]': 'item.triggerId',\n    '[attr.data-state]': 'item.open() ? \"open\" : \"closed\"',\n    '[hidden]': '!item.open()',\n  },\n  template: `<div class=\"pb-4 pt-0 text-sm\"><ng-content /></div>`,\n})\nexport class AccordionContentComponent {\n  protected readonly item = inject(AccordionItemComponent);\n  readonly class = input<string>('');\n  protected readonly classes = computed(() => cn('block overflow-hidden text-sm', this.class()));\n}\n\nlet _id = 0;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}