{ "version": 3, "sources": ["src/app/sidenav/_components/side-nav-item/side-nav-item.component.ts", "src/app/sidenav/_components/side-nav-item/side-nav-item.component.html", "src/app/_pipes/setting-fragment.pipe.ts", "src/app/sidenav/preference-nav/preference-nav.component.ts", "src/app/sidenav/preference-nav/preference-nav.component.html"], "sourcesContent": ["import {ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Input, OnInit} from '@angular/core';\nimport {NavigationEnd, Router, RouterLink} from '@angular/router';\nimport {filter, map, tap} from 'rxjs';\nimport {NavService} from 'src/app/_services/nav.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {AsyncPipe, NgClass, NgOptimizedImage, NgTemplateOutlet} from \"@angular/common\";\nimport {ImageComponent} from \"../../../shared/image/image.component\";\nimport {Breakpoint, UtilityService} from \"../../../shared/_services/utility.service\";\n\n\n@Component({\n selector: 'app-side-nav-item',\n standalone: true,\n imports: [RouterLink, NgOptimizedImage, ImageComponent, NgTemplateOutlet, NgClass, AsyncPipe],\n templateUrl: './side-nav-item.component.html',\n styleUrls: ['./side-nav-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SideNavItemComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly router = inject(Router);\n private readonly cdRef = inject(ChangeDetectorRef);\n protected readonly navService = inject(NavService);\n protected readonly utilityService = inject(UtilityService);\n\n /**\n * Id for automatic scrolling to.\n */\n @Input() id: string | null = null;\n\n /**\n * Icon to display next to item. ie) 'fa-home'\n */\n @Input() icon: string = '';\n @Input() imageUrl: string | null = '';\n /**\n * Removes all the space around the icon area\n */\n @Input() noIcon: boolean = false;\n /**\n * Text for the item\n */\n @Input() title: string = '';\n\n /**\n * If a link should be generated when clicked. By default (undefined), no link will be generated\n */\n @Input() link: string | undefined;\n /**\n * If external, link will be used as full href and rel will be applied\n */\n @Input() external: boolean = false;\n /**\n * If using a link, then you can pass optional queryParameters\n */\n @Input() queryParams: any | undefined = undefined;\n /**\n * If using a lin, then you can pass optional fragment to append to the end\n */\n @Input() fragment: string | undefined = undefined;\n /**\n * Optional count to pass in that will show as a red badge on the side, indicating some action needs to be taken\n */\n @Input() badgeCount: number | null = -1;\n\n\n @Input() comparisonMethod: 'startsWith' | 'equals' = 'equals';\n\n\n\n highlighted = false;\n\n constructor() {\n this.router.events\n .pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n map(evt => evt as NavigationEnd),\n tap((evt: NavigationEnd) => this.triggerHighlightCheck(evt.url)),\n tap(_ => this.collapseNavIfApplicable())\n ).subscribe();\n }\n\n ngOnInit(): void {\n setTimeout(() => {\n this.triggerHighlightCheck(this.router.url);\n }, 100);\n }\n\n triggerHighlightCheck(routeUrl: string) {\n const [url, queryParams] = routeUrl.split('?');\n const [page, fragment = ''] = url.split('#');\n\n this.updateHighlight(page, queryParams, url.includes('#') ? fragment : undefined);\n }\n\n\n updateHighlight(page: string, queryParams?: string, fragment?: string) {\n if (this.link === undefined) {\n this.highlighted = false;\n this.cdRef.markForCheck();\n return;\n }\n\n if (!page.endsWith('/') && !queryParams && this.fragment === undefined && queryParams === undefined) {\n page = page + '/';\n }\n\n let fragmentEqual = false;\n if (fragment === this.fragment) {\n fragmentEqual = true;\n }\n if (this.fragment === '' && fragment === undefined) { // This is the case where we load a fragment of nothing and browser removes the #\n fragmentEqual = true;\n }\n\n const queryParamsEqual = this.queryParams === queryParams;\n\n if (this.comparisonMethod === 'equals' && page === this.link && fragmentEqual && queryParamsEqual) {\n this.highlighted = true;\n this.cdRef.markForCheck();\n return;\n }\n\n if (this.comparisonMethod === 'startsWith' && page.startsWith(this.link)) {\n if (queryParams && queryParams === this.queryParams && fragmentEqual) {\n this.highlighted = true;\n this.cdRef.markForCheck();\n return;\n }\n\n this.highlighted = true;\n this.cdRef.markForCheck();\n return;\n }\n\n this.highlighted = false;\n this.cdRef.markForCheck();\n }\n\n openLink() {\n this.collapseNavIfApplicable();\n\n if (Object.keys(this.queryParams).length !== 0) {\n this.router.navigateByUrl(this.link + '?' + this.queryParams);\n return;\n } else if (this.fragment) {\n this.router.navigateByUrl(this.link + '#' + this.fragment);\n return;\n }\n\n this.router.navigateByUrl(this.link!);\n }\n\n // If on mobile, automatically collapse the side nav after making a selection\n collapseNavIfApplicable() {\n if (this.utilityService.getActiveBreakpoint() < Breakpoint.Tablet) {\n this.navService.collapseSideNav(true);\n }\n }\n\n}\n", "@if (link === undefined || link.length === 0) {\n
\n \n
\n} @else {\n @if (external) {\n \n \n \n } @else {\n @if (queryParams && queryParams !== {}) {\n \n \n \n } @else if (fragment) {\n \n \n \n } @else {\n \n \n \n }\n }\n}\n\n\n
\n @if (!noIcon) {\n \n
\n @if (imageUrl !== null && imageUrl !== '') {\n \n } @else {\n \n }\n
\n
\n }\n\n \n
\n {{title}}\n @if (badgeCount && badgeCount > 0) {\n {{badgeCount}}\n }\n
\n
\n \n \n \n
\n", "import { Pipe, PipeTransform } from '@angular/core';\nimport {SettingsTabId} from \"../sidenav/preference-nav/preference-nav.component\";\nimport {translate} from \"@jsverse/transloco\";\n\n/**\n * Translates the fragment for Settings to a User title\n */\n@Pipe({\n name: 'settingFragment',\n standalone: true\n})\nexport class SettingFragmentPipe implements PipeTransform {\n\n transform(tabID: SettingsTabId | string): string {\n return translate('settings.' + tabID);\n }\n}\n", "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject} from '@angular/core';\nimport {TranslocoDirective} from \"@jsverse/transloco\";\nimport {AsyncPipe, DOCUMENT, NgClass} from \"@angular/common\";\nimport {NavService} from \"../../_services/nav.service\";\nimport {AccountService, Role} from \"../../_services/account.service\";\nimport {SideNavItemComponent} from \"../_components/side-nav-item/side-nav-item.component\";\nimport {ActivatedRoute, NavigationEnd, Router, RouterLink} from \"@angular/router\";\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {SettingFragmentPipe} from \"../../_pipes/setting-fragment.pipe\";\nimport {map, Observable, of, shareReplay, switchMap, take, tap} from \"rxjs\";\nimport {ServerService} from \"../../_services/server.service\";\nimport {ScrobblingService} from \"../../_services/scrobbling.service\";\nimport {User} from \"../../_models/user\";\nimport {filter} from \"rxjs/operators\";\nimport {Breakpoint, UtilityService} from \"../../shared/_services/utility.service\";\n\nexport enum SettingsTabId {\n\n // Admin\n General = 'admin-general',\n Email = 'admin-email',\n Media = 'admin-media',\n Users = 'admin-users',\n Libraries = 'admin-libraries',\n System = 'admin-system',\n Tasks = 'admin-tasks',\n Statistics = 'admin-statistics',\n MediaIssues = 'admin-media-issues',\n\n // Kavita+\n KavitaPlus = 'admin-kavitaplus',\n MALStackImport = 'mal-stack-import',\n\n // Non-Admin\n Account = 'account',\n Preferences = 'preferences',\n Clients = 'clients',\n Theme = 'theme',\n Devices = 'devices',\n UserStats = 'user-stats',\n Scrobbling = 'scrobbling',\n Customize = 'customize',\n CBLImport = 'cbl-import'\n}\n\ninterface PrefSection {\n title: string;\n children: SideNavItem[];\n}\n\nclass SideNavItem {\n fragment: SettingsTabId;\n roles: Array = [];\n badgeCount$?: Observable | undefined;\n\n constructor(fragment: SettingsTabId, roles: Array = [], badgeCount$: Observable | undefined = undefined) {\n this.fragment = fragment;\n this.roles = roles;\n this.badgeCount$ = badgeCount$;\n }\n}\n\n@Component({\n selector: 'app-preference-nav',\n standalone: true,\n imports: [\n TranslocoDirective,\n NgClass,\n AsyncPipe,\n SideNavItemComponent,\n RouterLink,\n SettingFragmentPipe\n ],\n templateUrl: './preference-nav.component.html',\n styleUrl: './preference-nav.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PreferenceNavComponent implements AfterViewInit {\n\n private readonly destroyRef = inject(DestroyRef);\n protected readonly navService = inject(NavService);\n protected readonly accountService = inject(AccountService);\n protected readonly cdRef = inject(ChangeDetectorRef);\n private readonly route = inject(ActivatedRoute);\n private readonly serverService = inject(ServerService);\n private readonly scrobbleService = inject(ScrobblingService);\n private readonly router = inject(Router);\n protected readonly utilityService = inject(UtilityService);\n private readonly document = inject(DOCUMENT);\n\n hasActiveLicense = false;\n /**\n * This links to settings.component.html which has triggers on what underlying component to render out.\n */\n sections: Array = [\n {\n title: 'account-section-title',\n children: [\n new SideNavItem(SettingsTabId.Account, []),\n new SideNavItem(SettingsTabId.Preferences),\n new SideNavItem(SettingsTabId.Customize),\n new SideNavItem(SettingsTabId.Clients),\n new SideNavItem(SettingsTabId.Theme),\n new SideNavItem(SettingsTabId.Devices),\n new SideNavItem(SettingsTabId.UserStats),\n ]\n },\n {\n title: 'server-section-title',\n children: [\n new SideNavItem(SettingsTabId.General, [Role.Admin]),\n new SideNavItem(SettingsTabId.Media, [Role.Admin]),\n new SideNavItem(SettingsTabId.Email, [Role.Admin]),\n new SideNavItem(SettingsTabId.Users, [Role.Admin]),\n new SideNavItem(SettingsTabId.Libraries, [Role.Admin]),\n new SideNavItem(SettingsTabId.Tasks, [Role.Admin]),\n ]\n },\n {\n title: 'import-section-title',\n children: [\n new SideNavItem(SettingsTabId.CBLImport, []),\n ]\n },\n {\n title: 'info-section-title',\n children: [\n new SideNavItem(SettingsTabId.System, [Role.Admin]),\n new SideNavItem(SettingsTabId.Statistics, [Role.Admin]),\n new SideNavItem(SettingsTabId.MediaIssues, [Role.Admin],\n this.accountService.currentUser$.pipe(\n take(1),\n switchMap(user => {\n if (!user || !this.accountService.hasAdminRole(user)) {\n // If no user or user does not have the admin role, return an observable of -1\n return of(-1);\n } else {\n return this.serverService.getMediaErrors().pipe(\n takeUntilDestroyed(this.destroyRef),\n map(d => d.length),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n }\n })\n )),\n ]\n },\n {\n title: 'kavitaplus-section-title',\n children: [\n new SideNavItem(SettingsTabId.KavitaPlus, [Role.Admin]),\n ]\n }\n ];\n collapseSideNavOnMobileNav$ = this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n map(evt => evt as NavigationEnd),\n switchMap(_ => this.utilityService.activeBreakpoint$),\n filter((b) => b < Breakpoint.Tablet),\n switchMap(() => this.navService.sideNavCollapsed$),\n take(1),\n filter(collapsed => !collapsed),\n tap(c => {\n this.navService.collapseSideNav(true);\n }),\n );\n\n\n constructor() {\n this.collapseSideNavOnMobileNav$.subscribe();\n\n // Ensure that on mobile, we are collapsed by default\n if (this.utilityService.getActiveBreakpoint() < Breakpoint.Tablet) {\n this.navService.collapseSideNav(true);\n }\n\n\n this.accountService.hasValidLicense$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(res => {\n if (res) {\n this.hasActiveLicense = true;\n if (this.hasActiveLicense) {\n if (this.sections[4].children.length === 1) {\n this.sections[4].children.push(new SideNavItem(SettingsTabId.Scrobbling, [],\n this.accountService.currentUser$.pipe(\n take(1),\n switchMap(user => {\n if (!user || !this.accountService.hasAdminRole(user)) {\n // If no user or user does not have the admin role, return an observable of -1\n return of(-1);\n } else {\n return this.scrobbleService.getScrobbleErrors().pipe(\n takeUntilDestroyed(this.destroyRef),\n map(d => d.length),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n }\n })\n ))\n );\n }\n\n if (this.sections[2].children.length === 1) {\n this.sections[2].children.push(new SideNavItem(SettingsTabId.MALStackImport, []));\n }\n\n }\n\n this.scrollToActiveItem();\n this.cdRef.markForCheck();\n }\n });\n }\n\n ngAfterViewInit() {\n this.scrollToActiveItem();\n }\n\n scrollToActiveItem() {\n const activeFragment = this.route.snapshot.fragment;\n if (activeFragment) {\n const element = this.document.getElementById('nav-item-' + activeFragment);\n if (element) {\n element.scrollIntoView({behavior: 'smooth', block: 'center'});\n }\n }\n }\n\n hasAnyChildren(user: User, section: PrefSection) {\n return section.children.filter(item => this.accountService.hasAnyRole(user, item.roles)).length > 0;\n }\n\n collapse() {\n this.navService.toggleSideNav();\n }\n\n protected readonly Breakpoint = Breakpoint;\n}\n", "\n @if (accountService.currentUser$ | async; as user) {\n\n @if((navService.sideNavCollapsed$ | async) === false) {\n
\n
\n\n @for(section of sections; track section.title + section.children.length; let idx = $index;) {\n @if (hasAnyChildren(user, section)) {\n
0}\">{{t(section.title)}}
\n @for(item of section.children; track item.fragment) {\n @if (accountService.hasAnyRole(user, item.roles)) {\n \n }\n }\n }\n }\n\n
\n
\n @if (utilityService.activeBreakpoint$ | async; as breakpoint) {\n @if (breakpoint < Breakpoint.Desktop) {\n
\n }\n }\n }\n\n }\n\n
\n"], "mappings": "w2BCCEA,EAAA,EAAA,MAAA,CAAA,eACEC,EAAA,EAAA,CAAA,EACFC,EAAA,yBAF2BC,EAAA,UAAAC,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAC,EAAAC,WAAAC,iBAAA,EAAAF,EAAAG,WAAA,CAAA,EACXC,EAAA,CAAA,EAAAR,EAAA,mBAAAS,CAAA,6BAIdZ,EAAA,EAAA,IAAA,CAAA,eACEC,EAAA,EAAA,CAAA,EACFC,EAAA,0BAFGC,EAAA,KAAAI,EAAAM,EAAA,EAAS,OAAAN,EAAAO,KAAAC,EAAA,EAAoC,UAAAX,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAC,EAAAC,WAAAC,iBAAA,EAAAF,EAAAG,WAAA,CAAA,EAChCC,EAAA,CAAA,EAAAR,EAAA,mBAAAS,CAAA,sCAIdZ,EAAA,EAAA,IAAA,CAAA,eAAsJgB,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAX,EAAAY,EAAA,CAAA,EAAA,OAAAC,EAASb,EAAAc,SAAA,CAAU,CAAA,CAAA,EACvKpB,EAAA,EAAA,CAAA,EACFC,EAAA,4BAFGC,EAAA,KAAAI,EAAAM,EAAA,EAAS,UAAAT,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAC,EAAAC,WAAAC,iBAAA,EAAAF,EAAAG,WAAA,CAAA,EACIC,EAAA,CAAA,EAAAR,EAAA,mBAAAS,CAAA,6BAGhBZ,EAAA,EAAA,IAAA,CAAA,eACEC,EAAA,EAAA,CAAA,EACFC,EAAA,0BAFGC,EAAA,KAAAI,EAAAM,EAAA,EAAS,UAAAT,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAC,EAAAC,WAAAC,iBAAA,EAAAF,EAAAG,WAAA,CAAA,EAAyI,aAAAH,EAAAO,IAAA,EAAoB,WAAAP,EAAAe,QAAA,EACzJX,EAAA,CAAA,EAAAR,EAAA,mBAAAS,CAAA,6BAGhBZ,EAAA,EAAA,IAAA,CAAA,eACEC,EAAA,EAAA,CAAA,EACFC,EAAA,0BAFGC,EAAA,KAAAI,EAAAM,EAAA,EAAS,UAAAT,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAC,EAAAC,WAAAC,iBAAA,EAAAF,EAAAG,WAAA,CAAA,EAAyI,aAAAH,EAAAO,IAAA,EAAoB,cAAAP,EAAAgB,WAAA,EACzJZ,EAAA,CAAA,EAAAR,EAAA,mBAAAS,CAAA,4BAVlBY,EAAA,EAAAC,GAAA,EAAA,EAAA,IAAA,CAAA,EAAyC,EAAAC,GAAA,EAAA,EAAA,EAIlB,EAAAC,GAAA,EAAA,EAAA,kBAJvBC,EAAA,EAAArB,EAAAgB,aAAAhB,EAAAgB,cAAAM,GAAA,EAAAC,EAAA,EAAA,EAAAvB,EAAAe,SAAA,EAAA,CAAA,4BALFE,EAAA,EAAAO,GAAA,EAAA,EAAA,IAAA,CAAA,EAAgB,EAAAC,GAAA,EAAA,CAAA,iBAAhBJ,EAAA,EAAArB,EAAA0B,SAAA,EAAA,CAAA,4BA2BUC,EAAA,EAAA,YAAA,EAAA,kBAAW/B,EAAA,WAAAI,EAAA4B,QAAA,4BAEXD,EAAA,EAAA,IAAA,EAAA,kBAAGE,GAAA,MAAA7B,EAAA8B,KAAA,EAAA,6BALTrC,EAAA,EAAA,OAAA,CAAA,EAA6C,EAAA,KAAA,EAEzCwB,EAAA,EAAAc,GAAA,EAAA,EAAA,YAAA,EAAA,EAA4C,EAAAC,GAAA,EAAA,CAAA,EAK9CrC,EAAA,EAAM,mBAPmBsC,GAAA,QAAAjC,EAAAkC,KAAA,EAEvB9B,EAAA,CAAA,EAAAiB,EAAA,EAAArB,EAAA4B,WAAA,MAAA5B,EAAA4B,WAAA,GAAA,EAAA,CAAA,6BAaEnC,EAAA,EAAA,OAAA,EAAA,EAAgD0C,EAAA,CAAA,EAAcxC,EAAA,mBAAdS,EAAA,EAAAgC,EAAApC,EAAAqC,UAAA,6BAjBxDV,EAAA,EAAA,MAAA,CAAA,EACAV,EAAA,EAAAqB,GAAA,EAAA,EAAA,OAAA,CAAA,EAYA7C,EAAA,EAAA,OAAA,EAAA,EAA4B,EAAA,KAAA,EAEtB0C,EAAA,CAAA,EACAlB,EAAA,EAAAsB,GAAA,EAAA,EAAA,OAAA,EAAA,EAGF5C,EAAA,EAAM,EAEVF,EAAA,EAAA,OAAA,EAAA,EACI+C,GAAA,CAAA,EACJ7C,EAAA,kBAtBAS,EAAA,EAAAiB,EAAA,EAAArB,EAAAyC,OAAA,GAAA,CAAA,EAcMrC,EAAA,CAAA,EAAAsC,GAAA,IAAA1C,EAAAkC,MAAA,GAAA,EACA9B,EAAA,EAAAiB,EAAA,EAAArB,EAAAqC,YAAArC,EAAAqC,WAAA,EAAA,EAAA,EAAA,GDzBV,IAAaM,IAAoB,IAAA,CAA3B,IAAOA,EAAP,MAAOA,CAAoB,CAsD/BC,aAAA,CArDiB,KAAAC,WAAaC,EAAOC,CAAU,EAC9B,KAAAC,OAASF,EAAOG,CAAM,EACtB,KAAAC,MAAQJ,EAAOK,CAAiB,EAC9B,KAAAlD,WAAa6C,EAAOM,CAAU,EAC9B,KAAAC,eAAiBP,EAAOQ,CAAc,EAKhD,KAAAhD,GAAoB,KAKpB,KAAAwB,KAAe,GACf,KAAAF,SAA0B,GAI1B,KAAAa,OAAkB,GAIlB,KAAAP,MAAgB,GAShB,KAAAR,SAAoB,GAIpB,KAAAV,YAA+BuC,OAI/B,KAAAxC,SAA+BwC,OAI/B,KAAAlB,WAA4B,GAG5B,KAAAmB,iBAA4C,SAIrD,KAAArD,YAAc,GAGZ,KAAK6C,OAAOS,OACTC,KACCC,EAAOC,GAASA,aAAiBC,CAAa,EAC9CC,EAAmB,KAAKjB,UAAU,EAClCkB,EAAIC,GAAOA,CAAoB,EAC/BC,EAAKD,GAAuB,KAAKE,sBAAsBF,EAAIG,GAAG,CAAC,EAC/DF,EAAIG,GAAK,KAAKC,wBAAuB,CAAE,CAAC,EACxCC,UAAS,CACf,CAEAC,UAAQ,CACNC,WAAW,IAAK,CACd,KAAKN,sBAAsB,KAAKlB,OAAOmB,GAAG,CAC5C,EAAG,GAAG,CACR,CAEAD,sBAAsBO,EAAgB,CACpC,GAAM,CAACN,EAAKnD,CAAW,EAAIyD,EAASC,MAAM,GAAG,EACvC,CAACC,EAAM5D,EAAW,EAAE,EAAIoD,EAAIO,MAAM,GAAG,EAE3C,KAAKE,gBAAgBD,EAAM3D,EAAamD,EAAIU,SAAS,GAAG,EAAI9D,EAAWwC,MAAS,CAClF,CAGAqB,gBAAgBD,EAAc3D,EAAsBD,EAAiB,CACnE,GAAI,KAAKR,OAASgD,OAAW,CAC3B,KAAKpD,YAAc,GACnB,KAAK+C,MAAM4B,aAAY,EACvB,MACF,CAEI,CAACH,EAAKI,SAAS,GAAG,GAAK,CAAC/D,GAAe,KAAKD,WAAawC,QAAavC,IAAgBuC,SACxFoB,EAAOA,EAAO,KAGhB,IAAIK,EAAgB,GAChBjE,IAAa,KAAKA,WACpBiE,EAAgB,IAEd,KAAKjE,WAAa,IAAMA,IAAawC,SACvCyB,EAAgB,IAGlB,IAAMC,EAAmB,KAAKjE,cAAgBA,EAE9C,GAAI,KAAKwC,mBAAqB,UAAYmB,IAAS,KAAKpE,MAAQyE,GAAiBC,EAAkB,CACjG,KAAK9E,YAAc,GACnB,KAAK+C,MAAM4B,aAAY,EACvB,MACF,CAEA,GAAI,KAAKtB,mBAAqB,cAAgBmB,EAAKO,WAAW,KAAK3E,IAAI,EAAG,CACxE,GAAIS,GAAeA,IAAgB,KAAKA,aAAegE,EAAe,CACpE,KAAK7E,YAAc,GACnB,KAAK+C,MAAM4B,aAAY,EACvB,MACF,CAEA,KAAK3E,YAAc,GACnB,KAAK+C,MAAM4B,aAAY,EACvB,MACF,CAEA,KAAK3E,YAAc,GACnB,KAAK+C,MAAM4B,aAAY,CACzB,CAEAhE,UAAQ,CAGN,GAFA,KAAKuD,wBAAuB,EAExBc,OAAOC,KAAK,KAAKpE,WAAW,EAAEqE,SAAW,EAAG,CAC9C,KAAKrC,OAAOsC,cAAc,KAAK/E,KAAO,IAAM,KAAKS,WAAW,EAC5D,MACF,SAAW,KAAKD,SAAU,CACxB,KAAKiC,OAAOsC,cAAc,KAAK/E,KAAO,IAAM,KAAKQ,QAAQ,EACzD,MACF,CAEA,KAAKiC,OAAOsC,cAAc,KAAK/E,IAAK,CACtC,CAGA8D,yBAAuB,CACjB,KAAKhB,eAAekC,oBAAmB,EAAKC,EAAWC,QACzD,KAAKxF,WAAWyF,gBAAgB,EAAI,CAExC,yCA7IW/C,EAAoB,sBAApBA,EAAoBgD,UAAA,CAAA,CAAA,mBAAA,CAAA,EAAAC,OAAA,CAAAtF,GAAA,KAAAwB,KAAA,OAAAF,SAAA,WAAAa,OAAA,SAAAP,MAAA,QAAA3B,KAAA,OAAAmB,SAAA,WAAAV,YAAA,cAAAD,SAAA,WAAAsB,WAAA,aAAAmB,iBAAA,kBAAA,EAAAqC,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,mBAAAC,GAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,MAAA,sBAAA,SAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,OAAA,SAAA,EAAA,CAAA,OAAA,sBAAA,EAAA,gBAAA,EAAA,KAAA,SAAA,EAAA,CAAA,OAAA,sBAAA,EAAA,gBAAA,EAAA,QAAA,KAAA,SAAA,EAAA,CAAA,OAAA,sBAAA,EAAA,gBAAA,EAAA,KAAA,UAAA,aAAA,UAAA,EAAA,CAAA,OAAA,sBAAA,EAAA,gBAAA,EAAA,KAAA,UAAA,aAAA,aAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,QAAA,YAAA,eAAA,MAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,QAAA,OAAA,SAAA,OAAA,EAAA,UAAA,EAAA,CAAA,cAAA,MAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,WClBjCrF,EAAA,EAAAuF,GAAA,EAAA,EAAA,MAAA,CAAA,EAA+C,EAAAC,GAAA,EAAA,CAAA,EAItC,EAAAC,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,EAAA,QAJTtF,EAAA,EAAAkF,EAAAhG,OAAAgD,QAAAgD,EAAAhG,KAAA8E,SAAA,EAAA,EAAA,CAAA,iBDaYuB,GAA8BC,GAAgBC,GAAkBC,EAASC,CAAS,EAAAC,OAAA,CAAA;iEAAA,EAAAC,gBAAA,CAAA,CAAA,EAKxF,IAAOvE,EAAPwE,SAAOxE,CAAoB,GAAA,EEPjC,IAAayE,IAAmB,IAAA,CAA1B,IAAOA,EAAP,MAAOA,CAAmB,CAE9BC,UAAUC,EAA6B,CACrC,OAAOC,GAAU,YAAcD,CAAK,CACtC,yCAJWF,EAAmB,+CAAnBA,EAAmBI,KAAA,GAAAC,WAAA,EAAA,CAAA,EAA1B,IAAOL,EAAPM,SAAON,CAAmB,GAAA,+KEGdO,EAAA,EAAA,oBAAA,CAAA,gEAAmBC,EAAA,KAAA,YAAAC,EAAAC,QAAA,EAAkC,SAAA,EAAA,EAAgB,WAAAD,EAAAC,QAAA,EAA4C,QAAAC,EAAA,EAAA,EAAAF,EAAAC,QAAA,CAAA,EAA0C,aAAAC,EAAA,EAAA,EAAAF,EAAAG,WAAA,CAAA,4BAD7JC,EAAA,EAAAC,GAAA,EAAA,EAAA,oBAAA,CAAA,uCAAAC,EAAA,EAAAC,EAAAC,eAAAC,WAAAC,EAAAV,EAAAW,KAAA,EAAA,EAAA,EAAA,6BAFFC,EAAA,EAAA,KAAA,CAAA,EAAyEC,EAAA,CAAA,EAAoBC,EAAA,EAC7FC,EAAA,EAAAC,GAAA,EAAA,EAAA,KAAA,KAAAC,EAAA,4DAD2ClB,EAAA,UAAAmB,EAAA,EAAAC,GAAAC,EAAA,CAAA,CAAA,EAA8BC,EAAA,EAAAC,EAAAC,EAAAC,EAAAC,KAAA,CAAA,EACzEJ,EAAA,EAAAK,EAAAF,EAAAG,QAAA,4BAFFvB,EAAA,EAAAwB,GAAA,EAAA,CAAA,uCAAAtB,EAAA,EAAAC,EAAAsB,eAAAnB,EAAAc,CAAA,EAAA,EAAA,EAAA,sCAcFZ,EAAA,EAAA,MAAA,CAAA,eAA8BkB,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAzB,EAAA0B,EAAA,CAAA,EAAA,OAAAC,EAAS3B,EAAA4B,SAAA,CAAU,CAAA,CAAA,EAAkErB,EAAA,qBAAhEf,EAAA,UAAAmB,EAAA,EAAAkB,GAAAlC,EAAA,EAAA,EAAAK,EAAA8B,WAAAC,iBAAA,CAAA,CAAA,4BADrDlC,EAAA,EAAAmC,GAAA,EAAA,EAAA,MAAA,CAAA,kBAAAjC,EAAA,EAAAkC,EAAAjC,EAAAkC,WAAAC,QAAA,EAAA,EAAA,6BAnBF9B,EAAA,EAAA,MAAA,CAAA,yCAGEA,EAAA,EAAA,MAAA,CAAA,EAEEG,EAAA,EAAA4B,GAAA,EAAA,EAAA,KAAA,KAAAC,EAAA,EAWF9B,EAAA,EAAM,EAERV,EAAA,EAAAyC,GAAA,EAAA,CAAA,kCAlB4C9C,EAAA,UAAA+C,GAAA,GAAAC,GAAA7C,EAAA,EAAA,EAAAK,EAAA8B,WAAAC,iBAAA,EAAApC,EAAA,EAAA,EAAAK,EAAA8B,WAAAW,kBAAA,IAAA,GAAA9C,EAAA,EAAA,EAAAK,EAAAC,eAAAyC,gBAAA,IAAA,EAAA,CAAA,EAKxC5B,EAAA,CAAA,EAAAK,EAAAnB,EAAA2C,QAAA,EAaJ7B,EAAA,CAAA,EAAAf,EAAA,GAAA6C,EAAAjD,EAAA,EAAA,EAAAK,EAAA6C,eAAAC,iBAAA,GAAA,EAAA,GAAAF,CAAA,6BAnBF/C,EAAA,EAAAkD,GAAA,EAAA,EAAA,gCAAAhD,EAAA,EAAAJ,EAAA,EAAA,EAAAK,EAAA8B,WAAAC,iBAAA,IAAA,GAAA,EAAA,EAAA,6BAHJiB,GAAA,CAAA,EACEnD,EAAA,EAAAoD,GAAA,EAAA,CAAA,sCAAAnC,EAAA,EAAAf,EAAA,GAAAmD,EAAAvD,EAAA,EAAA,EAAAK,EAAAC,eAAAkD,YAAA,GAAA,EAAA,GAAAD,CAAA,GDeF,IAAYE,EAAZ,SAAYA,EAAa,CAGvBA,OAAAA,EAAA,QAAA,gBACAA,EAAA,MAAA,cACAA,EAAA,MAAA,cACAA,EAAA,MAAA,cACAA,EAAA,UAAA,kBACAA,EAAA,OAAA,eACAA,EAAA,MAAA,cACAA,EAAA,WAAA,mBACAA,EAAA,YAAA,qBAGAA,EAAA,WAAA,mBACAA,EAAA,eAAA,mBAGAA,EAAA,QAAA,UACAA,EAAA,YAAA,cACAA,EAAA,QAAA,UACAA,EAAA,MAAA,QACAA,EAAA,QAAA,UACAA,EAAA,UAAA,aACAA,EAAA,WAAA,aACAA,EAAA,UAAA,YACAA,EAAA,UAAA,aA1BUA,CA2BZ,EA3BYA,GAAa,CAAA,CAAA,EAkCnBC,EAAN,KAAiB,CAKfC,YAAY5D,EAAyBU,EAAqB,CAAA,EAAIR,EAA8C2D,OAAS,CAHrH,KAAAnD,MAAqB,CAAA,EAInB,KAAKV,SAAWA,EAChB,KAAKU,MAAQA,EACb,KAAKR,YAAcA,CACrB,GAkBW4D,IAAsB,IAAA,CAA7B,IAAOA,EAAP,MAAOA,CAAsB,CA4FjCF,aAAA,CA1FiB,KAAAG,WAAaC,EAAOC,CAAU,EAC5B,KAAA7B,WAAa4B,EAAOE,CAAU,EAC9B,KAAA3D,eAAiByD,EAAOG,EAAc,EACtC,KAAAC,MAAQJ,EAAOK,CAAiB,EAClC,KAAAC,MAAQN,EAAOO,EAAc,EAC7B,KAAAC,cAAgBR,EAAOS,EAAa,EACpC,KAAAC,gBAAkBV,EAAOW,EAAiB,EAC1C,KAAAC,OAASZ,EAAOa,CAAM,EACpB,KAAA1B,eAAiBa,EAAOc,CAAc,EACxC,KAAAC,SAAWf,EAAOgB,EAAQ,EAE3C,KAAAC,iBAAmB,GAInB,KAAAhC,SAA+B,CAC7B,CACEzB,MAAO,wBACPE,SAAU,CACR,IAAIiC,EAAYD,EAAcwB,QAAS,CAAA,CAAE,EACzC,IAAIvB,EAAYD,EAAcyB,WAAW,EACzC,IAAIxB,EAAYD,EAAc0B,SAAS,EACvC,IAAIzB,EAAYD,EAAc2B,OAAO,EACrC,IAAI1B,EAAYD,EAAc4B,KAAK,EACnC,IAAI3B,EAAYD,EAAc6B,OAAO,EACrC,IAAI5B,EAAYD,EAAc8B,SAAS,CAAC,GAG5C,CACEhE,MAAO,uBACPE,SAAU,CACR,IAAIiC,EAAYD,EAAc+B,QAAS,CAACC,EAAKC,KAAK,CAAC,EACnD,IAAIhC,EAAYD,EAAckC,MAAO,CAACF,EAAKC,KAAK,CAAC,EACjD,IAAIhC,EAAYD,EAAcmC,MAAO,CAACH,EAAKC,KAAK,CAAC,EACjD,IAAIhC,EAAYD,EAAcoC,MAAO,CAACJ,EAAKC,KAAK,CAAC,EACjD,IAAIhC,EAAYD,EAAcqC,UAAW,CAACL,EAAKC,KAAK,CAAC,EACrD,IAAIhC,EAAYD,EAAcsC,MAAO,CAACN,EAAKC,KAAK,CAAC,CAAC,GAGtD,CACEnE,MAAO,uBACPE,SAAU,CACR,IAAIiC,EAAYD,EAAcuC,UAAW,CAAA,CAAE,CAAC,GAGhD,CACEzE,MAAO,qBACPE,SAAU,CACR,IAAIiC,EAAYD,EAAcwC,OAAQ,CAACR,EAAKC,KAAK,CAAC,EAClD,IAAIhC,EAAYD,EAAcyC,WAAY,CAACT,EAAKC,KAAK,CAAC,EACtD,IAAIhC,EAAYD,EAAc0C,YAAa,CAACV,EAAKC,KAAK,EACpD,KAAKpF,eAAekD,aAAa4C,KAC/BC,EAAK,CAAC,EACNC,EAAUC,GACJ,CAACA,GAAQ,CAAC,KAAKjG,eAAekG,aAAaD,CAAI,EAE1CE,EAAG,EAAE,EAEL,KAAKlC,cAAcmC,eAAc,EAAGN,KACzCO,EAAmB,KAAK7C,UAAU,EAClC8C,EAAIC,GAAKA,EAAEC,MAAM,EACjBC,EAAY,CAAEC,WAAY,EAAGC,SAAU,EAAI,CAAE,CAAC,CAGnD,CAAC,CACH,CAAC,GAGR,CACE1F,MAAO,2BACPE,SAAU,CACR,IAAIiC,EAAYD,EAAcyD,WAAY,CAACzB,EAAKC,KAAK,CAAC,CAAC,EAE1D,EAEH,KAAAyB,4BAA8B,KAAKxC,OAAOyC,OAAOhB,KAC/CiB,EAAOC,GAASA,aAAiBC,CAAa,EAC9CZ,EAAmB,KAAK7C,UAAU,EAClC8C,EAAIY,GAAOA,CAAoB,EAC/BlB,EAAUmB,GAAK,KAAKvE,eAAeC,iBAAiB,EACpDkE,EAAQK,GAAMA,EAAInF,EAAWoF,MAAM,EACnCrB,EAAU,IAAM,KAAKnE,WAAWC,iBAAiB,EACjDiE,EAAK,CAAC,EACNgB,EAAOO,GAAa,CAACA,CAAS,EAC9BC,EAAIC,GAAI,CACN,KAAK3F,WAAW4F,gBAAgB,EAAI,CACtC,CAAC,CAAC,EAuEe,KAAAxF,WAAaA,EAlE9B,KAAK4E,4BAA4Ba,UAAS,EAGtC,KAAK9E,eAAe+E,oBAAmB,EAAK1F,EAAWoF,QACzD,KAAKxF,WAAW4F,gBAAgB,EAAI,EAItC,KAAKzH,eAAeyC,iBAAiBqD,KAAKO,EAAmB,KAAK7C,UAAU,CAAC,EAAEkE,UAAUE,GAAM,CACzFA,IACF,KAAKlD,iBAAmB,GACpB,KAAKA,mBACH,KAAKhC,SAAS,CAAC,EAAEvB,SAASqF,SAAW,GACvC,KAAK9D,SAAS,CAAC,EAAEvB,SAAS0G,KAAK,IAAIzE,EAAYD,EAAc2E,WAAY,CAAA,EACrE,KAAK9H,eAAekD,aAAa4C,KAC/BC,EAAK,CAAC,EACNC,EAAUC,GACJ,CAACA,GAAQ,CAAC,KAAKjG,eAAekG,aAAaD,CAAI,EAE1CE,EAAG,EAAE,EAEL,KAAKhC,gBAAgB4D,kBAAiB,EAAGjC,KAC9CO,EAAmB,KAAK7C,UAAU,EAClC8C,EAAIC,GAAKA,EAAEC,MAAM,EACjBC,EAAY,CAAEC,WAAY,EAAGC,SAAU,EAAI,CAAE,CAAC,CAGnD,CAAC,CACH,CAAC,EAIJ,KAAKjE,SAAS,CAAC,EAAEvB,SAASqF,SAAW,GACvC,KAAK9D,SAAS,CAAC,EAAEvB,SAAS0G,KAAK,IAAIzE,EAAYD,EAAc6E,eAAgB,CAAA,CAAE,CAAC,GAKpF,KAAKC,mBAAkB,EACvB,KAAKpE,MAAMqE,aAAY,EAE3B,CAAC,CACH,CAEAC,iBAAe,CACb,KAAKF,mBAAkB,CACzB,CAEAA,oBAAkB,CAChB,IAAMG,EAAiB,KAAKrE,MAAMsE,SAAS5I,SAC3C,GAAI2I,EAAgB,CAClB,IAAME,EAAU,KAAK9D,SAAS+D,eAAe,YAAcH,CAAc,EACrEE,GACFA,EAAQE,eAAe,CAACC,SAAU,SAAUC,MAAO,QAAQ,CAAC,CAEhE,CACF,CAEArH,eAAe4E,EAAY0C,EAAoB,CAC7C,OAAOA,EAAQxH,SAAS4F,OAAO6B,GAAQ,KAAK5I,eAAeC,WAAWgG,EAAM2C,EAAKzI,KAAK,CAAC,EAAEqG,OAAS,CACpG,CAEA7E,UAAQ,CACN,KAAKE,WAAWgH,cAAa,CAC/B,yCA7JWtF,EAAsB,sBAAtBA,EAAsBuF,UAAA,CAAA,CAAA,oBAAA,CAAA,EAAAC,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,YAAA,eAAA,EAAA,CAAA,EAAA,aAAA,qBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,kBAAA,OAAA,OAAA,OAAA,EAAA,SAAA,EAAA,CAAA,OAAA,YAAA,EAAA,KAAA,SAAA,WAAA,QAAA,YAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,QAAA,SAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAtH,EAAA,CAAAsH,EAAA,GC7EnC1J,EAAA,EAAA2J,GAAA,EAAA,EAAA,eAAA,CAAA,OAAiChK,EAAA,gBAAA,UAAA,iBDkE7BiK,GACAC,EACAC,EACAC,GAEAC,EAAmB,EAAAC,OAAA,CAAA;kEAAA,EAAAC,gBAAA,CAAA,CAAA,EAMjB,IAAOvG,EAAPwG,SAAOxG,CAAsB,GAAA", "names": ["\u0275\u0275elementStart", "\u0275\u0275elementContainer", "\u0275\u0275elementEnd", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c2", "\u0275\u0275pipeBind1", "ctx_r0", "navService", "sideNavCollapsed$", "highlighted", "\u0275\u0275advance", "inner_r2", "id", "link", "\u0275\u0275sanitizeUrl", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "openLink", "fragment", "queryParams", "\u0275\u0275template", "SideNavItemComponent_Conditional_1_Conditional_1_Conditional_0_Template", "SideNavItemComponent_Conditional_1_Conditional_1_Conditional_1_Template", "SideNavItemComponent_Conditional_1_Conditional_1_Conditional_2_Template", "\u0275\u0275conditional", "\u0275\u0275pureFunction0", "_c3", "SideNavItemComponent_Conditional_1_Conditional_0_Template", "SideNavItemComponent_Conditional_1_Conditional_1_Template", "external", "\u0275\u0275element", "imageUrl", "\u0275\u0275classMapInterpolate1", "icon", "SideNavItemComponent_ng_template_2_Conditional_1_Conditional_2_Template", "SideNavItemComponent_ng_template_2_Conditional_1_Conditional_3_Template", "\u0275\u0275propertyInterpolate", "title", "\u0275\u0275text", "\u0275\u0275textInterpolate", "badgeCount", "SideNavItemComponent_ng_template_2_Conditional_1_Template", "SideNavItemComponent_ng_template_2_Conditional_5_Template", "\u0275\u0275projection", "noIcon", "\u0275\u0275textInterpolate1", "SideNavItemComponent", "constructor", "destroyRef", "inject", "DestroyRef", "router", "Router", "cdRef", "ChangeDetectorRef", "NavService", "utilityService", "UtilityService", "undefined", "comparisonMethod", "events", "pipe", "filter", "event", "NavigationEnd", "takeUntilDestroyed", "map", "evt", "tap", "triggerHighlightCheck", "url", "_", "collapseNavIfApplicable", "subscribe", "ngOnInit", "setTimeout", "routeUrl", "split", "page", "updateHighlight", "includes", "markForCheck", "endsWith", "fragmentEqual", "queryParamsEqual", "startsWith", "Object", "keys", "length", "navigateByUrl", "getActiveBreakpoint", "Breakpoint", "Tablet", "collapseSideNav", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "ngContentSelectors", "_c1", "decls", "vars", "consts", "template", "rf", "ctx", "SideNavItemComponent_Conditional_0_Template", "SideNavItemComponent_Conditional_1_Template", "SideNavItemComponent_ng_template_2_Template", "\u0275\u0275templateRefExtractor", "RouterLink", "ImageComponent", "NgTemplateOutlet", "NgClass", "AsyncPipe", "styles", "changeDetection", "_SideNavItemComponent", "SettingFragmentPipe", "transform", "tabID", "translate", "pure", "standalone", "_SettingFragmentPipe", "\u0275\u0275element", "\u0275\u0275property", "item_r1", "fragment", "\u0275\u0275pipeBind1", "badgeCount$", "\u0275\u0275template", "PreferenceNavComponent_ng_container_0_Conditional_1_Conditional_0_For_6_Conditional_0_For_3_Conditional_0_Template", "\u0275\u0275conditional", "ctx_r2", "accountService", "hasAnyRole", "user_r2", "roles", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275repeaterCreate", "PreferenceNavComponent_ng_container_0_Conditional_1_Conditional_0_For_6_Conditional_0_For_3_Template", "_forTrack1", "\u0275\u0275pureFunction1", "_c1", "idx_r6", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "t_r7", "section_r5", "title", "\u0275\u0275repeater", "children", "PreferenceNavComponent_ng_container_0_Conditional_1_Conditional_0_For_6_Conditional_0_Template", "hasAnyChildren", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r8", "\u0275\u0275nextContext", "\u0275\u0275resetView", "collapse", "_c2", "navService", "sideNavCollapsed$", "PreferenceNavComponent_ng_container_0_Conditional_1_Conditional_0_Conditional_7_Conditional_0_Template", "ctx", "Breakpoint", "Desktop", "PreferenceNavComponent_ng_container_0_Conditional_1_Conditional_0_For_6_Template", "_forTrack0", "PreferenceNavComponent_ng_container_0_Conditional_1_Conditional_0_Conditional_7_Template", "\u0275\u0275pureFunction3", "_c0", "sideNavVisibility$", "hasValidLicense$", "sections", "tmp_7_0", "utilityService", "activeBreakpoint$", "PreferenceNavComponent_ng_container_0_Conditional_1_Conditional_0_Template", "\u0275\u0275elementContainerStart", "PreferenceNavComponent_ng_container_0_Conditional_1_Template", "tmp_2_0", "currentUser$", "SettingsTabId", "SideNavItem", "constructor", "undefined", "PreferenceNavComponent", "destroyRef", "inject", "DestroyRef", "NavService", "AccountService", "cdRef", "ChangeDetectorRef", "route", "ActivatedRoute", "serverService", "ServerService", "scrobbleService", "ScrobblingService", "router", "Router", "UtilityService", "document", "DOCUMENT", "hasActiveLicense", "Account", "Preferences", "Customize", "Clients", "Theme", "Devices", "UserStats", "General", "Role", "Admin", "Media", "Email", "Users", "Libraries", "Tasks", "CBLImport", "System", "Statistics", "MediaIssues", "pipe", "take", "switchMap", "user", "hasAdminRole", "of", "getMediaErrors", "takeUntilDestroyed", "map", "d", "length", "shareReplay", "bufferSize", "refCount", "KavitaPlus", "collapseSideNavOnMobileNav$", "events", "filter", "event", "NavigationEnd", "evt", "_", "b", "Tablet", "collapsed", "tap", "c", "collapseSideNav", "subscribe", "getActiveBreakpoint", "res", "push", "Scrobbling", "getScrobbleErrors", "MALStackImport", "scrollToActiveItem", "markForCheck", "ngAfterViewInit", "activeFragment", "snapshot", "element", "getElementById", "scrollIntoView", "behavior", "block", "section", "item", "toggleSideNav", "selectors", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "PreferenceNavComponent_ng_container_0_Template", "TranslocoDirective", "NgClass", "AsyncPipe", "SideNavItemComponent", "SettingFragmentPipe", "styles", "changeDetection", "_PreferenceNavComponent"] }