/** * Directory Component * * A searchable list of addresses from the directory service. * Supports filtering, selection, and pagination. * * @example * ```html * * ``` * * @fires sw-address-select - Fired when an address is selected. Detail: `{ address: Address }` * @fires sw-dial - Fired when the call button on an address is clicked. Detail: `{ address: Address, channel: string }` * * @cssprop [--interactive-button-primary-bg=#044ef4] - Primary brand color * @cssprop [--interactive-button-primary-hover=#0342cf] - Primary color on hover * @cssprop [--interactive-status-success=#22c55e] - Success/positive color * @cssprop [--fg-default=#f0f0f4] - Primary text color * @cssprop [--fg-muted=#a0a0aa] - Secondary/muted text color * @cssprop [--bg-surface=#181a28] - Component background color * @cssprop [--bg-surface-raised=#222436] - Background color on hover * @cssprop [--interactive-dropdown-hover=#333338] - Background color on active/press * @cssprop [--border-default=rgba(255,255,255,0.12)] - Border color */ import { LitElement } from 'lit'; import type { Observable } from 'rxjs'; import './UI/icons/sw-ui-icon.js'; /** * Address type from SDK */ export interface Address { id: string; name: string; displayName?: string; type?: 'room' | 'person'; channels?: { audio?: boolean; video?: boolean; messaging?: boolean; }; } /** * Directory interface for component */ export interface DirectoryService { addresses$: Observable; loading$?: Observable; hasMore$?: Observable; loadMore?(): Promise; } export declare class SwDirectory extends LitElement { static styles: import("lit").CSSResult[]; /** * Directory service with addresses$ observable */ directory: DirectoryService | null; /** * Currently selected address */ private selectedAddress; /** * Search filter query */ private searchQuery; /** * List of addresses from directory */ private addresses; /** * Loading state */ private loading; /** * Has more addresses to load */ private hasMore; /** * RxJS subscriptions for cleanup */ private subscriptions; /** * Debounce timer for search */ private searchDebounceTimer; /** * IntersectionObserver for infinite scroll */ private intersectionObserver; /** * Flag to track if we're auto-loading for search */ private isAutoLoadingForSearch; connectedCallback(): void; disconnectedCallback(): void; private subscribeToDirectory; private cleanup; protected firstUpdated(): void; private setupInfiniteScroll; protected updated(changedProperties: Map): void; private checkAutoLoadForSearch; private get filteredAddresses(); private handleSearchInput; private handleItemClick; private handleItemDoubleClick; private handleDial; private handleLoadMore; private renderAddressIcon; private renderChannelIcons; private renderLoadingIndicator; render(): import("lit-html").TemplateResult<1>; } declare global { interface HTMLElementTagNameMap { 'sw-directory': SwDirectory; } } //# sourceMappingURL=sw-directory.d.ts.map