import * as i0 from '@angular/core'; import { Signal } from '@angular/core'; import { IsActiveMatchOptions, ActivatedRoute } from '@angular/router'; import { NavigationResolvedRouteContext, NavigationRegisterInput, NavigationState, NavigationItem, NavigationType, NavigationPosition, NavigationDockbarMode, NavigationNormalizedItem, NavigationOrientation, NavigationIconContext } from '@ojiepermana/angular-navigation/types'; export { NavigationDockbarMode, NavigationIconContext, NavigationItem, NavigationLink, NavigationNormalizedItem, NavigationOrientation, NavigationPosition, NavigationRegisterInput, NavigationState, NavigationType } from '@ojiepermana/angular-navigation/types'; declare class NavigationService { private readonly documentRef; private readonly persistence; private readonly router; private readonly urlResolver; private readonly routerUrl; private readonly states; private readonly openPanelKeys; private readonly drawerOpenState; /** Data mentah per id, dipublikasikan oleh `` agar surface lain (mis. apps-launcher di `Page`) bisa membaca nav by id tanpa mendaftarkan ulang id yang sama. */ private readonly dataById; /** Semua publisher hidup per data id. Publisher terakhir menjadi sumber aktif; cleanup owner lama tidak boleh menghapus publisher baru. */ private readonly dataPublishers; /** Token stabil untuk pemanggil legacy yang tidak mengirim owner. */ private readonly ownerlessDataPublisher; /** id navigasi → token owner instance, untuk menjaga setiap id hanya dipakai satu hidup. */ private readonly idOwners; readonly openPanelKey: Signal; /** Route aktif yang sudah dinormalisasi untuk consumer dockbar route-aware. */ readonly routeContext: Signal; readonly exactMatchOptions: IsActiveMatchOptions; readonly subsetMatchOptions: IsActiveMatchOptions; constructor(); /** * Panel eksplisit (klik trigger rail/navbar) adalah state telusur sementara. * Perpindahan path harus mengembalikan panel ke resolusi URL: tanpa pelepasan * ini, dockbar sticky terkunci pada group lama sampai browser di-refresh, * karena `resolveDockbarGroup` memprioritaskan panel key di atas pencocokan * URL. Navigasi yang hanya mengubah query/fragment tidak melepas panel agar * penelusuran group lain tidak tersentak oleh update background (mis. sort * state yang ditulis ke query params). */ private releasePanelsAfterNavigation; private urlPath; private readRouteContext; private optionalString; register(input: NavigationRegisterInput, owner?: object): NavigationState; unregister(id: string, owner?: object): void; /** * Validasi keunikan id navigasi: setiap instance `` wajib memakai id unik. * `owner` adalah token unik per instance — klaim ulang oleh owner yang sama (mis. perubahan * input) diizinkan, tetapi dua instance hidup dengan id sama dianggap salah konfigurasi dan * melempar error di mode dev. Pemanggil tanpa owner (akses langsung service) dilewati. */ private claimId; private releaseId; state(id: string): Signal; currentState(id: string): NavigationState | null; /** Data terdaftar untuk sebuah id sebagai signal; `[]` bila belum ada `` dengan id tersebut. */ data(id: string): Signal; /** Dipanggil `` untuk mempublikasikan datanya ke registry by id. */ publishData(id: string, data: readonly NavigationItem[], owner?: object): void; /** Dipanggil `` saat destroy untuk melepas datanya dari registry. */ 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; /** * A consumer `rel` is unioned with the safe default rather than replacing it: * returning `rel="external"` verbatim on a `_blank` link dropped `noopener` * and handed the opened page a live `window.opener`. */ 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; /** * Pencocokan route murni untuk state dockbar berbasis Router. Berbeda dari * `isItemActive`, konfigurasi legacy `item.active` dan `activeIds` sengaja * tidak ikut menentukan group route aktif. */ isItemRouteActive(item: NavigationNormalizedItem, explicitActiveUrl: string | null, relativeTo?: ActivatedRoute | null): boolean; private matchesActiveTreeDeep; /** * The active URL is parsed once per top-level call and handed down the * recursion; re-parsing it at every node turned one navigation into hundreds * of identical `parseUrl` calls. */ private activeMatch; 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; private matchesActiveTree; private withoutKey; private resolvePanelArgs; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; } export { NavigationService };