{"version":3,"file":"edsis-component-combobox.mjs","sources":["../../../library/component/combobox/combobox.component.ts","../../../library/component/combobox/edsis-component-combobox.ts"],"sourcesContent":["import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n  Component,\n  DestroyRef,\n  ElementRef,\n  TemplateRef,\n  ViewContainerRef,\n  computed,\n  forwardRef,\n  inject,\n  input,\n  model,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { cn } from '@edsis/component/class';\nimport { uniqueId } from '@edsis/component/id';\nimport { overlayDismissals } from '@edsis/component/overlay';\nimport { buttonVariants } from '@edsis/component/button';\nimport {\n  CommandComponent,\n  CommandEmptyComponent,\n  CommandGroupComponent,\n  CommandInputComponent,\n  CommandItemComponent,\n  CommandListComponent,\n} from '@edsis/component/command';\n\nexport interface ComboboxOption<T = unknown> {\n  readonly value: T;\n  readonly label: string;\n  readonly disabled?: boolean;\n}\n\n/**\n * Combobox with searchable option list. Options passed via `[options]`.\n * Emits two-way `value` and supports forms via ControlValueAccessor.\n */\n@Component({\n  selector: 'Combobox',\n  imports: [\n    CommandComponent,\n    CommandInputComponent,\n    CommandListComponent,\n    CommandEmptyComponent,\n    CommandGroupComponent,\n    CommandItemComponent,\n  ],\n  providers: [\n    { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ComboboxComponent), multi: true },\n  ],\n  host: { '[class]': 'classes()' },\n  template: `\n    <button\n      #trigger\n      type=\"button\"\n      [attr.id]=\"triggerId\"\n      role=\"combobox\"\n      aria-haspopup=\"listbox\"\n      [attr.aria-expanded]=\"isOpen()\"\n      [attr.aria-controls]=\"isOpen() ? panelId : null\"\n      [class]=\"triggerClasses()\"\n      [disabled]=\"isDisabled() || null\"\n      (click)=\"toggle()\"\n    >\n      <span [class.text-muted-foreground]=\"!selectedLabel()\">\n        {{ selectedLabel() || placeholder() }}\n      </span>\n      <svg\n        class=\"ml-2 h-4 w-4 shrink-0 opacity-50\"\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    </button>\n\n    <ng-template #panel>\n      <div\n        [attr.id]=\"panelId\"\n        class=\"w-(--combobox-trigger-width) rounded-md border bg-popover text-popover-foreground shadow-md\"\n      >\n        <Command>\n          <input CommandInput [placeholder]=\"searchPlaceholder()\" />\n          <CommandList>\n            <CommandEmpty>{{ emptyText() }}</CommandEmpty>\n            <CommandGroup>\n              @for (opt of options(); track opt.value) {\n                <button\n                  type=\"button\"\n                  CommandItem\n                  [value]=\"opt.label\"\n                  [disabled]=\"!!opt.disabled\"\n                  (selected)=\"pick(opt)\"\n                >\n                  {{ opt.label }}\n                  @if (isSelected(opt)) {\n                    <svg\n                      class=\"ml-auto h-4 w-4\"\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=\"20 6 9 17 4 12\" />\n                    </svg>\n                  }\n                </button>\n              }\n            </CommandGroup>\n          </CommandList>\n        </Command>\n      </div>\n    </ng-template>\n  `,\n})\nexport class ComboboxComponent<T = unknown> implements ControlValueAccessor {\n  private readonly overlay = inject(Overlay);\n  private readonly vcr = inject(ViewContainerRef);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly instanceId = uniqueId('Combobox');\n\n  readonly options = input<ReadonlyArray<ComboboxOption<T>>>([]);\n  readonly value = model<T | null>(null);\n  readonly placeholder = input<string>('Select…');\n  readonly searchPlaceholder = input<string>('Search…');\n  readonly emptyText = input<string>('No results found.');\n  readonly disabled = model<boolean>(false);\n  readonly class = input<string>('');\n\n  /** Disabled state pushed by the Forms API; kept separate so it never clobbers the `disabled` binding. */\n  private readonly cvaDisabled = signal(false);\n  protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n  private readonly trigger = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n  private readonly panel = viewChild.required<TemplateRef<unknown>>('panel');\n  private overlayRef: OverlayRef | null = null;\n  readonly isOpen = signal(false);\n  protected readonly triggerId = `${this.instanceId}-trigger`;\n  protected readonly panelId = `${this.instanceId}-panel`;\n\n  protected readonly classes = computed(() => cn('inline-block min-w-[200px]', this.class()));\n\n  protected readonly triggerClasses = computed(() =>\n    cn(buttonVariants({ variant: 'outline', size: 'default' }), 'w-full justify-between'),\n  );\n\n  protected readonly selectedLabel = computed(() => {\n    const v = this.value();\n    return this.options().find((o) => o.value === v)?.label ?? '';\n  });\n\n  private onChangeFn: (v: T | null) => void = () => {};\n  private onTouchedFn: () => void = () => {};\n\n  protected isSelected(opt: ComboboxOption<T>): boolean {\n    return opt.value === this.value();\n  }\n\n  protected toggle(): void {\n    if (this.isDisabled()) return;\n    this.isOpen() ? this.close() : this.open();\n  }\n\n  protected open(): void {\n    if (this.isOpen()) return;\n    const triggerEl = this.trigger().nativeElement;\n    triggerEl.style.setProperty('--combobox-trigger-width', triggerEl.offsetWidth + 'px');\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy: this.overlay\n        .position()\n        .flexibleConnectedTo(triggerEl)\n        .withPositions([\n          { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n          { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n        ]),\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n      hasBackdrop: false,\n      panelClass: 'combobox-panel',\n      minWidth: triggerEl.offsetWidth,\n    });\n\n    const portal = new TemplatePortal(this.panel(), this.vcr);\n    this.overlayRef.attach(portal);\n\n    overlayDismissals(this.overlayRef, triggerEl)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.close());\n\n    this.isOpen.set(true);\n    // Focus search input after attach tick\n    queueMicrotask(() =>\n      this.overlayRef?.overlayElement.querySelector<HTMLInputElement>('input')?.focus(),\n    );\n  }\n\n  protected close(): void {\n    if (!this.isOpen()) return;\n    this.overlayRef?.dispose();\n    this.overlayRef = null;\n    this.isOpen.set(false);\n    this.trigger().nativeElement.focus();\n    this.onTouchedFn();\n  }\n\n  protected pick(opt: ComboboxOption<T>): void {\n    if (opt.disabled) return;\n    const next = opt.value === this.value() ? null : opt.value;\n    this.value.set(next);\n    this.onChangeFn(next);\n    this.close();\n  }\n\n  writeValue(v: T | null): void {\n    this.value.set(v);\n  }\n\n  registerOnChange(fn: (v: T | null) => void): void {\n    this.onChangeFn = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouchedFn = fn;\n  }\n\n  setDisabledState(state: boolean): void {\n    this.cvaDisabled.set(state);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}