@ojiepermana/angular 21.1.18 → 21.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -885,7 +885,7 @@ class VerticalLayout {
|
|
|
885
885
|
}
|
|
886
886
|
</sidebar>
|
|
887
887
|
</nav>
|
|
888
|
-
<main class="relative min-h-0 min-w-0 overflow-y-auto">
|
|
888
|
+
<main class="relative min-h-0 min-w-0 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10">
|
|
889
889
|
<router-outlet />
|
|
890
890
|
</main>
|
|
891
891
|
</div>
|
|
@@ -938,7 +938,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
938
938
|
}
|
|
939
939
|
</sidebar>
|
|
940
940
|
</nav>
|
|
941
|
-
<main class="relative min-h-0 min-w-0 overflow-y-auto">
|
|
941
|
+
<main class="relative min-h-0 min-w-0 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10">
|
|
942
942
|
<router-outlet />
|
|
943
943
|
</main>
|
|
944
944
|
</div>
|
|
@@ -1010,7 +1010,9 @@ class ShellPagesComponent {
|
|
|
1010
1010
|
<ng-content select="[shell-pages-header]" />
|
|
1011
1011
|
</header>
|
|
1012
1012
|
|
|
1013
|
-
<main class="min-h-0 flex-1 overflow-y-auto
|
|
1013
|
+
<main class="min-h-0 flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10">
|
|
1014
|
+
<ng-content select="[shell-pages-main]" />
|
|
1015
|
+
</main>
|
|
1014
1016
|
|
|
1015
1017
|
<footer class="flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-border px-2">
|
|
1016
1018
|
<ng-content select="[shell-pages-footer]" />
|
|
@@ -1028,7 +1030,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
1028
1030
|
<ng-content select="[shell-pages-header]" />
|
|
1029
1031
|
</header>
|
|
1030
1032
|
|
|
1031
|
-
<main class="min-h-0 flex-1 overflow-y-auto
|
|
1033
|
+
<main class="min-h-0 flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10">
|
|
1034
|
+
<ng-content select="[shell-pages-main]" />
|
|
1035
|
+
</main>
|
|
1032
1036
|
|
|
1033
1037
|
<footer class="flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-border px-2">
|
|
1034
1038
|
<ng-content select="[shell-pages-footer]" />
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ojiepermana-angular-brand-etos.mjs","sources":["../../../projects/angular/brand/etos/core/etos-brand.config.ts","../../../projects/angular/brand/etos/core/etos-brand.provider.ts","../../../projects/angular/brand/etos/component/theme-switcher/theme-switcher.component.ts","../../../projects/angular/brand/etos/shells/layouts/empty/empty.ts","../../../projects/angular/brand/etos/shells/layouts/horizontal/horizontal.ts","../../../projects/angular/brand/etos/shells/layouts/vertical/vertical.ts","../../../projects/angular/brand/etos/shells/layouts/etos.layout.ts","../../../projects/angular/brand/etos/shells/pages/shell-pages/shell-pages.ts","../../../projects/angular/brand/etos/public-api.ts","../../../projects/angular/brand/etos/ojiepermana-angular-brand-etos.ts"],"sourcesContent":["import type { MaterialLayoutConfig } from '@ojiepermana/angular/layout';\nimport type { MaterialThemeConfig } from '@ojiepermana/angular/theme';\n\nexport const ETOS_BRAND_NAME = 'etos';\n\nexport const ETOS_THEME_CONFIG = {\n mode: 'light',\n brand: ETOS_BRAND_NAME,\n} satisfies MaterialThemeConfig;\n\nexport const ETOS_LAYOUT_CONFIG = {\n mode: 'vertical',\n} satisfies MaterialLayoutConfig;\n","import {\n type EnvironmentProviders,\n type Provider,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type MaterialLayoutConfig, provideMaterialLayout } from '@ojiepermana/angular/layout';\nimport { DEFAULT_NAVIGATION_ID, NavigationService, type NavigationItem } from '@ojiepermana/angular/navigation';\nimport {\n type MaterialThemeConfig,\n type MaterialThemeFeature,\n provideMaterialTheme,\n withMaterialDefaults,\n} from '@ojiepermana/angular/theme';\nimport { ETOS_BRAND_NAME, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG } from './etos-brand.config';\n\nexport interface EtosBrandOptions {\n readonly theme?: MaterialThemeConfig;\n readonly layout?: MaterialLayoutConfig;\n readonly navigation?: NavigationItem[];\n readonly navigationId?: string;\n readonly materialDefaults?: boolean;\n}\n\nexport function provideEtosTheme(\n config: MaterialThemeConfig = {},\n ...features: MaterialThemeFeature[]\n): EnvironmentProviders {\n return provideMaterialTheme(\n {\n ...ETOS_THEME_CONFIG,\n ...config,\n brand: ETOS_BRAND_NAME,\n 'theme-brand': ETOS_BRAND_NAME,\n },\n ...features,\n );\n}\n\nexport function provideEtosLayout(config: MaterialLayoutConfig = {}): EnvironmentProviders {\n return provideMaterialLayout({\n ...ETOS_LAYOUT_CONFIG,\n ...config,\n });\n}\n\nexport function provideEtosBrand(options: EtosBrandOptions = {}): EnvironmentProviders {\n const providers: Array<EnvironmentProviders | Provider> = [\n provideEtosTheme(options.theme, ...(options.materialDefaults === false ? [] : [withMaterialDefaults()])),\n provideEtosLayout(options.layout),\n ];\n\n const navigation = options.navigation;\n if (navigation) {\n providers.push(\n provideEnvironmentInitializer(() => {\n inject(NavigationService).registerItems(options.navigationId ?? DEFAULT_NAVIGATION_ID, navigation);\n }),\n );\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, viewChild } from '@angular/core';\nimport {\n AvatarComponent,\n AvatarFallbackComponent,\n AvatarImageComponent,\n ButtonComponent,\n PopoverContentDirective,\n PopoverTriggerDirective,\n cn,\n type PopoverAlign,\n type PopoverSide,\n} from '@ojiepermana/angular/component';\nimport { LayoutService, type LayoutMode, type LayoutWidth } from '@ojiepermana/angular/layout';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation';\nimport { ThemeService, type ColorScheme } from '@ojiepermana/angular/theme';\n\ninterface ToggleOption<T extends string> {\n readonly value: T;\n readonly label: string;\n readonly icon: string;\n}\n\nexport type EtosThemeSwitcherAction = string;\n\nexport interface EtosThemeSwitcherUserInfo {\n readonly name: string;\n readonly subtitle?: string;\n readonly avatarSrc?: string | null;\n readonly avatarAlt?: string;\n}\n\nexport interface EtosThemeSwitcherNotificationShortcut {\n readonly value?: EtosThemeSwitcherAction;\n readonly icon?: string;\n readonly ariaLabel?: string;\n}\n\ntype EtosThemeSwitcherActionTone = 'default' | 'destructive';\n\nexport interface EtosThemeSwitcherQuickAction {\n readonly value: EtosThemeSwitcherAction;\n readonly label: string;\n readonly icon: string;\n readonly tone?: EtosThemeSwitcherActionTone;\n}\n\nconst THEME_SCHEME_OPTIONS = [\n { value: 'light', label: 'Light', icon: 'light_mode' },\n { value: 'dark', label: 'Dark', icon: 'dark_mode' },\n { value: 'system', label: 'System', icon: 'computer' },\n] as const satisfies readonly ToggleOption<ColorScheme>[];\n\nconst LAYOUT_MODE_OPTIONS = [\n { value: 'horizontal', label: 'Horizontal', icon: 'view_column' },\n { value: 'vertical', label: 'Vertical', icon: 'view_sidebar' },\n { value: 'empty', label: 'Empty', icon: 'crop_square' },\n] as const satisfies readonly ToggleOption<LayoutMode>[];\n\nconst LAYOUT_WIDTH_OPTIONS = [\n { value: 'full', label: 'Full', icon: 'fit_screen' },\n { value: 'container', label: 'Container', icon: 'center_focus_strong' },\n { value: 'wide', label: 'Wide', icon: 'width_wide' },\n] as const satisfies readonly ToggleOption<LayoutWidth>[];\n\nconst SWITCHER_PANEL_OVERLAP_OFFSET = -32;\n\n@Component({\n selector: 'etos-theme-switcher',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AvatarComponent,\n AvatarFallbackComponent,\n AvatarImageComponent,\n ButtonComponent,\n PopoverContentDirective,\n PopoverTriggerDirective,\n UiNavIconComponent,\n ],\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n @if (notificationShortcutConfig(); as shortcut) {\n <button\n type=\"button\"\n ui-button\n variant=\"ghost\"\n size=\"icon\"\n data-trigger-action=\"notifications\"\n [attr.data-value]=\"shortcut.value\"\n [attr.aria-label]=\"shortcut.ariaLabel\"\n [class]=\"notificationButtonClasses()\"\n (click)=\"triggerNotificationAction($event)\">\n <ui-nav-icon [name]=\"shortcut.icon\" [size]=\"18\" class=\"text-current\" />\n </button>\n }\n\n <button\n #trigger=\"uiPopoverTrigger\"\n type=\"button\"\n ui-button\n variant=\"ghost\"\n size=\"icon\"\n [uiPopoverTrigger]=\"preferencesPanel\"\n [side]=\"resolvedPopoverSide()\"\n [align]=\"resolvedPopoverAlign()\"\n [sideOffset]=\"resolvedPopoverSideOffset()\"\n [attr.aria-label]=\"triggerLabel()\"\n [class]=\"triggerButtonClasses(trigger.isOpen())\">\n <ui-avatar class=\"h-8 w-8 border border-border/60 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]\">\n @if (hasAvatar()) {\n <ui-avatar-image [src]=\"avatarImageSrc()\" [alt]=\"avatarAltText()\" />\n }\n <ui-avatar-fallback class=\"bg-primary text-xs font-semibold tracking-[0.24em] text-primary-foreground\">\n {{ initials() }}\n </ui-avatar-fallback>\n </ui-avatar>\n </button>\n\n <ng-template uiPopoverContent #preferencesPanel=\"uiPopoverContent\">\n <section\n data-etos-theme-switcher-panel\n role=\"dialog\"\n aria-label=\"User Info\"\n class=\"w-[min(21rem,calc(100vw-1.5rem))] overflow-hidden border border-border/70 bg-background text-foreground shadow-[0_18px_48px_rgba(15,23,42,0.12)]\">\n <header class=\"p-5 pb-4\">\n <div class=\"flex items-center gap-4\">\n <ui-avatar class=\"h-14 w-14 border border-border/60 shadow-sm\">\n @if (hasAvatar()) {\n <ui-avatar-image [src]=\"avatarImageSrc()\" [alt]=\"avatarAltText()\" />\n }\n <ui-avatar-fallback class=\"bg-primary text-sm font-semibold tracking-[0.24em] text-primary-foreground\">\n {{ initials() }}\n </ui-avatar-fallback>\n </ui-avatar>\n\n <div class=\"min-w-0 flex min-h-14 flex-1 flex-col justify-center self-center\">\n <div class=\"space-y-px\">\n <h2 class=\"truncate text-[1.1rem] font-semibold leading-none tracking-tight text-foreground\">\n {{ resolvedUserName() }}\n </h2>\n <p class=\"text-sm leading-[0.95rem] text-muted-foreground\">\n {{ resolvedUserSubtitle() }}\n </p>\n </div>\n </div>\n </div>\n </header>\n\n <div class=\"space-y-4 px-5 pb-5\">\n <section\n data-setting=\"theme-scheme\"\n [attr.data-current]=\"themeScheme()\"\n class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\">\n @for (option of themeSchemeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"themeOptionClasses(themeScheme() === option.value)\"\n data-setting-option=\"theme-scheme\"\n [attr.data-value]=\"option.value\"\n (click)=\"setThemeScheme(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(themeScheme() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </section>\n\n <section data-setting=\"layout-mode\" [attr.data-current]=\"layoutMode()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p class=\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground\">Layout</p>\n </div>\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\">\n @for (option of layoutModeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"segmentedOptionClasses(layoutMode() === option.value)\"\n data-setting-option=\"layout-mode\"\n [attr.data-value]=\"option.value\"\n (click)=\"setLayoutMode(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(layoutMode() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section data-setting=\"layout-width\" [attr.data-current]=\"layoutWidth()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p class=\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground\">Width</p>\n </div>\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\">\n @for (option of layoutWidthOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"segmentedOptionClasses(layoutWidth() === option.value)\"\n data-setting-option=\"layout-width\"\n [attr.data-value]=\"option.value\"\n (click)=\"setLayoutWidth(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(layoutWidth() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section class=\"space-y-1 border-t border-border/70 pt-2\">\n <h3 class=\"sr-only\">Quick Actions</h3>\n <div class=\"grid gap-1\">\n @for (action of actionOptions(); track action.value) {\n <button\n type=\"button\"\n ui-button\n variant=\"ghost\"\n [class]=\"actionButtonClasses(action.tone ?? 'default')\"\n data-action-option\n [attr.data-value]=\"action.value\"\n (click)=\"triggerAction(action.value)\">\n <span class=\"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted/65\">\n <ui-nav-icon\n [name]=\"action.icon\"\n [size]=\"19\"\n [class]=\"actionIconClasses(action.tone ?? 'default')\" />\n </span>\n <span [class]=\"actionLabelClasses(action.tone ?? 'default')\">\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </section>\n </div>\n </section>\n </ng-template>\n `,\n})\nexport class EtosThemeSwitcherComponent {\n private readonly theme = inject(ThemeService);\n private readonly layout = inject(LayoutService);\n private readonly popoverTrigger = viewChild.required<PopoverTriggerDirective>('trigger');\n\n readonly class = input<string>('');\n readonly userInfo = input<EtosThemeSwitcherUserInfo | null>(null);\n readonly userName = input<string>('User');\n readonly userSubtitle = input<string>('Theme and layout preferences');\n readonly avatarSrc = input<string | null>(null);\n readonly avatarAlt = input<string>('');\n readonly quickActions = input.required<readonly EtosThemeSwitcherQuickAction[]>();\n readonly notificationShortcut = input<EtosThemeSwitcherNotificationShortcut | null>(null);\n readonly showNotificationShortcut = input<boolean>(false);\n readonly popoverSide = input<PopoverSide | null>(null);\n readonly popoverAlign = input<PopoverAlign | null>(null);\n readonly popoverSideOffset = input<number | null>(null);\n readonly actionSelected = output<EtosThemeSwitcherAction>();\n\n protected readonly themeMode = this.theme.mode;\n protected readonly themeScheme = this.theme.scheme;\n protected readonly layoutMode = this.layout.mode;\n protected readonly layoutWidth = this.layout.width;\n\n protected readonly themeSchemeOptions = THEME_SCHEME_OPTIONS;\n protected readonly layoutModeOptions = LAYOUT_MODE_OPTIONS;\n protected readonly layoutWidthOptions = LAYOUT_WIDTH_OPTIONS;\n protected readonly notificationShortcutConfig = computed<Required<EtosThemeSwitcherNotificationShortcut> | null>(\n () => {\n const shortcut = this.notificationShortcut();\n\n if (shortcut) {\n return {\n value: shortcut.value ?? 'notifications',\n icon: shortcut.icon ?? 'notifications',\n ariaLabel: shortcut.ariaLabel ?? `Open notifications for ${this.resolvedUserName()}`,\n };\n }\n\n if (!this.showNotificationShortcut()) {\n return null;\n }\n\n return {\n value: 'notifications',\n icon: 'notifications',\n ariaLabel: `Open notifications for ${this.resolvedUserName()}`,\n };\n },\n );\n protected readonly actionOptions = computed(() => {\n const shortcutValue = this.notificationShortcutConfig()?.value;\n\n if (!shortcutValue) {\n return this.quickActions();\n }\n\n return this.quickActions().filter((action) => action.value !== shortcutValue);\n });\n\n protected readonly hostClasses = computed(() => cn('inline-flex shrink-0 items-center gap-2', this.class()));\n protected readonly resolvedPopoverSide = computed<PopoverSide>(\n () => this.popoverSide() ?? (this.layoutMode() === 'vertical' ? 'top' : 'bottom'),\n );\n protected readonly resolvedPopoverAlign = computed<PopoverAlign>(\n () => this.popoverAlign() ?? (this.layoutMode() === 'vertical' ? 'start' : 'end'),\n );\n protected readonly resolvedPopoverSideOffset = computed(\n () => this.popoverSideOffset() ?? SWITCHER_PANEL_OVERLAP_OFFSET,\n );\n protected readonly resolvedUserName = computed(() => this.userInfo()?.name?.trim() || this.userName());\n protected readonly resolvedUserSubtitle = computed(() => this.userInfo()?.subtitle ?? this.userSubtitle());\n protected readonly resolvedAvatarSrc = computed(() => this.userInfo()?.avatarSrc ?? this.avatarSrc());\n protected readonly resolvedAvatarAlt = computed(() => this.userInfo()?.avatarAlt ?? this.avatarAlt());\n protected readonly hasAvatar = computed(() => !!this.resolvedAvatarSrc());\n protected readonly avatarImageSrc = computed(() => this.resolvedAvatarSrc() ?? '');\n protected readonly avatarAltText = computed(() => this.resolvedAvatarAlt() || `${this.resolvedUserName()} avatar`);\n protected readonly initials = computed(() => this.toInitials(this.resolvedUserName()));\n protected readonly triggerLabel = computed(() => `Open user info for ${this.resolvedUserName()}`);\n\n protected triggerButtonClasses(open: boolean): string {\n return cn(\n 'relative h-8 w-8 rounded-full p-0 transition-colors duration-150 hover:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n open && 'bg-muted/50',\n );\n }\n\n protected notificationButtonClasses(): string {\n return cn(\n 'h-8 w-8 rounded-[var(--layout-frame-radius)] p-0 text-muted-foreground transition-colors duration-150 hover:bg-muted/50 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n );\n }\n\n protected segmentedOptionClasses(active: boolean): string {\n return cn(\n 'h-10 rounded-[var(--layout-frame-radius)] border border-transparent px-[0.3125rem] py-[0.1875rem] text-foreground transition-colors',\n active ? 'bg-background shadow-sm' : 'text-muted-foreground hover:bg-background/70',\n );\n }\n\n protected themeOptionClasses(active: boolean): string {\n return this.segmentedOptionClasses(active);\n }\n\n protected themeIconClasses(active: boolean): string {\n return active ? 'text-foreground' : 'text-muted-foreground';\n }\n\n protected actionButtonClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return cn(\n 'h-12 w-full justify-start gap-2.5 rounded-[var(--layout-frame-radius)] border border-transparent px-2 py-1.5 text-left transition-colors hover:bg-muted/50',\n tone === 'destructive' && 'hover:bg-destructive/8 focus-visible:ring-destructive/30',\n );\n }\n\n protected actionIconClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return tone === 'destructive' ? 'text-destructive' : 'text-foreground';\n }\n\n protected actionLabelClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return tone === 'destructive' ? 'text-sm font-medium text-destructive' : 'text-sm font-medium text-foreground';\n }\n\n protected setThemeScheme(mode: ColorScheme): void {\n this.theme.setScheme(mode);\n }\n\n protected setLayoutMode(mode: LayoutMode): void {\n this.layout.setMode(mode);\n }\n\n protected setLayoutWidth(width: LayoutWidth): void {\n this.layout.setWidth(width);\n }\n\n protected triggerAction(action: EtosThemeSwitcherAction): void {\n this.actionSelected.emit(action);\n this.popoverTrigger().close();\n }\n\n protected triggerNotificationAction(event: Event): void {\n event.stopPropagation();\n\n const shortcut = this.notificationShortcutConfig();\n\n if (!shortcut) {\n return;\n }\n\n this.actionSelected.emit(shortcut.value);\n }\n\n private labelForLayoutMode(mode: LayoutMode): string {\n if (mode === 'horizontal') {\n return 'Horizontal';\n }\n\n if (mode === 'empty') {\n return 'Empty';\n }\n\n return 'Vertical';\n }\n\n private labelForLayoutWidth(width: LayoutWidth): string {\n if (width === 'container') {\n return 'Container';\n }\n\n if (width === 'wide') {\n return 'Wide';\n }\n\n return 'Full';\n }\n\n private toInitials(name: string): string {\n const segments = name.trim().split(/\\s+/).filter(Boolean);\n\n if (segments.length === 0) {\n return 'UI';\n }\n\n if (segments.length === 1) {\n return segments[0].slice(0, 2).toUpperCase();\n }\n\n return `${segments[0][0] ?? ''}${segments[1][0] ?? ''}`.toUpperCase();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'empty',\n imports: [RouterOutlet],\n template: `\n <div\n class=\"h-dvh overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div class=\"relative isolate box-border h-full overflow-hidden py-3\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-y-0 inset-x-0 px-3\">\n <div class=\"relative mx-auto h-full w-full\">\n <div class=\"absolute inset-y-0 left-0 w-px bg-brand\"></div>\n <div class=\"absolute inset-y-0 right-0 w-px bg-brand\"></div>\n </div>\n </div>\n\n <div class=\"h-full min-h-0 border border-brand px-3\">\n <main class=\"mx-auto w-full h-full min-h-0 overflow-y-auto bg-background/65\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyLayout {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { TopbarComponent } from '@ojiepermana/angular/navigation';\n\n@Component({\n selector: 'horizontal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, RouterOutlet, TopbarComponent],\n host: {\n class: 'block',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <div\n class=\"min-h-screen bg-neutral-200 text-neutral-600 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div [class]=\"shellClasses()\">\n <div aria-hidden=\"true\" [class]=\"railOverlayClasses()\">\n <div [class]=\"railGuideClasses()\">\n <div class=\"absolute inset-y-0 left-0 w-px bg-brand\"></div>\n <div class=\"absolute inset-y-0 right-0 w-px bg-brand\"></div>\n </div>\n </div>\n\n <div [class]=\"frameClasses()\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-0 z-0\">\n <div class=\"absolute inset-x-0 top-11 h-px bg-brand\"></div>\n <div class=\"absolute inset-x-0 bottom-11 h-px bg-brand\"></div>\n </div>\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-0 z-10\">\n <div [class]=\"maskClasses()\"></div>\n </div>\n <div [class]=\"contentClasses()\">\n <nav class=\"shrink-0\">\n <topbar class=\"shrink-0\" [showHamburger]=\"false\">\n @if (brandTemplate(); as brand) {\n <div topbar-start class=\"min-w-0\">\n <ng-container [ngTemplateOutlet]=\"brand\" />\n </div>\n }\n\n @if (profileTemplate(); as profile) {\n <div topbar-end class=\"flex min-w-0 items-center\">\n <ng-container [ngTemplateOutlet]=\"profile\" />\n </div>\n }\n </topbar>\n </nav>\n <main class=\"min-h-0 flex-1 overflow-auto\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n})\nexport class HorizontalLayout {\n private readonly layout = inject(LayoutService);\n\n readonly brandTemplate = input<TemplateRef<unknown> | null>(null);\n readonly profileTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly shellClasses = computed(() => {\n switch (this.layoutWidth()) {\n case 'full':\n return 'relative isolate box-border h-dvh overflow-hidden py-3';\n case 'wide':\n return 'relative isolate box-border h-dvh overflow-hidden py-3 lg:py-10';\n default:\n return 'relative isolate box-border h-dvh overflow-hidden py-3 lg:py-20';\n }\n });\n\n protected readonly railOverlayClasses = computed(() => {\n const classes = ['pointer-events-none', 'absolute', 'inset-y-0', 'inset-x-0', 'z-20'];\n if (this.layoutWidth() === 'full') {\n classes.push('px-3');\n } else if (this.layoutWidth() === 'wide') {\n classes.push('px-3', 'lg:px-10');\n } else {\n classes.push('px-3', 'lg:px-10');\n }\n return classes.join(' ');\n });\n\n protected readonly railGuideClasses = computed(() =>\n this.layoutWidth() === 'container' ? 'relative mx-auto h-full w-full max-w-7xl' : 'relative mx-auto h-full w-full',\n );\n\n protected readonly frameClasses = computed(() => {\n const classes = ['relative', 'z-10', 'h-full', 'min-h-0', 'border', 'border-brand'];\n if (this.layoutWidth() === 'full') {\n classes.push('px-3');\n } else if (this.layoutWidth() === 'wide') {\n classes.push('px-3', 'lg:px-10');\n } else {\n classes.push('px-3', 'lg:px-10');\n }\n return classes.join(' ');\n });\n\n protected readonly maskClasses = computed(() => {\n const classes = ['h-full', 'bg-position-[center_center]', 'bg-size-[2.775rem_2.775rem]'];\n if (this.layoutWidth() === 'container') {\n classes.unshift('mx-auto', 'w-full', 'max-w-7xl');\n } else {\n classes.unshift('mx-auto', 'w-full');\n }\n return classes.join(' ');\n });\n\n protected readonly contentClasses = computed(() => {\n const classes = [\n 'relative',\n 'z-20',\n 'mx-auto',\n 'flex',\n 'h-full',\n 'min-h-0',\n 'flex-col',\n 'overflow-hidden',\n 'bg-background/65',\n ];\n if (this.layoutWidth() === 'container') {\n classes.push('w-full', 'max-w-7xl');\n } else {\n classes.push('w-full');\n }\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterOutlet } from '@angular/router';\n\nimport { SidebarComponent, type SidebarAppearance, type SidebarPosition } from '@ojiepermana/angular/navigation';\nimport { LayoutService } from '@ojiepermana/angular/layout';\n\n@Component({\n selector: 'vertical',\n imports: [NgTemplateOutlet, RouterOutlet, SidebarComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-dvh overflow-hidden',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <!-- prettier-ignore -->\n <div class=\"h-full overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.65)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.65)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div [class]=\"shellClasses()\">\n <div [class]=\"frameClasses()\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-x-0 inset-y-8\">\n <div class=\"absolute inset-x-0 top-3.75 h-px bg-brand\"></div>\n <div class=\"absolute inset-x-0 bottom-3.75 h-px bg-brand\"></div>\n </div>\n <div [class]=\"frameBodyClasses()\">\n <div [class]=\"gridClasses()\">\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] left-0 top-[-100vh] z-20 w-px bg-brand\"></div>\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] right-0 top-[-100vh] z-20 w-px bg-brand\"></div>\n <nav class=\"relative h-full min-h-0 shrink-0 overflow-visible border-r border-brand\">\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] left-full top-[-100vh] -z-10 w-px bg-brand\"></div>\n <sidebar\n class=\"h-full\"\n [appearance]=\"sidebarAppearance()\"\n [position]=\"sidebarPosition()\"\n [ariaLabel]=\"ariaLabel()\">\n @if (sidebarHeaderTemplate(); as headerTemplate) {\n <div sidebar-header class=\"contents\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" />\n </div>\n }\n @if (sidebarFooterTemplate(); as footerTemplate) {\n <div sidebar-footer class=\"contents\">\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\n </div>\n }\n </sidebar>\n </nav>\n <main class=\"relative min-h-0 min-w-0 overflow-y-auto\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n})\nexport class VerticalLayout {\n private readonly layout = inject(LayoutService);\n\n readonly sidebarAppearance = input<SidebarAppearance>('default');\n readonly sidebarPosition = input<SidebarPosition>('left');\n readonly ariaLabel = input<string>('Primary');\n readonly sidebarHeaderTemplate = input<TemplateRef<unknown> | null>(null);\n readonly sidebarFooterTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly shellClasses = computed(() => {\n switch (this.layoutWidth()) {\n case 'full':\n return 'relative isolate h-full overflow-hidden py-2';\n case 'wide':\n return 'relative isolate h-full overflow-hidden py-2 lg:py-10';\n default:\n return 'relative isolate h-full overflow-hidden py-2 lg:py-18';\n }\n });\n\n protected readonly frameClasses = computed(() => {\n if (this.layoutWidth() === 'wide') {\n return 'relative h-full border-y border-brand';\n }\n\n return '-mx-18 relative h-full border-y border-brand';\n });\n\n protected readonly frameBodyClasses = computed(() => {\n if (this.layoutWidth() === 'wide') {\n return 'h-full lg:px-10';\n }\n\n return 'h-full px-20';\n });\n\n protected readonly gridClasses = computed(() => {\n const classes = [\n 'relative',\n 'mx-auto',\n 'grid',\n 'h-full',\n 'w-full',\n 'max-w-full',\n 'grid-cols-[auto_minmax(0,1fr)]',\n 'items-stretch',\n 'bg-background/65',\n ];\n\n switch (this.layoutWidth()) {\n case 'container':\n classes.push('lg:max-w-[var(--layout-vertical-shell-max-width)]');\n break;\n default:\n break;\n }\n\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { LayoutService, type LayoutMode } from '@ojiepermana/angular/layout';\nimport { EmptyLayout } from './empty/empty';\nimport { HorizontalLayout } from './horizontal/horizontal';\nimport { VerticalLayout } from './vertical/vertical';\n\n@Component({\n selector: 'etos-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [EmptyLayout, HorizontalLayout, VerticalLayout],\n host: {\n class: 'contents',\n '[attr.data-layout-mode]': 'resolvedMode()',\n },\n template: `\n @switch (resolvedMode()) {\n @case ('empty') {\n <empty />\n }\n @case ('horizontal') {\n <horizontal [brandTemplate]=\"layoutBrandTemplate()\" [profileTemplate]=\"layoutProfileTemplate()\" />\n }\n @default {\n <vertical\n [sidebarHeaderTemplate]=\"sidebarHeaderTemplate() ?? layoutBrandTemplate()\"\n [sidebarFooterTemplate]=\"sidebarFooterTemplate() ?? layoutProfileTemplate()\" />\n }\n }\n `,\n})\nexport class EtosLayoutComponent {\n readonly mode = input<LayoutMode | null>(null);\n readonly sidebarHeaderTemplate = input<TemplateRef<unknown> | null>(null);\n readonly sidebarFooterTemplate = input<TemplateRef<unknown> | null>(null);\n readonly layoutBrandTemplate = input<TemplateRef<unknown> | null>(null);\n readonly layoutProfileTemplate = input<TemplateRef<unknown> | null>(null);\n\n private readonly layout = inject(LayoutService);\n protected readonly resolvedMode = computed(() => this.mode() ?? this.layout.mode());\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'shell-pages',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-full min-h-0',\n },\n template: `\n <div class=\"flex h-full flex-col overflow-hidden\">\n <header class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-b border-border px-2\">\n <ng-content select=\"[shell-pages-header]\" />\n </header>\n\n <main class=\"min-h-0 flex-1 overflow-y-auto\"><ng-content select=\"[shell-pages-main]\" /></main>\n\n <footer class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-border px-2\">\n <ng-content select=\"[shell-pages-footer]\" />\n </footer>\n </div>\n `,\n styles: `\n footer:empty {\n display: none;\n }\n `,\n})\nexport class ShellPagesComponent {}\n","/*\n * Public API Surface of @ojiepermana/angular/etos\n *\n * Etos-specific implementation lives under projects/angular/brand/etos.\n */\n\nexport * from './core/etos-brand.config';\nexport * from './core/etos-brand.provider';\nexport * from './component/theme-switcher';\nexport * from './shells/layouts/etos.layout';\nexport * from './shells/pages/shell-pages';\n\nexport const ETOS_BRAND_VERSION = '0.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-brand-etos.mjs","sources":["../../../projects/angular/brand/etos/core/etos-brand.config.ts","../../../projects/angular/brand/etos/core/etos-brand.provider.ts","../../../projects/angular/brand/etos/component/theme-switcher/theme-switcher.component.ts","../../../projects/angular/brand/etos/shells/layouts/empty/empty.ts","../../../projects/angular/brand/etos/shells/layouts/horizontal/horizontal.ts","../../../projects/angular/brand/etos/shells/layouts/vertical/vertical.ts","../../../projects/angular/brand/etos/shells/layouts/etos.layout.ts","../../../projects/angular/brand/etos/shells/pages/shell-pages/shell-pages.ts","../../../projects/angular/brand/etos/public-api.ts","../../../projects/angular/brand/etos/ojiepermana-angular-brand-etos.ts"],"sourcesContent":["import type { MaterialLayoutConfig } from '@ojiepermana/angular/layout';\nimport type { MaterialThemeConfig } from '@ojiepermana/angular/theme';\n\nexport const ETOS_BRAND_NAME = 'etos';\n\nexport const ETOS_THEME_CONFIG = {\n mode: 'light',\n brand: ETOS_BRAND_NAME,\n} satisfies MaterialThemeConfig;\n\nexport const ETOS_LAYOUT_CONFIG = {\n mode: 'vertical',\n} satisfies MaterialLayoutConfig;\n","import {\n type EnvironmentProviders,\n type Provider,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type MaterialLayoutConfig, provideMaterialLayout } from '@ojiepermana/angular/layout';\nimport { DEFAULT_NAVIGATION_ID, NavigationService, type NavigationItem } from '@ojiepermana/angular/navigation';\nimport {\n type MaterialThemeConfig,\n type MaterialThemeFeature,\n provideMaterialTheme,\n withMaterialDefaults,\n} from '@ojiepermana/angular/theme';\nimport { ETOS_BRAND_NAME, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG } from './etos-brand.config';\n\nexport interface EtosBrandOptions {\n readonly theme?: MaterialThemeConfig;\n readonly layout?: MaterialLayoutConfig;\n readonly navigation?: NavigationItem[];\n readonly navigationId?: string;\n readonly materialDefaults?: boolean;\n}\n\nexport function provideEtosTheme(\n config: MaterialThemeConfig = {},\n ...features: MaterialThemeFeature[]\n): EnvironmentProviders {\n return provideMaterialTheme(\n {\n ...ETOS_THEME_CONFIG,\n ...config,\n brand: ETOS_BRAND_NAME,\n 'theme-brand': ETOS_BRAND_NAME,\n },\n ...features,\n );\n}\n\nexport function provideEtosLayout(config: MaterialLayoutConfig = {}): EnvironmentProviders {\n return provideMaterialLayout({\n ...ETOS_LAYOUT_CONFIG,\n ...config,\n });\n}\n\nexport function provideEtosBrand(options: EtosBrandOptions = {}): EnvironmentProviders {\n const providers: Array<EnvironmentProviders | Provider> = [\n provideEtosTheme(options.theme, ...(options.materialDefaults === false ? [] : [withMaterialDefaults()])),\n provideEtosLayout(options.layout),\n ];\n\n const navigation = options.navigation;\n if (navigation) {\n providers.push(\n provideEnvironmentInitializer(() => {\n inject(NavigationService).registerItems(options.navigationId ?? DEFAULT_NAVIGATION_ID, navigation);\n }),\n );\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, viewChild } from '@angular/core';\nimport {\n AvatarComponent,\n AvatarFallbackComponent,\n AvatarImageComponent,\n ButtonComponent,\n PopoverContentDirective,\n PopoverTriggerDirective,\n cn,\n type PopoverAlign,\n type PopoverSide,\n} from '@ojiepermana/angular/component';\nimport { LayoutService, type LayoutMode, type LayoutWidth } from '@ojiepermana/angular/layout';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation';\nimport { ThemeService, type ColorScheme } from '@ojiepermana/angular/theme';\n\ninterface ToggleOption<T extends string> {\n readonly value: T;\n readonly label: string;\n readonly icon: string;\n}\n\nexport type EtosThemeSwitcherAction = string;\n\nexport interface EtosThemeSwitcherUserInfo {\n readonly name: string;\n readonly subtitle?: string;\n readonly avatarSrc?: string | null;\n readonly avatarAlt?: string;\n}\n\nexport interface EtosThemeSwitcherNotificationShortcut {\n readonly value?: EtosThemeSwitcherAction;\n readonly icon?: string;\n readonly ariaLabel?: string;\n}\n\ntype EtosThemeSwitcherActionTone = 'default' | 'destructive';\n\nexport interface EtosThemeSwitcherQuickAction {\n readonly value: EtosThemeSwitcherAction;\n readonly label: string;\n readonly icon: string;\n readonly tone?: EtosThemeSwitcherActionTone;\n}\n\nconst THEME_SCHEME_OPTIONS = [\n { value: 'light', label: 'Light', icon: 'light_mode' },\n { value: 'dark', label: 'Dark', icon: 'dark_mode' },\n { value: 'system', label: 'System', icon: 'computer' },\n] as const satisfies readonly ToggleOption<ColorScheme>[];\n\nconst LAYOUT_MODE_OPTIONS = [\n { value: 'horizontal', label: 'Horizontal', icon: 'view_column' },\n { value: 'vertical', label: 'Vertical', icon: 'view_sidebar' },\n { value: 'empty', label: 'Empty', icon: 'crop_square' },\n] as const satisfies readonly ToggleOption<LayoutMode>[];\n\nconst LAYOUT_WIDTH_OPTIONS = [\n { value: 'full', label: 'Full', icon: 'fit_screen' },\n { value: 'container', label: 'Container', icon: 'center_focus_strong' },\n { value: 'wide', label: 'Wide', icon: 'width_wide' },\n] as const satisfies readonly ToggleOption<LayoutWidth>[];\n\nconst SWITCHER_PANEL_OVERLAP_OFFSET = -32;\n\n@Component({\n selector: 'etos-theme-switcher',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AvatarComponent,\n AvatarFallbackComponent,\n AvatarImageComponent,\n ButtonComponent,\n PopoverContentDirective,\n PopoverTriggerDirective,\n UiNavIconComponent,\n ],\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n @if (notificationShortcutConfig(); as shortcut) {\n <button\n type=\"button\"\n ui-button\n variant=\"ghost\"\n size=\"icon\"\n data-trigger-action=\"notifications\"\n [attr.data-value]=\"shortcut.value\"\n [attr.aria-label]=\"shortcut.ariaLabel\"\n [class]=\"notificationButtonClasses()\"\n (click)=\"triggerNotificationAction($event)\">\n <ui-nav-icon [name]=\"shortcut.icon\" [size]=\"18\" class=\"text-current\" />\n </button>\n }\n\n <button\n #trigger=\"uiPopoverTrigger\"\n type=\"button\"\n ui-button\n variant=\"ghost\"\n size=\"icon\"\n [uiPopoverTrigger]=\"preferencesPanel\"\n [side]=\"resolvedPopoverSide()\"\n [align]=\"resolvedPopoverAlign()\"\n [sideOffset]=\"resolvedPopoverSideOffset()\"\n [attr.aria-label]=\"triggerLabel()\"\n [class]=\"triggerButtonClasses(trigger.isOpen())\">\n <ui-avatar class=\"h-8 w-8 border border-border/60 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]\">\n @if (hasAvatar()) {\n <ui-avatar-image [src]=\"avatarImageSrc()\" [alt]=\"avatarAltText()\" />\n }\n <ui-avatar-fallback class=\"bg-primary text-xs font-semibold tracking-[0.24em] text-primary-foreground\">\n {{ initials() }}\n </ui-avatar-fallback>\n </ui-avatar>\n </button>\n\n <ng-template uiPopoverContent #preferencesPanel=\"uiPopoverContent\">\n <section\n data-etos-theme-switcher-panel\n role=\"dialog\"\n aria-label=\"User Info\"\n class=\"w-[min(21rem,calc(100vw-1.5rem))] overflow-hidden border border-border/70 bg-background text-foreground shadow-[0_18px_48px_rgba(15,23,42,0.12)]\">\n <header class=\"p-5 pb-4\">\n <div class=\"flex items-center gap-4\">\n <ui-avatar class=\"h-14 w-14 border border-border/60 shadow-sm\">\n @if (hasAvatar()) {\n <ui-avatar-image [src]=\"avatarImageSrc()\" [alt]=\"avatarAltText()\" />\n }\n <ui-avatar-fallback class=\"bg-primary text-sm font-semibold tracking-[0.24em] text-primary-foreground\">\n {{ initials() }}\n </ui-avatar-fallback>\n </ui-avatar>\n\n <div class=\"min-w-0 flex min-h-14 flex-1 flex-col justify-center self-center\">\n <div class=\"space-y-px\">\n <h2 class=\"truncate text-[1.1rem] font-semibold leading-none tracking-tight text-foreground\">\n {{ resolvedUserName() }}\n </h2>\n <p class=\"text-sm leading-[0.95rem] text-muted-foreground\">\n {{ resolvedUserSubtitle() }}\n </p>\n </div>\n </div>\n </div>\n </header>\n\n <div class=\"space-y-4 px-5 pb-5\">\n <section\n data-setting=\"theme-scheme\"\n [attr.data-current]=\"themeScheme()\"\n class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\">\n @for (option of themeSchemeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"themeOptionClasses(themeScheme() === option.value)\"\n data-setting-option=\"theme-scheme\"\n [attr.data-value]=\"option.value\"\n (click)=\"setThemeScheme(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(themeScheme() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </section>\n\n <section data-setting=\"layout-mode\" [attr.data-current]=\"layoutMode()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p class=\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground\">Layout</p>\n </div>\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\">\n @for (option of layoutModeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"segmentedOptionClasses(layoutMode() === option.value)\"\n data-setting-option=\"layout-mode\"\n [attr.data-value]=\"option.value\"\n (click)=\"setLayoutMode(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(layoutMode() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section data-setting=\"layout-width\" [attr.data-current]=\"layoutWidth()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p class=\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground\">Width</p>\n </div>\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\">\n @for (option of layoutWidthOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"segmentedOptionClasses(layoutWidth() === option.value)\"\n data-setting-option=\"layout-width\"\n [attr.data-value]=\"option.value\"\n (click)=\"setLayoutWidth(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(layoutWidth() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section class=\"space-y-1 border-t border-border/70 pt-2\">\n <h3 class=\"sr-only\">Quick Actions</h3>\n <div class=\"grid gap-1\">\n @for (action of actionOptions(); track action.value) {\n <button\n type=\"button\"\n ui-button\n variant=\"ghost\"\n [class]=\"actionButtonClasses(action.tone ?? 'default')\"\n data-action-option\n [attr.data-value]=\"action.value\"\n (click)=\"triggerAction(action.value)\">\n <span class=\"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted/65\">\n <ui-nav-icon\n [name]=\"action.icon\"\n [size]=\"19\"\n [class]=\"actionIconClasses(action.tone ?? 'default')\" />\n </span>\n <span [class]=\"actionLabelClasses(action.tone ?? 'default')\">\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </section>\n </div>\n </section>\n </ng-template>\n `,\n})\nexport class EtosThemeSwitcherComponent {\n private readonly theme = inject(ThemeService);\n private readonly layout = inject(LayoutService);\n private readonly popoverTrigger = viewChild.required<PopoverTriggerDirective>('trigger');\n\n readonly class = input<string>('');\n readonly userInfo = input<EtosThemeSwitcherUserInfo | null>(null);\n readonly userName = input<string>('User');\n readonly userSubtitle = input<string>('Theme and layout preferences');\n readonly avatarSrc = input<string | null>(null);\n readonly avatarAlt = input<string>('');\n readonly quickActions = input.required<readonly EtosThemeSwitcherQuickAction[]>();\n readonly notificationShortcut = input<EtosThemeSwitcherNotificationShortcut | null>(null);\n readonly showNotificationShortcut = input<boolean>(false);\n readonly popoverSide = input<PopoverSide | null>(null);\n readonly popoverAlign = input<PopoverAlign | null>(null);\n readonly popoverSideOffset = input<number | null>(null);\n readonly actionSelected = output<EtosThemeSwitcherAction>();\n\n protected readonly themeMode = this.theme.mode;\n protected readonly themeScheme = this.theme.scheme;\n protected readonly layoutMode = this.layout.mode;\n protected readonly layoutWidth = this.layout.width;\n\n protected readonly themeSchemeOptions = THEME_SCHEME_OPTIONS;\n protected readonly layoutModeOptions = LAYOUT_MODE_OPTIONS;\n protected readonly layoutWidthOptions = LAYOUT_WIDTH_OPTIONS;\n protected readonly notificationShortcutConfig = computed<Required<EtosThemeSwitcherNotificationShortcut> | null>(\n () => {\n const shortcut = this.notificationShortcut();\n\n if (shortcut) {\n return {\n value: shortcut.value ?? 'notifications',\n icon: shortcut.icon ?? 'notifications',\n ariaLabel: shortcut.ariaLabel ?? `Open notifications for ${this.resolvedUserName()}`,\n };\n }\n\n if (!this.showNotificationShortcut()) {\n return null;\n }\n\n return {\n value: 'notifications',\n icon: 'notifications',\n ariaLabel: `Open notifications for ${this.resolvedUserName()}`,\n };\n },\n );\n protected readonly actionOptions = computed(() => {\n const shortcutValue = this.notificationShortcutConfig()?.value;\n\n if (!shortcutValue) {\n return this.quickActions();\n }\n\n return this.quickActions().filter((action) => action.value !== shortcutValue);\n });\n\n protected readonly hostClasses = computed(() => cn('inline-flex shrink-0 items-center gap-2', this.class()));\n protected readonly resolvedPopoverSide = computed<PopoverSide>(\n () => this.popoverSide() ?? (this.layoutMode() === 'vertical' ? 'top' : 'bottom'),\n );\n protected readonly resolvedPopoverAlign = computed<PopoverAlign>(\n () => this.popoverAlign() ?? (this.layoutMode() === 'vertical' ? 'start' : 'end'),\n );\n protected readonly resolvedPopoverSideOffset = computed(\n () => this.popoverSideOffset() ?? SWITCHER_PANEL_OVERLAP_OFFSET,\n );\n protected readonly resolvedUserName = computed(() => this.userInfo()?.name?.trim() || this.userName());\n protected readonly resolvedUserSubtitle = computed(() => this.userInfo()?.subtitle ?? this.userSubtitle());\n protected readonly resolvedAvatarSrc = computed(() => this.userInfo()?.avatarSrc ?? this.avatarSrc());\n protected readonly resolvedAvatarAlt = computed(() => this.userInfo()?.avatarAlt ?? this.avatarAlt());\n protected readonly hasAvatar = computed(() => !!this.resolvedAvatarSrc());\n protected readonly avatarImageSrc = computed(() => this.resolvedAvatarSrc() ?? '');\n protected readonly avatarAltText = computed(() => this.resolvedAvatarAlt() || `${this.resolvedUserName()} avatar`);\n protected readonly initials = computed(() => this.toInitials(this.resolvedUserName()));\n protected readonly triggerLabel = computed(() => `Open user info for ${this.resolvedUserName()}`);\n\n protected triggerButtonClasses(open: boolean): string {\n return cn(\n 'relative h-8 w-8 rounded-full p-0 transition-colors duration-150 hover:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n open && 'bg-muted/50',\n );\n }\n\n protected notificationButtonClasses(): string {\n return cn(\n 'h-8 w-8 rounded-[var(--layout-frame-radius)] p-0 text-muted-foreground transition-colors duration-150 hover:bg-muted/50 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n );\n }\n\n protected segmentedOptionClasses(active: boolean): string {\n return cn(\n 'h-10 rounded-[var(--layout-frame-radius)] border border-transparent px-[0.3125rem] py-[0.1875rem] text-foreground transition-colors',\n active ? 'bg-background shadow-sm' : 'text-muted-foreground hover:bg-background/70',\n );\n }\n\n protected themeOptionClasses(active: boolean): string {\n return this.segmentedOptionClasses(active);\n }\n\n protected themeIconClasses(active: boolean): string {\n return active ? 'text-foreground' : 'text-muted-foreground';\n }\n\n protected actionButtonClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return cn(\n 'h-12 w-full justify-start gap-2.5 rounded-[var(--layout-frame-radius)] border border-transparent px-2 py-1.5 text-left transition-colors hover:bg-muted/50',\n tone === 'destructive' && 'hover:bg-destructive/8 focus-visible:ring-destructive/30',\n );\n }\n\n protected actionIconClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return tone === 'destructive' ? 'text-destructive' : 'text-foreground';\n }\n\n protected actionLabelClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return tone === 'destructive' ? 'text-sm font-medium text-destructive' : 'text-sm font-medium text-foreground';\n }\n\n protected setThemeScheme(mode: ColorScheme): void {\n this.theme.setScheme(mode);\n }\n\n protected setLayoutMode(mode: LayoutMode): void {\n this.layout.setMode(mode);\n }\n\n protected setLayoutWidth(width: LayoutWidth): void {\n this.layout.setWidth(width);\n }\n\n protected triggerAction(action: EtosThemeSwitcherAction): void {\n this.actionSelected.emit(action);\n this.popoverTrigger().close();\n }\n\n protected triggerNotificationAction(event: Event): void {\n event.stopPropagation();\n\n const shortcut = this.notificationShortcutConfig();\n\n if (!shortcut) {\n return;\n }\n\n this.actionSelected.emit(shortcut.value);\n }\n\n private labelForLayoutMode(mode: LayoutMode): string {\n if (mode === 'horizontal') {\n return 'Horizontal';\n }\n\n if (mode === 'empty') {\n return 'Empty';\n }\n\n return 'Vertical';\n }\n\n private labelForLayoutWidth(width: LayoutWidth): string {\n if (width === 'container') {\n return 'Container';\n }\n\n if (width === 'wide') {\n return 'Wide';\n }\n\n return 'Full';\n }\n\n private toInitials(name: string): string {\n const segments = name.trim().split(/\\s+/).filter(Boolean);\n\n if (segments.length === 0) {\n return 'UI';\n }\n\n if (segments.length === 1) {\n return segments[0].slice(0, 2).toUpperCase();\n }\n\n return `${segments[0][0] ?? ''}${segments[1][0] ?? ''}`.toUpperCase();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'empty',\n imports: [RouterOutlet],\n template: `\n <div\n class=\"h-dvh overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div class=\"relative isolate box-border h-full overflow-hidden py-3\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-y-0 inset-x-0 px-3\">\n <div class=\"relative mx-auto h-full w-full\">\n <div class=\"absolute inset-y-0 left-0 w-px bg-brand\"></div>\n <div class=\"absolute inset-y-0 right-0 w-px bg-brand\"></div>\n </div>\n </div>\n\n <div class=\"h-full min-h-0 border border-brand px-3\">\n <main class=\"mx-auto w-full h-full min-h-0 overflow-y-auto bg-background/65\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyLayout {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { TopbarComponent } from '@ojiepermana/angular/navigation';\n\n@Component({\n selector: 'horizontal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, RouterOutlet, TopbarComponent],\n host: {\n class: 'block',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <div\n class=\"min-h-screen bg-neutral-200 text-neutral-600 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div [class]=\"shellClasses()\">\n <div aria-hidden=\"true\" [class]=\"railOverlayClasses()\">\n <div [class]=\"railGuideClasses()\">\n <div class=\"absolute inset-y-0 left-0 w-px bg-brand\"></div>\n <div class=\"absolute inset-y-0 right-0 w-px bg-brand\"></div>\n </div>\n </div>\n\n <div [class]=\"frameClasses()\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-0 z-0\">\n <div class=\"absolute inset-x-0 top-11 h-px bg-brand\"></div>\n <div class=\"absolute inset-x-0 bottom-11 h-px bg-brand\"></div>\n </div>\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-0 z-10\">\n <div [class]=\"maskClasses()\"></div>\n </div>\n <div [class]=\"contentClasses()\">\n <nav class=\"shrink-0\">\n <topbar class=\"shrink-0\" [showHamburger]=\"false\">\n @if (brandTemplate(); as brand) {\n <div topbar-start class=\"min-w-0\">\n <ng-container [ngTemplateOutlet]=\"brand\" />\n </div>\n }\n\n @if (profileTemplate(); as profile) {\n <div topbar-end class=\"flex min-w-0 items-center\">\n <ng-container [ngTemplateOutlet]=\"profile\" />\n </div>\n }\n </topbar>\n </nav>\n <main class=\"min-h-0 flex-1 overflow-auto\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n})\nexport class HorizontalLayout {\n private readonly layout = inject(LayoutService);\n\n readonly brandTemplate = input<TemplateRef<unknown> | null>(null);\n readonly profileTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly shellClasses = computed(() => {\n switch (this.layoutWidth()) {\n case 'full':\n return 'relative isolate box-border h-dvh overflow-hidden py-3';\n case 'wide':\n return 'relative isolate box-border h-dvh overflow-hidden py-3 lg:py-10';\n default:\n return 'relative isolate box-border h-dvh overflow-hidden py-3 lg:py-20';\n }\n });\n\n protected readonly railOverlayClasses = computed(() => {\n const classes = ['pointer-events-none', 'absolute', 'inset-y-0', 'inset-x-0', 'z-20'];\n if (this.layoutWidth() === 'full') {\n classes.push('px-3');\n } else if (this.layoutWidth() === 'wide') {\n classes.push('px-3', 'lg:px-10');\n } else {\n classes.push('px-3', 'lg:px-10');\n }\n return classes.join(' ');\n });\n\n protected readonly railGuideClasses = computed(() =>\n this.layoutWidth() === 'container' ? 'relative mx-auto h-full w-full max-w-7xl' : 'relative mx-auto h-full w-full',\n );\n\n protected readonly frameClasses = computed(() => {\n const classes = ['relative', 'z-10', 'h-full', 'min-h-0', 'border', 'border-brand'];\n if (this.layoutWidth() === 'full') {\n classes.push('px-3');\n } else if (this.layoutWidth() === 'wide') {\n classes.push('px-3', 'lg:px-10');\n } else {\n classes.push('px-3', 'lg:px-10');\n }\n return classes.join(' ');\n });\n\n protected readonly maskClasses = computed(() => {\n const classes = ['h-full', 'bg-position-[center_center]', 'bg-size-[2.775rem_2.775rem]'];\n if (this.layoutWidth() === 'container') {\n classes.unshift('mx-auto', 'w-full', 'max-w-7xl');\n } else {\n classes.unshift('mx-auto', 'w-full');\n }\n return classes.join(' ');\n });\n\n protected readonly contentClasses = computed(() => {\n const classes = [\n 'relative',\n 'z-20',\n 'mx-auto',\n 'flex',\n 'h-full',\n 'min-h-0',\n 'flex-col',\n 'overflow-hidden',\n 'bg-background/65',\n ];\n if (this.layoutWidth() === 'container') {\n classes.push('w-full', 'max-w-7xl');\n } else {\n classes.push('w-full');\n }\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterOutlet } from '@angular/router';\n\nimport { SidebarComponent, type SidebarAppearance, type SidebarPosition } from '@ojiepermana/angular/navigation';\nimport { LayoutService } from '@ojiepermana/angular/layout';\n\n@Component({\n selector: 'vertical',\n imports: [NgTemplateOutlet, RouterOutlet, SidebarComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-dvh overflow-hidden',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <!-- prettier-ignore -->\n <div class=\"h-full overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.65)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.65)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div [class]=\"shellClasses()\">\n <div [class]=\"frameClasses()\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-x-0 inset-y-8\">\n <div class=\"absolute inset-x-0 top-3.75 h-px bg-brand\"></div>\n <div class=\"absolute inset-x-0 bottom-3.75 h-px bg-brand\"></div>\n </div>\n <div [class]=\"frameBodyClasses()\">\n <div [class]=\"gridClasses()\">\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] left-0 top-[-100vh] z-20 w-px bg-brand\"></div>\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] right-0 top-[-100vh] z-20 w-px bg-brand\"></div>\n <nav class=\"relative h-full min-h-0 shrink-0 overflow-visible border-r border-brand\">\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] left-full top-[-100vh] -z-10 w-px bg-brand\"></div>\n <sidebar\n class=\"h-full\"\n [appearance]=\"sidebarAppearance()\"\n [position]=\"sidebarPosition()\"\n [ariaLabel]=\"ariaLabel()\">\n @if (sidebarHeaderTemplate(); as headerTemplate) {\n <div sidebar-header class=\"contents\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" />\n </div>\n }\n @if (sidebarFooterTemplate(); as footerTemplate) {\n <div sidebar-footer class=\"contents\">\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\n </div>\n }\n </sidebar>\n </nav>\n <main class=\"relative min-h-0 min-w-0 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n})\nexport class VerticalLayout {\n private readonly layout = inject(LayoutService);\n\n readonly sidebarAppearance = input<SidebarAppearance>('default');\n readonly sidebarPosition = input<SidebarPosition>('left');\n readonly ariaLabel = input<string>('Primary');\n readonly sidebarHeaderTemplate = input<TemplateRef<unknown> | null>(null);\n readonly sidebarFooterTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly shellClasses = computed(() => {\n switch (this.layoutWidth()) {\n case 'full':\n return 'relative isolate h-full overflow-hidden py-2';\n case 'wide':\n return 'relative isolate h-full overflow-hidden py-2 lg:py-10';\n default:\n return 'relative isolate h-full overflow-hidden py-2 lg:py-18';\n }\n });\n\n protected readonly frameClasses = computed(() => {\n if (this.layoutWidth() === 'wide') {\n return 'relative h-full border-y border-brand';\n }\n\n return '-mx-18 relative h-full border-y border-brand';\n });\n\n protected readonly frameBodyClasses = computed(() => {\n if (this.layoutWidth() === 'wide') {\n return 'h-full lg:px-10';\n }\n\n return 'h-full px-20';\n });\n\n protected readonly gridClasses = computed(() => {\n const classes = [\n 'relative',\n 'mx-auto',\n 'grid',\n 'h-full',\n 'w-full',\n 'max-w-full',\n 'grid-cols-[auto_minmax(0,1fr)]',\n 'items-stretch',\n 'bg-background/65',\n ];\n\n switch (this.layoutWidth()) {\n case 'container':\n classes.push('lg:max-w-[var(--layout-vertical-shell-max-width)]');\n break;\n default:\n break;\n }\n\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { LayoutService, type LayoutMode } from '@ojiepermana/angular/layout';\nimport { EmptyLayout } from './empty/empty';\nimport { HorizontalLayout } from './horizontal/horizontal';\nimport { VerticalLayout } from './vertical/vertical';\n\n@Component({\n selector: 'etos-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [EmptyLayout, HorizontalLayout, VerticalLayout],\n host: {\n class: 'contents',\n '[attr.data-layout-mode]': 'resolvedMode()',\n },\n template: `\n @switch (resolvedMode()) {\n @case ('empty') {\n <empty />\n }\n @case ('horizontal') {\n <horizontal [brandTemplate]=\"layoutBrandTemplate()\" [profileTemplate]=\"layoutProfileTemplate()\" />\n }\n @default {\n <vertical\n [sidebarHeaderTemplate]=\"sidebarHeaderTemplate() ?? layoutBrandTemplate()\"\n [sidebarFooterTemplate]=\"sidebarFooterTemplate() ?? layoutProfileTemplate()\" />\n }\n }\n `,\n})\nexport class EtosLayoutComponent {\n readonly mode = input<LayoutMode | null>(null);\n readonly sidebarHeaderTemplate = input<TemplateRef<unknown> | null>(null);\n readonly sidebarFooterTemplate = input<TemplateRef<unknown> | null>(null);\n readonly layoutBrandTemplate = input<TemplateRef<unknown> | null>(null);\n readonly layoutProfileTemplate = input<TemplateRef<unknown> | null>(null);\n\n private readonly layout = inject(LayoutService);\n protected readonly resolvedMode = computed(() => this.mode() ?? this.layout.mode());\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'shell-pages',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-full min-h-0',\n },\n template: `\n <div class=\"flex h-full flex-col overflow-hidden\">\n <header class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-b border-border px-2\">\n <ng-content select=\"[shell-pages-header]\" />\n </header>\n\n <main class=\"min-h-0 flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10\">\n <ng-content select=\"[shell-pages-main]\" />\n </main>\n\n <footer class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-border px-2\">\n <ng-content select=\"[shell-pages-footer]\" />\n </footer>\n </div>\n `,\n styles: `\n footer:empty {\n display: none;\n }\n `,\n})\nexport class ShellPagesComponent {}\n","/*\n * Public API Surface of @ojiepermana/angular/etos\n *\n * Etos-specific implementation lives under projects/angular/brand/etos.\n */\n\nexport * from './core/etos-brand.config';\nexport * from './core/etos-brand.provider';\nexport * from './component/theme-switcher';\nexport * from './shells/layouts/etos.layout';\nexport * from './shells/pages/shell-pages';\n\nexport const ETOS_BRAND_VERSION = '0.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;AAGO,MAAM,eAAe,GAAG;AAExB,MAAM,iBAAiB,GAAG;AAC/B,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,KAAK,EAAE,eAAe;;AAGjB,MAAM,kBAAkB,GAAG;AAChC,IAAA,IAAI,EAAE,UAAU;;;SCcF,gBAAgB,CAC9B,SAA8B,EAAE,EAChC,GAAG,QAAgC,EAAA;AAEnC,IAAA,OAAO,oBAAoB,CACzB;AACE,QAAA,GAAG,iBAAiB;AACpB,QAAA,GAAG,MAAM;AACT,QAAA,KAAK,EAAE,eAAe;AACtB,QAAA,aAAa,EAAE,eAAe;KAC/B,EACD,GAAG,QAAQ,CACZ;AACH;AAEM,SAAU,iBAAiB,CAAC,MAAA,GAA+B,EAAE,EAAA;AACjE,IAAA,OAAO,qBAAqB,CAAC;AAC3B,QAAA,GAAG,kBAAkB;AACrB,QAAA,GAAG,MAAM;AACV,KAAA,CAAC;AACJ;AAEM,SAAU,gBAAgB,CAAC,OAAA,GAA4B,EAAE,EAAA;AAC7D,IAAA,MAAM,SAAS,GAA2C;QACxD,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;AACxG,QAAA,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC;KAClC;AAED,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;IACrC,IAAI,UAAU,EAAE;AACd,QAAA,SAAS,CAAC,IAAI,CACZ,6BAA6B,CAAC,MAAK;AACjC,YAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,IAAI,qBAAqB,EAAE,UAAU,CAAC;QACpG,CAAC,CAAC,CACH;IACH;AAEA,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;ACjBA,MAAM,oBAAoB,GAAG;IAC3B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE;IACtD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE;IACnD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;CACC;AAEzD,MAAM,mBAAmB,GAAG;IAC1B,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE;IACjE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE;IAC9D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;CACD;AAExD,MAAM,oBAAoB,GAAG;IAC3B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;IACpD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE;IACvE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;CACG;AAEzD,MAAM,6BAA6B,GAAG,CAAC,EAAE;MAyM5B,0BAA0B,CAAA;AACpB,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,IAAA,cAAc,GAAG,SAAS,CAAC,QAAQ,CAA0B,SAAS,CAAC;AAE/E,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AACzB,IAAA,QAAQ,GAAG,KAAK,CAAmC,IAAI,+EAAC;AACxD,IAAA,QAAQ,GAAG,KAAK,CAAS,MAAM,+EAAC;AAChC,IAAA,YAAY,GAAG,KAAK,CAAS,8BAA8B,mFAAC;AAC5D,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,gFAAC;AACtC,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,gFAAC;AAC7B,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,kFAA2C;AACxE,IAAA,oBAAoB,GAAG,KAAK,CAA+C,IAAI,2FAAC;AAChF,IAAA,wBAAwB,GAAG,KAAK,CAAU,KAAK,+FAAC;AAChD,IAAA,WAAW,GAAG,KAAK,CAAqB,IAAI,kFAAC;AAC7C,IAAA,YAAY,GAAG,KAAK,CAAsB,IAAI,mFAAC;AAC/C,IAAA,iBAAiB,GAAG,KAAK,CAAgB,IAAI,wFAAC;IAC9C,cAAc,GAAG,MAAM,EAA2B;AAExC,IAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;AAC3B,IAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAC/B,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;AAC7B,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;IAE/B,kBAAkB,GAAG,oBAAoB;IACzC,iBAAiB,GAAG,mBAAmB;IACvC,kBAAkB,GAAG,oBAAoB;AACzC,IAAA,0BAA0B,GAAG,QAAQ,CACtD,MAAK;AACH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAE5C,IAAI,QAAQ,EAAE;YACZ,OAAO;AACL,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,eAAe;AACxC,gBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,eAAe;gBACtC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,0BAA0B,IAAI,CAAC,gBAAgB,EAAE,CAAA,CAAE;aACrF;QACH;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;AACpC,YAAA,OAAO,IAAI;QACb;QAEA,OAAO;AACL,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,SAAS,EAAE,CAAA,uBAAA,EAA0B,IAAI,CAAC,gBAAgB,EAAE,CAAA,CAAE;SAC/D;AACH,IAAA,CAAC,iGACF;AACkB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK;QAE9D,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE;QAC5B;AAEA,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC;AAC/E,IAAA,CAAC,oFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,yCAAyC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,kFAAC;AACzF,IAAA,mBAAmB,GAAG,QAAQ,CAC/C,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAClF;AACkB,IAAA,oBAAoB,GAAG,QAAQ,CAChD,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAClF;AACkB,IAAA,yBAAyB,GAAG,QAAQ,CACrD,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,6BAA6B,gGAChE;IACkB,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACnF,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,2FAAC;AACvF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,wFAAC;AAClF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,wFAAC;AAClF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,gFAAC;AACtD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,qFAAC;AAC/D,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA,OAAA,CAAS,oFAAC;AAC/F,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,+EAAC;AACnE,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAA,mBAAA,EAAsB,IAAI,CAAC,gBAAgB,EAAE,CAAA,CAAE,mFAAC;AAEvF,IAAA,oBAAoB,CAAC,IAAa,EAAA;QAC1C,OAAO,EAAE,CACP,kMAAkM,EAClM,IAAI,IAAI,aAAa,CACtB;IACH;IAEU,yBAAyB,GAAA;AACjC,QAAA,OAAO,EAAE,CACP,6PAA6P,CAC9P;IACH;AAEU,IAAA,sBAAsB,CAAC,MAAe,EAAA;AAC9C,QAAA,OAAO,EAAE,CACP,qIAAqI,EACrI,MAAM,GAAG,yBAAyB,GAAG,8CAA8C,CACpF;IACH;AAEU,IAAA,kBAAkB,CAAC,MAAe,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;IAC5C;AAEU,IAAA,gBAAgB,CAAC,MAAe,EAAA;QACxC,OAAO,MAAM,GAAG,iBAAiB,GAAG,uBAAuB;IAC7D;IAEU,mBAAmB,CAAC,OAAoC,SAAS,EAAA;QACzE,OAAO,EAAE,CACP,4JAA4J,EAC5J,IAAI,KAAK,aAAa,IAAI,0DAA0D,CACrF;IACH;IAEU,iBAAiB,CAAC,OAAoC,SAAS,EAAA;QACvE,OAAO,IAAI,KAAK,aAAa,GAAG,kBAAkB,GAAG,iBAAiB;IACxE;IAEU,kBAAkB,CAAC,OAAoC,SAAS,EAAA;QACxE,OAAO,IAAI,KAAK,aAAa,GAAG,sCAAsC,GAAG,qCAAqC;IAChH;AAEU,IAAA,cAAc,CAAC,IAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5B;AAEU,IAAA,aAAa,CAAC,IAAgB,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B;AAEU,IAAA,cAAc,CAAC,KAAkB,EAAA;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7B;AAEU,IAAA,aAAa,CAAC,MAA+B,EAAA;AACrD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE;IAC/B;AAEU,IAAA,yBAAyB,CAAC,KAAY,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,EAAE;QAElD,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;QAEA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC1C;AAEQ,IAAA,kBAAkB,CAAC,IAAgB,EAAA;AACzC,QAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,YAAA,OAAO,YAAY;QACrB;AAEA,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,OAAO,UAAU;IACnB;AAEQ,IAAA,mBAAmB,CAAC,KAAkB,EAAA;AAC5C,QAAA,IAAI,KAAK,KAAK,WAAW,EAAE;AACzB,YAAA,OAAO,WAAW;QACpB;AAEA,QAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,UAAU,CAAC,IAAY,EAAA;AAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAEzD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE;QAC9C;QAEA,OAAO,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC,WAAW,EAAE;IACvE;wGA5LW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxL3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsLT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjMC,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,uBAAuB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,KAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,eAAe,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,uBAAuB,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,uBAAuB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FA6LT,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAvMtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;oBAC/B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE;wBACP,eAAe;wBACf,uBAAuB;wBACvB,oBAAoB;wBACpB,eAAe;wBACf,uBAAuB;wBACvB,uBAAuB;wBACvB,kBAAkB;AACnB,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsLT,EAAA,CAAA;AACF,iBAAA;4EAI+E,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MChP5E,WAAW,CAAA;wGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtBZ;;;;;;;;;;;;;;;;;;AAkBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnBS,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAuBX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAzBvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,OAAO,EAAA,OAAA,EACR,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;GAkBT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA;;;MCiCpC,gBAAgB,CAAA;AACV,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAEtC,IAAA,aAAa,GAAG,KAAK,CAA8B,IAAI,oFAAC;AACxD,IAAA,eAAe,GAAG,KAAK,CAA8B,IAAI,sFAAC;AAEhD,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC/B,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,wDAAwD;AACjE,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,iEAAiE;AAC1E,YAAA;AACE,gBAAA,OAAO,iEAAiE;;AAE9E,IAAA,CAAC,mFAAC;AAEiB,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACpD,QAAA,MAAM,OAAO,GAAG,CAAC,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC;AACrF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACtB;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;QAClC;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;QAClC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,yFAAC;IAEiB,gBAAgB,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,GAAG,0CAA0C,GAAG,gCAAgC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACnH;AAEkB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC;AACnF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACtB;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;QAClC;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;QAClC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,mFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC7C,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,6BAA6B,EAAE,6BAA6B,CAAC;AACxF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE;YACtC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC;QACnD;aAAO;AACL,YAAA,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;QACtC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,kFAAC;AAEiB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,OAAO,GAAG;YACd,UAAU;YACV,MAAM;YACN,SAAS;YACT,MAAM;YACN,QAAQ;YACR,SAAS;YACT,UAAU;YACV,iBAAiB;YACjB,kBAAkB;SACnB;AACD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE;AACtC,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;QACrC;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxB;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,qFAAC;wGA1ES,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7CjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/CS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAkD9C,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBArD5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EACL,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,gBAAgB,EAAE,YAAY,EAAE,eAAe,CAAC,EAAA,IAAA,EACpD;AACJ,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,0BAA0B,EAAE,eAAe;qBAC5C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CT,EAAA,CAAA,EAAA;;;MCQU,cAAc,CAAA;AACR,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAEtC,IAAA,iBAAiB,GAAG,KAAK,CAAoB,SAAS,wFAAC;AACvD,IAAA,eAAe,GAAG,KAAK,CAAkB,MAAM,sFAAC;AAChD,IAAA,SAAS,GAAG,KAAK,CAAS,SAAS,gFAAC;AACpC,IAAA,qBAAqB,GAAG,KAAK,CAA8B,IAAI,4FAAC;AAChE,IAAA,qBAAqB,GAAG,KAAK,CAA8B,IAAI,4FAAC;AAEtD,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC/B,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,8CAA8C;AACvD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,uDAAuD;AAChE,YAAA;AACE,gBAAA,OAAO,wDAAwD;;AAErE,IAAA,CAAC,mFAAC;AAEiB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACjC,YAAA,OAAO,uCAAuC;QAChD;AAEA,QAAA,OAAO,8CAA8C;AACvD,IAAA,CAAC,mFAAC;AAEiB,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAClD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACjC,YAAA,OAAO,iBAAiB;QAC1B;AAEA,QAAA,OAAO,cAAc;AACvB,IAAA,CAAC,uFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,OAAO,GAAG;YACd,UAAU;YACV,SAAS;YACT,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,gCAAgC;YAChC,eAAe;YACf,kBAAkB;SACnB;AAED,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC;gBACjE;AACF,YAAA;gBACE;;AAGJ,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,kFAAC;wGA3DS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,6BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjDf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApDS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAuD/C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAzD1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,OAAA,EACX,CAAC,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAC1C,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,6BAA6B;AACpC,wBAAA,0BAA0B,EAAE,eAAe;qBAC5C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA;;;MC/BU,mBAAmB,CAAA;AACrB,IAAA,IAAI,GAAG,KAAK,CAAoB,IAAI,2EAAC;AACrC,IAAA,qBAAqB,GAAG,KAAK,CAA8B,IAAI,4FAAC;AAChE,IAAA,qBAAqB,GAAG,KAAK,CAA8B,IAAI,4FAAC;AAChE,IAAA,mBAAmB,GAAG,KAAK,CAA8B,IAAI,0FAAC;AAC9D,IAAA,qBAAqB,GAAG,KAAK,CAA8B,IAAI,4FAAC;AAExD,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC5B,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,mFAAC;wGARxE,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBpB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnBS,WAAW,EAAA,QAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAqB5C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAxB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;oBACvB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,cAAc,CAAC;AACxD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,yBAAyB,EAAE,gBAAgB;AAC5C,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;AAcT,EAAA,CAAA;AACF,iBAAA;;;MCAY,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBpB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAOU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA3B/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,sBAAsB;qBAC9B,EAAA,QAAA,EACS;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;;ACtBH;;;;AAIG;AAQI,MAAM,kBAAkB,GAAG;;ACZlC;;AAEG;;;;"}
|
|
@@ -843,7 +843,9 @@ class SidebarComponent {
|
|
|
843
843
|
return base.join(' ');
|
|
844
844
|
}, ...(ngDevMode ? [{ debugName: "headerSlotClasses" }] : /* istanbul ignore next */ []));
|
|
845
845
|
navClasses = computed(() => {
|
|
846
|
-
const base = [
|
|
846
|
+
const base = [
|
|
847
|
+
'flex-1 overflow-y-auto overflow-x-hidden scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10',
|
|
848
|
+
];
|
|
847
849
|
if (this.isCompact()) {
|
|
848
850
|
base.push('px-2', '[&_.ui-nav-text]:mx-auto', '[&_.ui-nav-text]:w-10', '[&_.ui-nav-text]:justify-center', '[&_.ui-nav-text]:px-0');
|
|
849
851
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ojiepermana-angular-navigation.mjs","sources":["../../../projects/angular/navigation/src/lib/core/services/navigation.service.ts","../../../projects/angular/navigation/src/lib/components/shared/nav-icon.component.ts","../../../projects/angular/navigation/src/lib/core/utils/cn.util.ts","../../../projects/angular/navigation/src/lib/components/shared/nav-item.component.ts","../../../projects/angular/navigation/src/lib/components/sidebar/sidebar.component.ts","../../../projects/angular/navigation/src/lib/components/topbar/topbar.component.ts","../../../projects/angular/navigation/src/lib/data/demo-navigation.data.ts","../../../projects/angular/navigation/public-api.ts","../../../projects/angular/navigation/ojiepermana-angular-navigation.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\nimport { DestroyRef } from '@angular/core';\nimport type { NavigationItem, SidebarAppearance } from '../types/navigation.type';\n\n/** Default registry key used when no id is specified. */\nexport const DEFAULT_NAVIGATION_ID = 'main';\nconst SIDEBAR_COLLAPSE_STORAGE_KEY = 'sidebar-collapse';\nconst LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY = 'sidebar-appearance';\n\nfunction parseSidebarCollapsed(value: string | null | undefined): boolean | null {\n if (value === 'true') return true;\n if (value === 'false') return false;\n return null;\n}\n\n/**\n * Signal-based global state untuk navigation (sidebar/topbar).\n *\n * Items disimpan dalam registry ber-key. Key default adalah `'main'`.\n * Komponen `sidebar` / `topbar` memilih registry via input `navigationId`.\n */\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private readonly doc = inject(DOCUMENT);\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n private readonly persistedSidebarCollapsed = this.readPersistedSidebarCollapsed();\n\n /** Internal version counter — incremented on every registry mutation. */\n private readonly _version = signal(0);\n\n /** Internal map of registered navigation trees. */\n private readonly _registry = new Map<string, NavigationItem[]>();\n private readonly _collapsed = signal(this.persistedSidebarCollapsed ?? false);\n private readonly _hasStoredSidebarCollapse = signal(this.persistedSidebarCollapsed !== null);\n\n /**\n * Backward-compatible accessor — returns items for the default (`'main'`) key.\n * Prefer `getItems(id)` when working with named registries.\n */\n readonly items = computed(() => this.getItems(DEFAULT_NAVIGATION_ID)());\n\n /** Sidebar appearance preference (`default` or `thin`). */\n readonly sidebarAppearance = computed<SidebarAppearance>(() => (this._collapsed() ? 'thin' : 'default'));\n readonly hasStoredSidebarCollapse = this._hasStoredSidebarCollapse.asReadonly();\n\n /** Sidebar collapsed (default ↔ thin) toggle untuk desktop. */\n readonly collapsed = this._collapsed.asReadonly();\n\n /** Sheet drawer terbuka di mobile. */\n readonly mobileOpen = signal<boolean>(false);\n\n /** Set id grup / collapsable yang sedang terbuka. */\n readonly openGroups = signal<ReadonlySet<string>>(new Set<string>());\n\n /** URL aktif terakhir. Update otomatis dari Router `NavigationEnd`. */\n readonly activeUrl = signal<string>(this.router.url);\n\n /** Trail id item yang sedang match dengan URL aktif (across ALL registries). */\n readonly activeTrail = computed<ReadonlySet<string>>(() => {\n this._version(); // track changes\n const url = this.activeUrl();\n const trail = new Set<string>();\n const walk = (list: readonly NavigationItem[], ancestors: string[]): boolean => {\n let matched = false;\n for (const item of list) {\n const id = item.id;\n const link = 'link' in item ? item.link : undefined;\n let selfMatch = false;\n if (link) {\n selfMatch = url === link || url.startsWith(link + '/') || url.startsWith(link + '?');\n }\n const children = 'children' in item ? (item.children ?? []) : [];\n const nextAncestors = id ? [...ancestors, id] : ancestors;\n const childMatch = children.length > 0 && walk(children, nextAncestors);\n if (selfMatch || childMatch) {\n if (id) trail.add(id);\n for (const a of ancestors) trail.add(a);\n matched = true;\n }\n }\n return matched;\n };\n for (const items of this._registry.values()) {\n walk(items, []);\n }\n return trail;\n });\n\n constructor() {\n effect(() => {\n if (!this._hasStoredSidebarCollapse()) {\n return;\n }\n\n this.persistSidebarCollapsed(this._collapsed());\n });\n\n this.router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((e) => this.activeUrl.set(e.urlAfterRedirects));\n }\n\n /**\n * Register items di registry.\n *\n * Overload:\n * - `registerItems(items)` → key `'main'`\n * - `registerItems(id, items)` → key spesifik\n */\n registerItems(items: NavigationItem[]): void;\n registerItems(id: string, items: NavigationItem[]): void;\n registerItems(idOrItems: string | NavigationItem[], maybeItems?: NavigationItem[]): void {\n const [id, items] = typeof idOrItems === 'string' ? [idOrItems, maybeItems!] : [DEFAULT_NAVIGATION_ID, idOrItems];\n this._registry.set(id, items);\n this._version.update((v) => v + 1);\n }\n\n /** Remove a named registry entry. */\n removeItems(id: string): void {\n this._registry.delete(id);\n this._version.update((v) => v + 1);\n }\n\n /**\n * Computed yang mengembalikan items untuk key tertentu.\n * Reactive terhadap perubahan registry.\n */\n getItems(id: string): () => readonly NavigationItem[] {\n return computed(() => {\n this._version(); // track changes\n return this._registry.get(id) ?? [];\n });\n }\n\n setSidebarAppearance(value: SidebarAppearance): void {\n this.setCollapsed(value === 'thin');\n }\n\n toggleSidebarAppearance(currentAppearance: SidebarAppearance = this.sidebarAppearance()): void {\n this.setCollapsed(currentAppearance !== 'thin');\n }\n\n /** Toggle sidebar collapsed (default ↔ thin). */\n toggleCollapsed(): void {\n this.setCollapsed(!this._collapsed());\n }\n\n setCollapsed(value: boolean): void {\n this._collapsed.set(value);\n this._hasStoredSidebarCollapse.set(true);\n }\n\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n\n toggleMobile(): void {\n this.mobileOpen.update((v) => !v);\n }\n\n isGroupOpen(id: string): boolean {\n return this.openGroups().has(id);\n }\n\n toggleGroup(id: string): void {\n const next = new Set(this.openGroups());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this.openGroups.set(next);\n }\n\n setGroupOpen(id: string, open: boolean): void {\n const next = new Set(this.openGroups());\n if (open) next.add(id);\n else next.delete(id);\n this.openGroups.set(next);\n }\n\n /** Apakah id termasuk dalam active trail saat ini. */\n isActive(id: string | undefined): boolean {\n return !!id && this.activeTrail().has(id);\n }\n\n private readPersistedSidebarCollapsed(): boolean | null {\n try {\n const storage = this.doc.defaultView?.localStorage;\n const collapsed = parseSidebarCollapsed(storage?.getItem(SIDEBAR_COLLAPSE_STORAGE_KEY));\n if (collapsed !== null) {\n return collapsed;\n }\n\n const legacyAppearance = storage?.getItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n if (legacyAppearance === 'thin') {\n return true;\n }\n if (legacyAppearance === 'default') {\n return false;\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n private persistSidebarCollapsed(value: boolean): void {\n try {\n const storage = this.doc.defaultView?.localStorage;\n storage?.setItem(SIDEBAR_COLLAPSE_STORAGE_KEY, String(value));\n storage?.removeItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n } catch {\n /* ignore */\n }\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, PLATFORM_ID, computed, inject, input } from '@angular/core';\n\nconst MATERIAL_SYMBOLS_FONT_ATTR = 'data-ui-nav-icon-font';\nconst MATERIAL_SYMBOLS_FONT_ID = 'material-symbols-outlined';\nconst MATERIAL_SYMBOLS_FONT_HREF =\n 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0';\n\n/**\n * Material Symbols icon renderer.\n * Menyuntikkan stylesheet font sekali saat dipakai agar consumer tidak perlu\n * menambahkan `<link>` manual di `index.html`.\n */\n@Component({\n selector: 'ui-nav-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[style.font-size.px]': 'size()',\n '[style.font-variation-settings]': 'fontVariationSettings',\n 'aria-hidden': 'true',\n translate: 'no',\n },\n template: `{{ name() }}`,\n})\nexport class UiNavIconComponent {\n private readonly doc = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n readonly name = input<string>('');\n readonly class = input<string>('');\n readonly size = input<number | null>(null);\n\n protected readonly fontVariationSettings = '\"FILL\" 0, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24';\n\n constructor() {\n this.ensureFontStylesheet();\n }\n\n protected readonly classes = computed(() => {\n const base = 'material-symbols-outlined inline-flex items-center justify-center leading-none select-none';\n const extra = this.class();\n return extra ? `${base} ${extra}` : base;\n });\n\n private ensureFontStylesheet(): void {\n if (!isPlatformBrowser(this.platformId) || !this.doc.head) return;\n\n const existing = this.doc.head.querySelector(`link[${MATERIAL_SYMBOLS_FONT_ATTR}=\"${MATERIAL_SYMBOLS_FONT_ID}\"]`);\n if (existing) return;\n\n const link = this.doc.createElement('link');\n link.rel = 'stylesheet';\n link.href = MATERIAL_SYMBOLS_FONT_HREF;\n link.setAttribute(MATERIAL_SYMBOLS_FONT_ATTR, MATERIAL_SYMBOLS_FONT_ID);\n this.doc.head.appendChild(link);\n }\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/** Concatenate and dedupe Tailwind class names. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { UiNavIconComponent } from './nav-icon.component';\nimport { NavigationService } from '../../core/services/navigation.service';\nimport { cn } from '../../core/utils/cn.util';\nimport type {\n NavigationAsideItem,\n NavigationBasicItem,\n NavigationCollapsableItem,\n NavigationGroupItem,\n NavigationItem,\n NavigationMegaItem,\n} from '../../core/types/navigation.type';\n\n/**\n * Recursive navigation item renderer (vertical context).\n *\n * Menerima item polymorphic dan delegasi ke template sesuai `type`.\n * Mega dirender sebagai group biasa saat muncul di konteks vertical.\n */\n@Component({\n selector: 'ui-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, MatTooltip, UiNavIconComponent],\n template: `\n @switch (type()) {\n @case ('divider') {\n <hr class=\"my-2 border-t border-border\" role=\"separator\" />\n }\n @case ('spacer') {\n <div class=\"flex-1\"></div>\n }\n @case ('group') {\n <div role=\"group\" [attr.aria-labelledby]=\"headingId()\">\n @if (!compact()) {\n <div class=\"sticky top-0 z-10 p-3 text-muted-foreground backdrop-blur-3xl bg-transparent\">\n <div [id]=\"headingId()\" [class]=\"cn('ui-nav-heading text-muted-foreground', item().classes?.title)\">\n {{ item().title }}\n </div>\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of groupItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"compact()\" />\n }\n </div>\n </div>\n }\n @case ('collapsable') {\n @let id = collapsableItem().id ?? '';\n @let open = isGroupOpen();\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text group/ni flex w-full items-center gap-3 rounded-full p-3 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isTrailActive() && 'text-primary',\n item().classes?.wrapper\n )\n \"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"id + '-panel'\"\n [disabled]=\"collapsableItem().disabled || null\"\n [matTooltip]=\"compact() ? (collapsableItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"toggleGroup()\">\n @if (collapsableItem().icon) {\n <span\n [class]=\"\n cn(\n 'inline-flex shrink-0 items-center justify-center',\n open && 'h-7 w-7 rounded-full border border-brand'\n )\n \">\n <ui-nav-icon [name]=\"collapsableItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n </span>\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate text-left', item().classes?.title)\">\n {{ collapsableItem().title }}\n </span>\n @if (collapsableItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n <ui-nav-icon\n [name]=\"'chevron_right'\"\n [size]=\"18\"\n [class]=\"cn('transition-transform duration-200', open && 'rotate-90')\" />\n }\n </button>\n @if (!compact() && open) {\n <div\n [id]=\"id + '-panel'\"\n role=\"region\"\n class=\"relative ml-6.5 mt-0.5 flex flex-col gap-0.5 pl-3 before:absolute before:bottom-0 before:left-0 before:-top-3.5 before:w-px before:bg-border before:content-['']\">\n @for (child of collapsableItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"false\" />\n }\n </div>\n }\n }\n @case ('mega') {\n <!-- Mega direndahkan ke group saat berada di sidebar vertical. -->\n <div class=\"mt-4 py-3 first:mt-0\" role=\"group\">\n @if (!compact()) {\n <div class=\"ui-nav-heading sticky top-0 z-10 bg-background px-3 pb-1 text-muted-foreground\">\n {{ item().title }}\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of megaItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"compact()\" />\n }\n </div>\n </div>\n }\n @case ('aside') {\n <a\n [class]=\"\n cn(\n 'ui-nav-text flex items-center gap-3 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary',\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [routerLink]=\"asideItem().link\"\n [queryParams]=\"asideItem().queryParams\"\n [fragment]=\"asideItem().fragment ?? undefined\"\n [target]=\"asideItem().target ?? undefined\"\n [matTooltip]=\"compact() ? (asideItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (asideItem().icon) {\n <ui-nav-icon [name]=\"asideItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ asideItem().title }}</span>\n }\n </a>\n }\n @default {\n <!-- basic -->\n @if (basicItem().link && !basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text flex items-center gap-3 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary aria-disabled:pointer-events-none aria-disabled:opacity-50',\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"\n basicItem().isActiveMatchOptions ?? (basicItem().exactMatch ? exactMatch : inexactMatch)\n \"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [attr.aria-disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n [routerLink]=\"basicItem().link\"\n [queryParams]=\"basicItem().queryParams\"\n [queryParamsHandling]=\"basicItem().queryParamsHandling ?? null\"\n [fragment]=\"basicItem().fragment ?? undefined\"\n [preserveFragment]=\"basicItem().preserveFragment ?? false\"\n [target]=\"basicItem().target ?? undefined\"\n (click)=\"runAction()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate', item().classes?.title)\">{{ basicItem().title }}</span>\n @if (basicItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n }\n </a>\n } @else if (basicItem().link && basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text flex items-center gap-3 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n item().classes?.wrapper\n )\n \"\n [attr.href]=\"basicItem().link\"\n [attr.target]=\"basicItem().target ?? '_blank'\"\n rel=\"noopener noreferrer\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text flex w-full items-center gap-3 rounded-md px-3 py-2 text-left text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n item().classes?.wrapper\n )\n \"\n [disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"runAction()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </button>\n }\n }\n }\n `,\n})\nexport class UiNavItemComponent {\n private readonly nav = inject(NavigationService);\n protected readonly cn = cn;\n\n readonly item = input.required<NavigationItem>();\n readonly level = input<number>(0);\n /** Compact / icon-only rendering (sidebar `thin`). */\n readonly compact = input<boolean>(false);\n\n protected readonly exactMatch = {\n exact: true,\n paths: 'exact',\n queryParams: 'exact',\n fragment: 'exact',\n matrixParams: 'exact',\n } as const;\n protected readonly inexactMatch = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n } as const;\n\n protected readonly type = computed(() => this.item().type);\n\n protected readonly groupItem = computed(() => this.item() as NavigationGroupItem);\n protected readonly collapsableItem = computed(() => this.item() as NavigationCollapsableItem);\n protected readonly megaItem = computed(() => this.item() as NavigationMegaItem);\n protected readonly asideItem = computed(() => this.item() as NavigationAsideItem);\n protected readonly basicItem = computed(() => this.item() as NavigationBasicItem);\n\n protected readonly headingId = computed(() => {\n const id = this.item().id ?? '';\n return `nav-group-${id}`;\n });\n\n protected isGroupOpen(): boolean {\n const id = this.item().id;\n if (!id) return false;\n // auto-open when any descendant is active\n if (this.nav.isActive(id) && 'children' in this.item()) return true;\n return this.nav.isGroupOpen(id);\n }\n\n protected isTrailActive(): boolean {\n return this.nav.isActive(this.item().id);\n }\n\n protected toggleGroup(): void {\n const id = this.item().id;\n if (id) this.nav.toggleGroup(id);\n }\n\n protected runAction(): void {\n const item = this.item();\n if ('action' in item && typeof item.action === 'function') {\n item.action(item);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { filter, map } from 'rxjs/operators';\nimport { UiNavIconComponent } from '../shared/nav-icon.component';\nimport { UiNavItemComponent } from '../shared/nav-item.component';\nimport { NavigationService, DEFAULT_NAVIGATION_ID } from '../../core/services/navigation.service';\nimport type { NavigationItem, SidebarAppearance, SidebarPosition } from '../../core/types/navigation.type';\n\n/**\n * Vertical navigation (sidebar) — shadcn-styled.\n *\n * Variants:\n * - `default`: 17.5rem, label + icon\n * - `thin`: 4rem icon-only; hover memunculkan overlay expand (tidak push konten)\n *\n * Mobile (`< md`): saat `autoMobile=true` (default), host desktop disembunyikan\n * dan konten dirender lewat CDK Overlay drawer dengan focus trap. State buka\n * dikontrol lewat `NavigationService.mobileOpen`.\n */\n@Component({\n selector: 'sidebar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, UiNavIconComponent, UiNavItemComponent],\n host: {\n role: 'navigation',\n '[attr.aria-label]': 'ariaLabel()',\n '[class]': 'hostClasses()',\n '[attr.data-appearance]': 'resolvedAppearance()',\n '[attr.data-position]': 'position()',\n '[attr.data-expanded]': 'isExpanded()',\n '[hidden]': 'isMobile()',\n '(mouseenter)': 'onHoverEnter()',\n '(mouseleave)': 'onHoverLeave()',\n '(focusin)': 'onHoverEnter()',\n '(click)': 'onHostClick($event)',\n },\n template: `\n <div [class]=\"innerClasses()\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n\n <ng-template #body>\n @if (header()) {\n <div [class]=\"headerClasses()\">\n <div [class]=\"headerSlotClasses()\">\n <ng-content select=\"[sidebar-header]\" />\n </div>\n @if (!isMobile() && !isCompact()) {\n <button\n type=\"button\"\n data-sidebar-toggle\n class=\"ml-auto mr-2 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n [attr.aria-label]=\"toggleButtonLabel()\"\n [attr.title]=\"toggleButtonLabel()\"\n [attr.aria-pressed]=\"resolvedAppearance() === 'thin'\"\n (click)=\"toggleAppearance($event)\">\n <ui-nav-icon name=\"view_sidebar\" [size]=\"18\" class=\"text-current\" />\n </button>\n }\n </div>\n }\n <nav [class]=\"navClasses()\">\n @for (item of resolvedItems(); track item.id) {\n <ui-nav-item [item]=\"item\" [compact]=\"isCompact()\" />\n }\n </nav>\n <div [class]=\"footerClasses()\">\n <div [class]=\"footerSlotClasses()\">\n <ng-content select=\"[sidebar-footer]\" />\n </div>\n </div>\n </ng-template>\n\n <ng-template #drawerTpl>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n class=\"flex h-full w-72 max-w-[85vw] flex-col text-foreground shadow-xl\"\n [class.border-l]=\"position() === 'right'\"\n [class.border-brand]=\"position() === 'right'\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n </ng-template>\n `,\n})\nexport class SidebarComponent {\n private readonly nav = inject(NavigationService);\n private readonly bp = inject(BreakpointObserver);\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n private readonly doc = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly items = input<NavigationItem[]>([]);\n /** Registry key di `NavigationService`. Default `'main'`. */\n readonly navigationId = input<string>(DEFAULT_NAVIGATION_ID);\n readonly appearance = input<SidebarAppearance>('default');\n readonly position = input<SidebarPosition>('left');\n readonly ariaLabel = input<string>('Primary');\n readonly header = input<boolean>(true);\n readonly class = input<string>('');\n /** Auto switch ke CDK overlay drawer saat viewport `< md`. */\n readonly autoMobile = input<boolean>(true);\n /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */\n readonly autoRegister = input<boolean>(true);\n\n /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */\n protected readonly resolvedItems = computed(() => {\n const explicit = this.items();\n return explicit.length > 0 ? explicit : this.nav.getItems(this.navigationId())();\n });\n\n private readonly hovered = signal<boolean>(false);\n private readonly suppressHoverUntilLeave = signal<boolean>(false);\n\n private readonly drawerTpl = viewChild.required<TemplateRef<unknown>>('drawerTpl');\n private drawerRef: OverlayRef | null = null;\n private focusTrap: FocusTrap | null = null;\n private previouslyFocused: HTMLElement | null = null;\n\n /** True saat viewport `< md` (767.98px). */\n protected readonly isMobileMedia = toSignal(this.bp.observe('(max-width: 767.98px)').pipe(map((s) => s.matches)), {\n initialValue: false,\n });\n\n protected readonly isMobile = computed(() => this.autoMobile() && this.isMobileMedia());\n protected readonly resolvedCollapsed = computed(() => {\n if (this.nav.hasStoredSidebarCollapse()) {\n return this.nav.collapsed();\n }\n\n return this.appearance() === 'thin';\n });\n protected readonly resolvedAppearance = computed<SidebarAppearance>(() => {\n return this.resolvedCollapsed() ? 'thin' : 'default';\n });\n protected readonly hoverActive = computed(() => this.hovered() && !this.suppressHoverUntilLeave());\n protected readonly isExpanded = computed(() => !this.resolvedCollapsed() || this.hoverActive());\n protected readonly isCompact = computed(() => !this.isMobile() && this.resolvedCollapsed() && !this.hoverActive());\n protected readonly toggleButtonLabel = computed(() =>\n this.resolvedCollapsed() ? 'Expand sidebar' : 'Collapse sidebar',\n );\n\n constructor() {\n // Auto-register items ke service untuk active trail (hanya jika input non-kosong).\n effect(() => {\n const explicit = this.items();\n if (this.autoRegister() && explicit.length > 0) this.nav.registerItems(this.navigationId(), explicit);\n });\n\n // Kelola overlay drawer berdasarkan mobileOpen + isMobile.\n effect(() => {\n const open = this.nav.mobileOpen();\n const mobile = this.isMobile();\n if (mobile && open) this.openDrawer();\n else this.closeDrawer();\n });\n\n this.destroyRef.onDestroy(() => this.closeDrawer());\n }\n\n protected readonly hostClasses = computed(() => {\n const base = ['relative flex shrink-0 text-foreground', 'transition-[width] duration-200 ease-out'];\n if (this.resolvedCollapsed()) base.push('w-16');\n else base.push('[width:17.5rem]');\n if (this.position() === 'right') base.push('border-l', 'border-brand');\n return [...base, this.class()].join(' ');\n });\n\n protected readonly headerClasses = computed(() => {\n const base = ['flex h-12 items-center gap-2 border-b border-brand'];\n if (this.isCompact()) {\n base.push('justify-center px-2');\n }\n return base.join(' ');\n });\n\n protected readonly headerSlotClasses = computed(() => {\n const base = ['min-w-0'];\n if (this.isCompact()) {\n base.push(\n 'flex flex-1 items-center justify-center overflow-hidden',\n '[&>[sidebar-header]>*]:mx-auto',\n '[&>[sidebar-header]>*]:max-w-full',\n '[&>[sidebar-header]>*]:shrink-0',\n );\n } else {\n base.push('flex min-w-0 flex-1 items-center');\n }\n return base.join(' ');\n });\n\n protected readonly navClasses = computed(() => {\n const base = ['flex-1 overflow-y-auto overflow-x-hidden'];\n if (this.isCompact()) {\n base.push(\n 'px-2',\n '[&_.ui-nav-text]:mx-auto',\n '[&_.ui-nav-text]:w-10',\n '[&_.ui-nav-text]:justify-center',\n '[&_.ui-nav-text]:px-0',\n );\n }\n return base.join(' ');\n });\n\n protected readonly footerClasses = computed(() => {\n const base = ['h-12 border-t border-brand'];\n if (this.isCompact()) {\n base.push('flex items-center justify-center px-2');\n }\n return base.join(' ');\n });\n\n protected readonly footerSlotClasses = computed(() => {\n const base = ['h-full'];\n if (this.isCompact()) {\n base.push(\n 'flex h-full items-center justify-center overflow-hidden',\n '[&>[sidebar-footer]>*]:mx-auto',\n '[&>[sidebar-footer]>*]:w-auto',\n '[&>[sidebar-footer]>*]:max-w-full',\n '[&>[sidebar-footer]>*]:justify-center',\n '[&>[sidebar-footer]>*]:gap-0',\n '[&>[sidebar-footer]>*]:px-0',\n '[&>[sidebar-footer]>*>*:first-child]:mx-auto',\n '[&>[sidebar-footer]>*>*:nth-child(n+2)]:hidden',\n );\n } else {\n base.push('w-full');\n }\n return base.join(' ');\n });\n\n protected readonly innerClasses = computed(() => {\n const overlayActive = this.resolvedCollapsed() && this.hoverActive();\n const base = ['flex h-full flex-col transition-[width] duration-200 ease-out'];\n if (this.resolvedCollapsed()) {\n base.push('bg-background');\n }\n if (overlayActive) {\n base.push(\n 'absolute inset-y-0 z-30 shadow-xl [width:17.5rem]',\n this.position() === 'right' ? 'right-0 border-l border-brand' : 'left-0 border-r border-brand',\n );\n } else {\n base.push('w-full');\n }\n return base.join(' ');\n });\n\n protected onHoverEnter(): void {\n if (!this.resolvedCollapsed() || this.isMobile() || this.suppressHoverUntilLeave()) return;\n this.hovered.set(true);\n }\n\n protected onHoverLeave(): void {\n this.suppressHoverUntilLeave.set(false);\n if (this.resolvedCollapsed()) this.hovered.set(false);\n }\n\n protected toggleAppearance(event: MouseEvent): void {\n event.stopPropagation();\n const nextCollapsed = !this.resolvedCollapsed();\n this.nav.setCollapsed(nextCollapsed);\n this.hovered.set(false);\n this.suppressHoverUntilLeave.set(nextCollapsed);\n }\n\n /** Touch fallback: tap pada strip thin (ketika belum expanded) untuk expand. */\n protected onHostClick(event: MouseEvent): void {\n if (!this.resolvedCollapsed() || this.isMobile()) return;\n if (this.hovered()) return;\n const target = event.target as HTMLElement | null;\n // Biarkan klik pada control interaktif terus propagate (tidak intercept).\n if (target && target.closest('a,button,[role=\"menuitem\"]')) return;\n this.hovered.set(true);\n }\n\n private openDrawer(): void {\n if (this.drawerRef) return;\n const side = this.position();\n const pos = this.overlay.position().global().top('0');\n if (side === 'right') pos.right('0');\n else pos.left('0');\n\n this.drawerRef = this.overlay.create({\n positionStrategy: pos,\n height: '100vh',\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n panelClass: ['sidebar-drawer'],\n });\n\n const portal = new TemplatePortal(this.drawerTpl(), this.vcr);\n const viewRef = this.drawerRef.attach(portal);\n viewRef.detectChanges();\n\n const root = this.drawerRef.overlayElement;\n this.focusTrap = this.focusTrapFactory.create(root);\n this.previouslyFocused = this.doc.activeElement as HTMLElement | null;\n queueMicrotask(() => this.focusTrap?.focusInitialElementWhenReady());\n\n this.drawerRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.nav.closeMobile());\n\n this.drawerRef\n .keydownEvents()\n .pipe(\n filter((e) => e.key === 'Escape'),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => this.nav.closeMobile());\n }\n\n private closeDrawer(): void {\n if (!this.drawerRef) return;\n this.focusTrap?.destroy();\n this.focusTrap = null;\n this.drawerRef.dispose();\n this.drawerRef = null;\n this.previouslyFocused?.focus?.();\n this.previouslyFocused = null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { UiNavIconComponent } from '../shared/nav-icon.component';\nimport { UiNavItemComponent } from '../shared/nav-item.component';\nimport { NavigationService, DEFAULT_NAVIGATION_ID } from '../../core/services/navigation.service';\nimport type {\n NavigationBasicItem,\n NavigationCollapsableItem,\n NavigationGroupItem,\n NavigationItem,\n TopbarAppearance,\n} from '../../core/types/navigation.type';\n\ninterface ActiveOverlay {\n ref: OverlayRef;\n id: string;\n}\n\n/**\n * Horizontal navigation (topbar) — shadcn-styled.\n */\n@Component({\n selector: 'topbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, UiNavIconComponent, UiNavItemComponent],\n host: {\n role: 'navigation',\n '[attr.aria-label]': 'ariaLabel()',\n '[class]': 'hostClasses()',\n '[attr.data-appearance]': 'appearance()',\n },\n template: `\n <div class=\"flex h-full w-full items-center gap-3 px-1\">\n <div data-topbar-slot=\"start\" class=\"flex shrink-0 items-center gap-2\">\n @if (showHamburger()) {\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-9 items-center justify-center rounded-md text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring md:hidden\"\n [attr.aria-label]=\"hamburgerLabel()\"\n [attr.aria-expanded]=\"nav.mobileOpen()\"\n (click)=\"nav.toggleMobile()\">\n <ui-nav-icon name=\"menu\" [size]=\"18\" />\n </button>\n }\n <ng-content select=\"[topbar-start]\" />\n </div>\n\n <div data-topbar-slot=\"nav\" class=\"flex min-w-0 flex-1 items-center justify-center\">\n <ul\n class=\"flex min-w-0 flex-1 items-center justify-center gap-1\"\n role=\"menubar\"\n (keydown)=\"onMenubarKeydown($event)\">\n @for (item of resolvedItems(); track item.id) {\n <li role=\"none\" class=\"relative\">\n @switch (item.type) {\n @case ('basic') {\n @let basic = asBasic(item);\n <a\n role=\"menuitem\"\n class=\"ui-nav-text inline-flex items-center gap-2 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary\"\n [routerLink]=\"basic.link\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.text-primary]=\"rla.isActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [target]=\"basic.target ?? undefined\">\n @if (basic.icon) {\n <ui-nav-icon [name]=\"basic.icon\" [size]=\"18\" />\n }\n <span>{{ basic.title }}</span>\n </a>\n }\n @case ('collapsable') {\n @let col = asCollapsable(item);\n <button\n #trigger\n type=\"button\"\n role=\"menuitem\"\n class=\"ui-nav-text inline-flex items-center gap-2 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n [class.text-primary]=\"isItemActive(col.id)\"\n [attr.aria-expanded]=\"openId() === col.id\"\n [attr.aria-haspopup]=\"'menu'\"\n (click)=\"toggleDropdown(trigger, item)\"\n (mouseenter)=\"openDropdown(trigger, item)\">\n @if (col.icon) {\n <ui-nav-icon [name]=\"col.icon\" [size]=\"18\" />\n }\n <span>{{ col.title }}</span>\n <ui-nav-icon name=\"expand_more\" [size]=\"18\" />\n </button>\n }\n @case ('group') {\n @let group = asGroup(item);\n <button\n #trigger\n type=\"button\"\n role=\"menuitem\"\n class=\"ui-nav-text inline-flex items-center gap-2 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n [class.text-primary]=\"isItemActive(group.id)\"\n [attr.aria-expanded]=\"openId() === group.id\"\n [attr.aria-haspopup]=\"'menu'\"\n (click)=\"toggleDropdown(trigger, item)\"\n (mouseenter)=\"openDropdown(trigger, item)\">\n @if (group.icon) {\n <ui-nav-icon [name]=\"group.icon\" [size]=\"18\" />\n }\n <span>{{ group.title }}</span>\n <ui-nav-icon name=\"expand_more\" [size]=\"18\" />\n </button>\n }\n @default {\n <span class=\"ui-nav-heading px-3 py-2 text-muted-foreground\">\n {{ item.title }}\n </span>\n }\n }\n </li>\n }\n </ul>\n </div>\n\n <div data-topbar-slot=\"end\" [class]=\"endSlotClasses()\">\n <ng-content select=\"[topbar-end]\" />\n </div>\n </div>\n\n <!-- Dropdown template -->\n <ng-template #dropdownTpl let-item>\n <div role=\"menu\" class=\"min-w-56 border border-brand bg-background/95 p-1\" (keydown)=\"onPanelKeydown($event)\">\n @for (child of item.children; track child.id) {\n <ui-nav-item [item]=\"child\" />\n }\n </div>\n </ng-template>\n `,\n})\nexport class TopbarComponent {\n protected readonly nav = inject(NavigationService);\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly items = input<NavigationItem[]>([]);\n /** Registry key di `NavigationService`. Default `'main'`. */\n readonly navigationId = input<string>(DEFAULT_NAVIGATION_ID);\n readonly appearance = input<TopbarAppearance>('default');\n readonly ariaLabel = input<string>('Primary');\n readonly class = input<string>('');\n /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */\n readonly autoRegister = input<boolean>(true);\n /** Tampilkan hamburger di `< md` yang men-toggle mobile drawer sidebar. */\n readonly showHamburger = input<boolean>(true);\n readonly hamburgerLabel = input<string>('Open navigation');\n\n /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */\n protected readonly resolvedItems = computed(() => {\n const explicit = this.items();\n return explicit.length > 0 ? explicit : this.nav.getItems(this.navigationId())();\n });\n\n protected readonly openId = signal<string | null>(null);\n private active: ActiveOverlay | null = null;\n\n private readonly dropdownTpl = viewChild.required<TemplateRef<unknown>>('dropdownTpl');\n\n constructor() {\n effect(() => {\n const explicit = this.items();\n if (this.autoRegister() && explicit.length > 0) this.nav.registerItems(this.navigationId(), explicit);\n });\n this.destroyRef.onDestroy(() => this.closeAll());\n }\n\n protected readonly hostClasses = computed(() => {\n return ['sticky top-0 z-20 flex h-11 w-full items-center', this.class()].join(' ');\n });\n\n protected readonly endSlotClasses = computed(() => {\n const base = ['flex h-full shrink-0 items-center justify-end gap-2 overflow-hidden'];\n base.push(\n '[&>[topbar-end]]:flex',\n '[&>[topbar-end]]:min-w-0',\n '[&>[topbar-end]]:max-w-full',\n '[&>[topbar-end]]:items-center',\n '[&>[topbar-end]]:justify-end',\n '[&>[topbar-end]]:gap-2',\n '[&>[topbar-end]>*]:w-auto',\n '[&>[topbar-end]>*]:max-w-full',\n '[&>[topbar-end]>*]:justify-end',\n '[&>[topbar-end]>*]:gap-0',\n '[&>[topbar-end]>*]:px-2',\n '[&>[topbar-end]>*>*:first-child]:ml-auto',\n '[&>[topbar-end]>*>*:nth-child(n+2)]:hidden',\n );\n return base.join(' ');\n });\n\n protected asBasic(i: NavigationItem): NavigationBasicItem {\n return i as NavigationBasicItem;\n }\n protected asCollapsable(i: NavigationItem): NavigationCollapsableItem {\n return i as NavigationCollapsableItem;\n }\n protected asGroup(i: NavigationItem): NavigationGroupItem {\n return i as NavigationGroupItem;\n }\n\n protected isItemActive(id: string | undefined): boolean {\n return this.nav.isActive(id);\n }\n\n protected toggleDropdown(trigger: HTMLElement, item: NavigationItem): void {\n if (this.openId() === item.id) this.closeAll();\n else this.openDropdown(trigger, item);\n }\n\n protected openDropdown(trigger: HTMLElement, item: NavigationItem): void {\n if (this.openId() === item.id) return;\n this.closeAll();\n this.attach(trigger, item, this.dropdownTpl());\n }\n\n private attach(trigger: HTMLElement, item: NavigationItem, tpl: TemplateRef<unknown>): void {\n const strategy = this.overlay\n .position()\n .flexibleConnectedTo(trigger)\n .withFlexibleDimensions(false)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n ]);\n\n const ref = this.overlay.create({\n positionStrategy: strategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: ['ui-dropdown-panel'],\n });\n\n const portal = new TemplatePortal(tpl, this.vcr, { $implicit: item });\n ref.attach(portal);\n this.active = { ref, id: item.id ?? '' };\n this.openId.set(item.id ?? null);\n\n merge(ref.backdropClick(), ref.keydownEvents().pipe(filter((e) => e.key === 'Escape')))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.closeAll();\n trigger.focus();\n });\n }\n\n protected closeAll(): void {\n if (this.active) {\n this.active.ref.dispose();\n this.active = null;\n }\n this.openId.set(null);\n }\n\n /** Menubar keyboard navigation: ArrowLeft/Right antar trigger, Home/End, ArrowDown fokus panel. */\n protected onMenubarKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const root = this.host.nativeElement;\n const triggers = Array.from(root.querySelectorAll<HTMLElement>('ul[role=\"menubar\"] [role=\"menuitem\"]')).filter(\n (el) => !el.hasAttribute('disabled'),\n );\n if (triggers.length === 0) return;\n const currentIndex = triggers.indexOf(document.activeElement as HTMLElement);\n\n if (key === 'ArrowDown' && currentIndex !== -1) {\n event.preventDefault();\n // Jika open, fokus item pertama panel; jika belum, focus tetap (panel akan dibuka via click/mouseenter).\n queueMicrotask(() => this.focusFirstInPanel());\n return;\n }\n if (key !== 'ArrowLeft' && key !== 'ArrowRight' && key !== 'Home' && key !== 'End') return;\n let nextIndex = currentIndex;\n if (key === 'ArrowRight') nextIndex = (currentIndex + 1 + triggers.length) % triggers.length;\n else if (key === 'ArrowLeft') nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n else if (key === 'Home') nextIndex = 0;\n else if (key === 'End') nextIndex = triggers.length - 1;\n if (nextIndex !== currentIndex && triggers[nextIndex]) {\n event.preventDefault();\n triggers[nextIndex].focus();\n }\n }\n\n /** Arrow-key navigation dalam dropdown panel. */\n protected onPanelKeydown(event: KeyboardEvent): void {\n const key = event.key;\n if (\n key !== 'ArrowDown' &&\n key !== 'ArrowUp' &&\n key !== 'ArrowLeft' &&\n key !== 'ArrowRight' &&\n key !== 'Home' &&\n key !== 'End'\n )\n return;\n const panel = this.active?.ref.overlayElement;\n if (!panel) return;\n const items = this.collectPanelFocusables(panel);\n if (items.length === 0) return;\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\n let nextIndex = currentIndex;\n if (key === 'ArrowDown' || key === 'ArrowRight') nextIndex = (currentIndex + 1 + items.length) % items.length;\n else if (key === 'ArrowUp' || key === 'ArrowLeft') nextIndex = (currentIndex - 1 + items.length) % items.length;\n else if (key === 'Home') nextIndex = 0;\n else if (key === 'End') nextIndex = items.length - 1;\n if (nextIndex !== currentIndex && items[nextIndex]) {\n event.preventDefault();\n items[nextIndex].focus();\n }\n }\n\n private collectPanelFocusables(root: HTMLElement): HTMLElement[] {\n return Array.from(\n root.querySelectorAll<HTMLElement>('a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'),\n ).filter((el) => el.offsetParent !== null || el.getClientRects().length > 0);\n }\n\n private focusFirstInPanel(): void {\n const panel = this.active?.ref.overlayElement;\n if (!panel) return;\n const items = this.collectPanelFocusables(panel);\n items[0]?.focus();\n }\n}\n","import { NavigationItem } from '../core/types/navigation.type';\n\nexport const DemoNavigationData: NavigationItem[] = [\n {\n id: 'documentation',\n title: 'Documentation',\n subtitle: 'Guides and getting started resources',\n type: 'group',\n icon: 'menu_book',\n children: [\n {\n id: 'documentation-introduction',\n title: 'Introduction',\n type: 'basic',\n icon: 'menu_book',\n link: '/docs/introduction',\n },\n {\n id: 'documentation-installation',\n title: 'Installation',\n type: 'basic',\n icon: 'download',\n link: '/docs/installation',\n },\n {\n id: 'documentation-getting-started',\n title: 'Getting started',\n type: 'basic',\n icon: 'rocket_launch',\n link: '/docs/getting-started',\n },\n {\n id: 'documentation-upgrade-guide',\n title: 'Upgrade Guide',\n type: 'basic',\n icon: 'arrow_circle_up',\n link: '/docs/upgrade-guide',\n },\n {\n id: 'documentation-changelog',\n title: 'Changelog',\n type: 'basic',\n icon: 'history',\n link: '/docs/changelog',\n },\n {\n id: 'documentation-icon-lucide',\n title: 'Lucide Icons',\n type: 'basic',\n icon: 'star',\n link: '/lucide-icons',\n badge: {\n title: 'Demo',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-blue-500 text-white',\n },\n },\n ],\n },\n {\n id: 'user-interface',\n title: 'User Interface',\n subtitle: 'Components and design elements',\n type: 'group',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-material-components',\n title: 'Material Components',\n type: 'collapsable',\n icon: 'deployed_code',\n children: [\n {\n id: 'user-interface-material-components-inputs-forms',\n title: 'Inputs & Forms',\n type: 'collapsable',\n icon: 'input',\n children: [\n {\n id: 'user-interface-material-components-inputs-forms-autocomplete',\n title: 'Autocomplete',\n type: 'basic',\n icon: 'search',\n link: '/ui/material/autocomplete',\n },\n {\n id: 'user-interface-material-components-inputs-forms-checkbox',\n title: 'Checkbox',\n type: 'basic',\n icon: 'check_box',\n link: '/ui/material/checkbox',\n },\n {\n id: 'user-interface-material-components-inputs-forms-datepicker',\n title: 'Datepicker',\n type: 'basic',\n icon: 'calendar_today',\n link: '/ui/material/datepicker',\n },\n {\n id: 'user-interface-material-components-inputs-forms-form-field',\n title: 'Form field',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/material/form-field',\n },\n {\n id: 'user-interface-material-components-inputs-forms-input',\n title: 'Input',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/material/input',\n },\n {\n id: 'user-interface-material-components-inputs-forms-radio-button',\n title: 'Radio button',\n type: 'basic',\n icon: 'radio_button_checked',\n link: '/ui/material/radio',\n },\n {\n id: 'user-interface-material-components-inputs-forms-select',\n title: 'Select',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/material/select',\n },\n {\n id: 'user-interface-material-components-inputs-forms-slider',\n title: 'Slider',\n type: 'basic',\n icon: 'tune',\n link: '/ui/material/slider',\n },\n {\n id: 'user-interface-material-components-inputs-forms-slide-toggle',\n title: 'Slide toggle',\n type: 'basic',\n icon: 'toggle_on',\n link: '/ui/material/slide-toggle',\n },\n ],\n },\n {\n id: 'user-interface-material-components-buttons-actions',\n title: 'Buttons & Actions',\n type: 'collapsable',\n icon: 'ads_click',\n children: [\n {\n id: 'user-interface-material-components-buttons-actions-button',\n title: 'Button',\n type: 'basic',\n icon: 'crop_square',\n link: '/ui/material/button',\n },\n {\n id: 'user-interface-material-components-buttons-actions-button-toggle',\n title: 'Button toggle',\n type: 'basic',\n icon: 'view_column',\n link: '/ui/material/button-toggle',\n },\n {\n id: 'user-interface-material-components-buttons-actions-chips',\n title: 'Chips',\n type: 'basic',\n icon: 'label',\n link: '/ui/material/chips',\n badge: {\n title: 'New',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-green-500 text-white',\n },\n },\n {\n id: 'user-interface-material-components-buttons-actions-menu',\n title: 'Menu',\n type: 'basic',\n icon: 'menu',\n link: '/ui/material/menu',\n },\n {\n id: 'user-interface-material-components-buttons-actions-ripples',\n title: 'Ripples',\n type: 'basic',\n icon: 'waves',\n link: '/ui/material/ripples',\n },\n ],\n },\n {\n id: 'user-interface-material-components-layout-containers',\n title: 'Layout & Containers',\n type: 'collapsable',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-material-components-layout-containers-card',\n title: 'Card',\n type: 'basic',\n icon: 'credit_card',\n link: '/ui/material/card',\n },\n {\n id: 'user-interface-material-components-layout-containers-divider',\n title: 'Divider',\n type: 'basic',\n icon: 'remove',\n link: '/ui/material/divider',\n },\n {\n id: 'user-interface-material-components-layout-containers-expansion-panel',\n title: 'Expansion Panel',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/material/expansion',\n },\n {\n id: 'user-interface-material-components-layout-containers-grid-list',\n title: 'Grid list',\n type: 'basic',\n icon: 'grid_view',\n link: '/ui/material/grid-list',\n },\n {\n id: 'user-interface-material-components-layout-containers-list',\n title: 'List',\n type: 'basic',\n icon: 'list',\n link: '/ui/material/list',\n },\n {\n id: 'user-interface-material-components-layout-containers-sidenav',\n title: 'Sidenav',\n type: 'basic',\n icon: 'view_sidebar',\n link: '/ui/material/sidenav',\n },\n {\n id: 'user-interface-material-components-layout-containers-tabs',\n title: 'Tabs',\n type: 'basic',\n icon: 'tab',\n link: '/ui/material/tabs',\n },\n {\n id: 'user-interface-material-components-layout-containers-toolbar',\n title: 'Toolbar',\n type: 'basic',\n icon: 'build',\n link: '/ui/material/toolbar',\n },\n ],\n },\n {\n id: 'user-interface-material-components-data-display',\n title: 'Data & Display',\n type: 'collapsable',\n icon: 'bar_chart',\n children: [\n {\n id: 'user-interface-material-components-data-display-badge',\n title: 'Badge',\n type: 'basic',\n icon: 'verified',\n link: '/ui/material/badge',\n },\n {\n id: 'user-interface-material-components-data-display-icon',\n title: 'Icon',\n type: 'basic',\n icon: 'star',\n link: '/ui/material/icon',\n },\n {\n id: 'user-interface-material-components-data-display-paginator',\n title: 'Paginator',\n type: 'basic',\n icon: 'first_page',\n link: '/ui/material/paginator',\n },\n {\n id: 'user-interface-material-components-data-display-progress-bar',\n title: 'Progress bar',\n type: 'basic',\n icon: 'hourglass_empty',\n link: '/ui/material/progress-bar',\n },\n {\n id: 'user-interface-material-components-data-display-progress-spinner',\n title: 'Progress spinner',\n type: 'basic',\n icon: 'progress_activity',\n link: '/ui/material/progress-spinner',\n },\n {\n id: 'user-interface-material-components-data-display-sort',\n title: 'Sort header',\n type: 'basic',\n icon: 'swap_vert',\n link: '/ui/material/sort',\n },\n {\n id: 'user-interface-material-components-data-display-table',\n title: 'Table',\n type: 'basic',\n icon: 'table_chart',\n link: '/ui/material/table',\n },\n {\n id: 'user-interface-material-components-data-display-tree',\n title: 'Tree',\n type: 'basic',\n icon: 'hub',\n link: '/ui/material/tree',\n },\n ],\n },\n {\n id: 'user-interface-material-components-overlays-modals',\n title: 'Overlays & Modals',\n type: 'collapsable',\n icon: 'layers',\n children: [\n {\n id: 'user-interface-material-components-overlays-modals-bottom-sheet',\n title: 'Bottom Sheet',\n type: 'basic',\n icon: 'south',\n link: '/ui/material/bottom-sheet',\n },\n {\n id: 'user-interface-material-components-overlays-modals-dialog',\n title: 'Dialog',\n type: 'basic',\n icon: 'chat',\n link: '/ui/material/dialog',\n },\n {\n id: 'user-interface-material-components-overlays-modals-snack-bar',\n title: 'Snack-bar',\n type: 'basic',\n icon: 'notifications',\n link: '/ui/material/snack-bar',\n },\n {\n id: 'user-interface-material-components-overlays-modals-tooltip',\n title: 'Tooltip',\n type: 'basic',\n icon: 'help',\n link: '/ui/material/tooltip',\n },\n ],\n },\n {\n id: 'user-interface-material-components-navigation-stepper',\n title: 'Navigation & Steps',\n type: 'collapsable',\n icon: 'account_tree',\n children: [\n {\n id: 'user-interface-material-components-navigation-stepper-stepper',\n title: 'Stepper',\n type: 'basic',\n icon: 'account_tree',\n link: '/ui/material/stepper',\n },\n ],\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk',\n title: 'Angular CDK',\n type: 'collapsable',\n icon: 'widgets',\n children: [\n {\n id: 'user-interface-angular-cdk-accessibility-navigation',\n title: 'Accessibility & Navigation',\n type: 'collapsable',\n icon: 'accessibility',\n children: [\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-a11y',\n title: 'Accessibility',\n type: 'basic',\n icon: 'accessibility',\n link: '/ui/cdk/a11y',\n },\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-focus-trap',\n title: 'Focus Trap',\n type: 'basic',\n icon: 'center_focus_strong',\n link: '/ui/cdk/focus-trap',\n },\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-live-announcer',\n title: 'Live Announcer',\n type: 'basic',\n icon: 'campaign',\n link: '/ui/cdk/live-announcer',\n },\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-listbox',\n title: 'Listbox',\n type: 'basic',\n icon: 'list',\n link: '/ui/cdk/listbox',\n },\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-menu-cdk',\n title: 'Menu',\n type: 'basic',\n icon: 'menu',\n link: '/ui/cdk/menu',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning',\n title: 'Layout & Positioning',\n type: 'collapsable',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-angular-cdk-layout-positioning-layout',\n title: 'Layout',\n type: 'basic',\n icon: 'dashboard',\n link: '/ui/cdk/layout',\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning-overlay',\n title: 'Overlay',\n type: 'basic',\n icon: 'layers',\n link: '/ui/cdk/overlay',\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning-portal',\n title: 'Portal',\n type: 'basic',\n icon: 'radio_button_checked',\n link: '/ui/cdk/portal',\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning-scrolling',\n title: 'Scrolling',\n type: 'basic',\n icon: 'unfold_more',\n link: '/ui/cdk/scrolling',\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning-virtual-scrolling',\n title: 'Virtual Scrolling',\n type: 'basic',\n icon: 'view_agenda',\n link: '/ui/cdk/virtual-scrolling',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-interaction-behavior',\n title: 'Interaction & Behavior',\n type: 'collapsable',\n icon: 'pan_tool',\n children: [\n {\n id: 'user-interface-angular-cdk-interaction-behavior-drag-drop',\n title: 'Drag and Drop',\n type: 'basic',\n icon: 'open_with',\n link: '/ui/cdk/drag-drop',\n },\n {\n id: 'user-interface-angular-cdk-interaction-behavior-observers',\n title: 'Observers',\n type: 'basic',\n icon: 'visibility',\n link: '/ui/cdk/observers',\n },\n {\n id: 'user-interface-angular-cdk-interaction-behavior-platform',\n title: 'Platform',\n type: 'basic',\n icon: 'devices',\n link: '/ui/cdk/platform',\n },\n {\n id: 'user-interface-angular-cdk-interaction-behavior-stepper-cdk',\n title: 'Stepper',\n type: 'basic',\n icon: 'account_tree',\n link: '/ui/cdk/stepper',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-forms-data',\n title: 'Forms & Data',\n type: 'collapsable',\n icon: 'storage',\n children: [\n {\n id: 'user-interface-angular-cdk-forms-data-accordion',\n title: 'Accordion',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/cdk/accordion',\n },\n {\n id: 'user-interface-angular-cdk-forms-data-table-cdk',\n title: 'Table',\n type: 'basic',\n icon: 'table_chart',\n link: '/ui/cdk/table',\n },\n {\n id: 'user-interface-angular-cdk-forms-data-tree-cdk',\n title: 'Tree',\n type: 'basic',\n icon: 'hub',\n link: '/ui/cdk/tree',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers',\n title: 'Utilities & Helpers',\n type: 'collapsable',\n icon: 'build',\n children: [\n {\n id: 'user-interface-angular-cdk-utilities-helpers-bidi',\n title: 'Bidirectionality',\n type: 'basic',\n icon: 'swap_horiz',\n link: '/ui/cdk/bidi',\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers-clipboard',\n title: 'Clipboard',\n type: 'basic',\n icon: 'content_paste',\n link: '/ui/cdk/clipboard',\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers-coercion',\n title: 'Coercion',\n type: 'basic',\n icon: 'shuffle',\n link: '/ui/cdk/coercion',\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers-collections',\n title: 'Collections',\n type: 'basic',\n icon: 'folder',\n link: '/ui/cdk/collections',\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers-keycodes',\n title: 'Keycodes',\n type: 'basic',\n icon: 'keyboard',\n link: '/ui/cdk/keycodes',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-testing-tools',\n title: 'Testing Tools',\n type: 'collapsable',\n icon: 'bug_report',\n children: [\n {\n id: 'user-interface-angular-cdk-testing-tools-component-harnesses',\n title: 'Component Harnesses',\n type: 'basic',\n icon: 'science',\n link: '/ui/cdk/testing',\n },\n {\n id: 'user-interface-angular-cdk-testing-tools-test-harnesses',\n title: 'Test Harnesses',\n type: 'basic',\n icon: 'science',\n link: '/ui/cdk/test-harnesses',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-advanced-feature',\n title: 'Advanced feature',\n type: 'collapsable',\n icon: 'settings',\n children: [\n {\n id: 'user-interface-angular-cdk-advanced-feature-dialog-cdk',\n title: 'Dialog',\n type: 'basic',\n icon: 'chat',\n link: '/ui/cdk/dialog',\n },\n {\n id: 'user-interface-angular-cdk-advanced-feature-text-field',\n title: 'Text Field',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/cdk/text-field',\n },\n ],\n },\n ],\n },\n {\n id: 'user-interface-tailwind',\n title: 'Tailwind CSS',\n type: 'collapsable',\n icon: 'air',\n children: [\n {\n id: 'user-interface-tailwind-css-heading',\n title: 'Heading',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/tailwind/heading',\n },\n {\n id: 'user-interface-tailwind-data-display',\n title: 'Data Display',\n type: 'basic',\n icon: 'bar_chart',\n link: '/ui/tailwind/data-display',\n },\n {\n id: 'user-interface-tailwind-list',\n title: 'List',\n type: 'basic',\n icon: 'list',\n link: '/ui/tailwind/list',\n },\n {\n id: 'user-interface-tailwind-form',\n title: 'Form',\n type: 'basic',\n icon: 'dynamic_form',\n link: '/ui/tailwind/form',\n },\n {\n id: 'user-interface-tailwind-feedback',\n title: 'Feedback',\n type: 'basic',\n icon: 'report',\n link: '/ui/tailwind/feedback',\n },\n ],\n },\n ],\n },\n {\n id: 'feature',\n title: 'Features',\n subtitle: 'Advanced functionality and customization options',\n type: 'group',\n icon: 'settings',\n children: [\n {\n id: 'feature-theme',\n title: 'Themes',\n type: 'collapsable',\n icon: 'palette',\n children: [\n {\n id: 'feature-theme-dark-mode',\n title: 'Dark Mode',\n type: 'basic',\n icon: 'dark_mode',\n link: '/feature/theme/dark-mode',\n },\n {\n id: 'feature-theme-color',\n title: 'Color Schemes',\n type: 'basic',\n icon: 'palette',\n link: '/feature/theme/color-schemes',\n badge: {\n title: 'Beta',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-yellow-500 text-white',\n },\n },\n {\n id: 'feature-layout',\n title: 'Layout',\n type: 'collapsable',\n icon: 'dashboard',\n children: [\n {\n id: 'feature-layout-apps',\n title: 'Application',\n type: 'collapsable',\n icon: 'web',\n children: [\n {\n id: 'feature-layout-apps-vertical',\n title: 'Vertical',\n type: 'basic',\n icon: 'view_sidebar',\n link: '/feature/layout/application/vertical',\n },\n {\n id: 'feature-layout-apps-horizontal',\n title: 'Horizontal',\n type: 'basic',\n icon: 'view_column',\n link: '/feature/layout/application/horizontal',\n },\n ],\n },\n {\n id: 'feature-layout-page',\n title: 'Pages',\n type: 'collapsable',\n icon: 'description',\n children: [\n {\n id: 'feature-layout-page-page',\n title: 'Page',\n type: 'basic',\n icon: 'description',\n link: '/feature/layout/page/page',\n },\n {\n id: 'feature-layout-page-content',\n title: 'Content',\n type: 'basic',\n icon: 'description',\n link: '/feature/layout/page/content',\n },\n ],\n },\n ],\n },\n ],\n },\n {\n id: 'feature-navigation',\n title: 'Navigation',\n type: 'collapsable',\n icon: 'navigation',\n children: [\n {\n id: 'feature-navigation-horizontal-navigation',\n title: 'Horizontal ',\n type: 'basic',\n icon: 'view_column',\n link: '/feature/navigation/horizontal',\n },\n {\n id: 'feature-navigation-vertical-navigation',\n title: 'Vertical ',\n type: 'collapsable',\n icon: 'view_agenda',\n children: [\n {\n id: 'feature-navigation-vertical-navigation-default',\n title: 'Default',\n type: 'basic',\n icon: 'view_agenda',\n link: '/feature/navigation/vertical/default',\n },\n {\n id: 'feature-navigation-vertical-navigation-thin',\n title: 'Thin',\n type: 'basic',\n icon: 'view_agenda',\n link: '/feature/navigation/vertical/thin',\n },\n {\n id: 'feature-navigation-vertical-navigation-compact',\n title: 'Compact',\n type: 'basic',\n icon: 'view_agenda',\n link: '/feature/navigation/vertical/compact',\n },\n {\n id: 'feature-navigation-vertical-navigation-dense',\n title: 'Dense',\n type: 'basic',\n icon: 'view_agenda',\n link: '/feature/navigation/vertical/dense',\n },\n ],\n },\n ],\n },\n ],\n },\n];\n","/*\n * Public API Surface of @ojiepermana/angular/navigation\n */\n\n// Core\nexport * from './src/lib/core/types/navigation.type';\nexport * from './src/lib/core/services/navigation.service';\n\n// Shared\nexport * from './src/lib/components/shared/nav-icon.component';\nexport * from './src/lib/components/shared/nav-item.component';\n\n// Sidebar & Topbar\nexport * from './src/lib/components/sidebar/sidebar.component';\nexport * from './src/lib/components/topbar/topbar.component';\n\n// Demo data\nexport * from './src/lib/data/demo-navigation.data';\n\nexport const NAVIGATION_VERSION = '0.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-navigation.mjs","sources":["../../../projects/angular/navigation/src/lib/core/services/navigation.service.ts","../../../projects/angular/navigation/src/lib/components/shared/nav-icon.component.ts","../../../projects/angular/navigation/src/lib/core/utils/cn.util.ts","../../../projects/angular/navigation/src/lib/components/shared/nav-item.component.ts","../../../projects/angular/navigation/src/lib/components/sidebar/sidebar.component.ts","../../../projects/angular/navigation/src/lib/components/topbar/topbar.component.ts","../../../projects/angular/navigation/src/lib/data/demo-navigation.data.ts","../../../projects/angular/navigation/public-api.ts","../../../projects/angular/navigation/ojiepermana-angular-navigation.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\nimport { DestroyRef } from '@angular/core';\nimport type { NavigationItem, SidebarAppearance } from '../types/navigation.type';\n\n/** Default registry key used when no id is specified. */\nexport const DEFAULT_NAVIGATION_ID = 'main';\nconst SIDEBAR_COLLAPSE_STORAGE_KEY = 'sidebar-collapse';\nconst LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY = 'sidebar-appearance';\n\nfunction parseSidebarCollapsed(value: string | null | undefined): boolean | null {\n if (value === 'true') return true;\n if (value === 'false') return false;\n return null;\n}\n\n/**\n * Signal-based global state untuk navigation (sidebar/topbar).\n *\n * Items disimpan dalam registry ber-key. Key default adalah `'main'`.\n * Komponen `sidebar` / `topbar` memilih registry via input `navigationId`.\n */\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private readonly doc = inject(DOCUMENT);\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n private readonly persistedSidebarCollapsed = this.readPersistedSidebarCollapsed();\n\n /** Internal version counter — incremented on every registry mutation. */\n private readonly _version = signal(0);\n\n /** Internal map of registered navigation trees. */\n private readonly _registry = new Map<string, NavigationItem[]>();\n private readonly _collapsed = signal(this.persistedSidebarCollapsed ?? false);\n private readonly _hasStoredSidebarCollapse = signal(this.persistedSidebarCollapsed !== null);\n\n /**\n * Backward-compatible accessor — returns items for the default (`'main'`) key.\n * Prefer `getItems(id)` when working with named registries.\n */\n readonly items = computed(() => this.getItems(DEFAULT_NAVIGATION_ID)());\n\n /** Sidebar appearance preference (`default` or `thin`). */\n readonly sidebarAppearance = computed<SidebarAppearance>(() => (this._collapsed() ? 'thin' : 'default'));\n readonly hasStoredSidebarCollapse = this._hasStoredSidebarCollapse.asReadonly();\n\n /** Sidebar collapsed (default ↔ thin) toggle untuk desktop. */\n readonly collapsed = this._collapsed.asReadonly();\n\n /** Sheet drawer terbuka di mobile. */\n readonly mobileOpen = signal<boolean>(false);\n\n /** Set id grup / collapsable yang sedang terbuka. */\n readonly openGroups = signal<ReadonlySet<string>>(new Set<string>());\n\n /** URL aktif terakhir. Update otomatis dari Router `NavigationEnd`. */\n readonly activeUrl = signal<string>(this.router.url);\n\n /** Trail id item yang sedang match dengan URL aktif (across ALL registries). */\n readonly activeTrail = computed<ReadonlySet<string>>(() => {\n this._version(); // track changes\n const url = this.activeUrl();\n const trail = new Set<string>();\n const walk = (list: readonly NavigationItem[], ancestors: string[]): boolean => {\n let matched = false;\n for (const item of list) {\n const id = item.id;\n const link = 'link' in item ? item.link : undefined;\n let selfMatch = false;\n if (link) {\n selfMatch = url === link || url.startsWith(link + '/') || url.startsWith(link + '?');\n }\n const children = 'children' in item ? (item.children ?? []) : [];\n const nextAncestors = id ? [...ancestors, id] : ancestors;\n const childMatch = children.length > 0 && walk(children, nextAncestors);\n if (selfMatch || childMatch) {\n if (id) trail.add(id);\n for (const a of ancestors) trail.add(a);\n matched = true;\n }\n }\n return matched;\n };\n for (const items of this._registry.values()) {\n walk(items, []);\n }\n return trail;\n });\n\n constructor() {\n effect(() => {\n if (!this._hasStoredSidebarCollapse()) {\n return;\n }\n\n this.persistSidebarCollapsed(this._collapsed());\n });\n\n this.router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((e) => this.activeUrl.set(e.urlAfterRedirects));\n }\n\n /**\n * Register items di registry.\n *\n * Overload:\n * - `registerItems(items)` → key `'main'`\n * - `registerItems(id, items)` → key spesifik\n */\n registerItems(items: NavigationItem[]): void;\n registerItems(id: string, items: NavigationItem[]): void;\n registerItems(idOrItems: string | NavigationItem[], maybeItems?: NavigationItem[]): void {\n const [id, items] = typeof idOrItems === 'string' ? [idOrItems, maybeItems!] : [DEFAULT_NAVIGATION_ID, idOrItems];\n this._registry.set(id, items);\n this._version.update((v) => v + 1);\n }\n\n /** Remove a named registry entry. */\n removeItems(id: string): void {\n this._registry.delete(id);\n this._version.update((v) => v + 1);\n }\n\n /**\n * Computed yang mengembalikan items untuk key tertentu.\n * Reactive terhadap perubahan registry.\n */\n getItems(id: string): () => readonly NavigationItem[] {\n return computed(() => {\n this._version(); // track changes\n return this._registry.get(id) ?? [];\n });\n }\n\n setSidebarAppearance(value: SidebarAppearance): void {\n this.setCollapsed(value === 'thin');\n }\n\n toggleSidebarAppearance(currentAppearance: SidebarAppearance = this.sidebarAppearance()): void {\n this.setCollapsed(currentAppearance !== 'thin');\n }\n\n /** Toggle sidebar collapsed (default ↔ thin). */\n toggleCollapsed(): void {\n this.setCollapsed(!this._collapsed());\n }\n\n setCollapsed(value: boolean): void {\n this._collapsed.set(value);\n this._hasStoredSidebarCollapse.set(true);\n }\n\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n\n toggleMobile(): void {\n this.mobileOpen.update((v) => !v);\n }\n\n isGroupOpen(id: string): boolean {\n return this.openGroups().has(id);\n }\n\n toggleGroup(id: string): void {\n const next = new Set(this.openGroups());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this.openGroups.set(next);\n }\n\n setGroupOpen(id: string, open: boolean): void {\n const next = new Set(this.openGroups());\n if (open) next.add(id);\n else next.delete(id);\n this.openGroups.set(next);\n }\n\n /** Apakah id termasuk dalam active trail saat ini. */\n isActive(id: string | undefined): boolean {\n return !!id && this.activeTrail().has(id);\n }\n\n private readPersistedSidebarCollapsed(): boolean | null {\n try {\n const storage = this.doc.defaultView?.localStorage;\n const collapsed = parseSidebarCollapsed(storage?.getItem(SIDEBAR_COLLAPSE_STORAGE_KEY));\n if (collapsed !== null) {\n return collapsed;\n }\n\n const legacyAppearance = storage?.getItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n if (legacyAppearance === 'thin') {\n return true;\n }\n if (legacyAppearance === 'default') {\n return false;\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n private persistSidebarCollapsed(value: boolean): void {\n try {\n const storage = this.doc.defaultView?.localStorage;\n storage?.setItem(SIDEBAR_COLLAPSE_STORAGE_KEY, String(value));\n storage?.removeItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n } catch {\n /* ignore */\n }\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, PLATFORM_ID, computed, inject, input } from '@angular/core';\n\nconst MATERIAL_SYMBOLS_FONT_ATTR = 'data-ui-nav-icon-font';\nconst MATERIAL_SYMBOLS_FONT_ID = 'material-symbols-outlined';\nconst MATERIAL_SYMBOLS_FONT_HREF =\n 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0';\n\n/**\n * Material Symbols icon renderer.\n * Menyuntikkan stylesheet font sekali saat dipakai agar consumer tidak perlu\n * menambahkan `<link>` manual di `index.html`.\n */\n@Component({\n selector: 'ui-nav-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[style.font-size.px]': 'size()',\n '[style.font-variation-settings]': 'fontVariationSettings',\n 'aria-hidden': 'true',\n translate: 'no',\n },\n template: `{{ name() }}`,\n})\nexport class UiNavIconComponent {\n private readonly doc = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n readonly name = input<string>('');\n readonly class = input<string>('');\n readonly size = input<number | null>(null);\n\n protected readonly fontVariationSettings = '\"FILL\" 0, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24';\n\n constructor() {\n this.ensureFontStylesheet();\n }\n\n protected readonly classes = computed(() => {\n const base = 'material-symbols-outlined inline-flex items-center justify-center leading-none select-none';\n const extra = this.class();\n return extra ? `${base} ${extra}` : base;\n });\n\n private ensureFontStylesheet(): void {\n if (!isPlatformBrowser(this.platformId) || !this.doc.head) return;\n\n const existing = this.doc.head.querySelector(`link[${MATERIAL_SYMBOLS_FONT_ATTR}=\"${MATERIAL_SYMBOLS_FONT_ID}\"]`);\n if (existing) return;\n\n const link = this.doc.createElement('link');\n link.rel = 'stylesheet';\n link.href = MATERIAL_SYMBOLS_FONT_HREF;\n link.setAttribute(MATERIAL_SYMBOLS_FONT_ATTR, MATERIAL_SYMBOLS_FONT_ID);\n this.doc.head.appendChild(link);\n }\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/** Concatenate and dedupe Tailwind class names. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { UiNavIconComponent } from './nav-icon.component';\nimport { NavigationService } from '../../core/services/navigation.service';\nimport { cn } from '../../core/utils/cn.util';\nimport type {\n NavigationAsideItem,\n NavigationBasicItem,\n NavigationCollapsableItem,\n NavigationGroupItem,\n NavigationItem,\n NavigationMegaItem,\n} from '../../core/types/navigation.type';\n\n/**\n * Recursive navigation item renderer (vertical context).\n *\n * Menerima item polymorphic dan delegasi ke template sesuai `type`.\n * Mega dirender sebagai group biasa saat muncul di konteks vertical.\n */\n@Component({\n selector: 'ui-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, MatTooltip, UiNavIconComponent],\n template: `\n @switch (type()) {\n @case ('divider') {\n <hr class=\"my-2 border-t border-border\" role=\"separator\" />\n }\n @case ('spacer') {\n <div class=\"flex-1\"></div>\n }\n @case ('group') {\n <div role=\"group\" [attr.aria-labelledby]=\"headingId()\">\n @if (!compact()) {\n <div class=\"sticky top-0 z-10 p-3 text-muted-foreground backdrop-blur-3xl bg-transparent\">\n <div [id]=\"headingId()\" [class]=\"cn('ui-nav-heading text-muted-foreground', item().classes?.title)\">\n {{ item().title }}\n </div>\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of groupItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"compact()\" />\n }\n </div>\n </div>\n }\n @case ('collapsable') {\n @let id = collapsableItem().id ?? '';\n @let open = isGroupOpen();\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text group/ni flex w-full items-center gap-3 rounded-full p-3 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isTrailActive() && 'text-primary',\n item().classes?.wrapper\n )\n \"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"id + '-panel'\"\n [disabled]=\"collapsableItem().disabled || null\"\n [matTooltip]=\"compact() ? (collapsableItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"toggleGroup()\">\n @if (collapsableItem().icon) {\n <span\n [class]=\"\n cn(\n 'inline-flex shrink-0 items-center justify-center',\n open && 'h-7 w-7 rounded-full border border-brand'\n )\n \">\n <ui-nav-icon [name]=\"collapsableItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n </span>\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate text-left', item().classes?.title)\">\n {{ collapsableItem().title }}\n </span>\n @if (collapsableItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n <ui-nav-icon\n [name]=\"'chevron_right'\"\n [size]=\"18\"\n [class]=\"cn('transition-transform duration-200', open && 'rotate-90')\" />\n }\n </button>\n @if (!compact() && open) {\n <div\n [id]=\"id + '-panel'\"\n role=\"region\"\n class=\"relative ml-6.5 mt-0.5 flex flex-col gap-0.5 pl-3 before:absolute before:bottom-0 before:left-0 before:-top-3.5 before:w-px before:bg-border before:content-['']\">\n @for (child of collapsableItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"false\" />\n }\n </div>\n }\n }\n @case ('mega') {\n <!-- Mega direndahkan ke group saat berada di sidebar vertical. -->\n <div class=\"mt-4 py-3 first:mt-0\" role=\"group\">\n @if (!compact()) {\n <div class=\"ui-nav-heading sticky top-0 z-10 bg-background px-3 pb-1 text-muted-foreground\">\n {{ item().title }}\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of megaItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"compact()\" />\n }\n </div>\n </div>\n }\n @case ('aside') {\n <a\n [class]=\"\n cn(\n 'ui-nav-text flex items-center gap-3 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary',\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [routerLink]=\"asideItem().link\"\n [queryParams]=\"asideItem().queryParams\"\n [fragment]=\"asideItem().fragment ?? undefined\"\n [target]=\"asideItem().target ?? undefined\"\n [matTooltip]=\"compact() ? (asideItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (asideItem().icon) {\n <ui-nav-icon [name]=\"asideItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ asideItem().title }}</span>\n }\n </a>\n }\n @default {\n <!-- basic -->\n @if (basicItem().link && !basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text flex items-center gap-3 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary aria-disabled:pointer-events-none aria-disabled:opacity-50',\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"\n basicItem().isActiveMatchOptions ?? (basicItem().exactMatch ? exactMatch : inexactMatch)\n \"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [attr.aria-disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n [routerLink]=\"basicItem().link\"\n [queryParams]=\"basicItem().queryParams\"\n [queryParamsHandling]=\"basicItem().queryParamsHandling ?? null\"\n [fragment]=\"basicItem().fragment ?? undefined\"\n [preserveFragment]=\"basicItem().preserveFragment ?? false\"\n [target]=\"basicItem().target ?? undefined\"\n (click)=\"runAction()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate', item().classes?.title)\">{{ basicItem().title }}</span>\n @if (basicItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n }\n </a>\n } @else if (basicItem().link && basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text flex items-center gap-3 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n item().classes?.wrapper\n )\n \"\n [attr.href]=\"basicItem().link\"\n [attr.target]=\"basicItem().target ?? '_blank'\"\n rel=\"noopener noreferrer\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text flex w-full items-center gap-3 rounded-md px-3 py-2 text-left text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n item().classes?.wrapper\n )\n \"\n [disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"runAction()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </button>\n }\n }\n }\n `,\n})\nexport class UiNavItemComponent {\n private readonly nav = inject(NavigationService);\n protected readonly cn = cn;\n\n readonly item = input.required<NavigationItem>();\n readonly level = input<number>(0);\n /** Compact / icon-only rendering (sidebar `thin`). */\n readonly compact = input<boolean>(false);\n\n protected readonly exactMatch = {\n exact: true,\n paths: 'exact',\n queryParams: 'exact',\n fragment: 'exact',\n matrixParams: 'exact',\n } as const;\n protected readonly inexactMatch = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n } as const;\n\n protected readonly type = computed(() => this.item().type);\n\n protected readonly groupItem = computed(() => this.item() as NavigationGroupItem);\n protected readonly collapsableItem = computed(() => this.item() as NavigationCollapsableItem);\n protected readonly megaItem = computed(() => this.item() as NavigationMegaItem);\n protected readonly asideItem = computed(() => this.item() as NavigationAsideItem);\n protected readonly basicItem = computed(() => this.item() as NavigationBasicItem);\n\n protected readonly headingId = computed(() => {\n const id = this.item().id ?? '';\n return `nav-group-${id}`;\n });\n\n protected isGroupOpen(): boolean {\n const id = this.item().id;\n if (!id) return false;\n // auto-open when any descendant is active\n if (this.nav.isActive(id) && 'children' in this.item()) return true;\n return this.nav.isGroupOpen(id);\n }\n\n protected isTrailActive(): boolean {\n return this.nav.isActive(this.item().id);\n }\n\n protected toggleGroup(): void {\n const id = this.item().id;\n if (id) this.nav.toggleGroup(id);\n }\n\n protected runAction(): void {\n const item = this.item();\n if ('action' in item && typeof item.action === 'function') {\n item.action(item);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { filter, map } from 'rxjs/operators';\nimport { UiNavIconComponent } from '../shared/nav-icon.component';\nimport { UiNavItemComponent } from '../shared/nav-item.component';\nimport { NavigationService, DEFAULT_NAVIGATION_ID } from '../../core/services/navigation.service';\nimport type { NavigationItem, SidebarAppearance, SidebarPosition } from '../../core/types/navigation.type';\n\n/**\n * Vertical navigation (sidebar) — shadcn-styled.\n *\n * Variants:\n * - `default`: 17.5rem, label + icon\n * - `thin`: 4rem icon-only; hover memunculkan overlay expand (tidak push konten)\n *\n * Mobile (`< md`): saat `autoMobile=true` (default), host desktop disembunyikan\n * dan konten dirender lewat CDK Overlay drawer dengan focus trap. State buka\n * dikontrol lewat `NavigationService.mobileOpen`.\n */\n@Component({\n selector: 'sidebar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, UiNavIconComponent, UiNavItemComponent],\n host: {\n role: 'navigation',\n '[attr.aria-label]': 'ariaLabel()',\n '[class]': 'hostClasses()',\n '[attr.data-appearance]': 'resolvedAppearance()',\n '[attr.data-position]': 'position()',\n '[attr.data-expanded]': 'isExpanded()',\n '[hidden]': 'isMobile()',\n '(mouseenter)': 'onHoverEnter()',\n '(mouseleave)': 'onHoverLeave()',\n '(focusin)': 'onHoverEnter()',\n '(click)': 'onHostClick($event)',\n },\n template: `\n <div [class]=\"innerClasses()\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n\n <ng-template #body>\n @if (header()) {\n <div [class]=\"headerClasses()\">\n <div [class]=\"headerSlotClasses()\">\n <ng-content select=\"[sidebar-header]\" />\n </div>\n @if (!isMobile() && !isCompact()) {\n <button\n type=\"button\"\n data-sidebar-toggle\n class=\"ml-auto mr-2 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n [attr.aria-label]=\"toggleButtonLabel()\"\n [attr.title]=\"toggleButtonLabel()\"\n [attr.aria-pressed]=\"resolvedAppearance() === 'thin'\"\n (click)=\"toggleAppearance($event)\">\n <ui-nav-icon name=\"view_sidebar\" [size]=\"18\" class=\"text-current\" />\n </button>\n }\n </div>\n }\n <nav [class]=\"navClasses()\">\n @for (item of resolvedItems(); track item.id) {\n <ui-nav-item [item]=\"item\" [compact]=\"isCompact()\" />\n }\n </nav>\n <div [class]=\"footerClasses()\">\n <div [class]=\"footerSlotClasses()\">\n <ng-content select=\"[sidebar-footer]\" />\n </div>\n </div>\n </ng-template>\n\n <ng-template #drawerTpl>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n class=\"flex h-full w-72 max-w-[85vw] flex-col text-foreground shadow-xl\"\n [class.border-l]=\"position() === 'right'\"\n [class.border-brand]=\"position() === 'right'\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n </ng-template>\n `,\n})\nexport class SidebarComponent {\n private readonly nav = inject(NavigationService);\n private readonly bp = inject(BreakpointObserver);\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n private readonly doc = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly items = input<NavigationItem[]>([]);\n /** Registry key di `NavigationService`. Default `'main'`. */\n readonly navigationId = input<string>(DEFAULT_NAVIGATION_ID);\n readonly appearance = input<SidebarAppearance>('default');\n readonly position = input<SidebarPosition>('left');\n readonly ariaLabel = input<string>('Primary');\n readonly header = input<boolean>(true);\n readonly class = input<string>('');\n /** Auto switch ke CDK overlay drawer saat viewport `< md`. */\n readonly autoMobile = input<boolean>(true);\n /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */\n readonly autoRegister = input<boolean>(true);\n\n /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */\n protected readonly resolvedItems = computed(() => {\n const explicit = this.items();\n return explicit.length > 0 ? explicit : this.nav.getItems(this.navigationId())();\n });\n\n private readonly hovered = signal<boolean>(false);\n private readonly suppressHoverUntilLeave = signal<boolean>(false);\n\n private readonly drawerTpl = viewChild.required<TemplateRef<unknown>>('drawerTpl');\n private drawerRef: OverlayRef | null = null;\n private focusTrap: FocusTrap | null = null;\n private previouslyFocused: HTMLElement | null = null;\n\n /** True saat viewport `< md` (767.98px). */\n protected readonly isMobileMedia = toSignal(this.bp.observe('(max-width: 767.98px)').pipe(map((s) => s.matches)), {\n initialValue: false,\n });\n\n protected readonly isMobile = computed(() => this.autoMobile() && this.isMobileMedia());\n protected readonly resolvedCollapsed = computed(() => {\n if (this.nav.hasStoredSidebarCollapse()) {\n return this.nav.collapsed();\n }\n\n return this.appearance() === 'thin';\n });\n protected readonly resolvedAppearance = computed<SidebarAppearance>(() => {\n return this.resolvedCollapsed() ? 'thin' : 'default';\n });\n protected readonly hoverActive = computed(() => this.hovered() && !this.suppressHoverUntilLeave());\n protected readonly isExpanded = computed(() => !this.resolvedCollapsed() || this.hoverActive());\n protected readonly isCompact = computed(() => !this.isMobile() && this.resolvedCollapsed() && !this.hoverActive());\n protected readonly toggleButtonLabel = computed(() =>\n this.resolvedCollapsed() ? 'Expand sidebar' : 'Collapse sidebar',\n );\n\n constructor() {\n // Auto-register items ke service untuk active trail (hanya jika input non-kosong).\n effect(() => {\n const explicit = this.items();\n if (this.autoRegister() && explicit.length > 0) this.nav.registerItems(this.navigationId(), explicit);\n });\n\n // Kelola overlay drawer berdasarkan mobileOpen + isMobile.\n effect(() => {\n const open = this.nav.mobileOpen();\n const mobile = this.isMobile();\n if (mobile && open) this.openDrawer();\n else this.closeDrawer();\n });\n\n this.destroyRef.onDestroy(() => this.closeDrawer());\n }\n\n protected readonly hostClasses = computed(() => {\n const base = ['relative flex shrink-0 text-foreground', 'transition-[width] duration-200 ease-out'];\n if (this.resolvedCollapsed()) base.push('w-16');\n else base.push('[width:17.5rem]');\n if (this.position() === 'right') base.push('border-l', 'border-brand');\n return [...base, this.class()].join(' ');\n });\n\n protected readonly headerClasses = computed(() => {\n const base = ['flex h-12 items-center gap-2 border-b border-brand'];\n if (this.isCompact()) {\n base.push('justify-center px-2');\n }\n return base.join(' ');\n });\n\n protected readonly headerSlotClasses = computed(() => {\n const base = ['min-w-0'];\n if (this.isCompact()) {\n base.push(\n 'flex flex-1 items-center justify-center overflow-hidden',\n '[&>[sidebar-header]>*]:mx-auto',\n '[&>[sidebar-header]>*]:max-w-full',\n '[&>[sidebar-header]>*]:shrink-0',\n );\n } else {\n base.push('flex min-w-0 flex-1 items-center');\n }\n return base.join(' ');\n });\n\n protected readonly navClasses = computed(() => {\n const base = [\n 'flex-1 overflow-y-auto overflow-x-hidden scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10',\n ];\n if (this.isCompact()) {\n base.push(\n 'px-2',\n '[&_.ui-nav-text]:mx-auto',\n '[&_.ui-nav-text]:w-10',\n '[&_.ui-nav-text]:justify-center',\n '[&_.ui-nav-text]:px-0',\n );\n }\n return base.join(' ');\n });\n\n protected readonly footerClasses = computed(() => {\n const base = ['h-12 border-t border-brand'];\n if (this.isCompact()) {\n base.push('flex items-center justify-center px-2');\n }\n return base.join(' ');\n });\n\n protected readonly footerSlotClasses = computed(() => {\n const base = ['h-full'];\n if (this.isCompact()) {\n base.push(\n 'flex h-full items-center justify-center overflow-hidden',\n '[&>[sidebar-footer]>*]:mx-auto',\n '[&>[sidebar-footer]>*]:w-auto',\n '[&>[sidebar-footer]>*]:max-w-full',\n '[&>[sidebar-footer]>*]:justify-center',\n '[&>[sidebar-footer]>*]:gap-0',\n '[&>[sidebar-footer]>*]:px-0',\n '[&>[sidebar-footer]>*>*:first-child]:mx-auto',\n '[&>[sidebar-footer]>*>*:nth-child(n+2)]:hidden',\n );\n } else {\n base.push('w-full');\n }\n return base.join(' ');\n });\n\n protected readonly innerClasses = computed(() => {\n const overlayActive = this.resolvedCollapsed() && this.hoverActive();\n const base = ['flex h-full flex-col transition-[width] duration-200 ease-out'];\n if (this.resolvedCollapsed()) {\n base.push('bg-background');\n }\n if (overlayActive) {\n base.push(\n 'absolute inset-y-0 z-30 shadow-xl [width:17.5rem]',\n this.position() === 'right' ? 'right-0 border-l border-brand' : 'left-0 border-r border-brand',\n );\n } else {\n base.push('w-full');\n }\n return base.join(' ');\n });\n\n protected onHoverEnter(): void {\n if (!this.resolvedCollapsed() || this.isMobile() || this.suppressHoverUntilLeave()) return;\n this.hovered.set(true);\n }\n\n protected onHoverLeave(): void {\n this.suppressHoverUntilLeave.set(false);\n if (this.resolvedCollapsed()) this.hovered.set(false);\n }\n\n protected toggleAppearance(event: MouseEvent): void {\n event.stopPropagation();\n const nextCollapsed = !this.resolvedCollapsed();\n this.nav.setCollapsed(nextCollapsed);\n this.hovered.set(false);\n this.suppressHoverUntilLeave.set(nextCollapsed);\n }\n\n /** Touch fallback: tap pada strip thin (ketika belum expanded) untuk expand. */\n protected onHostClick(event: MouseEvent): void {\n if (!this.resolvedCollapsed() || this.isMobile()) return;\n if (this.hovered()) return;\n const target = event.target as HTMLElement | null;\n // Biarkan klik pada control interaktif terus propagate (tidak intercept).\n if (target && target.closest('a,button,[role=\"menuitem\"]')) return;\n this.hovered.set(true);\n }\n\n private openDrawer(): void {\n if (this.drawerRef) return;\n const side = this.position();\n const pos = this.overlay.position().global().top('0');\n if (side === 'right') pos.right('0');\n else pos.left('0');\n\n this.drawerRef = this.overlay.create({\n positionStrategy: pos,\n height: '100vh',\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n panelClass: ['sidebar-drawer'],\n });\n\n const portal = new TemplatePortal(this.drawerTpl(), this.vcr);\n const viewRef = this.drawerRef.attach(portal);\n viewRef.detectChanges();\n\n const root = this.drawerRef.overlayElement;\n this.focusTrap = this.focusTrapFactory.create(root);\n this.previouslyFocused = this.doc.activeElement as HTMLElement | null;\n queueMicrotask(() => this.focusTrap?.focusInitialElementWhenReady());\n\n this.drawerRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.nav.closeMobile());\n\n this.drawerRef\n .keydownEvents()\n .pipe(\n filter((e) => e.key === 'Escape'),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => this.nav.closeMobile());\n }\n\n private closeDrawer(): void {\n if (!this.drawerRef) return;\n this.focusTrap?.destroy();\n this.focusTrap = null;\n this.drawerRef.dispose();\n this.drawerRef = null;\n this.previouslyFocused?.focus?.();\n this.previouslyFocused = null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { UiNavIconComponent } from '../shared/nav-icon.component';\nimport { UiNavItemComponent } from '../shared/nav-item.component';\nimport { NavigationService, DEFAULT_NAVIGATION_ID } from '../../core/services/navigation.service';\nimport type {\n NavigationBasicItem,\n NavigationCollapsableItem,\n NavigationGroupItem,\n NavigationItem,\n TopbarAppearance,\n} from '../../core/types/navigation.type';\n\ninterface ActiveOverlay {\n ref: OverlayRef;\n id: string;\n}\n\n/**\n * Horizontal navigation (topbar) — shadcn-styled.\n */\n@Component({\n selector: 'topbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, UiNavIconComponent, UiNavItemComponent],\n host: {\n role: 'navigation',\n '[attr.aria-label]': 'ariaLabel()',\n '[class]': 'hostClasses()',\n '[attr.data-appearance]': 'appearance()',\n },\n template: `\n <div class=\"flex h-full w-full items-center gap-3 px-1\">\n <div data-topbar-slot=\"start\" class=\"flex shrink-0 items-center gap-2\">\n @if (showHamburger()) {\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-9 items-center justify-center rounded-md text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring md:hidden\"\n [attr.aria-label]=\"hamburgerLabel()\"\n [attr.aria-expanded]=\"nav.mobileOpen()\"\n (click)=\"nav.toggleMobile()\">\n <ui-nav-icon name=\"menu\" [size]=\"18\" />\n </button>\n }\n <ng-content select=\"[topbar-start]\" />\n </div>\n\n <div data-topbar-slot=\"nav\" class=\"flex min-w-0 flex-1 items-center justify-center\">\n <ul\n class=\"flex min-w-0 flex-1 items-center justify-center gap-1\"\n role=\"menubar\"\n (keydown)=\"onMenubarKeydown($event)\">\n @for (item of resolvedItems(); track item.id) {\n <li role=\"none\" class=\"relative\">\n @switch (item.type) {\n @case ('basic') {\n @let basic = asBasic(item);\n <a\n role=\"menuitem\"\n class=\"ui-nav-text inline-flex items-center gap-2 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary\"\n [routerLink]=\"basic.link\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.text-primary]=\"rla.isActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [target]=\"basic.target ?? undefined\">\n @if (basic.icon) {\n <ui-nav-icon [name]=\"basic.icon\" [size]=\"18\" />\n }\n <span>{{ basic.title }}</span>\n </a>\n }\n @case ('collapsable') {\n @let col = asCollapsable(item);\n <button\n #trigger\n type=\"button\"\n role=\"menuitem\"\n class=\"ui-nav-text inline-flex items-center gap-2 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n [class.text-primary]=\"isItemActive(col.id)\"\n [attr.aria-expanded]=\"openId() === col.id\"\n [attr.aria-haspopup]=\"'menu'\"\n (click)=\"toggleDropdown(trigger, item)\"\n (mouseenter)=\"openDropdown(trigger, item)\">\n @if (col.icon) {\n <ui-nav-icon [name]=\"col.icon\" [size]=\"18\" />\n }\n <span>{{ col.title }}</span>\n <ui-nav-icon name=\"expand_more\" [size]=\"18\" />\n </button>\n }\n @case ('group') {\n @let group = asGroup(item);\n <button\n #trigger\n type=\"button\"\n role=\"menuitem\"\n class=\"ui-nav-text inline-flex items-center gap-2 rounded-md px-3 py-2 text-foreground/80 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n [class.text-primary]=\"isItemActive(group.id)\"\n [attr.aria-expanded]=\"openId() === group.id\"\n [attr.aria-haspopup]=\"'menu'\"\n (click)=\"toggleDropdown(trigger, item)\"\n (mouseenter)=\"openDropdown(trigger, item)\">\n @if (group.icon) {\n <ui-nav-icon [name]=\"group.icon\" [size]=\"18\" />\n }\n <span>{{ group.title }}</span>\n <ui-nav-icon name=\"expand_more\" [size]=\"18\" />\n </button>\n }\n @default {\n <span class=\"ui-nav-heading px-3 py-2 text-muted-foreground\">\n {{ item.title }}\n </span>\n }\n }\n </li>\n }\n </ul>\n </div>\n\n <div data-topbar-slot=\"end\" [class]=\"endSlotClasses()\">\n <ng-content select=\"[topbar-end]\" />\n </div>\n </div>\n\n <!-- Dropdown template -->\n <ng-template #dropdownTpl let-item>\n <div role=\"menu\" class=\"min-w-56 border border-brand bg-background/95 p-1\" (keydown)=\"onPanelKeydown($event)\">\n @for (child of item.children; track child.id) {\n <ui-nav-item [item]=\"child\" />\n }\n </div>\n </ng-template>\n `,\n})\nexport class TopbarComponent {\n protected readonly nav = inject(NavigationService);\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly items = input<NavigationItem[]>([]);\n /** Registry key di `NavigationService`. Default `'main'`. */\n readonly navigationId = input<string>(DEFAULT_NAVIGATION_ID);\n readonly appearance = input<TopbarAppearance>('default');\n readonly ariaLabel = input<string>('Primary');\n readonly class = input<string>('');\n /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */\n readonly autoRegister = input<boolean>(true);\n /** Tampilkan hamburger di `< md` yang men-toggle mobile drawer sidebar. */\n readonly showHamburger = input<boolean>(true);\n readonly hamburgerLabel = input<string>('Open navigation');\n\n /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */\n protected readonly resolvedItems = computed(() => {\n const explicit = this.items();\n return explicit.length > 0 ? explicit : this.nav.getItems(this.navigationId())();\n });\n\n protected readonly openId = signal<string | null>(null);\n private active: ActiveOverlay | null = null;\n\n private readonly dropdownTpl = viewChild.required<TemplateRef<unknown>>('dropdownTpl');\n\n constructor() {\n effect(() => {\n const explicit = this.items();\n if (this.autoRegister() && explicit.length > 0) this.nav.registerItems(this.navigationId(), explicit);\n });\n this.destroyRef.onDestroy(() => this.closeAll());\n }\n\n protected readonly hostClasses = computed(() => {\n return ['sticky top-0 z-20 flex h-11 w-full items-center', this.class()].join(' ');\n });\n\n protected readonly endSlotClasses = computed(() => {\n const base = ['flex h-full shrink-0 items-center justify-end gap-2 overflow-hidden'];\n base.push(\n '[&>[topbar-end]]:flex',\n '[&>[topbar-end]]:min-w-0',\n '[&>[topbar-end]]:max-w-full',\n '[&>[topbar-end]]:items-center',\n '[&>[topbar-end]]:justify-end',\n '[&>[topbar-end]]:gap-2',\n '[&>[topbar-end]>*]:w-auto',\n '[&>[topbar-end]>*]:max-w-full',\n '[&>[topbar-end]>*]:justify-end',\n '[&>[topbar-end]>*]:gap-0',\n '[&>[topbar-end]>*]:px-2',\n '[&>[topbar-end]>*>*:first-child]:ml-auto',\n '[&>[topbar-end]>*>*:nth-child(n+2)]:hidden',\n );\n return base.join(' ');\n });\n\n protected asBasic(i: NavigationItem): NavigationBasicItem {\n return i as NavigationBasicItem;\n }\n protected asCollapsable(i: NavigationItem): NavigationCollapsableItem {\n return i as NavigationCollapsableItem;\n }\n protected asGroup(i: NavigationItem): NavigationGroupItem {\n return i as NavigationGroupItem;\n }\n\n protected isItemActive(id: string | undefined): boolean {\n return this.nav.isActive(id);\n }\n\n protected toggleDropdown(trigger: HTMLElement, item: NavigationItem): void {\n if (this.openId() === item.id) this.closeAll();\n else this.openDropdown(trigger, item);\n }\n\n protected openDropdown(trigger: HTMLElement, item: NavigationItem): void {\n if (this.openId() === item.id) return;\n this.closeAll();\n this.attach(trigger, item, this.dropdownTpl());\n }\n\n private attach(trigger: HTMLElement, item: NavigationItem, tpl: TemplateRef<unknown>): void {\n const strategy = this.overlay\n .position()\n .flexibleConnectedTo(trigger)\n .withFlexibleDimensions(false)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n ]);\n\n const ref = this.overlay.create({\n positionStrategy: strategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: ['ui-dropdown-panel'],\n });\n\n const portal = new TemplatePortal(tpl, this.vcr, { $implicit: item });\n ref.attach(portal);\n this.active = { ref, id: item.id ?? '' };\n this.openId.set(item.id ?? null);\n\n merge(ref.backdropClick(), ref.keydownEvents().pipe(filter((e) => e.key === 'Escape')))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.closeAll();\n trigger.focus();\n });\n }\n\n protected closeAll(): void {\n if (this.active) {\n this.active.ref.dispose();\n this.active = null;\n }\n this.openId.set(null);\n }\n\n /** Menubar keyboard navigation: ArrowLeft/Right antar trigger, Home/End, ArrowDown fokus panel. */\n protected onMenubarKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const root = this.host.nativeElement;\n const triggers = Array.from(root.querySelectorAll<HTMLElement>('ul[role=\"menubar\"] [role=\"menuitem\"]')).filter(\n (el) => !el.hasAttribute('disabled'),\n );\n if (triggers.length === 0) return;\n const currentIndex = triggers.indexOf(document.activeElement as HTMLElement);\n\n if (key === 'ArrowDown' && currentIndex !== -1) {\n event.preventDefault();\n // Jika open, fokus item pertama panel; jika belum, focus tetap (panel akan dibuka via click/mouseenter).\n queueMicrotask(() => this.focusFirstInPanel());\n return;\n }\n if (key !== 'ArrowLeft' && key !== 'ArrowRight' && key !== 'Home' && key !== 'End') return;\n let nextIndex = currentIndex;\n if (key === 'ArrowRight') nextIndex = (currentIndex + 1 + triggers.length) % triggers.length;\n else if (key === 'ArrowLeft') nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n else if (key === 'Home') nextIndex = 0;\n else if (key === 'End') nextIndex = triggers.length - 1;\n if (nextIndex !== currentIndex && triggers[nextIndex]) {\n event.preventDefault();\n triggers[nextIndex].focus();\n }\n }\n\n /** Arrow-key navigation dalam dropdown panel. */\n protected onPanelKeydown(event: KeyboardEvent): void {\n const key = event.key;\n if (\n key !== 'ArrowDown' &&\n key !== 'ArrowUp' &&\n key !== 'ArrowLeft' &&\n key !== 'ArrowRight' &&\n key !== 'Home' &&\n key !== 'End'\n )\n return;\n const panel = this.active?.ref.overlayElement;\n if (!panel) return;\n const items = this.collectPanelFocusables(panel);\n if (items.length === 0) return;\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\n let nextIndex = currentIndex;\n if (key === 'ArrowDown' || key === 'ArrowRight') nextIndex = (currentIndex + 1 + items.length) % items.length;\n else if (key === 'ArrowUp' || key === 'ArrowLeft') nextIndex = (currentIndex - 1 + items.length) % items.length;\n else if (key === 'Home') nextIndex = 0;\n else if (key === 'End') nextIndex = items.length - 1;\n if (nextIndex !== currentIndex && items[nextIndex]) {\n event.preventDefault();\n items[nextIndex].focus();\n }\n }\n\n private collectPanelFocusables(root: HTMLElement): HTMLElement[] {\n return Array.from(\n root.querySelectorAll<HTMLElement>('a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'),\n ).filter((el) => el.offsetParent !== null || el.getClientRects().length > 0);\n }\n\n private focusFirstInPanel(): void {\n const panel = this.active?.ref.overlayElement;\n if (!panel) return;\n const items = this.collectPanelFocusables(panel);\n items[0]?.focus();\n }\n}\n","import { NavigationItem } from '../core/types/navigation.type';\n\nexport const DemoNavigationData: NavigationItem[] = [\n {\n id: 'documentation',\n title: 'Documentation',\n subtitle: 'Guides and getting started resources',\n type: 'group',\n icon: 'menu_book',\n children: [\n {\n id: 'documentation-introduction',\n title: 'Introduction',\n type: 'basic',\n icon: 'menu_book',\n link: '/docs/introduction',\n },\n {\n id: 'documentation-installation',\n title: 'Installation',\n type: 'basic',\n icon: 'download',\n link: '/docs/installation',\n },\n {\n id: 'documentation-getting-started',\n title: 'Getting started',\n type: 'basic',\n icon: 'rocket_launch',\n link: '/docs/getting-started',\n },\n {\n id: 'documentation-upgrade-guide',\n title: 'Upgrade Guide',\n type: 'basic',\n icon: 'arrow_circle_up',\n link: '/docs/upgrade-guide',\n },\n {\n id: 'documentation-changelog',\n title: 'Changelog',\n type: 'basic',\n icon: 'history',\n link: '/docs/changelog',\n },\n {\n id: 'documentation-icon-lucide',\n title: 'Lucide Icons',\n type: 'basic',\n icon: 'star',\n link: '/lucide-icons',\n badge: {\n title: 'Demo',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-blue-500 text-white',\n },\n },\n ],\n },\n {\n id: 'user-interface',\n title: 'User Interface',\n subtitle: 'Components and design elements',\n type: 'group',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-material-components',\n title: 'Material Components',\n type: 'collapsable',\n icon: 'deployed_code',\n children: [\n {\n id: 'user-interface-material-components-inputs-forms',\n title: 'Inputs & Forms',\n type: 'collapsable',\n icon: 'input',\n children: [\n {\n id: 'user-interface-material-components-inputs-forms-autocomplete',\n title: 'Autocomplete',\n type: 'basic',\n icon: 'search',\n link: '/ui/material/autocomplete',\n },\n {\n id: 'user-interface-material-components-inputs-forms-checkbox',\n title: 'Checkbox',\n type: 'basic',\n icon: 'check_box',\n link: '/ui/material/checkbox',\n },\n {\n id: 'user-interface-material-components-inputs-forms-datepicker',\n title: 'Datepicker',\n type: 'basic',\n icon: 'calendar_today',\n link: '/ui/material/datepicker',\n },\n {\n id: 'user-interface-material-components-inputs-forms-form-field',\n title: 'Form field',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/material/form-field',\n },\n {\n id: 'user-interface-material-components-inputs-forms-input',\n title: 'Input',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/material/input',\n },\n {\n id: 'user-interface-material-components-inputs-forms-radio-button',\n title: 'Radio button',\n type: 'basic',\n icon: 'radio_button_checked',\n link: '/ui/material/radio',\n },\n {\n id: 'user-interface-material-components-inputs-forms-select',\n title: 'Select',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/material/select',\n },\n {\n id: 'user-interface-material-components-inputs-forms-slider',\n title: 'Slider',\n type: 'basic',\n icon: 'tune',\n link: '/ui/material/slider',\n },\n {\n id: 'user-interface-material-components-inputs-forms-slide-toggle',\n title: 'Slide toggle',\n type: 'basic',\n icon: 'toggle_on',\n link: '/ui/material/slide-toggle',\n },\n ],\n },\n {\n id: 'user-interface-material-components-buttons-actions',\n title: 'Buttons & Actions',\n type: 'collapsable',\n icon: 'ads_click',\n children: [\n {\n id: 'user-interface-material-components-buttons-actions-button',\n title: 'Button',\n type: 'basic',\n icon: 'crop_square',\n link: '/ui/material/button',\n },\n {\n id: 'user-interface-material-components-buttons-actions-button-toggle',\n title: 'Button toggle',\n type: 'basic',\n icon: 'view_column',\n link: '/ui/material/button-toggle',\n },\n {\n id: 'user-interface-material-components-buttons-actions-chips',\n title: 'Chips',\n type: 'basic',\n icon: 'label',\n link: '/ui/material/chips',\n badge: {\n title: 'New',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-green-500 text-white',\n },\n },\n {\n id: 'user-interface-material-components-buttons-actions-menu',\n title: 'Menu',\n type: 'basic',\n icon: 'menu',\n link: '/ui/material/menu',\n },\n {\n id: 'user-interface-material-components-buttons-actions-ripples',\n title: 'Ripples',\n type: 'basic',\n icon: 'waves',\n link: '/ui/material/ripples',\n },\n ],\n },\n {\n id: 'user-interface-material-components-layout-containers',\n title: 'Layout & Containers',\n type: 'collapsable',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-material-components-layout-containers-card',\n title: 'Card',\n type: 'basic',\n icon: 'credit_card',\n link: '/ui/material/card',\n },\n {\n id: 'user-interface-material-components-layout-containers-divider',\n title: 'Divider',\n type: 'basic',\n icon: 'remove',\n link: '/ui/material/divider',\n },\n {\n id: 'user-interface-material-components-layout-containers-expansion-panel',\n title: 'Expansion Panel',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/material/expansion',\n },\n {\n id: 'user-interface-material-components-layout-containers-grid-list',\n title: 'Grid list',\n type: 'basic',\n icon: 'grid_view',\n link: '/ui/material/grid-list',\n },\n {\n id: 'user-interface-material-components-layout-containers-list',\n title: 'List',\n type: 'basic',\n icon: 'list',\n link: '/ui/material/list',\n },\n {\n id: 'user-interface-material-components-layout-containers-sidenav',\n title: 'Sidenav',\n type: 'basic',\n icon: 'view_sidebar',\n link: '/ui/material/sidenav',\n },\n {\n id: 'user-interface-material-components-layout-containers-tabs',\n title: 'Tabs',\n type: 'basic',\n icon: 'tab',\n link: '/ui/material/tabs',\n },\n {\n id: 'user-interface-material-components-layout-containers-toolbar',\n title: 'Toolbar',\n type: 'basic',\n icon: 'build',\n link: '/ui/material/toolbar',\n },\n ],\n },\n {\n id: 'user-interface-material-components-data-display',\n title: 'Data & Display',\n type: 'collapsable',\n icon: 'bar_chart',\n children: [\n {\n id: 'user-interface-material-components-data-display-badge',\n title: 'Badge',\n type: 'basic',\n icon: 'verified',\n link: '/ui/material/badge',\n },\n {\n id: 'user-interface-material-components-data-display-icon',\n title: 'Icon',\n type: 'basic',\n icon: 'star',\n link: '/ui/material/icon',\n },\n {\n id: 'user-interface-material-components-data-display-paginator',\n title: 'Paginator',\n type: 'basic',\n icon: 'first_page',\n link: '/ui/material/paginator',\n },\n {\n id: 'user-interface-material-components-data-display-progress-bar',\n title: 'Progress bar',\n type: 'basic',\n icon: 'hourglass_empty',\n link: '/ui/material/progress-bar',\n },\n {\n id: 'user-interface-material-components-data-display-progress-spinner',\n title: 'Progress spinner',\n type: 'basic',\n icon: 'progress_activity',\n link: '/ui/material/progress-spinner',\n },\n {\n id: 'user-interface-material-components-data-display-sort',\n title: 'Sort header',\n type: 'basic',\n icon: 'swap_vert',\n link: '/ui/material/sort',\n },\n {\n id: 'user-interface-material-components-data-display-table',\n title: 'Table',\n type: 'basic',\n icon: 'table_chart',\n link: '/ui/material/table',\n },\n {\n id: 'user-interface-material-components-data-display-tree',\n title: 'Tree',\n type: 'basic',\n icon: 'hub',\n link: '/ui/material/tree',\n },\n ],\n },\n {\n id: 'user-interface-material-components-overlays-modals',\n title: 'Overlays & Modals',\n type: 'collapsable',\n icon: 'layers',\n children: [\n {\n id: 'user-interface-material-components-overlays-modals-bottom-sheet',\n title: 'Bottom Sheet',\n type: 'basic',\n icon: 'south',\n link: '/ui/material/bottom-sheet',\n },\n {\n id: 'user-interface-material-components-overlays-modals-dialog',\n title: 'Dialog',\n type: 'basic',\n icon: 'chat',\n link: '/ui/material/dialog',\n },\n {\n id: 'user-interface-material-components-overlays-modals-snack-bar',\n title: 'Snack-bar',\n type: 'basic',\n icon: 'notifications',\n link: '/ui/material/snack-bar',\n },\n {\n id: 'user-interface-material-components-overlays-modals-tooltip',\n title: 'Tooltip',\n type: 'basic',\n icon: 'help',\n link: '/ui/material/tooltip',\n },\n ],\n },\n {\n id: 'user-interface-material-components-navigation-stepper',\n title: 'Navigation & Steps',\n type: 'collapsable',\n icon: 'account_tree',\n children: [\n {\n id: 'user-interface-material-components-navigation-stepper-stepper',\n title: 'Stepper',\n type: 'basic',\n icon: 'account_tree',\n link: '/ui/material/stepper',\n },\n ],\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk',\n title: 'Angular CDK',\n type: 'collapsable',\n icon: 'widgets',\n children: [\n {\n id: 'user-interface-angular-cdk-accessibility-navigation',\n title: 'Accessibility & Navigation',\n type: 'collapsable',\n icon: 'accessibility',\n children: [\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-a11y',\n title: 'Accessibility',\n type: 'basic',\n icon: 'accessibility',\n link: '/ui/cdk/a11y',\n },\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-focus-trap',\n title: 'Focus Trap',\n type: 'basic',\n icon: 'center_focus_strong',\n link: '/ui/cdk/focus-trap',\n },\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-live-announcer',\n title: 'Live Announcer',\n type: 'basic',\n icon: 'campaign',\n link: '/ui/cdk/live-announcer',\n },\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-listbox',\n title: 'Listbox',\n type: 'basic',\n icon: 'list',\n link: '/ui/cdk/listbox',\n },\n {\n id: 'user-interface-angular-cdk-accessibility-navigation-menu-cdk',\n title: 'Menu',\n type: 'basic',\n icon: 'menu',\n link: '/ui/cdk/menu',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning',\n title: 'Layout & Positioning',\n type: 'collapsable',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-angular-cdk-layout-positioning-layout',\n title: 'Layout',\n type: 'basic',\n icon: 'dashboard',\n link: '/ui/cdk/layout',\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning-overlay',\n title: 'Overlay',\n type: 'basic',\n icon: 'layers',\n link: '/ui/cdk/overlay',\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning-portal',\n title: 'Portal',\n type: 'basic',\n icon: 'radio_button_checked',\n link: '/ui/cdk/portal',\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning-scrolling',\n title: 'Scrolling',\n type: 'basic',\n icon: 'unfold_more',\n link: '/ui/cdk/scrolling',\n },\n {\n id: 'user-interface-angular-cdk-layout-positioning-virtual-scrolling',\n title: 'Virtual Scrolling',\n type: 'basic',\n icon: 'view_agenda',\n link: '/ui/cdk/virtual-scrolling',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-interaction-behavior',\n title: 'Interaction & Behavior',\n type: 'collapsable',\n icon: 'pan_tool',\n children: [\n {\n id: 'user-interface-angular-cdk-interaction-behavior-drag-drop',\n title: 'Drag and Drop',\n type: 'basic',\n icon: 'open_with',\n link: '/ui/cdk/drag-drop',\n },\n {\n id: 'user-interface-angular-cdk-interaction-behavior-observers',\n title: 'Observers',\n type: 'basic',\n icon: 'visibility',\n link: '/ui/cdk/observers',\n },\n {\n id: 'user-interface-angular-cdk-interaction-behavior-platform',\n title: 'Platform',\n type: 'basic',\n icon: 'devices',\n link: '/ui/cdk/platform',\n },\n {\n id: 'user-interface-angular-cdk-interaction-behavior-stepper-cdk',\n title: 'Stepper',\n type: 'basic',\n icon: 'account_tree',\n link: '/ui/cdk/stepper',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-forms-data',\n title: 'Forms & Data',\n type: 'collapsable',\n icon: 'storage',\n children: [\n {\n id: 'user-interface-angular-cdk-forms-data-accordion',\n title: 'Accordion',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/cdk/accordion',\n },\n {\n id: 'user-interface-angular-cdk-forms-data-table-cdk',\n title: 'Table',\n type: 'basic',\n icon: 'table_chart',\n link: '/ui/cdk/table',\n },\n {\n id: 'user-interface-angular-cdk-forms-data-tree-cdk',\n title: 'Tree',\n type: 'basic',\n icon: 'hub',\n link: '/ui/cdk/tree',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers',\n title: 'Utilities & Helpers',\n type: 'collapsable',\n icon: 'build',\n children: [\n {\n id: 'user-interface-angular-cdk-utilities-helpers-bidi',\n title: 'Bidirectionality',\n type: 'basic',\n icon: 'swap_horiz',\n link: '/ui/cdk/bidi',\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers-clipboard',\n title: 'Clipboard',\n type: 'basic',\n icon: 'content_paste',\n link: '/ui/cdk/clipboard',\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers-coercion',\n title: 'Coercion',\n type: 'basic',\n icon: 'shuffle',\n link: '/ui/cdk/coercion',\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers-collections',\n title: 'Collections',\n type: 'basic',\n icon: 'folder',\n link: '/ui/cdk/collections',\n },\n {\n id: 'user-interface-angular-cdk-utilities-helpers-keycodes',\n title: 'Keycodes',\n type: 'basic',\n icon: 'keyboard',\n link: '/ui/cdk/keycodes',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-testing-tools',\n title: 'Testing Tools',\n type: 'collapsable',\n icon: 'bug_report',\n children: [\n {\n id: 'user-interface-angular-cdk-testing-tools-component-harnesses',\n title: 'Component Harnesses',\n type: 'basic',\n icon: 'science',\n link: '/ui/cdk/testing',\n },\n {\n id: 'user-interface-angular-cdk-testing-tools-test-harnesses',\n title: 'Test Harnesses',\n type: 'basic',\n icon: 'science',\n link: '/ui/cdk/test-harnesses',\n },\n ],\n },\n {\n id: 'user-interface-angular-cdk-advanced-feature',\n title: 'Advanced feature',\n type: 'collapsable',\n icon: 'settings',\n children: [\n {\n id: 'user-interface-angular-cdk-advanced-feature-dialog-cdk',\n title: 'Dialog',\n type: 'basic',\n icon: 'chat',\n link: '/ui/cdk/dialog',\n },\n {\n id: 'user-interface-angular-cdk-advanced-feature-text-field',\n title: 'Text Field',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/cdk/text-field',\n },\n ],\n },\n ],\n },\n {\n id: 'user-interface-tailwind',\n title: 'Tailwind CSS',\n type: 'collapsable',\n icon: 'air',\n children: [\n {\n id: 'user-interface-tailwind-css-heading',\n title: 'Heading',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/tailwind/heading',\n },\n {\n id: 'user-interface-tailwind-data-display',\n title: 'Data Display',\n type: 'basic',\n icon: 'bar_chart',\n link: '/ui/tailwind/data-display',\n },\n {\n id: 'user-interface-tailwind-list',\n title: 'List',\n type: 'basic',\n icon: 'list',\n link: '/ui/tailwind/list',\n },\n {\n id: 'user-interface-tailwind-form',\n title: 'Form',\n type: 'basic',\n icon: 'dynamic_form',\n link: '/ui/tailwind/form',\n },\n {\n id: 'user-interface-tailwind-feedback',\n title: 'Feedback',\n type: 'basic',\n icon: 'report',\n link: '/ui/tailwind/feedback',\n },\n ],\n },\n ],\n },\n {\n id: 'feature',\n title: 'Features',\n subtitle: 'Advanced functionality and customization options',\n type: 'group',\n icon: 'settings',\n children: [\n {\n id: 'feature-theme',\n title: 'Themes',\n type: 'collapsable',\n icon: 'palette',\n children: [\n {\n id: 'feature-theme-dark-mode',\n title: 'Dark Mode',\n type: 'basic',\n icon: 'dark_mode',\n link: '/feature/theme/dark-mode',\n },\n {\n id: 'feature-theme-color',\n title: 'Color Schemes',\n type: 'basic',\n icon: 'palette',\n link: '/feature/theme/color-schemes',\n badge: {\n title: 'Beta',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-yellow-500 text-white',\n },\n },\n {\n id: 'feature-layout',\n title: 'Layout',\n type: 'collapsable',\n icon: 'dashboard',\n children: [\n {\n id: 'feature-layout-apps',\n title: 'Application',\n type: 'collapsable',\n icon: 'web',\n children: [\n {\n id: 'feature-layout-apps-vertical',\n title: 'Vertical',\n type: 'basic',\n icon: 'view_sidebar',\n link: '/feature/layout/application/vertical',\n },\n {\n id: 'feature-layout-apps-horizontal',\n title: 'Horizontal',\n type: 'basic',\n icon: 'view_column',\n link: '/feature/layout/application/horizontal',\n },\n ],\n },\n {\n id: 'feature-layout-page',\n title: 'Pages',\n type: 'collapsable',\n icon: 'description',\n children: [\n {\n id: 'feature-layout-page-page',\n title: 'Page',\n type: 'basic',\n icon: 'description',\n link: '/feature/layout/page/page',\n },\n {\n id: 'feature-layout-page-content',\n title: 'Content',\n type: 'basic',\n icon: 'description',\n link: '/feature/layout/page/content',\n },\n ],\n },\n ],\n },\n ],\n },\n {\n id: 'feature-navigation',\n title: 'Navigation',\n type: 'collapsable',\n icon: 'navigation',\n children: [\n {\n id: 'feature-navigation-horizontal-navigation',\n title: 'Horizontal ',\n type: 'basic',\n icon: 'view_column',\n link: '/feature/navigation/horizontal',\n },\n {\n id: 'feature-navigation-vertical-navigation',\n title: 'Vertical ',\n type: 'collapsable',\n icon: 'view_agenda',\n children: [\n {\n id: 'feature-navigation-vertical-navigation-default',\n title: 'Default',\n type: 'basic',\n icon: 'view_agenda',\n link: '/feature/navigation/vertical/default',\n },\n {\n id: 'feature-navigation-vertical-navigation-thin',\n title: 'Thin',\n type: 'basic',\n icon: 'view_agenda',\n link: '/feature/navigation/vertical/thin',\n },\n {\n id: 'feature-navigation-vertical-navigation-compact',\n title: 'Compact',\n type: 'basic',\n icon: 'view_agenda',\n link: '/feature/navigation/vertical/compact',\n },\n {\n id: 'feature-navigation-vertical-navigation-dense',\n title: 'Dense',\n type: 'basic',\n icon: 'view_agenda',\n link: '/feature/navigation/vertical/dense',\n },\n ],\n },\n ],\n },\n ],\n },\n];\n","/*\n * Public API Surface of @ojiepermana/angular/navigation\n */\n\n// Core\nexport * from './src/lib/core/types/navigation.type';\nexport * from './src/lib/core/services/navigation.service';\n\n// Shared\nexport * from './src/lib/components/shared/nav-icon.component';\nexport * from './src/lib/components/shared/nav-item.component';\n\n// Sidebar & Topbar\nexport * from './src/lib/components/sidebar/sidebar.component';\nexport * from './src/lib/components/topbar/topbar.component';\n\n// Demo data\nexport * from './src/lib/data/demo-navigation.data';\n\nexport const NAVIGATION_VERSION = '0.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|