import { InjectionToken, Signal } from '@angular/core'; import { IsActiveMatchOptions, ActivatedRoute } from '@angular/router'; import { NavigationRegisterInput, NavigationState, NavigationItem, NavigationType, NavigationPosition, NavigationDockbarMode, NavigationNormalizedItem, NavigationOrientation, NavigationIconContext, NavigationResolvedRouteContext } from '@ojiepermana/angular-navigation/types'; /** Stable contract consumed by navigation UI, independently of its state implementation. */ interface NavigationAdapter { register(input: NavigationRegisterInput, owner?: object): NavigationState; unregister(id: string, owner?: object): void; state(id: string): Signal; currentState(id: string): NavigationState | null; data(id: string): Signal; publishData(id: string, data: readonly NavigationItem[], owner?: object): void; clearData(id: string, owner?: object): void; currentPanelKey(id: string): string | null; update(id: string, patch: Partial): NavigationState; setType(id: string, type: NavigationType): NavigationState; setPosition(id: string, position: NavigationPosition): NavigationState; setCollapsed(id: string, collapsed: boolean): NavigationState; toggleCollapsed(id: string): NavigationState; setDockbarMode(id: string, mode: NavigationDockbarMode): NavigationState; isRouterItem(item: NavigationNormalizedItem): boolean; hrefFor(item: NavigationNormalizedItem): string | null; relFor(item: NavigationNormalizedItem): string | null; routerLinkActiveOptions(item: NavigationNormalizedItem): IsActiveMatchOptions; itemRole(orientation: NavigationOrientation, level: number): 'menuitem' | null; compactLabel(item: NavigationNormalizedItem, compact: boolean): string | null; titleFor(item: NavigationNormalizedItem, compact: boolean): string | null; compactFallback(item: NavigationNormalizedItem): string; iconContext(item: NavigationNormalizedItem, active: boolean, level: number, orientation: NavigationOrientation): NavigationIconContext; isItemActive(item: NavigationNormalizedItem, activeIds: ReadonlySet, explicitActiveUrl: string | null): boolean; isPanelOpen(item: NavigationNormalizedItem): boolean; isPanelOpen(navId: string, item: NavigationNormalizedItem): boolean; openPanel(item: NavigationNormalizedItem): void; openPanel(navId: string, item: NavigationNormalizedItem): void; togglePanel(item: NavigationNormalizedItem): void; togglePanel(navId: string, item: NavigationNormalizedItem): void; closePanel(id?: string): void; dockbarGroups(items: readonly NavigationNormalizedItem[]): readonly NavigationNormalizedItem[]; resolveDockbarGroup(id: string, items: readonly NavigationNormalizedItem[], mode: NavigationDockbarMode, activeIds: ReadonlySet, activeUrl: string | null): NavigationNormalizedItem | null; isDrawerOpen(id: string): boolean; openDrawer(id: string): void; toggleDrawer(id: string): void; closeDrawer(id: string): void; } /** * Kontrak terpisah untuk Router context agar custom `NavigationAdapter` lama * tidak perlu mengimplementasikan method baru. */ interface NavigationRouteContextAdapter { readonly routeContext: Signal; isItemRouteActive(item: NavigationNormalizedItem, explicitActiveUrl: string | null, relativeTo?: ActivatedRoute | null): boolean; } /** Override this token to supply a custom state/persistence adapter. */ declare const NAVIGATION_ADAPTER: InjectionToken; /** Override token ini untuk memasok route context dari router/state host lain. */ declare const NAVIGATION_ROUTE_CONTEXT_ADAPTER: InjectionToken; export { NAVIGATION_ADAPTER, NAVIGATION_ROUTE_CONTEXT_ADAPTER }; export type { NavigationAdapter, NavigationRouteContextAdapter };