/**
* 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