import { CommonModule } from '@angular/common'; import { Component, HostListener, computed, inject, input, output, signal } from '@angular/core'; import { UiService } from '../../core/services/ui.service'; import type { Category } from '../models'; @Component({ selector: 'app-category-picker', standalone: true, imports: [CommonModule], template: ` ` }) export class CategoryPickerComponent { readonly ui = inject(UiService); readonly items = input([]); readonly selectedIds = input([]); readonly placeholder = input(''); readonly changed = output(); readonly open = signal(false); readonly selectedItems = computed(() => this.items().filter((item) => this.selectedIds().includes(item.id))); toggle(event?: Event) { event?.stopPropagation(); this.open.update((value) => !value); } isSelected(id: string) { return this.selectedIds().includes(id); } toggleItem(id: string) { const next = this.isSelected(id) ? this.selectedIds().filter((item) => item !== id) : [...this.selectedIds(), id]; this.changed.emit(next); } @HostListener('document:click') closeOnOutsideClick() { this.open.set(false); } }